@moonbeam-network/xcm-sdk 1.4.20 → 1.4.22
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.ts +2 -0
- package/build/index.mjs +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +2 -2
package/build/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var yt=Object.create;var F=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var wt=(a,t)=>{for(var e in t)F(a,e,{get:t[e],enumerable:!0})},Z=(a,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ct(t))!At.call(a,r)&&r!==e&&F(a,r,{get:()=>t[r],enumerable:!(n=ht(t,r))||n.enumerable});return a};var tt=(a,t,e)=>(e=a!=null?yt(bt(a)):{},Z(t||!a||!a.__esModule?F(e,"default",{value:a,enumerable:!0}):e,a)),St=a=>Z(F({},"__esModule",{value:!0}),a);var Bt={};wt(Bt,{Sdk:()=>Tt,getContractFee:()=>it,getExtrinsicFee:()=>ot,getFee:()=>st,getFeeBalances:()=>K,getMax:()=>ct,getSourceData:()=>N});module.exports=St(Bt);var q=require("@moonbeam-network/xcm-types"),rt=require("@moonbeam-network/xcm-utils"),z=tt(require("big.js"),1);var et=require("ethers"),S=require("viem");function x(a){return"provider"in a}function w(a){return"signer"in a}var Q=[{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=x(e)?new et.Contract(this.address,Q,e):(0,S.getContract)({abi:Q,address:this.address,publicClient:(0,S.createPublicClient)({chain:e.chain,transport:(0,S.http)()}),walletClient:e})}async getBalance(){return w(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return w(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};var nt=require("ethers"),g=require("viem");var _=[{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 G=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=x(e)?new nt.Contract(this.address,_,e):(0,g.getContract)({abi:_,address:this.address,publicClient:(0,g.createPublicClient)({chain:e.chain,transport:(0,g.http)()}),walletClient:e})}async transfer(){return w(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return(await t.estimateGas[this.#t.func](...this.#t.args)).toBigInt()}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=w(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(x(this.#n)){let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((n==null?void 0:n.toBigInt())||0n)}return(0,g.createPublicClient)({chain:this.#n.chain,transport:(0,g.http)()}).getGasPrice()}};function h(a,t){if(a.module==="Erc20")return new k(a,t);if(a.module==="Xtokens")return new G(a,t);throw new Error(`Contract ${a.module} not found`)}var X=require("@moonbeam-network/xcm-builder"),at=require("@moonbeam-network/xcm-utils");async function W({address:a,config:t,evmSigner:e,polkadot:n}){let r=t.balance.build({address:a,asset:n.chain.getBalanceAssetId(t.asset)});if(r.type===X.CallType.Substrate)return n.query(r);if(!e)throw new Error("Evm signer must be provided");return h(r,e).getBalance()}async function P({address:a,asset:t,config:e,evmSigner:n,polkadot:r}){let s=e.balance.build({address:a,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===X.CallType.Substrate)return r.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return h(s,n).getDecimals()}async function R(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return(0,at.toBigInt)(e,n)}return 0n}async function N({transferConfig:a,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:r,sourceAddress:s}){var H,J,U,Y;let{asset:o,destination:f,source:{chain:c,config:i}}=a,p=q.AssetAmount.fromAsset(o,{amount:0n,decimals:await P({address:t,config:i,evmSigner:n,polkadot:r})}),l=(H=i.fee)!=null&&H.asset?q.AssetAmount.fromAsset(i.fee.asset,{amount:0n,decimals:await P({address:t,asset:i.fee.asset,config:i,evmSigner:n,polkadot:r})}):p,d=(J=i.destinationFee)!=null&&J.asset?q.AssetAmount.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await P({address:t,asset:i.destinationFee.asset,config:i,evmSigner:n,polkadot:r})}):p,m=await W({address:s,config:i,evmSigner:n,polkadot:r}),u=await K({address:s,balance:m,feeConfig:i.fee,polkadot:r}),I=i.asset.isEqual(i.destinationFee.asset)?m:await K({address:s,balance:m,feeConfig:i.destinationFee,polkadot:r}),T=await R(i,r),B=(U=i.extrinsic)==null?void 0:U.build({address:t,amount:m,asset:c.getAssetId(o),destination:f.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),D=(Y=i.contract)==null?void 0:Y.build({address:t,amount:m,asset:c.getAssetId(o),destination:f.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),M=await st({balance:m,contract:D,decimals:l.decimals,evmSigner:n,extrinsic:B,polkadot:r,sourceAddress:s}),A=p.copyWith({amount:m}),{existentialDeposit:$}=r,j=l.copyWith({amount:M}),lt=l.copyWith({amount:u}),dt=d.copyWith({amount:I}),L=p.copyWith({amount:T}),gt=ct({balanceAmount:A,existentialDeposit:$,feeAmount:j,minAmount:L});return{balance:A,chain:c,destinationFeeBalance:dt,existentialDeposit:$,fee:j,feeBalance:lt,max:gt,min:L}}async function K({address:a,balance:t,feeConfig:e,polkadot:n}){return e?n.query(e.balance.build({address:a,asset:n.chain.getBalanceAssetId(e.asset)})):t}async function st({balance:a,contract:t,decimals:e,evmSigner:n,extrinsic:r,polkadot:s,sourceAddress:o}){if(t){if(!n)throw new Error("EVM Signer must be provided");return it(a,t,e,n)}if(r)return ot(a,r,s,o);throw new Error("Either contract or extrinsic must be provided")}async function it(a,t,e,n){let s=await h(t,n).getFee(a);return(0,rt.convertDecimals)(s,18,e)}async function ot(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function ct({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():(0,z.default)(0)).minus(a.isSame(e)?e.toBig():(0,z.default)(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}var E=require("@moonbeam-network/xcm-config");var v=require("@moonbeam-network/xcm-utils"),b=tt(require("big.js"),1);var de=require("@polkadot/api-augment"),y=require("@moonbeam-network/xcm-config"),mt=require("@moonbeam-network/xcm-types"),ut=require("@moonbeam-network/xcm-utils"),C=class{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new C(await(0,ut.getPolkadotApi)(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>C.create(n,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==="token"&&[y.equilibrium.key].includes(this.chain.key))return y.eq;if(e==="oring"&&this.chain.key===y.darwiniaPangoro.key)return y.paring;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return mt.AssetAmount.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var s,o,f,c,i;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((f=this.api.query.assetRegistry)==null?void 0:f.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var n;let e=this.chain.getMetadataAssetId(t);return await this.getAssetDecimalsFromQuery(e)||((n=await this.getAssetMeta(e))==null?void 0:n.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],r=e.getArgs(n);return(await n(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};var V=require("@moonbeam-network/xcm-types"),ft=require("@moonbeam-network/xcm-utils");async function pt({transferConfig:a,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:o}}=a,f=V.AssetAmount.fromAsset(r,{amount:0n,decimals:await P({address:t,config:o,evmSigner:e,polkadot:n})}),c=await W({address:t,config:o,evmSigner:e,polkadot:n}),i=await R(o,n),p=f.copyWith({amount:c}),{existentialDeposit:l}=n,d=await vt({address:t,config:a,evmSigner:e,polkadot:n}),m=f.copyWith({amount:i});return{balance:p,chain:s,existentialDeposit:l,fee:d,min:m}}async function vt({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=V.AssetAmount.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:(0,ft.toBigInt)(e,r)});let o=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await o.call()})}async function O({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:r,transferConfig:s}){let[o,f]=await C.createMulti([s.destination.chain,s.source.chain],a),c=await pt({destinationAddress:t,evmSigner:e,polkadot:o,transferConfig:s}),i=await It(f,c.fee),p=await N({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:f,sourceAddress:r,transferConfig:s});return{destination:c,getEstimate(l){let m=(0,b.default)((0,v.toBigInt)(l,p.balance.decimals).toString()).minus(p.balance.isSame(i)?i.toBig():(0,b.default)(0));return p.balance.copyWith({amount:m.lt(0)?0n:BigInt(m.toFixed())})},isSwapPossible:!0,max:p.max,min:Et(c),source:p,async swap(){return O({configService:a,destinationAddress:r,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var D,M;let d=(0,v.toBigInt)(l,p.balance.decimals),{asset:m,source:{chain:u,config:I}}=s,T=(D=I.contract)==null?void 0:D.build({address:t,amount:d,asset:u.getAssetId(m),destination:c.chain,fee:i.amount,feeAsset:u.getAssetId(i)}),B=(M=I.extrinsic)==null?void 0:M.build({address:t,amount:d,asset:u.getAssetId(m),destination:c.chain,fee:i.amount,feeAsset:u.getAssetId(i),palletInstance:u.getAssetPalletInstance(m),source:u});if(T){if(!e)throw new Error("EVM Signer must be provided");return h(T,e).transfer().then(A=>typeof A=="object"?A.hash:A)}if(B){if(!n)throw new Error("Polkadot signer must be provided");return f.transfer(r,B,n)}throw new Error("Either contract or extrinsic must be provided")}}}function Et({balance:a,existentialDeposit:t,fee:e,min:n}){let r=(0,b.default)(0).plus(a.isSame(e)?e.toBig():(0,b.default)(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():(0,b.default)(0)).plus(a.toBig().lt(n.toBig())?n.toBig():(0,b.default)(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function It(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,v.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function Tt(a){let t=(a==null?void 0:a.configService)??new E.ConfigService;return{assets(e){let{assets:n,asset:r}=(0,E.ConfigBuilder)(t).assets(e);return{assets:n,asset(s){let{sourceChains:o,source:f}=r(s);return{sourceChains:o,source(c){let{destinationChains:i,destination:p}=f(c);return{destinationChains:i,destination(l){return{async accounts(d,m,u){return O({...a,configService:t,destinationAddress:m,evmSigner:(u==null?void 0:u.evmSigner)??(u==null?void 0:u.ethersSigner),sourceAddress:d,transferConfig:p(l).build(),polkadotSigner:u==null?void 0:u.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:r,evmSigner:s,keyOrAsset:o,polkadotSigner:f,sourceAddress:c,sourceKeyOrChain:i}){return O({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:f,sourceAddress:c,transferConfig:(0,E.ConfigBuilder)(t).assets().asset(o).source(i).destination(n).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalances,getMax,getSourceData});
|
|
1
|
+
"use strict";var yt=Object.create;var M=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var wt=(a,t)=>{for(var e in t)M(a,e,{get:t[e],enumerable:!0})},tt=(a,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ct(t))!At.call(a,r)&&r!==e&&M(a,r,{get:()=>t[r],enumerable:!(n=ht(t,r))||n.enumerable});return a};var et=(a,t,e)=>(e=a!=null?yt(bt(a)):{},tt(t||!a||!a.__esModule?M(e,"default",{value:a,enumerable:!0}):e,a)),St=a=>tt(M({},"__esModule",{value:!0}),a);var Bt={};wt(Bt,{Sdk:()=>Tt,getContractFee:()=>it,getExtrinsicFee:()=>ot,getFee:()=>st,getFeeBalances:()=>N,getMax:()=>ct,getSourceData:()=>V});module.exports=St(Bt);var q=require("@moonbeam-network/xcm-types"),O=require("@moonbeam-network/xcm-utils"),K=et(require("big.js"),1);var nt=require("ethers"),S=require("viem");function x(a){return"provider"in a}function w(a){return"signer"in a}var X=[{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=x(e)?new nt.Contract(this.address,X,e):(0,S.getContract)({abi:X,address:this.address,publicClient:(0,S.createPublicClient)({chain:e.chain,transport:(0,S.http)()}),walletClient:e})}async getBalance(){return w(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return w(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};var at=require("ethers"),g=require("viem");var _=[{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 G=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=x(e)?new at.Contract(this.address,_,e):(0,g.getContract)({abi:_,address:this.address,publicClient:(0,g.createPublicClient)({chain:e.chain,transport:(0,g.http)()}),walletClient:e})}async transfer(){return w(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return(await t.estimateGas[this.#t.func](...this.#t.args)).toBigInt()}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=w(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(x(this.#n)){let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((n==null?void 0:n.toBigInt())||0n)}return(0,g.createPublicClient)({chain:this.#n.chain,transport:(0,g.http)()}).getGasPrice()}};function h(a,t){if(a.module==="Erc20")return new k(a,t);if(a.module==="Xtokens")return new G(a,t);throw new Error(`Contract ${a.module} not found`)}var z=require("@moonbeam-network/xcm-builder"),rt=require("@moonbeam-network/xcm-utils");async function W({address:a,config:t,evmSigner:e,polkadot:n}){let r=t.balance.build({address:a,asset:n.chain.getBalanceAssetId(t.asset)});if(r.type===z.CallType.Substrate)return n.query(r);if(!e)throw new Error("Evm signer must be provided");return h(r,e).getBalance()}async function P({address:a,asset:t,config:e,evmSigner:n,polkadot:r}){let s=e.balance.build({address:a,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===z.CallType.Substrate)return r.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return h(s,n).getDecimals()}async function R(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return(0,rt.toBigInt)(e,n)}return 0n}async function V({transferConfig:a,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:r,sourceAddress:s}){var J,U,Y,Z;let{asset:o,destination:m,source:{chain:c,config:i}}=a,p=q.AssetAmount.fromAsset(o,{amount:0n,decimals:await P({address:t,config:i,evmSigner:n,polkadot:r})}),l=(J=i.fee)!=null&&J.asset?q.AssetAmount.fromAsset(i.fee.asset,{amount:0n,decimals:await P({address:t,asset:i.fee.asset,config:i,evmSigner:n,polkadot:r})}):p,d=(U=i.destinationFee)!=null&&U.asset?q.AssetAmount.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await P({address:t,asset:i.destinationFee.asset,config:i,evmSigner:n,polkadot:r})}):p,u=await W({address:s,config:i,evmSigner:n,polkadot:r}),f=await N({address:s,balance:u,feeConfig:i.fee,polkadot:r}),E=i.asset.isEqual(i.destinationFee.asset)?u:await N({address:s,balance:u,feeConfig:i.destinationFee,polkadot:r}),D=await R(i,r),T=(Y=i.extrinsic)==null?void 0:Y.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),B=(Z=i.contract)==null?void 0:Z.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),F=await st({balance:u,contract:B,decimals:l.decimals,evmSigner:n,extrinsic:T,feeConfig:i.fee,polkadot:r,sourceAddress:s}),A=p.copyWith({amount:u}),{existentialDeposit:j}=r,L=l.copyWith({amount:F}),lt=l.copyWith({amount:f}),dt=d.copyWith({amount:E}),H=p.copyWith({amount:D}),gt=ct({balanceAmount:A,existentialDeposit:j,feeAmount:L,minAmount:H});return{balance:A,chain:c,destinationFeeBalance:dt,existentialDeposit:j,fee:L,feeBalance:lt,max:gt,min:H}}async function N({address:a,balance:t,feeConfig:e,polkadot:n}){return e?n.query(e.balance.build({address:a,asset:n.chain.getBalanceAssetId(e.asset)})):t}async function st({balance:a,contract:t,decimals:e,evmSigner:n,extrinsic:r,feeConfig:s,polkadot:o,sourceAddress:m}){if(t){if(!n)throw new Error("EVM Signer must be provided");return it(a,t,e,n)}if(r){let c=await ot(a,r,o,m),i=vt(e,s);return c+i}throw new Error("Either contract or extrinsic must be provided")}async function it(a,t,e,n){let s=await h(t,n).getFee(a);return(0,O.convertDecimals)(s,18,e)}async function ot(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function vt(a,t){return t!=null&&t.xcmDeliveryFeeAmount?(0,O.toBigInt)(t.xcmDeliveryFeeAmount,a):0n}function ct({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():(0,K.default)(0)).minus(a.isSame(e)?e.toBig():(0,K.default)(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}var I=require("@moonbeam-network/xcm-config");var v=require("@moonbeam-network/xcm-utils"),b=et(require("big.js"),1);var ge=require("@polkadot/api-augment"),y=require("@moonbeam-network/xcm-config"),mt=require("@moonbeam-network/xcm-types"),ut=require("@moonbeam-network/xcm-utils"),C=class{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new C(await(0,ut.getPolkadotApi)(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>C.create(n,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==="token"&&[y.equilibrium.key].includes(this.chain.key))return y.eq;if(e==="oring"&&this.chain.key===y.darwiniaPangoro.key)return y.paring;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return mt.AssetAmount.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var s,o,m,c,i;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var n;let e=this.chain.getMetadataAssetId(t);return await this.getAssetDecimalsFromQuery(e)||((n=await this.getAssetMeta(e))==null?void 0:n.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],r=e.getArgs(n);return(await n(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};var $=require("@moonbeam-network/xcm-types"),ft=require("@moonbeam-network/xcm-utils");async function pt({transferConfig:a,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:o}}=a,m=$.AssetAmount.fromAsset(r,{amount:0n,decimals:await P({address:t,config:o,evmSigner:e,polkadot:n})}),c=await W({address:t,config:o,evmSigner:e,polkadot:n}),i=await R(o,n),p=m.copyWith({amount:c}),{existentialDeposit:l}=n,d=await It({address:t,config:a,evmSigner:e,polkadot:n}),u=m.copyWith({amount:i});return{balance:p,chain:s,existentialDeposit:l,fee:d,min:u}}async function It({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=$.AssetAmount.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:(0,ft.toBigInt)(e,r)});let o=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await o.call()})}async function Q({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:r,transferConfig:s}){let[o,m]=await C.createMulti([s.destination.chain,s.source.chain],a),c=await pt({destinationAddress:t,evmSigner:e,polkadot:o,transferConfig:s}),i=await Dt(m,c.fee),p=await V({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:r,transferConfig:s});return{destination:c,getEstimate(l){let u=(0,b.default)((0,v.toBigInt)(l,p.balance.decimals).toString()).minus(p.balance.isSame(i)?i.toBig():(0,b.default)(0));return p.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:p.max,min:Et(c),source:p,async swap(){return Q({configService:a,destinationAddress:r,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var B,F;let d=(0,v.toBigInt)(l,p.balance.decimals),{asset:u,source:{chain:f,config:E}}=s,D=(B=E.contract)==null?void 0:B.build({address:t,amount:d,asset:f.getAssetId(u),destination:c.chain,fee:i.amount,feeAsset:f.getAssetId(i)}),T=(F=E.extrinsic)==null?void 0:F.build({address:t,amount:d,asset:f.getAssetId(u),destination:c.chain,fee:i.amount,feeAsset:f.getAssetId(i),palletInstance:f.getAssetPalletInstance(u),source:f});if(D){if(!e)throw new Error("EVM Signer must be provided");return h(D,e).transfer().then(A=>typeof A=="object"?A.hash:A)}if(T){if(!n)throw new Error("Polkadot signer must be provided");return m.transfer(r,T,n)}throw new Error("Either contract or extrinsic must be provided")}}}function Et({balance:a,existentialDeposit:t,fee:e,min:n}){let r=(0,b.default)(0).plus(a.isSame(e)?e.toBig():(0,b.default)(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():(0,b.default)(0)).plus(a.toBig().lt(n.toBig())?n.toBig():(0,b.default)(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function Dt(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,v.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function Tt(a){let t=(a==null?void 0:a.configService)??new I.ConfigService;return{assets(e){let{assets:n,asset:r}=(0,I.ConfigBuilder)(t).assets(e);return{assets:n,asset(s){let{sourceChains:o,source:m}=r(s);return{sourceChains:o,source(c){let{destinationChains:i,destination:p}=m(c);return{destinationChains:i,destination(l){return{async accounts(d,u,f){return Q({...a,configService:t,destinationAddress:u,evmSigner:(f==null?void 0:f.evmSigner)??(f==null?void 0:f.ethersSigner),sourceAddress:d,transferConfig:p(l).build(),polkadotSigner:f==null?void 0:f.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:r,evmSigner:s,keyOrAsset:o,polkadotSigner:m,sourceAddress:c,sourceKeyOrChain:i}){return Q({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:m,sourceAddress:c,transferConfig:(0,I.ConfigBuilder)(t).assets().asset(o).source(i).destination(n).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalances,getMax,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/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return (\n await contract.estimateGas[this.#config.func](...this.#config.args)\n ).toBigInt();\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n 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 signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\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 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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n 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, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\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): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium 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 eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n return (\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalances","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","import_viem","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Erc20ABI_default","isEthersContract","import_ethers","import_viem","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","XtokensABI_default","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","config","evmSigner","polkadot","cfg","createContract","getDecimals","asset","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","getExtrinsicFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","metaId","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","configService","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, 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, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n return extrinsicFee + xcmDeliveryFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return (\n await contract.estimateGas[this.#config.func](...this.#config.args)\n ).toBigInt();\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n 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 signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\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 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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n 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, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\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): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium 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 eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n return (\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalances","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","import_viem","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Erc20ABI_default","isEthersContract","import_ethers","import_viem","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","XtokensABI_default","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","config","evmSigner","polkadot","cfg","createContract","getDecimals","asset","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","metaId","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","configService","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/build/index.d.ts
CHANGED
|
@@ -128,6 +128,7 @@ interface GetFeeParams {
|
|
|
128
128
|
decimals: number;
|
|
129
129
|
evmSigner?: EvmSigner;
|
|
130
130
|
extrinsic?: ExtrinsicConfig;
|
|
131
|
+
feeConfig?: FeeAssetConfig;
|
|
131
132
|
polkadot: PolkadotService;
|
|
132
133
|
sourceAddress: string;
|
|
133
134
|
}
|
|
@@ -137,6 +138,7 @@ declare function getFee({
|
|
|
137
138
|
decimals,
|
|
138
139
|
evmSigner,
|
|
139
140
|
extrinsic,
|
|
141
|
+
feeConfig,
|
|
140
142
|
polkadot,
|
|
141
143
|
sourceAddress,
|
|
142
144
|
}: GetFeeParams): Promise<bigint>;
|
package/build/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{AssetAmount as G}from"@moonbeam-network/xcm-types";import{convertDecimals as ut}from"@moonbeam-network/xcm-utils";import V from"big.js";import{Contract as nt}from"ethers";import{createPublicClient as at,getContract as rt,http as st}from"viem";function w(a){return"provider"in a}function C(a){return"signer"in a}var F=[{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 I=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=w(e)?new nt(this.address,F,e):rt({abi:F,address:this.address,publicClient:at({chain:e.chain,transport:st()}),walletClient:e})}async getBalance(){return C(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return C(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};import{Contract as ot}from"ethers";import{createPublicClient as z,getContract as ct,http as K}from"viem";var k=[{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{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=w(e)?new ot(this.address,k,e):ct({abi:k,address:this.address,publicClient:z({chain:e.chain,transport:K()}),walletClient:e})}async transfer(){return C(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return(await t.estimateGas[this.#t.func](...this.#t.args)).toBigInt()}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=C(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(w(this.#n)){let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((n==null?void 0:n.toBigInt())||0n)}return z({chain:this.#n.chain,transport:K()}).getGasPrice()}};function g(a,t){if(a.module==="Erc20")return new I(a,t);if(a.module==="Xtokens")return new T(a,t);throw new Error(`Contract ${a.module} not found`)}import{CallType as N}from"@moonbeam-network/xcm-builder";import{toBigInt as mt}from"@moonbeam-network/xcm-utils";async function B({address:a,config:t,evmSigner:e,polkadot:n}){let r=t.balance.build({address:a,asset:n.chain.getBalanceAssetId(t.asset)});if(r.type===N.Substrate)return n.query(r);if(!e)throw new Error("Evm signer must be provided");return g(r,e).getBalance()}async function b({address:a,asset:t,config:e,evmSigner:n,polkadot:r}){let s=e.balance.build({address:a,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===N.Substrate)return r.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return g(s,n).getDecimals()}async function D(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return mt(e,n)}return 0n}async function j({transferConfig:a,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:r,sourceAddress:s}){var O,Q,_,X;let{asset:o,destination:f,source:{chain:c,config:i}}=a,p=G.fromAsset(o,{amount:0n,decimals:await b({address:t,config:i,evmSigner:n,polkadot:r})}),l=(O=i.fee)!=null&&O.asset?G.fromAsset(i.fee.asset,{amount:0n,decimals:await b({address:t,asset:i.fee.asset,config:i,evmSigner:n,polkadot:r})}):p,d=(Q=i.destinationFee)!=null&&Q.asset?G.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await b({address:t,asset:i.destinationFee.asset,config:i,evmSigner:n,polkadot:r})}):p,m=await B({address:s,config:i,evmSigner:n,polkadot:r}),u=await $({address:s,balance:m,feeConfig:i.fee,polkadot:r}),S=i.asset.isEqual(i.destinationFee.asset)?m:await $({address:s,balance:m,feeConfig:i.destinationFee,polkadot:r}),P=await D(i,r),x=(_=i.extrinsic)==null?void 0:_.build({address:t,amount:m,asset:c.getAssetId(o),destination:f.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),v=(X=i.contract)==null?void 0:X.build({address:t,amount:m,asset:c.getAssetId(o),destination:f.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),E=await ft({balance:m,contract:v,decimals:l.decimals,evmSigner:n,extrinsic:x,polkadot:r,sourceAddress:s}),h=p.copyWith({amount:m}),{existentialDeposit:W}=r,R=l.copyWith({amount:E}),Y=l.copyWith({amount:u}),Z=d.copyWith({amount:S}),q=p.copyWith({amount:P}),tt=dt({balanceAmount:h,existentialDeposit:W,feeAmount:R,minAmount:q});return{balance:h,chain:c,destinationFeeBalance:Z,existentialDeposit:W,fee:R,feeBalance:Y,max:tt,min:q}}async function $({address:a,balance:t,feeConfig:e,polkadot:n}){return e?n.query(e.balance.build({address:a,asset:n.chain.getBalanceAssetId(e.asset)})):t}async function ft({balance:a,contract:t,decimals:e,evmSigner:n,extrinsic:r,polkadot:s,sourceAddress:o}){if(t){if(!n)throw new Error("EVM Signer must be provided");return pt(a,t,e,n)}if(r)return lt(a,r,s,o);throw new Error("Either contract or extrinsic must be provided")}async function pt(a,t,e,n){let s=await g(t,n).getFee(a);return ut(s,18,e)}async function lt(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function dt({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():V(0)).minus(a.isSame(e)?e.toBig():V(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}import{ConfigBuilder as U,ConfigService as Et}from"@moonbeam-network/xcm-config";import{convertDecimals as Pt,toBigInt as J}from"@moonbeam-network/xcm-utils";import A from"big.js";import"@polkadot/api-augment";import{darwiniaPangoro as gt,eq as yt,equilibrium as ht,paring as Ct}from"@moonbeam-network/xcm-config";import{AssetAmount as bt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as At}from"@moonbeam-network/xcm-utils";var y=class{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new y(await At(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>y.create(n,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==="token"&&[ht.key].includes(this.chain.key))return yt;if(e==="oring"&&this.chain.key===gt.key)return Ct;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return bt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var s,o,f,c,i;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((f=this.api.query.assetRegistry)==null?void 0:f.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var n;let e=this.chain.getMetadataAssetId(t);return await this.getAssetDecimalsFromQuery(e)||((n=await this.getAssetMeta(e))==null?void 0:n.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],r=e.getArgs(n);return(await n(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as L}from"@moonbeam-network/xcm-types";import{toBigInt as wt}from"@moonbeam-network/xcm-utils";async function H({transferConfig:a,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:o}}=a,f=L.fromAsset(r,{amount:0n,decimals:await b({address:t,config:o,evmSigner:e,polkadot:n})}),c=await B({address:t,config:o,evmSigner:e,polkadot:n}),i=await D(o,n),p=f.copyWith({amount:c}),{existentialDeposit:l}=n,d=await St({address:t,config:a,evmSigner:e,polkadot:n}),m=f.copyWith({amount:i});return{balance:p,chain:s,existentialDeposit:l,fee:d,min:m}}async function St({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=L.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:wt(e,r)});let o=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await o.call()})}async function M({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:r,transferConfig:s}){let[o,f]=await y.createMulti([s.destination.chain,s.source.chain],a),c=await H({destinationAddress:t,evmSigner:e,polkadot:o,transferConfig:s}),i=await vt(f,c.fee),p=await j({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:f,sourceAddress:r,transferConfig:s});return{destination:c,getEstimate(l){let m=A(J(l,p.balance.decimals).toString()).minus(p.balance.isSame(i)?i.toBig():A(0));return p.balance.copyWith({amount:m.lt(0)?0n:BigInt(m.toFixed())})},isSwapPossible:!0,max:p.max,min:xt(c),source:p,async swap(){return M({configService:a,destinationAddress:r,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var v,E;let d=J(l,p.balance.decimals),{asset:m,source:{chain:u,config:S}}=s,P=(v=S.contract)==null?void 0:v.build({address:t,amount:d,asset:u.getAssetId(m),destination:c.chain,fee:i.amount,feeAsset:u.getAssetId(i)}),x=(E=S.extrinsic)==null?void 0:E.build({address:t,amount:d,asset:u.getAssetId(m),destination:c.chain,fee:i.amount,feeAsset:u.getAssetId(i),palletInstance:u.getAssetPalletInstance(m),source:u});if(P){if(!e)throw new Error("EVM Signer must be provided");return g(P,e).transfer().then(h=>typeof h=="object"?h.hash:h)}if(x){if(!n)throw new Error("Polkadot signer must be provided");return f.transfer(r,x,n)}throw new Error("Either contract or extrinsic must be provided")}}}function xt({balance:a,existentialDeposit:t,fee:e,min:n}){let r=A(0).plus(a.isSame(e)?e.toBig():A(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():A(0)).plus(a.toBig().lt(n.toBig())?n.toBig():A(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function vt(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:Pt(t.amount,t.decimals,e),decimals:e})}function Ve(a){let t=(a==null?void 0:a.configService)??new Et;return{assets(e){let{assets:n,asset:r}=U(t).assets(e);return{assets:n,asset(s){let{sourceChains:o,source:f}=r(s);return{sourceChains:o,source(c){let{destinationChains:i,destination:p}=f(c);return{destinationChains:i,destination(l){return{async accounts(d,m,u){return M({...a,configService:t,destinationAddress:m,evmSigner:(u==null?void 0:u.evmSigner)??(u==null?void 0:u.ethersSigner),sourceAddress:d,transferConfig:p(l).build(),polkadotSigner:u==null?void 0:u.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:r,evmSigner:s,keyOrAsset:o,polkadotSigner:f,sourceAddress:c,sourceKeyOrChain:i}){return M({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:f,sourceAddress:c,transferConfig:U(t).assets().asset(o).source(i).destination(n).build()})}}}export{Ve as Sdk,pt as getContractFee,lt as getExtrinsicFee,ft as getFee,$ as getFeeBalances,dt as getMax,j as getSourceData};
|
|
1
|
+
import{AssetAmount as G}from"@moonbeam-network/xcm-types";import{convertDecimals as ut,toBigInt as ft}from"@moonbeam-network/xcm-utils";import V from"big.js";import{Contract as nt}from"ethers";import{createPublicClient as at,getContract as rt,http as st}from"viem";function w(a){return"provider"in a}function C(a){return"signer"in a}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 E=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=w(e)?new nt(this.address,M,e):rt({abi:M,address:this.address,publicClient:at({chain:e.chain,transport:st()}),walletClient:e})}async getBalance(){return C(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return C(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};import{Contract as ot}from"ethers";import{createPublicClient as z,getContract as ct,http as K}from"viem";var k=[{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 D=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=w(e)?new ot(this.address,k,e):ct({abi:k,address:this.address,publicClient:z({chain:e.chain,transport:K()}),walletClient:e})}async transfer(){return C(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return(await t.estimateGas[this.#t.func](...this.#t.args)).toBigInt()}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=C(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(w(this.#n)){let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((n==null?void 0:n.toBigInt())||0n)}return z({chain:this.#n.chain,transport:K()}).getGasPrice()}};function g(a,t){if(a.module==="Erc20")return new E(a,t);if(a.module==="Xtokens")return new D(a,t);throw new Error(`Contract ${a.module} not found`)}import{CallType as N}from"@moonbeam-network/xcm-builder";import{toBigInt as mt}from"@moonbeam-network/xcm-utils";async function T({address:a,config:t,evmSigner:e,polkadot:n}){let r=t.balance.build({address:a,asset:n.chain.getBalanceAssetId(t.asset)});if(r.type===N.Substrate)return n.query(r);if(!e)throw new Error("Evm signer must be provided");return g(r,e).getBalance()}async function b({address:a,asset:t,config:e,evmSigner:n,polkadot:r}){let s=e.balance.build({address:a,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===N.Substrate)return r.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return g(s,n).getDecimals()}async function B(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return mt(e,n)}return 0n}async function j({transferConfig:a,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:r,sourceAddress:s}){var O,Q,X,_;let{asset:o,destination:m,source:{chain:c,config:i}}=a,p=G.fromAsset(o,{amount:0n,decimals:await b({address:t,config:i,evmSigner:n,polkadot:r})}),l=(O=i.fee)!=null&&O.asset?G.fromAsset(i.fee.asset,{amount:0n,decimals:await b({address:t,asset:i.fee.asset,config:i,evmSigner:n,polkadot:r})}):p,d=(Q=i.destinationFee)!=null&&Q.asset?G.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await b({address:t,asset:i.destinationFee.asset,config:i,evmSigner:n,polkadot:r})}):p,u=await T({address:s,config:i,evmSigner:n,polkadot:r}),f=await $({address:s,balance:u,feeConfig:i.fee,polkadot:r}),S=i.asset.isEqual(i.destinationFee.asset)?u:await $({address:s,balance:u,feeConfig:i.destinationFee,polkadot:r}),P=await B(i,r),x=(X=i.extrinsic)==null?void 0:X.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e),palletInstance:c.getAssetPalletInstance(o),source:c}),v=(_=i.contract)==null?void 0:_.build({address:t,amount:u,asset:c.getAssetId(o),destination:m.chain,fee:e.amount,feeAsset:c.getAssetId(e)}),I=await pt({balance:u,contract:v,decimals:l.decimals,evmSigner:n,extrinsic:x,feeConfig:i.fee,polkadot:r,sourceAddress:s}),h=p.copyWith({amount:u}),{existentialDeposit:W}=r,R=l.copyWith({amount:I}),Y=l.copyWith({amount:f}),Z=d.copyWith({amount:S}),q=p.copyWith({amount:P}),tt=yt({balanceAmount:h,existentialDeposit:W,feeAmount:R,minAmount:q});return{balance:h,chain:c,destinationFeeBalance:Z,existentialDeposit:W,fee:R,feeBalance:Y,max:tt,min:q}}async function $({address:a,balance:t,feeConfig:e,polkadot:n}){return e?n.query(e.balance.build({address:a,asset:n.chain.getBalanceAssetId(e.asset)})):t}async function pt({balance:a,contract:t,decimals:e,evmSigner:n,extrinsic:r,feeConfig:s,polkadot:o,sourceAddress:m}){if(t){if(!n)throw new Error("EVM Signer must be provided");return lt(a,t,e,n)}if(r){let c=await dt(a,r,o,m),i=gt(e,s);return c+i}throw new Error("Either contract or extrinsic must be provided")}async function lt(a,t,e,n){let s=await g(t,n).getFee(a);return ut(s,18,e)}async function dt(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function gt(a,t){return t!=null&&t.xcmDeliveryFeeAmount?ft(t.xcmDeliveryFeeAmount,a):0n}function yt({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():V(0)).minus(a.isSame(e)?e.toBig():V(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}import{ConfigBuilder as U,ConfigService as Dt}from"@moonbeam-network/xcm-config";import{convertDecimals as vt,toBigInt as J}from"@moonbeam-network/xcm-utils";import A from"big.js";import"@polkadot/api-augment";import{darwiniaPangoro as ht,eq as Ct,equilibrium as bt,paring as At}from"@moonbeam-network/xcm-config";import{AssetAmount as wt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as St}from"@moonbeam-network/xcm-utils";var y=class{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new y(await St(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>y.create(n,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==="token"&&[bt.key].includes(this.chain.key))return Ct;if(e==="oring"&&this.chain.key===ht.key)return At;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return wt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var s,o,m,c,i;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((i=this.api.query.assetRegistry)==null?void 0:i.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var n;let e=this.chain.getMetadataAssetId(t);return await this.getAssetDecimalsFromQuery(e)||((n=await this.getAssetMeta(e))==null?void 0:n.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],r=e.getArgs(n);return(await n(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as L}from"@moonbeam-network/xcm-types";import{toBigInt as Pt}from"@moonbeam-network/xcm-utils";async function H({transferConfig:a,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:o}}=a,m=L.fromAsset(r,{amount:0n,decimals:await b({address:t,config:o,evmSigner:e,polkadot:n})}),c=await T({address:t,config:o,evmSigner:e,polkadot:n}),i=await B(o,n),p=m.copyWith({amount:c}),{existentialDeposit:l}=n,d=await xt({address:t,config:a,evmSigner:e,polkadot:n}),u=m.copyWith({amount:i});return{balance:p,chain:s,existentialDeposit:l,fee:d,min:u}}async function xt({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=L.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:Pt(e,r)});let o=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await o.call()})}async function F({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:r,transferConfig:s}){let[o,m]=await y.createMulti([s.destination.chain,s.source.chain],a),c=await H({destinationAddress:t,evmSigner:e,polkadot:o,transferConfig:s}),i=await Et(m,c.fee),p=await j({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:r,transferConfig:s});return{destination:c,getEstimate(l){let u=A(J(l,p.balance.decimals).toString()).minus(p.balance.isSame(i)?i.toBig():A(0));return p.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:p.max,min:It(c),source:p,async swap(){return F({configService:a,destinationAddress:r,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var v,I;let d=J(l,p.balance.decimals),{asset:u,source:{chain:f,config:S}}=s,P=(v=S.contract)==null?void 0:v.build({address:t,amount:d,asset:f.getAssetId(u),destination:c.chain,fee:i.amount,feeAsset:f.getAssetId(i)}),x=(I=S.extrinsic)==null?void 0:I.build({address:t,amount:d,asset:f.getAssetId(u),destination:c.chain,fee:i.amount,feeAsset:f.getAssetId(i),palletInstance:f.getAssetPalletInstance(u),source:f});if(P){if(!e)throw new Error("EVM Signer must be provided");return g(P,e).transfer().then(h=>typeof h=="object"?h.hash:h)}if(x){if(!n)throw new Error("Polkadot signer must be provided");return m.transfer(r,x,n)}throw new Error("Either contract or extrinsic must be provided")}}}function It({balance:a,existentialDeposit:t,fee:e,min:n}){let r=A(0).plus(a.isSame(e)?e.toBig():A(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():A(0)).plus(a.toBig().lt(n.toBig())?n.toBig():A(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function Et(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:vt(t.amount,t.decimals,e),decimals:e})}function je(a){let t=(a==null?void 0:a.configService)??new Dt;return{assets(e){let{assets:n,asset:r}=U(t).assets(e);return{assets:n,asset(s){let{sourceChains:o,source:m}=r(s);return{sourceChains:o,source(c){let{destinationChains:i,destination:p}=m(c);return{destinationChains:i,destination(l){return{async accounts(d,u,f){return F({...a,configService:t,destinationAddress:u,evmSigner:(f==null?void 0:f.evmSigner)??(f==null?void 0:f.ethersSigner),sourceAddress:d,transferConfig:p(l).build(),polkadotSigner:f==null?void 0:f.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:r,evmSigner:s,keyOrAsset:o,polkadotSigner:m,sourceAddress:c,sourceKeyOrChain:i}){return F({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:m,sourceAddress:c,transferConfig:U(t).assets().asset(o).source(i).destination(n).build()})}}}export{je as Sdk,lt as getContractFee,dt as getExtrinsicFee,pt as getFee,$ as getFeeBalances,yt as getMax,j 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/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return (\n await contract.estimateGas[this.#config.func](...this.#config.args)\n ).toBigInt();\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n 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 signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\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 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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n 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, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\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): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium 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 eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n return (\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"AAOA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,mBAAAC,OAAuB,8BAChC,OAAOC,MAAS,SCRhB,OAAS,YAAAC,OAAgB,SACzB,OAIE,sBAAAC,GACA,eAAAC,GACA,QAAAC,OACK,OCLA,SAASC,EAAeC,EAA2C,CACxE,MAAO,aAAcA,CACvB,CAMO,SAASC,EACdC,EACsB,CACtB,MAAO,WAAYA,CACrB,CChBA,IAAAC,EAAA,CACE,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,OACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,WACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,UACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,cACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,QACR,KAAQ,SACV,EACA,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,eACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,OACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,UACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CAAC,EACX,KAAQ,SACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,QACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,MACR,KAAQ,SACV,EACA,CACE,KAAQ,SACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,MACV,CACF,EACA,QAAW,GACX,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,SAAY,GACZ,OAAU,CACR,CACE,KAAQ,SACR,KAAQ,SACV,EACA,CACE,KAAQ,WACR,KAAQ,SACV,CACF,EACA,KAAQ,YACR,QAAW,CACT,CACE,KAAQ,GACR,KAAQ,SACV,CACF,EACA,QAAW,GACX,gBAAmB,OACnB,KAAQ,UACV,EACA,CACE,QAAW,GACX,gBAAmB,UACnB,KAAQ,UACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,UACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,EACA,CACE,UAAa,GACb,OAAU,CACR,CACE,QAAW,GACX,KAAQ,OACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,KACR,KAAQ,SACV,EACA,CACE,QAAW,GACX,KAAQ,QACR,KAAQ,SACV,CACF,EACA,KAAQ,WACR,KAAQ,OACV,CACF,EFxMO,IAAMC,EAAN,KAAgD,CAC5C,QAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAmB,CACrD,GAAI,CAACD,EAAO,QACV,MAAM,IAAI,MAAM,8BAA8B,EAGhD,KAAK,QAAUA,EAAO,QACtB,KAAKF,GAAUE,EACf,KAAKD,GAAYG,EAAeD,CAAM,EAClC,IAAIE,GAAS,KAAK,QAASC,EAAKH,CAAM,EACtCI,GAAY,CACV,IAAAD,EACA,QAAS,KAAK,QACd,aAAcE,GAAmB,CAC/B,MAAOL,EAAO,MACd,UAAWM,GAAK,CAClB,CAAC,EACD,aAAcN,CAChB,CAAC,CACP,CAEA,MAAM,YAA8B,CAClC,OAAIO,EAAiB,KAAKT,EAAS,GACjB,MAAM,KAAKA,GAAU,UAAU,GAAG,KAAKD,GAAQ,IAAI,GACpD,SAAS,EAEnB,KAAKC,GAAU,KAAK,UACzB,KAAKD,GAAQ,IACf,CACF,CAEA,MAAM,aAA+B,CAKnC,OAJiBU,EAAiB,KAAKT,EAAS,EAC5C,MAAM,KAAKA,GAAU,SAAS,EAC9B,KAAKA,GAAU,KAAK,SAAS,CAGnC,CACF,EG/DA,OAAS,YAAAU,OAAgB,SACzB,OAKE,sBAAAC,EACA,eAAAC,GACA,QAAAC,MACK,OCXP,IAAAC,EAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,WAAc,CACZ,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,aAAgB,4BAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,UACR,KAAQ,QACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,CACF,EDtEO,IAAMC,EAAN,KAAmD,CAC/C,QAAU,6CAEVC,GAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAmB,CACrD,KAAKJ,GAAUG,EAEf,KAAKD,GAAUE,EAEf,KAAKH,GAAYI,EAAeD,CAAM,EAClC,IAAIE,GAAS,KAAK,QAASC,EAAKH,CAAM,EACtCI,GAAY,CACV,IAAAD,EACA,QAAS,KAAK,QACd,aAAcE,EAAmB,CAC/B,MAAOL,EAAO,MACd,UAAWM,EAAK,CAClB,CAAC,EACD,aAAcN,CAChB,CAAC,CACP,CAEA,MAAM,UAAmE,CACvE,OAAIO,EAAiB,KAAKV,EAAS,EAC1B,KAAKA,GAAU,KAAKD,GAAQ,IAAI,EAAE,GAAG,KAAKA,GAAQ,IAAI,EAGxD,KAAKC,GAAU,MAAM,KAAKD,GAAQ,IAAI,EAAE,KAAKA,GAAQ,IAAI,CAClE,CAEA,MAAM,8BAA8BY,EAAqC,CACvE,OACE,MAAMA,EAAS,YAAY,KAAKZ,GAAQ,IAAI,EAAE,GAAG,KAAKA,GAAQ,IAAI,GAClE,SAAS,CACb,CAEA,MAAM,4BACJY,EACiB,CACjB,OAAKA,EAIEA,EAAS,YAAY,KAAKZ,GAAQ,IAAI,EAAE,KAAKA,GAAQ,IAAW,EAH9D,EAIX,CAEA,MAAM,OAAOa,EAAiC,CAC5C,GAAIA,IAAW,GACb,OAAO,GAOT,GAAI,CACF,IAAMC,EAAeH,EAAiB,KAAKV,EAAS,EAChD,MAAM,KAAK,8BAA8B,KAAKA,EAAS,EACvD,MAAM,KAAK,4BAA4B,KAAKA,EAAS,EACnDc,EAAW,MAAM,KAAK,YAAY,EACxC,OAAOD,EAAeC,CACxB,OAASC,EAAP,CAEA,cAAQ,MAAMA,CAAK,EAEb,IAAI,MACR,0DACF,CACF,CACF,CAEA,MAAc,aAAc,CAC1B,GAAIX,EAAe,KAAKH,EAAO,EAAG,CAChC,GAAM,CAAE,SAAAa,EAAU,qBAAAE,CAAqB,EACrC,MAAM,KAAKf,GAAQ,WAAW,EAEhC,QACGa,GAAA,YAAAA,EAAU,aAAc,MAAOE,GAAA,YAAAA,EAAsB,aAAc,IASxE,OALqBR,EAAmB,CACtC,MAAO,KAAKP,GAAQ,MACpB,UAAWQ,EAAK,CAClB,CAAC,EAEmB,YAAY,CAClC,CACF,EE5GO,SAASQ,EACdC,EACAC,EACsD,CACtD,GAAID,EAAO,SAAW,QACpB,OAAO,IAAIE,EAAMF,EAAQC,CAAM,EAGjC,GAAID,EAAO,SAAW,UACpB,OAAO,IAAIG,EAAQH,EAAQC,CAAM,EAGnC,MAAM,IAAI,MAAM,YAAYD,EAAO,kBAAkB,CACvD,CCrBA,OAAS,YAAAI,MAAsC,gCAG/C,OAAS,YAAAC,OAAgB,8BAazB,eAAsBC,EAAW,CAC/B,QAAAC,EACA,OAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,IAAMC,EAAMH,EAAO,QAAQ,MAAM,CAC/B,QAAAD,EACA,MAAOG,EAAS,MAAM,kBAAkBF,EAAO,KAAK,CACtD,CAAC,EAED,GAAIG,EAAI,OAASC,EAAS,UACxB,OAAOF,EAAS,MAAMC,CAA2B,EAGnD,GAAI,CAACF,EACH,MAAM,IAAI,MAAM,6BAA6B,EAK/C,OAFiBI,EAAeF,EAAKF,CAAS,EAE9B,WAAW,CAC7B,CAEA,eAAsBK,EAAY,CAChC,QAAAP,EACA,MAAAQ,EACA,OAAAP,EACA,UAAAC,EACA,SAAAC,CACF,EAAyB,CACvB,IAAMC,EAAMH,EAAO,QAAQ,MAAM,CAC/B,QAAAD,EACA,MAAOG,EAAS,MAAM,kBAAkBK,GAASP,EAAO,KAAK,CAC/D,CAAC,EAED,GAAIG,EAAI,OAASC,EAAS,UACxB,OAAOF,EAAS,iBAAiBK,GAASP,EAAO,KAAK,EAGxD,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,6BAA6B,EAK/C,OAFiBI,EAAeF,EAAKF,CAAS,EAE9B,YAAY,CAC9B,CAEA,eAAsBO,EAAOR,EAAqBE,EAA2B,CAC3E,GAAIF,EAAO,IACT,OAAOE,EAAS,MACdF,EAAO,IAAI,MAAM,CAAE,MAAOE,EAAS,MAAM,cAAcF,EAAO,KAAK,CAAE,CAAC,CACxE,EAGF,IAAMS,EAAMP,EAAS,MAAM,YAAYF,EAAO,KAAK,EAEnD,GAAIS,EAAK,CACP,IAAMC,EAAW,MAAMR,EAAS,iBAAiBF,EAAO,KAAK,EAE7D,OAAOW,GAASF,EAAKC,CAAQ,EAG/B,OAAO,EACT,CPzDA,eAAsBE,EAAc,CAClC,eAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,UAAAC,EACA,SAAAC,EACA,cAAAC,CACF,EAA0D,CA/B1D,IAAAC,EAAAC,EAAAC,EAAAC,EAgCE,GAAM,CACJ,MAAAC,EACA,YAAAC,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIb,EACEc,EAAaC,EAAY,UAAUL,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMM,EAAY,CAC1B,QAASf,EACT,OAAAY,EACA,UAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACKa,GAAgBX,EAAAO,EAAO,MAAP,MAAAP,EAAY,MAC9BS,EAAY,UAAUF,EAAO,IAAI,MAAO,CACtC,OAAQ,GACR,SAAU,MAAMG,EAAY,CAC1B,QAASf,EACT,MAAOY,EAAO,IAAI,MAClB,OAAAA,EACA,UAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACDU,EACEI,GAA2BX,EAAAM,EAAO,iBAAP,MAAAN,EAAuB,MACpDQ,EAAY,UAAUF,EAAO,eAAe,MAAO,CACjD,OAAQ,GACR,SAAU,MAAMG,EAAY,CAC1B,QAASf,EACT,MAAOY,EAAO,eAAe,MAC7B,OAAAA,EACA,UAAAV,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EACDU,EAEEK,EAAU,MAAMC,EAAW,CAC/B,QAASf,EACT,OAAAQ,EACA,UAAAV,EACA,SAAAC,CACF,CAAC,EAEKiB,EAAa,MAAMC,EAAe,CACtC,QAASjB,EACT,QAAAc,EACA,UAAWN,EAAO,IAClB,SAAAT,CACF,CAAC,EAEKmB,EAAwBV,EAAO,MAAM,QACzCA,EAAO,eAAe,KACxB,EACIM,EACA,MAAMG,EAAe,CACnB,QAASjB,EACT,QAAAc,EACA,UAAWN,EAAO,eAClB,SAAAT,CACF,CAAC,EAECoB,EAAM,MAAMC,EAAOZ,EAAQT,CAAQ,EAEnCsB,GAAYlB,EAAAK,EAAO,YAAP,YAAAL,EAAkB,MAAM,CACxC,QAASP,EACT,OAAQkB,EACR,MAAOP,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKT,EAAe,OACpB,SAAUU,EAAM,WAAWV,CAAc,EACzC,eAAgBU,EAAM,uBAAuBF,CAAK,EAClD,OAAQE,CACV,GAEMe,GAAWlB,EAAAI,EAAO,WAAP,YAAAJ,EAAiB,MAAM,CACtC,QAASR,EACT,OAAQkB,EACR,MAAOP,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKT,EAAe,OACpB,SAAUU,EAAM,WAAWV,CAAc,CAC3C,GACM0B,EAAM,MAAMC,GAAO,CACvB,QAAAV,EACA,SAAAQ,EACA,SAAUV,EAAc,SACxB,UAAAd,EACA,UAAAuB,EACA,SAAAtB,EACA,cAAAC,CACF,CAAC,EAEKyB,EAAgBhB,EAAW,SAAS,CAAE,OAAQK,CAAQ,CAAC,EACvD,CAAE,mBAAAY,CAAmB,EAAI3B,EACzB4B,EAAYf,EAAc,SAAS,CAAE,OAAQW,CAAI,CAAC,EAClDK,EAAmBhB,EAAc,SAAS,CAAE,OAAQI,CAAW,CAAC,EAChEa,EAA8BhB,EAAyB,SAAS,CACpE,OAAQK,CACV,CAAC,EACKY,EAAYrB,EAAW,SAAS,CAAE,OAAQU,CAAI,CAAC,EAC/CY,GAAYC,GAAO,CACvB,cAAAP,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAG,CACF,CAAC,EAED,MAAO,CACL,QAASL,EACT,MAAAlB,EACA,sBAAuBsB,EACvB,mBAAAH,EACA,IAAKC,EACL,WAAYC,EACZ,IAAKG,GACL,IAAKD,CACP,CACF,CASA,eAAsBb,EAAe,CACnC,QAAAgB,EACA,QAAAnB,EACA,UAAAoB,EACA,SAAAnC,CACF,EAAsB,CACpB,OAAOmC,EACHnC,EAAS,MACPmC,EAAU,QAAQ,MAAM,CACtB,QAAAD,EACA,MAAOlC,EAAS,MAAM,kBAAkBmC,EAAU,KAAK,CACzD,CAAC,CACH,EACApB,CACN,CAYA,eAAsBU,GAAO,CAC3B,QAAAV,EACA,SAAAQ,EACA,SAAAa,EACA,UAAArC,EACA,UAAAuB,EACA,SAAAtB,EACA,cAAAC,CACF,EAAkC,CAChC,GAAIsB,EAAU,CACZ,GAAI,CAACxB,EACH,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OAAOsC,GAAetB,EAASQ,EAAUa,EAAUrC,CAAS,EAG9D,GAAIuB,EACF,OAAOgB,GAAgBvB,EAASO,EAAWtB,EAAUC,CAAa,EAGpE,MAAM,IAAI,MAAM,+CAA+C,CACjE,CAEA,eAAsBoC,GACpBtB,EACAN,EACA2B,EACArC,EACiB,CAKjB,IAAMyB,EAAM,MAJKe,EACf9B,EACAV,CACF,EAC2B,OAAOgB,CAAO,EAEzC,OAAOyB,GAAgBhB,EAAK,GAAIY,CAAQ,CAC1C,CAEA,eAAsBE,GACpBvB,EACAO,EACAtB,EACAC,EACiB,CAMjB,GAAI,CACF,OAAO,MAAMD,EAAS,OAAOC,EAAeqB,CAAS,CACvD,OAASmB,EAAP,CACA,GAAI1B,EACF,MAAM0B,EAGR,OAAO,EACT,CACF,CASO,SAASR,GAAO,CACrB,cAAAP,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAG,CACF,EAA8B,CAC5B,IAAMW,EAAShB,EACZ,MAAM,EACN,MAAMK,EAAU,MAAM,CAAC,EACvB,MACCL,EAAc,OAAOC,CAAkB,EACnCA,EAAmB,MAAM,EACzBgB,EAAI,CAAC,CACX,EACC,MAAMjB,EAAc,OAAOE,CAAS,EAAIA,EAAU,MAAM,EAAIe,EAAI,CAAC,CAAC,EAErE,OAAOjB,EAAc,SAAS,CAC5B,OAAQgB,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,CQjRA,OACE,iBAAAE,EACA,iBAAAC,OAEK,+BCDP,OAAS,mBAAAC,GAAiB,YAAAC,MAAgB,8BAC1C,OAAOC,MAAS,SCLhB,MAAO,wBAMP,OAEE,mBAAAC,GACA,MAAAC,GACA,eAAAC,GACA,UAAAC,OACK,+BACP,OAGE,eAAAC,OAEK,8BACP,OAAS,kBAAAC,OAAsB,8BAOxB,IAAMC,EAAN,KAAsB,CAClB,IAEA,MAEA,cAET,YACEC,EACAC,EACAC,EACA,CACA,KAAK,IAAMF,EACX,KAAK,MAAQC,EACb,KAAK,cAAgBC,CACvB,CAEA,aAAa,OACXD,EACAC,EAC0B,CAC1B,OAAO,IAAIH,EACT,MAAMD,GAAeG,EAAM,EAAE,EAC7BA,EACAC,CACF,CACF,CAEA,aAAa,YACXC,EACAD,EAC4B,CAC5B,OAAO,QAAQ,IACbC,EAAO,IAAKF,GACVF,EAAgB,OAAOE,EAAOC,CAAa,CAC7C,CACF,CACF,CAEA,IAAI,UAAmB,CACrB,OAAO,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC,GAAK,EAClD,CAEA,IAAI,OAAe,CACjB,IAAME,EAAS,KAAK,IAAI,SAAS,YAAY,GAAG,CAAC,EAC3CC,EAAMD,GAAA,YAAAA,EAAQ,WAAW,cAI/B,GAAIC,IAAQ,SAAW,CAACV,GAAY,GAAG,EAAE,SAAS,KAAK,MAAM,GAAG,EAC9D,OAAOD,GAIT,GAAIW,IAAQ,SAAW,KAAK,MAAM,MAAQZ,GAAgB,IACxD,OAAOG,GAGT,GAAI,CAACS,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMC,EAAQ,KAAK,cAAc,SAASD,CAAG,EAE7C,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2BD,kBAAoBD,IAAS,EAG1E,OAAOE,CACT,CAEA,IAAI,oBAAkC,CAjGxC,IAAAC,EAAAC,EAkGI,IAAMC,GAAqBF,EAAA,KAAK,IAAI,OAAO,WAAhB,YAAAA,EAA0B,mBAC/CG,GAAuBF,EAAA,KAAK,IAAI,OAAO,aAAhB,YAAAA,EACzB,mBACEG,GACJF,GAAA,YAAAA,EAAoB,cAAcC,GAAA,YAAAA,EAAsB,aAAc,GAExE,OAAOb,GAAY,UAAU,KAAK,MAAO,CACvC,OAAAc,EACA,SAAU,KAAK,QACjB,CAAC,CACH,CAEA,MAAM,aACJL,EAC2D,CAhH/D,IAAAC,EAAAC,EAAAI,EAAAC,EAAAC,EAiHI,IAAMC,IACJR,EAAA,KAAK,IAAI,MAAM,SAAf,YAAAA,EAAuB,aACvBC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,aAC9BI,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,sBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,mBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,kBAEhC,GAAI,CAACC,EACH,OAGF,IAAMC,EAAQ,MAAMD,EAAGT,CAAK,EACtBW,EAAY,oBAAqBD,EAAOA,EAAK,gBAAgB,EAAIA,EAEvE,MAAO,CACL,SAAUC,EAAU,SAAS,SAAS,EACtC,OAAQA,EAAU,OAAO,SAAS,CACpC,CACF,CAEA,MAAM,0BACJX,EAC6B,CAvIjC,IAAAC,EAwII,IAAMQ,GAAKR,EAAA,KAAK,IAAI,MAAM,iBAAf,YAAAA,EAA+B,cAE1C,OAAKQ,GAIS,MAAMA,EAAGT,CAAK,GAEhB,gBAAgB,EAAE,SAAS,EALrC,MAMJ,CAEA,MAAM,iBAAiBA,EAA+B,CAnJxD,IAAAC,EAoJI,IAAMW,EAAS,KAAK,MAAM,mBAAmBZ,CAAK,EAClD,OACG,MAAM,KAAK,0BAA0BY,CAAM,KAC3CX,EAAA,MAAM,KAAK,aAAaW,CAAM,IAA9B,YAAAX,EAAkC,WACnC,KAAK,MAAM,iBAAiBD,CAAK,GACjC,KAAK,QAET,CAEA,MAAM,MAAMa,EAA+C,CACzD,IAAMC,EAAW,MAAM,KAAK,IAAI,MAAMD,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC9D,GAAGA,EAAO,IACZ,EAEA,OAAOA,EAAO,UAAUC,CAAQ,CAClC,CAEA,MAAM,OAAOC,EAAiBF,EAA0C,CACtE,IAAMJ,EAAK,KAAK,IAAI,GAAGI,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQJ,CAAE,EAK9B,OAFa,MADKA,EAAG,GAAGO,CAAI,EACC,YAAYD,EAAS,CAAE,MAAO,EAAG,CAAC,GAEnD,WAAW,SAAS,CAClC,CAEA,MAAM,SACJA,EACAF,EACAI,EACiB,CACjB,IAAMR,EAAK,KAAK,IAAI,GAAGI,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQJ,CAAE,EAW9B,OARa,MADKA,EAAG,GAAGO,CAAI,EACC,YAC3B,KAAKE,GAAUD,CAAM,EAAIF,EAAUE,EACnC,CACE,MAAO,GACP,OAAQ,KAAKC,GAAUD,CAAM,EAAIA,EAAS,MAC5C,CACF,GAEY,SAAS,CACvB,CAGAC,GAAUD,EAAiE,CACzE,MAAO,gBAAiBA,CAC1B,CACF,ECpMA,OAAS,eAAAE,MAAmB,8BAC5B,OAAS,YAAAC,OAAgB,8BAYzB,eAAsBC,EAAmB,CACvC,eAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAAoE,CAClE,GAAM,CACJ,MAAAC,EACA,YAAa,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC/B,EAAIN,EAEEO,EAAaC,EAAY,UAAUJ,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMK,EAAY,CAC1B,QAASR,EACT,OAAAK,EACA,UAAAJ,EACA,SAAAC,CACF,CAAC,CACH,CAAC,EAEKO,EAAU,MAAMC,EAAW,CAC/B,QAASV,EACT,OAAAK,EACA,UAAAJ,EACA,SAAAC,CACF,CAAC,EACKS,EAAM,MAAMC,EAAOP,EAAQH,CAAQ,EAEnCW,EAAgBP,EAAW,SAAS,CAAE,OAAQG,CAAQ,CAAC,EACvD,CAAE,mBAAAK,CAAmB,EAAIZ,EAEzBa,EAAY,MAAMC,GAAO,CAC7B,QAAShB,EACT,OAAQD,EACR,UAAAE,EACA,SAAAC,CACF,CAAC,EACKe,EAAYX,EAAW,SAAS,CAAE,OAAQK,CAAI,CAAC,EAErD,MAAO,CACL,QAASE,EACT,MAAAT,EACA,mBAAAU,EACA,IAAKC,EACL,IAAKE,CACP,CACF,CASA,eAAsBD,GAAO,CAC3B,OAAAX,EACA,SAAAH,CACF,EAAuC,CACrC,GAAM,CAAE,OAAAgB,EAAQ,MAAAf,CAAM,EAAIE,EAAO,OAAO,OAAO,eAEzCc,EAAW,MAAMjB,EAAS,iBAAiBC,CAAK,EAChDG,EAAaC,EAAY,UAAUJ,EAAO,CAC9C,OAAQ,GACR,SAAAgB,CACF,CAAC,EAED,GAAI,OAAO,SAASD,CAAM,EACxB,OAAOZ,EAAW,SAAS,CACzB,OAAQc,GAASF,EAAkBC,CAAQ,CAC7C,CAAC,EAGH,IAAME,EAAOH,EAA4B,MAAM,CAC7C,IAAKhB,EAAS,IACd,MAAOA,EAAS,MAAM,WAAWC,CAAK,CACxC,CAAC,EAED,OAAOG,EAAW,SAAS,CACzB,OAAQ,MAAMe,EAAI,KAAK,CACzB,CAAC,CACH,CF3EA,eAAsBC,EAAgB,CACpC,cAAAC,EACA,mBAAAC,EACA,UAAAC,EACA,eAAAC,EACA,cAAAC,EACA,eAAAC,CACF,EAAiD,CAC/C,GAAM,CAACC,EAAcC,CAAW,EAAI,MAAMC,EAAgB,YACxD,CAACH,EAAe,YAAY,MAAOA,EAAe,OAAO,KAAK,EAC9DL,CACF,EAEMS,EAAc,MAAMC,EAAmB,CAC3C,mBAAAT,EACA,UAAAC,EACA,SAAUI,EACV,eAAAD,CACF,CAAC,EAEKM,EAAiB,MAAMC,GAC3BL,EACAE,EAAY,GACd,EAEMI,EAAS,MAAMC,EAAc,CACjC,mBAAAb,EACA,eAAAU,EACA,UAAAT,EACA,SAAUK,EACV,cAAAH,EACA,eAAAC,CACF,CAAC,EAED,MAAO,CACL,YAAAI,EACA,YAAYM,EAAyB,CAInC,IAAMC,EAHYC,EAChBC,EAASH,EAAQF,EAAO,QAAQ,QAAQ,EAAE,SAAS,CACrD,EACyB,MACvBA,EAAO,QAAQ,OAAOF,CAAc,EAAIA,EAAe,MAAM,EAAIM,EAAI,CAAC,CACxE,EAEA,OAAOJ,EAAO,QAAQ,SAAS,CAC7B,OAAQG,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,EAMA,eAAgB,GAChB,IAAKH,EAAO,IACZ,IAAKM,GAAOV,CAAW,EACvB,OAAAI,EACA,MAAM,MAAO,CACX,OAAOd,EAAgB,CACrB,cAAAC,EACA,mBAAoBI,EACpB,UAAAF,EACA,eAAAC,EACA,cAAeF,EACf,eAAgB,CACd,GAAGI,EACH,YAAaA,EAAe,OAC5B,OAAQA,EAAe,WACzB,CACF,CAAC,CACH,EACA,MAAM,SAASU,EAAyB,CA9F5C,IAAAK,EAAAC,EA+FM,IAAMC,EAAeJ,EAASH,EAAQF,EAAO,QAAQ,QAAQ,EACvD,CACJ,MAAAU,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIpB,EAEEqB,GAAWN,EAAAK,EAAO,WAAP,YAAAL,EAAiB,MAAM,CACtC,QAASnB,EACT,OAAQqB,EACR,MAAOE,EAAM,WAAWD,CAAK,EAC7B,YAAad,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUa,EAAM,WAAWb,CAAc,CAC3C,GACMgB,GAAYN,EAAAI,EAAO,YAAP,YAAAJ,EAAkB,MAAM,CACxC,QAASpB,EACT,OAAQqB,EACR,MAAOE,EAAM,WAAWD,CAAK,EAC7B,YAAad,EAAY,MACzB,IAAKE,EAAe,OACpB,SAAUa,EAAM,WAAWb,CAAc,EACzC,eAAgBa,EAAM,uBAAuBD,CAAK,EAClD,OAAQC,CACV,GAEA,GAAIE,EAAU,CACZ,GAAI,CAACxB,EACH,MAAM,IAAI,MAAM,6BAA6B,EAG/C,OACE0B,EAAeF,EAAUxB,CAAS,EAEjC,SAAS,EACT,KAAM2B,GACL,OAAOA,GAAO,SAAYA,EAA2B,KAAOA,CAC9D,EAGJ,GAAIF,EAAW,CACb,GAAI,CAACxB,EACH,MAAM,IAAI,MAAM,kCAAkC,EAGpD,OAAOI,EAAY,SAASH,EAAeuB,EAAWxB,CAAc,EAGtE,MAAM,IAAI,MAAM,+CAA+C,CACjE,CACF,CACF,CAEA,SAASgB,GAAO,CACd,QAAAW,EACA,mBAAAC,EACA,IAAAC,EACA,IAAAC,CACF,EAAiC,CAC/B,IAAMjB,EAASC,EAAI,CAAC,EACjB,KAAKa,EAAQ,OAAOE,CAAG,EAAIA,EAAI,MAAM,EAAIf,EAAI,CAAC,CAAC,EAC/C,KACCa,EAAQ,OAAOC,CAAkB,GAC/BD,EAAQ,MAAM,EAAE,GAAGC,EAAmB,MAAM,CAAC,EAC3CA,EAAmB,MAAM,EACzBd,EAAI,CAAC,CACX,EACC,KAAKa,EAAQ,MAAM,EAAE,GAAGG,EAAI,MAAM,CAAC,EAAIA,EAAI,MAAM,EAAIhB,EAAI,CAAC,CAAC,EAE9D,OAAOa,EAAQ,SAAS,CACtB,OAAQ,OAAOd,EAAO,QAAQ,CAAC,CACjC,CAAC,CACH,CAEA,eAAsBJ,GACpBsB,EACAvB,EACsB,CACtB,IAAMwB,EAAyB,MAAMD,EAAe,iBAClDvB,CACF,EAaA,OAXEA,EAAe,WAAawB,EACxBxB,EACAA,EAAe,SAAS,CACtB,OAAQyB,GACNzB,EAAe,OACfA,EAAe,SACfwB,CACF,EACA,SAAUA,CACZ,CAAC,CAGT,CD9KO,SAASE,GAAIC,EAAsB,CACxC,IAAMC,GAAgBD,GAAA,YAAAA,EAAS,gBAAiB,IAAIE,GAEpD,MAAO,CACL,OAAOC,EAAuB,CAC5B,GAAM,CAAE,OAAAC,EAAQ,MAAAC,CAAM,EAAIC,EAAcL,CAAa,EAAE,OAAOE,CAAS,EAEvE,MAAO,CACL,OAAAC,EACA,MAAMG,EAA4B,CAChC,GAAM,CAAE,aAAAC,EAAc,OAAAC,CAAO,EAAIJ,EAAME,CAAU,EAEjD,MAAO,CACL,aAAAC,EACA,OAAOE,EAA+B,CACpC,GAAM,CAAE,kBAAAC,EAAmB,YAAAC,CAAY,EAAIH,EAAOC,CAAU,EAE5D,MAAO,CACL,kBAAAC,EACA,YAAYE,EAAmC,CAC7C,MAAO,CACL,MAAM,SACJC,EACAC,EACAC,EACuB,CACvB,OAAOC,EAAI,CACT,GAAGjB,EACH,cAAAC,EACA,mBAAAc,EACA,WAAWC,GAAA,YAAAA,EAAS,aAAaA,GAAA,YAAAA,EAAS,cAC1C,cAAAF,EACA,eAAgBF,EAAYC,CAAc,EAAE,MAAM,EAClD,eAAgBG,GAAA,YAAAA,EAAS,cAC3B,CAAC,CACH,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,MAAM,gBAAgB,CACpB,mBAAAD,EACA,sBAAAG,EACA,aAAAC,EACA,UAAAC,EACA,WAAAb,EACA,eAAAc,EACA,cAAAP,EACA,iBAAAQ,CACF,EAA6C,CAC3C,OAAOL,EAAI,CACT,cAAAhB,EACA,mBAAAc,EACA,UAAWK,GAAaD,EACxB,eAAAE,EACA,cAAAP,EACA,eAAgBR,EAAcL,CAAa,EACxC,OAAO,EACP,MAAMM,CAAU,EAChB,OAAOe,CAAgB,EACvB,YAAYJ,CAAqB,EACjC,MAAM,CACX,CAAC,CACH,CACF,CACF","names":["AssetAmount","convertDecimals","Big","Contract","createPublicClient","getContract","http","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Contract","Erc20ABI_default","getContract","createPublicClient","http","isEthersContract","Contract","createPublicClient","getContract","http","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","Contract","XtokensABI_default","getContract","createPublicClient","http","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","toBigInt","getBalance","address","config","evmSigner","polkadot","cfg","CallType","createContract","getDecimals","asset","getMin","min","decimals","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","getExtrinsicFee","createContract","convertDecimals","error","result","Big","ConfigBuilder","ConfigService","convertDecimals","toBigInt","Big","darwiniaPangoro","eq","equilibrium","paring","AssetAmount","getPolkadotApi","PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","metaId","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, 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, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalances({\n address: sourceAddress,\n balance,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n feeConfig,\n polkadot,\n}: GetBalancesParams) {\n return feeConfig\n ? polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n return extrinsicFee + xcmDeliveryFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WalletClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<\n typeof abi,\n PublicClient,\n WalletClient\n>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n publicClient: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n walletClient: signer,\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return (\n await contract.estimateGas[this.#config.func](...this.#config.args)\n ).toBigInt();\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { Asset } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n asset?: Asset;\n}\n\nexport async function getBalance({\n address,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n 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 signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\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 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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n 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, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\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): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium 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 eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n return (\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","toBigInt","Big","Contract","createPublicClient","getContract","http","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Contract","Erc20ABI_default","getContract","createPublicClient","http","isEthersContract","Contract","createPublicClient","getContract","http","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","Contract","XtokensABI_default","getContract","createPublicClient","http","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","toBigInt","getBalance","address","config","evmSigner","polkadot","cfg","CallType","createContract","getDecimals","asset","getMin","min","decimals","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalances","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","feeConfig","decimals","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","createContract","convertDecimals","error","toBigInt","result","Big","ConfigBuilder","ConfigService","convertDecimals","toBigInt","Big","darwiniaPangoro","eq","equilibrium","paring","AssetAmount","getPolkadotApi","PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","metaId","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moonbeam-network/xcm-sdk",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.22",
|
|
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",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"main": "./build/index.cjs",
|
|
53
53
|
"dependencies": {
|
|
54
54
|
"@moonbeam-network/xcm-builder": "1.0.12",
|
|
55
|
-
"@moonbeam-network/xcm-config": "1.3.
|
|
55
|
+
"@moonbeam-network/xcm-config": "1.3.26",
|
|
56
56
|
"@moonbeam-network/xcm-types": "1.0.3",
|
|
57
57
|
"@moonbeam-network/xcm-utils": "1.0.4",
|
|
58
58
|
"big.js": "^6.2.1"
|