@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 +43 -19
- package/build/index.cjs +1 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.cts +126 -0
- package/build/index.d.ts +90 -66
- package/build/index.mjs +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +19 -15
package/README.md
CHANGED
|
@@ -1,22 +1,10 @@
|
|
|
1
|
-

|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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/
|
|
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:
|
|
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:
|
|
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
|
package/build/index.cjs.map
CHANGED
|
@@ -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":"skBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,SAAAE,GAAA,mBAAAC,GAAA,oBAAAC,GAAA,WAAAC,GAAA,mBAAAC,EAAA,WAAAC,GAAA,kBAAAC,IAAA,eAAAC,GAAAT,ICOA,IAAAU,EAA4B,uCAC5BC,GAAgC,uCAChCC,EAAgB,uBCRhB,IAAAC,EAAiC,kBCDjC,IAAAC,EAAA,CACE,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,OACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,WACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,cACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,QACR,KAAQ,SACV,EACA,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,OACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,UACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,SACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,EACA,CACE,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,QAAW,GACX,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,UACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,OACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,KACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,CACF,EDxNO,IAAMC,EAAN,KAAgD,CAC5C,QAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAgB,CAClD,GAAI,CAACD,EAAO,QACV,MAAM,IAAI,MAAM,8BAA8B,EAGhD,KAAK,QAAUA,EAAO,QACtB,KAAKF,GAAUE,EACf,KAAKD,GAAY,IAAI,WAAS,KAAK,QAASG,EAAKD,CAAM,CACzD,CAEA,MAAM,YAA8B,CAGlC,OAFgB,MAAM,KAAKF,GAAU,UAAU,GAAG,KAAKD,GAAQ,IAAI,GAEpD,SAAS,CAC1B,CAEA,MAAM,aAA+B,CAGnC,OAFiB,MAAM,KAAKC,GAAU,SAAS,CAGjD,CACF,EE/BA,IAAAI,EAAiC,kBCFjC,IAAAC,EAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,WAAc,CACZ,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,aAAgB,4BAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,UACR,KAAQ,QACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,CACF,EDvFO,IAAMC,EAAN,KAAmD,CAC/C,QAAkB,6CAElBC,GAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAgB,CAClD,KAAKJ,GAAUG,EACf,KAAKD,GAAUE,EACf,KAAKH,GAAY,IAAI,WAAS,KAAK,QAASI,EAAKD,CAAM,CACzD,CAEA,MAAM,UAAyC,CAC7C,OAAO,KAAKH,GAAU,KAAKD,GAAQ,IAAI,EAAE,GAAG,KAAKA,GAAQ,IAAI,CAC/D,CAEA,MAAM,OAAOM,EAAiC,CAC5C,GAAIA,IAAW,GACb,OAAO,GAOT,GAAI,CACF,IAAMC,GACJ,MAAM,KAAKN,GAAU,YAAY,KAAKD,GAAQ,IAAI,EAChD,GAAG,KAAKA,GAAQ,IAClB,GACA,SAAS,EACLQ,EAAW,MAAM,KAAK,YAAY,EAExC,OAAOD,EAAeC,CACxB,OAASC,EAAP,CAEA,cAAQ,MAAMA,CAAK,EAEb,IAAI,MACR,0DACF,CACF,CACF,CAEA,MAAc,aAAc,CAC1B,GAAM,CAAE,SAAAD,EAAU,qBAAAE,CAAqB,EAAI,MAAM,KAAKR,GAAQ,WAAW,EAEzE,QACGM,GAAA,YAAAA,EAAU,aAAc,MAAOE,GAAA,YAAAA,EAAsB,aAAc,GAExE,CACF,EEpDO,SAASC,EACdC,EACAC,EACsD,CACtD,GAAID,EAAO,SAAW,QACpB,OAAO,IAAIE,EAAMF,EAAQC,CAAM,EAGjC,GAAID,EAAO,SAAW,UACpB,OAAO,IAAIG,EAAQH,EAAQC,CAAM,EAGnC,MAAM,IAAI,MAAM,YAAYD,EAAO,kBAAkB,CACvD,CCrBA,IAAAI,EAA+C,yCAG/CC,EAAyB,uCAazB,eAAsBC,EAAW,CAC/B,QAAAC,EACA,OAAAC,EACA,aAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,IAAMC,EAAMH,EAAO,QAAQ,MAAM,CAC/B,QAAAD,EACA,MAAOG,EAAS,MAAM,kBAAkBF,EAAO,KAAK,CACtD,CAAC,EAED,OAAIG,EAAI,OAAS,WAAS,UACjBD,EAAS,MAAMC,CAA2B,EAGlCC,EACfD,EACAF,CACF,EAEgB,WAAW,CAC7B,CAEA,eAAsBI,EAAY,CAChC,QAAAN,EACA,MAAAO,EACA,OAAAN,EACA,aAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,IAAMC,EAAMH,EAAO,QAAQ,MAAM,CAC/B,QAAAD,EACA,MAAOG,EAAS,MAAM,kBAAkBI,GAASN,EAAO,KAAK,CAC/D,CAAC,EAED,OAAIG,EAAI,OAAS,WAAS,UACjBD,EAAS,iBAAiBI,GAASN,EAAO,KAAK,EAGvCI,EACfD,EACAF,CACF,EAEgB,YAAY,CAC9B,CAEA,eAAsBM,EAAOP,EAAqBE,EAA2B,CAC3E,GAAIF,EAAO,IACT,OAAOE,EAAS,MACdF,EAAO,IAAI,MAAM,CAAE,MAAOE,EAAS,MAAM,cAAcF,EAAO,KAAK,CAAE,CAAC,CACxE,EAGF,IAAMQ,EAAMN,EAAS,MAAM,YAAYF,EAAO,KAAK,EAEnD,GAAIQ,EAAK,CACP,IAAMC,EAAW,MAAMP,EAAS,iBAAiBF,EAAO,KAAK,EAE7D,SAAO,YAASQ,EAAKC,CAAQ,EAG/B,OAAO,EACT,CNtDA,eAAsBC,EAAc,CAClC,eAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,aAAAC,EACA,SAAAC,EACA,cAAAC,CACF,EAA0D,CAhC1D,IAAAC,EAAAC,EAAAC,EAAAC,EAiCE,GAAM,CACJ,MAAAC,EACA,YAAAC,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIb,EACEc,EAAa,cAAY,UAAUJ,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMK,EAAY,CAC1B,QAASd,EACT,OAAAY,EACA,aAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACKY,GAAgBV,EAAAO,EAAO,MAAP,MAAAP,EAAY,MAC9B,cAAY,UAAUO,EAAO,IAAI,MAAO,CACtC,OAAQ,GACR,SAAU,MAAME,EAAY,CAC1B,QAASd,EACT,MAAOY,EAAO,IAAI,MAClB,OAAAA,EACA,aAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACDU,EACEG,GAA2BV,EAAAM,EAAO,iBAAP,MAAAN,EAAuB,MACpD,cAAY,UAAUM,EAAO,eAAe,MAAO,CACjD,OAAQ,GACR,SAAU,MAAME,EAAY,CAC1B,QAASd,EACT,MAAOY,EAAO,eAAe,MAC7B,OAAAA,EACA,aAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACDU,EAEEI,EAAU,MAAMC,EAAW,CAC/B,QAASd,EACT,OAAAQ,EACA,aAAAV,EACA,SAAAC,CACF,CAAC,EAEKgB,EAAa,MAAMC,EAAe,CACtC,QAAShB,EACT,QAAAa,EACA,UAAWL,EAAO,IAClB,SAAAT,CACF,CAAC,EAEKkB,EACJT,EAAO,QAAUA,EAAO,eAAe,MACnCK,EACA,MAAMG,EAAe,CACnB,QAAShB,EACT,QAAAa,EACA,UAAWL,EAAO,eAClB,SAAAT,CACF,CAAC,EAEDmB,EAAM,MAAMC,EAAOX,EAAQT,CAAQ,EAEnCqB,GAAYjB,EAAAK,EAAO,YAAP,YAAAL,EAAkB,MAAM,CACxC,QAASP,EACT,OAAQiB,EACR,MAAON,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKT,EAAe,OACpB,SAAUU,EAAM,WAAWV,CAAc,EACzC,eAAgBU,EAAM,uBAAuBF,CAAK,EAClD,OAAQE,CACV,GACMc,GAAWjB,EAAAI,EAAO,WAAP,YAAAJ,EAAiB,MAAM,CACtC,QAASR,EACT,OAAQiB,EACR,MAAON,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKT,EAAe,OACpB,SAAUU,EAAM,WAAWV,CAAc,CAC3C,GACMyB,EAAM,MAAMC,GAAO,CACvB,QAAAV,EACA,SAAAQ,EACA,SAAUV,EAAc,SACxB,aAAAb,EACA,UAAAsB,EACA,SAAArB,EACA,cAAAC,CACF,CAAC,EAEKwB,EAAgBf,EAAW,SAAS,CAAE,OAAQI,CAAQ,CAAC,EACvD,CAAE,mBAAAY,CAAmB,EAAI1B,EACzB2B,EAAYf,EAAc,SAAS,CAAE,OAAQW,CAAI,CAAC,EAClDK,GAAmBhB,EAAc,SAAS,CAAE,OAAQI,CAAW,CAAC,EAChEa,GAA8BhB,EAAyB,SAAS,CACpE,OAAQK,CACV,CAAC,EACKY,EAAYpB,EAAW,SAAS,CAAE,OAAQS,CAAI,CAAC,EAC/CY,GAAYC,GAAO,CACvB,cAAAP,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAG,CACF,CAAC,EAED,MAAO,CACL,QAASL,EACT,MAAAjB,EACA,sBAAuBqB,GACvB,mBAAAH,EACA,IAAKC,EACL,WAAYC,GACZ,IAAKG,GACL,IAAKD,CACP,CACF,CASA,eAAsBb,EAAe,CACnC,QAAAgB,EACA,QAAAnB,EACA,UAAAoB,EACA,SAAAlC,CACF,EAAsB,CACpB,OAAOkC,EACHlC,EAAS,MACPkC,EAAU,QAAQ,MAAM,CACtB,QAAAD,EACA,MAAOjC,EAAS,MAAM,kBAAkBkC,EAAU,KAAK,CACzD,CAAC,CACH,EACApB,CACN,CAYA,eAAsBU,GAAO,CAC3B,QAAAV,EACA,SAAAQ,EACA,SAAAa,EACA,aAAApC,EACA,UAAAsB,EACA,SAAArB,EACA,cAAAC,CACF,EAAkC,CAChC,GAAIqB,EAAU,CACZ,GAAI,CAACvB,EACH,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAOqC,GAAetB,EAASQ,EAAUa,EAAUpC,CAAY,EAGjE,GAAIsB,EACF,OAAOgB,GAAgBvB,EAASO,EAAWrB,EAAUC,CAAa,EAGpE,MAAM,IAAI,MAAM,+CAA+C,CACjE,CAEA,eAAsBmC,GACpBtB,EACAL,EACA0B,EACApC,EACiB,CAKjB,IAAMwB,EAAM,MAJKe,EACf7B,EACAV,CACF,EAC2B,OAAOe,CAAO,EAEzC,SAAO,oBAAgBS,EAAK,GAAIY,CAAQ,CAC1C,CAEA,eAAsBE,GACpBvB,EACAO,EACArB,EACAC,EACiB,CAMjB,GAAI,CACF,OAAO,MAAMD,EAAS,OAAOC,EAAeoB,CAAS,CACvD,OAASkB,EAAP,CACA,GAAIzB,EACF,MAAMyB,EAGR,OAAO,EACT,CACF,CASO,SAASP,GAAO,CACrB,cAAAP,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAG,CACF,EAA8B,CAC5B,IAAMU,EAASf,EACZ,MAAM,EACN,MAAMK,EAAU,MAAM,CAAC,EACvB,MACCL,EAAc,OAAOC,CAAkB,EACnCA,EAAmB,MAAM,KACzB,EAAAe,SAAI,CAAC,CACX,EACC,MAAMhB,EAAc,OAAOE,CAAS,EAAIA,EAAU,MAAM,KAAI,EAAAc,SAAI,CAAC,CAAC,EAErE,OAAOhB,EAAc,SAAS,CAC5B,OAAQe,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,COhRA,IAAAE,EAA8B,wCCE9B,IAAAC,EAA0C,uCAC1CC,EAAgB,uBCJhB,IAAAC,GAAO,iCAMPC,EAMO,wCACPC,GAKO,uCACPC,GAA+B,uCAOlBC,EAAN,KAAsB,CAClB,IAEA,MAET,YAAYC,EAAiBC,EAAqB,CAChD,KAAK,IAAMD,EACX,KAAK,MAAQC,CACf,CAEA,aAAa,OAAOA,EAA+C,CACjE,OAAO,IAAIF,EAAgB,QAAM,mBAAeE,EAAM,EAAE,EAAGA,CAAK,CAClE,CAEA,aAAa,YAAYC,EAAoD,CAC3E,OAAO,QAAQ,IAAIA,EAAO,IAAIH,EAAgB,MAAM,CAAC,CACvD,CAEA,IAAI,UAAmB,CACrB,OAAO,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC,GAAK,EAClD,CAEA,IAAI,OAAe,CACjB,IAAMI,EAAS,KAAK,IAAI,SAAS,YAAY,GAAG,CAAC,EAC3CC,EAAMD,GAAA,YAAAA,EAAQ,WAAW,cAI/B,GAAIC,IAAQ,SAAW,KAAK,MAAM,MAAQ,sBAAoB,IAC5D,OAAO,KAIT,GAAIA,IAAQ,SAAW,KAAK,MAAM,MAAQ,kBAAgB,IACxD,OAAO,SAGT,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMC,EAAQ,YAAU,IAAID,CAAG,EAE/B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2BD,kBAAoBD,IAAS,EAG1E,OAAOE,CACT,CAEA,IAAI,oBAAkC,CA5ExC,IAAAC,EAAAC,EA6EI,IAAMC,GAAqBF,EAAA,KAAK,IAAI,OAAO,WAAhB,YAAAA,EAA0B,mBAC/CG,GAAuBF,EAAA,KAAK,IAAI,OAAO,aAAhB,YAAAA,EACzB,mBACEG,GACJF,GAAA,YAAAA,EAAoB,cAAcC,GAAA,YAAAA,EAAsB,aAAc,GAExE,OAAO,eAAY,UAAU,KAAK,MAAO,CACvC,OAAAC,EACA,SAAU,KAAK,QACjB,CAAC,CACH,CAEA,MAAM,aACJL,EAC2D,CA3F/D,IAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EA4FI,IAAMC,IACJR,EAAA,KAAK,IAAI,MAAM,SAAf,YAAAA,EAAuB,aACvBC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,aAC9BI,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,sBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,mBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,kBAEhC,GAAI,CAACC,EACH,OAGF,IAAMC,EAAQ,MAAMD,EAAGT,CAAK,EACtBW,EAAY,oBAAqBD,EAAOA,EAAK,gBAAgB,EAAIA,EAEvE,MAAO,CACL,SAAUC,EAAU,SAAS,SAAS,EACtC,OAAQA,EAAU,OAAO,SAAS,CACpC,CACF,CAEA,MAAM,iBAAiBX,EAA+B,CAhHxD,IAAAC,EAiHI,QACGA,EAAA,MAAM,KAAK,aAAa,KAAK,MAAM,mBAAmBD,CAAK,CAAC,IAA5D,YAAAC,EACG,WACJ,KAAK,MAAM,iBAAiBD,CAAK,GACjC,KAAK,QAET,CAEA,MAAM,MAAMY,EAA+C,CACzD,IAAMC,EAAW,MAAM,KAAK,IAAI,MAAMD,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC9D,GAAGA,EAAO,IACZ,EAEA,OAAOA,EAAO,UAAUC,CAAQ,CAClC,CAEA,MAAM,OAAOC,EAAiBF,EAA0C,CACtE,IAAMH,EAAK,KAAK,IAAI,GAAGG,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQH,CAAE,EAK9B,OAFa,MADKA,EAAG,GAAGM,CAAI,EACC,YAAYD,EAAS,CAAE,MAAO,EAAG,CAAC,GAEnD,WAAW,SAAS,CAClC,CAEA,MAAM,SACJA,EACAF,EACAI,EACiB,CACjB,IAAMP,EAAK,KAAK,IAAI,GAAGG,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQH,CAAE,EAW9B,OARa,MADKA,EAAG,GAAGM,CAAI,EACC,YAC3B,KAAKE,GAAUD,CAAM,EAAIF,EAAUE,EACnC,CACE,MAAO,GACP,OAAQ,KAAKC,GAAUD,CAAM,EAAIA,EAAS,MAC5C,CACF,GAEY,SAAS,CACvB,CAGAC,GAAUD,EAAiE,CACzE,MAAO,gBAAiBA,CAC1B,CACF,EChKA,IAAAE,EAA4B,uCAC5BC,GAAyB,uCAazB,eAAsBC,GAAmB,CACvC,eAAAC,EACA,mBAAAC,EACA,aAAAC,EACA,SAAAC,CACF,EAAoE,CAClE,GAAM,CACJ,MAAAC,EACA,YAAa,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC/B,EAAIN,EAEEO,EAAa,cAAY,UAAUH,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMI,EAAY,CAC1B,QAASP,EACT,OAAAK,EACA,aAAAJ,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EAEKM,EAAU,MAAMC,EAAW,CAC/B,QAAST,EACT,OAAAK,EACA,aAAAJ,EACA,SAAAC,CACF,CAAC,EACKQ,EAAM,MAAMC,EAAON,EAAQH,CAAQ,EAEnCU,EAAgBN,EAAW,SAAS,CAAE,OAAQE,CAAQ,CAAC,EACvD,CAAE,mBAAAK,CAAmB,EAAIX,EAEzBY,EAAY,MAAMC,GAAO,CAAE,OAAQhB,EAAgB,SAAAG,CAAS,CAAC,EAC7Dc,EAAYV,EAAW,SAAS,CAAE,OAAQI,CAAI,CAAC,EAErD,MAAO,CACL,QAASE,EACT,MAAAR,EACA,mBAAAS,EACA,IAAKC,EACL,IAAKE,CACP,CACF,CAOA,eAAsBD,GAAO,CAC3B,OAAAV,EACA,SAAAH,CACF,EAAuC,CACrC,GAAM,CAAE,OAAAe,EAAQ,MAAAd,CAAM,EAAIE,EAAO,OAAO,OAAO,eACzCa,EAAW,MAAMhB,EAAS,iBAAiBC,CAAK,EAChDG,EAAa,cAAY,UAAUH,EAAO,CAC9C,OAAQ,GACR,SAAAe,CACF,CAAC,EAED,GAAI,OAAO,SAASD,CAAM,EACxB,OAAOX,EAAW,SAAS,CACzB,UAAQ,aAASW,EAAkBC,CAAQ,CAC7C,CAAC,EAGH,IAAMC,EAAOF,EAA4B,MAAM,CAC7C,IAAKf,EAAS,IACd,MAAOA,EAAS,MAAM,WAAWC,CAAK,CACxC,CAAC,EAED,OAAOG,EAAW,SAAS,CACzB,OAAQ,MAAMa,EAAI,KAAK,CACzB,CAAC,CACH,CFtEA,eAAsBC,EAAgB,CACpC,mBAAAC,EACA,aAAAC,EACA,eAAAC,EACA,cAAAC,EACA,eAAAC,CACF,EAAiD,CAC/C,GAAI,CAACH,EACH,MAAM,IAAI,MAAM,gCAAgC,EAGlD,GAAM,CAACI,EAAcC,CAAW,EAAI,MAAMC,EAAgB,YAAY,CACpEH,EAAe,YAAY,MAC3BA,EAAe,OAAO,KACxB,CAAC,EAEKI,EAAc,MAAMC,GAAmB,CAC3C,mBAAAT,EACA,aAAAC,EACA,SAAUI,EACV,eAAAD,CACF,CAAC,EAEKM,EAAiB,MAAMC,GAC3BL,EACAE,EAAY,GACd,EAEMI,EAAS,MAAMC,EAAc,CACjC,mBAAAb,EACA,eAAAU,EACA,aAAAT,EACA,SAAUK,EACV,cAAAH,EACA,eAAAC,CACF,CAAC,EAED,MAAO,CACL,YAAAI,EACA,YAAYM,EAAyB,CAInC,IAAMC,KAHY,EAAAC,YAChB,YAASF,EAAQF,EAAO,QAAQ,QAAQ,EAAE,SAAS,CACrD,EACyB,MACvBA,EAAO,QAAQ,OAAOF,CAAc,EAAIA,EAAe,MAAM,KAAI,EAAAM,SAAI,CAAC,CACxE,EAEA,OAAOJ,EAAO,QAAQ,SAAS,CAC7B,OAAQG,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,EAMA,eAAgB,GAChB,IAAKH,EAAO,IACZ,IAAKK,GAAOT,CAAW,EACvB,OAAAI,EACA,MAAM,MAAO,CACX,OAAOb,EAAgB,CACrB,mBAAoBI,EACpB,aAAAF,EACA,eAAAC,EACA,cAAeF,EACf,eAAgB,CACd,GAAGI,EACH,YAAaA,EAAe,OAC5B,OAAQA,EAAe,WACzB,CACF,CAAC,CACH,EACA,MAAM,SAASU,EAAyB,CA9F5C,IAAAI,EAAAC,EA+FM,IAAMC,KAAe,YAASN,EAAQF,EAAO,QAAQ,QAAQ,EACvD,CACJ,MAAAS,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAInB,EAEEoB,GAAWN,EAAAK,EAAO,WAAP,YAAAL,EAAiB,MAAM,CACtC,QAASlB,EACT,OAAQoB,EACR,MAAOE,EAAM,WAAWD,CAAK,EAC7B,YAAab,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUY,EAAM,WAAWZ,CAAc,CAC3C,GACMe,GAAYN,EAAAI,EAAO,YAAP,YAAAJ,EAAkB,MAAM,CACxC,QAASnB,EACT,OAAQoB,EACR,MAAOE,EAAM,WAAWD,CAAK,EAC7B,YAAab,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUY,EAAM,WAAWZ,CAAc,EACzC,eAAgBY,EAAM,uBAAuBD,CAAK,EAClD,OAAQC,CACV,GAEA,GAAIE,EAAU,CACZ,GAAI,CAACvB,EACH,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OACEyB,EAAeF,EAAUvB,CAAY,EAEpC,SAAS,EACT,KAAM0B,GAAOA,EAAG,IAAI,EAGzB,GAAIF,EAAW,CACb,GAAI,CAACvB,EACH,MAAM,IAAI,MAAM,kCAAkC,EAGpD,OAAOI,EAAY,SAASH,EAAesB,EAAWvB,CAAc,EAGtE,MAAM,IAAI,MAAM,+CAA+C,CACjE,CACF,CACF,CAEA,SAASe,GAAO,CACd,QAAAW,EACA,mBAAAC,EACA,IAAAC,EACA,IAAAC,CACF,EAAiC,CAC/B,IAAMhB,KAAS,EAAAC,SAAI,CAAC,EACjB,KAAKY,EAAQ,OAAOE,CAAG,EAAIA,EAAI,MAAM,KAAI,EAAAd,SAAI,CAAC,CAAC,EAC/C,KACCY,EAAQ,OAAOC,CAAkB,GAC/BD,EAAQ,MAAM,EAAE,GAAGC,EAAmB,MAAM,CAAC,EAC3CA,EAAmB,MAAM,KACzB,EAAAb,SAAI,CAAC,CACX,EACC,KAAKY,EAAQ,MAAM,EAAE,GAAGG,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,KAAI,EAAAf,SAAI,CAAC,CAAC,EAE9D,OAAOY,EAAQ,SAAS,CACtB,OAAQ,OAAOb,EAAO,QAAQ,CAAC,CACjC,CAAC,CACH,CAEA,eAAsBJ,GACpBqB,EACAtB,EACsB,CACtB,IAAMuB,EAAyB,MAAMD,EAAe,iBAClDtB,CACF,EAaA,OAXEA,EAAe,WAAauB,EACxBvB,EACAA,EAAe,SAAS,CACtB,UAAQ,mBACNA,EAAe,OACfA,EAAe,SACfuB,CACF,EACA,SAAUA,CACZ,CAAC,CAGT,CDlLO,SAASC,GAAIC,EAAsB,CACxC,MAAO,CACL,OAAOC,EAAuB,CAC5B,GAAM,CAAE,OAAAC,EAAQ,MAAAC,CAAM,KAAI,iBAAc,EAAE,OAAOF,CAAS,EAE1D,MAAO,CACL,OAAAC,EACA,MAAME,EAA4B,CAChC,GAAM,CAAE,aAAAC,EAAc,OAAAC,CAAO,EAAIH,EAAMC,CAAU,EAEjD,MAAO,CACL,aAAAC,EACA,OAAOE,EAA+B,CACpC,GAAM,CAAE,kBAAAC,EAAmB,YAAAC,CAAY,EAAIH,EAAOC,CAAU,EAE5D,MAAO,CACL,kBAAAC,EACA,YAAYE,EAAmC,CAC7C,MAAO,CACL,MAAM,SACJC,EACAC,EACAC,EACuB,CACvB,OAAOC,EAAI,CACT,GAAGd,EACH,GAAGa,EACH,mBAAAD,EACA,cAAAD,EACA,eAAgBF,EAAYC,CAAc,EAAE,MAAM,CACpD,CAAC,CACH,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,MAAM,gBAAgB,CACpB,mBAAAE,EACA,sBAAAG,EACA,aAAAC,EACA,WAAAZ,EACA,eAAAa,EACA,cAAAN,EACA,iBAAAO,CACF,EAA6C,CAC3C,OAAOJ,EAAI,CACT,mBAAAF,EACA,aAAAI,EACA,eAAAC,EACA,cAAAN,EACA,kBAAgB,iBAAc,EAC3B,OAAO,EACP,MAAMP,CAAU,EAChB,OAAOc,CAAgB,EACvB,YAAYH,CAAqB,EACjC,MAAM,CACX,CAAC,CACH,CACF,CACF","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 {
|
|
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
|
-
|
|
49
|
-
polkadotSigner
|
|
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(
|
|
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:
|
|
91
|
+
balance: AssetAmount;
|
|
92
|
+
feeBalance: AssetAmount;
|
|
105
93
|
contract?: ContractConfig;
|
|
106
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
102
|
+
feeBalance,
|
|
103
|
+
chain,
|
|
104
|
+
contract: contractConfig,
|
|
117
105
|
extrinsic,
|
|
106
|
+
feeConfig,
|
|
118
107
|
polkadot,
|
|
119
108
|
sourceAddress,
|
|
120
|
-
}: GetFeeParams): Promise<
|
|
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:
|
|
111
|
+
balance: AssetAmount,
|
|
129
112
|
extrinsic: ExtrinsicConfig,
|
|
130
113
|
polkadot: PolkadotService,
|
|
131
114
|
sourceAddress: string,
|
|
132
115
|
): Promise<bigint>;
|
|
133
116
|
interface GetMaxParams {
|
|
134
|
-
|
|
117
|
+
balance: AssetAmount;
|
|
135
118
|
existentialDeposit: AssetAmount;
|
|
136
|
-
|
|
137
|
-
|
|
119
|
+
fee: AssetAmount;
|
|
120
|
+
min: AssetAmount;
|
|
138
121
|
}
|
|
139
122
|
declare function getMax({
|
|
140
|
-
|
|
123
|
+
balance,
|
|
141
124
|
existentialDeposit,
|
|
142
|
-
|
|
143
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
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
|
package/build/index.mjs.map
CHANGED
|
@@ -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.
|
|
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": "
|
|
12
|
+
"test:acc": "vitest --run --testTimeout 300000 ./tests/acceptance",
|
|
13
13
|
"prepack": "prettier --write build/index.d.ts"
|
|
14
14
|
},
|
|
15
|
-
"author": "
|
|
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/
|
|
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/
|
|
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.
|
|
51
|
-
"@moonbeam-network/xcm-config": "1.0.0-dev.
|
|
52
|
-
"@moonbeam-network/xcm-types": "1.0.0-dev.
|
|
53
|
-
"@moonbeam-network/xcm-utils": "1.0.0-dev.
|
|
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": "^
|
|
58
|
-
"@polkadot/api-augment": "^
|
|
59
|
-
"@polkadot/types": "^
|
|
60
|
-
"@polkadot/util": "^12.
|
|
61
|
-
"
|
|
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
|
}
|