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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -4,17 +4,7 @@ The XCM SDK offers helper functions, that provide a very simple interface to exe
4
4
 
5
5
  # Documentation
6
6
 
7
- ## v2 (current)
8
-
9
- - [readme](https://github.com/moonbeam-foundation/xcm-sdk/tree/main)
10
- - [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/xcm-sdk/) (Updated docs coming soon...)
11
- - [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/reference/) (Updated docs coming soon...)
12
-
13
- ## v1 (previous)
14
-
15
- - [readme](https://github.com/moonbeam-foundation/xcm-sdk/tree/v1)
16
- - [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/xcm-sdk/)
17
- - [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/reference/)
7
+ You can find the documentation at [https://moonbeam-foundation.github.io/xcm-sdk/latest/](https://moonbeam-foundation.github.io/xcm-sdk/latest/).
18
8
 
19
9
  # Installation
20
10
 
package/build/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var tt=Object.create;var I=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var at=Object.getPrototypeOf,st=Object.prototype.hasOwnProperty;var rt=(n,t)=>{for(var e in t)I(n,e,{get:t[e],enumerable:!0})},H=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of nt(t))!st.call(n,s)&&s!==e&&I(n,s,{get:()=>t[s],enumerable:!(a=et(t,s))||a.enumerable});return n};var Q=(n,t,e)=>(e=n!=null?tt(at(n)):{},H(t||!n||!n.__esModule?I(e,"default",{value:n,enumerable:!0}):e,n)),it=n=>H(I({},"__esModule",{value:!0}),n);var pt={};rt(pt,{Sdk:()=>mt,getAssetsBalances:()=>K,getBalance:()=>l,getExtrinsicFee:()=>z,getFee:()=>j,getMax:()=>J,getMin:()=>v,getParachainBalances:()=>ut,getSourceData:()=>O});module.exports=it(pt);var F=require("@moonbeam-network/xcm-utils"),q=Q(require("big.js"),1);var E=require("viem");var V=[{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:V,address:this.address,args:[t],functionName:"balanceOf"})}};var M=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,M.createPublicClient)({chain:e.getViemChain(),transport:(0,M.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 R=require("@moonbeam-network/xcm-builder"),_=require("@moonbeam-network/xcm-types"),$=require("@moonbeam-network/xcm-utils");async function l({address:n,asset:t,builder:e,chain:a,polkadot:s}){let r=e.build({address:n,asset:t.getBalanceAssetId()}),i=_.AssetAmount.fromChainAsset(t,{amount:0n});if(r.type===R.CallType.Substrate){let m=await s.query(r),u=a.usesChainDecimals?(0,$.convertDecimals)(m,s.decimals,t.decimals):m;return i.copyWith({amount:u})}let c=await C(a,r).getBalance();return i.copyWith({amount:c})}async function v(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 x,S;let{destination:r,source:{chain:i,config:o}}=n,c=i.getChainAsset(n.asset),m=o.fee?i.getChainAsset(o.fee.asset):c,u=await l({address:s,asset:c,builder:o.balance,chain:i,polkadot:a}),p=o.fee?await l({address:s,asset:m,builder:o.fee.balance,chain:i,polkadot:a}):u,d=o.destinationFee.asset.isEqual(c)?u:o.destinationFee.asset.isEqual(m)?p:await l({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:a}),f=await v(o,a),{existentialDeposit:g}=a,T=(x=o.extrinsic)==null?void 0:x.build({address:t,amount:u.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),h=(S=o.contract)==null?void 0:S.build({address:t,amount:u.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:m.address||m.getAssetId()}),A=await j({chain:i,contract:h,extrinsic:T,feeBalance:p,feeConfig:o.fee,polkadot:a,sourceAddress:s}),B=J({balance:u,existentialDeposit:g,fee:A,min:f});return{balance:u,chain:i,destinationFeeBalance:d,existentialDeposit:g,fee:A,feeBalance:p,max:B,min:f}}async function j({feeBalance:n,chain:t,contract:e,extrinsic:a,feeConfig:s,polkadot:r,sourceAddress:i}){if(!e&&!a)throw new Error("Either contract or extrinsic must be provided");if(e){let d=await C(t,e).getFee(n.amount,i);return n.copyWith({amount:d})}let o=await z(n,a,r,i),c=s!=null&&s.extra?(0,F.toBigInt)(s.extra,n.decimals):0n,m=o+c,u=t.usesChainDecimals?(0,F.convertDecimals)(m,r.decimals,n.decimals):m;return n.copyWith({amount:u})}async function z(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function J({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=>l({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"),y=Q(require("big.js"),1);var Jt=require("@polkadot/api-augment"),L=require("@moonbeam-network/xcm-types"),U=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,U.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 L.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 Y=require("@moonbeam-network/xcm-types");async function Z({transferConfig:n,destinationAddress:t,polkadot:e}){let{destination:{chain:a,config:s}}=n,r=a.getChainAsset(s.asset),i=await l({address:t,asset:r,builder:s.balance,chain:a,polkadot:e}),o=await v(s,e),c=await ot({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function ot({transferConfig:n,polkadot:t}){let{amount:e}=n.source.config.destinationFee,a=Y.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 Z({destinationAddress:t,polkadot:i,transferConfig:r}),m=c.fee.convertDecimals(r.source.chain.getChainAsset(c.fee).decimals),u=await O({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(p){let f=(0,y.default)((0,X.toBigInt)(p,u.balance.decimals).toString()).minus(u.balance.isSame(m)?m.toBig():(0,y.default)(0));return u.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:u.max,min:ct(c),source:u,async swap(){return G({configService:n,destinationAddress:s,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(p,d){var S,N;let f=(0,X.toBigInt)(p,u.balance.decimals),{source:{chain:g,config:T}}=r,h=g.getChainAsset(r.asset),A=g.getChainAsset(m.key),B=(S=T.contract)==null?void 0:S.build({address:t,amount:f,asset:h.address||h.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:A.address||A.getAssetId()}),x=(N=T.extrinsic)==null?void 0:N.build({address:t,amount:f,asset:h.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:A.getAssetId(),palletInstance:h.getAssetPalletInstance(),source:g});if(B){let w=e||d.evmSigner;if(!w)throw new Error("EVM Signer must be provided");return C(g,B).transfer(w)}if(x){let w=a||d.polkadotSigner;if(!w)throw new Error("Polkadot signer must be provided");return o.transfer(s,x,w)}throw new Error("Either contract or extrinsic must be provided")}}}function ct({balance:n,existentialDeposit:t,fee:e,min:a}){let s=(0,y.default)(0).plus(n.isSame(e)?e.toBig():(0,y.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,y.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,y.default)(0));return n.copyWith({amount:BigInt(s.toFixed())})}function mt(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:m,destination:u}=o(c);return{destinationChains:m,destination(p){return{async accounts(d,f){return G({...n,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:u(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 ut(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});
1
+ "use strict";var nt=Object.create;var I=Object.defineProperty;var at=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var rt=Object.getPrototypeOf,it=Object.prototype.hasOwnProperty;var ot=(n,t)=>{for(var e in t)I(n,e,{get:t[e],enumerable:!0})},Q=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of st(t))!it.call(n,s)&&s!==e&&I(n,s,{get:()=>t[s],enumerable:!(a=at(t,s))||a.enumerable});return n};var V=(n,t,e)=>(e=n!=null?nt(rt(n)):{},Q(t||!n||!n.__esModule?I(e,"default",{value:n,enumerable:!0}):e,n)),ct=n=>Q(I({},"__esModule",{value:!0}),n);var dt={};ot(dt,{Sdk:()=>pt,getAssetsBalances:()=>K,getBalance:()=>g,getExtrinsicFee:()=>J,getFee:()=>z,getMax:()=>L,getMin:()=>B,getParachainBalances:()=>ft,getSourceData:()=>O});module.exports=ct(dt);var M=require("@moonbeam-network/xcm-utils"),q=V(require("big.js"),1);var E=require("viem");var R=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var D=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=(0,E.createPublicClient)({chain:e.getViemChain(),transport:(0,E.http)()})}async getBalance(){let t=this.#t.args[0];return this.#e.readContract({abi:R,address:this.address,args:[t],functionName:"balanceOf"})}};var F=require("viem");var W=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var k=class{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;constructor(t,e,a){this.#t=t,this.address=a??this.defaultMoonChainAddress,this.#e=(0,F.createPublicClient)({chain:e.getViemChain(),transport:(0,F.http)()})}async transfer(t){let{request:e}=await this.#e.simulateContract({abi:W,account:t.account,address:this.address,args:this.#t.args,functionName:this.#t.func});return await t.writeContract(e)}async getFee(t,e){if(t===0n)return 0n;try{let a=await this.#e.estimateContractGas({abi:W,account:e,address:this.address,args:this.#t.args,functionName:this.#t.func}),s=await this.getGasPrice();return a*s}catch(a){throw console.error(a),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){return this.#e.getGasPrice()}};function C(n,t){var e;if(!n.isEvmParachain())throw new Error("Chain is not an EVM parachain");if(t.module==="Erc20")return new D(t,n);if(t.module==="Xtokens"){let a=(e=n==null?void 0:n.contracts)==null?void 0:e.Xtokens;return new k(t,n,a)}throw new Error(`Contract ${t.module} not found`)}var $=require("@moonbeam-network/xcm-builder"),_=require("@moonbeam-network/xcm-types"),j=require("@moonbeam-network/xcm-utils");async function g({address:n,asset:t,builder:e,chain:a,polkadot:s}){let r=e.build({address:n,asset:t.getBalanceAssetId(),constractAddress:t.address}),i=_.AssetAmount.fromChainAsset(t,{amount:0n});if(r.type===$.CallType.Substrate){let u=await s.query(r),m=a.usesChainDecimals?(0,j.convertDecimals)(u,s.decimals,t.decimals):u;return i.copyWith({amount:m})}let c=await C(a,r).getBalance();return i.copyWith({amount:c})}async function B(n,t){let e=_.AssetAmount.fromChainAsset(t.chain.getChainAsset(n.asset),{amount:0n});if(n.min){let a=await t.query(n.min.build({asset:e.getMinAssetId()}));return e.copyWith({amount:a})}return e.min?e.copyWith({amount:e.min}):e.copyWith({amount:0n})}async function O({transferConfig:n,destinationAddress:t,destinationFee:e,polkadot:a,sourceAddress:s}){var S,w;let{destination:r,source:{chain:i,config:o}}=n,c=i.getChainAsset(n.asset),u=o.fee?i.getChainAsset(o.fee.asset):c,m=await g({address:s,asset:c,builder:o.balance,chain:i,polkadot:a}),p=o.fee?await g({address:s,asset:u,builder:o.fee.balance,chain:i,polkadot:a}):m,d=o.destinationFee.asset.isEqual(c)?m:o.destinationFee.asset.isEqual(u)?p:await g({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:a}),f=await B(o,a),{existentialDeposit:l}=a,h=(S=o.extrinsic)==null?void 0:S.build({address:t,amount:m.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),T=(w=o.contract)==null?void 0:w.build({address:t,amount:m.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:u.address||u.getAssetId()}),y=await z({balance:m,chain:i,contract:T,extrinsic:h,feeBalance:p,feeConfig:o.fee,polkadot:a,sourceAddress:s}),x=L({balance:m,existentialDeposit:l,fee:y,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:y,feeBalance:p,max:x,min:f}}async function z({balance:n,feeBalance:t,chain:e,contract:a,extrinsic:s,feeConfig:r,polkadot:i,sourceAddress:o}){if(!a&&!s)throw new Error("Either contract or extrinsic must be provided");if(a){let f=await C(e,a).getFee(n.amount,o);return t.copyWith({amount:f})}let c=await J(n,s,i,o),u=r!=null&&r.extra?(0,M.toBigInt)(r.extra,t.decimals):0n,m=c+u,p=e.usesChainDecimals?(0,M.convertDecimals)(m,i.decimals,t.decimals):m;return t.copyWith({amount:p})}async function J(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function L({balance:n,existentialDeposit:t,fee:e,min:a}){let s=n.toBig().minus(a.toBig()).minus(n.isSame(t)?t.toBig():(0,q.default)(0)).minus(n.isSame(e)?e.toBig():(0,q.default)(0));return n.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function K({address:n,chain:t,assets:e,polkadot:a}){let s=e.reduce((i,o)=>i.some(c=>c.asset.isEqual(o.asset))?i:[o,...i],[]);return await Promise.all(s.map(async i=>g({address:n,asset:t.getChainAsset(i.asset),builder:i.balance,chain:t,polkadot:a})))}var P=require("@moonbeam-network/xcm-config");var X=require("@moonbeam-network/xcm-utils"),A=V(require("big.js"),1),et=require("@moonbeam-network/xcm-types");var Ut=require("@polkadot/api-augment"),U=require("@moonbeam-network/xcm-types"),Y=require("@moonbeam-network/xcm-utils"),b=class n{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new n(await(0,Y.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(e=>n.create(e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get existentialDeposit(){var s,r;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,a=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return U.AssetAmount.fromChainAsset(this.chain.nativeAsset,{amount:a})}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let a=this.api.tx[e.module][e.func],s=e.getArgs(a);return(await a(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,a){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).signAndSend(this.#t(a)?t:a,{nonce:-1,signer:this.#t(a)?a:void 0})).toString()}#t(t){return"signPayload"in t}};var Z=require("@moonbeam-network/xcm-types");async function tt({transferConfig:n,destinationAddress:t,polkadot:e}){let{destination:{chain:a,config:s}}=n,r=a.getChainAsset(s.asset),i=await g({address:t,asset:r,builder:s.balance,chain:a,polkadot:e}),o=await B(s,e),c=await mt({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function mt({transferConfig:n,polkadot:t}){let{amount:e}=n.source.config.destinationFee,a=Z.AssetAmount.fromChainAsset(n.destination.chain.getChainAsset(n.source.config.destinationFee.asset),{amount:0n});if(Number.isFinite(e))return a.copyWith({amount:e});let s=e.build({api:t.api,asset:a.getAssetId()});return a.copyWith({amount:await s.call()})}async function G({configService:n,destinationAddress:t,evmSigner:e,polkadotSigner:a,sourceAddress:s,transferConfig:r}){let[i,o]=await b.createMulti([r.destination.chain,r.source.chain]),c=await tt({destinationAddress:t,polkadot:i,transferConfig:r}),u=r.source.chain.getChainAsset(c.fee),m=et.AssetAmount.fromChainAsset(u,{amount:c.fee.convertDecimals(u.decimals).amount}),p=await O({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(d){let l=(0,A.default)((0,X.toBigInt)(d,p.balance.decimals).toString()).minus(p.balance.isSame(m)?m.toBig():(0,A.default)(0));return p.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:p.max,min:ut(c),source:p,async swap(){return G({configService:n,destinationAddress:s,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(d,f){var N,H;let l=(0,X.toBigInt)(d,p.balance.decimals),{source:{chain:h,config:T}}=r,y=h.getChainAsset(r.asset),x=h.getChainAsset(m.key),S=(N=T.contract)==null?void 0:N.build({address:t,amount:l,asset:y.address||y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:x.address||x.getAssetId()}),w=(H=T.extrinsic)==null?void 0:H.build({address:t,amount:l,asset:y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:x.getAssetId(),palletInstance:y.getAssetPalletInstance(),source:h});if(S){let v=e||f.evmSigner;if(!v)throw new Error("EVM Signer must be provided");return C(h,S).transfer(v)}if(w){let v=a||f.polkadotSigner;if(!v)throw new Error("Polkadot signer must be provided");return o.transfer(s,w,v)}throw new Error("Either contract or extrinsic must be provided")}}}function ut({balance:n,existentialDeposit:t,fee:e,min:a}){let s=(0,A.default)(0).plus(n.isSame(e)?e.toBig():(0,A.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,A.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,A.default)(0));return n.copyWith({amount:BigInt(s.toFixed())})}function pt(n){let t=(n==null?void 0:n.configService)??new P.ConfigService;return{assets(e){let{assets:a,asset:s}=(0,P.ConfigBuilder)(t).assets(e);return{assets:a,asset(r){let{sourceChains:i,source:o}=s(r);return{sourceChains:i,source(c){let{destinationChains:u,destination:m}=o(c);return{destinationChains:u,destination(p){return{async accounts(d,f){return G({...n,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:m(p).build()})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:a,evmSigner:s,keyOrAsset:r,polkadotSigner:i,sourceAddress:o,sourceKeyOrChain:c}){return G({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:(0,P.ConfigBuilder)(t).assets().asset(r).source(c).destination(a).build()})}}}async function ft(n,t){let s=new P.ConfigService().getChainConfig(n).getAssetsConfigs(),r=await b.create(n);return await K({chain:n,assets:s,address:t,polkadot:r})}0&&(module.exports={Sdk,getAssetsBalances,getBalance,getExtrinsicFee,getFee,getMax,getMin,getParachainBalances,getSourceData});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.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 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 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 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(feeBalance.amount, sourceAddress);\n\n return feeBalance.copyWith({ amount: fee });\n }\n\n const fee = await getExtrinsicFee(\n feeBalance,\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 });\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 { 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 const destinationFee = destination.fee.convertDecimals(\n transferConfig.source.chain.getChainAsset(destination.fee).decimals,\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_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","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"]}
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"]}
package/build/index.d.cts CHANGED
@@ -59,6 +59,7 @@ interface GetSourceDataParams {
59
59
  }
60
60
  declare function getSourceData({ transferConfig, destinationAddress, destinationFee, polkadot, sourceAddress, }: GetSourceDataParams): Promise<SourceChainTransferData>;
61
61
  interface GetFeeParams {
62
+ balance: AssetAmount;
62
63
  feeBalance: AssetAmount;
63
64
  contract?: ContractConfig;
64
65
  chain: AnyChain;
@@ -67,7 +68,7 @@ interface GetFeeParams {
67
68
  polkadot: PolkadotService;
68
69
  sourceAddress: string;
69
70
  }
70
- declare function getFee({ feeBalance, chain, contract: contractConfig, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<AssetAmount>;
71
+ declare function getFee({ balance, feeBalance, chain, contract: contractConfig, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<AssetAmount>;
71
72
  declare function getExtrinsicFee(balance: AssetAmount, extrinsic: ExtrinsicConfig, polkadot: PolkadotService, sourceAddress: string): Promise<bigint>;
72
73
  interface GetMaxParams {
73
74
  balance: AssetAmount;
package/build/index.d.ts CHANGED
@@ -88,6 +88,7 @@ declare function getSourceData({
88
88
  sourceAddress,
89
89
  }: GetSourceDataParams): Promise<SourceChainTransferData>;
90
90
  interface GetFeeParams {
91
+ balance: AssetAmount;
91
92
  feeBalance: AssetAmount;
92
93
  contract?: ContractConfig;
93
94
  chain: AnyChain;
@@ -97,6 +98,7 @@ interface GetFeeParams {
97
98
  sourceAddress: string;
98
99
  }
99
100
  declare function getFee({
101
+ balance,
100
102
  feeBalance,
101
103
  chain,
102
104
  contract: contractConfig,
package/build/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{convertDecimals as j,toBigInt as z}from"@moonbeam-network/xcm-utils";import G from"big.js";import{createPublicClient as N,http as H}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 T=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=N({chain:e.getViemChain(),transport:H()})}async getBalance(){let t=this.#t.args[0];return this.#e.readContract({abi:M,address:this.address,args:[t],functionName:"balanceOf"})}};import{createPublicClient as Q,http as V}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 B=class{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;constructor(t,e,a){this.#t=t,this.address=a??this.defaultMoonChainAddress,this.#e=Q({chain:e.getViemChain(),transport:V()})}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 a=await this.#e.estimateContractGas({abi:E,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 A(n,t){var e;if(!n.isEvmParachain())throw new Error("Chain is not an EVM parachain");if(t.module==="Erc20")return new T(t,n);if(t.module==="Xtokens"){let a=(e=n==null?void 0:n.contracts)==null?void 0:e.Xtokens;return new B(t,n,a)}throw new Error(`Contract ${t.module} not found`)}import{CallType as R}from"@moonbeam-network/xcm-builder";import{AssetAmount as F}from"@moonbeam-network/xcm-types";import{convertDecimals as $}from"@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()}),i=F.fromChainAsset(t,{amount:0n});if(r.type===R.Substrate){let m=await s.query(r),u=a.usesChainDecimals?$(m,s.decimals,t.decimals):m;return i.copyWith({amount:u})}let c=await A(a,r).getBalance();return i.copyWith({amount:c})}async function I(n,t){let e=F.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 W({transferConfig:n,destinationAddress:t,destinationFee:e,polkadot:a,sourceAddress:s}){var P,x;let{destination:r,source:{chain:i,config:o}}=n,c=i.getChainAsset(n.asset),m=o.fee?i.getChainAsset(o.fee.asset):c,u=await g({address:s,asset:c,builder:o.balance,chain:i,polkadot:a}),p=o.fee?await g({address:s,asset:m,builder:o.fee.balance,chain:i,polkadot:a}):u,d=o.destinationFee.asset.isEqual(c)?u:o.destinationFee.asset.isEqual(m)?p:await g({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:a}),f=await I(o,a),{existentialDeposit:l}=a,w=(P=o.extrinsic)==null?void 0:P.build({address:t,amount:u.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),y=(x=o.contract)==null?void 0:x.build({address:t,amount:u.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:m.address||m.getAssetId()}),h=await J({chain:i,contract:y,extrinsic:w,feeBalance:p,feeConfig:o.fee,polkadot:a,sourceAddress:s}),v=U({balance:u,existentialDeposit:l,fee:h,min:f});return{balance:u,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:h,feeBalance:p,max:v,min:f}}async function J({feeBalance:n,chain:t,contract:e,extrinsic:a,feeConfig:s,polkadot:r,sourceAddress:i}){if(!e&&!a)throw new Error("Either contract or extrinsic must be provided");if(e){let d=await A(t,e).getFee(n.amount,i);return n.copyWith({amount:d})}let o=await L(n,a,r,i),c=s!=null&&s.extra?z(s.extra,n.decimals):0n,m=o+c,u=t.usesChainDecimals?j(m,r.decimals,n.decimals):m;return n.copyWith({amount:u})}async function L(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function U({balance:n,existentialDeposit:t,fee:e,min:a}){let s=n.toBig().minus(a.toBig()).minus(n.isSame(t)?t.toBig():G(0)).minus(n.isSame(e)?e.toBig():G(0));return n.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function _({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})))}import{ConfigBuilder as K,ConfigService as X}from"@moonbeam-network/xcm-config";import{toBigInt as O}from"@moonbeam-network/xcm-utils";import b from"big.js";import"@polkadot/api-augment";import{AssetAmount as Y}from"@moonbeam-network/xcm-types";import{getPolkadotApi as Z}from"@moonbeam-network/xcm-utils";var C=class n{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new n(await Z(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 Y.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}};import{AssetAmount as tt}from"@moonbeam-network/xcm-types";async function q({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 I(s,e),c=await et({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function et({transferConfig:n,polkadot:t}){let{amount:e}=n.source.config.destinationFee,a=tt.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 D({configService:n,destinationAddress:t,evmSigner:e,polkadotSigner:a,sourceAddress:s,transferConfig:r}){let[i,o]=await C.createMulti([r.destination.chain,r.source.chain]),c=await q({destinationAddress:t,polkadot:i,transferConfig:r}),m=c.fee.convertDecimals(r.source.chain.getChainAsset(c.fee).decimals),u=await W({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(p){let f=b(O(p,u.balance.decimals).toString()).minus(u.balance.isSame(m)?m.toBig():b(0));return u.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:u.max,min:nt(c),source:u,async swap(){return D({configService:n,destinationAddress:s,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(p,d){var x,k;let f=O(p,u.balance.decimals),{source:{chain:l,config:w}}=r,y=l.getChainAsset(r.asset),h=l.getChainAsset(m.key),v=(x=w.contract)==null?void 0:x.build({address:t,amount:f,asset:y.address||y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:h.address||h.getAssetId()}),P=(k=w.extrinsic)==null?void 0:k.build({address:t,amount:f,asset:y.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:h.getAssetId(),palletInstance:y.getAssetPalletInstance(),source:l});if(v){let S=e||d.evmSigner;if(!S)throw new Error("EVM Signer must be provided");return A(l,v).transfer(S)}if(P){let S=a||d.polkadotSigner;if(!S)throw new Error("Polkadot signer must be provided");return o.transfer(s,P,S)}throw new Error("Either contract or extrinsic must be provided")}}}function nt({balance:n,existentialDeposit:t,fee:e,min:a}){let s=b(0).plus(n.isSame(e)?e.toBig():b(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():b(0)).plus(n.toBig().lt(a.toBig())?a.toBig():b(0));return n.copyWith({amount:BigInt(s.toFixed())})}function ge(n){let t=(n==null?void 0:n.configService)??new X;return{assets(e){let{assets:a,asset:s}=K(t).assets(e);return{assets:a,asset(r){let{sourceChains:i,source:o}=s(r);return{sourceChains:i,source(c){let{destinationChains:m,destination:u}=o(c);return{destinationChains:m,destination(p){return{async accounts(d,f){return D({...n,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:u(p).build()})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:a,evmSigner:s,keyOrAsset:r,polkadotSigner:i,sourceAddress:o,sourceKeyOrChain:c}){return D({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:K(t).assets().asset(r).source(c).destination(a).build()})}}}async function ye(n,t){let s=new X().getChainConfig(n).getAssetsConfigs(),r=await C.create(n);return await _({chain:n,assets:s,address:t,polkadot:r})}export{ge as Sdk,_ as getAssetsBalances,g as getBalance,L as getExtrinsicFee,J as getFee,U as getMax,I as getMin,ye as getParachainBalances,W as getSourceData};
1
+ import{convertDecimals as z,toBigInt as J}from"@moonbeam-network/xcm-utils";import W from"big.js";import{createPublicClient as H,http as Q}from"viem";var M=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var B=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=H({chain:e.getViemChain(),transport:Q()})}async getBalance(){let t=this.#t.args[0];return this.#e.readContract({abi:M,address:this.address,args:[t],functionName:"balanceOf"})}};import{createPublicClient as V,http as R}from"viem";var E=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var T=class{defaultMoonChainAddress="0x0000000000000000000000000000000000000804";address;#t;#e;constructor(t,e,n){this.#t=t,this.address=n??this.defaultMoonChainAddress,this.#e=V({chain:e.getViemChain(),transport:R()})}async transfer(t){let{request:e}=await this.#e.simulateContract({abi:E,account:t.account,address:this.address,args:this.#t.args,functionName:this.#t.func});return await t.writeContract(e)}async getFee(t,e){if(t===0n)return 0n;try{let n=await this.#e.estimateContractGas({abi:E,account:e,address:this.address,args:this.#t.args,functionName:this.#t.func}),s=await this.getGasPrice();return n*s}catch(n){throw console.error(n),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){return this.#e.getGasPrice()}};function h(a,t){var e;if(!a.isEvmParachain())throw new Error("Chain is not an EVM parachain");if(t.module==="Erc20")return new B(t,a);if(t.module==="Xtokens"){let n=(e=a==null?void 0:a.contracts)==null?void 0:e.Xtokens;return new T(t,a,n)}throw new Error(`Contract ${t.module} not found`)}import{CallType as $}from"@moonbeam-network/xcm-builder";import{AssetAmount as G}from"@moonbeam-network/xcm-types";import{convertDecimals as j}from"@moonbeam-network/xcm-utils";async function y({address:a,asset:t,builder:e,chain:n,polkadot:s}){let r=e.build({address:a,asset:t.getBalanceAssetId(),constractAddress:t.address}),i=G.fromChainAsset(t,{amount:0n});if(r.type===$.Substrate){let u=await s.query(r),m=n.usesChainDecimals?j(u,s.decimals,t.decimals):u;return i.copyWith({amount:m})}let c=await h(n,r).getBalance();return i.copyWith({amount:c})}async function I(a,t){let e=G.fromChainAsset(t.chain.getChainAsset(a.asset),{amount:0n});if(a.min){let n=await t.query(a.min.build({asset:e.getMinAssetId()}));return e.copyWith({amount:n})}return e.min?e.copyWith({amount:e.min}):e.copyWith({amount:0n})}async function _({transferConfig:a,destinationAddress:t,destinationFee:e,polkadot:n,sourceAddress:s}){var x,S;let{destination:r,source:{chain:i,config:o}}=a,c=i.getChainAsset(a.asset),u=o.fee?i.getChainAsset(o.fee.asset):c,m=await y({address:s,asset:c,builder:o.balance,chain:i,polkadot:n}),p=o.fee?await y({address:s,asset:u,builder:o.fee.balance,chain:i,polkadot:n}):m,d=o.destinationFee.asset.isEqual(c)?m:o.destinationFee.asset.isEqual(u)?p:await y({address:s,asset:i.getChainAsset(o.destinationFee.asset),builder:o.destinationFee.balance,chain:i,polkadot:n}),f=await I(o,n),{existentialDeposit:l}=n,A=(x=o.extrinsic)==null?void 0:x.build({address:t,amount:m.amount,asset:c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:e.getAssetId(),palletInstance:c.getAssetPalletInstance(),source:i}),v=(S=o.contract)==null?void 0:S.build({address:t,amount:m.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:u.address||u.getAssetId()}),g=await L({balance:m,chain:i,contract:v,extrinsic:A,feeBalance:p,feeConfig:o.fee,polkadot:n,sourceAddress:s}),P=Y({balance:m,existentialDeposit:l,fee:g,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:g,feeBalance:p,max:P,min:f}}async function L({balance:a,feeBalance:t,chain:e,contract:n,extrinsic:s,feeConfig:r,polkadot:i,sourceAddress:o}){if(!n&&!s)throw new Error("Either contract or extrinsic must be provided");if(n){let f=await h(e,n).getFee(a.amount,o);return t.copyWith({amount:f})}let c=await U(a,s,i,o),u=r!=null&&r.extra?J(r.extra,t.decimals):0n,m=c+u,p=e.usesChainDecimals?z(m,i.decimals,t.decimals):m;return t.copyWith({amount:p})}async function U(a,t,e,n){try{return await e.getFee(n,t)}catch(s){if(a)throw s;return 0n}}function Y({balance:a,existentialDeposit:t,fee:e,min:n}){let s=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():W(0)).minus(a.isSame(e)?e.toBig():W(0));return a.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}async function q({address:a,chain:t,assets:e,polkadot:n}){let s=e.reduce((i,o)=>i.some(c=>c.asset.isEqual(o.asset))?i:[o,...i],[]);return await Promise.all(s.map(async i=>y({address:a,asset:t.getChainAsset(i.asset),builder:i.balance,chain:t,polkadot:n})))}import{ConfigBuilder as X,ConfigService as N}from"@moonbeam-network/xcm-config";import{toBigInt as K}from"@moonbeam-network/xcm-utils";import b from"big.js";import{AssetAmount as at}from"@moonbeam-network/xcm-types";import"@polkadot/api-augment";import{AssetAmount as Z}from"@moonbeam-network/xcm-types";import{getPolkadotApi as tt}from"@moonbeam-network/xcm-utils";var C=class a{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new a(await tt(t.ws),t)}static async createMulti(t){return Promise.all(t.map(e=>a.create(e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get existentialDeposit(){var s,r;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(r=this.api.consts.eqBalances)==null?void 0:r.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return Z.fromChainAsset(this.chain.nativeAsset,{amount:n})}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],s=e.getArgs(n);return(await n(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as et}from"@moonbeam-network/xcm-types";async function O({transferConfig:a,destinationAddress:t,polkadot:e}){let{destination:{chain:n,config:s}}=a,r=n.getChainAsset(s.asset),i=await y({address:t,asset:r,builder:s.balance,chain:n,polkadot:e}),o=await I(s,e),c=await nt({address:t,polkadot:e,transferConfig:a});return{balance:i,chain:n,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function nt({transferConfig:a,polkadot:t}){let{amount:e}=a.source.config.destinationFee,n=et.fromChainAsset(a.destination.chain.getChainAsset(a.source.config.destinationFee.asset),{amount:0n});if(Number.isFinite(e))return n.copyWith({amount:e});let s=e.build({api:t.api,asset:n.getAssetId()});return n.copyWith({amount:await s.call()})}async function D({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:s,transferConfig:r}){let[i,o]=await C.createMulti([r.destination.chain,r.source.chain]),c=await O({destinationAddress:t,polkadot:i,transferConfig:r}),u=r.source.chain.getChainAsset(c.fee),m=at.fromChainAsset(u,{amount:c.fee.convertDecimals(u.decimals).amount}),p=await _({destinationAddress:t,destinationFee:m,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(d){let l=b(K(d,p.balance.decimals).toString()).minus(p.balance.isSame(m)?m.toBig():b(0));return p.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:p.max,min:st(c),source:p,async swap(){return D({configService:a,destinationAddress:s,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(d,f){var k,F;let l=K(d,p.balance.decimals),{source:{chain:A,config:v}}=r,g=A.getChainAsset(r.asset),P=A.getChainAsset(m.key),x=(k=v.contract)==null?void 0:k.build({address:t,amount:l,asset:g.address||g.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:P.address||P.getAssetId()}),S=(F=v.extrinsic)==null?void 0:F.build({address:t,amount:l,asset:g.getAssetId(),destination:c.chain,fee:m.amount,feeAsset:P.getAssetId(),palletInstance:g.getAssetPalletInstance(),source:A});if(x){let w=e||f.evmSigner;if(!w)throw new Error("EVM Signer must be provided");return h(A,x).transfer(w)}if(S){let w=n||f.polkadotSigner;if(!w)throw new Error("Polkadot signer must be provided");return o.transfer(s,S,w)}throw new Error("Either contract or extrinsic must be provided")}}}function st({balance:a,existentialDeposit:t,fee:e,min:n}){let s=b(0).plus(a.isSame(e)?e.toBig():b(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():b(0)).plus(a.toBig().lt(n.toBig())?n.toBig():b(0));return a.copyWith({amount:BigInt(s.toFixed())})}function he(a){let t=(a==null?void 0:a.configService)??new N;return{assets(e){let{assets:n,asset:s}=X(t).assets(e);return{assets:n,asset(r){let{sourceChains:i,source:o}=s(r);return{sourceChains:i,source(c){let{destinationChains:u,destination:m}=o(c);return{destinationChains:u,destination(p){return{async accounts(d,f){return D({...a,configService:t,destinationAddress:f,sourceAddress:d,transferConfig:m(p).build()})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,evmSigner:s,keyOrAsset:r,polkadotSigner:i,sourceAddress:o,sourceKeyOrChain:c}){return D({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:X(t).assets().asset(r).source(c).destination(n).build()})}}}async function Ce(a,t){let s=new N().getChainConfig(a).getAssetsConfigs(),r=await C.create(a);return await q({chain:a,assets:s,address:t,polkadot:r})}export{he as Sdk,q as getAssetsBalances,y as getBalance,U as getExtrinsicFee,L as getFee,Y as getMax,I as getMin,Ce as getParachainBalances,_ as getSourceData};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.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 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 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 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(feeBalance.amount, sourceAddress);\n\n return feeBalance.copyWith({ amount: fee });\n }\n\n const fee = await getExtrinsicFee(\n feeBalance,\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 });\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 { 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 const destinationFee = destination.fee.convertDecimals(\n transferConfig.source.chain.getChainAsset(destination.fee).decimals,\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","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","destinationFee","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"]}
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.109",
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",
@@ -51,10 +51,10 @@
51
51
  "types": "./build/index.d.ts",
52
52
  "main": "./build/index.cjs",
53
53
  "dependencies": {
54
- "@moonbeam-network/xcm-builder": "1.0.0-dev.109",
55
- "@moonbeam-network/xcm-config": "1.0.0-dev.109",
56
- "@moonbeam-network/xcm-types": "1.0.0-dev.109",
57
- "@moonbeam-network/xcm-utils": "1.0.0-dev.109",
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",
58
58
  "big.js": "^6.2.1"
59
59
  },
60
60
  "peerDependencies": {