@moonbeam-network/xcm-sdk 0.0.1-dev.3 → 0.0.1-dev.30

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 (109) hide show
  1. package/README.md +56 -16
  2. package/build/index.cjs +2 -0
  3. package/build/index.cjs.map +1 -0
  4. package/build/index.d.ts +319 -0
  5. package/build/index.mjs +2 -0
  6. package/build/index.mjs.map +1 -0
  7. package/package.json +30 -18
  8. package/build/cjs/examples/simple/package.json +0 -21
  9. package/build/cjs/examples/simple/tsconfig.json +0 -10
  10. package/build/cjs/src/contracts/XTokensContract/XTokensABI.json +0 -94
  11. package/build/cjs/src/contracts/XTokensContract/XTokensContract.d.ts +0 -11
  12. package/build/cjs/src/contracts/XTokensContract/XTokensContract.js +0 -44
  13. package/build/cjs/src/contracts/XTokensContract/XTokensContract.js.map +0 -1
  14. package/build/cjs/src/contracts/XTokensContract/index.d.ts +0 -1
  15. package/build/cjs/src/contracts/XTokensContract/index.js +0 -6
  16. package/build/cjs/src/contracts/XTokensContract/index.js.map +0 -1
  17. package/build/cjs/src/contracts/index.d.ts +0 -1
  18. package/build/cjs/src/contracts/index.js +0 -18
  19. package/build/cjs/src/contracts/index.js.map +0 -1
  20. package/build/cjs/src/index.d.ts +0 -3
  21. package/build/cjs/src/index.js +0 -20
  22. package/build/cjs/src/index.js.map +0 -1
  23. package/build/cjs/src/polkadot/PolkadotService.d.ts +0 -29
  24. package/build/cjs/src/polkadot/PolkadotService.js +0 -126
  25. package/build/cjs/src/polkadot/PolkadotService.js.map +0 -1
  26. package/build/cjs/src/polkadot/index.d.ts +0 -4
  27. package/build/cjs/src/polkadot/index.js +0 -21
  28. package/build/cjs/src/polkadot/index.js.map +0 -1
  29. package/build/cjs/src/polkadot/polkadot.api.d.ts +0 -2
  30. package/build/cjs/src/polkadot/polkadot.api.js +0 -33
  31. package/build/cjs/src/polkadot/polkadot.api.js.map +0 -1
  32. package/build/cjs/src/polkadot/polkadot.factory.d.ts +0 -3
  33. package/build/cjs/src/polkadot/polkadot.factory.js +0 -9
  34. package/build/cjs/src/polkadot/polkadot.factory.js.map +0 -1
  35. package/build/cjs/src/polkadot/polkadot.interfaces.d.ts +0 -7
  36. package/build/cjs/src/polkadot/polkadot.interfaces.js +0 -3
  37. package/build/cjs/src/polkadot/polkadot.interfaces.js.map +0 -1
  38. package/build/cjs/src/polkadot/polkadot.utils.d.ts +0 -1
  39. package/build/cjs/src/polkadot/polkadot.utils.js +0 -9
  40. package/build/cjs/src/polkadot/polkadot.utils.js.map +0 -1
  41. package/build/cjs/src/sdk/index.d.ts +0 -3
  42. package/build/cjs/src/sdk/index.js +0 -24
  43. package/build/cjs/src/sdk/index.js.map +0 -1
  44. package/build/cjs/src/sdk/sdk.d.ts +0 -2
  45. package/build/cjs/src/sdk/sdk.deposit.d.ts +0 -36
  46. package/build/cjs/src/sdk/sdk.deposit.js +0 -123
  47. package/build/cjs/src/sdk/sdk.deposit.js.map +0 -1
  48. package/build/cjs/src/sdk/sdk.interfaces.d.ts +0 -105
  49. package/build/cjs/src/sdk/sdk.interfaces.js +0 -10
  50. package/build/cjs/src/sdk/sdk.interfaces.js.map +0 -1
  51. package/build/cjs/src/sdk/sdk.js +0 -109
  52. package/build/cjs/src/sdk/sdk.js.map +0 -1
  53. package/build/cjs/src/sdk/sdk.utils.d.ts +0 -15
  54. package/build/cjs/src/sdk/sdk.utils.js +0 -69
  55. package/build/cjs/src/sdk/sdk.utils.js.map +0 -1
  56. package/build/cjs/src/sdk/sdk.withdraw.d.ts +0 -21
  57. package/build/cjs/src/sdk/sdk.withdraw.js +0 -77
  58. package/build/cjs/src/sdk/sdk.withdraw.js.map +0 -1
  59. package/build/mjs/examples/simple/package.json +0 -21
  60. package/build/mjs/examples/simple/tsconfig.json +0 -10
  61. package/build/mjs/src/contracts/XTokensContract/XTokensABI.json +0 -94
  62. package/build/mjs/src/contracts/XTokensContract/XTokensContract.d.ts +0 -11
  63. package/build/mjs/src/contracts/XTokensContract/XTokensContract.js +0 -44
  64. package/build/mjs/src/contracts/XTokensContract/XTokensContract.js.map +0 -1
  65. package/build/mjs/src/contracts/XTokensContract/index.d.ts +0 -1
  66. package/build/mjs/src/contracts/XTokensContract/index.js +0 -6
  67. package/build/mjs/src/contracts/XTokensContract/index.js.map +0 -1
  68. package/build/mjs/src/contracts/index.d.ts +0 -1
  69. package/build/mjs/src/contracts/index.js +0 -18
  70. package/build/mjs/src/contracts/index.js.map +0 -1
  71. package/build/mjs/src/index.d.ts +0 -3
  72. package/build/mjs/src/index.js +0 -20
  73. package/build/mjs/src/index.js.map +0 -1
  74. package/build/mjs/src/polkadot/PolkadotService.d.ts +0 -29
  75. package/build/mjs/src/polkadot/PolkadotService.js +0 -126
  76. package/build/mjs/src/polkadot/PolkadotService.js.map +0 -1
  77. package/build/mjs/src/polkadot/index.d.ts +0 -4
  78. package/build/mjs/src/polkadot/index.js +0 -21
  79. package/build/mjs/src/polkadot/index.js.map +0 -1
  80. package/build/mjs/src/polkadot/polkadot.api.d.ts +0 -2
  81. package/build/mjs/src/polkadot/polkadot.api.js +0 -33
  82. package/build/mjs/src/polkadot/polkadot.api.js.map +0 -1
  83. package/build/mjs/src/polkadot/polkadot.factory.d.ts +0 -3
  84. package/build/mjs/src/polkadot/polkadot.factory.js +0 -9
  85. package/build/mjs/src/polkadot/polkadot.factory.js.map +0 -1
  86. package/build/mjs/src/polkadot/polkadot.interfaces.d.ts +0 -7
  87. package/build/mjs/src/polkadot/polkadot.interfaces.js +0 -3
  88. package/build/mjs/src/polkadot/polkadot.interfaces.js.map +0 -1
  89. package/build/mjs/src/polkadot/polkadot.utils.d.ts +0 -1
  90. package/build/mjs/src/polkadot/polkadot.utils.js +0 -9
  91. package/build/mjs/src/polkadot/polkadot.utils.js.map +0 -1
  92. package/build/mjs/src/sdk/index.d.ts +0 -3
  93. package/build/mjs/src/sdk/index.js +0 -24
  94. package/build/mjs/src/sdk/index.js.map +0 -1
  95. package/build/mjs/src/sdk/sdk.d.ts +0 -2
  96. package/build/mjs/src/sdk/sdk.deposit.d.ts +0 -36
  97. package/build/mjs/src/sdk/sdk.deposit.js +0 -123
  98. package/build/mjs/src/sdk/sdk.deposit.js.map +0 -1
  99. package/build/mjs/src/sdk/sdk.interfaces.d.ts +0 -105
  100. package/build/mjs/src/sdk/sdk.interfaces.js +0 -10
  101. package/build/mjs/src/sdk/sdk.interfaces.js.map +0 -1
  102. package/build/mjs/src/sdk/sdk.js +0 -109
  103. package/build/mjs/src/sdk/sdk.js.map +0 -1
  104. package/build/mjs/src/sdk/sdk.utils.d.ts +0 -15
  105. package/build/mjs/src/sdk/sdk.utils.js +0 -69
  106. package/build/mjs/src/sdk/sdk.utils.js.map +0 -1
  107. package/build/mjs/src/sdk/sdk.withdraw.d.ts +0 -21
  108. package/build/mjs/src/sdk/sdk.withdraw.js +0 -77
  109. package/build/mjs/src/sdk/sdk.withdraw.js.map +0 -1
