@moonbeam-network/xcm-sdk 0.0.1-beta.5 → 0.0.1-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -83,9 +83,10 @@ const unsubscribe = await moonbeam.subscribeToAssetsBalanceInfo(
83
83
  // xcDOT: 0.073742 (Polkadot DOT)
84
84
  // ...
85
85
  console.log(
86
- `${balance.symbol}: ${toDecimal(balance.balance, balance.decimals)} (${
87
- origin.name
88
- } ${asset.originSymbol})`,
86
+ `${balance.symbol}: ${toDecimal(
87
+ balance.balance,
88
+ balance.decimals,
89
+ ).toFixed()} (${origin.name} ${asset.originSymbol})`,
89
90
  );
90
91
  });
91
92
  },
package/build/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var ne=Object.create;var I=Object.defineProperty;var ae=Object.getOwnPropertyDescriptor;var ie=Object.getOwnPropertyNames;var re=Object.getPrototypeOf,oe=Object.prototype.hasOwnProperty;var me=(t,e)=>{for(var s in e)I(t,s,{get:e[s],enumerable:!0})},W=(t,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of ie(e))!oe.call(t,a)&&a!==s&&I(t,a,{get:()=>e[a],enumerable:!(n=ae(e,a))||n.enumerable});return t};var G=(t,e,s)=>(s=t!=null?ne(re(t)):{},W(e||!t||!t.__esModule?I(s,"default",{value:t,enumerable:!0}):s,t)),ce=t=>W(I({},"__esModule",{value:!0}),t);var pe={};me(pe,{ExtrinsicStatus:()=>se.ExtrinsicStatus,PolkadotService:()=>x,XTokensContract:()=>B,createPolkadotServices:()=>M,init:()=>de,isDepositTransferData:()=>_,isWithdrawTransferData:()=>z,isXcmSdkDeposit:()=>j,isXcmSdkWithdraw:()=>R});module.exports=ce(pe);var se=require("@moonbeam-network/xcm-utils");var N=require("ethers");var q=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var B=class{constructor(e){this.address="0x0000000000000000000000000000000000000804";this.#s=e,this.#e=new N.Contract(this.address,q,e)}#e;#s;async transfer(e,s,n,a,i){return a.xcmFeeAsset?this.#e.transferMultiCurrencies([[a.xcmFeeAsset.asset.erc20Id,i],[n.erc20Id,s]],0,a.getParams(e),a.weight):this.#e.transfer(n.erc20Id,s,a.getParams(e),a.weight)}async getTransferFees(e,s,n,a){let i=(await this.#e.estimateGas.transfer(n.erc20Id,s,a.getParams(e),a.weight)).toBigInt(),m=await this.getGasPrice();return i*m}async getGasPrice(){let{gasPrice:e,maxPriorityFeePerGas:s}=await this.#s.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((s==null?void 0:s.toBigInt())||0n)}};var Ke=require("@polkadot/api-augment"),U=require("@moonbeam-network/xcm-utils"),X=G(require("lodash"),1);function O(t,e){return BigInt(t)*e/BigInt(10**12)}var x=class{#e;constructor(e){this.#e=e}static async create(e){return new x(await(0,U.getPolkadotApi)(e))}getMetadata(){return{decimals:this.#e.registry.chainDecimals.at(0)||12,symbol:this.#e.registry.chainTokens.at(0),ss58Format:this.#e.registry.chainSS58||42,genesisHash:this.#e.genesisHash.toHex()}}getExistentialDeposit(){var e,s;return((s=(e=this.#e.consts.balances)==null?void 0:e.existentialDeposit)==null?void 0:s.toBigInt())||0n}async getAssetDecimals(e){return(await this.getAssetMeta(e)).decimals.toNumber()}async getAssetMeta(e){return await(e.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata)(e.id)}async subscribeToAccountInfo(e,s){return this.#e.query.system.account(e,s)}async subscribeToBalance(e,s){return this.subscribeToAccountInfo(e,({data:n})=>s(n.free.toBigInt()-n.miscFrozen.toBigInt()))}async getGenericBalance(e,{pallet:s,function:n,getParams:a,path:i,calc:m}){var o;let r=await this.#e.query[s][n](...a(e));if(r.isEmpty)return 0n;let c=((o=r.unwrap)==null?void 0:o.call(r))||r;return m(i.length?X.default.get(c,i):c)}async getAssetMinBalance({pallet:e,function:s,params:n,path:a}){let i=await this.#e.query[e][s](...n);return i.isEmpty?0n:X.default.get(i.value,a).toBigInt()}getXcmExtrinsic(e,s,{pallet:n,extrinsic:a,getParams:i},m,r){let c=this.#e.tx[n][a],o=c(...i({account:e,amount:s,extrinsicCall:c,fee:m}));return r&&(o=this.#e.tx.proxy.proxy(r,null,o)),o}async getAssetFee(e,s,n){return O(s,await this.getUnitsPerSecond(e,n))}async getUnitsPerSecond(e,s){if(e.isNative)return s.unitsPerSecond;let n=await this.getAssetType(e.id);return n?(await this.#e.query.assetManager.assetTypeUnitsPerSecond(n)).unwrapOrDefault().toBigInt():0n}async getAssetType(e){return(await this.#e.query.assetManager.assetIdType(e)).unwrapOr(void 0)}async subscribeToAssetsBalanceInfo(e,s,n){let a=Object.values(s.assets),i=await this.getAssetsMetadata(a);return this.subscribeToAccountBalances(e,a,m=>{n(m.map((r,c)=>{var d;let o=a[c],l=i[c],{chains:[y],from:u}=s.deposit(o.originSymbol),{origin:b}=u(y.key);return{asset:o,balance:{balance:r.balance.toBigInt(),decimals:o.isNative?b.decimals:l.decimals.toNumber(),symbol:o.isNative?o.originSymbol:((d=l.symbol.toHuman())==null?void 0:d.toString())||""},origin:b}}))})}async getAssetsMetadata(e){let s=e.map(n=>[n.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata,[n.id]]);return this.#e.queryMulti(s)}async subscribeToAccountBalances(e,s,n){let a=s.map(i=>[i.isLocalAsset?this.#e.query.localAssets.account:this.#e.query.assets.account,[i.id,e]]);return this.#e.queryMulti(a,i=>{let m=i.map(r=>r.unwrapOrDefault());n(m)})}};async function M(t){return Promise.all(t.map(e=>x.create(e)))}var K=require("@moonbeam-network/xcm-config"),ee=G(require("lodash"),1);var H=require("@moonbeam-network/xcm-utils"),L=require("@polkadot/util");function ye({account:t,config:e,foreignPolkadot:s,primaryAccount:n,fee:a}){return i=>s.getXcmExtrinsic(t,i,e.extrinsic,a,n)}async function Q({account:t,asset:e,config:s,foreignPolkadot:n,moonChain:a,nativeAsset:i,origin:m,polkadot:r,polkadotSigner:c,primaryAccount:o,sourceAccount:l}){var k,w;let y=typeof l=="string"?l:l.address,u=n.getMetadata(),b={asset:((k=s.xcmFeeAsset)==null?void 0:k.asset)??e,balance:((w=s.xcmFeeAsset)==null?void 0:w.balance)??s.balance},[d,p,f,h,A=0n,S,g,C]=await Promise.all([e.isNative?a.decimals:r.getAssetDecimals(e),n.getExistentialDeposit(),n.getGenericBalance(o||y,s.balance),s.sourceFeeBalance?n.getGenericBalance(y,s.sourceFeeBalance):void 0,s.sourceMinBalance?n.getAssetMinBalance(s.sourceMinBalance):void 0,r.getAssetFee(b.asset,s.source.weight,a),n.getGenericBalance(o||y,b.balance),r.getAssetDecimals(b.asset)]),v=s.xcmFeeAsset?0n:S,T=ye({account:t,config:s,foreignPolkadot:n,primaryAccount:o,fee:S});return{asset:{...e,decimals:d},existentialDeposit:p,min:v,moonChainFee:{balance:g,decimals:b.asset.isNative?a.decimals:C,fee:S,symbol:b.asset.originSymbol},native:{...i,decimals:u.decimals},origin:m,source:{...s.source},sourceBalance:f,sourceFeeBalance:(0,L.isUndefined)(h)?void 0:{...u,balance:h},sourceMinBalance:A,getFee:async(D=f)=>(await T(D).paymentInfo(l)).partialFee.toBigInt(),send:async(D,P)=>(await T(D).signAndSend(l,{signer:c},P&&(0,H.createExtrinsicEventHandler)(s.extrinsic.pallet,s.extrinsic.successEvent,P))).toString()}}var E=require("@moonbeam-network/xcm-utils");function j(t){return!!t.from}function R(t){return!!t.to}function z(t){return!!(t!=null&&t.destination)}function _(t){return!!(t!=null&&t.moonChainFee)}function be(t,e){if(t.asset.isNative)return-1;if(e.asset.isNative)return 1;let s=(0,E.toDecimal)(t.balance.balance,t.balance.decimals),n=(0,E.toDecimal)(e.balance.balance,e.balance.decimals);if(s||n)return n-s;let a=(t.origin.name+t.asset.originSymbol).toLowerCase(),i=(e.origin.name+e.asset.originSymbol).toLowerCase();return a<i?-1:a>i?1:0}async function J({account:t,polkadot:e,configBuilder:s,cb:n}){let a=0n,i=[],m=o=>{let l=typeof o=="bigint";a=l?o:a,i=(l?i:o).map(y=>(y.asset.isNative&&(y.balance.balance=a),y)).sort(be),i.length&&n(i)},r=await e.subscribeToBalance(t,m),c=await e.subscribeToAssetsBalanceInfo(t,s,m);return()=>{r(),c()}}function V(t){return{id:"",erc20Id:"",originSymbol:t}}var Z=require("@moonbeam-network/xcm-utils");async function $({asset:t,config:e,contract:s,originAccount:n,destinationAccount:a,destinationPolkadot:i,ethersSigner:m,moonChain:r,nativeAsset:c,origin:o,polkadot:l}){var T,k;let y=i.getMetadata(),u=((T=e.xcmFeeAsset)==null?void 0:T.asset)??t,[b,d,p,f,h,A,S]=await Promise.all([t.isNative?r.decimals:l.getAssetDecimals(t),e.xcmFeeAsset?await l.getGenericBalance(n,(k=e.xcmFeeAsset)==null?void 0:k.balance.origin):void 0,i.getGenericBalance(a,e.balance),e.xcmFeeAsset?i.getGenericBalance(a,e.xcmFeeAsset.balance.destination):void 0,t.isNative?0n:i.getExistentialDeposit(),e.sourceMinBalance?i.getAssetMinBalance(e.sourceMinBalance):0n,l.getAssetDecimals(u)]),g=ue(A,e),C=e.xcmFeeAsset?0n:Y(A||h,p,g),v=e.xcmFeeAsset&&f!==void 0?Y(A||h,f,g):0n;return{asset:{...t,decimals:b},destination:{...e.destination},destinationBalance:p,destinationFee:g,existentialDeposit:h,min:C,minXcmFeeAsset:{amount:v,decimals:S,symbol:u.originSymbol},native:{...c,decimals:y.decimals},origin:o,originXcmFeeAssetBalance:d,getFee:async w=>s.getTransferFees(a,w,t,e),send:async(w,D)=>{let P=await s.transfer(a,w,t,e,v);return D&&(0,Z.createTxEventHandler)(m,P.hash,D),P.hash}}}function ue(t,e){let s=BigInt(e.weight*e.feePerWeight);return t>s?t:s}function Y(t,e,s){let n=e>=t?0n:t-e;return s+n}function de(t){return{moonbase:F(K.moonbase,t),moonbeam:F(K.moonbeam,t),moonriver:F(K.moonriver,t)}}function F(t,e){let{symbols:s,assets:n,moonAsset:a,moonChain:i}=t;return{symbols:s,assets:n,moonAsset:a,moonChain:i,subscribeToAssetsBalanceInfo:async(m,r)=>{let[c]=await M([t.moonChain.ws]);return J({account:m,polkadot:c,configBuilder:t,cb:r})},deposit:m=>{let{chains:r,from:c}=t.deposit(m);return{chains:r,from:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,d,{primaryAccount:p,polkadotSigner:f}={})=>{let h=f||(e==null?void 0:e.polkadotSigner);if(ee.default.isString(d)&&!h)throw new Error("Polkadot Signer/KeyringPair are not provided to XCM-SDK");let[A,S]=await M([t.moonChain.ws,u.source.ws]),g=S.getMetadata(),C=t.assets[g.symbol]||V(g.symbol);return Q({account:b,asset:l,config:u,foreignPolkadot:S,moonChain:i,nativeAsset:C,origin:y,polkadot:A,polkadotSigner:h,primaryAccount:p,sourceAccount:d})}}}}},withdraw:m=>{let{chains:r,to:c}=t.withdraw(m);return{chains:r,to:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,{ethersSigner:d}={})=>{let p=d||(e==null?void 0:e.ethersSigner);if(!p)throw new Error("Ethers signer is not provided to XCM-SDK");let f=await p.getAddress(),h=new B(p),[A,S]=await M([t.moonChain.ws,u.destination.ws]),g=S.getMetadata(),C=t.assets[g.symbol];return $({asset:l,config:u,contract:h,originAccount:f,destinationAccount:b,destinationPolkadot:S,ethersSigner:p,moonChain:i,nativeAsset:C,origin:y,polkadot:A})}}}}}}}0&&(module.exports={ExtrinsicStatus,PolkadotService,XTokensContract,createPolkadotServices,init,isDepositTransferData,isWithdrawTransferData,isXcmSdkDeposit,isXcmSdkWithdraw});
1
+ "use strict";var tt=Object.create;var S=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var nt=Object.getOwnPropertyNames;var st=Object.getPrototypeOf,rt=Object.prototype.hasOwnProperty;var at=(n,t)=>{for(var e in t)S(n,e,{get:t[e],enumerable:!0})},K=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of nt(t))!rt.call(n,r)&&r!==e&&S(n,r,{get:()=>t[r],enumerable:!(s=et(t,r))||s.enumerable});return n};var R=(n,t,e)=>(e=n!=null?tt(st(n)):{},K(t||!n||!n.__esModule?S(e,"default",{value:n,enumerable:!0}):e,n)),it=n=>K(S({},"__esModule",{value:!0}),n);var gt={};at(gt,{Sdk:()=>pt,getBalancesAndMin:()=>$,getContractFee:()=>j,getExtrinsicFee:()=>L,getFee:()=>Q,getMax:()=>H,getSourceData:()=>M});module.exports=it(gt);var I=require("@moonbeam-network/xcm-types"),X=require("@moonbeam-network/xcm-utils"),k=R(require("big.js"),1);var N=require("ethers");var z=[{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=new N.Contract(this.address,z,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),s=await this.getGasPrice();return e*s}catch(e){return console.error(e),0n}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function B(n,t){if(n.module==="Xtokens")return new D(n,t);throw new Error(`Contract ${n.module} not found`)}async function M({transferConfig:n,destinationAddress:t,destinationFee:e,ethersSigner:s,polkadot:r,sourceAddress:a}){var q,W,O;let{asset:i,destination:c,source:{chain:o,config:m}}=n,f=I.AssetAmount.fromAsset(i,{amount:0n,decimals:await r.getAssetDecimals(i)}),p=(q=m.fee)!=null&&q.asset?I.AssetAmount.fromAsset(m.fee.asset,{amount:0n,decimals:await r.getAssetDecimals(m.fee.asset)}):f,{balance:u,feeBalance:g,min:P}=await $({address:a,chain:o,config:m,polkadot:r}),C=(W=m.extrinsic)==null?void 0:W.build({address:t,amount:u,asset:o.getAssetId(i),destination:c.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),b=(O=m.contract)==null?void 0:O.build({address:t,amount:u,asset:o.getAssetId(i),destination:c.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),x=await Q({amount:u,contract:b,decimals:p.decimals,ethersSigner:s,extrinsic:C,polkadot:r,sourceAddress:a}),A=f.copyWith({amount:u}),{existentialDeposit:w}=r,G=p.copyWith({amount:x}),Z=p.copyWith({amount:g}),F=f.copyWith({amount:P}),_=H({balanceAmount:A,existentialDeposit:w,feeAmount:G,minAmount:F});return{balance:A,chain:o,existentialDeposit:w,fee:G,feeBalance:Z,max:_,min:F}}async function $({address:n,chain:t,config:e,polkadot:s}){let r=await s.query(e.balance.build({address:n,asset:t.getBalanceAssetId(e.asset)})),a=e.fee?await s.query(e.fee.balance.build({address:n,asset:t.getBalanceAssetId(e.fee.asset)})):r,i=e.min?await s.query(e.min.build({asset:t.getMinAssetId(e.asset)})):0n;return{balance:r,feeBalance:a,min:i}}async function Q({amount:n,contract:t,decimals:e,ethersSigner:s,extrinsic:r,polkadot:a,sourceAddress:i}){if(t){if(!s)throw new Error("Ethers signer must be provided");return j(n,t,e,s)}if(r)return L(r,a,i);throw new Error("Either contract or extrinsic must be provided")}async function j(n,t,e,s){let a=await B(t,s).getFee(n);return(0,X.convertDecimals)(a,18,e)}async function L(n,t,e){return t.getFee(e,n)}function H({balanceAmount:n,existentialDeposit:t,feeAmount:e,minAmount:s}){let r=n.toBig().minus(s.toBig()).minus(n.isSame(t)?t.toBig():(0,k.default)(0)).minus(n.isSame(e)?e.toBig():(0,k.default)(0));return n.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}var v=require("@moonbeam-network/xcm-config");var h=require("@moonbeam-network/xcm-utils"),l=R(require("big.js"),1);var E=require("@moonbeam-network/xcm-types"),J=require("@moonbeam-network/xcm-utils");async function U({transferConfig:n,destinationAddress:t,polkadot:e}){let{asset:s,destination:{chain:r,config:a}}=n,i=E.AssetAmount.fromAsset(s,{amount:0n,decimals:await e.getAssetDecimals(s)}),{balance:c,min:o}=await ct({address:t,chain:r,config:a,polkadot:e}),m=i.copyWith({amount:c}),{existentialDeposit:f}=e,p=await mt({config:n,polkadot:e}),u=i.copyWith({amount:o});return{balance:m,chain:r,existentialDeposit:f,fee:p,min:u}}async function ct({address:n,config:t,chain:e,polkadot:s}){let r=await s.query(t.balance.build({address:n,asset:e.getBalanceAssetId(t.asset)})),a=t.min?await s.query(t.min.build({asset:e.getMinAssetId(t.asset)})):0n;return{balance:r,min:a}}async function mt({config:n,polkadot:t}){let{amount:e,asset:s}=n.source.config.destinationFee,r=await t.getAssetDecimals(s),a=E.AssetAmount.fromAsset(s,{amount:0n,decimals:r});if(Number.isFinite(e))return a.copyWith({amount:(0,J.toBigInt)(e,r)});let i=e.build({api:t.api,asset:t.chain.getAssetId(s)});return a.copyWith({amount:await i.call()})}var Ft=require("@polkadot/api-augment"),y=require("@moonbeam-network/xcm-config"),V=require("@moonbeam-network/xcm-types"),Y=require("@moonbeam-network/xcm-utils"),d=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new d(await(0,Y.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(d.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===y.equilibriumAlphanet.key)return y.eq;if(!e)throw new Error("No native symbol key found");let s=y.assetsMap.get(e);if(!s)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return s}get existentialDeposit(){var r,a;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(a=this.api.consts.eqBalances)==null?void 0:a.existentialDeposit,s=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return V.AssetAmount.fromAsset(this.asset,{amount:s,decimals:this.decimals})}async getAssetMeta(t){var a,i,c,o;let e=((a=this.api.query.assets)==null?void 0:a.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadataMap);if(!e)return;let s=await e(t),r="unwrapOrDefault"in s?s.unwrapOrDefault():s;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,s){let r=this.api.tx[e.module][e.func],a=e.getArgs(r);return(await r(...a).signAndSend(this.#t(s)?t:s,{nonce:-1,signer:this.#t(s)?s:void 0})).toString()}#t(t){return"signPayload"in t}};async function T({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:s,transferConfig:r}){let[a,i]=await d.createMulti([r.destination.chain,r.source.chain]),c=await U({destinationAddress:n,polkadot:a,transferConfig:r}),o=await ft(i,c.fee),m=await M({destinationAddress:n,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:s,transferConfig:r});return{destination:c,getEstimate(f){let u=(0,l.default)((0,h.toBigInt)(f,m.balance.decimals).toString()).minus(m.balance.isSame(o)?o.toBig():(0,l.default)(0));return m.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toString())})},isSwapPossible:!0,max:m.max,min:ut(c),source:m,async swap(){return T({destinationAddress:s,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(f){var x,A;let p=(0,h.toBigInt)(f,m.balance.decimals),{asset:u,source:{chain:g,config:P}}=r,C=(x=P.contract)==null?void 0:x.build({address:n,amount:p,asset:g.getAssetId(u),destination:c.chain,fee:o.amount,feeAsset:g.getAssetId(o)}),b=(A=P.extrinsic)==null?void 0:A.build({address:n,amount:p,asset:g.getAssetId(u),destination:c.chain,fee:o.amount,feeAsset:g.getAssetId(o),palletInstance:g.getAssetPalletInstance(u),source:g});if(C){if(!t)throw new Error("Ethers signer must be provided");return B(C,t).transfer().then(w=>w.hash)}if(b){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(s,b,e)}throw new Error("Either contract or extrinsic must be provided")}}}function ut({balance:n,existentialDeposit:t,fee:e,min:s}){let r=(0,l.default)(0).plus(n.isSame(e)?e.toBig():(0,l.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,l.default)(0)).plus(n.toBig().lt(s.toBig())?s.toBig():(0,l.default)(0));return n.copyWith({amount:BigInt(r.toFixed())})}async function ft(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,h.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function pt(n){return{assets(t){let{assets:e,asset:s}=(0,v.ConfigBuilder)().assets(t);return{assets:e,asset(r){let{sourceChains:a,source:i}=s(r);return{sourceChains:a,source(c){let{destinationChains:o,destination:m}=i(c);return{destinationChains:o,destination(f){return{async accounts(p,u,g){return T({...n,...g,destinationAddress:u,sourceAddress:p,transferConfig:m(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:s,keyOrAsset:r,polkadotSigner:a,sourceAddress:i,sourceKeyOrChain:c}){return T({destinationAddress:t,ethersSigner:s,polkadotSigner:a,sourceAddress:i,transferConfig:(0,v.ConfigBuilder)().assets().asset(r).source(c).destination(e).build()})}}}0&&(module.exports={Sdk,getBalancesAndMin,getContractFee,getExtrinsicFee,getFee,getMax,getSourceData});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/contracts/XTokensContract/XTokensContract.ts","../src/polkadot/PolkadotService.ts","../src/polkadot/polkadot.utils.ts","../src/polkadot/polkadot.factory.ts","../src/sdk/sdk.ts","../src/sdk/sdk.deposit.ts","../src/sdk/sdk.utils.ts","../src/sdk/sdk.withdraw.ts"],"sourcesContent":["export { ExtrinsicStatus } from '@moonbeam-network/xcm-utils';\nexport type {\n ExtrinsicEvent,\n ExtrinsicEventsCallback,\n ExtrinsicFailedEvent,\n ExtrinsicSentEvent,\n ExtrinsicSuccessEvent,\n} from '@moonbeam-network/xcm-utils';\nexport * from './contracts';\nexport * from './polkadot';\nexport * from './sdk';\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport {\n Asset,\n AssetSymbol,\n WithdrawXTokensConfig,\n} from '@moonbeam-network/xcm-config';\nimport { Contract, Signer } from 'ethers';\n\nimport ContractInterface from './XTokensABI.json';\n\nexport class XTokensContract<Symbols extends AssetSymbol = AssetSymbol> {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(signer: Signer) {\n this.#signer = signer;\n this.#contract = new Contract(this.address, ContractInterface, signer);\n }\n\n async transfer(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n minAmount: bigint,\n ): Promise<TransactionResponse> {\n if (config.xcmFeeAsset) {\n return this.#contract.transferMultiCurrencies(\n [\n [config.xcmFeeAsset.asset.erc20Id, minAmount],\n [asset.erc20Id, amount],\n ],\n 0,\n config.getParams(account),\n config.weight,\n );\n }\n return this.#contract.transfer(\n asset.erc20Id,\n amount,\n config.getParams(account),\n config.weight,\n );\n }\n\n async getTransferFees(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n ) {\n const estimatedGas = (\n await this.#contract.estimateGas.transfer(\n asset.erc20Id,\n amount,\n config.getParams(account),\n config.weight,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","import '@polkadot/api-augment';\n\nimport {\n Asset,\n AssetSymbol,\n BalanceConfig,\n ChainKey,\n ExtrinsicConfig,\n MinBalanceConfig,\n MoonChain,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport {\n QueryableStorageMultiArg,\n SubmittableExtrinsic,\n UnsubscribePromise,\n} from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { AccountInfo } from '@polkadot/types/interfaces';\nimport {\n PalletAssetsAssetAccount,\n PalletAssetsAssetMetadata,\n} from '@polkadot/types/lookup';\nimport _ from 'lodash';\nimport { AssetBalanceInfo, XCMType } from './polkadot.interfaces';\nimport { calculateMin } from './polkadot.utils';\n\nexport class PolkadotService<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n> {\n readonly #api: ApiPromise;\n\n constructor(api: ApiPromise) {\n this.#api = api;\n }\n\n static async create<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n >(ws: string): Promise<PolkadotService<Symbols, ChainKeys>> {\n return new PolkadotService(await getPolkadotApi(ws));\n }\n\n getMetadata() {\n return {\n decimals: this.#api.registry.chainDecimals.at(0) || 12,\n symbol: this.#api.registry.chainTokens.at(0) as Symbols,\n ss58Format: this.#api.registry.chainSS58 || 42,\n genesisHash: this.#api.genesisHash.toHex(),\n };\n }\n\n getExistentialDeposit(): bigint {\n return (\n (\n this.#api.consts.balances?.existentialDeposit as unknown as\n | u128\n | undefined\n )?.toBigInt() || 0n\n );\n }\n\n async getAssetDecimals(asset: Asset<Symbols>): Promise<number> {\n const meta = await this.getAssetMeta(asset);\n\n return meta.decimals.toNumber();\n }\n\n async getAssetMeta(\n asset: Asset<Symbols>,\n ): Promise<PalletAssetsAssetMetadata> {\n const data = await (asset.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata)(asset.id);\n\n return data as unknown as PalletAssetsAssetMetadata;\n }\n\n async subscribeToAccountInfo(\n account: string,\n callback: (info: AccountInfo) => void,\n ): UnsubscribePromise {\n return (this.#api.query.system.account as any)(account, callback);\n }\n\n async subscribeToBalance(\n account: string,\n callback: (balance: bigint) => void,\n ): UnsubscribePromise {\n return this.subscribeToAccountInfo(account, ({ data }) =>\n callback(data.free.toBigInt() - data.miscFrozen.toBigInt()),\n );\n }\n\n async getGenericBalance(\n account: string,\n { pallet, function: fn, getParams, path, calc }: BalanceConfig<Symbols>,\n ): Promise<bigint> {\n const response = await this.#api.query[pallet][fn](...getParams(account));\n\n if (response.isEmpty) {\n return 0n;\n }\n\n const unwrapped = (response as any).unwrap?.() || response;\n\n return calc(path.length ? _.get(unwrapped, path) : unwrapped);\n }\n\n async getAssetMinBalance({\n pallet,\n function: fn,\n params,\n path,\n }: MinBalanceConfig): Promise<bigint> {\n const details = (await this.#api.query[pallet][fn](\n ...params,\n )) as unknown as Option<any>;\n\n if (details.isEmpty) {\n return 0n;\n }\n\n return _.get(details.value, path).toBigInt();\n }\n\n getXcmExtrinsic(\n account: string,\n amount: bigint,\n { pallet, extrinsic, getParams }: ExtrinsicConfig<Symbols>,\n fee?: bigint,\n primaryAccount?: string,\n ): SubmittableExtrinsic<'promise'> {\n const call = this.#api.tx[pallet][extrinsic];\n\n let transferExtrinsic = call(\n ...getParams({\n account,\n amount,\n extrinsicCall: call,\n fee,\n }),\n );\n\n if (primaryAccount) {\n transferExtrinsic = this.#api.tx.proxy.proxy(\n primaryAccount,\n null,\n transferExtrinsic,\n );\n }\n\n return transferExtrinsic;\n }\n\n async getAssetFee(\n asset: Asset,\n weight: number,\n moonChain: MoonChain,\n ): Promise<bigint> {\n return calculateMin(weight, await this.getUnitsPerSecond(asset, moonChain));\n }\n\n async getUnitsPerSecond(asset: Asset, moonChain: MoonChain): Promise<bigint> {\n if (asset.isNative) {\n return moonChain.unitsPerSecond;\n }\n const type = await this.getAssetType(asset.id);\n\n if (!type) {\n return 0n;\n }\n\n const res = (await this.#api.query.assetManager.assetTypeUnitsPerSecond(\n type,\n )) as unknown as Option<u128>;\n\n return res.unwrapOrDefault().toBigInt();\n }\n\n /**\n * this is only for Moon* chains\n */\n async getAssetType(id: string): Promise<XCMType | undefined> {\n const type = (await this.#api.query.assetManager.assetIdType(\n id,\n )) as unknown as Option<any>;\n\n return type.unwrapOr(undefined);\n }\n\n async subscribeToAssetsBalanceInfo(\n account: string,\n config: XcmConfigBuilder<Symbols, ChainKeys>,\n callback: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise {\n const assetsArray = Object.values<Asset<Symbols>>(config.assets);\n const metadata = await this.getAssetsMetadata(assetsArray);\n\n return this.subscribeToAccountBalances(account, assetsArray, (data) => {\n callback(\n data.map((balance, index): AssetBalanceInfo<Symbols> => {\n const asset = assetsArray[index];\n const meta = metadata[index];\n const {\n chains: [chain],\n from,\n } = config.deposit(asset.originSymbol);\n const { origin } = from(chain.key);\n\n return {\n asset,\n balance: {\n balance: balance.balance.toBigInt(),\n decimals: asset.isNative\n ? (origin as MoonChain).decimals\n : meta.decimals.toNumber(),\n symbol: asset.isNative\n ? asset.originSymbol\n : meta.symbol.toHuman()?.toString() || '',\n },\n origin,\n };\n }),\n );\n });\n }\n\n async getAssetsMetadata(\n assetsArray: Asset<Symbols>[],\n ): Promise<PalletAssetsAssetMetadata[]> {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata,\n [x.id],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries) as unknown as Promise<\n PalletAssetsAssetMetadata[]\n >;\n }\n\n async subscribeToAccountBalances(\n account: string,\n assetsArray: Asset<Symbols>[],\n callback: (balances: PalletAssetsAssetAccount[]) => void,\n ): UnsubscribePromise {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.account\n : this.#api.query.assets.account,\n [x.id, account],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries, (res: unknown) => {\n const response = (res as Array<Option<PalletAssetsAssetAccount>>).map(\n (item) => item.unwrapOrDefault(),\n );\n\n callback(response);\n });\n }\n}\n","export function calculateMin(weight: number, unitsPerSecond: bigint): bigint {\n // 10**12 weight = 1 second\n return (BigInt(weight) * unitsPerSecond) / BigInt(10 ** 12);\n}\n","import { AssetSymbol, ChainKey } from '@moonbeam-network/xcm-config';\nimport { PolkadotService } from './PolkadotService';\n\nexport async function createPolkadotServices<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>(ws: string[]): Promise<PolkadotService<Symbols, ChainKeys>[]> {\n return Promise.all(\n ws.map((url) => PolkadotService.create<Symbols, ChainKeys>(url)),\n );\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n moonbase,\n MoonbaseAssets,\n MoonbaseChains,\n moonbeam,\n MoonbeamAssets,\n MoonbeamChains,\n moonriver,\n MoonriverAssets,\n MoonriverChains,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport _ from 'lodash';\nimport { XTokensContract } from '../contracts';\nimport { AssetBalanceInfo, createPolkadotServices } from '../polkadot';\nimport { getDepositData } from './sdk.deposit';\nimport {\n DepositTransferData,\n SdkOptions,\n WithdrawGetParams,\n WithdrawTransferData,\n XcmSdk,\n XcmSdkByChain,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\nimport { createDummyAsset, subscribeToAssetsBalanceInfo } from './sdk.utils';\nimport { getWithdrawData } from './sdk.withdraw';\n\nexport function init(options?: SdkOptions): XcmSdkByChain {\n return {\n moonbase: initByChain<MoonbaseAssets, MoonbaseChains>(moonbase, options),\n moonbeam: initByChain<MoonbeamAssets, MoonbeamChains>(moonbeam, options),\n moonriver: initByChain<MoonriverAssets, MoonriverChains>(\n moonriver,\n options,\n ),\n };\n}\n\nfunction initByChain<Symbols extends AssetSymbol, ChainKeys extends ChainKey>(\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>,\n options?: SdkOptions,\n): XcmSdk<Symbols, ChainKeys> {\n const { symbols, assets, moonAsset, moonChain } = configBuilder;\n\n return {\n symbols,\n assets,\n moonAsset,\n moonChain,\n subscribeToAssetsBalanceInfo: async (\n account: string,\n cb: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise => {\n const [polkadot] = await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n ]);\n\n return subscribeToAssetsBalanceInfo({\n account,\n polkadot,\n configBuilder,\n cb,\n });\n },\n deposit: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkDeposit<Symbols, ChainKeys> => {\n const { chains, from } = configBuilder.deposit(symbolOrAsset);\n\n return {\n chains,\n from: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = from(keyOrChain);\n\n return {\n get: async (\n account: string,\n sourceAccount: string | IKeyringPair,\n { primaryAccount, polkadotSigner } = {},\n ): Promise<DepositTransferData<Symbols>> => {\n const signer = polkadotSigner || options?.polkadotSigner;\n\n if (_.isString(sourceAccount) && !signer) {\n throw new Error(\n 'Polkadot Signer/KeyringPair are not provided to XCM-SDK',\n );\n }\n\n const [polkadot, foreignPolkadot] = await createPolkadotServices<\n Symbols,\n ChainKeys\n >([configBuilder.moonChain.ws, config.source.ws]);\n const meta = foreignPolkadot.getMetadata();\n const nativeAsset =\n configBuilder.assets[meta.symbol] ||\n createDummyAsset(meta.symbol);\n\n return getDepositData({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner: signer,\n primaryAccount,\n sourceAccount,\n });\n },\n };\n },\n };\n },\n withdraw: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkWithdraw<Symbols, ChainKeys> => {\n const { chains, to } = configBuilder.withdraw(symbolOrAsset);\n\n return {\n chains,\n to: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = to(keyOrChain);\n\n return {\n get: async (\n destinationAccount: string,\n { ethersSigner }: WithdrawGetParams = {},\n ): Promise<WithdrawTransferData<Symbols>> => {\n const signer = ethersSigner || options?.ethersSigner;\n\n if (!signer) {\n throw new Error('Ethers signer is not provided to XCM-SDK');\n }\n const originAccount = await signer.getAddress();\n\n const contract = new XTokensContract<Symbols>(signer);\n const [polkadot, destinationPolkadot] =\n await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n config.destination.ws,\n ]);\n const meta = destinationPolkadot.getMetadata();\n const nativeAsset = configBuilder.assets[meta.symbol];\n\n return getWithdrawData({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner: signer,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n });\n },\n };\n },\n };\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n DepositConfig,\n MoonChain,\n} from '@moonbeam-network/xcm-config';\nimport {\n createExtrinsicEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport type { IKeyringPair } from '@polkadot/types/types';\nimport { isUndefined } from '@polkadot/util';\nimport { PolkadotService } from '../polkadot';\nimport { DepositTransferData } from './sdk.interfaces';\n\nexport interface CreateExtrinsicOptions<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n config: DepositConfig<Symbols>;\n fee?: bigint;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n primaryAccount?: string;\n}\n\nexport function getCreateExtrinsic<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee,\n}: CreateExtrinsicOptions<Symbols, ChainKeys>) {\n return (amount: bigint): any =>\n foreignPolkadot.getXcmExtrinsic(\n account,\n amount,\n config.extrinsic,\n fee,\n primaryAccount,\n );\n}\n\nexport interface GetDepositDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n asset: Asset<Symbols>;\n config: DepositConfig<Symbols>;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n polkadotSigner?: PolkadotSigner;\n primaryAccount?: string;\n sourceAccount: string | IKeyringPair;\n}\n\nexport async function getDepositData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner,\n primaryAccount,\n sourceAccount,\n}: GetDepositDataParams<Symbols, ChainKeys>): Promise<\n DepositTransferData<Symbols>\n> {\n const sourceAddress =\n typeof sourceAccount === 'string' ? sourceAccount : sourceAccount.address;\n const meta = foreignPolkadot.getMetadata();\n const xcmFeeAssetConfig = {\n asset: config.xcmFeeAsset?.asset ?? asset,\n balance: config.xcmFeeAsset?.balance ?? config.balance,\n };\n\n const [\n assetDecimals,\n existentialDeposit,\n sourceBalance,\n sourceFeeBalance,\n sourceMinBalance = 0n,\n xcmFee,\n xcmFeeBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // assetDecimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // existentialDeposit\n foreignPolkadot.getExistentialDeposit(),\n // sourceBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n config.balance,\n ),\n // sourceFeeBalance\n config.sourceFeeBalance\n ? foreignPolkadot.getGenericBalance(\n sourceAddress,\n config.sourceFeeBalance,\n )\n : undefined,\n // sourceMinBalance\n config.sourceMinBalance\n ? foreignPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : undefined,\n // xcmFee\n polkadot.getAssetFee(\n xcmFeeAssetConfig.asset,\n config.source.weight,\n moonChain,\n ),\n // xcmFeeBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n xcmFeeAssetConfig.balance,\n ),\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAssetConfig.asset),\n ]);\n\n // Min is basically the XCM fee, if it's the same asset. If less is sent then\n // Moon* won't process the message.\n const min = config.xcmFeeAsset ? 0n : xcmFee;\n const createExtrinsic = getCreateExtrinsic({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee: xcmFee,\n });\n\n return {\n asset: { ...asset, decimals: assetDecimals },\n existentialDeposit,\n min,\n moonChainFee: {\n balance: xcmFeeBalance,\n decimals: xcmFeeAssetConfig.asset.isNative\n ? moonChain.decimals\n : xcmFeeDecimals,\n fee: xcmFee,\n symbol: xcmFeeAssetConfig.asset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n source: {\n ...config.source,\n },\n sourceBalance,\n sourceFeeBalance: !isUndefined(sourceFeeBalance)\n ? { ...meta, balance: sourceFeeBalance }\n : undefined,\n sourceMinBalance,\n getFee: async (amount = sourceBalance): Promise<bigint> => {\n const extrinsic = createExtrinsic(amount);\n const info = await extrinsic.paymentInfo(sourceAccount);\n\n return info.partialFee.toBigInt();\n },\n send: async (\n amount: bigint,\n cb?: ExtrinsicEventsCallback,\n ): Promise<string> => {\n const extrinsic = createExtrinsic(amount);\n const hash = await extrinsic.signAndSend(\n sourceAccount,\n {\n signer: polkadotSigner,\n },\n\n cb &&\n createExtrinsicEventHandler(\n config.extrinsic.pallet,\n config.extrinsic.successEvent,\n cb,\n ),\n );\n\n return hash.toString();\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n ChainKey,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { toDecimal } from '@moonbeam-network/xcm-utils';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { AssetBalanceInfo, PolkadotService } from '../polkadot';\nimport {\n DepositTransferData,\n WithdrawTransferData,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\n\nexport function isXcmSdkDeposit(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkDeposit {\n return !!(config as XcmSdkDeposit).from;\n}\n\nexport function isXcmSdkWithdraw(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkWithdraw {\n return !!(config as XcmSdkWithdraw).to;\n}\n\nexport function isWithdrawTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is WithdrawTransferData {\n return !!(data as WithdrawTransferData)?.destination;\n}\n\nexport function isDepositTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is DepositTransferData {\n return !!(data as DepositTransferData)?.moonChainFee;\n}\n\nexport function sortByBalanceAndChainName<Symbols extends AssetSymbol>(\n a: AssetBalanceInfo<Symbols>,\n b: AssetBalanceInfo<Symbols>,\n) {\n if (a.asset.isNative) {\n return -1;\n }\n\n if (b.asset.isNative) {\n return 1;\n }\n\n const aDecimal = toDecimal(a.balance.balance, a.balance.decimals);\n const bDecimal = toDecimal(b.balance.balance, b.balance.decimals);\n\n if (aDecimal || bDecimal) {\n return bDecimal - aDecimal;\n }\n\n const aName = (a.origin.name + a.asset.originSymbol).toLowerCase();\n const bName = (b.origin.name + b.asset.originSymbol).toLowerCase();\n\n if (aName < bName) {\n return -1;\n }\n\n if (aName > bName) {\n return 1;\n }\n\n return 0;\n}\n\nexport interface SubscribeToAssetsBalanceInfoParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>;\n cb: (data: AssetBalanceInfo<Symbols>[]) => void;\n}\n\nexport async function subscribeToAssetsBalanceInfo<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n polkadot,\n configBuilder,\n cb,\n}: SubscribeToAssetsBalanceInfoParams<Symbols, ChainKeys>): UnsubscribePromise {\n let lastBalance = 0n;\n let lastInfo: AssetBalanceInfo<Symbols>[] = [];\n const handler = (data: bigint | AssetBalanceInfo<Symbols>[]) => {\n const isBalance = typeof data === 'bigint';\n\n lastBalance = isBalance ? data : lastBalance;\n lastInfo = (isBalance ? lastInfo : data)\n .map((info) => {\n if (info.asset.isNative) {\n // eslint-disable-next-line no-param-reassign\n info.balance.balance = lastBalance;\n }\n\n return info;\n })\n .sort(sortByBalanceAndChainName);\n\n if (lastInfo.length) {\n cb(lastInfo);\n }\n };\n\n const unsubscribeBalance = await polkadot.subscribeToBalance(\n account,\n handler,\n );\n const unsubscribeInfo = await polkadot.subscribeToAssetsBalanceInfo(\n account,\n configBuilder,\n handler,\n );\n\n return () => {\n unsubscribeBalance();\n unsubscribeInfo();\n };\n}\n\nexport function createDummyAsset(symbol: AssetSymbol): Asset<AssetSymbol> {\n return {\n id: '',\n erc20Id: '',\n originSymbol: symbol,\n };\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n MoonChain,\n WithdrawConfig,\n} from '@moonbeam-network/xcm-config';\nimport {\n createTxEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { XTokensContract } from '../contracts';\nimport { PolkadotService } from '../polkadot';\nimport { WithdrawTransferData } from './sdk.interfaces';\n\nexport interface GetWithdrawDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n asset: Asset<Symbols>;\n config: WithdrawConfig<Symbols>;\n contract: XTokensContract;\n originAccount: string;\n destinationAccount: string;\n destinationPolkadot: PolkadotService<Symbols, ChainKeys>;\n ethersSigner: EthersSigner;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n}\n\nexport async function getWithdrawData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n}: GetWithdrawDataParams<Symbols, ChainKeys>): Promise<\n WithdrawTransferData<Symbols>\n> {\n const meta = destinationPolkadot.getMetadata();\n const xcmFeeAsset = config.xcmFeeAsset?.asset ?? asset;\n const [\n decimals,\n // destinationBalance,\n originXcmFeeAssetBalance,\n destinationBalance,\n destinationXcmFeeAssetBalance,\n existentialDeposit,\n assetMinBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // decimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // originXcmFeeAssetBalance\n config.xcmFeeAsset\n ? await polkadot.getGenericBalance(\n originAccount,\n config.xcmFeeAsset?.balance.origin,\n )\n : undefined,\n // destinationBalance\n destinationPolkadot.getGenericBalance(destinationAccount, config.balance),\n // destinationXcmFeeAssetBalance\n config.xcmFeeAsset\n ? destinationPolkadot.getGenericBalance(\n destinationAccount,\n config.xcmFeeAsset.balance.destination,\n )\n : undefined,\n // existentialDeposit\n asset.isNative ? 0n : destinationPolkadot.getExistentialDeposit(),\n // assetMinBalance\n config.sourceMinBalance\n ? destinationPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : 0n,\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAsset),\n ]);\n\n const destinationFee = getFee(assetMinBalance, config);\n const min = config.xcmFeeAsset\n ? 0n\n : getMin(\n assetMinBalance || existentialDeposit,\n destinationBalance,\n destinationFee,\n );\n\n const minXcmFeeAsset =\n config.xcmFeeAsset && destinationXcmFeeAssetBalance !== undefined\n ? getMin(\n assetMinBalance || existentialDeposit,\n destinationXcmFeeAssetBalance,\n destinationFee,\n )\n : 0n;\n\n return {\n asset: { ...asset, decimals },\n destination: {\n ...config.destination,\n },\n destinationBalance,\n destinationFee,\n existentialDeposit,\n min,\n minXcmFeeAsset: {\n amount: minXcmFeeAsset,\n decimals: xcmFeeDecimals,\n symbol: xcmFeeAsset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n originXcmFeeAssetBalance,\n getFee: async (amount) =>\n contract.getTransferFees(destinationAccount, amount, asset, config),\n send: async (amount: bigint, cb?: ExtrinsicEventsCallback) => {\n const tx = await contract.transfer(\n destinationAccount,\n amount,\n asset,\n config,\n minXcmFeeAsset,\n );\n\n if (cb) {\n createTxEventHandler(ethersSigner, tx.hash, cb);\n }\n\n return tx.hash;\n },\n };\n}\n\nexport function getFee<Symbols extends AssetSymbol>(\n assetMinBalance: bigint,\n config: WithdrawConfig<Symbols>,\n) {\n const calculatedFee = BigInt(config.weight * config.feePerWeight);\n\n return assetMinBalance > calculatedFee ? assetMinBalance : calculatedFee;\n}\n\nexport function getMin(\n balanceNeeded: bigint,\n destinationBalance: bigint,\n destinationFee: bigint,\n) {\n const extra =\n destinationBalance >= balanceNeeded\n ? 0n\n : balanceNeeded - destinationBalance;\n\n return destinationFee + extra;\n}\n"],"mappings":"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","names":["src_exports","__export","PolkadotService","XTokensContract","createPolkadotServices","init","isDepositTransferData","isWithdrawTransferData","isXcmSdkDeposit","isXcmSdkWithdraw","__toCommonJS","import_xcm_utils","import_ethers","XTokensContract","signer","#signer","#contract","XTokensABI_default","account","amount","asset","config","minAmount","estimatedGas","gasPrice","maxPriorityFeePerGas","import_api_augment","import_xcm_utils","import_lodash","calculateMin","weight","unitsPerSecond","PolkadotService","#api","api","ws","_a","_b","asset","account","callback","data","pallet","fn","getParams","path","calc","response","unwrapped","_","params","details","amount","extrinsic","fee","primaryAccount","call","transferExtrinsic","weight","moonChain","calculateMin","type","id","config","assetsArray","metadata","balance","index","meta","chain","from","origin","queries","x","res","item","createPolkadotServices","ws","url","PolkadotService","import_xcm_config","import_lodash","import_xcm_utils","import_util","getCreateExtrinsic","account","config","foreignPolkadot","primaryAccount","fee","amount","getDepositData","asset","moonChain","nativeAsset","origin","polkadot","polkadotSigner","sourceAccount","_a","_b","sourceAddress","meta","xcmFeeAssetConfig","assetDecimals","existentialDeposit","sourceBalance","sourceFeeBalance","sourceMinBalance","xcmFee","xcmFeeBalance","xcmFeeDecimals","min","createExtrinsic","cb","import_xcm_utils","isXcmSdkDeposit","config","isXcmSdkWithdraw","isWithdrawTransferData","data","isDepositTransferData","sortByBalanceAndChainName","a","b","aDecimal","bDecimal","aName","bName","subscribeToAssetsBalanceInfo","account","polkadot","configBuilder","cb","lastBalance","lastInfo","handler","isBalance","info","unsubscribeBalance","unsubscribeInfo","createDummyAsset","symbol","import_xcm_utils","getWithdrawData","asset","config","contract","originAccount","destinationAccount","destinationPolkadot","ethersSigner","moonChain","nativeAsset","origin","polkadot","_a","_b","meta","xcmFeeAsset","decimals","originXcmFeeAssetBalance","destinationBalance","destinationXcmFeeAssetBalance","existentialDeposit","assetMinBalance","xcmFeeDecimals","destinationFee","getFee","min","getMin","minXcmFeeAsset","amount","cb","tx","calculatedFee","balanceNeeded","extra","init","options","initByChain","configBuilder","symbols","assets","moonAsset","moonChain","account","cb","polkadot","createPolkadotServices","subscribeToAssetsBalanceInfo","symbolOrAsset","chains","from","keyOrChain","asset","origin","config","sourceAccount","primaryAccount","polkadotSigner","signer","_","foreignPolkadot","meta","nativeAsset","createDummyAsset","getDepositData","to","destinationAccount","ethersSigner","originAccount","contract","XTokensContract","destinationPolkadot","getWithdrawData"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/getSourceData.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/sdk.ts","../src/getTransferData.ts","../src/getDestinationData.ts","../src/polkadot/PolkadotService.ts"],"sourcesContent":["export * from './getSourceData';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { createContract } from './contract';\nimport { PolkadotService } from './polkadot';\nimport { SourceChainTransferData } from './sdk.interfaces';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner?: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const { balance, feeBalance, min } = await getBalancesAndMin({\n address: sourceAddress,\n chain,\n config,\n polkadot,\n });\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n amount: balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const 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 existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n chain: AnyChain;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getBalancesAndMin({\n address,\n chain,\n config,\n polkadot,\n}: GetBalancesParams) {\n const balance = await polkadot.query(\n config.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.asset),\n }),\n );\n const feeBalance = config.fee\n ? await polkadot.query(\n config.fee.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.fee.asset),\n }),\n )\n : balance;\n const min = config.min\n ? await polkadot.query(\n config.min.build({ asset: chain.getMinAssetId(config.asset) }),\n )\n : 0n;\n\n return {\n balance,\n feeBalance,\n min,\n };\n}\n\nexport interface GetFeeParams {\n amount: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n amount,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(amount, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n amount: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(config, ethersSigner);\n const fee = await contract.getFee(amount);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n return polkadot.getFee(sourceAddress, extrinsic);\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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { ContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements ContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n return 0n;\n }\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport { ContractInterface } from './contract.interfaces';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): ContractInterface {\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","/* eslint-disable sort-keys */\nimport { ConfigBuilder } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {}\n\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { createContract } from './contract';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\nimport { PolkadotService } from './polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from './sdk.interfaces';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toString()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return createContract(contract, ethersSigner)\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from './polkadot';\nimport { DestinationChainTransferData } from './sdk.interfaces';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const { balance, min } = await getBalanceAndMin({\n address: destinationAddress,\n chain,\n config,\n polkadot,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n config: AssetConfig;\n chain: AnyChain;\n polkadot: PolkadotService;\n}\n\nexport async function getBalanceAndMin({\n address,\n config,\n chain,\n polkadot,\n}: GetBalancesParams) {\n const balance = await polkadot.query(\n config.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.asset),\n }),\n );\n const min = config.min\n ? await polkadot.query(\n config.min.build({ asset: chain.getMinAssetId(config.asset) }),\n )\n : 0n;\n\n return {\n balance,\n min,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n eq,\n equilibriumAlphanet,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue apears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.key) {\n return eq;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getBalancesAndMin","getContractFee","getExtrinsicFee","getFee","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Xtokens","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","zeroFeeAmount","balance","feeBalance","min","getBalancesAndMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","amount","decimals","getContractFee","getExtrinsicFee","createContract","result","Big","import_xcm_config","import_xcm_utils","import_big","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","polkadot","asset","chain","config","zeroAmount","balance","min","getBalanceAndMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","address","amount","decimals","cfg","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","fn","data","unwrapped","config","response","account","args","signer","#isSigner","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
package/build/index.d.ts CHANGED
@@ -1,319 +1,203 @@
1
- import { ExtrinsicEventsCallback, Hash } from '@moonbeam-network/xcm-utils';
2
- export {
3
- ExtrinsicEvent,
4
- ExtrinsicEventsCallback,
5
- ExtrinsicFailedEvent,
6
- ExtrinsicSentEvent,
7
- ExtrinsicStatus,
8
- ExtrinsicSuccessEvent,
9
- } from '@moonbeam-network/xcm-utils';
10
- import { TransactionResponse } from '@ethersproject/abstract-provider';
11
1
  import {
12
- AssetSymbol,
13
- Asset,
14
- WithdrawXTokensConfig,
15
- MoonbaseAssets,
16
- MoonbaseChains,
17
- MoonbeamAssets,
18
- MoonbeamChains,
19
- MoonriverAssets,
20
- MoonriverChains,
21
- ChainKey,
22
- AssetsMap,
23
- MoonChain,
24
- Chain,
25
- BalanceConfig,
26
- MinBalanceConfig,
2
+ SubstrateQueryConfig,
27
3
  ExtrinsicConfig,
28
- XcmConfigBuilder,
29
- } from '@moonbeam-network/xcm-config';
30
- import { Signer } from 'ethers';
31
- import { ApiPromise } from '@polkadot/api';
4
+ ContractConfig,
5
+ } from '@moonbeam-network/xcm-builder';
6
+ import { TransferConfig, AssetConfig } from '@moonbeam-network/xcm-config';
32
7
  import {
33
- UnsubscribePromise,
34
- Signer as Signer$1,
35
- SubmittableExtrinsic,
36
- } from '@polkadot/api/types';
37
- import { AccountInfo } from '@polkadot/types/interfaces';
38
- import {
39
- PalletAssetsAssetMetadata,
40
- PalletAssetsAssetAccount,
41
- } from '@polkadot/types/lookup';
8
+ AnyParachain,
9
+ Asset,
10
+ AssetAmount,
11
+ ChainAssetId,
12
+ AnyChain,
13
+ Ecosystem,
14
+ } from '@moonbeam-network/xcm-types';
15
+ import { Signer as Signer$1 } from 'ethers';
16
+ import { ApiPromise } from '@polkadot/api';
17
+ import { Signer } from '@polkadot/api/types';
42
18
  import { IKeyringPair } from '@polkadot/types/types';
43
19
 
44
- declare class XTokensContract<Symbols extends AssetSymbol = AssetSymbol> {
20
+ declare class PolkadotService {
45
21
  #private;
46
- readonly address: string;
47
- constructor(signer: Signer);
22
+ readonly api: ApiPromise;
23
+ readonly chain: AnyParachain;
24
+ constructor(api: ApiPromise, chain: AnyParachain);
25
+ static create(chain: AnyParachain): Promise<PolkadotService>;
26
+ static createMulti(chains: AnyParachain[]): Promise<PolkadotService[]>;
27
+ get decimals(): number;
28
+ get asset(): Asset;
29
+ get existentialDeposit(): AssetAmount;
30
+ getAssetMeta(asset: ChainAssetId): Promise<
31
+ | {
32
+ symbol: string;
33
+ decimals: number;
34
+ }
35
+ | undefined
36
+ >;
37
+ getAssetDecimals(asset: Asset): Promise<number>;
38
+ query(config: SubstrateQueryConfig): Promise<bigint>;
39
+ getFee(account: string, config: ExtrinsicConfig): Promise<bigint>;
48
40
  transfer(
49
41
  account: string,
50
- amount: bigint,
51
- asset: Asset<Symbols>,
52
- config: WithdrawXTokensConfig<Symbols>,
53
- minAmount: bigint,
54
- ): Promise<TransactionResponse>;
55
- getTransferFees(
56
- account: string,
57
- amount: bigint,
58
- asset: Asset<Symbols>,
59
- config: WithdrawXTokensConfig<Symbols>,
60
- ): Promise<bigint>;
61
- private getGasPrice;
42
+ config: ExtrinsicConfig,
43
+ signer: Signer | IKeyringPair,
44
+ ): Promise<string>;
62
45
  }
63
46
 
64
- interface XcmSdkByChain {
65
- moonbase: MoonbaseXcmSdk;
66
- moonbeam: MoonbeamXcmSdk;
67
- moonriver: MoonriverXcmSdk;
68
- }
69
- declare type MoonXcmSdk = MoonbaseXcmSdk | MoonbeamXcmSdk | MoonriverXcmSdk;
70
- declare type MoonbaseXcmSdk = XcmSdk<MoonbaseAssets, MoonbaseChains>;
71
- declare type MoonbeamXcmSdk = XcmSdk<MoonbeamAssets, MoonbeamChains>;
72
- declare type MoonriverXcmSdk = XcmSdk<MoonriverAssets, MoonriverChains>;
73
- interface XcmSdk<
74
- Symbols extends AssetSymbol = AssetSymbol,
75
- ChainKeys extends ChainKey = ChainKey,
76
- > {
77
- symbols: Symbols[];
78
- assets: AssetsMap<Symbols>;
79
- moonAsset: Asset<Symbols>;
80
- moonChain: MoonChain;
81
- subscribeToAssetsBalanceInfo: (
82
- account: string,
83
- cb: (data: AssetBalanceInfo<Symbols>[]) => void,
84
- ) => UnsubscribePromise;
85
- deposit: (
86
- symbolOrAsset: Symbols | Asset<Symbols>,
87
- ) => XcmSdkDeposit<Symbols, ChainKeys>;
88
- withdraw: (
89
- symbolOrAsset: Symbols | Asset<Symbols>,
90
- ) => XcmSdkWithdraw<Symbols, ChainKeys>;
91
- }
92
- interface XcmSdkDeposit<
93
- Symbols extends AssetSymbol = AssetSymbol,
94
- ChainKeys extends ChainKey = ChainKey,
95
- > {
96
- chains: Chain<ChainKeys>[];
97
- from: (
98
- keyOrChain: ChainKeys | Chain<ChainKeys>,
99
- ) => XcmSdkDepositFrom<Symbols>;
100
- }
101
- interface XcmSdkWithdraw<
102
- Symbols extends AssetSymbol = AssetSymbol,
103
- ChainKeys extends ChainKey = ChainKey,
104
- > {
105
- chains: Chain<ChainKeys>[];
106
- to: (keyOrChain: ChainKeys | Chain<ChainKeys>) => XcmSdkWithdrawTo<Symbols>;
47
+ interface Signers {
48
+ ethersSigner: Signer$1;
49
+ polkadotSigner: Signer | IKeyringPair;
50
+ }
51
+ interface TransferData {
52
+ destination: DestinationChainTransferData;
53
+ getEstimate(amount: number | string): AssetAmount;
54
+ isSwapPossible: boolean;
55
+ max: AssetAmount;
56
+ min: AssetAmount;
57
+ source: SourceChainTransferData;
58
+ swap(): Promise<TransferData | undefined>;
59
+ transfer(amount: bigint | number | string): Promise<string>;
60
+ }
61
+ interface SourceChainTransferData extends ChainTransferData {
62
+ feeBalance: AssetAmount;
63
+ max: AssetAmount;
64
+ }
65
+ interface DestinationChainTransferData extends ChainTransferData {}
66
+ interface ChainTransferData {
67
+ balance: AssetAmount;
68
+ chain: AnyChain;
69
+ existentialDeposit: AssetAmount;
70
+ fee: AssetAmount;
71
+ min: AssetAmount;
107
72
  }
108
- interface XcmSdkDepositFrom<Symbols extends AssetSymbol = AssetSymbol> {
109
- get: (
110
- account: string,
111
- sourceAccount: string | IKeyringPair,
112
- params?: DepositGetParams,
113
- ) => Promise<DepositTransferData<Symbols>>;
114
- }
115
- interface DepositGetParams {
116
- polkadotSigner?: Signer$1;
117
- primaryAccount?: string;
118
- }
119
- interface XcmSdkWithdrawTo<Symbols extends AssetSymbol = AssetSymbol> {
120
- get: (
121
- destinationAccount: string,
122
- params?: WithdrawGetParams,
123
- ) => Promise<WithdrawTransferData<Symbols>>;
124
- }
125
- interface WithdrawGetParams {
126
- ethersSigner?: Signer;
127
- }
128
- interface DepositTransferData<
129
- Symbols extends AssetSymbol = AssetSymbol,
130
- ChainKeys extends ChainKey = ChainKey,
131
- > {
132
- asset: AssetWithDecimals<Symbols>;
133
- existentialDeposit: bigint;
134
- min: bigint;
135
- moonChainFee: XcmFeeWithBalance<Symbols>;
136
- native: AssetWithDecimals<Symbols>;
137
- origin: MoonChain | Chain<ChainKeys>;
138
- source: Chain<ChainKeys>;
139
- sourceBalance: bigint;
140
- sourceFeeBalance?: Balance<Symbols>;
141
- sourceMinBalance: bigint;
142
- getFee: (amount?: bigint) => Promise<bigint>;
143
- send: (amount: bigint, cb?: ExtrinsicEventsCallback) => Promise<Hash>;
144
- }
145
- interface WithdrawTransferData<
146
- Symbols extends AssetSymbol = AssetSymbol,
147
- ChainKeys extends ChainKey = ChainKey,
148
- > {
149
- asset: AssetWithDecimals<Symbols>;
150
- destination: Chain<ChainKeys>;
151
- destinationBalance: bigint;
152
- destinationFee: bigint;
153
- existentialDeposit: bigint;
73
+
74
+ interface GetSourceDataParams {
75
+ transferConfig: TransferConfig;
76
+ destinationAddress: string;
77
+ destinationFee: AssetAmount;
78
+ ethersSigner?: Signer$1;
79
+ polkadot: PolkadotService;
80
+ sourceAddress: string;
81
+ }
82
+ declare function getSourceData({
83
+ transferConfig,
84
+ destinationAddress,
85
+ destinationFee,
86
+ ethersSigner,
87
+ polkadot,
88
+ sourceAddress,
89
+ }: GetSourceDataParams): Promise<SourceChainTransferData>;
90
+ interface GetBalancesParams {
91
+ address: string;
92
+ chain: AnyChain;
93
+ config: AssetConfig;
94
+ polkadot: PolkadotService;
95
+ }
96
+ declare function getBalancesAndMin({
97
+ address,
98
+ chain,
99
+ config,
100
+ polkadot,
101
+ }: GetBalancesParams): Promise<{
102
+ balance: bigint;
103
+ feeBalance: bigint;
154
104
  min: bigint;
155
- minXcmFeeAsset: XcmFeeWithDecimals<Symbols>;
156
- native: AssetWithDecimals<Symbols>;
157
- origin: MoonChain | Chain<ChainKeys>;
158
- originXcmFeeAssetBalance?: bigint;
159
- getFee: (amount: bigint) => Promise<bigint>;
160
- send: (amount: bigint, cb?: ExtrinsicEventsCallback) => Promise<Hash>;
161
- }
162
- interface AssetWithDecimals<Symbols extends AssetSymbol = AssetSymbol>
163
- extends Asset<Symbols> {
164
- decimals: number;
165
- }
166
- interface XcmFeeWithDecimals<Symbols extends AssetSymbol = AssetSymbol> {
105
+ }>;
106
+ interface GetFeeParams {
167
107
  amount: bigint;
108
+ contract?: ContractConfig;
168
109
  decimals: number;
169
- symbol: Symbols;
170
- }
171
- interface Balance<Symbols extends string | AssetSymbol = AssetSymbol> {
172
- balance: bigint;
173
- decimals: number;
174
- symbol: Symbols;
175
- }
176
- interface XcmFeeWithBalance<Symbols extends string | AssetSymbol = AssetSymbol>
177
- extends Balance<Symbols> {
178
- fee: bigint;
179
- }
180
- interface SdkOptions {
181
- ethersSigner?: Signer;
182
- polkadotSigner?: Signer$1;
183
- }
184
-
185
- declare function init(options?: SdkOptions): XcmSdkByChain;
186
-
187
- declare function isXcmSdkDeposit(
188
- config: XcmSdkDeposit | XcmSdkWithdraw,
189
- ): config is XcmSdkDeposit;
190
- declare function isXcmSdkWithdraw(
191
- config: XcmSdkDeposit | XcmSdkWithdraw,
192
- ): config is XcmSdkWithdraw;
193
- declare function isWithdrawTransferData(
194
- data?: WithdrawTransferData | DepositTransferData,
195
- ): data is WithdrawTransferData;
196
- declare function isDepositTransferData(
197
- data?: WithdrawTransferData | DepositTransferData,
198
- ): data is DepositTransferData;
199
-
200
- interface AssetBalanceInfo<
201
- Symbols extends AssetSymbol = AssetSymbol,
202
- ChainKeys extends ChainKey = ChainKey,
203
- > {
204
- asset: Asset<Symbols>;
205
- balance: Balance<string>;
206
- origin: Chain<ChainKeys> | MoonChain;
207
- }
208
- interface XCMType {
209
- Xcm: {
210
- parents: number;
211
- interior: unknown;
212
- };
213
- }
110
+ ethersSigner?: Signer$1;
111
+ extrinsic?: ExtrinsicConfig;
112
+ polkadot: PolkadotService;
113
+ sourceAddress: string;
114
+ }
115
+ declare function getFee({
116
+ amount,
117
+ contract,
118
+ decimals,
119
+ ethersSigner,
120
+ extrinsic,
121
+ polkadot,
122
+ sourceAddress,
123
+ }: GetFeeParams): Promise<bigint>;
124
+ declare function getContractFee(
125
+ amount: bigint,
126
+ config: ContractConfig,
127
+ decimals: number,
128
+ ethersSigner: Signer$1,
129
+ ): Promise<bigint>;
130
+ declare function getExtrinsicFee(
131
+ extrinsic: ExtrinsicConfig,
132
+ polkadot: PolkadotService,
133
+ sourceAddress: string,
134
+ ): Promise<bigint>;
135
+ interface GetMaxParams {
136
+ balanceAmount: AssetAmount;
137
+ existentialDeposit: AssetAmount;
138
+ feeAmount: AssetAmount;
139
+ minAmount: AssetAmount;
140
+ }
141
+ declare function getMax({
142
+ balanceAmount,
143
+ existentialDeposit,
144
+ feeAmount,
145
+ minAmount,
146
+ }: GetMaxParams): AssetAmount;
214
147
 
215
- declare class PolkadotService<
216
- Symbols extends AssetSymbol = AssetSymbol,
217
- ChainKeys extends ChainKey = ChainKey,
218
- > {
219
- #private;
220
- constructor(api: ApiPromise);
221
- static create<
222
- Symbols extends AssetSymbol = AssetSymbol,
223
- ChainKeys extends ChainKey = ChainKey,
224
- >(ws: string): Promise<PolkadotService<Symbols, ChainKeys>>;
225
- getMetadata(): {
226
- decimals: number;
227
- symbol: Symbols;
228
- ss58Format: number;
229
- genesisHash: `0x${string}`;
148
+ interface SdkOptions extends Partial<Signers> {}
149
+ declare function Sdk(options?: SdkOptions): {
150
+ assets(ecosystem?: Ecosystem): {
151
+ assets: Asset[];
152
+ asset(keyOrAsset: string | Asset): {
153
+ sourceChains: AnyChain[];
154
+ source(keyOrChain: string | AnyChain): {
155
+ destinationChains: AnyChain[];
156
+ destination(destKeyOrChain: string | AnyChain): {
157
+ accounts(
158
+ sourceAddress: string,
159
+ destinationAddress: string,
160
+ signers?: Partial<Signers>,
161
+ ): Promise<TransferData>;
162
+ };
163
+ };
164
+ };
230
165
  };
231
- getExistentialDeposit(): bigint;
232
- getAssetDecimals(asset: Asset<Symbols>): Promise<number>;
233
- getAssetMeta(asset: Asset<Symbols>): Promise<PalletAssetsAssetMetadata>;
234
- subscribeToAccountInfo(
235
- account: string,
236
- callback: (info: AccountInfo) => void,
237
- ): UnsubscribePromise;
238
- subscribeToBalance(
239
- account: string,
240
- callback: (balance: bigint) => void,
241
- ): UnsubscribePromise;
242
- getGenericBalance(
243
- account: string,
244
- { pallet, function: fn, getParams, path, calc }: BalanceConfig<Symbols>,
245
- ): Promise<bigint>;
246
- getAssetMinBalance({
247
- pallet,
248
- function: fn,
249
- params,
250
- path,
251
- }: MinBalanceConfig): Promise<bigint>;
252
- getXcmExtrinsic(
253
- account: string,
254
- amount: bigint,
255
- { pallet, extrinsic, getParams }: ExtrinsicConfig<Symbols>,
256
- fee?: bigint,
257
- primaryAccount?: string,
258
- ): SubmittableExtrinsic<'promise'>;
259
- getAssetFee(
260
- asset: Asset,
261
- weight: number,
262
- moonChain: MoonChain,
263
- ): Promise<bigint>;
264
- getUnitsPerSecond(asset: Asset, moonChain: MoonChain): Promise<bigint>;
265
- /**
266
- * this is only for Moon* chains
267
- */
268
- getAssetType(id: string): Promise<XCMType | undefined>;
269
- subscribeToAssetsBalanceInfo(
270
- account: string,
271
- config: XcmConfigBuilder<Symbols, ChainKeys>,
272
- callback: (data: AssetBalanceInfo<Symbols>[]) => void,
273
- ): UnsubscribePromise;
274
- getAssetsMetadata(
275
- assetsArray: Asset<Symbols>[],
276
- ): Promise<PalletAssetsAssetMetadata[]>;
277
- subscribeToAccountBalances(
278
- account: string,
279
- assetsArray: Asset<Symbols>[],
280
- callback: (balances: PalletAssetsAssetAccount[]) => void,
281
- ): UnsubscribePromise;
166
+ getTransferData({
167
+ destinationAddress,
168
+ destinationKeyOrChain,
169
+ ethersSigner,
170
+ keyOrAsset,
171
+ polkadotSigner,
172
+ sourceAddress,
173
+ sourceKeyOrChain,
174
+ }: SdkTransferParams): Promise<TransferData>;
175
+ };
176
+ interface SdkTransferParams extends Partial<Signers> {
177
+ destinationAddress: string;
178
+ destinationKeyOrChain: string | AnyChain;
179
+ keyOrAsset: string | Asset;
180
+ sourceAddress: string;
181
+ sourceKeyOrChain: string | AnyChain;
282
182
  }
283
183
 
284
- declare function createPolkadotServices<
285
- Symbols extends AssetSymbol,
286
- ChainKeys extends ChainKey,
287
- >(ws: string[]): Promise<PolkadotService<Symbols, ChainKeys>[]>;
288
-
289
184
  export {
290
- AssetBalanceInfo,
291
- AssetWithDecimals,
292
- Balance,
293
- DepositGetParams,
294
- DepositTransferData,
295
- MoonXcmSdk,
296
- MoonbaseXcmSdk,
297
- MoonbeamXcmSdk,
298
- MoonriverXcmSdk,
299
- PolkadotService,
185
+ ChainTransferData,
186
+ DestinationChainTransferData,
187
+ GetBalancesParams,
188
+ GetFeeParams,
189
+ GetMaxParams,
190
+ GetSourceDataParams,
191
+ Sdk,
300
192
  SdkOptions,
301
- WithdrawGetParams,
302
- WithdrawTransferData,
303
- XCMType,
304
- XTokensContract,
305
- XcmFeeWithBalance,
306
- XcmFeeWithDecimals,
307
- XcmSdk,
308
- XcmSdkByChain,
309
- XcmSdkDeposit,
310
- XcmSdkDepositFrom,
311
- XcmSdkWithdraw,
312
- XcmSdkWithdrawTo,
313
- createPolkadotServices,
314
- init,
315
- isDepositTransferData,
316
- isWithdrawTransferData,
317
- isXcmSdkDeposit,
318
- isXcmSdkWithdraw,
193
+ SdkTransferParams,
194
+ Signers,
195
+ SourceChainTransferData,
196
+ TransferData,
197
+ getBalancesAndMin,
198
+ getContractFee,
199
+ getExtrinsicFee,
200
+ getFee,
201
+ getMax,
202
+ getSourceData,
319
203
  };
package/build/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{ExtrinsicStatus as cs}from"@moonbeam-network/xcm-utils";import{Contract as L}from"ethers";var I=[{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{constructor(e){this.address="0x0000000000000000000000000000000000000804";this.#s=e,this.#e=new L(this.address,I,e)}#e;#s;async transfer(e,s,n,a,i){return a.xcmFeeAsset?this.#e.transferMultiCurrencies([[a.xcmFeeAsset.asset.erc20Id,i],[n.erc20Id,s]],0,a.getParams(e),a.weight):this.#e.transfer(n.erc20Id,s,a.getParams(e),a.weight)}async getTransferFees(e,s,n,a){let i=(await this.#e.estimateGas.transfer(n.erc20Id,s,a.getParams(e),a.weight)).toBigInt(),m=await this.getGasPrice();return i*m}async getGasPrice(){let{gasPrice:e,maxPriorityFeePerGas:s}=await this.#s.getFeeData();return((e==null?void 0:e.toBigInt())||0n)+((s==null?void 0:s.toBigInt())||0n)}};import"@polkadot/api-augment";import{getPolkadotApi as Q}from"@moonbeam-network/xcm-utils";import E from"lodash";function X(t,e){return BigInt(t)*e/BigInt(10**12)}var P=class{#e;constructor(e){this.#e=e}static async create(e){return new P(await Q(e))}getMetadata(){return{decimals:this.#e.registry.chainDecimals.at(0)||12,symbol:this.#e.registry.chainTokens.at(0),ss58Format:this.#e.registry.chainSS58||42,genesisHash:this.#e.genesisHash.toHex()}}getExistentialDeposit(){var e,s;return((s=(e=this.#e.consts.balances)==null?void 0:e.existentialDeposit)==null?void 0:s.toBigInt())||0n}async getAssetDecimals(e){return(await this.getAssetMeta(e)).decimals.toNumber()}async getAssetMeta(e){return await(e.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata)(e.id)}async subscribeToAccountInfo(e,s){return this.#e.query.system.account(e,s)}async subscribeToBalance(e,s){return this.subscribeToAccountInfo(e,({data:n})=>s(n.free.toBigInt()-n.miscFrozen.toBigInt()))}async getGenericBalance(e,{pallet:s,function:n,getParams:a,path:i,calc:m}){var o;let r=await this.#e.query[s][n](...a(e));if(r.isEmpty)return 0n;let c=((o=r.unwrap)==null?void 0:o.call(r))||r;return m(i.length?E.get(c,i):c)}async getAssetMinBalance({pallet:e,function:s,params:n,path:a}){let i=await this.#e.query[e][s](...n);return i.isEmpty?0n:E.get(i.value,a).toBigInt()}getXcmExtrinsic(e,s,{pallet:n,extrinsic:a,getParams:i},m,r){let c=this.#e.tx[n][a],o=c(...i({account:e,amount:s,extrinsicCall:c,fee:m}));return r&&(o=this.#e.tx.proxy.proxy(r,null,o)),o}async getAssetFee(e,s,n){return X(s,await this.getUnitsPerSecond(e,n))}async getUnitsPerSecond(e,s){if(e.isNative)return s.unitsPerSecond;let n=await this.getAssetType(e.id);return n?(await this.#e.query.assetManager.assetTypeUnitsPerSecond(n)).unwrapOrDefault().toBigInt():0n}async getAssetType(e){return(await this.#e.query.assetManager.assetIdType(e)).unwrapOr(void 0)}async subscribeToAssetsBalanceInfo(e,s,n){let a=Object.values(s.assets),i=await this.getAssetsMetadata(a);return this.subscribeToAccountBalances(e,a,m=>{n(m.map((r,c)=>{var d;let o=a[c],l=i[c],{chains:[y],from:u}=s.deposit(o.originSymbol),{origin:b}=u(y.key);return{asset:o,balance:{balance:r.balance.toBigInt(),decimals:o.isNative?b.decimals:l.decimals.toNumber(),symbol:o.isNative?o.originSymbol:((d=l.symbol.toHuman())==null?void 0:d.toString())||""},origin:b}}))})}async getAssetsMetadata(e){let s=e.map(n=>[n.isLocalAsset?this.#e.query.localAssets.metadata:this.#e.query.assets.metadata,[n.id]]);return this.#e.queryMulti(s)}async subscribeToAccountBalances(e,s,n){let a=s.map(i=>[i.isLocalAsset?this.#e.query.localAssets.account:this.#e.query.assets.account,[i.id,e]]);return this.#e.queryMulti(a,i=>{let m=i.map(r=>r.unwrapOrDefault());n(m)})}};async function M(t){return Promise.all(t.map(e=>P.create(e)))}import{moonbase as se,moonbeam as te,moonriver as ne}from"@moonbeam-network/xcm-config";import ae from"lodash";import{createExtrinsicEventHandler as j}from"@moonbeam-network/xcm-utils";import{isUndefined as R}from"@polkadot/util";function z({account:t,config:e,foreignPolkadot:s,primaryAccount:n,fee:a}){return i=>s.getXcmExtrinsic(t,i,e.extrinsic,a,n)}async function F({account:t,asset:e,config:s,foreignPolkadot:n,moonChain:a,nativeAsset:i,origin:m,polkadot:r,polkadotSigner:c,primaryAccount:o,sourceAccount:l}){var K,x;let y=typeof l=="string"?l:l.address,u=n.getMetadata(),b={asset:((K=s.xcmFeeAsset)==null?void 0:K.asset)??e,balance:((x=s.xcmFeeAsset)==null?void 0:x.balance)??s.balance},[d,p,f,h,A=0n,S,g,C]=await Promise.all([e.isNative?a.decimals:r.getAssetDecimals(e),n.getExistentialDeposit(),n.getGenericBalance(o||y,s.balance),s.sourceFeeBalance?n.getGenericBalance(y,s.sourceFeeBalance):void 0,s.sourceMinBalance?n.getAssetMinBalance(s.sourceMinBalance):void 0,r.getAssetFee(b.asset,s.source.weight,a),n.getGenericBalance(o||y,b.balance),r.getAssetDecimals(b.asset)]),k=s.xcmFeeAsset?0n:S,B=z({account:t,config:s,foreignPolkadot:n,primaryAccount:o,fee:S});return{asset:{...e,decimals:d},existentialDeposit:p,min:k,moonChainFee:{balance:g,decimals:b.asset.isNative?a.decimals:C,fee:S,symbol:b.asset.originSymbol},native:{...i,decimals:u.decimals},origin:m,source:{...s.source},sourceBalance:f,sourceFeeBalance:R(h)?void 0:{...u,balance:h},sourceMinBalance:A,getFee:async(w=f)=>(await B(w).paymentInfo(l)).partialFee.toBigInt(),send:async(w,D)=>(await B(w).signAndSend(l,{signer:c},D&&j(s.extrinsic.pallet,s.extrinsic.successEvent,D))).toString()}}import{toDecimal as W}from"@moonbeam-network/xcm-utils";function _(t){return!!t.from}function J(t){return!!t.to}function V(t){return!!(t!=null&&t.destination)}function Y(t){return!!(t!=null&&t.moonChainFee)}function Z(t,e){if(t.asset.isNative)return-1;if(e.asset.isNative)return 1;let s=W(t.balance.balance,t.balance.decimals),n=W(e.balance.balance,e.balance.decimals);if(s||n)return n-s;let a=(t.origin.name+t.asset.originSymbol).toLowerCase(),i=(e.origin.name+e.asset.originSymbol).toLowerCase();return a<i?-1:a>i?1:0}async function G({account:t,polkadot:e,configBuilder:s,cb:n}){let a=0n,i=[],m=o=>{let l=typeof o=="bigint";a=l?o:a,i=(l?i:o).map(y=>(y.asset.isNative&&(y.balance.balance=a),y)).sort(Z),i.length&&n(i)},r=await e.subscribeToBalance(t,m),c=await e.subscribeToAssetsBalanceInfo(t,s,m);return()=>{r(),c()}}function q(t){return{id:"",erc20Id:"",originSymbol:t}}import{createTxEventHandler as $}from"@moonbeam-network/xcm-utils";async function O({asset:t,config:e,contract:s,originAccount:n,destinationAccount:a,destinationPolkadot:i,ethersSigner:m,moonChain:r,nativeAsset:c,origin:o,polkadot:l}){var B,K;let y=i.getMetadata(),u=((B=e.xcmFeeAsset)==null?void 0:B.asset)??t,[b,d,p,f,h,A,S]=await Promise.all([t.isNative?r.decimals:l.getAssetDecimals(t),e.xcmFeeAsset?await l.getGenericBalance(n,(K=e.xcmFeeAsset)==null?void 0:K.balance.origin):void 0,i.getGenericBalance(a,e.balance),e.xcmFeeAsset?i.getGenericBalance(a,e.xcmFeeAsset.balance.destination):void 0,t.isNative?0n:i.getExistentialDeposit(),e.sourceMinBalance?i.getAssetMinBalance(e.sourceMinBalance):0n,l.getAssetDecimals(u)]),g=ee(A,e),C=e.xcmFeeAsset?0n:N(A||h,p,g),k=e.xcmFeeAsset&&f!==void 0?N(A||h,f,g):0n;return{asset:{...t,decimals:b},destination:{...e.destination},destinationBalance:p,destinationFee:g,existentialDeposit:h,min:C,minXcmFeeAsset:{amount:k,decimals:S,symbol:u.originSymbol},native:{...c,decimals:y.decimals},origin:o,originXcmFeeAssetBalance:d,getFee:async x=>s.getTransferFees(a,x,t,e),send:async(x,w)=>{let D=await s.transfer(a,x,t,e,k);return w&&$(m,D.hash,w),D.hash}}}function ee(t,e){let s=BigInt(e.weight*e.feePerWeight);return t>s?t:s}function N(t,e,s){let n=e>=t?0n:t-e;return s+n}function ss(t){return{moonbase:v(se,t),moonbeam:v(te,t),moonriver:v(ne,t)}}function v(t,e){let{symbols:s,assets:n,moonAsset:a,moonChain:i}=t;return{symbols:s,assets:n,moonAsset:a,moonChain:i,subscribeToAssetsBalanceInfo:async(m,r)=>{let[c]=await M([t.moonChain.ws]);return G({account:m,polkadot:c,configBuilder:t,cb:r})},deposit:m=>{let{chains:r,from:c}=t.deposit(m);return{chains:r,from:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,d,{primaryAccount:p,polkadotSigner:f}={})=>{let h=f||(e==null?void 0:e.polkadotSigner);if(ae.isString(d)&&!h)throw new Error("Polkadot Signer/KeyringPair are not provided to XCM-SDK");let[A,S]=await M([t.moonChain.ws,u.source.ws]),g=S.getMetadata(),C=t.assets[g.symbol]||q(g.symbol);return F({account:b,asset:l,config:u,foreignPolkadot:S,moonChain:i,nativeAsset:C,origin:y,polkadot:A,polkadotSigner:h,primaryAccount:p,sourceAccount:d})}}}}},withdraw:m=>{let{chains:r,to:c}=t.withdraw(m);return{chains:r,to:o=>{let{asset:l,origin:y,config:u}=c(o);return{get:async(b,{ethersSigner:d}={})=>{let p=d||(e==null?void 0:e.ethersSigner);if(!p)throw new Error("Ethers signer is not provided to XCM-SDK");let f=await p.getAddress(),h=new T(p),[A,S]=await M([t.moonChain.ws,u.destination.ws]),g=S.getMetadata(),C=t.assets[g.symbol];return O({asset:l,config:u,contract:h,originAccount:f,destinationAccount:b,destinationPolkadot:S,ethersSigner:p,moonChain:i,nativeAsset:C,origin:y,polkadot:A})}}}}}}}export{cs as ExtrinsicStatus,P as PolkadotService,T as XTokensContract,M as createPolkadotServices,ss as init,Y as isDepositTransferData,V as isWithdrawTransferData,_ as isXcmSdkDeposit,J as isXcmSdkWithdraw};
1
+ import{AssetAmount as E}from"@moonbeam-network/xcm-types";import{convertDecimals as X}from"@moonbeam-network/xcm-utils";import v from"big.js";import{Contract as N}from"ethers";var M=[{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 x=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new N(this.address,M,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),n=await this.getGasPrice();return e*n}catch(e){return console.error(e),0n}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function w(r,t){if(r.module==="Xtokens")return new x(r,t);throw new Error(`Contract ${r.module} not found`)}async function G({transferConfig:r,destinationAddress:t,destinationFee:e,ethersSigner:n,polkadot:s,sourceAddress:a}){var T,I,k;let{asset:i,destination:c,source:{chain:o,config:m}}=r,f=E.fromAsset(i,{amount:0n,decimals:await s.getAssetDecimals(i)}),p=(T=m.fee)!=null&&T.asset?E.fromAsset(m.fee.asset,{amount:0n,decimals:await s.getAssetDecimals(m.fee.asset)}):f,{balance:u,feeBalance:g,min:A}=await $({address:a,chain:o,config:m,polkadot:s}),h=(I=m.extrinsic)==null?void 0:I.build({address:t,amount:u,asset:o.getAssetId(i),destination:c.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),P=(k=m.contract)==null?void 0:k.build({address:t,amount:u,asset:o.getAssetId(i),destination:c.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),C=await Q({amount:u,contract:P,decimals:p.decimals,ethersSigner:n,extrinsic:h,polkadot:s,sourceAddress:a}),y=f.copyWith({amount:u}),{existentialDeposit:b}=s,D=p.copyWith({amount:C}),K=p.copyWith({amount:g}),B=f.copyWith({amount:A}),R=H({balanceAmount:y,existentialDeposit:b,feeAmount:D,minAmount:B});return{balance:y,chain:o,existentialDeposit:b,fee:D,feeBalance:K,max:R,min:B}}async function $({address:r,chain:t,config:e,polkadot:n}){let s=await n.query(e.balance.build({address:r,asset:t.getBalanceAssetId(e.asset)})),a=e.fee?await n.query(e.fee.balance.build({address:r,asset:t.getBalanceAssetId(e.fee.asset)})):s,i=e.min?await n.query(e.min.build({asset:t.getMinAssetId(e.asset)})):0n;return{balance:s,feeBalance:a,min:i}}async function Q({amount:r,contract:t,decimals:e,ethersSigner:n,extrinsic:s,polkadot:a,sourceAddress:i}){if(t){if(!n)throw new Error("Ethers signer must be provided");return j(r,t,e,n)}if(s)return L(s,a,i);throw new Error("Either contract or extrinsic must be provided")}async function j(r,t,e,n){let a=await w(t,n).getFee(r);return X(a,18,e)}async function L(r,t,e){return t.getFee(e,r)}function H({balanceAmount:r,existentialDeposit:t,feeAmount:e,minAmount:n}){let s=r.toBig().minus(n.toBig()).minus(r.isSame(t)?t.toBig():v(0)).minus(r.isSame(e)?e.toBig():v(0));return r.copyWith({amount:s.lt(0)?0n:BigInt(s.toFixed())})}import{ConfigBuilder as O}from"@moonbeam-network/xcm-config";import{convertDecimals as nt,toBigInt as W}from"@moonbeam-network/xcm-utils";import l from"big.js";import{AssetAmount as F}from"@moonbeam-network/xcm-types";import{toBigInt as J}from"@moonbeam-network/xcm-utils";async function q({transferConfig:r,destinationAddress:t,polkadot:e}){let{asset:n,destination:{chain:s,config:a}}=r,i=F.fromAsset(n,{amount:0n,decimals:await e.getAssetDecimals(n)}),{balance:c,min:o}=await U({address:t,chain:s,config:a,polkadot:e}),m=i.copyWith({amount:c}),{existentialDeposit:f}=e,p=await V({config:r,polkadot:e}),u=i.copyWith({amount:o});return{balance:m,chain:s,existentialDeposit:f,fee:p,min:u}}async function U({address:r,config:t,chain:e,polkadot:n}){let s=await n.query(t.balance.build({address:r,asset:e.getBalanceAssetId(t.asset)})),a=t.min?await n.query(t.min.build({asset:e.getMinAssetId(t.asset)})):0n;return{balance:s,min:a}}async function V({config:r,polkadot:t}){let{amount:e,asset:n}=r.source.config.destinationFee,s=await t.getAssetDecimals(n),a=F.fromAsset(n,{amount:0n,decimals:s});if(Number.isFinite(e))return a.copyWith({amount:J(e,s)});let i=e.build({api:t.api,asset:t.chain.getAssetId(n)});return a.copyWith({amount:await i.call()})}import"@polkadot/api-augment";import{assetsMap as Y,eq as Z,equilibriumAlphanet as _}from"@moonbeam-network/xcm-config";import{AssetAmount as tt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as et}from"@moonbeam-network/xcm-utils";var d=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new d(await et(t.ws),t)}static async createMulti(t){return Promise.all(t.map(d.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===_.key)return Z;if(!e)throw new Error("No native symbol key found");let n=Y.get(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var s,a;let t=(s=this.api.consts.balances)==null?void 0:s.existentialDeposit,e=(a=this.api.consts.eqBalances)==null?void 0:a.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return tt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var a,i,c,o;let e=((a=this.api.query.assets)==null?void 0:a.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadataMap);if(!e)return;let n=await e(t),s="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:s.decimals.toNumber(),symbol:s.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],s=e.getArgs(n);return(await n(...s).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let s=this.api.tx[e.module][e.func],a=e.getArgs(s);return(await s(...a).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};async function S({destinationAddress:r,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:s}){let[a,i]=await d.createMulti([s.destination.chain,s.source.chain]),c=await q({destinationAddress:r,polkadot:a,transferConfig:s}),o=await rt(i,c.fee),m=await G({destinationAddress:r,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:n,transferConfig:s});return{destination:c,getEstimate(f){let u=l(W(f,m.balance.decimals).toString()).minus(m.balance.isSame(o)?o.toBig():l(0));return m.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toString())})},isSwapPossible:!0,max:m.max,min:st(c),source:m,async swap(){return S({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:r,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(f){var C,y;let p=W(f,m.balance.decimals),{asset:u,source:{chain:g,config:A}}=s,h=(C=A.contract)==null?void 0:C.build({address:r,amount:p,asset:g.getAssetId(u),destination:c.chain,fee:o.amount,feeAsset:g.getAssetId(o)}),P=(y=A.extrinsic)==null?void 0:y.build({address:r,amount:p,asset:g.getAssetId(u),destination:c.chain,fee:o.amount,feeAsset:g.getAssetId(o),palletInstance:g.getAssetPalletInstance(u),source:g});if(h){if(!t)throw new Error("Ethers signer must be provided");return w(h,t).transfer().then(b=>b.hash)}if(P){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(n,P,e)}throw new Error("Either contract or extrinsic must be provided")}}}function st({balance:r,existentialDeposit:t,fee:e,min:n}){let s=l(0).plus(r.isSame(e)?e.toBig():l(0)).plus(r.isSame(t)&&r.toBig().lt(t.toBig())?t.toBig():l(0)).plus(r.toBig().lt(n.toBig())?n.toBig():l(0));return r.copyWith({amount:BigInt(s.toFixed())})}async function rt(r,t){let e=await r.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:nt(t.amount,t.decimals,e),decimals:e})}function Ut(r){return{assets(t){let{assets:e,asset:n}=O().assets(t);return{assets:e,asset(s){let{sourceChains:a,source:i}=n(s);return{sourceChains:a,source(c){let{destinationChains:o,destination:m}=i(c);return{destinationChains:o,destination(f){return{async accounts(p,u,g){return S({...r,...g,destinationAddress:u,sourceAddress:p,transferConfig:m(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:n,keyOrAsset:s,polkadotSigner:a,sourceAddress:i,sourceKeyOrChain:c}){return S({destinationAddress:t,ethersSigner:n,polkadotSigner:a,sourceAddress:i,transferConfig:O().assets().asset(s).source(c).destination(e).build()})}}}export{Ut as Sdk,$ as getBalancesAndMin,j as getContractFee,L as getExtrinsicFee,Q as getFee,H as getMax,G as getSourceData};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/contracts/XTokensContract/XTokensContract.ts","../src/polkadot/PolkadotService.ts","../src/polkadot/polkadot.utils.ts","../src/polkadot/polkadot.factory.ts","../src/sdk/sdk.ts","../src/sdk/sdk.deposit.ts","../src/sdk/sdk.utils.ts","../src/sdk/sdk.withdraw.ts"],"sourcesContent":["export { ExtrinsicStatus } from '@moonbeam-network/xcm-utils';\nexport type {\n ExtrinsicEvent,\n ExtrinsicEventsCallback,\n ExtrinsicFailedEvent,\n ExtrinsicSentEvent,\n ExtrinsicSuccessEvent,\n} from '@moonbeam-network/xcm-utils';\nexport * from './contracts';\nexport * from './polkadot';\nexport * from './sdk';\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport {\n Asset,\n AssetSymbol,\n WithdrawXTokensConfig,\n} from '@moonbeam-network/xcm-config';\nimport { Contract, Signer } from 'ethers';\n\nimport ContractInterface from './XTokensABI.json';\n\nexport class XTokensContract<Symbols extends AssetSymbol = AssetSymbol> {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(signer: Signer) {\n this.#signer = signer;\n this.#contract = new Contract(this.address, ContractInterface, signer);\n }\n\n async transfer(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n minAmount: bigint,\n ): Promise<TransactionResponse> {\n if (config.xcmFeeAsset) {\n return this.#contract.transferMultiCurrencies(\n [\n [config.xcmFeeAsset.asset.erc20Id, minAmount],\n [asset.erc20Id, amount],\n ],\n 0,\n config.getParams(account),\n config.weight,\n );\n }\n return this.#contract.transfer(\n asset.erc20Id,\n amount,\n config.getParams(account),\n config.weight,\n );\n }\n\n async getTransferFees(\n account: string,\n amount: bigint,\n asset: Asset<Symbols>,\n config: WithdrawXTokensConfig<Symbols>,\n ) {\n const estimatedGas = (\n await this.#contract.estimateGas.transfer(\n asset.erc20Id,\n amount,\n config.getParams(account),\n config.weight,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","import '@polkadot/api-augment';\n\nimport {\n Asset,\n AssetSymbol,\n BalanceConfig,\n ChainKey,\n ExtrinsicConfig,\n MinBalanceConfig,\n MoonChain,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport {\n QueryableStorageMultiArg,\n SubmittableExtrinsic,\n UnsubscribePromise,\n} from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { AccountInfo } from '@polkadot/types/interfaces';\nimport {\n PalletAssetsAssetAccount,\n PalletAssetsAssetMetadata,\n} from '@polkadot/types/lookup';\nimport _ from 'lodash';\nimport { AssetBalanceInfo, XCMType } from './polkadot.interfaces';\nimport { calculateMin } from './polkadot.utils';\n\nexport class PolkadotService<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n> {\n readonly #api: ApiPromise;\n\n constructor(api: ApiPromise) {\n this.#api = api;\n }\n\n static async create<\n Symbols extends AssetSymbol = AssetSymbol,\n ChainKeys extends ChainKey = ChainKey,\n >(ws: string): Promise<PolkadotService<Symbols, ChainKeys>> {\n return new PolkadotService(await getPolkadotApi(ws));\n }\n\n getMetadata() {\n return {\n decimals: this.#api.registry.chainDecimals.at(0) || 12,\n symbol: this.#api.registry.chainTokens.at(0) as Symbols,\n ss58Format: this.#api.registry.chainSS58 || 42,\n genesisHash: this.#api.genesisHash.toHex(),\n };\n }\n\n getExistentialDeposit(): bigint {\n return (\n (\n this.#api.consts.balances?.existentialDeposit as unknown as\n | u128\n | undefined\n )?.toBigInt() || 0n\n );\n }\n\n async getAssetDecimals(asset: Asset<Symbols>): Promise<number> {\n const meta = await this.getAssetMeta(asset);\n\n return meta.decimals.toNumber();\n }\n\n async getAssetMeta(\n asset: Asset<Symbols>,\n ): Promise<PalletAssetsAssetMetadata> {\n const data = await (asset.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata)(asset.id);\n\n return data as unknown as PalletAssetsAssetMetadata;\n }\n\n async subscribeToAccountInfo(\n account: string,\n callback: (info: AccountInfo) => void,\n ): UnsubscribePromise {\n return (this.#api.query.system.account as any)(account, callback);\n }\n\n async subscribeToBalance(\n account: string,\n callback: (balance: bigint) => void,\n ): UnsubscribePromise {\n return this.subscribeToAccountInfo(account, ({ data }) =>\n callback(data.free.toBigInt() - data.miscFrozen.toBigInt()),\n );\n }\n\n async getGenericBalance(\n account: string,\n { pallet, function: fn, getParams, path, calc }: BalanceConfig<Symbols>,\n ): Promise<bigint> {\n const response = await this.#api.query[pallet][fn](...getParams(account));\n\n if (response.isEmpty) {\n return 0n;\n }\n\n const unwrapped = (response as any).unwrap?.() || response;\n\n return calc(path.length ? _.get(unwrapped, path) : unwrapped);\n }\n\n async getAssetMinBalance({\n pallet,\n function: fn,\n params,\n path,\n }: MinBalanceConfig): Promise<bigint> {\n const details = (await this.#api.query[pallet][fn](\n ...params,\n )) as unknown as Option<any>;\n\n if (details.isEmpty) {\n return 0n;\n }\n\n return _.get(details.value, path).toBigInt();\n }\n\n getXcmExtrinsic(\n account: string,\n amount: bigint,\n { pallet, extrinsic, getParams }: ExtrinsicConfig<Symbols>,\n fee?: bigint,\n primaryAccount?: string,\n ): SubmittableExtrinsic<'promise'> {\n const call = this.#api.tx[pallet][extrinsic];\n\n let transferExtrinsic = call(\n ...getParams({\n account,\n amount,\n extrinsicCall: call,\n fee,\n }),\n );\n\n if (primaryAccount) {\n transferExtrinsic = this.#api.tx.proxy.proxy(\n primaryAccount,\n null,\n transferExtrinsic,\n );\n }\n\n return transferExtrinsic;\n }\n\n async getAssetFee(\n asset: Asset,\n weight: number,\n moonChain: MoonChain,\n ): Promise<bigint> {\n return calculateMin(weight, await this.getUnitsPerSecond(asset, moonChain));\n }\n\n async getUnitsPerSecond(asset: Asset, moonChain: MoonChain): Promise<bigint> {\n if (asset.isNative) {\n return moonChain.unitsPerSecond;\n }\n const type = await this.getAssetType(asset.id);\n\n if (!type) {\n return 0n;\n }\n\n const res = (await this.#api.query.assetManager.assetTypeUnitsPerSecond(\n type,\n )) as unknown as Option<u128>;\n\n return res.unwrapOrDefault().toBigInt();\n }\n\n /**\n * this is only for Moon* chains\n */\n async getAssetType(id: string): Promise<XCMType | undefined> {\n const type = (await this.#api.query.assetManager.assetIdType(\n id,\n )) as unknown as Option<any>;\n\n return type.unwrapOr(undefined);\n }\n\n async subscribeToAssetsBalanceInfo(\n account: string,\n config: XcmConfigBuilder<Symbols, ChainKeys>,\n callback: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise {\n const assetsArray = Object.values<Asset<Symbols>>(config.assets);\n const metadata = await this.getAssetsMetadata(assetsArray);\n\n return this.subscribeToAccountBalances(account, assetsArray, (data) => {\n callback(\n data.map((balance, index): AssetBalanceInfo<Symbols> => {\n const asset = assetsArray[index];\n const meta = metadata[index];\n const {\n chains: [chain],\n from,\n } = config.deposit(asset.originSymbol);\n const { origin } = from(chain.key);\n\n return {\n asset,\n balance: {\n balance: balance.balance.toBigInt(),\n decimals: asset.isNative\n ? (origin as MoonChain).decimals\n : meta.decimals.toNumber(),\n symbol: asset.isNative\n ? asset.originSymbol\n : meta.symbol.toHuman()?.toString() || '',\n },\n origin,\n };\n }),\n );\n });\n }\n\n async getAssetsMetadata(\n assetsArray: Asset<Symbols>[],\n ): Promise<PalletAssetsAssetMetadata[]> {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.metadata\n : this.#api.query.assets.metadata,\n [x.id],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries) as unknown as Promise<\n PalletAssetsAssetMetadata[]\n >;\n }\n\n async subscribeToAccountBalances(\n account: string,\n assetsArray: Asset<Symbols>[],\n callback: (balances: PalletAssetsAssetAccount[]) => void,\n ): UnsubscribePromise {\n const queries = assetsArray.map(\n (x) =>\n [\n x.isLocalAsset\n ? this.#api.query.localAssets.account\n : this.#api.query.assets.account,\n [x.id, account],\n ] as QueryableStorageMultiArg<'promise'>,\n );\n\n return this.#api.queryMulti(queries, (res: unknown) => {\n const response = (res as Array<Option<PalletAssetsAssetAccount>>).map(\n (item) => item.unwrapOrDefault(),\n );\n\n callback(response);\n });\n }\n}\n","export function calculateMin(weight: number, unitsPerSecond: bigint): bigint {\n // 10**12 weight = 1 second\n return (BigInt(weight) * unitsPerSecond) / BigInt(10 ** 12);\n}\n","import { AssetSymbol, ChainKey } from '@moonbeam-network/xcm-config';\nimport { PolkadotService } from './PolkadotService';\n\nexport async function createPolkadotServices<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>(ws: string[]): Promise<PolkadotService<Symbols, ChainKeys>[]> {\n return Promise.all(\n ws.map((url) => PolkadotService.create<Symbols, ChainKeys>(url)),\n );\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n moonbase,\n MoonbaseAssets,\n MoonbaseChains,\n moonbeam,\n MoonbeamAssets,\n MoonbeamChains,\n moonriver,\n MoonriverAssets,\n MoonriverChains,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport _ from 'lodash';\nimport { XTokensContract } from '../contracts';\nimport { AssetBalanceInfo, createPolkadotServices } from '../polkadot';\nimport { getDepositData } from './sdk.deposit';\nimport {\n DepositTransferData,\n SdkOptions,\n WithdrawGetParams,\n WithdrawTransferData,\n XcmSdk,\n XcmSdkByChain,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\nimport { createDummyAsset, subscribeToAssetsBalanceInfo } from './sdk.utils';\nimport { getWithdrawData } from './sdk.withdraw';\n\nexport function init(options?: SdkOptions): XcmSdkByChain {\n return {\n moonbase: initByChain<MoonbaseAssets, MoonbaseChains>(moonbase, options),\n moonbeam: initByChain<MoonbeamAssets, MoonbeamChains>(moonbeam, options),\n moonriver: initByChain<MoonriverAssets, MoonriverChains>(\n moonriver,\n options,\n ),\n };\n}\n\nfunction initByChain<Symbols extends AssetSymbol, ChainKeys extends ChainKey>(\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>,\n options?: SdkOptions,\n): XcmSdk<Symbols, ChainKeys> {\n const { symbols, assets, moonAsset, moonChain } = configBuilder;\n\n return {\n symbols,\n assets,\n moonAsset,\n moonChain,\n subscribeToAssetsBalanceInfo: async (\n account: string,\n cb: (data: AssetBalanceInfo<Symbols>[]) => void,\n ): UnsubscribePromise => {\n const [polkadot] = await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n ]);\n\n return subscribeToAssetsBalanceInfo({\n account,\n polkadot,\n configBuilder,\n cb,\n });\n },\n deposit: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkDeposit<Symbols, ChainKeys> => {\n const { chains, from } = configBuilder.deposit(symbolOrAsset);\n\n return {\n chains,\n from: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = from(keyOrChain);\n\n return {\n get: async (\n account: string,\n sourceAccount: string | IKeyringPair,\n { primaryAccount, polkadotSigner } = {},\n ): Promise<DepositTransferData<Symbols>> => {\n const signer = polkadotSigner || options?.polkadotSigner;\n\n if (_.isString(sourceAccount) && !signer) {\n throw new Error(\n 'Polkadot Signer/KeyringPair are not provided to XCM-SDK',\n );\n }\n\n const [polkadot, foreignPolkadot] = await createPolkadotServices<\n Symbols,\n ChainKeys\n >([configBuilder.moonChain.ws, config.source.ws]);\n const meta = foreignPolkadot.getMetadata();\n const nativeAsset =\n configBuilder.assets[meta.symbol] ||\n createDummyAsset(meta.symbol);\n\n return getDepositData({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner: signer,\n primaryAccount,\n sourceAccount,\n });\n },\n };\n },\n };\n },\n withdraw: (\n symbolOrAsset: Symbols | Asset<Symbols>,\n ): XcmSdkWithdraw<Symbols, ChainKeys> => {\n const { chains, to } = configBuilder.withdraw(symbolOrAsset);\n\n return {\n chains,\n to: (keyOrChain: ChainKeys | Chain<ChainKeys>) => {\n const { asset, origin, config } = to(keyOrChain);\n\n return {\n get: async (\n destinationAccount: string,\n { ethersSigner }: WithdrawGetParams = {},\n ): Promise<WithdrawTransferData<Symbols>> => {\n const signer = ethersSigner || options?.ethersSigner;\n\n if (!signer) {\n throw new Error('Ethers signer is not provided to XCM-SDK');\n }\n const originAccount = await signer.getAddress();\n\n const contract = new XTokensContract<Symbols>(signer);\n const [polkadot, destinationPolkadot] =\n await createPolkadotServices<Symbols, ChainKeys>([\n configBuilder.moonChain.ws,\n config.destination.ws,\n ]);\n const meta = destinationPolkadot.getMetadata();\n const nativeAsset = configBuilder.assets[meta.symbol];\n\n return getWithdrawData({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner: signer,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n });\n },\n };\n },\n };\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n DepositConfig,\n MoonChain,\n} from '@moonbeam-network/xcm-config';\nimport {\n createExtrinsicEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport type { IKeyringPair } from '@polkadot/types/types';\nimport { isUndefined } from '@polkadot/util';\nimport { PolkadotService } from '../polkadot';\nimport { DepositTransferData } from './sdk.interfaces';\n\nexport interface CreateExtrinsicOptions<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n config: DepositConfig<Symbols>;\n fee?: bigint;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n primaryAccount?: string;\n}\n\nexport function getCreateExtrinsic<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee,\n}: CreateExtrinsicOptions<Symbols, ChainKeys>) {\n return (amount: bigint): any =>\n foreignPolkadot.getXcmExtrinsic(\n account,\n amount,\n config.extrinsic,\n fee,\n primaryAccount,\n );\n}\n\nexport interface GetDepositDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n asset: Asset<Symbols>;\n config: DepositConfig<Symbols>;\n foreignPolkadot: PolkadotService<Symbols, ChainKeys>;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n polkadotSigner?: PolkadotSigner;\n primaryAccount?: string;\n sourceAccount: string | IKeyringPair;\n}\n\nexport async function getDepositData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n asset,\n config,\n foreignPolkadot,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n polkadotSigner,\n primaryAccount,\n sourceAccount,\n}: GetDepositDataParams<Symbols, ChainKeys>): Promise<\n DepositTransferData<Symbols>\n> {\n const sourceAddress =\n typeof sourceAccount === 'string' ? sourceAccount : sourceAccount.address;\n const meta = foreignPolkadot.getMetadata();\n const xcmFeeAssetConfig = {\n asset: config.xcmFeeAsset?.asset ?? asset,\n balance: config.xcmFeeAsset?.balance ?? config.balance,\n };\n\n const [\n assetDecimals,\n existentialDeposit,\n sourceBalance,\n sourceFeeBalance,\n sourceMinBalance = 0n,\n xcmFee,\n xcmFeeBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // assetDecimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // existentialDeposit\n foreignPolkadot.getExistentialDeposit(),\n // sourceBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n config.balance,\n ),\n // sourceFeeBalance\n config.sourceFeeBalance\n ? foreignPolkadot.getGenericBalance(\n sourceAddress,\n config.sourceFeeBalance,\n )\n : undefined,\n // sourceMinBalance\n config.sourceMinBalance\n ? foreignPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : undefined,\n // xcmFee\n polkadot.getAssetFee(\n xcmFeeAssetConfig.asset,\n config.source.weight,\n moonChain,\n ),\n // xcmFeeBalance\n foreignPolkadot.getGenericBalance(\n primaryAccount || sourceAddress,\n xcmFeeAssetConfig.balance,\n ),\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAssetConfig.asset),\n ]);\n\n // Min is basically the XCM fee, if it's the same asset. If less is sent then\n // Moon* won't process the message.\n const min = config.xcmFeeAsset ? 0n : xcmFee;\n const createExtrinsic = getCreateExtrinsic({\n account,\n config,\n foreignPolkadot,\n primaryAccount,\n fee: xcmFee,\n });\n\n return {\n asset: { ...asset, decimals: assetDecimals },\n existentialDeposit,\n min,\n moonChainFee: {\n balance: xcmFeeBalance,\n decimals: xcmFeeAssetConfig.asset.isNative\n ? moonChain.decimals\n : xcmFeeDecimals,\n fee: xcmFee,\n symbol: xcmFeeAssetConfig.asset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n source: {\n ...config.source,\n },\n sourceBalance,\n sourceFeeBalance: !isUndefined(sourceFeeBalance)\n ? { ...meta, balance: sourceFeeBalance }\n : undefined,\n sourceMinBalance,\n getFee: async (amount = sourceBalance): Promise<bigint> => {\n const extrinsic = createExtrinsic(amount);\n const info = await extrinsic.paymentInfo(sourceAccount);\n\n return info.partialFee.toBigInt();\n },\n send: async (\n amount: bigint,\n cb?: ExtrinsicEventsCallback,\n ): Promise<string> => {\n const extrinsic = createExtrinsic(amount);\n const hash = await extrinsic.signAndSend(\n sourceAccount,\n {\n signer: polkadotSigner,\n },\n\n cb &&\n createExtrinsicEventHandler(\n config.extrinsic.pallet,\n config.extrinsic.successEvent,\n cb,\n ),\n );\n\n return hash.toString();\n },\n };\n}\n","import {\n Asset,\n AssetSymbol,\n ChainKey,\n XcmConfigBuilder,\n} from '@moonbeam-network/xcm-config';\nimport { toDecimal } from '@moonbeam-network/xcm-utils';\nimport { UnsubscribePromise } from '@polkadot/api/types';\nimport { AssetBalanceInfo, PolkadotService } from '../polkadot';\nimport {\n DepositTransferData,\n WithdrawTransferData,\n XcmSdkDeposit,\n XcmSdkWithdraw,\n} from './sdk.interfaces';\n\nexport function isXcmSdkDeposit(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkDeposit {\n return !!(config as XcmSdkDeposit).from;\n}\n\nexport function isXcmSdkWithdraw(\n config: XcmSdkDeposit | XcmSdkWithdraw,\n): config is XcmSdkWithdraw {\n return !!(config as XcmSdkWithdraw).to;\n}\n\nexport function isWithdrawTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is WithdrawTransferData {\n return !!(data as WithdrawTransferData)?.destination;\n}\n\nexport function isDepositTransferData(\n data?: WithdrawTransferData | DepositTransferData,\n): data is DepositTransferData {\n return !!(data as DepositTransferData)?.moonChainFee;\n}\n\nexport function sortByBalanceAndChainName<Symbols extends AssetSymbol>(\n a: AssetBalanceInfo<Symbols>,\n b: AssetBalanceInfo<Symbols>,\n) {\n if (a.asset.isNative) {\n return -1;\n }\n\n if (b.asset.isNative) {\n return 1;\n }\n\n const aDecimal = toDecimal(a.balance.balance, a.balance.decimals);\n const bDecimal = toDecimal(b.balance.balance, b.balance.decimals);\n\n if (aDecimal || bDecimal) {\n return bDecimal - aDecimal;\n }\n\n const aName = (a.origin.name + a.asset.originSymbol).toLowerCase();\n const bName = (b.origin.name + b.asset.originSymbol).toLowerCase();\n\n if (aName < bName) {\n return -1;\n }\n\n if (aName > bName) {\n return 1;\n }\n\n return 0;\n}\n\nexport interface SubscribeToAssetsBalanceInfoParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n account: string;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n configBuilder: XcmConfigBuilder<Symbols, ChainKeys>;\n cb: (data: AssetBalanceInfo<Symbols>[]) => void;\n}\n\nexport async function subscribeToAssetsBalanceInfo<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n account,\n polkadot,\n configBuilder,\n cb,\n}: SubscribeToAssetsBalanceInfoParams<Symbols, ChainKeys>): UnsubscribePromise {\n let lastBalance = 0n;\n let lastInfo: AssetBalanceInfo<Symbols>[] = [];\n const handler = (data: bigint | AssetBalanceInfo<Symbols>[]) => {\n const isBalance = typeof data === 'bigint';\n\n lastBalance = isBalance ? data : lastBalance;\n lastInfo = (isBalance ? lastInfo : data)\n .map((info) => {\n if (info.asset.isNative) {\n // eslint-disable-next-line no-param-reassign\n info.balance.balance = lastBalance;\n }\n\n return info;\n })\n .sort(sortByBalanceAndChainName);\n\n if (lastInfo.length) {\n cb(lastInfo);\n }\n };\n\n const unsubscribeBalance = await polkadot.subscribeToBalance(\n account,\n handler,\n );\n const unsubscribeInfo = await polkadot.subscribeToAssetsBalanceInfo(\n account,\n configBuilder,\n handler,\n );\n\n return () => {\n unsubscribeBalance();\n unsubscribeInfo();\n };\n}\n\nexport function createDummyAsset(symbol: AssetSymbol): Asset<AssetSymbol> {\n return {\n id: '',\n erc20Id: '',\n originSymbol: symbol,\n };\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n Asset,\n AssetSymbol,\n Chain,\n ChainKey,\n MoonChain,\n WithdrawConfig,\n} from '@moonbeam-network/xcm-config';\nimport {\n createTxEventHandler,\n ExtrinsicEventsCallback,\n} from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { XTokensContract } from '../contracts';\nimport { PolkadotService } from '../polkadot';\nimport { WithdrawTransferData } from './sdk.interfaces';\n\nexport interface GetWithdrawDataParams<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n> {\n asset: Asset<Symbols>;\n config: WithdrawConfig<Symbols>;\n contract: XTokensContract;\n originAccount: string;\n destinationAccount: string;\n destinationPolkadot: PolkadotService<Symbols, ChainKeys>;\n ethersSigner: EthersSigner;\n moonChain: MoonChain;\n nativeAsset: Asset<Symbols>;\n origin: MoonChain | Chain<ChainKeys>;\n polkadot: PolkadotService<Symbols, ChainKeys>;\n}\n\nexport async function getWithdrawData<\n Symbols extends AssetSymbol,\n ChainKeys extends ChainKey,\n>({\n asset,\n config,\n contract,\n originAccount,\n destinationAccount,\n destinationPolkadot,\n ethersSigner,\n moonChain,\n nativeAsset,\n origin,\n polkadot,\n}: GetWithdrawDataParams<Symbols, ChainKeys>): Promise<\n WithdrawTransferData<Symbols>\n> {\n const meta = destinationPolkadot.getMetadata();\n const xcmFeeAsset = config.xcmFeeAsset?.asset ?? asset;\n const [\n decimals,\n // destinationBalance,\n originXcmFeeAssetBalance,\n destinationBalance,\n destinationXcmFeeAssetBalance,\n existentialDeposit,\n assetMinBalance,\n xcmFeeDecimals,\n ] = await Promise.all([\n // decimals\n asset.isNative ? moonChain.decimals : polkadot.getAssetDecimals(asset),\n // originXcmFeeAssetBalance\n config.xcmFeeAsset\n ? await polkadot.getGenericBalance(\n originAccount,\n config.xcmFeeAsset?.balance.origin,\n )\n : undefined,\n // destinationBalance\n destinationPolkadot.getGenericBalance(destinationAccount, config.balance),\n // destinationXcmFeeAssetBalance\n config.xcmFeeAsset\n ? destinationPolkadot.getGenericBalance(\n destinationAccount,\n config.xcmFeeAsset.balance.destination,\n )\n : undefined,\n // existentialDeposit\n asset.isNative ? 0n : destinationPolkadot.getExistentialDeposit(),\n // assetMinBalance\n config.sourceMinBalance\n ? destinationPolkadot.getAssetMinBalance(config.sourceMinBalance)\n : 0n,\n // xcmFeeDecimals\n polkadot.getAssetDecimals(xcmFeeAsset),\n ]);\n\n const destinationFee = getFee(assetMinBalance, config);\n const min = config.xcmFeeAsset\n ? 0n\n : getMin(\n assetMinBalance || existentialDeposit,\n destinationBalance,\n destinationFee,\n );\n\n const minXcmFeeAsset =\n config.xcmFeeAsset && destinationXcmFeeAssetBalance !== undefined\n ? getMin(\n assetMinBalance || existentialDeposit,\n destinationXcmFeeAssetBalance,\n destinationFee,\n )\n : 0n;\n\n return {\n asset: { ...asset, decimals },\n destination: {\n ...config.destination,\n },\n destinationBalance,\n destinationFee,\n existentialDeposit,\n min,\n minXcmFeeAsset: {\n amount: minXcmFeeAsset,\n decimals: xcmFeeDecimals,\n symbol: xcmFeeAsset.originSymbol,\n },\n native: { ...nativeAsset, decimals: meta.decimals },\n origin,\n originXcmFeeAssetBalance,\n getFee: async (amount) =>\n contract.getTransferFees(destinationAccount, amount, asset, config),\n send: async (amount: bigint, cb?: ExtrinsicEventsCallback) => {\n const tx = await contract.transfer(\n destinationAccount,\n amount,\n asset,\n config,\n minXcmFeeAsset,\n );\n\n if (cb) {\n createTxEventHandler(ethersSigner, tx.hash, cb);\n }\n\n return tx.hash;\n },\n };\n}\n\nexport function getFee<Symbols extends AssetSymbol>(\n assetMinBalance: bigint,\n config: WithdrawConfig<Symbols>,\n) {\n const calculatedFee = BigInt(config.weight * config.feePerWeight);\n\n return assetMinBalance > calculatedFee ? assetMinBalance : calculatedFee;\n}\n\nexport function getMin(\n balanceNeeded: bigint,\n destinationBalance: bigint,\n destinationFee: bigint,\n) {\n const extra =\n destinationBalance >= balanceNeeded\n ? 0n\n : balanceNeeded - destinationBalance;\n\n return destinationFee + extra;\n}\n"],"mappings":"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","names":["ExtrinsicStatus","Contract","XTokensContract","signer","#signer","#contract","Contract","XTokensABI_default","account","amount","asset","config","minAmount","estimatedGas","gasPrice","maxPriorityFeePerGas","getPolkadotApi","_","calculateMin","weight","unitsPerSecond","PolkadotService","#api","api","ws","getPolkadotApi","_a","_b","asset","account","callback","data","pallet","fn","getParams","path","calc","response","unwrapped","_","params","details","amount","extrinsic","fee","primaryAccount","call","transferExtrinsic","weight","moonChain","calculateMin","type","id","config","assetsArray","metadata","balance","index","meta","chain","from","origin","queries","x","res","item","createPolkadotServices","ws","url","PolkadotService","moonbase","moonbeam","moonriver","_","createExtrinsicEventHandler","isUndefined","getCreateExtrinsic","account","config","foreignPolkadot","primaryAccount","fee","amount","getDepositData","asset","moonChain","nativeAsset","origin","polkadot","polkadotSigner","sourceAccount","_a","_b","sourceAddress","meta","xcmFeeAssetConfig","assetDecimals","existentialDeposit","sourceBalance","sourceFeeBalance","sourceMinBalance","xcmFee","xcmFeeBalance","xcmFeeDecimals","min","createExtrinsic","cb","toDecimal","isXcmSdkDeposit","config","isXcmSdkWithdraw","isWithdrawTransferData","data","isDepositTransferData","sortByBalanceAndChainName","a","b","aDecimal","bDecimal","aName","bName","subscribeToAssetsBalanceInfo","account","polkadot","configBuilder","cb","lastBalance","lastInfo","handler","isBalance","info","unsubscribeBalance","unsubscribeInfo","createDummyAsset","symbol","createTxEventHandler","getWithdrawData","asset","config","contract","originAccount","destinationAccount","destinationPolkadot","ethersSigner","moonChain","nativeAsset","origin","polkadot","_a","_b","meta","xcmFeeAsset","decimals","originXcmFeeAssetBalance","destinationBalance","destinationXcmFeeAssetBalance","existentialDeposit","assetMinBalance","xcmFeeDecimals","destinationFee","getFee","min","getMin","minXcmFeeAsset","amount","cb","tx","calculatedFee","balanceNeeded","extra","init","options","initByChain","moonbase","moonbeam","moonriver","configBuilder","symbols","assets","moonAsset","moonChain","account","cb","polkadot","createPolkadotServices","subscribeToAssetsBalanceInfo","symbolOrAsset","chains","from","keyOrChain","asset","origin","config","sourceAccount","primaryAccount","polkadotSigner","signer","_","foreignPolkadot","meta","nativeAsset","createDummyAsset","getDepositData","to","destinationAccount","ethersSigner","originAccount","contract","XTokensContract","destinationPolkadot","getWithdrawData"]}
1
+ {"version":3,"sources":["../src/getSourceData.ts","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/sdk.ts","../src/getTransferData.ts","../src/getDestinationData.ts","../src/polkadot/PolkadotService.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { createContract } from './contract';\nimport { PolkadotService } from './polkadot';\nimport { SourceChainTransferData } from './sdk.interfaces';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner?: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const { balance, feeBalance, min } = await getBalancesAndMin({\n address: sourceAddress,\n chain,\n config,\n polkadot,\n });\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n amount: balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const 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 existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n chain: AnyChain;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getBalancesAndMin({\n address,\n chain,\n config,\n polkadot,\n}: GetBalancesParams) {\n const balance = await polkadot.query(\n config.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.asset),\n }),\n );\n const feeBalance = config.fee\n ? await polkadot.query(\n config.fee.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.fee.asset),\n }),\n )\n : balance;\n const min = config.min\n ? await polkadot.query(\n config.min.build({ asset: chain.getMinAssetId(config.asset) }),\n )\n : 0n;\n\n return {\n balance,\n feeBalance,\n min,\n };\n}\n\nexport interface GetFeeParams {\n amount: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n amount,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(amount, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n amount: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(config, ethersSigner);\n const fee = await contract.getFee(amount);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n return polkadot.getFee(sourceAddress, extrinsic);\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 type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { ContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements ContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n return 0n;\n }\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport { ContractInterface } from './contract.interfaces';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): ContractInterface {\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","/* eslint-disable sort-keys */\nimport { ConfigBuilder } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {}\n\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { createContract } from './contract';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\nimport { PolkadotService } from './polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from './sdk.interfaces';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toString()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return createContract(contract, ethersSigner)\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from './polkadot';\nimport { DestinationChainTransferData } from './sdk.interfaces';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const { balance, min } = await getBalanceAndMin({\n address: destinationAddress,\n chain,\n config,\n polkadot,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n config: AssetConfig;\n chain: AnyChain;\n polkadot: PolkadotService;\n}\n\nexport async function getBalanceAndMin({\n address,\n config,\n chain,\n polkadot,\n}: GetBalancesParams) {\n const balance = await polkadot.query(\n config.balance.build({\n address,\n asset: chain.getBalanceAssetId(config.asset),\n }),\n );\n const min = config.min\n ? await polkadot.query(\n config.min.build({ asset: chain.getMinAssetId(config.asset) }),\n )\n : 0n;\n\n return {\n balance,\n min,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n eq,\n equilibriumAlphanet,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue apears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.key) {\n return eq;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n"],"mappings":"AAGA,OAAmB,eAAAA,MAAmB,8BACtC,OAAS,mBAAAC,MAAuB,8BAChC,OAAOC,MAAS,SCHhB,OAAS,YAAAC,MAAwB,SCFjC,IAAAC,EAAA,CACE,CACE,OAAU,CACR,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,WACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,EACA,CACE,OAAU,CACR,CACE,WAAc,CACZ,CACE,aAAgB,UAChB,KAAQ,kBACR,KAAQ,SACV,EACA,CACE,aAAgB,UAChB,KAAQ,SACR,KAAQ,SACV,CACF,EACA,aAAgB,4BAChB,KAAQ,aACR,KAAQ,SACV,EACA,CACE,aAAgB,SAChB,KAAQ,UACR,KAAQ,QACV,EACA,CACE,WAAc,CACZ,CACE,aAAgB,QAChB,KAAQ,UACR,KAAQ,OACV,EACA,CACE,aAAgB,UAChB,KAAQ,WACR,KAAQ,SACV,CACF,EACA,aAAgB,+BAChB,KAAQ,cACR,KAAQ,OACV,EACA,CACE,aAAgB,SAChB,KAAQ,SACR,KAAQ,QACV,CACF,EACA,KAAQ,0BACR,QAAW,CAAC,EACZ,gBAAmB,aACnB,KAAQ,UACV,CACF,EDvFO,IAAMC,EAAN,KAA2C,CACvC,QAAkB,6CAElBC,GAEAC,GAEAC,GAET,YAAYC,EAAwBC,EAAgB,CAClD,KAAKJ,GAAUG,EACf,KAAKD,GAAUE,EACf,KAAKH,GAAY,IAAII,EAAS,KAAK,QAASC,EAAKF,CAAM,CACzD,CAEA,MAAM,UAAyC,CAC7C,OAAO,KAAKH,GAAU,KAAKD,GAAQ,IAAI,EAAE,GAAG,KAAKA,GAAQ,IAAI,CAC/D,CAEA,MAAM,OAAOO,EAAiC,CAC5C,GAAIA,IAAW,GACb,OAAO,GAOT,GAAI,CACF,IAAMC,GACJ,MAAM,KAAKP,GAAU,YAAY,KAAKD,GAAQ,IAAI,EAChD,GAAG,KAAKA,GAAQ,IAClB,GACA,SAAS,EACLS,EAAW,MAAM,KAAK,YAAY,EAExC,OAAOD,EAAeC,CACxB,OAASC,EAAP,CAEA,eAAQ,MAAMA,CAAK,EAEZ,EACT,CACF,CAEA,MAAc,aAAc,CAC1B,GAAM,CAAE,SAAAD,EAAU,qBAAAE,CAAqB,EAAI,MAAM,KAAKT,GAAQ,WAAW,EAEzE,QACGO,GAAA,YAAAA,EAAU,aAAc,MAAOE,GAAA,YAAAA,EAAsB,aAAc,GAExE,CACF,EErDO,SAASC,EACdC,EACAC,EACmB,CACnB,GAAID,EAAO,SAAW,UACpB,OAAO,IAAIE,EAAQF,EAAQC,CAAM,EAGnC,MAAM,IAAI,MAAM,YAAYD,EAAO,kBAAkB,CACvD,CHMA,eAAsBG,EAAc,CAClC,eAAAC,EACA,mBAAAC,EACA,eAAAC,EACA,aAAAC,EACA,SAAAC,EACA,cAAAC,CACF,EAA0D,CA3B1D,IAAAC,EAAAC,EAAAC,EA4BE,GAAM,CACJ,MAAAC,EACA,YAAAC,EACA,OAAQ,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC1B,EAAIZ,EACEa,EAAaC,EAAY,UAAUL,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAML,EAAS,iBAAiBK,CAAK,CACjD,CAAC,EACKM,GAAgBT,EAAAM,EAAO,MAAP,MAAAN,EAAY,MAC9BQ,EAAY,UAAUF,EAAO,IAAI,MAAO,CACtC,OAAQ,GACR,SAAU,MAAMR,EAAS,iBAAiBQ,EAAO,IAAI,KAAK,CAC5D,CAAC,EACDC,EAEE,CAAE,QAAAG,EAAS,WAAAC,EAAY,IAAAC,CAAI,EAAI,MAAMC,EAAkB,CAC3D,QAASd,EACT,MAAAM,EACA,OAAAC,EACA,SAAAR,CACF,CAAC,EAEKgB,GAAYb,EAAAK,EAAO,YAAP,YAAAL,EAAkB,MAAM,CACxC,QAASN,EACT,OAAQe,EACR,MAAOL,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKR,EAAe,OACpB,SAAUS,EAAM,WAAWT,CAAc,EACzC,eAAgBS,EAAM,uBAAuBF,CAAK,EAClD,OAAQE,CACV,GACMU,GAAWb,EAAAI,EAAO,WAAP,YAAAJ,EAAiB,MAAM,CACtC,QAASP,EACT,OAAQe,EACR,MAAOL,EAAM,WAAWF,CAAK,EAC7B,YAAaC,EAAY,MACzB,IAAKR,EAAe,OACpB,SAAUS,EAAM,WAAWT,CAAc,CAC3C,GACMoB,EAAM,MAAMC,EAAO,CACvB,OAAQP,EACR,SAAAK,EACA,SAAUN,EAAc,SACxB,aAAAZ,EACA,UAAAiB,EACA,SAAAhB,EACA,cAAAC,CACF,CAAC,EAEKmB,EAAgBX,EAAW,SAAS,CAAE,OAAQG,CAAQ,CAAC,EACvD,CAAE,mBAAAS,CAAmB,EAAIrB,EACzBsB,EAAYX,EAAc,SAAS,CAAE,OAAQO,CAAI,CAAC,EAClDK,EAAmBZ,EAAc,SAAS,CAAE,OAAQE,CAAW,CAAC,EAChEW,EAAYf,EAAW,SAAS,CAAE,OAAQK,CAAI,CAAC,EAC/CW,EAAYC,EAAO,CACvB,cAAAN,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAE,CACF,CAAC,EAED,MAAO,CACL,QAASJ,EACT,MAAAb,EACA,mBAAAc,EACA,IAAKC,EACL,WAAYC,EACZ,IAAKE,EACL,IAAKD,CACP,CACF,CASA,eAAsBT,EAAkB,CACtC,QAAAY,EACA,MAAApB,EACA,OAAAC,EACA,SAAAR,CACF,EAAsB,CACpB,IAAMY,EAAU,MAAMZ,EAAS,MAC7BQ,EAAO,QAAQ,MAAM,CACnB,QAAAmB,EACA,MAAOpB,EAAM,kBAAkBC,EAAO,KAAK,CAC7C,CAAC,CACH,EACMK,EAAaL,EAAO,IACtB,MAAMR,EAAS,MACbQ,EAAO,IAAI,QAAQ,MAAM,CACvB,QAAAmB,EACA,MAAOpB,EAAM,kBAAkBC,EAAO,IAAI,KAAK,CACjD,CAAC,CACH,EACAI,EACEE,EAAMN,EAAO,IACf,MAAMR,EAAS,MACbQ,EAAO,IAAI,MAAM,CAAE,MAAOD,EAAM,cAAcC,EAAO,KAAK,CAAE,CAAC,CAC/D,EACA,GAEJ,MAAO,CACL,QAAAI,EACA,WAAAC,EACA,IAAAC,CACF,CACF,CAYA,eAAsBK,EAAO,CAC3B,OAAAS,EACA,SAAAX,EACA,SAAAY,EACA,aAAA9B,EACA,UAAAiB,EACA,SAAAhB,EACA,cAAAC,CACF,EAAkC,CAChC,GAAIgB,EAAU,CACZ,GAAI,CAAClB,EACH,MAAM,IAAI,MAAM,gCAAgC,EAGlD,OAAO+B,EAAeF,EAAQX,EAAUY,EAAU9B,CAAY,EAGhE,GAAIiB,EACF,OAAOe,EAAgBf,EAAWhB,EAAUC,CAAa,EAG3D,MAAM,IAAI,MAAM,+CAA+C,CACjE,CAEA,eAAsB6B,EACpBF,EACApB,EACAqB,EACA9B,EACiB,CAEjB,IAAMmB,EAAM,MADKc,EAAexB,EAAQT,CAAY,EACzB,OAAO6B,CAAM,EAExC,OAAOK,EAAgBf,EAAK,GAAIW,CAAQ,CAC1C,CAEA,eAAsBE,EACpBf,EACAhB,EACAC,EACiB,CACjB,OAAOD,EAAS,OAAOC,EAAee,CAAS,CACjD,CASO,SAASU,EAAO,CACrB,cAAAN,EACA,mBAAAC,EACA,UAAAC,EACA,UAAAE,CACF,EAA8B,CAC5B,IAAMU,EAASd,EACZ,MAAM,EACN,MAAMI,EAAU,MAAM,CAAC,EACvB,MACCJ,EAAc,OAAOC,CAAkB,EACnCA,EAAmB,MAAM,EACzBc,EAAI,CAAC,CACX,EACC,MAAMf,EAAc,OAAOE,CAAS,EAAIA,EAAU,MAAM,EAAIa,EAAI,CAAC,CAAC,EAErE,OAAOf,EAAc,SAAS,CAC5B,OAAQc,EAAO,GAAG,CAAC,EAAI,GAAK,OAAOA,EAAO,QAAQ,CAAC,CACrD,CAAC,CACH,CI7NA,OAAS,iBAAAE,MAAqB,+BCE9B,OAAS,mBAAAC,GAAiB,YAAAC,MAAgB,8BAC1C,OAAOC,MAAS,SCDhB,OAAmB,eAAAC,MAAmB,8BACtC,OAAS,YAAAC,MAAgB,8BAUzB,eAAsBC,EAAmB,CACvC,eAAAC,EACA,mBAAAC,EACA,SAAAC,CACF,EAAoE,CAClE,GAAM,CACJ,MAAAC,EACA,YAAa,CAAE,MAAAC,EAAO,OAAAC,CAAO,CAC/B,EAAIL,EACEM,EAAaT,EAAY,UAAUM,EAAO,CAC9C,OAAQ,GACR,SAAU,MAAMD,EAAS,iBAAiBC,CAAK,CACjD,CAAC,EAEK,CAAE,QAAAI,EAAS,IAAAC,CAAI,EAAI,MAAMC,EAAiB,CAC9C,QAASR,EACT,MAAAG,EACA,OAAAC,EACA,SAAAH,CACF,CAAC,EAEKQ,EAAgBJ,EAAW,SAAS,CAAE,OAAQC,CAAQ,CAAC,EACvD,CAAE,mBAAAI,CAAmB,EAAIT,EACzBU,EAAY,MAAMC,EAAO,CAAE,OAAQb,EAAgB,SAAAE,CAAS,CAAC,EAC7DY,EAAYR,EAAW,SAAS,CAAE,OAAQE,CAAI,CAAC,EAErD,MAAO,CACL,QAASE,EACT,MAAAN,EACA,mBAAAO,EACA,IAAKC,EACL,IAAKE,CACP,CACF,CASA,eAAsBL,EAAiB,CACrC,QAAAM,EACA,OAAAV,EACA,MAAAD,EACA,SAAAF,CACF,EAAsB,CACpB,IAAMK,EAAU,MAAML,EAAS,MAC7BG,EAAO,QAAQ,MAAM,CACnB,QAAAU,EACA,MAAOX,EAAM,kBAAkBC,EAAO,KAAK,CAC7C,CAAC,CACH,EACMG,EAAMH,EAAO,IACf,MAAMH,EAAS,MACbG,EAAO,IAAI,MAAM,CAAE,MAAOD,EAAM,cAAcC,EAAO,KAAK,CAAE,CAAC,CAC/D,EACA,GAEJ,MAAO,CACL,QAAAE,EACA,IAAAC,CACF,CACF,CAOA,eAAsBK,EAAO,CAC3B,OAAAR,EACA,SAAAH,CACF,EAAuC,CACrC,GAAM,CAAE,OAAAc,EAAQ,MAAAb,CAAM,EAAIE,EAAO,OAAO,OAAO,eACzCY,EAAW,MAAMf,EAAS,iBAAiBC,CAAK,EAChDG,EAAaT,EAAY,UAAUM,EAAO,CAC9C,OAAQ,GACR,SAAAc,CACF,CAAC,EAED,GAAI,OAAO,SAASD,CAAM,EACxB,OAAOV,EAAW,SAAS,CACzB,OAAQR,EAASkB,EAAkBC,CAAQ,CAC7C,CAAC,EAGH,IAAMC,EAAOF,EAA4B,MAAM,CAC7C,IAAKd,EAAS,IACd,MAAOA,EAAS,MAAM,WAAWC,CAAK,CACxC,CAAC,EAED,OAAOG,EAAW,SAAS,CACzB,OAAQ,MAAMY,EAAI,KAAK,CACzB,CAAC,CACH,CC9GA,MAAO,wBAMP,OACE,aAAAC,EACA,MAAAC,EACA,uBAAAC,MACK,+BACP,OAGE,eAAAC,OAEK,8BACP,OAAS,kBAAAC,OAAsB,8BAOxB,IAAMC,EAAN,KAAsB,CAClB,IAEA,MAET,YAAYC,EAAiBC,EAAqB,CAChD,KAAK,IAAMD,EACX,KAAK,MAAQC,CACf,CAEA,aAAa,OAAOA,EAA+C,CACjE,OAAO,IAAIF,EAAgB,MAAMD,GAAeG,EAAM,EAAE,EAAGA,CAAK,CAClE,CAEA,aAAa,YAAYC,EAAoD,CAC3E,OAAO,QAAQ,IAAIA,EAAO,IAAIH,EAAgB,MAAM,CAAC,CACvD,CAEA,IAAI,UAAmB,CACrB,OAAO,KAAK,IAAI,SAAS,cAAc,GAAG,CAAC,GAAK,EAClD,CAEA,IAAI,OAAe,CACjB,IAAMI,EAAS,KAAK,IAAI,SAAS,YAAY,GAAG,CAAC,EAC3CC,EAAMD,GAAA,YAAAA,EAAQ,WAAW,cAI/B,GAAIC,IAAQ,SAAW,KAAK,MAAM,MAAQR,EAAoB,IAC5D,OAAOD,EAGT,GAAI,CAACS,EACH,MAAM,IAAI,MAAM,4BAA4B,EAG9C,IAAMC,EAAQX,EAAU,IAAIU,CAAG,EAE/B,GAAI,CAACC,EACH,MAAM,IAAI,MAAM,2BAA2BD,kBAAoBD,IAAS,EAG1E,OAAOE,CACT,CAEA,IAAI,oBAAkC,CArExC,IAAAC,EAAAC,EAsEI,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,OAAOZ,GAAY,UAAU,KAAK,MAAO,CACvC,OAAAa,EACA,SAAU,KAAK,QACjB,CAAC,CACH,CAEA,MAAM,aACJL,EAC2D,CApF/D,IAAAC,EAAAC,EAAAI,EAAAC,EAqFI,IAAMC,IACJP,EAAA,KAAK,IAAI,MAAM,SAAf,YAAAA,EAAuB,aACvBC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,sBAC9BI,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,mBAC9BC,EAAA,KAAK,IAAI,MAAM,gBAAf,YAAAA,EAA8B,kBAEhC,GAAI,CAACC,EACH,OAGF,IAAMC,EAAQ,MAAMD,EAAGR,CAAK,EACtBU,EAAY,oBAAqBD,EAAOA,EAAK,gBAAgB,EAAIA,EAEvE,MAAO,CACL,SAAUC,EAAU,SAAS,SAAS,EACtC,OAAQA,EAAU,OAAO,SAAS,CACpC,CACF,CAEA,MAAM,iBAAiBV,EAA+B,CAxGxD,IAAAC,EAyGI,QACGA,EAAA,MAAM,KAAK,aAAa,KAAK,MAAM,mBAAmBD,CAAK,CAAC,IAA5D,YAAAC,EACG,WACJ,KAAK,MAAM,iBAAiBD,CAAK,GACjC,KAAK,QAET,CAEA,MAAM,MAAMW,EAA+C,CACzD,IAAMC,EAAW,MAAM,KAAK,IAAI,MAAMD,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC9D,GAAGA,EAAO,IACZ,EAEA,OAAOA,EAAO,UAAUC,CAAQ,CAClC,CAEA,MAAM,OAAOC,EAAiBF,EAA0C,CACtE,IAAMH,EAAK,KAAK,IAAI,GAAGG,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQH,CAAE,EAK9B,OAFa,MADKA,EAAG,GAAGM,CAAI,EACC,YAAYD,EAAS,CAAE,MAAO,EAAG,CAAC,GAEnD,WAAW,SAAS,CAClC,CAEA,MAAM,SACJA,EACAF,EACAI,EACiB,CACjB,IAAMP,EAAK,KAAK,IAAI,GAAGG,EAAO,MAAM,EAAEA,EAAO,IAAI,EAC3CG,EAAOH,EAAO,QAAQH,CAAE,EAW9B,OARa,MADKA,EAAG,GAAGM,CAAI,EACC,YAC3B,KAAKE,GAAUD,CAAM,EAAIF,EAAUE,EACnC,CACE,MAAO,GACP,OAAQ,KAAKC,GAAUD,CAAM,EAAIA,EAAS,MAC5C,CACF,GAEY,SAAS,CACvB,CAGAC,GAAUD,EAAiE,CACzE,MAAO,gBAAiBA,CAC1B,CACF,EFtIA,eAAsBE,EAAgB,CACpC,mBAAAC,EACA,aAAAC,EACA,eAAAC,EACA,cAAAC,EACA,eAAAC,CACF,EAAiD,CAC/C,GAAM,CAACC,EAAcC,CAAW,EAAI,MAAMC,EAAgB,YAAY,CACpEH,EAAe,YAAY,MAC3BA,EAAe,OAAO,KACxB,CAAC,EAEKI,EAAc,MAAMC,EAAmB,CAC3C,mBAAAT,EACA,SAAUK,EACV,eAAAD,CACF,CAAC,EACKM,EAAiB,MAAMC,GAC3BL,EACAE,EAAY,GACd,EACMI,EAAS,MAAMC,EAAc,CACjC,mBAAAb,EACA,eAAAU,EACA,aAAAT,EACA,SAAUK,EACV,cAAAH,EACA,eAAAC,CACF,CAAC,EAED,MAAO,CACL,YAAAI,EACA,YAAYM,EAAyB,CAInC,IAAMC,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,SAAS,CAAC,CACtD,CAAC,CACH,EAMA,eAAgB,GAChB,IAAKH,EAAO,IACZ,IAAKM,GAAOV,CAAW,EACvB,OAAAI,EACA,MAAM,MAAO,CACX,OAAOb,EAAgB,CACrB,mBAAoBI,EACpB,aAAAF,EACA,eAAAC,EACA,cAAeF,EACf,eAAgB,CACd,GAAGI,EACH,YAAaA,EAAe,OAC5B,OAAQA,EAAe,WACzB,CACF,CAAC,CACH,EACA,MAAM,SAASU,EAAyB,CAvF5C,IAAAK,EAAAC,EAwFM,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,gCAAgC,EAGlD,OAAO0B,EAAeF,EAAUxB,CAAY,EACzC,SAAS,EACT,KAAM2B,GAAOA,EAAG,IAAI,EAGzB,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,CDzKO,SAASE,GAAIC,EAAsB,CACxC,MAAO,CACL,OAAOC,EAAuB,CAC5B,GAAM,CAAE,OAAAC,EAAQ,MAAAC,CAAM,EAAIC,EAAc,EAAE,OAAOH,CAAS,EAE1D,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,GAAGf,EACH,GAAGc,EACH,mBAAAD,EACA,cAAAD,EACA,eAAgBF,EAAYC,CAAc,EAAE,MAAM,CACpD,CAAC,CACH,CACF,CACF,CACF,CACF,CACF,CACF,CACF,CACF,EACA,MAAM,gBAAgB,CACpB,mBAAAE,EACA,sBAAAG,EACA,aAAAC,EACA,WAAAZ,EACA,eAAAa,EACA,cAAAN,EACA,iBAAAO,CACF,EAA6C,CAC3C,OAAOJ,EAAI,CACT,mBAAAF,EACA,aAAAI,EACA,eAAAC,EACA,cAAAN,EACA,eAAgBR,EAAc,EAC3B,OAAO,EACP,MAAMC,CAAU,EAChB,OAAOc,CAAgB,EACvB,YAAYH,CAAqB,EACjC,MAAM,CACX,CAAC,CACH,CACF,CACF","names":["AssetAmount","convertDecimals","Big","Contract","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","Contract","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Xtokens","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","AssetAmount","zeroFeeAmount","balance","feeBalance","min","getBalancesAndMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","amount","decimals","getContractFee","getExtrinsicFee","createContract","convertDecimals","result","Big","ConfigBuilder","convertDecimals","toBigInt","Big","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","polkadot","asset","chain","config","zeroAmount","balance","min","getBalanceAndMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","address","amount","decimals","cfg","assetsMap","eq","equilibriumAlphanet","AssetAmount","getPolkadotApi","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","fn","data","unwrapped","config","response","account","args","signer","#isSigner","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moonbeam-network/xcm-sdk",
3
- "version": "0.0.1-beta.5",
3
+ "version": "0.0.1-beta.7",
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",
@@ -46,19 +46,17 @@
46
46
  "types": "./build/index.d.ts",
47
47
  "main": "./build/index.cjs",
48
48
  "dependencies": {
49
+ "@moonbeam-network/xcm-builder": "*",
49
50
  "@moonbeam-network/xcm-config": "*",
51
+ "@moonbeam-network/xcm-types": "*",
50
52
  "@moonbeam-network/xcm-utils": "*",
51
- "lodash": "^4.17.21",
52
- "lru-cache": "^7.17.0"
53
- },
54
- "devDependencies": {
55
- "@types/lodash": "^4.14.191"
53
+ "big.js": "^6.2.1"
56
54
  },
57
55
  "peerDependencies": {
58
- "@polkadot/api": "9.x",
59
- "@polkadot/api-augment": "9.x",
60
- "@polkadot/types": "9.x",
61
- "@polkadot/util": "10.x",
56
+ "@polkadot/api": "10.x",
57
+ "@polkadot/api-augment": "10.x",
58
+ "@polkadot/types": "10.x",
59
+ "@polkadot/util": "12.x",
62
60
  "ethers": "5.x"
63
61
  }
64
62
  }