@moonbeam-network/xcm-sdk 1.0.0-dev.11 → 1.0.0-dev.110

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.
package/README.md CHANGED
@@ -1,22 +1,10 @@
1
- ![Moonbeam](https://docs.moonbeam.network/images/builders/interoperability/xcm/sdk/xcm-sdk-banner.png)
2
-
3
1
  The Moonbeam XCM SDK enables developers to easily transfer assets between chains, either between parachains or between a parachain and the relay chain, within 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.
4
2
 
5
3
  The XCM SDK offers helper functions, that provide a very simple interface to execute XCM transfers between chains in the Polkadot/Kusama ecosystem. In addition, the XCM config package allows any parachain project to add their information in a standard way, so they can be immediately supported by the XCM SDK.
6
4
 
7
5
  # Documentation
8
6
 
9
- ## v1 (current)
10
-
11
- - [readme](https://github.com/PureStake/xcm-sdk/tree/main)
12
- - [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/xcm-sdk/)
13
- - [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/reference/)
14
-
15
- ## v0 (previous)
16
-
17
- - [readme](https://github.com/PureStake/xcm-sdk/tree/v0)
18
- - [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v0/xcm-sdk/)
19
- - [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v0/reference/)
7
+ You can find the documentation at [https://moonbeam-foundation.github.io/xcm-sdk/latest/](https://moonbeam-foundation.github.io/xcm-sdk/latest/).
20
8
 
21
9
  # Installation
22
10
 
@@ -32,7 +20,7 @@ npm i @polkadot/api @polkadot/api-augment @polkadot/types @polkadot/util @polkad
32
20
 
33
21
  # Usage
34
22
 
35
- The following sections contain basic examples of how to work with the XCM SDK to build transfer data to transfer an asset from one chain to another and how to submit the transfer. For a detailed overview on how to use each method, including a reference to the parameters and returned data of each method exposed by the SDK, please refer to the [XCM SDK v1 docs](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/).
23
+ The following sections contain basic examples of how to work with the XCM SDK to build transfer data to transfer an asset from one chain to another and how to submit the transfer. For a detailed overview on how to use each method, including a reference to the parameters and returned data of each method exposed by the SDK, please refer to the [XCM SDK docs](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/).
36
24
 
37
25
  ## Build XCM Transfer Data
38
26
 
@@ -47,7 +35,7 @@ const dataViaAssetsMethod = await assets()
47
35
  .source('INSERT_SOURCE_CHAIN')
48
36
  .destination('INSERT_DESTINATION_CHAIN')
49
37
  .accounts('INSERT_SOURCE_ADDRESS', 'INSERT_DESTINATION_ADDRESS', {
50
- ethersSigner?: 'INSERT_ETHERS_SIGNER',
38
+ evmSigner?: 'INSERT_EVM_SIGNER',
51
39
  polkadotSigner?: 'INSERT_POLKADOT_SIGNER',
52
40
  });
53
41
 
@@ -55,7 +43,7 @@ const dataViaAssetsMethod = await assets()
55
43
  const dataViaGetTransferDataMethod = await getTransferData({
56
44
  destinationAddress: 'INSERT_DESTINATION_ADDRESS',
57
45
  destinationKeyOrChain: 'INSERT_DESTINATION_CHAIN',
58
- ethersSigner?: 'INSERT_ETHERS_SIGNER',
46
+ evmSigner?: 'INSERT_EVM_SIGNER',
59
47
  keyOrAsset: 'INSERT_ASSET',
60
48
  polkadotSigner?: 'INSERT_POLKADOT_SIGNER',
61
49
  sourceAddress: 'INSERT_SOURCE_ADDRESS',
@@ -73,10 +61,10 @@ const hash = await dataViaGetTransferDataMethod.transfer('INSERT_TRANSFER_AMOUNT
73
61
 
74
62
  # Examples
75
63
 
76
- - [sdk](https://github.com/PureStake/xcm-sdk/blob/main/examples/sdk-simple)
64
+ - [sdk](https://github.com/moonbeam-foundation/xcm-sdk/blob/main/examples/sdk-simple)
77
65
 
78
66
  ```bash
79
- git clone git@github.com:PureStake/xcm-sdk.git
67
+ git clone git@github.com:moonbeam-foundation/xcm-sdk.git
80
68
  cd xcm-sdk
81
69
  npm i
82
70
  cd examples/sdk-simple
@@ -89,7 +77,7 @@ npm start
89
77
  # Contributing
90
78
 
91
79
  ```bash
92
- git clone git@github.com:PureStake/xcm-sdk.git
80
+ git clone git@github.com:moonbeam-foundation/xcm-sdk.git
93
81
  npm i
94
82
  npm run dev
95
83
  ```
@@ -110,3 +98,39 @@ cp .env.example .env
110
98
 
111
99
  npm run test:acc
112
100
  ```
101
+
102
+ # Release
103
+
104
+ To create a dev version go to GitHub actions and run `publish dev versions` workflow.
105
+
106
+ To create a release version run:
107
+
108
+ ```bash
109
+ npm run changeset
110
+ ```
111
+
112
+ # Testing the change in the SDK locally
113
+
114
+ Build the project:
115
+
116
+ ```bash
117
+ npm run build
118
+ ```
119
+
120
+ ```bash
121
+ npm run link
122
+ ```
123
+
124
+ In your project where you would like to test the changes:
125
+
126
+ ```bash
127
+ npm link @moonbeam-network/xcm-types @moonbeam-network/xcm-utils @moonbeam-network/xcm-builder @moonbeam-network/xcm-config @moonbeam-network/xcm-sdk
128
+ ```
129
+
130
+ If you need you can link other packages too.
131
+
132
+ After testing is done, unlink the SDK:
133
+
134
+ ```bash
135
+ npm unlink @moonbeam-network/xcm-types @moonbeam-network/xcm-utils @moonbeam-network/xcm-builder @moonbeam-network/xcm-config @moonbeam-network/xcm-sdk
136
+ ```
package/build/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var pt=Object.create;var B=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var dt=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,yt=Object.prototype.hasOwnProperty;var ht=(n,t)=>{for(var e in t)B(n,e,{get:t[e],enumerable:!0})},L=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of dt(t))!yt.call(n,s)&&s!==e&&B(n,s,{get:()=>t[s],enumerable:!(a=lt(t,s))||a.enumerable});return n};var H=(n,t,e)=>(e=n!=null?pt(gt(n)):{},L(t||!n||!n.__esModule?B(e,"default",{value:n,enumerable:!0}):e,n)),At=n=>L(B({},"__esModule",{value:!0}),n);var Bt={};ht(Bt,{Sdk:()=>St,getContractFee:()=>nt,getExtrinsicFee:()=>at,getFee:()=>et,getFeeBalances:()=>W,getMax:()=>st,getSourceData:()=>q});module.exports=At(Bt);var M=require("@moonbeam-network/xcm-types"),tt=require("@moonbeam-network/xcm-utils"),G=H(require("big.js"),1);var U=require("ethers");var J=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var D=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=new U.Contract(this.address,J,e)}async getBalance(){return(await this.#e.balanceOf(...this.#t.args)).toBigInt()}async getDecimals(){return await this.#e.decimals()}};var Y=require("ethers");var V=[{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 I=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new Y.Contract(this.address,V,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),a=await this.getGasPrice();return e*a}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function g(n,t){if(n.module==="Erc20")return new D(n,t);if(n.module==="Xtokens")return new I(n,t);throw new Error(`Contract ${n.module} not found`)}var k=require("@moonbeam-network/xcm-builder"),Z=require("@moonbeam-network/xcm-utils");async function T({address:n,config:t,ethersSigner:e,polkadot:a}){let s=t.balance.build({address:n,asset:a.chain.getBalanceAssetId(t.asset)});return s.type===k.CallType.Substrate?a.query(s):g(s,e).getBalance()}async function A({address:n,asset:t,config:e,ethersSigner:a,polkadot:s}){let r=e.balance.build({address:n,asset:s.chain.getBalanceAssetId(t||e.asset)});return r.type===k.CallType.Substrate?s.getAssetDecimals(t||e.asset):g(r,a).getDecimals()}async function v(n,t){if(n.min)return t.query(n.min.build({asset:t.chain.getMinAssetId(n.asset)}));let e=t.chain.getAssetMin(n.asset);if(e){let a=await t.getAssetDecimals(n.asset);return(0,Z.toBigInt)(e,a)}return 0n}async function q({transferConfig:n,destinationAddress:t,destinationFee:e,ethersSigner:a,polkadot:s,sourceAddress:r}){var N,X,$,j;let{asset:o,destination:m,source:{chain:c,config:i}}=n,f=M.AssetAmount.fromAsset(o,{amount:0n,decimals:await A({address:t,config:i,ethersSigner:a,polkadot:s})}),l=(N=i.fee)!=null&&N.asset?M.AssetAmount.fromAsset(i.fee.asset,{amount:0n,decimals:await A({address:t,asset:i.fee.asset,config:i,ethersSigner:a,polkadot:s})}):f,p=(X=i.destinationFee)!=null&&X.asset?M.AssetAmount.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await A({address:t,asset:i.destinationFee.asset,config:i,ethersSigner:a,polkadot:s})}):f,u=await T({address:r,config:i,ethersSigner:a,polkadot:s}),C=await W({address:r,balance:u,feeConfig:i.fee,polkadot:s}),w=i.asset===i.destinationFee.asset?u:await W({address:r,balance:u,feeConfig:i.destinationFee,polkadot:s}),P=await v(i,s),x=($=i.extrinsic)==null?void 0:$.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),S=(j=i.contract)==null?void 0:j.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),E=await et({balance:u,contract:S,decimals:l.decimals,ethersSigner:a,extrinsic:x,polkadot:s,sourceAddress:r}),Q=f.copyWith({amount:u}),{existentialDeposit:R}=s,z=l.copyWith({amount:E}),mt=l.copyWith({amount:C}),ut=p.copyWith({amount:w}),K=f.copyWith({amount:P}),ft=st({balanceAmount:Q,existentialDeposit:R,feeAmount:z,minAmount:K});return{balance:Q,chain:c,destinationFeeBalance:ut,existentialDeposit:R,fee:z,feeBalance:mt,max:ft,min:K}}async function W({address:n,balance:t,feeConfig:e,polkadot:a}){return e?a.query(e.balance.build({address:n,asset:a.chain.getBalanceAssetId(e.asset)})):t}async function et({balance:n,contract:t,decimals:e,ethersSigner:a,extrinsic:s,polkadot:r,sourceAddress:o}){if(t){if(!a)throw new Error("Ethers signer must be provided");return nt(n,t,e,a)}if(s)return at(n,s,r,o);throw new Error("Either contract or extrinsic must be provided")}async function nt(n,t,e,a){let r=await g(t,a).getFee(n);return(0,tt.convertDecimals)(r,18,e)}async function at(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function st({balanceAmount:n,existentialDeposit:t,feeAmount:e,minAmount:a}){let s=n.toBig().minus(a.toBig()).minus(n.isSame(t)?t.toBig():(0,G.default)(0)).minus(n.isSame(e)?e.toBig():(0,G.default)(0));return n.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}var _=require("@moonbeam-network/xcm-config");var b=require("@moonbeam-network/xcm-utils"),h=H(require("big.js"),1);var ne=require("@polkadot/api-augment"),d=require("@moonbeam-network/xcm-config"),rt=require("@moonbeam-network/xcm-types"),it=require("@moonbeam-network/xcm-utils"),y=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new y(await(0,it.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(y.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===d.equilibriumAlphanet.key)return d.eq;if(e==="oring"&&this.chain.key===d.darwiniaPangoro.key)return d.paring;if(!e)throw new Error("No native symbol key found");let a=d.assetsMap.get(e);if(!a)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return a}get existentialDeposit(){var s,r;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,a=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return rt.AssetAmount.fromAsset(this.asset,{amount:a,decimals:this.decimals})}async getAssetMeta(t){var r,o,m,c,i;let e=((r=this.api.query.assets)==null?void 0:r.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let a=await e(t),s="unwrapOrDefault"in a?a.unwrapOrDefault():a;return{decimals:s.decimals.toNumber(),symbol:s.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let a=this.api.tx[e.module][e.func],s=e.getArgs(a);return(await a(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,a){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).signAndSend(this.#t(a)?t:a,{nonce:-1,signer:this.#t(a)?a:void 0})).toString()}#t(t){return"signPayload"in t}};var O=require("@moonbeam-network/xcm-types"),ot=require("@moonbeam-network/xcm-utils");async function ct({transferConfig:n,destinationAddress:t,ethersSigner:e,polkadot:a}){let{asset:s,destination:{chain:r,config:o}}=n,m=O.AssetAmount.fromAsset(s,{amount:0n,decimals:await A({address:t,config:o,ethersSigner:e,polkadot:a})}),c=await T({address:t,config:o,ethersSigner:e,polkadot:a}),i=await v(o,a),f=m.copyWith({amount:c}),{existentialDeposit:l}=a,p=await wt({config:n,polkadot:a}),u=m.copyWith({amount:i});return{balance:f,chain:r,existentialDeposit:l,fee:p,min:u}}async function wt({config:n,polkadot:t}){let{amount:e,asset:a}=n.source.config.destinationFee,s=await t.getAssetDecimals(a),r=O.AssetAmount.fromAsset(a,{amount:0n,decimals:s});if(Number.isFinite(e))return r.copyWith({amount:(0,ot.toBigInt)(e,s)});let o=e.build({api:t.api,asset:t.chain.getAssetId(a)});return r.copyWith({amount:await o.call()})}async function F({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:a,transferConfig:s}){if(!t)throw new Error("Ethers signer must be provided");let[r,o]=await y.createMulti([s.destination.chain,s.source.chain]),m=await ct({destinationAddress:n,ethersSigner:t,polkadot:r,transferConfig:s}),c=await xt(o,m.fee),i=await q({destinationAddress:n,destinationFee:c,ethersSigner:t,polkadot:o,sourceAddress:a,transferConfig:s});return{destination:m,getEstimate(f){let p=(0,h.default)((0,b.toBigInt)(f,i.balance.decimals).toString()).minus(i.balance.isSame(c)?c.toBig():(0,h.default)(0));return i.balance.copyWith({amount:p.lt(0)?0n:BigInt(p.toFixed())})},isSwapPossible:!0,max:i.max,min:Pt(m),source:i,async swap(){return F({destinationAddress:a,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(f){var x,S;let l=(0,b.toBigInt)(f,i.balance.decimals),{asset:p,source:{chain:u,config:C}}=s,w=(x=C.contract)==null?void 0:x.build({address:n,amount:l,asset:u.getAssetId(p),destination:m.chain,fee:c.amount,feeAsset:u.getAssetId(c)}),P=(S=C.extrinsic)==null?void 0:S.build({address:n,amount:l,asset:u.getAssetId(p),destination:m.chain,fee:c.amount,feeAsset:u.getAssetId(c),palletInstance:u.getAssetPalletInstance(p),source:u});if(w){if(!t)throw new Error("Ethers signer must be provided");return g(w,t).transfer().then(E=>E.hash)}if(P){if(!e)throw new Error("Polkadot signer must be provided");return o.transfer(a,P,e)}throw new Error("Either contract or extrinsic must be provided")}}}function Pt({balance:n,existentialDeposit:t,fee:e,min:a}){let s=(0,h.default)(0).plus(n.isSame(e)?e.toBig():(0,h.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,h.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,h.default)(0));return n.copyWith({amount:BigInt(s.toFixed())})}async function xt(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,b.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function St(n){return{assets(t){let{assets:e,asset:a}=(0,_.ConfigBuilder)().assets(t);return{assets:e,asset(s){let{sourceChains:r,source:o}=a(s);return{sourceChains:r,source(m){let{destinationChains:c,destination:i}=o(m);return{destinationChains:c,destination(f){return{async accounts(l,p,u){return F({...n,...u,destinationAddress:p,sourceAddress:l,transferConfig:i(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:a,keyOrAsset:s,polkadotSigner:r,sourceAddress:o,sourceKeyOrChain:m}){return F({destinationAddress:t,ethersSigner:a,polkadotSigner:r,sourceAddress:o,transferConfig:(0,_.ConfigBuilder)().assets().asset(s).source(m).destination(e).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalances,getMax,getSourceData});
1
+ "use strict";var nt=Object.create;var I=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var ot=(n,t)=>{for(var e in t)I(n,e,{get:t[e],enumerable:!0})},Q=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of st(t))!it.call(n,s)&&s!==e&&I(n,s,{get:()=>t[s],enumerable:!(a=at(t,s))||a.enumerable});return n};var V=(n,t,e)=>(e=n!=null?nt(rt(n)):{},Q(t||!n||!n.__esModule?I(e,"default",{value:n,enumerable:!0}):e,n)),ct=n=>Q(I({},"__esModule",{value:!0}),n);var dt={};ot(dt,{Sdk:()=>pt,getAssetsBalances:()=>K,getBalance:()=>g,getExtrinsicFee:()=>J,getFee:()=>z,getMax:()=>L,getMin:()=>B,getParachainBalances:()=>ft,getSourceData:()=>O});module.exports=ct(dt);var M=require("@moonbeam-network/xcm-utils"),q=V(require("big.js"),1);var E=require("viem");var R=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var D=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=(0,E.createPublicClient)({chain:e.getViemChain(),transport:(0,E.http)()})}async getBalance(){let t=this.#t.args[0];return this.#e.readContract({abi:R,address:this.address,args:[t],functionName:"balanceOf"})}};var F=require("viem");var W=[{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 k=class{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;constructor(t,e,a){this.#t=t,this.address=a??this.defaultMoonChainAddress,this.#e=(0,F.createPublicClient)({chain:e.getViemChain(),transport:(0,F.http)()})}async transfer(t){let{request:e}=await this.#e.simulateContract({abi:W,account:t.account,address:this.address,args:this.#t.args,functionName:this.#t.func});return await t.writeContract(e)}async getFee(t,e){if(t===0n)return 0n;try{let a=await this.#e.estimateContractGas({abi:W,account:e,address:this.address,args:this.#t.args,functionName:this.#t.func}),s=await this.getGasPrice();return a*s}catch(a){throw console.error(a),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){return this.#e.getGasPrice()}};function C(n,t){var e;if(!n.isEvmParachain())throw new Error("Chain is not an EVM parachain");if(t.module==="Erc20")return new D(t,n);if(t.module==="Xtokens"){let a=(e=n==null?void 0:n.contracts)==null?void 0:e.Xtokens;return new k(t,n,a)}throw new Error(`Contract ${t.module} not found`)}var $=require("@moonbeam-network/xcm-builder"),_=require("@moonbeam-network/xcm-types"),j=require("@moonbeam-network/xcm-utils");async function g({address:n,asset:t,builder:e,chain:a,polkadot:s}){let r=e.build({address:n,asset:t.getBalanceAssetId(),constractAddress:t.address}),i=_.AssetAmount.fromChainAsset(t,{amount:0n});if(r.type===$.CallType.Substrate){let u=await s.query(r),m=a.usesChainDecimals?(0,j.convertDecimals)(u,s.decimals,t.decimals):u;return i.copyWith({amount:m})}let c=await C(a,r).getBalance();return i.copyWith({amount:c})}async function B(n,t){let e=_.AssetAmount.fromChainAsset(t.chain.getChainAsset(n.asset),{amount:0n});if(n.min){let a=await t.query(n.min.build({asset:e.getMinAssetId()}));return e.copyWith({amount:a})}return e.min?e.copyWith({amount:e.min}):e.copyWith({amount:0n})}async function O({transferConfig:n,destinationAddress:t,destinationFee:e,polkadot:a,sourceAddress:s}){var S,w;let{destination:r,source:{chain:i,config:o}}=n,c=i.getChainAsset(n.asset),u=o.fee?i.getChainAsset(o.fee.asset):c,m=await g({address:s,asset:c,builder:o.balance,chain:i,polkadot:a}),p=o.fee?await g({address:s,asset:u,builder:o.fee.balance,chain:i,polkadot:a}):m,d=o.destinationFee.asset.isEqual(c)?m:o.destinationFee.asset.isEqual(u)?p:await g({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:a}),f=await B(o,a),{existentialDeposit:l}=a,h=(S=o.extrinsic)==null?void 0:S.build({address:t,amount:m.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),T=(w=o.contract)==null?void 0:w.build({address:t,amount:m.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:u.address||u.getAssetId()}),y=await z({balance:m,chain:i,contract:T,extrinsic:h,feeBalance:p,feeConfig:o.fee,polkadot:a,sourceAddress:s}),x=L({balance:m,existentialDeposit:l,fee:y,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:y,feeBalance:p,max:x,min:f}}async function z({balance:n,feeBalance:t,chain:e,contract:a,extrinsic:s,feeConfig:r,polkadot:i,sourceAddress:o}){if(!a&&!s)throw new Error("Either contract or extrinsic must be provided");if(a){let f=await C(e,a).getFee(n.amount,o);return t.copyWith({amount:f})}let c=await J(n,s,i,o),u=r!=null&&r.extra?(0,M.toBigInt)(r.extra,t.decimals):0n,m=c+u,p=e.usesChainDecimals?(0,M.convertDecimals)(m,i.decimals,t.decimals):m;return t.copyWith({amount:p})}async function J(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function L({balance:n,existentialDeposit:t,fee:e,min:a}){let s=n.toBig().minus(a.toBig()).minus(n.isSame(t)?t.toBig():(0,q.default)(0)).minus(n.isSame(e)?e.toBig():(0,q.default)(0));return n.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function K({address:n,chain:t,assets:e,polkadot:a}){let s=e.reduce((i,o)=>i.some(c=>c.asset.isEqual(o.asset))?i:[o,...i],[]);return await Promise.all(s.map(async i=>g({address:n,asset:t.getChainAsset(i.asset),builder:i.balance,chain:t,polkadot:a})))}var P=require("@moonbeam-network/xcm-config");var X=require("@moonbeam-network/xcm-utils"),A=V(require("big.js"),1),et=require("@moonbeam-network/xcm-types");var Ut=require("@polkadot/api-augment"),U=require("@moonbeam-network/xcm-types"),Y=require("@moonbeam-network/xcm-utils"),b=class n{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new n(await(0,Y.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(e=>n.create(e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get existentialDeposit(){var s,r;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,a=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return U.AssetAmount.fromChainAsset(this.chain.nativeAsset,{amount:a})}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let a=this.api.tx[e.module][e.func],s=e.getArgs(a);return(await a(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,a){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).signAndSend(this.#t(a)?t:a,{nonce:-1,signer:this.#t(a)?a:void 0})).toString()}#t(t){return"signPayload"in t}};var Z=require("@moonbeam-network/xcm-types");async function tt({transferConfig:n,destinationAddress:t,polkadot:e}){let{destination:{chain:a,config:s}}=n,r=a.getChainAsset(s.asset),i=await g({address:t,asset:r,builder:s.balance,chain:a,polkadot:e}),o=await B(s,e),c=await mt({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function mt({transferConfig:n,polkadot:t}){let{amount:e}=n.source.config.destinationFee,a=Z.AssetAmount.fromChainAsset(n.destination.chain.getChainAsset(n.source.config.destinationFee.asset),{amount:0n});if(Number.isFinite(e))return a.copyWith({amount:e});let s=e.build({api:t.api,asset:a.getAssetId()});return a.copyWith({amount:await s.call()})}async function G({configService:n,destinationAddress:t,evmSigner:e,polkadotSigner:a,sourceAddress:s,transferConfig:r}){let[i,o]=await b.createMulti([r.destination.chain,r.source.chain]),c=await tt({destinationAddress:t,polkadot:i,transferConfig:r}),u=r.source.chain.getChainAsset(c.fee),m=et.AssetAmount.fromChainAsset(u,{amount:c.fee.convertDecimals(u.decimals).amount}),p=await O({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(d){let l=(0,A.default)((0,X.toBigInt)(d,p.balance.decimals).toString()).minus(p.balance.isSame(m)?m.toBig():(0,A.default)(0));return p.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:p.max,min:ut(c),source:p,async swap(){return G({configService:n,destinationAddress:s,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(d,f){var N,H;let l=(0,X.toBigInt)(d,p.balance.decimals),{source:{chain:h,config:T}}=r,y=h.getChainAsset(r.asset),x=h.getChainAsset(m.key),S=(N=T.contract)==null?void 0:N.build({address:t,amount:l,asset:y.address||y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:x.address||x.getAssetId()}),w=(H=T.extrinsic)==null?void 0:H.build({address:t,amount:l,asset:y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:x.getAssetId(),palletInstance:y.getAssetPalletInstance(),source:h});if(S){let v=e||f.evmSigner;if(!v)throw new Error("EVM Signer must be provided");return C(h,S).transfer(v)}if(w){let v=a||f.polkadotSigner;if(!v)throw new Error("Polkadot signer must be provided");return o.transfer(s,w,v)}throw new Error("Either contract or extrinsic must be provided")}}}function ut({balance:n,existentialDeposit:t,fee:e,min:a}){let s=(0,A.default)(0).plus(n.isSame(e)?e.toBig():(0,A.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,A.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,A.default)(0));return n.copyWith({amount:BigInt(s.toFixed())})}function pt(n){let t=(n==null?void 0:n.configService)??new P.ConfigService;return{assets(e){let{assets:a,asset:s}=(0,P.ConfigBuilder)(t).assets(e);return{assets:a,asset(r){let{sourceChains:i,source:o}=s(r);return{sourceChains:i,source(c){let{destinationChains:u,destination:m}=o(c);return{destinationChains:u,destination(p){return{async accounts(d,f){return G({...n,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:m(p).build()})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:a,evmSigner:s,keyOrAsset:r,polkadotSigner:i,sourceAddress:o,sourceKeyOrChain:c}){return G({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:(0,P.ConfigBuilder)(t).assets().asset(r).source(c).destination(a).build()})}}}async function ft(n,t){let s=new P.ConfigService().getChainConfig(n).getAssetsConfigs(),r=await b.create(n);return await K({chain:n,assets:s,address:t,polkadot:r})}0&&(module.exports={Sdk,getAssetsBalances,getBalance,getExtrinsicFee,getFee,getMax,getMin,getParachainBalances,getSourceData});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n ethersSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n ethersSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n ethersSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance =\n config.asset === config.destinationFee.asset\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n ethersSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport abi from './Erc20ABI.json';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n constructor(config: ContractConfig, signer: Signer) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async getBalance(): Promise<bigint> {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n\n return balance.toBigInt();\n }\n\n async getDecimals(): Promise<number> {\n const decimals = await this.#contract.decimals();\n\n return decimals;\n }\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements TransferContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\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 { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport { ConfigBuilder } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {}\n\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n ethersSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return (\n createContract(contract, ethersSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.key) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n ethersSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalances","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","Erc20ABI_default","Erc20","#config","#contract","config","signer","Erc20ABI_default","import_ethers","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","config","ethersSigner","polkadot","cfg","createContract","getDecimals","asset","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","getExtrinsicFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","ethersSigner","polkadot","asset","chain","config","zeroAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.ts","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './getTransferData/getTransferData.utils';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport {\n AssetConfig,\n FeeAssetConfig,\n TransferConfig,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n destination,\n source: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(transferConfig.asset);\n const feeAsset = config.fee ? chain.getChainAsset(config.fee.asset) : asset;\n\n const balance = await getBalance({\n address: sourceAddress,\n asset,\n builder: config.balance,\n chain,\n polkadot,\n });\n const feeBalance = config.fee\n ? await getBalance({\n address: sourceAddress,\n asset: feeAsset,\n builder: config.fee.balance,\n chain,\n polkadot,\n })\n : balance;\n // eslint-disable-next-line no-nested-ternary\n const destinationFeeBalance = config.destinationFee.asset.isEqual(asset)\n ? balance\n : config.destinationFee.asset.isEqual(feeAsset)\n ? feeBalance\n : await getBalance({\n address: sourceAddress,\n asset: chain.getChainAsset(config.destinationFee.asset),\n builder: config.destinationFee.balance,\n chain,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n const { existentialDeposit } = polkadot;\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance.amount,\n asset: asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: destinationFee.getAssetId(),\n palletInstance: asset.getAssetPalletInstance(),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance.amount,\n asset: asset.address || asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.address || feeAsset.getAssetId(),\n });\n\n const fee = await getFee({\n balance,\n chain,\n contract,\n extrinsic,\n feeBalance,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const max = getMax({\n balance,\n existentialDeposit,\n fee,\n min,\n });\n\n return {\n balance,\n chain,\n destinationFeeBalance,\n existentialDeposit,\n fee,\n feeBalance,\n max,\n min,\n };\n}\n\nexport interface GetFeeParams {\n balance: AssetAmount;\n feeBalance: AssetAmount;\n contract?: ContractConfig;\n chain: AnyChain;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n feeBalance,\n chain,\n contract: contractConfig,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<AssetAmount> {\n if (!contractConfig && !extrinsic) {\n throw new Error('Either contract or extrinsic must be provided');\n }\n\n if (contractConfig) {\n const contract = createContract(\n chain,\n contractConfig,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance.amount, sourceAddress);\n\n return feeBalance.copyWith({ amount: fee });\n }\n\n const fee = await getExtrinsicFee(\n balance,\n extrinsic as ExtrinsicConfig,\n polkadot,\n sourceAddress,\n );\n\n const extra = feeConfig?.extra\n ? toBigInt(feeConfig.extra, feeBalance.decimals)\n : 0n;\n const totalFee = fee + extra;\n\n const converted = chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, feeBalance.decimals)\n : totalFee;\n\n return feeBalance.copyWith({ amount: converted });\n}\n\nexport async function getExtrinsicFee(\n balance: AssetAmount,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balance: AssetAmount;\n existentialDeposit: AssetAmount;\n fee: AssetAmount;\n min: AssetAmount;\n}\n\nexport function getMax({\n balance,\n existentialDeposit,\n fee,\n min,\n}: GetMaxParams): AssetAmount {\n const result = balance\n .toBig()\n .minus(min.toBig())\n .minus(\n balance.isSame(existentialDeposit) ? existentialDeposit.toBig() : Big(0),\n )\n .minus(balance.isSame(fee) ? fee.toBig() : Big(0));\n\n return balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n\nexport interface GetAssetsBalancesParams {\n address: string;\n chain: AnyChain;\n assets: AssetConfig[];\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getAssetsBalances({\n address,\n chain,\n assets,\n polkadot,\n}: GetAssetsBalancesParams): Promise<AssetAmount[]> {\n const uniqueAssets = assets.reduce(\n (acc: AssetConfig[], asset: AssetConfig) => {\n if (!acc.some((a: AssetConfig) => a.asset.isEqual(asset.asset))) {\n return [asset, ...acc];\n }\n\n return acc;\n },\n [],\n );\n\n const balances = await Promise.all(\n uniqueAssets.map(async (config: AssetConfig) =>\n // eslint-disable-next-line no-await-in-loop\n getBalance({\n address,\n asset: chain.getChainAsset(config.asset),\n builder: config.balance,\n chain,\n polkadot,\n }),\n ),\n );\n\n return balances;\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport {\n Address,\n HttpTransport,\n PublicClient,\n createPublicClient,\n http,\n} from 'viem';\nimport { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { ERC20_ABI } from './Erc20ABI';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: Address;\n\n readonly #config: ContractConfig;\n\n readonly #client: PublicClient<HttpTransport>;\n\n constructor(config: ContractConfig, chain: EvmParachain) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address as Address;\n this.#config = config;\n this.#client = createPublicClient({\n chain: chain.getViemChain(),\n transport: http(),\n });\n }\n\n async getBalance(): Promise<bigint> {\n const address = this.#config.args[0] as Address;\n\n return this.#client.readContract({\n abi: ERC20_ABI,\n address: this.address,\n args: [address],\n functionName: 'balanceOf',\n });\n }\n}\n","export const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n] as const;\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Address, Hash, PublicClient, createPublicClient, http } from 'viem';\nimport { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { XTOKENS_ABI } from './XtokensABI';\n\nexport class Xtokens implements TransferContractInterface {\n readonly defaultMoonChainAddress =\n '0x0000000000000000000000000000000000000804';\n\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #publicClient: PublicClient;\n\n constructor(config: ContractConfig, chain: EvmParachain, address?: string) {\n this.#config = config;\n this.address = address ?? this.defaultMoonChainAddress;\n this.#publicClient = createPublicClient({\n chain: chain.getViemChain(),\n transport: http(),\n });\n }\n\n async transfer(signer: EvmSigner): Promise<Hash> {\n const { request } = await this.#publicClient.simulateContract({\n abi: XTOKENS_ABI,\n account: signer.account,\n address: this.address as Address,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: this.#config.args as any,\n functionName: this.#config.func as 'transfer',\n });\n const hash = await signer.writeContract(request);\n\n return hash;\n }\n\n async getFee(amount: bigint, address: string): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const gas = await this.#publicClient.estimateContractGas({\n abi: XTOKENS_ABI,\n account: address as Address,\n address: this.address as Address,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: this.#config.args as any,\n functionName: this.#config.func as 'transfer',\n });\n\n const gasPrice = await this.getGasPrice();\n\n return gas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n return this.#publicClient.getGasPrice();\n }\n}\n","export const XTOKENS_ABI = [\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] as const;\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { AnyChain } from '@moonbeam-network/xcm-types';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n chain: AnyChain,\n config: ContractConfig,\n): TransferContractInterface | BalanceContractInterface {\n if (!chain.isEvmParachain()) {\n throw new Error('Chain is not an EVM parachain');\n }\n\n if (config.module === 'Erc20') {\n return new Erc20(config, chain);\n }\n\n if (config.module === 'Xtokens') {\n const address = chain?.contracts?.Xtokens;\n\n return new Xtokens(config, chain, address);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import {\n BalanceConfigBuilder,\n CallType,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount, ChainAsset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetBalancesParams {\n address: string;\n asset: ChainAsset;\n builder: BalanceConfigBuilder;\n chain: AnyChain;\n polkadot: PolkadotService;\n}\n\nexport async function getBalance({\n address,\n asset,\n builder,\n chain,\n polkadot,\n}: GetBalancesParams): Promise<AssetAmount> {\n const cfg = builder.build({\n address,\n asset: asset.getBalanceAssetId(),\n constractAddress: asset.address,\n });\n const amount = AssetAmount.fromChainAsset(asset, { amount: 0n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n const converted = chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, asset.decimals)\n : balance;\n\n return amount.copyWith({ amount: converted });\n }\n\n const contract = createContract(chain, cfg) as BalanceContractInterface;\n const balance = await contract.getBalance();\n\n return amount.copyWith({ amount: balance });\n}\n\nexport async function getMin(\n config: AssetConfig,\n polkadot: PolkadotService,\n): Promise<AssetAmount> {\n const asset = AssetAmount.fromChainAsset(\n polkadot.chain.getChainAsset(config.asset),\n { amount: 0n },\n );\n\n if (config.min) {\n const min = await polkadot.query(\n config.min.build({ asset: asset.getMinAssetId() }),\n );\n\n return asset.copyWith({ amount: min });\n }\n\n if (asset.min) {\n return asset.copyWith({ amount: asset.min });\n }\n\n return asset.copyWith({ amount: 0n });\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyChain,\n Asset,\n AssetAmount,\n Ecosystem,\n} from '@moonbeam-network/xcm-types';\nimport { getAssetsBalances } from './getTransferData/getSourceData';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { PolkadotService } from './polkadot';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport async function getParachainBalances(\n chain: AnyChain,\n address: string,\n): Promise<AssetAmount[]> {\n const configService = new ConfigService();\n const chainsConfig = configService.getChainConfig(chain);\n const assets = chainsConfig.getAssetsConfigs();\n\n const polkadot = await PolkadotService.create(chain);\n\n const balances = await getAssetsBalances({\n chain,\n assets,\n address,\n polkadot,\n });\n\n return balances;\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n // Here we need to convert the fee on the destination chain to an asset on source chain.\n const destinationFeeAsset = transferConfig.source.chain.getChainAsset(\n destination.fee,\n );\n const destinationFee = AssetAmount.fromChainAsset(destinationFeeAsset, {\n amount: destination.fee.convertDecimals(destinationFeeAsset.decimals)\n .amount,\n });\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount, signers: Partial<Signers>): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n source: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(transferConfig.asset);\n const feeAsset = chain.getChainAsset(destinationFee.key);\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: asset.address || asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.address || feeAsset.getAssetId(),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.getAssetId(),\n palletInstance: asset.getAssetPalletInstance(),\n source: chain,\n });\n\n if (contract) {\n const signer = evmSigner || signers.evmSigner;\n\n if (!signer) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(chain, contract) as TransferContractInterface\n ).transfer(signer);\n }\n\n if (extrinsic) {\n const signer = polkadotSigner || signers.polkadotSigner;\n\n if (!signer) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, signer);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { AnyParachain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) => PolkadotService.create(chain)),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromChainAsset(this.chain.nativeAsset, { amount });\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n destination: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(config.asset);\n const balance = await getBalance({\n address: destinationAddress,\n asset,\n builder: config.balance,\n chain,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n const fee = await getFee({\n address: destinationAddress,\n polkadot,\n transferConfig,\n });\n\n return {\n balance,\n chain,\n existentialDeposit: polkadot.existentialDeposit,\n fee,\n min,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n transferConfig: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n transferConfig,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n // TODO: we have to consider correctly here when an asset is ERC20 to get it from contract\n const { amount } = transferConfig.source.config.destinationFee;\n const asset = AssetAmount.fromChainAsset(\n transferConfig.destination.chain.getChainAsset(\n transferConfig.source.config.destinationFee.asset,\n ),\n { amount: 0n },\n );\n\n if (Number.isFinite(amount)) {\n return asset.copyWith({\n amount: amount as number,\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: asset.getAssetId(),\n });\n\n return asset.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,SAAAE,GAAA,sBAAAC,EAAA,eAAAC,EAAA,oBAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,WAAAC,EAAA,yBAAAC,GAAA,kBAAAC,IAAA,eAAAC,GAAAX,ICQA,IAAAY,EAA0C,uCAC1CC,EAAgB,uBCRhB,IAAAC,EAMO,gBCPA,IAAMC,EAAY,CACvB,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,WACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,QAAS,GACT,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACR,EACA,CACE,KAAM,MACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,QAAS,GACT,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,UACN,KAAM,SACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,QAAS,GACT,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,SACN,KAAM,SACR,EACA,CACE,KAAM,WACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,QAAS,GACT,gBAAiB,UACjB,KAAM,UACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,QACN,KAAM,SACR,EACA,CACE,QAAS,GACT,KAAM,UACN,KAAM,SACR,EACA,CACE,QAAS,GACT,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,EACA,CACE,UAAW,GACX,OAAQ,CACN,CACE,QAAS,GACT,KAAM,OACN,KAAM,SACR,EACA,CACE,QAAS,GACT,KAAM,KACN,KAAM,SACR,EACA,CACE,QAAS,GACT,KAAM,QACN,KAAM,SACR,CACF,EACA,KAAM,WACN,KAAM,OACR,CACF,EDjNO,IAAMC,EAAN,KAAgD,CAC5C,QAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAqB,CACvD,GAAI,CAACD,EAAO,QACV,MAAM,IAAI,MAAM,8BAA8B,EAGhD,KAAK,QAAUA,EAAO,QACtB,KAAKF,GAAUE,EACf,KAAKD,MAAU,sBAAmB,CAChC,MAAOE,EAAM,aAAa,EAC1B,aAAW,QAAK,CAClB,CAAC,CACH,CAEA,MAAM,YAA8B,CAClC,IAAMC,EAAU,KAAKJ,GAAQ,KAAK,CAAC,EAEnC,OAAO,KAAKC,GAAQ,aAAa,CAC/B,IAAKI,EACL,QAAS,KAAK,QACd,KAAM,CAACD,CAAO,EACd,aAAc,WAChB,CA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","names":["src_exports","__export","Sdk","getAssetsBalances","getBalance","getExtrinsicFee","getFee","getMax","getMin","getParachainBalances","getSourceData","__toCommonJS","import_xcm_utils","import_big","import_viem","ERC20_ABI","Erc20","#config","#client","config","chain","address","ERC20_ABI","import_viem","XTOKENS_ABI","Xtokens","#config","#publicClient","config","chain","address","signer","request","XTOKENS_ABI","amount","gas","gasPrice","error","createContract","chain","config","_a","Erc20","address","Xtokens","import_xcm_builder","import_xcm_types","import_xcm_utils","getBalance","address","asset","builder","chain","polkadot","cfg","amount","balance","converted","createContract","getMin","config","min","getSourceData","transferConfig","destinationAddress","destinationFee","polkadot","sourceAddress","_a","_b","destination","chain","config","asset","feeAsset","balance","getBalance","feeBalance","destinationFeeBalance","min","getMin","existentialDeposit","extrinsic","contract","fee","getFee","max","getMax","contractConfig","feeConfig","createContract","getExtrinsicFee","extra","totalFee","converted","error","result","Big","getAssetsBalances","address","assets","uniqueAssets","acc","a","import_xcm_config","import_xcm_utils","import_big","import_xcm_types","import_api_augment","import_xcm_types","import_xcm_utils","PolkadotService","_PolkadotService","api","chain","chains","_a","_b","existentialDeposit","eqExistentialDeposit","amount","config","response","account","fn","args","signer","#isSigner","import_xcm_types","getDestinationData","transferConfig","destinationAddress","polkadot","chain","config","asset","balance","getBalance","min","getMin","fee","getFee","amount","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFeeAsset","destinationFee","source","getSourceData","amount","result","Big","getMin","signers","_a","_b","bigintAmount","chain","config","asset","feeAsset","contract","extrinsic","signer","createContract","balance","existentialDeposit","fee","min","Sdk","options","configService","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","getTransferData","destinationKeyOrChain","evmSigner","polkadotSigner","sourceKeyOrChain","getParachainBalances","chain","address","polkadot","PolkadotService","getAssetsBalances"]}
@@ -0,0 +1,126 @@
1
+ import { SubstrateQueryConfig, ExtrinsicConfig, ContractConfig, BalanceConfigBuilder } from '@moonbeam-network/xcm-builder';
2
+ import { TransferConfig, FeeAssetConfig, AssetConfig, IConfigService } from '@moonbeam-network/xcm-config';
3
+ import { AnyParachain, AssetAmount, AnyChain, ChainAsset, Ecosystem, Asset } from '@moonbeam-network/xcm-types';
4
+ import { ApiPromise } from '@polkadot/api';
5
+ import { Signer } from '@polkadot/api/types';
6
+ import { IKeyringPair } from '@polkadot/types/types';
7
+ import { WalletClient } from 'viem';
8
+
9
+ declare class PolkadotService {
10
+ #private;
11
+ readonly api: ApiPromise;
12
+ readonly chain: AnyParachain;
13
+ constructor(api: ApiPromise, chain: AnyParachain);
14
+ static create(chain: AnyParachain): Promise<PolkadotService>;
15
+ static createMulti(chains: AnyParachain[]): Promise<PolkadotService[]>;
16
+ get decimals(): number;
17
+ get existentialDeposit(): AssetAmount;
18
+ query(config: SubstrateQueryConfig): Promise<bigint>;
19
+ getFee(account: string, config: ExtrinsicConfig): Promise<bigint>;
20
+ transfer(account: string, config: ExtrinsicConfig, signer: Signer | IKeyringPair): Promise<string>;
21
+ }
22
+
23
+ type EvmSigner = WalletClient;
24
+ interface Signers {
25
+ evmSigner?: EvmSigner;
26
+ polkadotSigner?: Signer | IKeyringPair;
27
+ }
28
+ interface TransferData {
29
+ destination: DestinationChainTransferData;
30
+ getEstimate(amount: number | string): AssetAmount;
31
+ isSwapPossible: boolean;
32
+ max: AssetAmount;
33
+ min: AssetAmount;
34
+ source: SourceChainTransferData;
35
+ swap(): Promise<TransferData | undefined>;
36
+ transfer(amount: bigint | number | string, signers?: Signers): Promise<string>;
37
+ }
38
+ interface SourceChainTransferData extends ChainTransferData {
39
+ destinationFeeBalance: AssetAmount;
40
+ feeBalance: AssetAmount;
41
+ max: AssetAmount;
42
+ }
43
+ interface DestinationChainTransferData extends ChainTransferData {
44
+ }
45
+ interface ChainTransferData {
46
+ balance: AssetAmount;
47
+ chain: AnyChain;
48
+ existentialDeposit: AssetAmount;
49
+ fee: AssetAmount;
50
+ min: AssetAmount;
51
+ }
52
+
53
+ interface GetSourceDataParams {
54
+ transferConfig: TransferConfig;
55
+ destinationAddress: string;
56
+ destinationFee: AssetAmount;
57
+ polkadot: PolkadotService;
58
+ sourceAddress: string;
59
+ }
60
+ declare function getSourceData({ transferConfig, destinationAddress, destinationFee, polkadot, sourceAddress, }: GetSourceDataParams): Promise<SourceChainTransferData>;
61
+ interface GetFeeParams {
62
+ balance: AssetAmount;
63
+ feeBalance: AssetAmount;
64
+ contract?: ContractConfig;
65
+ chain: AnyChain;
66
+ extrinsic?: ExtrinsicConfig;
67
+ feeConfig?: FeeAssetConfig;
68
+ polkadot: PolkadotService;
69
+ sourceAddress: string;
70
+ }
71
+ declare function getFee({ balance, feeBalance, chain, contract: contractConfig, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<AssetAmount>;
72
+ declare function getExtrinsicFee(balance: AssetAmount, extrinsic: ExtrinsicConfig, polkadot: PolkadotService, sourceAddress: string): Promise<bigint>;
73
+ interface GetMaxParams {
74
+ balance: AssetAmount;
75
+ existentialDeposit: AssetAmount;
76
+ fee: AssetAmount;
77
+ min: AssetAmount;
78
+ }
79
+ declare function getMax({ balance, existentialDeposit, fee, min, }: GetMaxParams): AssetAmount;
80
+ interface GetAssetsBalancesParams {
81
+ address: string;
82
+ chain: AnyChain;
83
+ assets: AssetConfig[];
84
+ evmSigner?: EvmSigner;
85
+ polkadot: PolkadotService;
86
+ }
87
+ declare function getAssetsBalances({ address, chain, assets, polkadot, }: GetAssetsBalancesParams): Promise<AssetAmount[]>;
88
+
89
+ interface GetBalancesParams {
90
+ address: string;
91
+ asset: ChainAsset;
92
+ builder: BalanceConfigBuilder;
93
+ chain: AnyChain;
94
+ polkadot: PolkadotService;
95
+ }
96
+ declare function getBalance({ address, asset, builder, chain, polkadot, }: GetBalancesParams): Promise<AssetAmount>;
97
+ declare function getMin(config: AssetConfig, polkadot: PolkadotService): Promise<AssetAmount>;
98
+
99
+ interface SdkOptions extends Partial<Signers> {
100
+ configService?: IConfigService;
101
+ }
102
+ declare function Sdk(options?: SdkOptions): {
103
+ assets(ecosystem?: Ecosystem): {
104
+ assets: Asset[];
105
+ asset(keyOrAsset: string | Asset): {
106
+ sourceChains: AnyChain[];
107
+ source(keyOrChain: string | AnyChain): {
108
+ destinationChains: AnyChain[];
109
+ destination(destKeyOrChain: string | AnyChain): {
110
+ accounts(sourceAddress: string, destinationAddress: string): Promise<TransferData>;
111
+ };
112
+ };
113
+ };
114
+ };
115
+ getTransferData({ destinationAddress, destinationKeyOrChain, evmSigner, keyOrAsset, polkadotSigner, sourceAddress, sourceKeyOrChain, }: SdkTransferParams): Promise<TransferData>;
116
+ };
117
+ declare function getParachainBalances(chain: AnyChain, address: string): Promise<AssetAmount[]>;
118
+ interface SdkTransferParams extends Partial<Signers> {
119
+ destinationAddress: string;
120
+ destinationKeyOrChain: string | AnyChain;
121
+ keyOrAsset: string | Asset;
122
+ sourceAddress: string;
123
+ sourceKeyOrChain: string | AnyChain;
124
+ }
125
+
126
+ export { type ChainTransferData, type DestinationChainTransferData, type EvmSigner, type GetAssetsBalancesParams, type GetBalancesParams, type GetFeeParams, type GetMaxParams, type GetSourceDataParams, Sdk, type SdkOptions, type SdkTransferParams, type Signers, type SourceChainTransferData, type TransferData, getAssetsBalances, getBalance, getExtrinsicFee, getFee, getMax, getMin, getParachainBalances, getSourceData };
package/build/index.d.ts CHANGED
@@ -2,20 +2,26 @@ import {
2
2
  SubstrateQueryConfig,
3
3
  ExtrinsicConfig,
4
4
  ContractConfig,
5
+ BalanceConfigBuilder,
5
6
  } from '@moonbeam-network/xcm-builder';
6
- import { TransferConfig, FeeAssetConfig } from '@moonbeam-network/xcm-config';
7
+ import {
8
+ TransferConfig,
9
+ FeeAssetConfig,
10
+ AssetConfig,
11
+ IConfigService,
12
+ } from '@moonbeam-network/xcm-config';
7
13
  import {
8
14
  AnyParachain,
9
- Asset,
10
15
  AssetAmount,
11
- ChainAssetId,
12
16
  AnyChain,
17
+ ChainAsset,
13
18
  Ecosystem,
19
+ Asset,
14
20
  } from '@moonbeam-network/xcm-types';
15
- import { Signer as Signer$1 } from 'ethers';
16
21
  import { ApiPromise } from '@polkadot/api';
17
22
  import { Signer } from '@polkadot/api/types';
18
23
  import { IKeyringPair } from '@polkadot/types/types';
24
+ import { WalletClient } from 'viem';
19
25
 
20
26
  declare class PolkadotService {
21
27
  #private;
@@ -25,16 +31,7 @@ declare class PolkadotService {
25
31
  static create(chain: AnyParachain): Promise<PolkadotService>;
26
32
  static createMulti(chains: AnyParachain[]): Promise<PolkadotService[]>;
27
33
  get decimals(): number;
28
- get asset(): Asset;
29
34
  get existentialDeposit(): AssetAmount;
30
- getAssetMeta(asset: ChainAssetId): Promise<
31
- | {
32
- symbol: string;
33
- decimals: number;
34
- }
35
- | undefined
36
- >;
37
- getAssetDecimals(asset: Asset): Promise<number>;
38
35
  query(config: SubstrateQueryConfig): Promise<bigint>;
39
36
  getFee(account: string, config: ExtrinsicConfig): Promise<bigint>;
40
37
  transfer(
@@ -44,9 +41,10 @@ declare class PolkadotService {
44
41
  ): Promise<string>;
45
42
  }
46
43
 
44
+ type EvmSigner = WalletClient;
47
45
  interface Signers {
48
- ethersSigner: Signer$1;
49
- polkadotSigner: Signer | IKeyringPair;
46
+ evmSigner?: EvmSigner;
47
+ polkadotSigner?: Signer | IKeyringPair;
50
48
  }
51
49
  interface TransferData {
52
50
  destination: DestinationChainTransferData;
@@ -56,7 +54,10 @@ interface TransferData {
56
54
  min: AssetAmount;
57
55
  source: SourceChainTransferData;
58
56
  swap(): Promise<TransferData | undefined>;
59
- transfer(amount: bigint | number | string): Promise<string>;
57
+ transfer(
58
+ amount: bigint | number | string,
59
+ signers?: Signers,
60
+ ): Promise<string>;
60
61
  }
61
62
  interface SourceChainTransferData extends ChainTransferData {
62
63
  destinationFeeBalance: AssetAmount;
@@ -76,7 +77,6 @@ interface GetSourceDataParams {
76
77
  transferConfig: TransferConfig;
77
78
  destinationAddress: string;
78
79
  destinationFee: AssetAmount;
79
- ethersSigner: Signer$1;
80
80
  polkadot: PolkadotService;
81
81
  sourceAddress: string;
82
82
  }
@@ -84,66 +84,83 @@ declare function getSourceData({
84
84
  transferConfig,
85
85
  destinationAddress,
86
86
  destinationFee,
87
- ethersSigner,
88
87
  polkadot,
89
88
  sourceAddress,
90
89
  }: GetSourceDataParams): Promise<SourceChainTransferData>;
91
- interface GetBalancesParams {
92
- address: string;
93
- balance: bigint;
94
- feeConfig: FeeAssetConfig | undefined;
95
- polkadot: PolkadotService;
96
- }
97
- declare function getFeeBalances({
98
- address,
99
- balance,
100
- feeConfig,
101
- polkadot,
102
- }: GetBalancesParams): Promise<bigint>;
103
90
  interface GetFeeParams {
104
- balance: bigint;
91
+ balance: AssetAmount;
92
+ feeBalance: AssetAmount;
105
93
  contract?: ContractConfig;
106
- decimals: number;
107
- ethersSigner?: Signer$1;
94
+ chain: AnyChain;
108
95
  extrinsic?: ExtrinsicConfig;
96
+ feeConfig?: FeeAssetConfig;
109
97
  polkadot: PolkadotService;
110
98
  sourceAddress: string;
111
99
  }
112
100
  declare function getFee({
113
101
  balance,
114
- contract,
115
- decimals,
116
- ethersSigner,
102
+ feeBalance,
103
+ chain,
104
+ contract: contractConfig,
117
105
  extrinsic,
106
+ feeConfig,
118
107
  polkadot,
119
108
  sourceAddress,
120
- }: GetFeeParams): Promise<bigint>;
121
- declare function getContractFee(
122
- balance: bigint,
123
- config: ContractConfig,
124
- decimals: number,
125
- ethersSigner: Signer$1,
126
- ): Promise<bigint>;
109
+ }: GetFeeParams): Promise<AssetAmount>;
127
110
  declare function getExtrinsicFee(
128
- balance: bigint,
111
+ balance: AssetAmount,
129
112
  extrinsic: ExtrinsicConfig,
130
113
  polkadot: PolkadotService,
131
114
  sourceAddress: string,
132
115
  ): Promise<bigint>;
133
116
  interface GetMaxParams {
134
- balanceAmount: AssetAmount;
117
+ balance: AssetAmount;
135
118
  existentialDeposit: AssetAmount;
136
- feeAmount: AssetAmount;
137
- minAmount: AssetAmount;
119
+ fee: AssetAmount;
120
+ min: AssetAmount;
138
121
  }
139
122
  declare function getMax({
140
- balanceAmount,
123
+ balance,
141
124
  existentialDeposit,
142
- feeAmount,
143
- minAmount,
125
+ fee,
126
+ min,
144
127
  }: GetMaxParams): AssetAmount;
128
+ interface GetAssetsBalancesParams {
129
+ address: string;
130
+ chain: AnyChain;
131
+ assets: AssetConfig[];
132
+ evmSigner?: EvmSigner;
133
+ polkadot: PolkadotService;
134
+ }
135
+ declare function getAssetsBalances({
136
+ address,
137
+ chain,
138
+ assets,
139
+ polkadot,
140
+ }: GetAssetsBalancesParams): Promise<AssetAmount[]>;
145
141
 
146
- interface SdkOptions extends Partial<Signers> {}
142
+ interface GetBalancesParams {
143
+ address: string;
144
+ asset: ChainAsset;
145
+ builder: BalanceConfigBuilder;
146
+ chain: AnyChain;
147
+ polkadot: PolkadotService;
148
+ }
149
+ declare function getBalance({
150
+ address,
151
+ asset,
152
+ builder,
153
+ chain,
154
+ polkadot,
155
+ }: GetBalancesParams): Promise<AssetAmount>;
156
+ declare function getMin(
157
+ config: AssetConfig,
158
+ polkadot: PolkadotService,
159
+ ): Promise<AssetAmount>;
160
+
161
+ interface SdkOptions extends Partial<Signers> {
162
+ configService?: IConfigService;
163
+ }
147
164
  declare function Sdk(options?: SdkOptions): {
148
165
  assets(ecosystem?: Ecosystem): {
149
166
  assets: Asset[];
@@ -155,7 +172,6 @@ declare function Sdk(options?: SdkOptions): {
155
172
  accounts(
156
173
  sourceAddress: string,
157
174
  destinationAddress: string,
158
- signers?: Partial<Signers>,
159
175
  ): Promise<TransferData>;
160
176
  };
161
177
  };
@@ -164,13 +180,17 @@ declare function Sdk(options?: SdkOptions): {
164
180
  getTransferData({
165
181
  destinationAddress,
166
182
  destinationKeyOrChain,
167
- ethersSigner,
183
+ evmSigner,
168
184
  keyOrAsset,
169
185
  polkadotSigner,
170
186
  sourceAddress,
171
187
  sourceKeyOrChain,
172
188
  }: SdkTransferParams): Promise<TransferData>;
173
189
  };
190
+ declare function getParachainBalances(
191
+ chain: AnyChain,
192
+ address: string,
193
+ ): Promise<AssetAmount[]>;
174
194
  interface SdkTransferParams extends Partial<Signers> {
175
195
  destinationAddress: string;
176
196
  destinationKeyOrChain: string | AnyChain;
@@ -180,22 +200,26 @@ interface SdkTransferParams extends Partial<Signers> {
180
200
  }
181
201
 
182
202
  export {
183
- ChainTransferData,
184
- DestinationChainTransferData,
185
- GetBalancesParams,
186
- GetFeeParams,
187
- GetMaxParams,
188
- GetSourceDataParams,
203
+ type ChainTransferData,
204
+ type DestinationChainTransferData,
205
+ type EvmSigner,
206
+ type GetAssetsBalancesParams,
207
+ type GetBalancesParams,
208
+ type GetFeeParams,
209
+ type GetMaxParams,
210
+ type GetSourceDataParams,
189
211
  Sdk,
190
- SdkOptions,
191
- SdkTransferParams,
192
- Signers,
193
- SourceChainTransferData,
194
- TransferData,
195
- getContractFee,
212
+ type SdkOptions,
213
+ type SdkTransferParams,
214
+ type Signers,
215
+ type SourceChainTransferData,
216
+ type TransferData,
217
+ getAssetsBalances,
218
+ getBalance,
196
219
  getExtrinsicFee,
197
220
  getFee,
198
- getFeeBalances,
199
221
  getMax,
222
+ getMin,
223
+ getParachainBalances,
200
224
  getSourceData,
201
225
  };
package/build/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{AssetAmount as v}from"@moonbeam-network/xcm-types";import{convertDecimals as nt}from"@moonbeam-network/xcm-utils";import z from"big.js";import{Contract as Y}from"ethers";var _=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var x=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=new Y(this.address,_,e)}async getBalance(){return(await this.#e.balanceOf(...this.#t.args)).toBigInt()}async getDecimals(){return await this.#e.decimals()}};import{Contract as tt}from"ethers";var Q=[{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 S=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new tt(this.address,Q,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function d(s,t){if(s.module==="Erc20")return new x(s,t);if(s.module==="Xtokens")return new S(s,t);throw new Error(`Contract ${s.module} not found`)}import{CallType as R}from"@moonbeam-network/xcm-builder";import{toBigInt as et}from"@moonbeam-network/xcm-utils";async function B({address:s,config:t,ethersSigner:e,polkadot:n}){let a=t.balance.build({address:s,asset:n.chain.getBalanceAssetId(t.asset)});return a.type===R.Substrate?n.query(a):d(a,e).getBalance()}async function y({address:s,asset:t,config:e,ethersSigner:n,polkadot:a}){let r=e.balance.build({address:s,asset:a.chain.getBalanceAssetId(t||e.asset)});return r.type===R.Substrate?a.getAssetDecimals(t||e.asset):d(r,n).getDecimals()}async function D(s,t){if(s.min)return t.query(s.min.build({asset:t.chain.getMinAssetId(s.asset)}));let e=t.chain.getAssetMin(s.asset);if(e){let n=await t.getAssetDecimals(s.asset);return et(e,n)}return 0n}async function N({transferConfig:s,destinationAddress:t,destinationFee:e,ethersSigner:n,polkadot:a,sourceAddress:r}){var G,W,q,O;let{asset:o,destination:m,source:{chain:c,config:i}}=s,f=v.fromAsset(o,{amount:0n,decimals:await y({address:t,config:i,ethersSigner:n,polkadot:a})}),l=(G=i.fee)!=null&&G.asset?v.fromAsset(i.fee.asset,{amount:0n,decimals:await y({address:t,asset:i.fee.asset,config:i,ethersSigner:n,polkadot:a})}):f,p=(W=i.destinationFee)!=null&&W.asset?v.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await y({address:t,asset:i.destinationFee.asset,config:i,ethersSigner:n,polkadot:a})}):f,u=await B({address:r,config:i,ethersSigner:n,polkadot:a}),A=await K({address:r,balance:u,feeConfig:i.fee,polkadot:a}),b=i.asset===i.destinationFee.asset?u:await K({address:r,balance:u,feeConfig:i.destinationFee,polkadot:a}),C=await D(i,a),w=(q=i.extrinsic)==null?void 0:q.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),P=(O=i.contract)==null?void 0:O.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),T=await at({balance:u,contract:P,decimals:l.decimals,ethersSigner:n,extrinsic:w,polkadot:a,sourceAddress:r}),M=f.copyWith({amount:u}),{existentialDeposit:F}=a,E=l.copyWith({amount:T}),H=l.copyWith({amount:A}),J=p.copyWith({amount:b}),k=f.copyWith({amount:C}),U=it({balanceAmount:M,existentialDeposit:F,feeAmount:E,minAmount:k});return{balance:M,chain:c,destinationFeeBalance:J,existentialDeposit:F,fee:E,feeBalance:H,max:U,min:k}}async function K({address:s,balance:t,feeConfig:e,polkadot:n}){return e?n.query(e.balance.build({address:s,asset:n.chain.getBalanceAssetId(e.asset)})):t}async function at({balance:s,contract:t,decimals:e,ethersSigner:n,extrinsic:a,polkadot:r,sourceAddress:o}){if(t){if(!n)throw new Error("Ethers signer must be provided");return st(s,t,e,n)}if(a)return rt(s,a,r,o);throw new Error("Either contract or extrinsic must be provided")}async function st(s,t,e,n){let r=await d(t,n).getFee(s);return nt(r,18,e)}async function rt(s,t,e,n){try{return await e.getFee(n,t)}catch(a){if(s)throw a;return 0n}}function it({balanceAmount:s,existentialDeposit:t,feeAmount:e,minAmount:n}){let a=s.toBig().minus(n.toBig()).minus(s.isSame(t)?t.toBig():z(0)).minus(s.isSame(e)?e.toBig():z(0));return s.copyWith({amount:a.lt(0)?0n:BigInt(a.toFixed())})}import{ConfigBuilder as L}from"@moonbeam-network/xcm-config";import{convertDecimals as yt,toBigInt as j}from"@moonbeam-network/xcm-utils";import h from"big.js";import"@polkadot/api-augment";import{assetsMap as ot,darwiniaPangoro as ct,eq as mt,equilibriumAlphanet as ut,paring as ft}from"@moonbeam-network/xcm-config";import{AssetAmount as pt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as lt}from"@moonbeam-network/xcm-utils";var g=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new g(await lt(t.ws),t)}static async createMulti(t){return Promise.all(t.map(g.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===ut.key)return mt;if(e==="oring"&&this.chain.key===ct.key)return ft;if(!e)throw new Error("No native symbol key found");let n=ot.get(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var a,r;let t=(a=this.api.consts.balances)==null?void 0:a.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return pt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var r,o,m,c,i;let e=((r=this.api.query.assets)==null?void 0:r.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let n=await e(t),a="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:a.decimals.toNumber(),symbol:a.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],a=e.getArgs(n);return(await n(...a).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let a=this.api.tx[e.module][e.func],r=e.getArgs(a);return(await a(...r).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as X}from"@moonbeam-network/xcm-types";import{toBigInt as dt}from"@moonbeam-network/xcm-utils";async function $({transferConfig:s,destinationAddress:t,ethersSigner:e,polkadot:n}){let{asset:a,destination:{chain:r,config:o}}=s,m=X.fromAsset(a,{amount:0n,decimals:await y({address:t,config:o,ethersSigner:e,polkadot:n})}),c=await B({address:t,config:o,ethersSigner:e,polkadot:n}),i=await D(o,n),f=m.copyWith({amount:c}),{existentialDeposit:l}=n,p=await gt({config:s,polkadot:n}),u=m.copyWith({amount:i});return{balance:f,chain:r,existentialDeposit:l,fee:p,min:u}}async function gt({config:s,polkadot:t}){let{amount:e,asset:n}=s.source.config.destinationFee,a=await t.getAssetDecimals(n),r=X.fromAsset(n,{amount:0n,decimals:a});if(Number.isFinite(e))return r.copyWith({amount:dt(e,a)});let o=e.build({api:t.api,asset:t.chain.getAssetId(n)});return r.copyWith({amount:await o.call()})}async function I({destinationAddress:s,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:a}){if(!t)throw new Error("Ethers signer must be provided");let[r,o]=await g.createMulti([a.destination.chain,a.source.chain]),m=await $({destinationAddress:s,ethersSigner:t,polkadot:r,transferConfig:a}),c=await At(o,m.fee),i=await N({destinationAddress:s,destinationFee:c,ethersSigner:t,polkadot:o,sourceAddress:n,transferConfig:a});return{destination:m,getEstimate(f){let p=h(j(f,i.balance.decimals).toString()).minus(i.balance.isSame(c)?c.toBig():h(0));return i.balance.copyWith({amount:p.lt(0)?0n:BigInt(p.toFixed())})},isSwapPossible:!0,max:i.max,min:ht(m),source:i,async swap(){return I({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:s,transferConfig:{...a,destination:a.source,source:a.destination}})},async transfer(f){var w,P;let l=j(f,i.balance.decimals),{asset:p,source:{chain:u,config:A}}=a,b=(w=A.contract)==null?void 0:w.build({address:s,amount:l,asset:u.getAssetId(p),destination:m.chain,fee:c.amount,feeAsset:u.getAssetId(c)}),C=(P=A.extrinsic)==null?void 0:P.build({address:s,amount:l,asset:u.getAssetId(p),destination:m.chain,fee:c.amount,feeAsset:u.getAssetId(c),palletInstance:u.getAssetPalletInstance(p),source:u});if(b){if(!t)throw new Error("Ethers signer must be provided");return d(b,t).transfer().then(T=>T.hash)}if(C){if(!e)throw new Error("Polkadot signer must be provided");return o.transfer(n,C,e)}throw new Error("Either contract or extrinsic must be provided")}}}function ht({balance:s,existentialDeposit:t,fee:e,min:n}){let a=h(0).plus(s.isSame(e)?e.toBig():h(0)).plus(s.isSame(t)&&s.toBig().lt(t.toBig())?t.toBig():h(0)).plus(s.toBig().lt(n.toBig())?n.toBig():h(0));return s.copyWith({amount:BigInt(a.toFixed())})}async function At(s,t){let e=await s.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:yt(t.amount,t.decimals,e),decimals:e})}function Be(s){return{assets(t){let{assets:e,asset:n}=L().assets(t);return{assets:e,asset(a){let{sourceChains:r,source:o}=n(a);return{sourceChains:r,source(m){let{destinationChains:c,destination:i}=o(m);return{destinationChains:c,destination(f){return{async accounts(l,p,u){return I({...s,...u,destinationAddress:p,sourceAddress:l,transferConfig:i(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:n,keyOrAsset:a,polkadotSigner:r,sourceAddress:o,sourceKeyOrChain:m}){return I({destinationAddress:t,ethersSigner:n,polkadotSigner:r,sourceAddress:o,transferConfig:L().assets().asset(a).source(m).destination(e).build()})}}}export{Be as Sdk,st as getContractFee,rt as getExtrinsicFee,at as getFee,K as getFeeBalances,it as getMax,N as getSourceData};
1
+ import{convertDecimals as z,toBigInt as J}from"@moonbeam-network/xcm-utils";import W from"big.js";import{createPublicClient as H,http as Q}from"viem";var M=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var B=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=H({chain:e.getViemChain(),transport:Q()})}async getBalance(){let t=this.#t.args[0];return this.#e.readContract({abi:M,address:this.address,args:[t],functionName:"balanceOf"})}};import{createPublicClient as V,http as R}from"viem";var E=[{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{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;constructor(t,e,n){this.#t=t,this.address=n??this.defaultMoonChainAddress,this.#e=V({chain:e.getViemChain(),transport:R()})}async transfer(t){let{request:e}=await this.#e.simulateContract({abi:E,account:t.account,address:this.address,args:this.#t.args,functionName:this.#t.func});return await t.writeContract(e)}async getFee(t,e){if(t===0n)return 0n;try{let n=await this.#e.estimateContractGas({abi:E,account:e,address:this.address,args:this.#t.args,functionName:this.#t.func}),s=await this.getGasPrice();return n*s}catch(n){throw console.error(n),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){return this.#e.getGasPrice()}};function h(a,t){var e;if(!a.isEvmParachain())throw new Error("Chain is not an EVM parachain");if(t.module==="Erc20")return new B(t,a);if(t.module==="Xtokens"){let n=(e=a==null?void 0:a.contracts)==null?void 0:e.Xtokens;return new T(t,a,n)}throw new Error(`Contract ${t.module} not found`)}import{CallType as $}from"@moonbeam-network/xcm-builder";import{AssetAmount as G}from"@moonbeam-network/xcm-types";import{convertDecimals as j}from"@moonbeam-network/xcm-utils";async function y({address:a,asset:t,builder:e,chain:n,polkadot:s}){let r=e.build({address:a,asset:t.getBalanceAssetId(),constractAddress:t.address}),i=G.fromChainAsset(t,{amount:0n});if(r.type===$.Substrate){let u=await s.query(r),m=n.usesChainDecimals?j(u,s.decimals,t.decimals):u;return i.copyWith({amount:m})}let c=await h(n,r).getBalance();return i.copyWith({amount:c})}async function I(a,t){let e=G.fromChainAsset(t.chain.getChainAsset(a.asset),{amount:0n});if(a.min){let n=await t.query(a.min.build({asset:e.getMinAssetId()}));return e.copyWith({amount:n})}return e.min?e.copyWith({amount:e.min}):e.copyWith({amount:0n})}async function _({transferConfig:a,destinationAddress:t,destinationFee:e,polkadot:n,sourceAddress:s}){var x,S;let{destination:r,source:{chain:i,config:o}}=a,c=i.getChainAsset(a.asset),u=o.fee?i.getChainAsset(o.fee.asset):c,m=await y({address:s,asset:c,builder:o.balance,chain:i,polkadot:n}),p=o.fee?await y({address:s,asset:u,builder:o.fee.balance,chain:i,polkadot:n}):m,d=o.destinationFee.asset.isEqual(c)?m:o.destinationFee.asset.isEqual(u)?p:await y({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:n}),f=await I(o,n),{existentialDeposit:l}=n,A=(x=o.extrinsic)==null?void 0:x.build({address:t,amount:m.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),v=(S=o.contract)==null?void 0:S.build({address:t,amount:m.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:u.address||u.getAssetId()}),g=await L({balance:m,chain:i,contract:v,extrinsic:A,feeBalance:p,feeConfig:o.fee,polkadot:n,sourceAddress:s}),P=Y({balance:m,existentialDeposit:l,fee:g,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:g,feeBalance:p,max:P,min:f}}async function L({balance:a,feeBalance:t,chain:e,contract:n,extrinsic:s,feeConfig:r,polkadot:i,sourceAddress:o}){if(!n&&!s)throw new Error("Either contract or extrinsic must be provided");if(n){let f=await h(e,n).getFee(a.amount,o);return t.copyWith({amount:f})}let c=await U(a,s,i,o),u=r!=null&&r.extra?J(r.extra,t.decimals):0n,m=c+u,p=e.usesChainDecimals?z(m,i.decimals,t.decimals):m;return t.copyWith({amount:p})}async function U(a,t,e,n){try{return await e.getFee(n,t)}catch(s){if(a)throw s;return 0n}}function Y({balance:a,existentialDeposit:t,fee:e,min:n}){let s=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():W(0)).minus(a.isSame(e)?e.toBig():W(0));return a.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function q({address:a,chain:t,assets:e,polkadot:n}){let s=e.reduce((i,o)=>i.some(c=>c.asset.isEqual(o.asset))?i:[o,...i],[]);return await Promise.all(s.map(async i=>y({address:a,asset:t.getChainAsset(i.asset),builder:i.balance,chain:t,polkadot:n})))}import{ConfigBuilder as X,ConfigService as N}from"@moonbeam-network/xcm-config";import{toBigInt as K}from"@moonbeam-network/xcm-utils";import b from"big.js";import{AssetAmount as at}from"@moonbeam-network/xcm-types";import"@polkadot/api-augment";import{AssetAmount as Z}from"@moonbeam-network/xcm-types";import{getPolkadotApi as tt}from"@moonbeam-network/xcm-utils";var C=class a{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new a(await tt(t.ws),t)}static async createMulti(t){return Promise.all(t.map(e=>a.create(e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get existentialDeposit(){var s,r;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return Z.fromChainAsset(this.chain.nativeAsset,{amount:n})}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],s=e.getArgs(n);return(await n(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as et}from"@moonbeam-network/xcm-types";async function O({transferConfig:a,destinationAddress:t,polkadot:e}){let{destination:{chain:n,config:s}}=a,r=n.getChainAsset(s.asset),i=await y({address:t,asset:r,builder:s.balance,chain:n,polkadot:e}),o=await I(s,e),c=await nt({address:t,polkadot:e,transferConfig:a});return{balance:i,chain:n,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function nt({transferConfig:a,polkadot:t}){let{amount:e}=a.source.config.destinationFee,n=et.fromChainAsset(a.destination.chain.getChainAsset(a.source.config.destinationFee.asset),{amount:0n});if(Number.isFinite(e))return n.copyWith({amount:e});let s=e.build({api:t.api,asset:n.getAssetId()});return n.copyWith({amount:await s.call()})}async function D({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:s,transferConfig:r}){let[i,o]=await C.createMulti([r.destination.chain,r.source.chain]),c=await O({destinationAddress:t,polkadot:i,transferConfig:r}),u=r.source.chain.getChainAsset(c.fee),m=at.fromChainAsset(u,{amount:c.fee.convertDecimals(u.decimals).amount}),p=await _({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(d){let l=b(K(d,p.balance.decimals).toString()).minus(p.balance.isSame(m)?m.toBig():b(0));return p.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:p.max,min:st(c),source:p,async swap(){return D({configService:a,destinationAddress:s,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(d,f){var k,F;let l=K(d,p.balance.decimals),{source:{chain:A,config:v}}=r,g=A.getChainAsset(r.asset),P=A.getChainAsset(m.key),x=(k=v.contract)==null?void 0:k.build({address:t,amount:l,asset:g.address||g.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:P.address||P.getAssetId()}),S=(F=v.extrinsic)==null?void 0:F.build({address:t,amount:l,asset:g.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:P.getAssetId(),palletInstance:g.getAssetPalletInstance(),source:A});if(x){let w=e||f.evmSigner;if(!w)throw new Error("EVM Signer must be provided");return h(A,x).transfer(w)}if(S){let w=n||f.polkadotSigner;if(!w)throw new Error("Polkadot signer must be provided");return o.transfer(s,S,w)}throw new Error("Either contract or extrinsic must be provided")}}}function st({balance:a,existentialDeposit:t,fee:e,min:n}){let s=b(0).plus(a.isSame(e)?e.toBig():b(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():b(0)).plus(a.toBig().lt(n.toBig())?n.toBig():b(0));return a.copyWith({amount:BigInt(s.toFixed())})}function he(a){let t=(a==null?void 0:a.configService)??new N;return{assets(e){let{assets:n,asset:s}=X(t).assets(e);return{assets:n,asset(r){let{sourceChains:i,source:o}=s(r);return{sourceChains:i,source(c){let{destinationChains:u,destination:m}=o(c);return{destinationChains:u,destination(p){return{async accounts(d,f){return D({...a,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:m(p).build()})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,evmSigner:s,keyOrAsset:r,polkadotSigner:i,sourceAddress:o,sourceKeyOrChain:c}){return D({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:X(t).assets().asset(r).source(c).destination(n).build()})}}}async function Ce(a,t){let s=new N().getChainConfig(a).getAssetsConfigs(),r=await C.create(a);return await q({chain:a,assets:s,address:t,polkadot:r})}export{he as Sdk,q as getAssetsBalances,y as getBalance,U as getExtrinsicFee,L as getFee,Y as getMax,I as getMin,Ce as getParachainBalances,_ as getSourceData};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n ethersSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n ethersSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n ethersSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance =\n config.asset === config.destinationFee.asset\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n ethersSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport abi from './Erc20ABI.json';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n constructor(config: ContractConfig, signer: Signer) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async getBalance(): Promise<bigint> {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n\n return balance.toBigInt();\n }\n\n async getDecimals(): Promise<number> {\n const decimals = await this.#contract.decimals();\n\n return decimals;\n }\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements TransferContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\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 { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport { ConfigBuilder } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {}\n\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n ethersSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return (\n createContract(contract, ethersSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.key) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n ethersSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n ethersSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","Big","Contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","Contract","Erc20ABI_default","Contract","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","Contract","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","toBigInt","getBalance","address","config","ethersSigner","polkadot","cfg","CallType","createContract","getDecimals","asset","getMin","min","decimals","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","getExtrinsicFee","createContract","convertDecimals","error","result","Big","ConfigBuilder","convertDecimals","toBigInt","Big","assetsMap","darwiniaPangoro","eq","equilibriumAlphanet","paring","AssetAmount","getPolkadotApi","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","ethersSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
1
+ {"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.ts","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport {\n AssetConfig,\n FeeAssetConfig,\n TransferConfig,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n destination,\n source: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(transferConfig.asset);\n const feeAsset = config.fee ? chain.getChainAsset(config.fee.asset) : asset;\n\n const balance = await getBalance({\n address: sourceAddress,\n asset,\n builder: config.balance,\n chain,\n polkadot,\n });\n const feeBalance = config.fee\n ? await getBalance({\n address: sourceAddress,\n asset: feeAsset,\n builder: config.fee.balance,\n chain,\n polkadot,\n })\n : balance;\n // eslint-disable-next-line no-nested-ternary\n const destinationFeeBalance = config.destinationFee.asset.isEqual(asset)\n ? balance\n : config.destinationFee.asset.isEqual(feeAsset)\n ? feeBalance\n : await getBalance({\n address: sourceAddress,\n asset: chain.getChainAsset(config.destinationFee.asset),\n builder: config.destinationFee.balance,\n chain,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n const { existentialDeposit } = polkadot;\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance.amount,\n asset: asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: destinationFee.getAssetId(),\n palletInstance: asset.getAssetPalletInstance(),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance.amount,\n asset: asset.address || asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.address || feeAsset.getAssetId(),\n });\n\n const fee = await getFee({\n balance,\n chain,\n contract,\n extrinsic,\n feeBalance,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const max = getMax({\n balance,\n existentialDeposit,\n fee,\n min,\n });\n\n return {\n balance,\n chain,\n destinationFeeBalance,\n existentialDeposit,\n fee,\n feeBalance,\n max,\n min,\n };\n}\n\nexport interface GetFeeParams {\n balance: AssetAmount;\n feeBalance: AssetAmount;\n contract?: ContractConfig;\n chain: AnyChain;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n feeBalance,\n chain,\n contract: contractConfig,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<AssetAmount> {\n if (!contractConfig && !extrinsic) {\n throw new Error('Either contract or extrinsic must be provided');\n }\n\n if (contractConfig) {\n const contract = createContract(\n chain,\n contractConfig,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance.amount, sourceAddress);\n\n return feeBalance.copyWith({ amount: fee });\n }\n\n const fee = await getExtrinsicFee(\n balance,\n extrinsic as ExtrinsicConfig,\n polkadot,\n sourceAddress,\n );\n\n const extra = feeConfig?.extra\n ? toBigInt(feeConfig.extra, feeBalance.decimals)\n : 0n;\n const totalFee = fee + extra;\n\n const converted = chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, feeBalance.decimals)\n : totalFee;\n\n return feeBalance.copyWith({ amount: converted });\n}\n\nexport async function getExtrinsicFee(\n balance: AssetAmount,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balance: AssetAmount;\n existentialDeposit: AssetAmount;\n fee: AssetAmount;\n min: AssetAmount;\n}\n\nexport function getMax({\n balance,\n existentialDeposit,\n fee,\n min,\n}: GetMaxParams): AssetAmount {\n const result = balance\n .toBig()\n .minus(min.toBig())\n .minus(\n balance.isSame(existentialDeposit) ? existentialDeposit.toBig() : Big(0),\n )\n .minus(balance.isSame(fee) ? fee.toBig() : Big(0));\n\n return balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n\nexport interface GetAssetsBalancesParams {\n address: string;\n chain: AnyChain;\n assets: AssetConfig[];\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getAssetsBalances({\n address,\n chain,\n assets,\n polkadot,\n}: GetAssetsBalancesParams): Promise<AssetAmount[]> {\n const uniqueAssets = assets.reduce(\n (acc: AssetConfig[], asset: AssetConfig) => {\n if (!acc.some((a: AssetConfig) => a.asset.isEqual(asset.asset))) {\n return [asset, ...acc];\n }\n\n return acc;\n },\n [],\n );\n\n const balances = await Promise.all(\n uniqueAssets.map(async (config: AssetConfig) =>\n // eslint-disable-next-line no-await-in-loop\n getBalance({\n address,\n asset: chain.getChainAsset(config.asset),\n builder: config.balance,\n chain,\n polkadot,\n }),\n ),\n );\n\n return balances;\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport {\n Address,\n HttpTransport,\n PublicClient,\n createPublicClient,\n http,\n} from 'viem';\nimport { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { ERC20_ABI } from './Erc20ABI';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: Address;\n\n readonly #config: ContractConfig;\n\n readonly #client: PublicClient<HttpTransport>;\n\n constructor(config: ContractConfig, chain: EvmParachain) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address as Address;\n this.#config = config;\n this.#client = createPublicClient({\n chain: chain.getViemChain(),\n transport: http(),\n });\n }\n\n async getBalance(): Promise<bigint> {\n const address = this.#config.args[0] as Address;\n\n return this.#client.readContract({\n abi: ERC20_ABI,\n address: this.address,\n args: [address],\n functionName: 'balanceOf',\n });\n }\n}\n","export const ERC20_ABI = [\n {\n constant: true,\n inputs: [],\n name: 'name',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_spender',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'approve',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'totalSupply',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_from',\n type: 'address',\n },\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transferFrom',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'decimals',\n outputs: [\n {\n name: '',\n type: 'uint8',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n ],\n name: 'balanceOf',\n outputs: [\n {\n name: 'balance',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: true,\n inputs: [],\n name: 'symbol',\n outputs: [\n {\n name: '',\n type: 'string',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n constant: false,\n inputs: [\n {\n name: '_to',\n type: 'address',\n },\n {\n name: '_value',\n type: 'uint256',\n },\n ],\n name: 'transfer',\n outputs: [\n {\n name: '',\n type: 'bool',\n },\n ],\n payable: false,\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n constant: true,\n inputs: [\n {\n name: '_owner',\n type: 'address',\n },\n {\n name: '_spender',\n type: 'address',\n },\n ],\n name: 'allowance',\n outputs: [\n {\n name: '',\n type: 'uint256',\n },\n ],\n payable: false,\n stateMutability: 'view',\n type: 'function',\n },\n {\n payable: true,\n stateMutability: 'payable',\n type: 'fallback',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'owner',\n type: 'address',\n },\n {\n indexed: true,\n name: 'spender',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Approval',\n type: 'event',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: true,\n name: 'from',\n type: 'address',\n },\n {\n indexed: true,\n name: 'to',\n type: 'address',\n },\n {\n indexed: false,\n name: 'value',\n type: 'uint256',\n },\n ],\n name: 'Transfer',\n type: 'event',\n },\n] as const;\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Address, Hash, PublicClient, createPublicClient, http } from 'viem';\nimport { EvmParachain } from '@moonbeam-network/xcm-types';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { XTOKENS_ABI } from './XtokensABI';\n\nexport class Xtokens implements TransferContractInterface {\n readonly defaultMoonChainAddress =\n '0x0000000000000000000000000000000000000804';\n\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #publicClient: PublicClient;\n\n constructor(config: ContractConfig, chain: EvmParachain, address?: string) {\n this.#config = config;\n this.address = address ?? this.defaultMoonChainAddress;\n this.#publicClient = createPublicClient({\n chain: chain.getViemChain(),\n transport: http(),\n });\n }\n\n async transfer(signer: EvmSigner): Promise<Hash> {\n const { request } = await this.#publicClient.simulateContract({\n abi: XTOKENS_ABI,\n account: signer.account,\n address: this.address as Address,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: this.#config.args as any,\n functionName: this.#config.func as 'transfer',\n });\n const hash = await signer.writeContract(request);\n\n return hash;\n }\n\n async getFee(amount: bigint, address: string): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const gas = await this.#publicClient.estimateContractGas({\n abi: XTOKENS_ABI,\n account: address as Address,\n address: this.address as Address,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n args: this.#config.args as any,\n functionName: this.#config.func as 'transfer',\n });\n\n const gasPrice = await this.getGasPrice();\n\n return gas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n return this.#publicClient.getGasPrice();\n }\n}\n","export const XTOKENS_ABI = [\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] as const;\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { AnyChain } from '@moonbeam-network/xcm-types';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n chain: AnyChain,\n config: ContractConfig,\n): TransferContractInterface | BalanceContractInterface {\n if (!chain.isEvmParachain()) {\n throw new Error('Chain is not an EVM parachain');\n }\n\n if (config.module === 'Erc20') {\n return new Erc20(config, chain);\n }\n\n if (config.module === 'Xtokens') {\n const address = chain?.contracts?.Xtokens;\n\n return new Xtokens(config, chain, address);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import {\n BalanceConfigBuilder,\n CallType,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount, ChainAsset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetBalancesParams {\n address: string;\n asset: ChainAsset;\n builder: BalanceConfigBuilder;\n chain: AnyChain;\n polkadot: PolkadotService;\n}\n\nexport async function getBalance({\n address,\n asset,\n builder,\n chain,\n polkadot,\n}: GetBalancesParams): Promise<AssetAmount> {\n const cfg = builder.build({\n address,\n asset: asset.getBalanceAssetId(),\n constractAddress: asset.address,\n });\n const amount = AssetAmount.fromChainAsset(asset, { amount: 0n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n const converted = chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, asset.decimals)\n : balance;\n\n return amount.copyWith({ amount: converted });\n }\n\n const contract = createContract(chain, cfg) as BalanceContractInterface;\n const balance = await contract.getBalance();\n\n return amount.copyWith({ amount: balance });\n}\n\nexport async function getMin(\n config: AssetConfig,\n polkadot: PolkadotService,\n): Promise<AssetAmount> {\n const asset = AssetAmount.fromChainAsset(\n polkadot.chain.getChainAsset(config.asset),\n { amount: 0n },\n );\n\n if (config.min) {\n const min = await polkadot.query(\n config.min.build({ asset: asset.getMinAssetId() }),\n );\n\n return asset.copyWith({ amount: min });\n }\n\n if (asset.min) {\n return asset.copyWith({ amount: asset.min });\n }\n\n return asset.copyWith({ amount: 0n });\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyChain,\n Asset,\n AssetAmount,\n Ecosystem,\n} from '@moonbeam-network/xcm-types';\nimport { getAssetsBalances } from './getTransferData/getSourceData';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { PolkadotService } from './polkadot';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport async function getParachainBalances(\n chain: AnyChain,\n address: string,\n): Promise<AssetAmount[]> {\n const configService = new ConfigService();\n const chainsConfig = configService.getChainConfig(chain);\n const assets = chainsConfig.getAssetsConfigs();\n\n const polkadot = await PolkadotService.create(chain);\n\n const balances = await getAssetsBalances({\n chain,\n assets,\n address,\n polkadot,\n });\n\n return balances;\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n // Here we need to convert the fee on the destination chain to an asset on source chain.\n const destinationFeeAsset = transferConfig.source.chain.getChainAsset(\n destination.fee,\n );\n const destinationFee = AssetAmount.fromChainAsset(destinationFeeAsset, {\n amount: destination.fee.convertDecimals(destinationFeeAsset.decimals)\n .amount,\n });\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount, signers: Partial<Signers>): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n source: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(transferConfig.asset);\n const feeAsset = chain.getChainAsset(destinationFee.key);\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: asset.address || asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.address || feeAsset.getAssetId(),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: asset.getAssetId(),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: feeAsset.getAssetId(),\n palletInstance: asset.getAssetPalletInstance(),\n source: chain,\n });\n\n if (contract) {\n const signer = evmSigner || signers.evmSigner;\n\n if (!signer) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(chain, contract) as TransferContractInterface\n ).transfer(signer);\n }\n\n if (extrinsic) {\n const signer = polkadotSigner || signers.polkadotSigner;\n\n if (!signer) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, signer);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { AnyParachain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) => PolkadotService.create(chain)),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromChainAsset(this.chain.nativeAsset, { amount });\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n destination: { chain, config },\n } = transferConfig;\n const asset = chain.getChainAsset(config.asset);\n const balance = await getBalance({\n address: destinationAddress,\n asset,\n builder: config.balance,\n chain,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n const fee = await getFee({\n address: destinationAddress,\n polkadot,\n transferConfig,\n });\n\n return {\n balance,\n chain,\n existentialDeposit: polkadot.existentialDeposit,\n fee,\n min,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n transferConfig: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n transferConfig,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n // TODO: we have to consider correctly here when an asset is ERC20 to get it from contract\n const { amount } = transferConfig.source.config.destinationFee;\n const asset = AssetAmount.fromChainAsset(\n transferConfig.destination.chain.getChainAsset(\n transferConfig.source.config.destinationFee.asset,\n ),\n { amount: 0n },\n );\n\n if (Number.isFinite(amount)) {\n return asset.copyWith({\n amount: amount as number,\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: asset.getAssetId(),\n });\n\n return asset.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"AAQA,OAAS,mBAAAA,EAAiB,YAAAC,MAAgB,8BAC1C,OAAOC,MAAS,SCRhB,OAIE,sBAAAC,EACA,QAAAC,MACK,OCPA,IAAMC,EAAY,CACvB,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,OACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,WACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,UACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,QAAS,GACT,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,cACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,SACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,QACN,KAAM,SACR,EACA,CACE,KAAM,MACN,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,eACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,MACR,CACF,EACA,QAAS,GACT,gBAAiB,aACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,WACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,OACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,SACN,KAAM,SACR,CACF,EACA,KAAM,YACN,QAAS,CACP,CACE,KAAM,UACN,KAAM,SACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CAAC,EACT,KAAM,SACN,QAAS,CACP,CACE,KAAM,GACN,KAAM,QACR,CACF,EACA,QAAS,GACT,gBAAiB,OACjB,KAAM,UACR,EACA,CACE,SAAU,GACV,OAAQ,CACN,CACE,KAAM,MACN,KAAM,SACR,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","names":["convertDecimals","toBigInt","Big","createPublicClient","http","ERC20_ABI","Erc20","#config","#client","config","chain","createPublicClient","http","address","ERC20_ABI","createPublicClient","http","XTOKENS_ABI","Xtokens","#config","#publicClient","config","chain","address","createPublicClient","http","signer","request","XTOKENS_ABI","amount","gas","gasPrice","error","createContract","chain","config","_a","Erc20","address","Xtokens","CallType","AssetAmount","convertDecimals","getBalance","address","asset","builder","chain","polkadot","cfg","amount","AssetAmount","CallType","balance","converted","convertDecimals","createContract","getMin","config","min","getSourceData","transferConfig","destinationAddress","destinationFee","polkadot","sourceAddress","_a","_b","destination","chain","config","asset","feeAsset","balance","getBalance","feeBalance","destinationFeeBalance","min","getMin","existentialDeposit","extrinsic","contract","fee","getFee","max","getMax","contractConfig","feeConfig","createContract","getExtrinsicFee","extra","toBigInt","totalFee","converted","convertDecimals","error","result","Big","getAssetsBalances","address","assets","uniqueAssets","acc","a","ConfigBuilder","ConfigService","toBigInt","Big","AssetAmount","AssetAmount","getPolkadotApi","PolkadotService","_PolkadotService","api","chain","chains","_a","_b","existentialDeposit","eqExistentialDeposit","amount","config","response","account","fn","args","signer","#isSigner","AssetAmount","getDestinationData","transferConfig","destinationAddress","polkadot","chain","config","asset","balance","getBalance","min","getMin","fee","getFee","amount","AssetAmount","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFeeAsset","destinationFee","AssetAmount","source","getSourceData","amount","result","Big","toBigInt","getMin","signers","_a","_b","bigintAmount","chain","config","asset","feeAsset","contract","extrinsic","signer","createContract","balance","existentialDeposit","fee","min","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","getTransferData","destinationKeyOrChain","evmSigner","polkadotSigner","sourceKeyOrChain","getParachainBalances","chain","address","polkadot","PolkadotService","getAssetsBalances"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moonbeam-network/xcm-sdk",
3
- "version": "1.0.0-dev.11",
3
+ "version": "1.0.0-dev.110",
4
4
  "description": "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",
5
5
  "scripts": {
6
6
  "build": "tsup",
@@ -9,23 +9,27 @@
9
9
  "lint": "eslint ./src --ext .js,.ts",
10
10
  "lint:fix": "npm run lint -- --fix",
11
11
  "typecheck": "tsc --noEmit",
12
- "test:acc": "jest --forceExit --testTimeout 300000 ./tests/acceptance",
12
+ "test:acc": "vitest --run --testTimeout 300000 ./tests/acceptance",
13
13
  "prepack": "prettier --write build/index.d.ts"
14
14
  },
15
- "author": "PureStake",
15
+ "author": "moonbeam-foundation",
16
16
  "license": "MIT",
17
17
  "repository": {
18
18
  "directory": "packages/sdk",
19
19
  "type": "git",
20
- "url": "git+https://github.com/PureStake/xcm-sdk.git"
20
+ "url": "git+https://github.com/moonbeam-foundation/xcm-sdk.git"
21
21
  },
22
22
  "keywords": [
23
23
  "moonbeam",
24
24
  "moonriver",
25
- "xcm"
25
+ "xcm",
26
+ "polkadot",
27
+ "sdk",
28
+ "substrate",
29
+ "cross-chain"
26
30
  ],
27
31
  "bugs": {
28
- "url": "https://github.com/PureStake/xcm-sdk/issues"
32
+ "url": "https://github.com/moonbeam-foundation/xcm-sdk/issues"
29
33
  },
30
34
  "homepage": "https://docs.moonbeam.network/builders/xcm/xcm-sdk/xcm-sdk/",
31
35
  "files": [
@@ -47,17 +51,17 @@
47
51
  "types": "./build/index.d.ts",
48
52
  "main": "./build/index.cjs",
49
53
  "dependencies": {
50
- "@moonbeam-network/xcm-builder": "1.0.0-dev.11",
51
- "@moonbeam-network/xcm-config": "1.0.0-dev.11",
52
- "@moonbeam-network/xcm-types": "1.0.0-dev.11",
53
- "@moonbeam-network/xcm-utils": "1.0.0-dev.11",
54
+ "@moonbeam-network/xcm-builder": "1.0.0-dev.110",
55
+ "@moonbeam-network/xcm-config": "1.0.0-dev.110",
56
+ "@moonbeam-network/xcm-types": "1.0.0-dev.110",
57
+ "@moonbeam-network/xcm-utils": "1.0.0-dev.110",
54
58
  "big.js": "^6.2.1"
55
59
  },
56
60
  "peerDependencies": {
57
- "@polkadot/api": "^10.9.1",
58
- "@polkadot/api-augment": "^10.9.1",
59
- "@polkadot/types": "^10.9.1",
60
- "@polkadot/util": "^12.3.2",
61
- "ethers": "^5.7.2"
61
+ "@polkadot/api": "^11.2.1",
62
+ "@polkadot/api-augment": "^11.2.1",
63
+ "@polkadot/types": "^11.2.1",
64
+ "@polkadot/util": "^12.6.2",
65
+ "viem": "^2.13.7"
62
66
  }
63
67
  }