package/README.md CHANGED
@@ -1,16 +1,27 @@
1
- # XCM-SDK
1
+ ![Moonbeam](https://docs.moonbeam.network/images/builders/xcm/sdk/xcm-sdk-banner.png)
2
2
 
3
- ## :warning: This package is not production ready and is in heavy development!
3
+ The Moonbeam XCM SDK enables developers to easily deposit and withdraw assets to Moonbeam/Moonriver from the relay chain and other parachains in the Polkadot/Kusama ecosystem. With the SDK, you don't need to worry about determining the multilocation of the origin or destination assets or which extrinsics are used on which networks to send XCM transfers. To deposit or withdraw assets, you simply define the asset and origin chain you want to deposit from or withdraw back to, along with the sending account's signer, and the amount to send.
4
4
 
5
- ## Installation
5
+ # Documentation
6
+
7
+ - [usage](https://docs.moonbeam.network/builders/xcm/xcm-sdk/xcm-sdk/)
8
+ - [references](https://docs.moonbeam.network/builders/xcm/xcm-sdk/reference/)
9
+
10
+ # Installation
6
11
 
7
12
  ```bash
8
13
  npm i @moonbeam-network/xcm-config @moonbeam-network/xcm-sdk
9
14
  ```
10
15
 
11
- ## Usage
16
+ :warning: You need to have peer dependencies of SDK installed as well.
17
+
18
+ ```bash
19
+ npm i @polkadot/api-augment @polkadot/types @polkadot/util @polkadot/util-crypto ethers
20
+ ```
21
+
22
+ # Usage
12
23
 
13
- ### Init
24
+ ## Init
14
25
 
15
26
  ```typescript
16
27
  import { init } from '@moonbeam-network/xcm-sdk';
@@ -24,14 +35,14 @@ const { moonbeam } = init({
24
35
  });
25
36
  ```
26
37
 
27
- ### Accounts
38
+ ## Accounts
28
39
 
29
40
  ```typescript
30
41
  const moonbeamAddress = '0xeF46c7649270C912704fB09B75097f6E32208b85';
31
42
  const substrateAddress = '5DG5Fn3ww3KPza1RLoap6QJNzQfEvRebxypDGp35YuMX5y2K';
32
43
  ```
33
44
 
34
- ### Deposit
45
+ ## Deposit
35
46
 
36
47
  ```typescript
37
48
  // moonbeam.symbols is a list of asset symbols that you can deposit/withdraw
@@ -48,7 +59,7 @@ const { min, send } = await from(chains[0]).get(
48
59
  await send(min, (event) => console.log(event));
49
60
  ```
50
61
 
51
- ### Withdraw
62
+ ## Withdraw
52
63
 
53
64
  ```typescript
54
65
  const { chains, to } = moonbeam.withdraw(moonbeam.symbols[0]);
@@ -62,7 +73,7 @@ const { min, send } = await to(chains[0]).get(
62
73
  await send(min, (event) => console.log(event));
63
74
  ```
64
75
 
65
- ### Get balances
76
+ ## Get balances
66
77
 
67
78
  ```typescript
68
79
  const unsubscribe = await moonbeam.subscribeToAssetsBalanceInfo(
@@ -72,9 +83,10 @@ const unsubscribe = await moonbeam.subscribeToAssetsBalanceInfo(
72
83
  // xcDOT: 0.073742 (Polkadot DOT)
73
84
  // ...
74
85
  console.log(
75
- `${balance.symbol}: ${toDecimal(balance.balance, balance.decimals)} (${
76
- origin.name
77
- } ${asset.originSymbol})`,
86
+ `${balance.symbol}: ${toDecimal(
87
+ balance.balance,
88
+ balance.decimals,
89
+ ).toFixed()} (${origin.name} ${asset.originSymbol})`,
78
90
  );
79
91
  });
80
92
  },
@@ -83,16 +95,44 @@ const unsubscribe = await moonbeam.subscribeToAssetsBalanceInfo(
83
95
  unsubscribe();
84
96
  ```
85
97
 
86
- ## Examples
98
+ # Examples
87
99
 
88
- - [simple](https://github.com/PureStake/xcm-sdk/blob/main/packages/sdk/examples/simple)
100
+ - [sdk](https://github.com/PureStake/xcm-sdk/blob/main/examples/sdk-simple)
101
+ - [config](https://github.com/PureStake/xcm-sdk/blob/main/examples/config-simple)
102
+ - [transact](https://github.com/PureStake/xcm-sdk/blob/main/examples/transact-simple)
89
103
 
90
104
  ```bash
91
105
  git clone git@github.com:PureStake/xcm-sdk.git
92
- cd packages/sdk/examples/simple/
106
+ cd xcm-sdk
93
107
  npm i
108
+ cd examples/sdk-simple
94
109
 
95
- // edit index.ts by adding your accounts
110
+ # edit index.ts by adding your accounts
96
111
 
97
112
  npm start
98
113
  ```
114
+
115
+ # Contributing
116
+
117
+ ```bash
118
+ git clone git@github.com:PureStake/xcm-sdk.git
119
+ npm i
120
+ npm run dev
121
+ ```
122
+
123
+ # Tests
124
+
125
+ ## Unit tests
126
+
127
+ ```bash
128
+ npm run test
129
+ ```
130
+
131
+ ## Acceptance tests
132
+
133
+ ```bash
134
+ cp .env.example .env
135
+ # add private key and suri to .env file
136
+
137
+ npm run test:acc
138
+ ```
@@ -0,0 +1,2 @@
1
+ "use strict";var te=Object.create;var I=Object.defineProperty;var ne=Object.getOwnPropertyDescriptor;var ae=Object.getOwnPropertyNames;var ie=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var oe=(t,e)=>{for(var s in e)I(t,s,{get:e[s],enumerable:!0})},F=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of ae(e))!re.call(t,a)&&a!==s&&I(t,a,{get:()=>e[a],enumerable:!(n=ne(e,a))||n.enumerable});return t};var W=(t,e,s)=>(s=t!=null?te(ie(t)):{},F(e||!t||!t.__esModule?I(s,"default",{value:t,enumerable:!0}):s,t)),me=t=>F(I({},"__esModule",{value:!0}),t);var de={};oe(de,{ExtrinsicStatus:()=>ee.ExtrinsicStatus,PolkadotService:()=>x,XTokensContract:()=>B,createPolkadotServices:()=>M,init:()=>ue,isDepositTransferData:()=>z,isWithdrawTransferData:()=>R,isXcmSdkDeposit:()=>Q,isXcmSdkWithdraw:()=>j});module.exports=me(de);var ee=require("@moonbeam-network/xcm-utils");var q=require("ethers");var G=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var B=class{constructor(e){this.address="0x0000000000000000000000000000000000000804";this.#s=e,this.#e=new q.Contract(this.address,G,e)}#e;#s;async transfer(e,s,n,a,i){let{usesEthereumAccounts:m}=a.destination,r=a.getParams(e,m);return a.xcmFeeAsset?this.#e.transferMultiCurrencies([[a.xcmFeeAsset.asset.erc20Id,i],[n.erc20Id,s]],0,r,a.weight):this.#e.transfer(n.erc20Id,s,r,a.weight)}async getTransferFees(e,s,n,a){let i=(await this.#e.estimateGas.transfer(n.erc20Id,s,a.getParams(e,a.destination.usesEthereumAccounts),a.weight)).toBigInt(),m=await this.getGasPrice();return i*m}async getGasPrice(){let{gasPrice:e,maxPriorityFeePerGas:s}=await this.#s.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((s==null?void 0:s.toBigInt())||0n)}};var Be=require("@polkadot/api-augment"),O=require("@moonbeam-network/xcm-utils"),X=W(require("lodash"),1);function N(t,e){return BigInt(t)*e/BigInt(10**12)}var x=class{#e;constructor(e){this.#e=e}static async create(e){return new x(await(0,O.getPolkadotApi)(e))}getMetadata(){return{decimals:this.#e.registry.chainDecimals.at(0)||12,symbol:this.#e.registry.chainTokens.at(0),ss58Format:this.#e.registry.chainSS58||42,genesisHash:this.#e.genesisHash.toHex()}}getExistentialDeposit(){var e,s;return((s=(e=this.#e.consts.balances)==null?void 0:e.existentialDeposit)==null?void 0:s.toBigInt())||0n}async getAssetDecimals(e){return(await this.getAssetMeta(e)).decimals.toNumber()}async getAssetMeta(e){return await(e.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata)(e.id)}async subscribeToAccountInfo(e,s){return this.#e.query.system.account(e,s)}async subscribeToBalance(e,s){return this.subscribeToAccountInfo(e,({data:n})=>s(n.free.toBigInt()-n.miscFrozen.toBigInt()))}async getGenericBalance(e,{pallet:s,function:n,getParams:a,path:i,calc:m}){var o;let r=await this.#e.query[s][n](...a(e));if(r.isEmpty)return 0n;let c=((o=r.unwrap)==null?void 0:o.call(r))||r;return m(i.length?X.default.get(c,i):c)}async getAssetMinBalance({pallet:e,function:s,params:n,path:a}){let i=await this.#e.query[e][s](...n);return i.isEmpty?0n:X.default.get(i.value,a).toBigInt()}getXcmExtrinsic(e,s,{pallet:n,extrinsic:a,getParams:i},m,r){let c=this.#e.tx[n][a],o=c(...i({account:e,amount:s,extrinsicCall:c,fee:m}));return r&&(o=this.#e.tx.proxy.proxy(r,null,o)),o}async getAssetFee(e,s,n){return N(s,await this.getUnitsPerSecond(e,n))}async getUnitsPerSecond(e,s){if(e.isNative)return s.unitsPerSecond;let n=await this.getAssetType(e.id);return n?(await this.#e.query.assetManager.assetTypeUnitsPerSecond(n)).unwrapOrDefault().toBigInt():0n}async getAssetType(e){return(await this.#e.query.assetManager.assetIdType(e)).unwrapOr(void 0)}async subscribeToAssetsBalanceInfo(e,s,n){let a=Object.values(s.assets),i=await this.getAssetsMetadata(a);return this.subscribeToAccountBalances(e,a,m=>{n(m.map((r,c)=>{var d;let o=a[c],l=i[c],{chains:[y],from:u}=s.deposit(o.originSymbol),{origin:b}=u(y.key);return{asset:o,balance:{balance:r.balance.toBigInt(),decimals:o.isNative?b.decimals:l.decimals.toNumber(),symbol:o.isNative?o.originSymbol:((d=l.symbol.toHuman())==null?void 0:d.toString())||""},origin:b}}))})}async getAssetsMetadata(e){let s=e.map(n=>[n.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata,[n.id]]);return this.#e.queryMulti(s)}async subscribeToAccountBalances(e,s,n){let a=s.map(i=>[i.isLocalAsset?this.#e.query.localAssets.account:this.#e.query.assets.account,[i.id,e]]);return this.#e.queryMulti(a,i=>{let m=i.map(r=>r.unwrapOrDefault());n(m)})}};async function M(t){return Promise.all(t.map(e=>x.create(e)))}var K=require("@moonbeam-network/xcm-config"),$=W(require("lodash"),1);var U=require("@moonbeam-network/xcm-utils"),H=require("@polkadot/util");function le({account:t,config:e,foreignPolkadot:s,primaryAccount:n,fee:a}){return i=>s.getXcmExtrinsic(t,i,e.extrinsic,a,n)}async function L({account:t,asset:e,config:s,foreignPolkadot:n,moonChain:a,nativeAsset:i,origin:m,polkadot:r,polkadotSigner:c,primaryAccount:o,sourceAccount:l}){var k,w;let y=typeof l=="string"?l:l.address,u=n.getMetadata(),b={asset:((k=s.xcmFeeAsset)==null?void 0:k.asset)??e,balance:((w=s.xcmFeeAsset)==null?void 0:w.balance)??s.balance},[d,p,f,h,A=0n,S,g,C]=await Promise.all([e.isNative?a.decimals:r.getAssetDecimals(e),n.getExistentialDeposit(),n.getGenericBalance(o||y,s.balance),s.sourceFeeBalance?n.getGenericBalance(y,s.sourceFeeBalance):void 0,s.sourceMinBalance?n.getAssetMinBalance(s.sourceMinBalance):void 0,r.getAssetFee(b.asset,s.source.weight,a),n.getGenericBalance(o||y,b.balance),r.getAssetDecimals(b.asset)]),v=s.xcmFeeAsset?0n:S,T=le({account:t,config:s,foreignPolkadot:n,primaryAccount:o,fee:S});return{asset:{...e,decimals:d},existentialDeposit:p,min:v,moonChainFee:{balance:g,decimals:b.asset.isNative?a.decimals:C,fee:S,symbol:b.asset.originSymbol},native:{...i,decimals:u.decimals},origin:m,source:{...s.source},sourceBalance:f,sourceFeeBalance:(0,H.isUndefined)(h)?void 0:{...u,balance:h},sourceMinBalance:A,getFee:async(D=f)=>(await T(D).paymentInfo(l)).partialFee.toBigInt(),send:async(D,P)=>(await T(D).signAndSend(l,{signer:c},P&&(0,U.createExtrinsicEventHandler)(s.extrinsic.pallet,s.extrinsic.successEvent,P))).toString()}}function Q(t){return!!t.from}function j(t){return!!t.to}function R(t){return!!(t!=null&&t.destination)}function z(t){return!!(t!=null&&t.moonChainFee)}function ye(t,e){if(t.asset.isNative)return-1;if(e.asset.isNative)return 1;if(t.balance.balance||e.balance.balance)return Number(e.balance.balance-t.balance.balance);let s=(t.origin.name+t.asset.originSymbol).toLowerCase(),n=(e.origin.name+e.asset.originSymbol).toLowerCase();return s<n?-1:s>n?1:0}async function _({account:t,polkadot:e,configBuilder:s,cb:n}){let a=0n,i=[],m=o=>{let l=typeof o=="bigint";a=l?o:a,i=(l?i:o).map(y=>(y.asset.isNative&&(y.balance.balance=a),y)).sort(ye),i.length&&n(i)},r=await e.subscribeToBalance(t,m),c=await e.subscribeToAssetsBalanceInfo(t,s,m);return()=>{r(),c()}}function J(t){return{id:"",erc20Id:"",originSymbol:t}}var Y=require("@moonbeam-network/xcm-utils");async function Z({asset:t,config:e,contract:s,originAccount:n,destinationAccount:a,destinationPolkadot:i,ethersSigner:m,moonChain:r,nativeAsset:c,origin:o,polkadot:l}){var T,k;let y=i.getMetadata(),u=((T=e.xcmFeeAsset)==null?void 0:T.asset)??t,[b,d,p,f,h,A,S]=await Promise.all([t.isNative?r.decimals:l.getAssetDecimals(t),e.xcmFeeAsset?await l.getGenericBalance(n,(k=e.xcmFeeAsset)==null?void 0:k.balance.origin):void 0,i.getGenericBalance(a,e.balance),e.xcmFeeAsset?i.getGenericBalance(a,e.xcmFeeAsset.balance.destination):void 0,t.isNative?0n:i.getExistentialDeposit(),e.sourceMinBalance?i.getAssetMinBalance(e.sourceMinBalance):0n,l.getAssetDecimals(u)]),g=be(A,e),C=e.xcmFeeAsset?0n:V(A||h,p,g),v=e.xcmFeeAsset&&f!==void 0?V(A||h,f,g):0n;return{asset:{...t,decimals:b},destination:{...e.destination},destinationBalance:p,destinationFee:g,existentialDeposit:h,min:C,minXcmFeeAsset:{amount:v,decimals:S,symbol:u.originSymbol},native:{...c,decimals:y.decimals},origin:o,originXcmFeeAssetBalance:d,getFee:async w=>s.getTransferFees(a,w,t,e),send:async(w,D)=>{let P=await s.transfer(a,w,t,e,v);return D&&(0,Y.createTxEventHandler)(m,P.hash,D),P.hash}}}function be(t,e){let s=BigInt(e.weight*e.feePerWeight);return t>s?t:s}function V(t,e,s){let n=e>=t?0n:t-e;return s+n}function ue(t){return{moonbase:E(K.moonbase,t),moonbeam:E(K.moonbeam,t),moonriver:E(K.moonriver,t)}}function E(t,e){let{symbols:s,assets:n,moonAsset:a,moonChain:i}=t;return{symbols:s,assets:n,moonAsset:a,moonChain:i,subscribeToAssetsBalanceInfo:async(m,r)=>{let[c]=await M([t.moonChain.ws]);return _({account:m,polkadot:c,configBuilder:t,cb:r})},deposit:m=>{let{chains:r,from:c}=t.deposit(m);return{chains:r,from:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,d,{primaryAccount:p,polkadotSigner:f}={})=>{let h=f||(e==null?void 0:e.polkadotSigner);if($.default.isString(d)&&!h)throw new Error("Polkadot Signer/KeyringPair are not provided to XCM-SDK");let[A,S]=await M([t.moonChain.ws,u.source.ws]),g=S.getMetadata(),C=t.assets[g.symbol]||J(g.symbol);return L({account:b,asset:l,config:u,foreignPolkadot:S,moonChain:i,nativeAsset:C,origin:y,polkadot:A,polkadotSigner:h,primaryAccount:p,sourceAccount:d})}}}}},withdraw:m=>{let{chains:r,to:c}=t.withdraw(m);return{chains:r,to:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,{ethersSigner:d}={})=>{let p=d||(e==null?void 0:e.ethersSigner);if(!p)throw new Error("Ethers signer is not provided to XCM-SDK");let f=await p.getAddress(),h=new B(p),[A,S]=await M([t.moonChain.ws,u.destination.ws]),g=S.getMetadata(),C=t.assets[g.symbol];return Z({asset:l,config:u,contract:h,originAccount:f,destinationAccount:b,destinationPolkadot:S,ethersSigner:p,moonChain:i,nativeAsset:C,origin:y,polkadot:A})}}}}}}}0&&(module.exports={ExtrinsicStatus,PolkadotService,XTokensContract,createPolkadotServices,init,isDepositTransferData,isWithdrawTransferData,isXcmSdkDeposit,isXcmSdkWithdraw});
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/contracts/XTokensContract/XTokensContract.ts","../src/contracts/XTokensContract/XTokensABI.json","../src/polkadot/PolkadotService.ts","../src/polkadot/polkadot.utils.ts","../src/polkadot/polkadot.factory.ts","../src/sdk/sdk.ts","../src/sdk/sdk.deposit.ts","../src/sdk/sdk.utils.ts","../src/sdk/sdk.withdraw.ts"],"sourcesContent":["export { ExtrinsicStatus } from '@moonbeam-network/xcm-utils';\nexport type {\n ExtrinsicEvent,\n ExtrinsicEventsCallback,\n ExtrinsicFailedEvent,\n ExtrinsicSentEvent,\n ExtrinsicSuccessEvent,\n} from '@moonbeam-network/xcm-utils';\nexport * from './contracts';\nexport * from './polkadot';\nexport * from './sdk';\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport {\n Asset,\n AssetSymbol,\n WithdrawXTokensConfig,\n} from '@moonbeam-network/xcm-config';\nimport { Contract, Signer } from 'ethers';\n\nimport ContractInterface from './XTokensABI.json';\n\nexport class XTokensContract<Symbols extends AssetSymbol = AssetSymbol> {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(signer: Signer) {\n this.#signer = signer;\n this.#contract = new Contract(this.address, ContractInterface, signer);\n }\n\n async transfer(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n minAmount: bigint,\n ): Promise<TransactionResponse> {\n const { usesEthereumAccounts } = config.destination;\n const params = config.getParams(account, usesEthereumAccounts);\n\n if (config.xcmFeeAsset) {\n return this.#contract.transferMultiCurrencies(\n [\n [config.xcmFeeAsset.asset.erc20Id, minAmount],\n [asset.erc20Id, amount],\n ],\n 0,\n params,\n config.weight,\n );\n }\n\n return this.#contract.transfer(\n asset.erc20Id,\n amount,\n params,\n config.weight,\n );\n }\n\n async getTransferFees(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n ) {\n const estimatedGas = (\n await this.#contract.estimateGas.transfer(\n asset.erc20Id,\n amount,\n config.getParams(account, config.destination.usesEthereumAccounts),\n config.weight,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import '@polkadot/api-augment';\n\nimport {\n Asset,\n AssetSymbol,\n BalanceConfig,\n ChainKey,\n ExtrinsicConfig,\n MinBalanceConfig,\n MoonChain,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport {\n QueryableStorageMultiArg,\n SubmittableExtrinsic,\n UnsubscribePromise,\n} from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { AccountInfo } from '@polkadot/types/interfaces';\nimport {\n PalletAssetsAssetAccount,\n PalletAssetsAssetMetadata,\n} from '@polkadot/types/lookup';\nimport _ from 'lodash';\nimport { AssetBalanceInfo, XCMType } from './polkadot.interfaces';\nimport { calculateMin } from './polkadot.utils';\n\nexport class PolkadotService<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n> {\n readonly #api: ApiPromise;\n\n constructor(api: ApiPromise) {\n this.#api = api;\n }\n\n static async create<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n >(ws: string): Promise<PolkadotService<Symbols, ChainKeys>> {\n return new PolkadotService(await getPolkadotApi(ws));\n }\n\n getMetadata() {\n return {\n decimals: this.#api.registry.chainDecimals.at(0) || 12,\n symbol: this.#api.registry.chainTokens.at(0) as Symbols,\n ss58Format: this.#api.registry.chainSS58 || 42,\n genesisHash: this.#api.genesisHash.toHex(),\n };\n }\n\n getExistentialDeposit(): bigint {\n return (\n (\n this.#api.consts.balances?.existentialDeposit as unknown as\n | u128\n | undefined\n )?.toBigInt() || 0n\n );\n }\n\n async getAssetDecimals(asset: Asset<Symbols>): Promise<number> {\n const meta = await this.getAssetMeta(asset);\n\n return meta.decimals.toNumber();\n }\n\n async getAssetMeta(\n asset: Asset<Symbols>,\n ): Promise<PalletAssetsAssetMetadata> {\n const data = await (asset.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata)(asset.id);\n\n return data as unknown as PalletAssetsAssetMetadata;\n }\n\n async subscribeToAccountInfo(\n account: string,\n callback: (info: AccountInfo) => void,\n ): UnsubscribePromise {\n return (this.#api.query.system.account as any)(account, callback);\n }\n\n async subscribeToBalance(\n account: string,\n callback: (balance: bigint) => void,\n ): UnsubscribePromise {\n return this.subscribeToAccountInfo(account, ({ data }) =>\n callback(data.free.toBigInt() - data.miscFrozen.toBigInt()),\n );\n }\n\n async getGenericBalance(\n account: string,\n { pallet, function: fn, getParams, path, calc }: BalanceConfig<Symbols>,\n ): Promise<bigint> {\n const response = await this.#api.query[pallet][fn](...getParams(account));\n\n if (response.isEmpty) {\n return 0n;\n }\n\n const unwrapped = (response as any).unwrap?.() || response;\n\n return calc(path.length ? _.get(unwrapped, path) : unwrapped);\n }\n\n async getAssetMinBalance({\n pallet,\n function: fn,\n params,\n path,\n }: MinBalanceConfig): Promise<bigint> {\n const details = (await this.#api.query[pallet][fn](\n ...params,\n )) as unknown as Option<any>;\n\n if (details.isEmpty) {\n return 0n;\n }\n\n return _.get(details.value, path).toBigInt();\n }\n\n getXcmExtrinsic(\n account: string,\n amount: bigint,\n { pallet, extrinsic, getParams }: ExtrinsicConfig<Symbols>,\n fee?: bigint,\n primaryAccount?: string,\n ): SubmittableExtrinsic<'promise'> {\n const call = this.#api.tx[pallet][extrinsic];\n\n let transferExtrinsic = call(\n ...getParams({\n account,\n amount,\n extrinsicCall: call,\n fee,\n }),\n );\n\n if (primaryAccount) {\n transferExtrinsic = this.#api.tx.proxy.proxy(\n primaryAccount,\n null,\n transferExtrinsic,\n );\n }\n\n return transferExtrinsic;\n }\n\n async getAssetFee(\n asset: Asset,\n weight: number,\n moonChain: MoonChain,\n ): Promise<bigint> {\n return calculateMin(weight, await this.getUnitsPerSecond(asset, moonChain));\n }\n\n async getUnitsPerSecond(asset: Asset, moonChain: MoonChain): Promise<bigint> {\n if (asset.isNative) {\n return moonChain.unitsPerSecond;\n }\n const type = await this.getAssetType(asset.id);\n\n if (!type) {\n return 0n;\n }\n\n const res = (await this.#api.query.assetManager.assetTypeUnitsPerSecond(\n type,\n )) as unknown as Option<u128>;\n\n return res.unwrapOrDefault().toBigInt();\n }\n\n /**\n * this is only for Moon* chains\n */\n async getAssetType(id: string): Promise<XCMType | undefined> {\n const type = (await this.#api.query.assetManager.assetIdType(\n id,\n )) as unknown as Option<any>;\n\n return type.unwrapOr(undefined);\n }\n\n async subscribeToAssetsBalanceInfo(\n account: string,\n config: XcmConfigBuilder<Symbols, ChainKeys>,\n callback: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise {\n const assetsArray = Object.values<Asset<Symbols>>(config.assets);\n const metadata = await this.getAssetsMetadata(assetsArray);\n\n return this.subscribeToAccountBalances(account, assetsArray, (data) => {\n callback(\n data.map((balance, index): AssetBalanceInfo<Symbols> => {\n const asset = assetsArray[index];\n const meta = metadata[index];\n const {\n chains: [chain],\n from,\n } = config.deposit(asset.originSymbol);\n const { origin } = from(chain.key);\n\n return {\n asset,\n balance: {\n balance: balance.balance.toBigInt(),\n decimals: asset.isNative\n ? (origin as MoonChain).decimals\n : meta.decimals.toNumber(),\n symbol: asset.isNative\n ? asset.originSymbol\n : meta.symbol.toHuman()?.toString() || '',\n },\n origin,\n };\n }),\n );\n });\n }\n\n async getAssetsMetadata(\n assetsArray: Asset<Symbols>[],\n ): Promise<PalletAssetsAssetMetadata[]> {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata,\n [x.id],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries) as unknown as Promise<\n PalletAssetsAssetMetadata[]\n >;\n }\n\n async subscribeToAccountBalances(\n account: string,\n assetsArray: Asset<Symbols>[],\n callback: (balances: PalletAssetsAssetAccount[]) => void,\n ): UnsubscribePromise {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.account\n : this.#api.query.assets.account,\n [x.id, account],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries, (res: unknown) => {\n const response = (res as Array<Option<PalletAssetsAssetAccount>>).map(\n (item) => item.unwrapOrDefault(),\n );\n\n callback(response);\n });\n }\n}\n","export function calculateMin(weight: number, unitsPerSecond: bigint): bigint {\n // 10**12 weight = 1 second\n return (BigInt(weight) * unitsPerSecond) / BigInt(10 ** 12);\n}\n","import { AssetSymbol, ChainKey } from '@moonbeam-network/xcm-config';\nimport { PolkadotService } from './PolkadotService';\n\nexport async function createPolkadotServices<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>(ws: string[]): Promise<PolkadotService<Symbols, ChainKeys>[]> {\n return Promise.all(\n ws.map((url) => PolkadotService.create<Symbols, ChainKeys>(url)),\n );\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n moonbase,\n MoonbaseAssets,\n MoonbaseChains,\n moonbeam,\n MoonbeamAssets,\n MoonbeamChains,\n moonriver,\n MoonriverAssets,\n MoonriverChains,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport _ from 'lodash';\nimport { XTokensContract } from '../contracts';\nimport { AssetBalanceInfo, createPolkadotServices } from '../polkadot';\nimport { getDepositData } from './sdk.deposit';\nimport {\n DepositTransferData,\n SdkOptions,\n WithdrawGetParams,\n WithdrawTransferData,\n XcmSdk,\n XcmSdkByChain,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\nimport { createDummyAsset, subscribeToAssetsBalanceInfo } from './sdk.utils';\nimport { getWithdrawData } from './sdk.withdraw';\n\nexport function init(options?: SdkOptions): XcmSdkByChain {\n return {\n moonbase: initByChain<MoonbaseAssets, MoonbaseChains>(moonbase, options),\n moonbeam: initByChain<MoonbeamAssets, MoonbeamChains>(moonbeam, options),\n moonriver: initByChain<MoonriverAssets, MoonriverChains>(\n moonriver,\n options,\n ),\n };\n}\n\nfunction initByChain<Symbols extends AssetSymbol, ChainKeys extends ChainKey>(\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>,\n options?: SdkOptions,\n): XcmSdk<Symbols, ChainKeys> {\n const { symbols, assets, moonAsset, moonChain } = configBuilder;\n\n return {\n symbols,\n assets,\n moonAsset,\n moonChain,\n subscribeToAssetsBalanceInfo: async (\n account: string,\n cb: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise => {\n const [polkadot] = await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n ]);\n\n return subscribeToAssetsBalanceInfo({\n account,\n polkadot,\n configBuilder,\n cb,\n });\n },\n deposit: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkDeposit<Symbols, ChainKeys> => {\n const { chains, from } = configBuilder.deposit(symbolOrAsset);\n\n return {\n chains,\n from: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = from(keyOrChain);\n\n return {\n get: async (\n account: string,\n sourceAccount: string | IKeyringPair,\n { primaryAccount, polkadotSigner } = {},\n ): Promise<DepositTransferData<Symbols>> => {\n const signer = polkadotSigner || options?.polkadotSigner;\n\n if (_.isString(sourceAccount) && !signer) {\n throw new Error(\n 'Polkadot Signer/KeyringPair are not provided to XCM-SDK',\n );\n }\n\n const [polkadot, foreignPolkadot] = await createPolkadotServices<\n Symbols,\n ChainKeys\n >([configBuilder.moonChain.ws, config.source.ws]);\n const meta = foreignPolkadot.getMetadata();\n const nativeAsset =\n configBuilder.assets[meta.symbol] ||\n createDummyAsset(meta.symbol);\n\n return getDepositData({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner: signer,\n primaryAccount,\n sourceAccount,\n });\n },\n };\n },\n };\n },\n withdraw: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkWithdraw<Symbols, ChainKeys> => {\n const { chains, to } = configBuilder.withdraw(symbolOrAsset);\n\n return {\n chains,\n to: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = to(keyOrChain);\n\n return {\n get: async (\n destinationAccount: string,\n { ethersSigner }: WithdrawGetParams = {},\n ): Promise<WithdrawTransferData<Symbols>> => {\n const signer = ethersSigner || options?.ethersSigner;\n\n if (!signer) {\n throw new Error('Ethers signer is not provided to XCM-SDK');\n }\n const originAccount = await signer.getAddress();\n\n const contract = new XTokensContract<Symbols>(signer);\n const [polkadot, destinationPolkadot] =\n await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n config.destination.ws,\n ]);\n const meta = destinationPolkadot.getMetadata();\n const nativeAsset = configBuilder.assets[meta.symbol];\n\n return getWithdrawData({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner: signer,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n });\n },\n };\n },\n };\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n DepositConfig,\n MoonChain,\n} from '@moonbeam-network/xcm-config';\nimport {\n createExtrinsicEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport type { IKeyringPair } from '@polkadot/types/types';\nimport { isUndefined } from '@polkadot/util';\nimport { PolkadotService } from '../polkadot';\nimport { DepositTransferData } from './sdk.interfaces';\n\nexport interface CreateExtrinsicOptions<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n config: DepositConfig<Symbols>;\n fee?: bigint;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n primaryAccount?: string;\n}\n\nexport function getCreateExtrinsic<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee,\n}: CreateExtrinsicOptions<Symbols, ChainKeys>) {\n return (amount: bigint): any =>\n foreignPolkadot.getXcmExtrinsic(\n account,\n amount,\n config.extrinsic,\n fee,\n primaryAccount,\n );\n}\n\nexport interface GetDepositDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n asset: Asset<Symbols>;\n config: DepositConfig<Symbols>;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n polkadotSigner?: PolkadotSigner;\n primaryAccount?: string;\n sourceAccount: string | IKeyringPair;\n}\n\nexport async function getDepositData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner,\n primaryAccount,\n sourceAccount,\n}: GetDepositDataParams<Symbols, ChainKeys>): Promise<\n DepositTransferData<Symbols>\n> {\n const sourceAddress =\n typeof sourceAccount === 'string' ? sourceAccount : sourceAccount.address;\n const meta = foreignPolkadot.getMetadata();\n const xcmFeeAssetConfig = {\n asset: config.xcmFeeAsset?.asset ?? asset,\n balance: config.xcmFeeAsset?.balance ?? config.balance,\n };\n\n const [\n assetDecimals,\n existentialDeposit,\n sourceBalance,\n sourceFeeBalance,\n sourceMinBalance = 0n,\n xcmFee,\n xcmFeeBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // assetDecimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // existentialDeposit\n foreignPolkadot.getExistentialDeposit(),\n // sourceBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n config.balance,\n ),\n // sourceFeeBalance\n config.sourceFeeBalance\n ? foreignPolkadot.getGenericBalance(\n sourceAddress,\n config.sourceFeeBalance,\n )\n : undefined,\n // sourceMinBalance\n config.sourceMinBalance\n ? foreignPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : undefined,\n // xcmFee\n polkadot.getAssetFee(\n xcmFeeAssetConfig.asset,\n config.source.weight,\n moonChain,\n ),\n // xcmFeeBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n xcmFeeAssetConfig.balance,\n ),\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAssetConfig.asset),\n ]);\n\n // Min is basically the XCM fee, if it's the same asset. If less is sent then\n // Moon* won't process the message.\n const min = config.xcmFeeAsset ? 0n : xcmFee;\n const createExtrinsic = getCreateExtrinsic({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee: xcmFee,\n });\n\n return {\n asset: { ...asset, decimals: assetDecimals },\n existentialDeposit,\n min,\n moonChainFee: {\n balance: xcmFeeBalance,\n decimals: xcmFeeAssetConfig.asset.isNative\n ? moonChain.decimals\n : xcmFeeDecimals,\n fee: xcmFee,\n symbol: xcmFeeAssetConfig.asset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n source: {\n ...config.source,\n },\n sourceBalance,\n sourceFeeBalance: !isUndefined(sourceFeeBalance)\n ? { ...meta, balance: sourceFeeBalance }\n : undefined,\n sourceMinBalance,\n getFee: async (amount = sourceBalance): Promise<bigint> => {\n const extrinsic = createExtrinsic(amount);\n const info = await extrinsic.paymentInfo(sourceAccount);\n\n return info.partialFee.toBigInt();\n },\n send: async (\n amount: bigint,\n cb?: ExtrinsicEventsCallback,\n ): Promise<string> => {\n const extrinsic = createExtrinsic(amount);\n const hash = await extrinsic.signAndSend(\n sourceAccount,\n {\n signer: polkadotSigner,\n },\n\n cb &&\n createExtrinsicEventHandler(\n config.extrinsic.pallet,\n config.extrinsic.successEvent,\n cb,\n ),\n );\n\n return hash.toString();\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n ChainKey,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { AssetBalanceInfo, PolkadotService } from '../polkadot';\nimport {\n DepositTransferData,\n WithdrawTransferData,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\n\nexport function isXcmSdkDeposit(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkDeposit {\n return !!(config as XcmSdkDeposit).from;\n}\n\nexport function isXcmSdkWithdraw(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkWithdraw {\n return !!(config as XcmSdkWithdraw).to;\n}\n\nexport function isWithdrawTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is WithdrawTransferData {\n return !!(data as WithdrawTransferData)?.destination;\n}\n\nexport function isDepositTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is DepositTransferData {\n return !!(data as DepositTransferData)?.moonChainFee;\n}\n\nexport function sortByBalanceAndChainName<Symbols extends AssetSymbol>(\n a: AssetBalanceInfo<Symbols>,\n b: AssetBalanceInfo<Symbols>,\n) {\n if (a.asset.isNative) {\n return -1;\n }\n\n if (b.asset.isNative) {\n return 1;\n }\n\n if (a.balance.balance || b.balance.balance) {\n return Number(b.balance.balance - a.balance.balance);\n }\n\n const aName = (a.origin.name + a.asset.originSymbol).toLowerCase();\n const bName = (b.origin.name + b.asset.originSymbol).toLowerCase();\n\n if (aName < bName) {\n return -1;\n }\n\n if (aName > bName) {\n return 1;\n }\n\n return 0;\n}\n\nexport interface SubscribeToAssetsBalanceInfoParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>;\n cb: (data: AssetBalanceInfo<Symbols>[]) => void;\n}\n\nexport async function subscribeToAssetsBalanceInfo<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n polkadot,\n configBuilder,\n cb,\n}: SubscribeToAssetsBalanceInfoParams<Symbols, ChainKeys>): UnsubscribePromise {\n let lastBalance = 0n;\n let lastInfo: AssetBalanceInfo<Symbols>[] = [];\n const handler = (data: bigint | AssetBalanceInfo<Symbols>[]) => {\n const isBalance = typeof data === 'bigint';\n\n lastBalance = isBalance ? data : lastBalance;\n lastInfo = (isBalance ? lastInfo : data)\n .map((info) => {\n if (info.asset.isNative) {\n // eslint-disable-next-line no-param-reassign\n info.balance.balance = lastBalance;\n }\n\n return info;\n })\n .sort(sortByBalanceAndChainName);\n\n if (lastInfo.length) {\n cb(lastInfo);\n }\n };\n\n const unsubscribeBalance = await polkadot.subscribeToBalance(\n account,\n handler,\n );\n const unsubscribeInfo = await polkadot.subscribeToAssetsBalanceInfo(\n account,\n configBuilder,\n handler,\n );\n\n return () => {\n unsubscribeBalance();\n unsubscribeInfo();\n };\n}\n\nexport function createDummyAsset(symbol: AssetSymbol): Asset<AssetSymbol> {\n return {\n id: '',\n erc20Id: '',\n originSymbol: symbol,\n };\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n MoonChain,\n WithdrawConfig,\n} from '@moonbeam-network/xcm-config';\nimport {\n createTxEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { XTokensContract } from '../contracts';\nimport { PolkadotService } from '../polkadot';\nimport { WithdrawTransferData } from './sdk.interfaces';\n\nexport interface GetWithdrawDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n asset: Asset<Symbols>;\n config: WithdrawConfig<Symbols>;\n contract: XTokensContract;\n originAccount: string;\n destinationAccount: string;\n destinationPolkadot: PolkadotService<Symbols, ChainKeys>;\n ethersSigner: EthersSigner;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n}\n\nexport async function getWithdrawData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n}: GetWithdrawDataParams<Symbols, ChainKeys>): Promise<\n WithdrawTransferData<Symbols>\n> {\n const meta = destinationPolkadot.getMetadata();\n const xcmFeeAsset = config.xcmFeeAsset?.asset ?? asset;\n const [\n decimals,\n // destinationBalance,\n originXcmFeeAssetBalance,\n destinationBalance,\n destinationXcmFeeAssetBalance,\n existentialDeposit,\n assetMinBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // decimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // originXcmFeeAssetBalance\n config.xcmFeeAsset\n ? await polkadot.getGenericBalance(\n originAccount,\n config.xcmFeeAsset?.balance.origin,\n )\n : undefined,\n // destinationBalance\n destinationPolkadot.getGenericBalance(destinationAccount, config.balance),\n // destinationXcmFeeAssetBalance\n config.xcmFeeAsset\n ? destinationPolkadot.getGenericBalance(\n destinationAccount,\n config.xcmFeeAsset.balance.destination,\n )\n : undefined,\n // existentialDeposit\n asset.isNative ? 0n : destinationPolkadot.getExistentialDeposit(),\n // assetMinBalance\n config.sourceMinBalance\n ? destinationPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : 0n,\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAsset),\n ]);\n\n const destinationFee = getFee(assetMinBalance, config);\n const min = config.xcmFeeAsset\n ? 0n\n : getMin(\n assetMinBalance || existentialDeposit,\n destinationBalance,\n destinationFee,\n );\n\n const minXcmFeeAsset =\n config.xcmFeeAsset && destinationXcmFeeAssetBalance !== undefined\n ? getMin(\n assetMinBalance || existentialDeposit,\n destinationXcmFeeAssetBalance,\n destinationFee,\n )\n : 0n;\n\n return {\n asset: { ...asset, decimals },\n destination: {\n ...config.destination,\n },\n destinationBalance,\n destinationFee,\n existentialDeposit,\n min,\n minXcmFeeAsset: {\n amount: minXcmFeeAsset,\n decimals: xcmFeeDecimals,\n symbol: xcmFeeAsset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n originXcmFeeAssetBalance,\n getFee: async (amount) =>\n contract.getTransferFees(destinationAccount, amount, asset, config),\n send: async (amount: bigint, cb?: ExtrinsicEventsCallback) => {\n const tx = await contract.transfer(\n destinationAccount,\n amount,\n asset,\n config,\n minXcmFeeAsset,\n );\n\n if (cb) {\n createTxEventHandler(ethersSigner, tx.hash, cb);\n }\n\n return tx.hash;\n },\n };\n}\n\nexport function getFee<Symbols extends AssetSymbol>(\n assetMinBalance: bigint,\n config: WithdrawConfig<Symbols>,\n) {\n const calculatedFee = BigInt(config.weight * config.feePerWeight);\n\n return assetMinBalance > calculatedFee ? assetMinBalance : calculatedFee;\n}\n\nexport function getMin(\n balanceNeeded: bigint,\n destinationBalance: bigint,\n destinationFee: bigint,\n) {\n const extra =\n destinationBalance >= balanceNeeded\n ? 0n\n : balanceNeeded - destinationBalance;\n\n return destinationFee + extra;\n}\n"],"mappings":"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","names":["src_exports","__export","PolkadotService","XTokensContract","createPolkadotServices","init","isDepositTransferData","isWithdrawTransferData","isXcmSdkDeposit","isXcmSdkWithdraw","__toCommonJS","import_xcm_utils","import_ethers","XTokensABI_default","XTokensContract","signer","#signer","#contract","XTokensABI_default","account","amount","asset","config","minAmount","usesEthereumAccounts","params","estimatedGas","gasPrice","maxPriorityFeePerGas","import_api_augment","import_xcm_utils","import_lodash","calculateMin","weight","unitsPerSecond","PolkadotService","#api","api","ws","_a","_b","asset","account","callback","data","pallet","fn","getParams","path","calc","response","unwrapped","_","params","details","amount","extrinsic","fee","primaryAccount","call","transferExtrinsic","weight","moonChain","calculateMin","type","id","config","assetsArray","metadata","balance","index","meta","chain","from","origin","queries","x","res","item","createPolkadotServices","ws","url","PolkadotService","import_xcm_config","import_lodash","import_xcm_utils","import_util","getCreateExtrinsic","account","config","foreignPolkadot","primaryAccount","fee","amount","getDepositData","asset","moonChain","nativeAsset","origin","polkadot","polkadotSigner","sourceAccount","_a","_b","sourceAddress","meta","xcmFeeAssetConfig","assetDecimals","existentialDeposit","sourceBalance","sourceFeeBalance","sourceMinBalance","xcmFee","xcmFeeBalance","xcmFeeDecimals","min","createExtrinsic","cb","isXcmSdkDeposit","config","isXcmSdkWithdraw","isWithdrawTransferData","data","isDepositTransferData","sortByBalanceAndChainName","a","b","aName","bName","subscribeToAssetsBalanceInfo","account","polkadot","configBuilder","cb","lastBalance","lastInfo","handler","isBalance","info","unsubscribeBalance","unsubscribeInfo","createDummyAsset","symbol","import_xcm_utils","getWithdrawData","asset","config","contract","originAccount","destinationAccount","destinationPolkadot","ethersSigner","moonChain","nativeAsset","origin","polkadot","_a","_b","meta","xcmFeeAsset","decimals","originXcmFeeAssetBalance","destinationBalance","destinationXcmFeeAssetBalance","existentialDeposit","assetMinBalance","xcmFeeDecimals","destinationFee","getFee","min","getMin","minXcmFeeAsset","amount","cb","tx","calculatedFee","balanceNeeded","extra","init","options","initByChain","configBuilder","symbols","assets","moonAsset","moonChain","account","cb","polkadot","createPolkadotServices","subscribeToAssetsBalanceInfo","symbolOrAsset","chains","from","keyOrChain","asset","origin","config","sourceAccount","primaryAccount","polkadotSigner","signer","_","foreignPolkadot","meta","nativeAsset","createDummyAsset","getDepositData","to","destinationAccount","ethersSigner","originAccount","contract","XTokensContract","destinationPolkadot","getWithdrawData"]}
@@ -0,0 +1,319 @@
1
+ import { ExtrinsicEventsCallback, Hash } from '@moonbeam-network/xcm-utils';
2
+ export {
3
+ ExtrinsicEvent,
4
+ ExtrinsicEventsCallback,
5
+ ExtrinsicFailedEvent,
6
+ ExtrinsicSentEvent,
7
+ ExtrinsicStatus,
8
+ ExtrinsicSuccessEvent,
9
+ } from '@moonbeam-network/xcm-utils';
10
+ import { TransactionResponse } from '@ethersproject/abstract-provider';
11
+ import {
12
+ AssetSymbol,
13
+ Asset,
14
+ WithdrawXTokensConfig,
15
+ MoonbaseAssets,
16
+ MoonbaseChains,
17
+ MoonbeamAssets,
18
+ MoonbeamChains,
19
+ MoonriverAssets,
20
+ MoonriverChains,
21
+ ChainKey,
22
+ AssetsMap,
23
+ MoonChain,
24
+ Chain,
25
+ BalanceConfig,
26
+ MinBalanceConfig,
27
+ ExtrinsicConfig,
28
+ XcmConfigBuilder,
29
+ } from '@moonbeam-network/xcm-config';
30
+ import { Signer } from 'ethers';
31
+ import { ApiPromise } from '@polkadot/api';
32
+ import {
33
+ UnsubscribePromise,
34
+ Signer as Signer$1,
35
+ SubmittableExtrinsic,
36
+ } from '@polkadot/api/types';
37
+ import { AccountInfo } from '@polkadot/types/interfaces';
38
+ import {
39
+ PalletAssetsAssetMetadata,
40
+ PalletAssetsAssetAccount,
41
+ } from '@polkadot/types/lookup';
42
+ import { IKeyringPair } from '@polkadot/types/types';
43
+
44
+ declare class XTokensContract<Symbols extends AssetSymbol = AssetSymbol> {
45
+ #private;
46
+ readonly address: string;
47
+ constructor(signer: Signer);
48
+ transfer(
49
+ account: string,
50
+ amount: bigint,
51
+ asset: Asset<Symbols>,
52
+ config: WithdrawXTokensConfig<Symbols>,
53
+ minAmount: bigint,
54
+ ): Promise<TransactionResponse>;
55
+ getTransferFees(
56
+ account: string,
57
+ amount: bigint,
58
+ asset: Asset<Symbols>,
59
+ config: WithdrawXTokensConfig<Symbols>,
60
+ ): Promise<bigint>;
61
+ private getGasPrice;
62
+ }
63
+
64
+ interface XcmSdkByChain {
65
+ moonbase: MoonbaseXcmSdk;
66
+ moonbeam: MoonbeamXcmSdk;
67
+ moonriver: MoonriverXcmSdk;
68
+ }
69
+ type MoonXcmSdk = MoonbaseXcmSdk | MoonbeamXcmSdk | MoonriverXcmSdk;
70
+ type MoonbaseXcmSdk = XcmSdk<MoonbaseAssets, MoonbaseChains>;
71
+ type MoonbeamXcmSdk = XcmSdk<MoonbeamAssets, MoonbeamChains>;
72
+ type MoonriverXcmSdk = XcmSdk<MoonriverAssets, MoonriverChains>;
73
+ interface XcmSdk<
74
+ Symbols extends AssetSymbol = AssetSymbol,
75
+ ChainKeys extends ChainKey = ChainKey,
76
+ > {
77
+ symbols: Symbols[];
78
+ assets: AssetsMap<Symbols>;
79
+ moonAsset: Asset<Symbols>;
80
+ moonChain: MoonChain;
81
+ subscribeToAssetsBalanceInfo: (
82
+ account: string,
83
+ cb: (data: AssetBalanceInfo<Symbols>[]) => void,
84
+ ) => UnsubscribePromise;
85
+ deposit: (
86
+ symbolOrAsset: Symbols | Asset<Symbols>,
87
+ ) => XcmSdkDeposit<Symbols, ChainKeys>;
88
+ withdraw: (
89
+ symbolOrAsset: Symbols | Asset<Symbols>,
90
+ ) => XcmSdkWithdraw<Symbols, ChainKeys>;
91
+ }
92
+ interface XcmSdkDeposit<
93
+ Symbols extends AssetSymbol = AssetSymbol,
94
+ ChainKeys extends ChainKey = ChainKey,
95
+ > {
96
+ chains: Chain<ChainKeys>[];
97
+ from: (
98
+ keyOrChain: ChainKeys | Chain<ChainKeys>,
99
+ ) => XcmSdkDepositFrom<Symbols>;
100
+ }
101
+ interface XcmSdkWithdraw<
102
+ Symbols extends AssetSymbol = AssetSymbol,
103
+ ChainKeys extends ChainKey = ChainKey,
104
+ > {
105
+ chains: Chain<ChainKeys>[];
106
+ to: (keyOrChain: ChainKeys | Chain<ChainKeys>) => XcmSdkWithdrawTo<Symbols>;
107
+ }
108
+ interface XcmSdkDepositFrom<Symbols extends AssetSymbol = AssetSymbol> {
109
+ get: (
110
+ account: string,
111
+ sourceAccount: string | IKeyringPair,
112
+ params?: DepositGetParams,
113
+ ) => Promise<DepositTransferData<Symbols>>;
114
+ }
115
+ interface DepositGetParams {
116
+ polkadotSigner?: Signer$1;
117
+ primaryAccount?: string;
118
+ }
119
+ interface XcmSdkWithdrawTo<Symbols extends AssetSymbol = AssetSymbol> {
120
+ get: (
121
+ destinationAccount: string,
122
+ params?: WithdrawGetParams,
123
+ ) => Promise<WithdrawTransferData<Symbols>>;
124
+ }
125
+ interface WithdrawGetParams {
126
+ ethersSigner?: Signer;
127
+ }
128
+ interface DepositTransferData<
129
+ Symbols extends AssetSymbol = AssetSymbol,
130
+ ChainKeys extends ChainKey = ChainKey,
131
+ > {
132
+ asset: AssetWithDecimals<Symbols>;
133
+ existentialDeposit: bigint;
134
+ min: bigint;
135
+ moonChainFee: XcmFeeWithBalance<Symbols>;
136
+ native: AssetWithDecimals<Symbols>;
137
+ origin: MoonChain | Chain<ChainKeys>;
138
+ source: Chain<ChainKeys>;
139
+ sourceBalance: bigint;
140
+ sourceFeeBalance?: Balance<Symbols>;
141
+ sourceMinBalance: bigint;
142
+ getFee: (amount?: bigint) => Promise<bigint>;
143
+ send: (amount: bigint, cb?: ExtrinsicEventsCallback) => Promise<Hash>;
144
+ }
145
+ interface WithdrawTransferData<
146
+ Symbols extends AssetSymbol = AssetSymbol,
147
+ ChainKeys extends ChainKey = ChainKey,
148
+ > {
149
+ asset: AssetWithDecimals<Symbols>;
150
+ destination: Chain<ChainKeys>;
151
+ destinationBalance: bigint;
152
+ destinationFee: bigint;
153
+ existentialDeposit: bigint;
154
+ min: bigint;
155
+ minXcmFeeAsset: XcmFeeWithDecimals<Symbols>;
156
+ native: AssetWithDecimals<Symbols>;
157
+ origin: MoonChain | Chain<ChainKeys>;
158
+ originXcmFeeAssetBalance?: bigint;
159
+ getFee: (amount: bigint) => Promise<bigint>;
160
+ send: (amount: bigint, cb?: ExtrinsicEventsCallback) => Promise<Hash>;
161
+ }
162
+ interface AssetWithDecimals<Symbols extends AssetSymbol = AssetSymbol>
163
+ extends Asset<Symbols> {
164
+ decimals: number;
165
+ }
166
+ interface XcmFeeWithDecimals<Symbols extends AssetSymbol = AssetSymbol> {
167
+ amount: bigint;
168
+ decimals: number;
169
+ symbol: Symbols;
170
+ }
171
+ interface Balance<Symbols extends string | AssetSymbol = AssetSymbol> {
172
+ balance: bigint;
173
+ decimals: number;
174
+ symbol: Symbols;
175
+ }
176
+ interface XcmFeeWithBalance<Symbols extends string | AssetSymbol = AssetSymbol>
177
+ extends Balance<Symbols> {
178
+ fee: bigint;
179
+ }
180
+ interface SdkOptions {
181
+ ethersSigner?: Signer;
182
+ polkadotSigner?: Signer$1;
183
+ }
184
+
185
+ declare function init(options?: SdkOptions): XcmSdkByChain;
186
+
187
+ declare function isXcmSdkDeposit(
188
+ config: XcmSdkDeposit | XcmSdkWithdraw,
189
+ ): config is XcmSdkDeposit;
190
+ declare function isXcmSdkWithdraw(
191
+ config: XcmSdkDeposit | XcmSdkWithdraw,
192
+ ): config is XcmSdkWithdraw;
193
+ declare function isWithdrawTransferData(
194
+ data?: WithdrawTransferData | DepositTransferData,
195
+ ): data is WithdrawTransferData;
196
+ declare function isDepositTransferData(
197
+ data?: WithdrawTransferData | DepositTransferData,
198
+ ): data is DepositTransferData;
199
+
200
+ interface AssetBalanceInfo<
201
+ Symbols extends AssetSymbol = AssetSymbol,
202
+ ChainKeys extends ChainKey = ChainKey,
203
+ > {
204
+ asset: Asset<Symbols>;
205
+ balance: Balance<string>;
206
+ origin: Chain<ChainKeys> | MoonChain;
207
+ }
208
+ interface XCMType {
209
+ Xcm: {
210
+ parents: number;
211
+ interior: unknown;
212
+ };
213
+ }
214
+
215
+ declare class PolkadotService<
216
+ Symbols extends AssetSymbol = AssetSymbol,
217
+ ChainKeys extends ChainKey = ChainKey,
218
+ > {
219
+ #private;
220
+ constructor(api: ApiPromise);
221
+ static create<
222
+ Symbols extends AssetSymbol = AssetSymbol,
223
+ ChainKeys extends ChainKey = ChainKey,
224
+ >(ws: string): Promise<PolkadotService<Symbols, ChainKeys>>;
225
+ getMetadata(): {
226
+ decimals: number;
227
+ symbol: Symbols;
228
+ ss58Format: number;
229
+ genesisHash: `0x${string}`;
230
+ };
231
+ getExistentialDeposit(): bigint;
232
+ getAssetDecimals(asset: Asset<Symbols>): Promise<number>;
233
+ getAssetMeta(asset: Asset<Symbols>): Promise<PalletAssetsAssetMetadata>;
234
+ subscribeToAccountInfo(
235
+ account: string,
236
+ callback: (info: AccountInfo) => void,
237
+ ): UnsubscribePromise;
238
+ subscribeToBalance(
239
+ account: string,
240
+ callback: (balance: bigint) => void,
241
+ ): UnsubscribePromise;
242
+ getGenericBalance(
243
+ account: string,
244
+ { pallet, function: fn, getParams, path, calc }: BalanceConfig<Symbols>,
245
+ ): Promise<bigint>;
246
+ getAssetMinBalance({
247
+ pallet,
248
+ function: fn,
249
+ params,
250
+ path,
251
+ }: MinBalanceConfig): Promise<bigint>;
252
+ getXcmExtrinsic(
253
+ account: string,
254
+ amount: bigint,
255
+ { pallet, extrinsic, getParams }: ExtrinsicConfig<Symbols>,
256
+ fee?: bigint,
257
+ primaryAccount?: string,
258
+ ): SubmittableExtrinsic<'promise'>;
259
+ getAssetFee(
260
+ asset: Asset,
261
+ weight: number,
262
+ moonChain: MoonChain,
263
+ ): Promise<bigint>;
264
+ getUnitsPerSecond(asset: Asset, moonChain: MoonChain): Promise<bigint>;
265
+ /**
266
+ * this is only for Moon* chains
267
+ */
268
+ getAssetType(id: string): Promise<XCMType | undefined>;
269
+ subscribeToAssetsBalanceInfo(
270
+ account: string,
271
+ config: XcmConfigBuilder<Symbols, ChainKeys>,
272
+ callback: (data: AssetBalanceInfo<Symbols>[]) => void,
273
+ ): UnsubscribePromise;
274
+ getAssetsMetadata(
275
+ assetsArray: Asset<Symbols>[],
276
+ ): Promise<PalletAssetsAssetMetadata[]>;
277
+ subscribeToAccountBalances(
278
+ account: string,
279
+ assetsArray: Asset<Symbols>[],
280
+ callback: (balances: PalletAssetsAssetAccount[]) => void,
281
+ ): UnsubscribePromise;
282
+ }
283
+
284
+ declare function createPolkadotServices<
285
+ Symbols extends AssetSymbol,
286
+ ChainKeys extends ChainKey,
287
+ >(ws: string[]): Promise<PolkadotService<Symbols, ChainKeys>[]>;
288
+
289
+ export {
290
+ AssetBalanceInfo,
291
+ AssetWithDecimals,
292
+ Balance,
293
+ DepositGetParams,
294
+ DepositTransferData,
295
+ MoonXcmSdk,
296
+ MoonbaseXcmSdk,
297
+ MoonbeamXcmSdk,
298
+ MoonriverXcmSdk,
299
+ PolkadotService,
300
+ SdkOptions,
301
+ WithdrawGetParams,
302
+ WithdrawTransferData,
303
+ XCMType,
304
+ XTokensContract,
305
+ XcmFeeWithBalance,
306
+ XcmFeeWithDecimals,
307
+ XcmSdk,
308
+ XcmSdkByChain,
309
+ XcmSdkDeposit,
310
+ XcmSdkDepositFrom,
311
+ XcmSdkWithdraw,
312
+ XcmSdkWithdrawTo,
313
+ createPolkadotServices,
314
+ init,
315
+ isDepositTransferData,
316
+ isWithdrawTransferData,
317
+ isXcmSdkDeposit,
318
+ isXcmSdkWithdraw,
319
+ };
@@ -0,0 +1,2 @@
1
+ import{ExtrinsicStatus as os}from"@moonbeam-network/xcm-utils";import{Contract as H}from"ethers";var I=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var T=class{constructor(e){this.address="0x0000000000000000000000000000000000000804";this.#s=e,this.#e=new H(this.address,I,e)}#e;#s;async transfer(e,s,n,a,i){let{usesEthereumAccounts:m}=a.destination,r=a.getParams(e,m);return a.xcmFeeAsset?this.#e.transferMultiCurrencies([[a.xcmFeeAsset.asset.erc20Id,i],[n.erc20Id,s]],0,r,a.weight):this.#e.transfer(n.erc20Id,s,r,a.weight)}async getTransferFees(e,s,n,a){let i=(await this.#e.estimateGas.transfer(n.erc20Id,s,a.getParams(e,a.destination.usesEthereumAccounts),a.weight)).toBigInt(),m=await this.getGasPrice();return i*m}async getGasPrice(){let{gasPrice:e,maxPriorityFeePerGas:s}=await this.#s.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((s==null?void 0:s.toBigInt())||0n)}};import"@polkadot/api-augment";import{getPolkadotApi as L}from"@moonbeam-network/xcm-utils";import E from"lodash";function X(t,e){return BigInt(t)*e/BigInt(10**12)}var P=class{#e;constructor(e){this.#e=e}static async create(e){return new P(await L(e))}getMetadata(){return{decimals:this.#e.registry.chainDecimals.at(0)||12,symbol:this.#e.registry.chainTokens.at(0),ss58Format:this.#e.registry.chainSS58||42,genesisHash:this.#e.genesisHash.toHex()}}getExistentialDeposit(){var e,s;return((s=(e=this.#e.consts.balances)==null?void 0:e.existentialDeposit)==null?void 0:s.toBigInt())||0n}async getAssetDecimals(e){return(await this.getAssetMeta(e)).decimals.toNumber()}async getAssetMeta(e){return await(e.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata)(e.id)}async subscribeToAccountInfo(e,s){return this.#e.query.system.account(e,s)}async subscribeToBalance(e,s){return this.subscribeToAccountInfo(e,({data:n})=>s(n.free.toBigInt()-n.miscFrozen.toBigInt()))}async getGenericBalance(e,{pallet:s,function:n,getParams:a,path:i,calc:m}){var o;let r=await this.#e.query[s][n](...a(e));if(r.isEmpty)return 0n;let c=((o=r.unwrap)==null?void 0:o.call(r))||r;return m(i.length?E.get(c,i):c)}async getAssetMinBalance({pallet:e,function:s,params:n,path:a}){let i=await this.#e.query[e][s](...n);return i.isEmpty?0n:E.get(i.value,a).toBigInt()}getXcmExtrinsic(e,s,{pallet:n,extrinsic:a,getParams:i},m,r){let c=this.#e.tx[n][a],o=c(...i({account:e,amount:s,extrinsicCall:c,fee:m}));return r&&(o=this.#e.tx.proxy.proxy(r,null,o)),o}async getAssetFee(e,s,n){return X(s,await this.getUnitsPerSecond(e,n))}async getUnitsPerSecond(e,s){if(e.isNative)return s.unitsPerSecond;let n=await this.getAssetType(e.id);return n?(await this.#e.query.assetManager.assetTypeUnitsPerSecond(n)).unwrapOrDefault().toBigInt():0n}async getAssetType(e){return(await this.#e.query.assetManager.assetIdType(e)).unwrapOr(void 0)}async subscribeToAssetsBalanceInfo(e,s,n){let a=Object.values(s.assets),i=await this.getAssetsMetadata(a);return this.subscribeToAccountBalances(e,a,m=>{n(m.map((r,c)=>{var d;let o=a[c],l=i[c],{chains:[y],from:u}=s.deposit(o.originSymbol),{origin:b}=u(y.key);return{asset:o,balance:{balance:r.balance.toBigInt(),decimals:o.isNative?b.decimals:l.decimals.toNumber(),symbol:o.isNative?o.originSymbol:((d=l.symbol.toHuman())==null?void 0:d.toString())||""},origin:b}}))})}async getAssetsMetadata(e){let s=e.map(n=>[n.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata,[n.id]]);return this.#e.queryMulti(s)}async subscribeToAccountBalances(e,s,n){let a=s.map(i=>[i.isLocalAsset?this.#e.query.localAssets.account:this.#e.query.assets.account,[i.id,e]]);return this.#e.queryMulti(a,i=>{let m=i.map(r=>r.unwrapOrDefault());n(m)})}};async function M(t){return Promise.all(t.map(e=>P.create(e)))}import{moonbase as ee,moonbeam as se,moonriver as te}from"@moonbeam-network/xcm-config";import ne from"lodash";import{createExtrinsicEventHandler as Q}from"@moonbeam-network/xcm-utils";import{isUndefined as j}from"@polkadot/util";function R({account:t,config:e,foreignPolkadot:s,primaryAccount:n,fee:a}){return i=>s.getXcmExtrinsic(t,i,e.extrinsic,a,n)}async function F({account:t,asset:e,config:s,foreignPolkadot:n,moonChain:a,nativeAsset:i,origin:m,polkadot:r,polkadotSigner:c,primaryAccount:o,sourceAccount:l}){var K,x;let y=typeof l=="string"?l:l.address,u=n.getMetadata(),b={asset:((K=s.xcmFeeAsset)==null?void 0:K.asset)??e,balance:((x=s.xcmFeeAsset)==null?void 0:x.balance)??s.balance},[d,p,f,h,A=0n,S,g,C]=await Promise.all([e.isNative?a.decimals:r.getAssetDecimals(e),n.getExistentialDeposit(),n.getGenericBalance(o||y,s.balance),s.sourceFeeBalance?n.getGenericBalance(y,s.sourceFeeBalance):void 0,s.sourceMinBalance?n.getAssetMinBalance(s.sourceMinBalance):void 0,r.getAssetFee(b.asset,s.source.weight,a),n.getGenericBalance(o||y,b.balance),r.getAssetDecimals(b.asset)]),k=s.xcmFeeAsset?0n:S,B=R({account:t,config:s,foreignPolkadot:n,primaryAccount:o,fee:S});return{asset:{...e,decimals:d},existentialDeposit:p,min:k,moonChainFee:{balance:g,decimals:b.asset.isNative?a.decimals:C,fee:S,symbol:b.asset.originSymbol},native:{...i,decimals:u.decimals},origin:m,source:{...s.source},sourceBalance:f,sourceFeeBalance:j(h)?void 0:{...u,balance:h},sourceMinBalance:A,getFee:async(w=f)=>(await B(w).paymentInfo(l)).partialFee.toBigInt(),send:async(w,D)=>(await B(w).signAndSend(l,{signer:c},D&&Q(s.extrinsic.pallet,s.extrinsic.successEvent,D))).toString()}}function z(t){return!!t.from}function _(t){return!!t.to}function J(t){return!!(t!=null&&t.destination)}function V(t){return!!(t!=null&&t.moonChainFee)}function Y(t,e){if(t.asset.isNative)return-1;if(e.asset.isNative)return 1;if(t.balance.balance||e.balance.balance)return Number(e.balance.balance-t.balance.balance);let s=(t.origin.name+t.asset.originSymbol).toLowerCase(),n=(e.origin.name+e.asset.originSymbol).toLowerCase();return s<n?-1:s>n?1:0}async function W({account:t,polkadot:e,configBuilder:s,cb:n}){let a=0n,i=[],m=o=>{let l=typeof o=="bigint";a=l?o:a,i=(l?i:o).map(y=>(y.asset.isNative&&(y.balance.balance=a),y)).sort(Y),i.length&&n(i)},r=await e.subscribeToBalance(t,m),c=await e.subscribeToAssetsBalanceInfo(t,s,m);return()=>{r(),c()}}function G(t){return{id:"",erc20Id:"",originSymbol:t}}import{createTxEventHandler as Z}from"@moonbeam-network/xcm-utils";async function N({asset:t,config:e,contract:s,originAccount:n,destinationAccount:a,destinationPolkadot:i,ethersSigner:m,moonChain:r,nativeAsset:c,origin:o,polkadot:l}){var B,K;let y=i.getMetadata(),u=((B=e.xcmFeeAsset)==null?void 0:B.asset)??t,[b,d,p,f,h,A,S]=await Promise.all([t.isNative?r.decimals:l.getAssetDecimals(t),e.xcmFeeAsset?await l.getGenericBalance(n,(K=e.xcmFeeAsset)==null?void 0:K.balance.origin):void 0,i.getGenericBalance(a,e.balance),e.xcmFeeAsset?i.getGenericBalance(a,e.xcmFeeAsset.balance.destination):void 0,t.isNative?0n:i.getExistentialDeposit(),e.sourceMinBalance?i.getAssetMinBalance(e.sourceMinBalance):0n,l.getAssetDecimals(u)]),g=$(A,e),C=e.xcmFeeAsset?0n:q(A||h,p,g),k=e.xcmFeeAsset&&f!==void 0?q(A||h,f,g):0n;return{asset:{...t,decimals:b},destination:{...e.destination},destinationBalance:p,destinationFee:g,existentialDeposit:h,min:C,minXcmFeeAsset:{amount:k,decimals:S,symbol:u.originSymbol},native:{...c,decimals:y.decimals},origin:o,originXcmFeeAssetBalance:d,getFee:async x=>s.getTransferFees(a,x,t,e),send:async(x,w)=>{let D=await s.transfer(a,x,t,e,k);return w&&Z(m,D.hash,w),D.hash}}}function $(t,e){let s=BigInt(e.weight*e.feePerWeight);return t>s?t:s}function q(t,e,s){let n=e>=t?0n:t-e;return s+n}function $e(t){return{moonbase:v(ee,t),moonbeam:v(se,t),moonriver:v(te,t)}}function v(t,e){let{symbols:s,assets:n,moonAsset:a,moonChain:i}=t;return{symbols:s,assets:n,moonAsset:a,moonChain:i,subscribeToAssetsBalanceInfo:async(m,r)=>{let[c]=await M([t.moonChain.ws]);return W({account:m,polkadot:c,configBuilder:t,cb:r})},deposit:m=>{let{chains:r,from:c}=t.deposit(m);return{chains:r,from:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,d,{primaryAccount:p,polkadotSigner:f}={})=>{let h=f||(e==null?void 0:e.polkadotSigner);if(ne.isString(d)&&!h)throw new Error("Polkadot Signer/KeyringPair are not provided to XCM-SDK");let[A,S]=await M([t.moonChain.ws,u.source.ws]),g=S.getMetadata(),C=t.assets[g.symbol]||G(g.symbol);return F({account:b,asset:l,config:u,foreignPolkadot:S,moonChain:i,nativeAsset:C,origin:y,polkadot:A,polkadotSigner:h,primaryAccount:p,sourceAccount:d})}}}}},withdraw:m=>{let{chains:r,to:c}=t.withdraw(m);return{chains:r,to:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,{ethersSigner:d}={})=>{let p=d||(e==null?void 0:e.ethersSigner);if(!p)throw new Error("Ethers signer is not provided to XCM-SDK");let f=await p.getAddress(),h=new T(p),[A,S]=await M([t.moonChain.ws,u.destination.ws]),g=S.getMetadata(),C=t.assets[g.symbol];return N({asset:l,config:u,contract:h,originAccount:f,destinationAccount:b,destinationPolkadot:S,ethersSigner:p,moonChain:i,nativeAsset:C,origin:y,polkadot:A})}}}}}}}export{os as ExtrinsicStatus,P as PolkadotService,T as XTokensContract,M as createPolkadotServices,$e as init,V as isDepositTransferData,J as isWithdrawTransferData,z as isXcmSdkDeposit,_ as isXcmSdkWithdraw};
2
+ //# sourceMappingURL=index.mjs.map