@moonbeam-network/xcm-sdk 1.0.0-dev.107 → 1.0.0-dev.109
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/build/index.cjs +1 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.cts +4 -5
- package/build/index.d.ts +5 -6
- package/build/index.mjs +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +5 -5
package/build/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var et=Object.create;var I=Object.defineProperty;var nt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var it=(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 at(t))!rt.call(n,s)&&s!==e&&I(n,s,{get:()=>t[s],enumerable:!(a=nt(t,s))||a.enumerable});return n};var Q=(n,t,e)=>(e=n!=null?et(st(n)):{},H(t||!n||!n.__esModule?I(e,"default",{value:n,enumerable:!0}):e,n)),ot=n=>H(I({},"__esModule",{value:!0}),n);var pt={};it(pt,{Sdk:()=>ut,getAssetsBalances:()=>K,getBalance:()=>l,getExtrinsicFee:()=>j,getFee:()=>$,getMax:()=>z,getMin:()=>v,getParachainBalances:()=>ft,getSourceData:()=>O});module.exports=ot(pt);var F=require("@moonbeam-network/xcm-utils"),q=Q(require("big.js"),1);var D=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 k=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,D.createPublicClient)({chain:e.getViemChain(),transport:(0,D.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 E=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 k(t,n);if(t.module==="Xtokens"){let a=(e=n==null?void 0:n.contracts)==null?void 0:e.Xtokens;return new E(t,n,a)}throw new Error(`Contract ${t.module} not found`)}var R=require("@moonbeam-network/xcm-builder"),_=require("@moonbeam-network/xcm-types"),L=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 u=await s.query(r),m=a.usesChainDecimals?(0,L.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 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),u=o.fee?i.getChainAsset(o.fee.asset):c,m=await l({address:s,asset:c,builder:o.balance,chain:i,polkadot:a}),p=o.fee?await l({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 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,B=(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}),h=(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()}),A=await $({balance:m,chain:i,contractConfig:h,extrinsic:B,feeConfig:o.fee,polkadot:a,sourceAddress:s}),T=z({balance:m,existentialDeposit:g,fee:A,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:g,fee:A,feeBalance:p,max:T,min:f}}async function $({balance:n,chain:t,contractConfig: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 j(n,a,r,i),c=s!=null&&s.extra?(0,F.toBigInt)(s.extra,n.decimals):0n,u=o+c,m=t.usesChainDecimals?(0,F.convertDecimals)(u,r.decimals,n.decimals):u;return n.copyWith({amount:m})}async function j(n,t,e,a){try{return await e.getFee(a,t)}catch(s){if(n)throw s;return 0n}}function z({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 b=require("@moonbeam-network/xcm-config");var N=require("@moonbeam-network/xcm-utils"),y=Q(require("big.js"),1);var Jt=require("@polkadot/api-augment"),J=require("@moonbeam-network/xcm-config"),U=require("@moonbeam-network/xcm-types"),Y=require("@moonbeam-network/xcm-utils"),P=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 asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(!e)throw new Error("No native symbol key found");return e==="token"&&[J.equilibrium.key].includes(this.chain.key)?this.chain.getChainAsset(e):this.chain.getChainAsset(e)}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.asset,{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 l({address:t,asset:r,builder:s.balance,chain:a,polkadot:e}),o=await v(s,e),c=await ct({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function ct({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 P.createMulti([r.destination.chain,r.source.chain]),c=await tt({destinationAddress:t,polkadot:i,transferConfig:r}),u=c.fee.convertDecimals(r.source.chain.getChainAsset(c.fee).decimals),m=await O({destinationAddress:t,destinationFee:u,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(p){let f=(0,y.default)((0,N.toBigInt)(p,m.balance.decimals).toString()).minus(m.balance.isSame(u)?u.toBig():(0,y.default)(0));return m.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:m.max,min:mt(c),source:m,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,X;let f=(0,N.toBigInt)(p,m.balance.decimals),{source:{chain:g,config:B}}=r,h=g.getChainAsset(r.asset),A=g.getChainAsset(u.key),T=(S=B.contract)==null?void 0:S.build({address:t,amount:f,asset:h.address||h.getAssetId(),destination:c.chain,fee:u.amount,feeAsset:A.address||A.getAssetId()}),x=(X=B.extrinsic)==null?void 0:X.build({address:t,amount:f,asset:h.getAssetId(),destination:c.chain,fee:u.amount,feeAsset:A.getAssetId(),palletInstance:h.getAssetPalletInstance(),source:g});if(T){let w=e||d.evmSigner;if(!w)throw new Error("EVM Signer must be provided");return C(g,T).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 mt({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 ut(n){let t=(n==null?void 0:n.configService)??new b.ConfigService;return{assets(e){let{assets:a,asset:s}=(0,b.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,b.ConfigBuilder)(t).assets().asset(r).source(c).destination(a).build()})}}}async function ft(n,t){let s=new b.ConfigService().getChainConfig(n).getAssetsConfigs(),r=await P.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 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});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.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 contractConfig: contract,\n extrinsic,\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 contractConfig?: 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 chain,\n 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 balance.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, balance.decimals)\n : 0n;\n const totalFee = fee + extra;\n\n const converted = chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, balance.decimals)\n : totalFee;\n\n return balance.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 { equilibrium } from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n AssetAmount,\n ChainAsset,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { 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 asset(): ChainAsset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return this.chain.getChainAsset(key);\n }\n\n return this.chain.getChainAsset(key);\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.asset, { 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_config","import_xcm_types","import_xcm_utils","PolkadotService","_PolkadotService","api","chain","chains","symbol","key","_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 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"]}
|
package/build/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { SubstrateQueryConfig, ExtrinsicConfig, ContractConfig, BalanceConfigBuilder } from '@moonbeam-network/xcm-builder';
|
|
2
2
|
import { TransferConfig, FeeAssetConfig, AssetConfig, IConfigService } from '@moonbeam-network/xcm-config';
|
|
3
|
-
import { AnyParachain,
|
|
3
|
+
import { AnyParachain, AssetAmount, AnyChain, ChainAsset, Ecosystem, Asset } from '@moonbeam-network/xcm-types';
|
|
4
4
|
import { ApiPromise } from '@polkadot/api';
|
|
5
5
|
import { Signer } from '@polkadot/api/types';
|
|
6
6
|
import { IKeyringPair } from '@polkadot/types/types';
|
|
@@ -14,7 +14,6 @@ declare class PolkadotService {
|
|
|
14
14
|
static create(chain: AnyParachain): Promise<PolkadotService>;
|
|
15
15
|
static createMulti(chains: AnyParachain[]): Promise<PolkadotService[]>;
|
|
16
16
|
get decimals(): number;
|
|
17
|
-
get asset(): ChainAsset;
|
|
18
17
|
get existentialDeposit(): AssetAmount;
|
|
19
18
|
query(config: SubstrateQueryConfig): Promise<bigint>;
|
|
20
19
|
getFee(account: string, config: ExtrinsicConfig): Promise<bigint>;
|
|
@@ -60,15 +59,15 @@ interface GetSourceDataParams {
|
|
|
60
59
|
}
|
|
61
60
|
declare function getSourceData({ transferConfig, destinationAddress, destinationFee, polkadot, sourceAddress, }: GetSourceDataParams): Promise<SourceChainTransferData>;
|
|
62
61
|
interface GetFeeParams {
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
feeBalance: AssetAmount;
|
|
63
|
+
contract?: ContractConfig;
|
|
65
64
|
chain: AnyChain;
|
|
66
65
|
extrinsic?: ExtrinsicConfig;
|
|
67
66
|
feeConfig?: FeeAssetConfig;
|
|
68
67
|
polkadot: PolkadotService;
|
|
69
68
|
sourceAddress: string;
|
|
70
69
|
}
|
|
71
|
-
declare function getFee({
|
|
70
|
+
declare function getFee({ feeBalance, chain, contract: contractConfig, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<AssetAmount>;
|
|
72
71
|
declare function getExtrinsicFee(balance: AssetAmount, extrinsic: ExtrinsicConfig, polkadot: PolkadotService, sourceAddress: string): Promise<bigint>;
|
|
73
72
|
interface GetMaxParams {
|
|
74
73
|
balance: AssetAmount;
|
package/build/index.d.ts
CHANGED
|
@@ -12,9 +12,9 @@ import {
|
|
|
12
12
|
} from '@moonbeam-network/xcm-config';
|
|
13
13
|
import {
|
|
14
14
|
AnyParachain,
|
|
15
|
-
ChainAsset,
|
|
16
15
|
AssetAmount,
|
|
17
16
|
AnyChain,
|
|
17
|
+
ChainAsset,
|
|
18
18
|
Ecosystem,
|
|
19
19
|
Asset,
|
|
20
20
|
} from '@moonbeam-network/xcm-types';
|
|
@@ -31,7 +31,6 @@ declare class PolkadotService {
|
|
|
31
31
|
static create(chain: AnyParachain): Promise<PolkadotService>;
|
|
32
32
|
static createMulti(chains: AnyParachain[]): Promise<PolkadotService[]>;
|
|
33
33
|
get decimals(): number;
|
|
34
|
-
get asset(): ChainAsset;
|
|
35
34
|
get existentialDeposit(): AssetAmount;
|
|
36
35
|
query(config: SubstrateQueryConfig): Promise<bigint>;
|
|
37
36
|
getFee(account: string, config: ExtrinsicConfig): Promise<bigint>;
|
|
@@ -89,8 +88,8 @@ declare function getSourceData({
|
|
|
89
88
|
sourceAddress,
|
|
90
89
|
}: GetSourceDataParams): Promise<SourceChainTransferData>;
|
|
91
90
|
interface GetFeeParams {
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
feeBalance: AssetAmount;
|
|
92
|
+
contract?: ContractConfig;
|
|
94
93
|
chain: AnyChain;
|
|
95
94
|
extrinsic?: ExtrinsicConfig;
|
|
96
95
|
feeConfig?: FeeAssetConfig;
|
|
@@ -98,9 +97,9 @@ interface GetFeeParams {
|
|
|
98
97
|
sourceAddress: string;
|
|
99
98
|
}
|
|
100
99
|
declare function getFee({
|
|
101
|
-
|
|
100
|
+
feeBalance,
|
|
102
101
|
chain,
|
|
103
|
-
contractConfig,
|
|
102
|
+
contract: contractConfig,
|
|
104
103
|
extrinsic,
|
|
105
104
|
feeConfig,
|
|
106
105
|
polkadot,
|
package/build/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{convertDecimals as $,toBigInt as j}from"@moonbeam-network/xcm-utils";import G from"big.js";import{createPublicClient as X,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 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=X({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 D=[{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,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:D,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:D,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 B(t,n);if(t.module==="Xtokens"){let a=(e=n==null?void 0:n.contracts)==null?void 0:e.Xtokens;return new T(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 L}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 u=await s.query(r),m=a.usesChainDecimals?L(u,s.decimals,t.decimals):u;return i.copyWith({amount:m})}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 b,x;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 I(o,a),{existentialDeposit:l}=a,w=(b=o.extrinsic)==null?void 0:b.build({address:t,amount:m.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:m.amount,asset:c.address||c.getAssetId(),destination:r.chain,fee:e.amount,feeAsset:u.address||u.getAssetId()}),h=await z({balance:m,chain:i,contractConfig:y,extrinsic:w,feeConfig:o.fee,polkadot:a,sourceAddress:s}),v=U({balance:m,existentialDeposit:l,fee:h,min:f});return{balance:m,chain:i,destinationFeeBalance:d,existentialDeposit:l,fee:h,feeBalance:p,max:v,min:f}}async function z({balance:n,chain:t,contractConfig: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 J(n,a,r,i),c=s!=null&&s.extra?j(s.extra,n.decimals):0n,u=o+c,m=t.usesChainDecimals?$(u,r.decimals,n.decimals):u;return n.copyWith({amount:m})}async function J(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 N}from"@moonbeam-network/xcm-config";import{toBigInt as O}from"@moonbeam-network/xcm-utils";import P from"big.js";import"@polkadot/api-augment";import{equilibrium as Y}from"@moonbeam-network/xcm-config";import{AssetAmount as Z}from"@moonbeam-network/xcm-types";import{getPolkadotApi as tt}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 tt(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 asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(!e)throw new Error("No native symbol key found");return e==="token"&&[Y.key].includes(this.chain.key)?this.chain.getChainAsset(e):this.chain.getChainAsset(e)}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 Z.fromChainAsset(this.asset,{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 et}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 nt({address:t,polkadot:e,transferConfig:n});return{balance:i,chain:a,existentialDeposit:e.existentialDeposit,fee:c,min:o}}async function nt({transferConfig:n,polkadot:t}){let{amount:e}=n.source.config.destinationFee,a=et.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 k({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}),u=c.fee.convertDecimals(r.source.chain.getChainAsset(c.fee).decimals),m=await W({destinationAddress:t,destinationFee:u,polkadot:o,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(p){let f=P(O(p,m.balance.decimals).toString()).minus(m.balance.isSame(u)?u.toBig():P(0));return m.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:m.max,min:at(c),source:m,async swap(){return k({configService:n,destinationAddress:s,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(p,d){var x,E;let f=O(p,m.balance.decimals),{source:{chain:l,config:w}}=r,y=l.getChainAsset(r.asset),h=l.getChainAsset(u.key),v=(x=w.contract)==null?void 0:x.build({address:t,amount:f,asset:y.address||y.getAssetId(),destination:c.chain,fee:u.amount,feeAsset:h.address||h.getAssetId()}),b=(E=w.extrinsic)==null?void 0:E.build({address:t,amount:f,asset:y.getAssetId(),destination:c.chain,fee:u.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(b){let S=a||d.polkadotSigner;if(!S)throw new Error("Polkadot signer must be provided");return o.transfer(s,b,S)}throw new Error("Either contract or extrinsic must be provided")}}}function at({balance:n,existentialDeposit:t,fee:e,min:a}){let s=P(0).plus(n.isSame(e)?e.toBig():P(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():P(0)).plus(n.toBig().lt(a.toBig())?a.toBig():P(0));return n.copyWith({amount:BigInt(s.toFixed())})}function Ae(n){let t=(n==null?void 0:n.configService)??new N;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:u,destination:m}=o(c);return{destinationChains:u,destination(p){return{async accounts(d,f){return k({...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 k({configService:t,destinationAddress:e,evmSigner:s,polkadotSigner:i,sourceAddress:o,transferConfig:K(t).assets().asset(r).source(c).destination(a).build()})}}}async function Ce(n,t){let s=new N().getChainConfig(n).getAssetsConfigs(),r=await C.create(n);return await _({chain:n,assets:s,address:t,polkadot:r})}export{Ae as Sdk,_ as getAssetsBalances,g as getBalance,J as getExtrinsicFee,z as getFee,U as getMax,I as getMin,Ce as getParachainBalances,W as getSourceData};
|
|
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};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contracts/Erc20/Erc20ABI.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 contractConfig: contract,\n extrinsic,\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 contractConfig?: 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 chain,\n 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 balance.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, balance.decimals)\n : 0n;\n const totalFee = fee + extra;\n\n const converted = chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, balance.decimals)\n : totalFee;\n\n return balance.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 { equilibrium } from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n AssetAmount,\n ChainAsset,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { 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 asset(): ChainAsset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return this.chain.getChainAsset(key);\n }\n\n return this.chain.getChainAsset(key);\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.asset, { 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","equilibrium","AssetAmount","getPolkadotApi","PolkadotService","_PolkadotService","api","chain","chains","symbol","key","_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 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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moonbeam-network/xcm-sdk",
|
|
3
|
-
"version": "1.0.0-dev.
|
|
3
|
+
"version": "1.0.0-dev.109",
|
|
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.
|
|
55
|
-
"@moonbeam-network/xcm-config": "1.0.0-dev.
|
|
56
|
-
"@moonbeam-network/xcm-types": "1.0.0-dev.
|
|
57
|
-
"@moonbeam-network/xcm-utils": "1.0.0-dev.
|
|
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",
|
|
58
58
|
"big.js": "^6.2.1"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|