@moonbeam-network/xcm-sdk 2.0.6 → 2.0.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/build/index.cjs +1 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.cts +9 -3
- package/build/index.d.ts +30 -0
- package/build/index.mjs +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +5 -5
package/build/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var yt=Object.create;var M=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Pt=(n,t)=>{for(var e in t)M(n,e,{get:t[e],enumerable:!0})},et=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ct(t))!At.call(n,r)&&r!==e&&M(n,r,{get:()=>t[r],enumerable:!(a=ht(t,r))||a.enumerable});return n};var nt=(n,t,e)=>(e=n!=null?yt(bt(n)):{},et(t||!n||!n.__esModule?M(e,"default",{value:n,enumerable:!0}):e,n)),wt=n=>et(M({},"__esModule",{value:!0}),n);var Bt={};Pt(Bt,{Sdk:()=>Tt,getContractFee:()=>it,getExtrinsicFee:()=>ot,getFee:()=>st,getFeeBalance:()=>$,getMax:()=>ct,getSourceData:()=>V});module.exports=wt(Bt);var q=require("@moonbeam-network/xcm-types"),S=require("@moonbeam-network/xcm-utils"),K=nt(require("big.js"),1);var at=require("ethers"),P=require("viem");function x(n){return"provider"in n}function A(n){return"signer"in n}var _=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var G=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=x(e)?new at.Contract(this.address,_,e):(0,P.getContract)({abi:_,address:this.address,client:{public:(0,P.createPublicClient)({chain:e.chain,transport:(0,P.http)()}),wallet:e}})}async getBalance(){return A(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return A(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};var rt=require("ethers"),g=require("viem");var N=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var k=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=x(e)?new rt.Contract(this.address,N,e):(0,g.getContract)({abi:N,address:this.address,client:{public:(0,g.createPublicClient)({chain:e.chain,transport:(0,g.http)()}),wallet:e}})}async transfer(){return A(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return t[this.#t.func].estimateGas(...this.#t.args)}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=A(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),a=await this.getGasPrice();return e*a}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(x(this.#n)){if(!this.#n.provider)return 0n;let{gasPrice:e,maxPriorityFeePerGas:a}=await this.#n.provider.getFeeData();return(e||0n)+(a||0n)}return(0,g.createPublicClient)({chain:this.#n.chain,transport:(0,g.http)()}).getGasPrice()}};function h(n,t){if(n.module==="Erc20")return new G(n,t);if(n.module==="Xtokens")return new k(n,t);throw new Error(`Contract ${n.module} not found`)}var z=require("@moonbeam-network/xcm-builder"),W=require("@moonbeam-network/xcm-utils");async function O({address:n,chain:t,config:e,decimals:a,evmSigner:r,polkadot:s}){let c=e.balance.build({address:n,asset:s.chain.getBalanceAssetId(e.asset)});if(c.type===z.CallType.Substrate){let o=await s.query(c);return t.usesChainDecimals?(0,W.convertDecimals)(o,s.decimals,a):o}if(!r)throw new Error("Evm signer must be provided");return h(c,r).getBalance()}async function w({address:n,asset:t,config:e,evmSigner:a,polkadot:r}){let s=e.balance.build({address:n,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===z.CallType.Substrate)return r.getAssetDecimals(t||e.asset);if(!a)throw new Error("Evm signer must be provided");return h(s,a).getDecimals()}async function R(n,t){if(n.min)return t.query(n.min.build({asset:t.chain.getMinAssetId(n.asset)}));let e=t.chain.getAssetMin(n.asset);if(e){let a=await t.getAssetDecimals(n.asset);return(0,W.toBigInt)(e,a)}return 0n}async function V({transferConfig:n,destinationAddress:t,destinationFee:e,evmSigner:a,polkadot:r,sourceAddress:s}){var U,Y,Z,tt;let{asset:c,destination:m,source:{chain:o,config:i}}=n,u=q.AssetAmount.fromAsset(c,{amount:0n,decimals:await w({address:t,chain:o,config:i,evmSigner:a,polkadot:r})}),f=(U=i.fee)!=null&&U.asset?q.AssetAmount.fromAsset(i.fee.asset,{amount:0n,decimals:await w({address:t,asset:i.fee.asset,chain:o,config:i,evmSigner:a,polkadot:r})}):u,d=(Y=i.destinationFee)!=null&&Y.asset?q.AssetAmount.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await w({address:t,asset:i.destinationFee.asset,chain:o,config:i,evmSigner:a,polkadot:r})}):u,l=await O({address:s,chain:o,config:i,decimals:u.decimals,evmSigner:a,polkadot:r}),p=await $({address:s,balance:l,chain:o,decimals:f.decimals,feeConfig:i.fee,polkadot:r}),E=i.asset.isEqual(i.destinationFee.asset)?l:await $({address:s,balance:l,chain:o,decimals:d.decimals,feeConfig:i.destinationFee,polkadot:r}),I=await R(i,r),T=(Z=i.extrinsic)==null?void 0:Z.build({address:t,amount:l,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(c),source:o}),B=(tt=i.contract)==null?void 0:tt.build({address:t,amount:l,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),F=await st({balance:l,chain:o,contract:B,decimals:f.decimals,evmSigner:a,extrinsic:T,feeConfig:i.fee,polkadot:r,sourceAddress:s}),b=u.copyWith({amount:l}),{existentialDeposit:L}=r,H=f.copyWith({amount:F}),pt=f.copyWith({amount:p}),dt=d.copyWith({amount:E}),J=u.copyWith({amount:I}),gt=ct({balanceAmount:b,existentialDeposit:L,feeAmount:H,minAmount:J});return{balance:b,chain:o,destinationFeeBalance:dt,existentialDeposit:L,fee:H,feeBalance:pt,max:gt,min:J}}async function $({address:n,balance:t,chain:e,decimals:a,feeConfig:r,polkadot:s}){if(!r)return t;let c=await s.query(r.balance.build({address:n,asset:s.chain.getBalanceAssetId(r.asset)}));return e.usesChainDecimals?(0,S.convertDecimals)(c,s.decimals,a):c}async function st({balance:n,chain:t,contract:e,decimals:a,evmSigner:r,extrinsic:s,feeConfig:c,polkadot:m,sourceAddress:o}){if(e){if(!r)throw new Error("EVM Signer must be provided");return it(n,e,a,r)}if(s){let i=await ot(n,s,m,o),u=vt(a,c),f=i+u;return t.usesChainDecimals?(0,S.convertDecimals)(f,m.decimals,a):f}throw new Error("Either contract or extrinsic must be provided")}async function it(n,t,e,a){let s=await h(t,a).getFee(n);return(0,S.convertDecimals)(s,18,e)}async function ot(n,t,e,a){try{return await e.getFee(a,t)}catch(r){if(n)throw r;return 0n}}function vt(n,t){return t!=null&&t.xcmDeliveryFeeAmount?(0,S.toBigInt)(t.xcmDeliveryFeeAmount,n):0n}function ct({balanceAmount:n,existentialDeposit:t,feeAmount:e,minAmount:a}){let r=n.toBig().minus(a.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 D=require("@moonbeam-network/xcm-config");var v=require("@moonbeam-network/xcm-utils"),C=nt(require("big.js"),1);var ye=require("@polkadot/api-augment"),y=require("@moonbeam-network/xcm-config"),mt=require("@moonbeam-network/xcm-types"),ut=require("@moonbeam-network/xcm-utils"),Q=class n{api;chain;configService;constructor(t,e,a){this.api=t,this.chain=e,this.configService=a}static async create(t,e){return new n(await(0,ut.getPolkadotApi)(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(a=>n.create(a,e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&[y.equilibrium.key].includes(this.chain.key))return y.eq;if(e==="oring"&&this.chain.key===y.darwiniaPangoro.key)return y.paring;if(!e)throw new Error("No native symbol key found");let a=this.configService.getAsset(e);if(!a)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return a}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,a=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return mt.AssetAmount.fromAsset(this.asset,{amount:a,decimals:this.decimals})}async getAssetMeta(t){var c,m,o,i,u,f;let e=((c=this.api.query.assets)==null?void 0:c.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.assets)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((u=this.api.query.assetRegistry)==null?void 0:u.assetMetadatas)||((f=this.api.query.assetRegistry)==null?void 0:f.assetMetadataMap);if(!e)return;let a=await e(t),r="unwrapOrDefault"in a?a.unwrapOrDefault():a;return{decimals:("unwrapOrDefault"in r.decimals?r.decimals.unwrapOrDefault():r.decimals).toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var r;let e=this.chain.getMetadataAssetId(t),a=this.chain.getAssetDecimals(t)||await this.getAssetDecimalsFromQuery(e)||((r=await this.getAssetMeta(e))==null?void 0:r.decimals)||this.decimals;if(!a)throw new Error(`No decimals found for asset ${t.originSymbol}`);return a}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let a=this.api.tx[e.module][e.func],r=e.getArgs(a);return(await a(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,a){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(a)?t:a,{nonce:-1,signer:this.#t(a)?a:void 0})).toString()}#t(t){return"signPayload"in t}};var j=require("@moonbeam-network/xcm-types"),ft=require("@moonbeam-network/xcm-utils");async function lt({transferConfig:n,destinationAddress:t,evmSigner:e,polkadot:a}){let{asset:r,destination:{chain:s,config:c}}=n,m=j.AssetAmount.fromAsset(r,{amount:0n,decimals:await w({address:t,chain:s,config:c,evmSigner:e,polkadot:a})}),o=await O({address:t,chain:s,config:c,decimals:m.decimals,evmSigner:e,polkadot:a}),i=await R(c,a),u=m.copyWith({amount:o}),{existentialDeposit:f}=a,d=await Dt({address:t,config:n,evmSigner:e,polkadot:a}),l=m.copyWith({amount:i});return{balance:u,chain:s,existentialDeposit:f,fee:d,min:l}}async function Dt({config:n,polkadot:t}){let{amount:e,asset:a}=n.source.config.destinationFee,r=await t.getAssetDecimals(a),s=j.AssetAmount.fromAsset(a,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:(0,ft.toBigInt)(e,r)});let c=e.build({api:t.api,asset:t.chain.getAssetId(a)});return s.copyWith({amount:await c.call()})}async function X({configService:n,destinationAddress:t,evmSigner:e,polkadotSigner:a,sourceAddress:r,transferConfig:s}){let[c,m]=await Q.createMulti([s.destination.chain,s.source.chain],n),o=await lt({destinationAddress:t,evmSigner:e,polkadot:c,transferConfig:s}),i=await It(m,o.fee),u=await V({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:r,transferConfig:s});return{destination:o,getEstimate(f){let l=(0,C.default)((0,v.toBigInt)(f,u.balance.decimals).toString()).minus(u.balance.isSame(i)?i.toBig():(0,C.default)(0));return u.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:u.max,min:Et(o),source:u,async swap(){return X({configService:n,destinationAddress:r,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(f){var B,F;let d=(0,v.toBigInt)(f,u.balance.decimals),{asset:l,source:{chain:p,config:E}}=s,I=(B=E.contract)==null?void 0:B.build({address:t,amount:d,asset:p.getAssetId(l),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i)}),T=(F=E.extrinsic)==null?void 0:F.build({address:t,amount:d,asset:p.getAssetId(l),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i),palletInstance:p.getAssetPalletInstance(l),source:p});if(I){if(!e)throw new Error("EVM Signer must be provided");return h(I,e).transfer().then(b=>typeof b=="object"?b.hash:b)}if(T){if(!a)throw new Error("Polkadot signer must be provided");return m.transfer(r,T,a)}throw new Error("Either contract or extrinsic must be provided")}}}function Et({balance:n,existentialDeposit:t,fee:e,min:a}){let r=(0,C.default)(0).plus(n.isSame(e)?e.toBig():(0,C.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,C.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,C.default)(0));return n.copyWith({amount:BigInt(r.toFixed())})}async function It(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,v.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function Tt(n){let t=(n==null?void 0:n.configService)??new D.ConfigService;return{assets(e){let{assets:a,asset:r}=(0,D.ConfigBuilder)(t).assets(e);return{assets:a,asset(s){let{sourceChains:c,source:m}=r(s);return{sourceChains:c,source(o){let{destinationChains:i,destination:u}=m(o);return{destinationChains:i,destination(f){return{async accounts(d,l,p){return X({...n,configService:t,destinationAddress:l,evmSigner:(p==null?void 0:p.evmSigner)??(p==null?void 0:p.ethersSigner),sourceAddress:d,transferConfig:u(f).build(),polkadotSigner:p==null?void 0:p.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:a,ethersSigner:r,evmSigner:s,keyOrAsset:c,polkadotSigner:m,sourceAddress:o,sourceKeyOrChain:i}){return X({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:m,sourceAddress:o,transferConfig:(0,D.ConfigBuilder)(t).assets().asset(c).source(i).destination(a).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalance,getMax,getSourceData});
|
|
1
|
+
"use strict";var gt=Object.create;var k=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,At=Object.prototype.hasOwnProperty;var Pt=(n,t)=>{for(var e in t)k(n,e,{get:t[e],enumerable:!0})},nt=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Ct(t))!At.call(n,r)&&r!==e&&k(n,r,{get:()=>t[r],enumerable:!(a=ht(t,r))||a.enumerable});return n};var at=(n,t,e)=>(e=n!=null?gt(bt(n)):{},nt(t||!n||!n.__esModule?k(e,"default",{value:n,enumerable:!0}):e,n)),wt=n=>nt(k({},"__esModule",{value:!0}),n);var Bt={};Pt(Bt,{Sdk:()=>Tt,getBalance:()=>D,getContractFee:()=>ot,getDecimals:()=>b,getExtrinsicFee:()=>ct,getFee:()=>it,getFeeBalance:()=>K,getMax:()=>mt,getMin:()=>E,getSourceData:()=>V});module.exports=wt(Bt);var q=require("@moonbeam-network/xcm-types"),g=require("@moonbeam-network/xcm-utils"),z=at(require("big.js"),1);var rt=require("ethers"),w=require("viem");function v(n){return"provider"in n}function P(n){return"signer"in n}var _=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var W=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=v(e)?new rt.Contract(this.address,_,e):(0,w.getContract)({abi:_,address:this.address,client:{public:(0,w.createPublicClient)({chain:e.chain,transport:(0,w.http)()}),wallet:e}})}async getBalance(){return P(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return P(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};var st=require("ethers"),y=require("viem");var N=[{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 O=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=v(e)?new st.Contract(this.address,N,e):(0,y.getContract)({abi:N,address:this.address,client:{public:(0,y.createPublicClient)({chain:e.chain,transport:(0,y.http)()}),wallet:e}})}async transfer(){return P(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return t[this.#t.func].estimateGas(...this.#t.args)}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=P(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),a=await this.getGasPrice();return e*a}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(v(this.#n)){if(!this.#n.provider)return 0n;let{gasPrice:e,maxPriorityFeePerGas:a}=await this.#n.provider.getFeeData();return(e||0n)+(a||0n)}return(0,y.createPublicClient)({chain:this.#n.chain,transport:(0,y.http)()}).getGasPrice()}};function C(n,t){if(n.module==="Erc20")return new W(n,t);if(n.module==="Xtokens")return new O(n,t);throw new Error(`Contract ${n.module} not found`)}var $=require("@moonbeam-network/xcm-builder"),R=require("@moonbeam-network/xcm-utils");async function D({address:n,chain:t,config:e,decimals:a,evmSigner:r,polkadot:s}){let c=e.balance.build({address:n,asset:s.chain.getBalanceAssetId(e.asset)});if(c.type===$.CallType.Substrate){let o=await s.query(c);return t.usesChainDecimals?(0,R.convertDecimals)(o,s.decimals,a):o}if(!r)throw new Error("Evm signer must be provided");return C(c,r).getBalance()}async function b({address:n,asset:t,config:e,evmSigner:a,polkadot:r}){let s=e.balance.build({address:n,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===$.CallType.Substrate)return r.getAssetDecimals(t||e.asset);if(!a)throw new Error("Evm signer must be provided");return C(s,a).getDecimals()}async function E(n,t){if(n.min)return t.query(n.min.build({asset:t.chain.getMinAssetId(n.asset)}));let e=t.chain.getAssetMin(n.asset);if(e){let a=await t.getAssetDecimals(n.asset);return(0,R.toBigInt)(e,a)}return 0n}async function V({transferConfig:n,destinationAddress:t,destinationFee:e,evmSigner:a,polkadot:r,sourceAddress:s}){var Y,Z,tt,et;let{asset:c,destination:m,source:{chain:o,config:i}}=n,u=q.AssetAmount.fromAsset(c,{amount:0n,decimals:await b({address:t,chain:o,config:i,evmSigner:a,polkadot:r})}),l=(Y=i.fee)!=null&&Y.asset?q.AssetAmount.fromAsset(i.fee.asset,{amount:0n,decimals:await b({address:t,asset:i.fee.asset,chain:o,config:i,evmSigner:a,polkadot:r})}):u,d=(Z=i.destinationFee)!=null&&Z.asset?q.AssetAmount.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await b({address:t,asset:i.destinationFee.asset,chain:o,config:i,evmSigner:a,polkadot:r})}):u,f=await D({address:s,chain:o,config:i,decimals:u.decimals,evmSigner:a,polkadot:r}),p=await K({address:s,balance:f,chain:o,decimals:l.decimals,feeConfig:i.fee,polkadot:r}),B=i.asset.isEqual(i.destinationFee.asset)?f:await K({address:s,balance:f,chain:o,decimals:d.decimals,feeConfig:i.destinationFee,polkadot:r}),F=await E(i,r),M=(tt=i.extrinsic)==null?void 0:tt.build({address:t,amount:f,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(c),source:o}),G=(et=i.contract)==null?void 0:et.build({address:t,amount:f,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),S=d.copyWith({amount:B}),x=await it({balance:f,chain:o,contract:G,decimals:l.decimals,destinationFeeBalanceAmount:S,destinationFeeConfig:i.destinationFee,evmSigner:a,extrinsic:M,feeConfig:i.fee,polkadot:r,sourceAddress:s}),L=u.copyWith({amount:f}),{existentialDeposit:H}=r,J=l.copyWith({amount:x}),dt=l.copyWith({amount:p}),U=u.copyWith({amount:F}),yt=mt({balanceAmount:L,existentialDeposit:H,feeAmount:J,minAmount:U});return{balance:L,chain:o,destinationFeeBalance:S,existentialDeposit:H,fee:J,feeBalance:dt,max:yt,min:U}}async function K({address:n,balance:t,chain:e,decimals:a,feeConfig:r,polkadot:s}){if(!r)return t;let c=await s.query(r.balance.build({address:n,asset:s.chain.getBalanceAssetId(r.asset)}));return e.usesChainDecimals?(0,g.convertDecimals)(c,s.decimals,a):c}async function it({balance:n,chain:t,contract:e,decimals:a,destinationFeeConfig:r,destinationFeeBalanceAmount:s,evmSigner:c,extrinsic:m,feeConfig:o,polkadot:i,sourceAddress:u}){if(e){if(!c)throw new Error("EVM Signer must be provided");if(r&&s&&typeof r.amount=="number"){let l=Number((0,g.toDecimal)(s.amount,s.decimals));if(l&&r.amount>l)throw new Error(`Can't get a fee, make sure you have ${r==null?void 0:r.amount} ${r==null?void 0:r.asset.originSymbol} needed for fees in destination`)}return ot(n,e,a,c)}if(m){let l=await ct(n,m,i,u),d=vt(a,o),f=l+d;return t.usesChainDecimals?(0,g.convertDecimals)(f,i.decimals,a):f}throw new Error("Either contract or extrinsic must be provided")}async function ot(n,t,e,a){let s=await C(t,a).getFee(n);return(0,g.convertDecimals)(s,18,e)}async function ct(n,t,e,a){try{return await e.getFee(a,t)}catch(r){if(n)throw r;return 0n}}function vt(n,t){return t!=null&&t.xcmDeliveryFeeAmount?(0,g.toBigInt)(t.xcmDeliveryFeeAmount,n):0n}function mt({balanceAmount:n,existentialDeposit:t,feeAmount:e,minAmount:a}){let r=n.toBig().minus(a.toBig()).minus(n.isSame(t)?t.toBig():(0,z.default)(0)).minus(n.isSame(e)?e.toBig():(0,z.default)(0));return n.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}var T=require("@moonbeam-network/xcm-config");var I=require("@moonbeam-network/xcm-utils"),A=at(require("big.js"),1);var ge=require("@polkadot/api-augment"),h=require("@moonbeam-network/xcm-config"),ut=require("@moonbeam-network/xcm-types"),ft=require("@moonbeam-network/xcm-utils"),Q=class n{api;chain;configService;constructor(t,e,a){this.api=t,this.chain=e,this.configService=a}static async create(t,e){return new n(await(0,ft.getPolkadotApi)(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(a=>n.create(a,e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&[h.equilibrium.key].includes(this.chain.key))return h.eq;if(e==="oring"&&this.chain.key===h.darwiniaPangoro.key)return h.paring;if(!e)throw new Error("No native symbol key found");let a=this.configService.getAsset(e);if(!a)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return a}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,a=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return ut.AssetAmount.fromAsset(this.asset,{amount:a,decimals:this.decimals})}async getAssetMeta(t){var c,m,o,i,u,l;let e=((c=this.api.query.assets)==null?void 0:c.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.assets)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((u=this.api.query.assetRegistry)==null?void 0:u.assetMetadatas)||((l=this.api.query.assetRegistry)==null?void 0:l.assetMetadataMap);if(!e)return;let a=await e(t),r="unwrapOrDefault"in a?a.unwrapOrDefault():a;return{decimals:("unwrapOrDefault"in r.decimals?r.decimals.unwrapOrDefault():r.decimals).toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var r;let e=this.chain.getMetadataAssetId(t),a=this.chain.getAssetDecimals(t)||await this.getAssetDecimalsFromQuery(e)||((r=await this.getAssetMeta(e))==null?void 0:r.decimals)||this.decimals;if(!a)throw new Error(`No decimals found for asset ${t.originSymbol}`);return a}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let a=this.api.tx[e.module][e.func],r=e.getArgs(a);return(await a(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,a){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(a)?t:a,{nonce:-1,signer:this.#t(a)?a:void 0})).toString()}#t(t){return"signPayload"in t}};var j=require("@moonbeam-network/xcm-types"),lt=require("@moonbeam-network/xcm-utils");async function pt({transferConfig:n,destinationAddress:t,evmSigner:e,polkadot:a}){let{asset:r,destination:{chain:s,config:c}}=n,m=j.AssetAmount.fromAsset(r,{amount:0n,decimals:await b({address:t,chain:s,config:c,evmSigner:e,polkadot:a})}),o=await D({address:t,chain:s,config:c,decimals:m.decimals,evmSigner:e,polkadot:a}),i=await E(c,a),u=m.copyWith({amount:o}),{existentialDeposit:l}=a,d=await Dt({address:t,config:n,evmSigner:e,polkadot:a}),f=m.copyWith({amount:i});return{balance:u,chain:s,existentialDeposit:l,fee:d,min:f}}async function Dt({config:n,polkadot:t}){let{amount:e,asset:a}=n.source.config.destinationFee,r=await t.getAssetDecimals(a),s=j.AssetAmount.fromAsset(a,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:(0,lt.toBigInt)(e,r)});let c=e.build({api:t.api,asset:t.chain.getAssetId(a)});return s.copyWith({amount:await c.call()})}async function X({configService:n,destinationAddress:t,evmSigner:e,polkadotSigner:a,sourceAddress:r,transferConfig:s}){let[c,m]=await Q.createMulti([s.destination.chain,s.source.chain],n),o=await pt({destinationAddress:t,evmSigner:e,polkadot:c,transferConfig:s}),i=await It(m,o.fee),u=await V({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:r,transferConfig:s});return{destination:o,getEstimate(l){let f=(0,A.default)((0,I.toBigInt)(l,u.balance.decimals).toString()).minus(u.balance.isSame(i)?i.toBig():(0,A.default)(0));return u.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:u.max,min:Et(o),source:u,async swap(){return X({configService:n,destinationAddress:r,evmSigner:e,polkadotSigner:a,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var G,S;let d=(0,I.toBigInt)(l,u.balance.decimals),{asset:f,source:{chain:p,config:B}}=s,F=(G=B.contract)==null?void 0:G.build({address:t,amount:d,asset:p.getAssetId(f),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i)}),M=(S=B.extrinsic)==null?void 0:S.build({address:t,amount:d,asset:p.getAssetId(f),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i),palletInstance:p.getAssetPalletInstance(f),source:p});if(F){if(!e)throw new Error("EVM Signer must be provided");return C(F,e).transfer().then(x=>typeof x=="object"?x.hash:x)}if(M){if(!a)throw new Error("Polkadot signer must be provided");return m.transfer(r,M,a)}throw new Error("Either contract or extrinsic must be provided")}}}function Et({balance:n,existentialDeposit:t,fee:e,min:a}){let r=(0,A.default)(0).plus(n.isSame(e)?e.toBig():(0,A.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,A.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,A.default)(0));return n.copyWith({amount:BigInt(r.toFixed())})}async function It(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,I.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function Tt(n){let t=(n==null?void 0:n.configService)??new T.ConfigService;return{assets(e){let{assets:a,asset:r}=(0,T.ConfigBuilder)(t).assets(e);return{assets:a,asset(s){let{sourceChains:c,source:m}=r(s);return{sourceChains:c,source(o){let{destinationChains:i,destination:u}=m(o);return{destinationChains:i,destination(l){return{async accounts(d,f,p){return X({...n,configService:t,destinationAddress:f,evmSigner:(p==null?void 0:p.evmSigner)??(p==null?void 0:p.ethersSigner),sourceAddress:d,transferConfig:u(l).build(),polkadotSigner:p==null?void 0:p.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:a,ethersSigner:r,evmSigner:s,keyOrAsset:c,polkadotSigner:m,sourceAddress:o,sourceKeyOrChain:i}){return X({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:m,sourceAddress:o,transferConfig:(0,T.ConfigBuilder)(t).assets().asset(c).source(i).destination(a).build()})}}}0&&(module.exports={Sdk,getBalance,getContractFee,getDecimals,getExtrinsicFee,getFee,getFeeBalance,getMax,getMin,getSourceData});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport {\n GetBalancesParams,\n getBalance,\n getDecimals,\n getMin,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroFeeAmount.decimals,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroDestinationFeeAmount.decimals,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n chain,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeBalanceParams\n extends Omit<GetBalancesParams, 'config' | 'evmSigner'> {\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n}\n\nexport async function getFeeBalance({\n address,\n balance,\n chain,\n decimals,\n feeConfig,\n polkadot,\n}: GetFeeBalanceParams) {\n if (!feeConfig) {\n return balance;\n }\n\n const feeBalance = await polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n );\n\n return chain.usesChainDecimals\n ? convertDecimals(feeBalance, polkadot.decimals, decimals)\n : feeBalance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n chain: AnyChain;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n chain,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n const totalFee = extrinsicFee + xcmDeliveryFee;\n\n return chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, decimals)\n : totalFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, TransactionResponse } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return contract[this.#config.func].estimateGas(...this.#config.args);\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n if (!this.#signer.provider) return 0n;\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.provider.getFeeData();\n\n return (gasPrice || 0n) + (maxPriorityFeePerGas || 0n);\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetBalancesParams {\n address: string;\n asset?: Asset;\n chain: AnyChain;\n config: AssetConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;\n\nexport async function getBalance({\n address,\n chain,\n config,\n decimals,\n evmSigner,\n polkadot,\n}: GetBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n return chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, decimals)\n : balance;\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetDecimalsParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransactionResponse } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti(\n [transferConfig.destination.chain, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals =\n await sourcePolkadot.getAssetDecimals(destinationFee);\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.assets ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n const decimals =\n 'unwrapOrDefault' in unwrapped.decimals\n ? unwrapped.decimals.unwrapOrDefault()\n : unwrapped.decimals;\n\n return {\n decimals: decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n\n const decimals =\n this.chain.getAssetDecimals(asset) ||\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.decimals; // TODO remove this and handle it separately only for native assets\n\n if (!decimals) {\n throw new Error(`No decimals found for asset ${asset.originSymbol}`);\n }\n\n return decimals;\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalance","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","import_viem","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Erc20ABI_default","isEthersContract","import_ethers","import_viem","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","XtokensABI_default","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","chain","config","decimals","evmSigner","polkadot","cfg","balance","createContract","getDecimals","asset","getMin","min","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalance","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","feeConfig","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","totalFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","_PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","_f","fn","data","unwrapped","metaId","decimals","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","configService","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["export * from './getTransferData/getSourceData';\nexport * from './getTransferData/getTransferData.utils';\nexport * from './sdk';\nexport * from './sdk.interfaces';\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n DestinationFeeConfig,\n FeeAssetConfig,\n TransferConfig,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport {\n convertDecimals,\n toBigInt,\n toDecimal,\n} from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport {\n GetBalancesParams,\n getBalance,\n getDecimals,\n getMin,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroFeeAmount.decimals,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroDestinationFeeAmount.decimals,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n\n const fee = await getFee({\n balance,\n chain,\n contract,\n decimals: zeroFeeAmount.decimals,\n destinationFeeBalanceAmount,\n destinationFeeConfig: config.destinationFee,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeBalanceParams\n extends Omit<GetBalancesParams, 'config' | 'evmSigner'> {\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n}\n\nexport async function getFeeBalance({\n address,\n balance,\n chain,\n decimals,\n feeConfig,\n polkadot,\n}: GetFeeBalanceParams) {\n if (!feeConfig) {\n return balance;\n }\n\n const feeBalance = await polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n );\n\n return chain.usesChainDecimals\n ? convertDecimals(feeBalance, polkadot.decimals, decimals)\n : feeBalance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n chain: AnyChain;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n destinationFeeConfig?: DestinationFeeConfig;\n destinationFeeBalanceAmount?: AssetAmount;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n chain,\n contract,\n decimals,\n destinationFeeConfig,\n destinationFeeBalanceAmount,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n if (\n destinationFeeConfig &&\n destinationFeeBalanceAmount &&\n typeof destinationFeeConfig.amount === 'number'\n ) {\n const destinationFeeBalance = Number(\n toDecimal(\n destinationFeeBalanceAmount.amount,\n destinationFeeBalanceAmount.decimals,\n ),\n );\n if (\n destinationFeeBalance &&\n destinationFeeConfig.amount > destinationFeeBalance\n ) {\n throw new Error(\n `Can't get a fee, make sure you have ${destinationFeeConfig?.amount} ${destinationFeeConfig?.asset.originSymbol} needed for fees in destination`,\n );\n }\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n const totalFee = extrinsicFee + xcmDeliveryFee;\n\n return chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, decimals)\n : totalFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, TransactionResponse } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return contract[this.#config.func].estimateGas(...this.#config.args);\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n if (!this.#signer.provider) return 0n;\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.provider.getFeeData();\n\n return (gasPrice || 0n) + (maxPriorityFeePerGas || 0n);\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetBalancesParams {\n address: string;\n asset?: Asset;\n chain: AnyChain;\n config: AssetConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;\n\nexport async function getBalance({\n address,\n chain,\n config,\n decimals,\n evmSigner,\n polkadot,\n}: GetBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n return chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, decimals)\n : balance;\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetDecimalsParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransactionResponse } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti(\n [transferConfig.destination.chain, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals =\n await sourcePolkadot.getAssetDecimals(destinationFee);\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.assets ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n const decimals =\n 'unwrapOrDefault' in unwrapped.decimals\n ? unwrapped.decimals.unwrapOrDefault()\n : unwrapped.decimals;\n\n return {\n decimals: decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n\n const decimals =\n this.chain.getAssetDecimals(asset) ||\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.decimals; // TODO remove this and handle it separately only for native assets\n\n if (!decimals) {\n throw new Error(`No decimals found for asset ${asset.originSymbol}`);\n }\n\n return decimals;\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getBalance","getContractFee","getDecimals","getExtrinsicFee","getFee","getFeeBalance","getMax","getMin","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","import_viem","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Erc20ABI_default","isEthersContract","import_ethers","import_viem","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","XtokensABI_default","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","chain","config","decimals","evmSigner","polkadot","cfg","balance","createContract","getDecimals","asset","getMin","min","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalance","destinationFeeBalance","min","getMin","extrinsic","contract","destinationFeeBalanceAmount","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","feeConfig","destinationFeeConfig","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","totalFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","_PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","_f","fn","data","unwrapped","metaId","decimals","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","configService","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/build/index.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SubstrateQueryConfig, ExtrinsicConfig, ContractConfig } from '@moonbeam-network/xcm-builder';
|
|
2
|
-
import { IConfigService, AssetConfig, TransferConfig, FeeAssetConfig } from '@moonbeam-network/xcm-config';
|
|
2
|
+
import { IConfigService, AssetConfig, TransferConfig, FeeAssetConfig, DestinationFeeConfig } from '@moonbeam-network/xcm-config';
|
|
3
3
|
import { AnyParachain, Asset, AssetAmount, ChainAssetId, AnyChain, Ecosystem } from '@moonbeam-network/xcm-types';
|
|
4
4
|
import { ApiPromise } from '@polkadot/api';
|
|
5
5
|
import { Signer } from '@polkadot/api/types';
|
|
@@ -72,6 +72,10 @@ interface GetBalancesParams {
|
|
|
72
72
|
evmSigner?: EvmSigner;
|
|
73
73
|
polkadot: PolkadotService;
|
|
74
74
|
}
|
|
75
|
+
type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;
|
|
76
|
+
declare function getBalance({ address, chain, config, decimals, evmSigner, polkadot, }: GetBalancesParams): Promise<bigint>;
|
|
77
|
+
declare function getDecimals({ address, asset, config, evmSigner, polkadot, }: GetDecimalsParams): Promise<number>;
|
|
78
|
+
declare function getMin(config: AssetConfig, polkadot: PolkadotService): Promise<bigint>;
|
|
75
79
|
|
|
76
80
|
interface GetSourceDataParams {
|
|
77
81
|
transferConfig: TransferConfig;
|
|
@@ -95,10 +99,12 @@ interface GetFeeParams {
|
|
|
95
99
|
evmSigner?: EvmSigner;
|
|
96
100
|
extrinsic?: ExtrinsicConfig;
|
|
97
101
|
feeConfig?: FeeAssetConfig;
|
|
102
|
+
destinationFeeConfig?: DestinationFeeConfig;
|
|
103
|
+
destinationFeeBalanceAmount?: AssetAmount;
|
|
98
104
|
polkadot: PolkadotService;
|
|
99
105
|
sourceAddress: string;
|
|
100
106
|
}
|
|
101
|
-
declare function getFee({ balance, chain, contract, decimals, evmSigner, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<bigint>;
|
|
107
|
+
declare function getFee({ balance, chain, contract, decimals, destinationFeeConfig, destinationFeeBalanceAmount, evmSigner, extrinsic, feeConfig, polkadot, sourceAddress, }: GetFeeParams): Promise<bigint>;
|
|
102
108
|
declare function getContractFee(balance: bigint, config: ContractConfig, decimals: number, evmSigner: EvmSigner): Promise<bigint>;
|
|
103
109
|
declare function getExtrinsicFee(balance: bigint, extrinsic: ExtrinsicConfig, polkadot: PolkadotService, sourceAddress: string): Promise<bigint>;
|
|
104
110
|
interface GetMaxParams {
|
|
@@ -135,4 +141,4 @@ interface SdkTransferParams extends Partial<Signers> {
|
|
|
135
141
|
sourceKeyOrChain: string | AnyChain;
|
|
136
142
|
}
|
|
137
143
|
|
|
138
|
-
export { type ChainTransferData, type DestinationChainTransferData, type EvmSigner, type GetFeeBalanceParams, type GetFeeParams, type GetMaxParams, type GetSourceDataParams, Sdk, type SdkOptions, type SdkTransferParams, type Signers, type SourceChainTransferData, type TransferData, getContractFee, getExtrinsicFee, getFee, getFeeBalance, getMax, getSourceData };
|
|
144
|
+
export { type ChainTransferData, type DestinationChainTransferData, type EvmSigner, type GetBalancesParams, type GetDecimalsParams, type GetFeeBalanceParams, type GetFeeParams, type GetMaxParams, type GetSourceDataParams, Sdk, type SdkOptions, type SdkTransferParams, type Signers, type SourceChainTransferData, type TransferData, getBalance, getContractFee, getDecimals, getExtrinsicFee, getFee, getFeeBalance, getMax, getMin, getSourceData };
|
package/build/index.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
AssetConfig,
|
|
9
9
|
TransferConfig,
|
|
10
10
|
FeeAssetConfig,
|
|
11
|
+
DestinationFeeConfig,
|
|
11
12
|
} from '@moonbeam-network/xcm-config';
|
|
12
13
|
import {
|
|
13
14
|
AnyParachain,
|
|
@@ -104,6 +105,26 @@ interface GetBalancesParams {
|
|
|
104
105
|
evmSigner?: EvmSigner;
|
|
105
106
|
polkadot: PolkadotService;
|
|
106
107
|
}
|
|
108
|
+
type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;
|
|
109
|
+
declare function getBalance({
|
|
110
|
+
address,
|
|
111
|
+
chain,
|
|
112
|
+
config,
|
|
113
|
+
decimals,
|
|
114
|
+
evmSigner,
|
|
115
|
+
polkadot,
|
|
116
|
+
}: GetBalancesParams): Promise<bigint>;
|
|
117
|
+
declare function getDecimals({
|
|
118
|
+
address,
|
|
119
|
+
asset,
|
|
120
|
+
config,
|
|
121
|
+
evmSigner,
|
|
122
|
+
polkadot,
|
|
123
|
+
}: GetDecimalsParams): Promise<number>;
|
|
124
|
+
declare function getMin(
|
|
125
|
+
config: AssetConfig,
|
|
126
|
+
polkadot: PolkadotService,
|
|
127
|
+
): Promise<bigint>;
|
|
107
128
|
|
|
108
129
|
interface GetSourceDataParams {
|
|
109
130
|
transferConfig: TransferConfig;
|
|
@@ -142,6 +163,8 @@ interface GetFeeParams {
|
|
|
142
163
|
evmSigner?: EvmSigner;
|
|
143
164
|
extrinsic?: ExtrinsicConfig;
|
|
144
165
|
feeConfig?: FeeAssetConfig;
|
|
166
|
+
destinationFeeConfig?: DestinationFeeConfig;
|
|
167
|
+
destinationFeeBalanceAmount?: AssetAmount;
|
|
145
168
|
polkadot: PolkadotService;
|
|
146
169
|
sourceAddress: string;
|
|
147
170
|
}
|
|
@@ -150,6 +173,8 @@ declare function getFee({
|
|
|
150
173
|
chain,
|
|
151
174
|
contract,
|
|
152
175
|
decimals,
|
|
176
|
+
destinationFeeConfig,
|
|
177
|
+
destinationFeeBalanceAmount,
|
|
153
178
|
evmSigner,
|
|
154
179
|
extrinsic,
|
|
155
180
|
feeConfig,
|
|
@@ -224,6 +249,8 @@ export {
|
|
|
224
249
|
type ChainTransferData,
|
|
225
250
|
type DestinationChainTransferData,
|
|
226
251
|
type EvmSigner,
|
|
252
|
+
type GetBalancesParams,
|
|
253
|
+
type GetDecimalsParams,
|
|
227
254
|
type GetFeeBalanceParams,
|
|
228
255
|
type GetFeeParams,
|
|
229
256
|
type GetMaxParams,
|
|
@@ -234,10 +261,13 @@ export {
|
|
|
234
261
|
type Signers,
|
|
235
262
|
type SourceChainTransferData,
|
|
236
263
|
type TransferData,
|
|
264
|
+
getBalance,
|
|
237
265
|
getContractFee,
|
|
266
|
+
getDecimals,
|
|
238
267
|
getExtrinsicFee,
|
|
239
268
|
getFee,
|
|
240
269
|
getFeeBalance,
|
|
241
270
|
getMax,
|
|
271
|
+
getMin,
|
|
242
272
|
getSourceData,
|
|
243
273
|
};
|
package/build/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{AssetAmount as k}from"@moonbeam-network/xcm-types";import{convertDecimals as W,toBigInt as lt}from"@moonbeam-network/xcm-utils";import V from"big.js";import{Contract as at}from"ethers";import{createPublicClient as rt,getContract as st,http as it}from"viem";function A(a){return"provider"in a}function h(a){return"signer"in a}var M=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var D=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=A(e)?new at(this.address,M,e):st({abi:M,address:this.address,client:{public:rt({chain:e.chain,transport:it()}),wallet:e}})}async getBalance(){return h(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return h(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};import{Contract as ct}from"ethers";import{createPublicClient as z,getContract as mt,http as K}from"viem";var G=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var E=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=A(e)?new ct(this.address,G,e):mt({abi:G,address:this.address,client:{public:z({chain:e.chain,transport:K()}),wallet:e}})}async transfer(){return h(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return t[this.#t.func].estimateGas(...this.#t.args)}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=h(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(A(this.#n)){if(!this.#n.provider)return 0n;let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.provider.getFeeData();return(e||0n)+(n||0n)}return z({chain:this.#n.chain,transport:K()}).getGasPrice()}};function g(a,t){if(a.module==="Erc20")return new D(a,t);if(a.module==="Xtokens")return new E(a,t);throw new Error(`Contract ${a.module} not found`)}import{CallType as $}from"@moonbeam-network/xcm-builder";import{convertDecimals as ut,toBigInt as ft}from"@moonbeam-network/xcm-utils";async function I({address:a,chain:t,config:e,decimals:n,evmSigner:r,polkadot:s}){let c=e.balance.build({address:a,asset:s.chain.getBalanceAssetId(e.asset)});if(c.type===$.Substrate){let o=await s.query(c);return t.usesChainDecimals?ut(o,s.decimals,n):o}if(!r)throw new Error("Evm signer must be provided");return g(c,r).getBalance()}async function C({address:a,asset:t,config:e,evmSigner:n,polkadot:r}){let s=e.balance.build({address:a,asset:r.chain.getBalanceAssetId(t||e.asset)});if(s.type===$.Substrate)return r.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return g(s,n).getDecimals()}async function T(a,t){if(a.min)return t.query(a.min.build({asset:t.chain.getMinAssetId(a.asset)}));let e=t.chain.getAssetMin(a.asset);if(e){let n=await t.getAssetDecimals(a.asset);return ft(e,n)}return 0n}async function L({transferConfig:a,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:r,sourceAddress:s}){var Q,X,_,N;let{asset:c,destination:m,source:{chain:o,config:i}}=a,u=k.fromAsset(c,{amount:0n,decimals:await C({address:t,chain:o,config:i,evmSigner:n,polkadot:r})}),f=(Q=i.fee)!=null&&Q.asset?k.fromAsset(i.fee.asset,{amount:0n,decimals:await C({address:t,asset:i.fee.asset,chain:o,config:i,evmSigner:n,polkadot:r})}):u,d=(X=i.destinationFee)!=null&&X.asset?k.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await C({address:t,asset:i.destinationFee.asset,chain:o,config:i,evmSigner:n,polkadot:r})}):u,l=await I({address:s,chain:o,config:i,decimals:u.decimals,evmSigner:n,polkadot:r}),p=await j({address:s,balance:l,chain:o,decimals:f.decimals,feeConfig:i.fee,polkadot:r}),P=i.asset.isEqual(i.destinationFee.asset)?l:await j({address:s,balance:l,chain:o,decimals:d.decimals,feeConfig:i.destinationFee,polkadot:r}),w=await T(i,r),S=(_=i.extrinsic)==null?void 0:_.build({address:t,amount:l,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(c),source:o}),x=(N=i.contract)==null?void 0:N.build({address:t,amount:l,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),v=await pt({balance:l,chain:o,contract:x,decimals:f.decimals,evmSigner:n,extrinsic:S,feeConfig:i.fee,polkadot:r,sourceAddress:s}),y=u.copyWith({amount:l}),{existentialDeposit:O}=r,R=f.copyWith({amount:v}),Z=f.copyWith({amount:p}),tt=d.copyWith({amount:P}),q=u.copyWith({amount:w}),et=ht({balanceAmount:y,existentialDeposit:O,feeAmount:R,minAmount:q});return{balance:y,chain:o,destinationFeeBalance:tt,existentialDeposit:O,fee:R,feeBalance:Z,max:et,min:q}}async function j({address:a,balance:t,chain:e,decimals:n,feeConfig:r,polkadot:s}){if(!r)return t;let c=await s.query(r.balance.build({address:a,asset:s.chain.getBalanceAssetId(r.asset)}));return e.usesChainDecimals?W(c,s.decimals,n):c}async function pt({balance:a,chain:t,contract:e,decimals:n,evmSigner:r,extrinsic:s,feeConfig:c,polkadot:m,sourceAddress:o}){if(e){if(!r)throw new Error("EVM Signer must be provided");return dt(a,e,n,r)}if(s){let i=await gt(a,s,m,o),u=yt(n,c),f=i+u;return t.usesChainDecimals?W(f,m.decimals,n):f}throw new Error("Either contract or extrinsic must be provided")}async function dt(a,t,e,n){let s=await g(t,n).getFee(a);return W(s,18,e)}async function gt(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function yt(a,t){return t!=null&&t.xcmDeliveryFeeAmount?lt(t.xcmDeliveryFeeAmount,a):0n}function ht({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():V(0)).minus(a.isSame(e)?e.toBig():V(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}import{ConfigBuilder as Y,ConfigService as Tt}from"@moonbeam-network/xcm-config";import{convertDecimals as Dt,toBigInt as U}from"@moonbeam-network/xcm-utils";import b from"big.js";import"@polkadot/api-augment";import{darwiniaPangoro as Ct,eq as bt,equilibrium as At,paring as Pt}from"@moonbeam-network/xcm-config";import{AssetAmount as wt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as St}from"@moonbeam-network/xcm-utils";var B=class a{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new a(await St(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>a.create(n,e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&[At.key].includes(this.chain.key))return bt;if(e==="oring"&&this.chain.key===Ct.key)return Pt;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,s;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return wt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var c,m,o,i,u,f;let e=((c=this.api.query.assets)==null?void 0:c.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.assets)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((u=this.api.query.assetRegistry)==null?void 0:u.assetMetadatas)||((f=this.api.query.assetRegistry)==null?void 0:f.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:("unwrapOrDefault"in r.decimals?r.decimals.unwrapOrDefault():r.decimals).toNumber(),symbol:r.symbol.toString()}}async getAssetDecimalsFromQuery(t){var r;let e=(r=this.api.query.assetsRegistry)==null?void 0:r.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var r;let e=this.chain.getMetadataAssetId(t),n=this.chain.getAssetDecimals(t)||await this.getAssetDecimalsFromQuery(e)||((r=await this.getAssetMeta(e))==null?void 0:r.decimals)||this.decimals;if(!n)throw new Error(`No decimals found for asset ${t.originSymbol}`);return n}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],r=e.getArgs(n);return(await n(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let r=this.api.tx[e.module][e.func],s=e.getArgs(r);return(await r(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as H}from"@moonbeam-network/xcm-types";import{toBigInt as xt}from"@moonbeam-network/xcm-utils";async function J({transferConfig:a,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:c}}=a,m=H.fromAsset(r,{amount:0n,decimals:await C({address:t,chain:s,config:c,evmSigner:e,polkadot:n})}),o=await I({address:t,chain:s,config:c,decimals:m.decimals,evmSigner:e,polkadot:n}),i=await T(c,n),u=m.copyWith({amount:o}),{existentialDeposit:f}=n,d=await vt({address:t,config:a,evmSigner:e,polkadot:n}),l=m.copyWith({amount:i});return{balance:u,chain:s,existentialDeposit:f,fee:d,min:l}}async function vt({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=H.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:xt(e,r)});let c=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await c.call()})}async function F({configService:a,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:r,transferConfig:s}){let[c,m]=await B.createMulti([s.destination.chain,s.source.chain],a),o=await J({destinationAddress:t,evmSigner:e,polkadot:c,transferConfig:s}),i=await It(m,o.fee),u=await L({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:r,transferConfig:s});return{destination:o,getEstimate(f){let l=b(U(f,u.balance.decimals).toString()).minus(u.balance.isSame(i)?i.toBig():b(0));return u.balance.copyWith({amount:l.lt(0)?0n:BigInt(l.toFixed())})},isSwapPossible:!0,max:u.max,min:Et(o),source:u,async swap(){return F({configService:a,destinationAddress:r,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(f){var x,v;let d=U(f,u.balance.decimals),{asset:l,source:{chain:p,config:P}}=s,w=(x=P.contract)==null?void 0:x.build({address:t,amount:d,asset:p.getAssetId(l),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i)}),S=(v=P.extrinsic)==null?void 0:v.build({address:t,amount:d,asset:p.getAssetId(l),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i),palletInstance:p.getAssetPalletInstance(l),source:p});if(w){if(!e)throw new Error("EVM Signer must be provided");return g(w,e).transfer().then(y=>typeof y=="object"?y.hash:y)}if(S){if(!n)throw new Error("Polkadot signer must be provided");return m.transfer(r,S,n)}throw new Error("Either contract or extrinsic must be provided")}}}function Et({balance:a,existentialDeposit:t,fee:e,min:n}){let r=b(0).plus(a.isSame(e)?e.toBig():b(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():b(0)).plus(a.toBig().lt(n.toBig())?n.toBig():b(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function It(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:Dt(t.amount,t.decimals,e),decimals:e})}function He(a){let t=(a==null?void 0:a.configService)??new Tt;return{assets(e){let{assets:n,asset:r}=Y(t).assets(e);return{assets:n,asset(s){let{sourceChains:c,source:m}=r(s);return{sourceChains:c,source(o){let{destinationChains:i,destination:u}=m(o);return{destinationChains:i,destination(f){return{async accounts(d,l,p){return F({...a,configService:t,destinationAddress:l,evmSigner:(p==null?void 0:p.evmSigner)??(p==null?void 0:p.ethersSigner),sourceAddress:d,transferConfig:u(f).build(),polkadotSigner:p==null?void 0:p.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:r,evmSigner:s,keyOrAsset:c,polkadotSigner:m,sourceAddress:o,sourceKeyOrChain:i}){return F({configService:t,destinationAddress:e,evmSigner:s??r,polkadotSigner:m,sourceAddress:o,transferConfig:Y(t).assets().asset(c).source(i).destination(n).build()})}}}export{He as Sdk,dt as getContractFee,gt as getExtrinsicFee,pt as getFee,j as getFeeBalance,ht as getMax,L as getSourceData};
|
|
1
|
+
import{AssetAmount as k}from"@moonbeam-network/xcm-types";import{convertDecimals as W,toBigInt as lt,toDecimal as pt}from"@moonbeam-network/xcm-utils";import j from"big.js";import{Contract as at}from"ethers";import{createPublicClient as rt,getContract as st,http as it}from"viem";function P(r){return"provider"in r}function g(r){return"signer"in r}var M=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var D=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=P(e)?new at(this.address,M,e):st({abi:M,address:this.address,client:{public:rt({chain:e.chain,transport:it()}),wallet:e}})}async getBalance(){return g(this.#e)?(await this.#e.balanceOf(...this.#t.args)).toBigInt():this.#e.read.balanceOf(this.#t.args)}async getDecimals(){return g(this.#e)?await this.#e.decimals():this.#e.read.decimals()}};import{Contract as ct}from"ethers";import{createPublicClient as z,getContract as mt,http as K}from"viem";var G=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var E=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=P(e)?new ct(this.address,G,e):mt({abi:G,address:this.address,client:{public:z({chain:e.chain,transport:K()}),wallet:e}})}async transfer(){return g(this.#e)?this.#e[this.#t.func](...this.#t.args):this.#e.write[this.#t.func](this.#t.args)}async getEthersContractEstimatedGas(t){return t[this.#t.func].estimateGas(...this.#t.args)}async getViemContractEstimatedGas(t){return t?t.estimateGas[this.#t.func](this.#t.args):0n}async getFee(t){if(t===0n)return 0n;try{let e=g(this.#e)?await this.getEthersContractEstimatedGas(this.#e):await this.getViemContractEstimatedGas(this.#e),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){if(P(this.#n)){if(!this.#n.provider)return 0n;let{gasPrice:e,maxPriorityFeePerGas:n}=await this.#n.provider.getFeeData();return(e||0n)+(n||0n)}return z({chain:this.#n.chain,transport:K()}).getGasPrice()}};function y(r,t){if(r.module==="Erc20")return new D(r,t);if(r.module==="Xtokens")return new E(r,t);throw new Error(`Contract ${r.module} not found`)}import{CallType as V}from"@moonbeam-network/xcm-builder";import{convertDecimals as ut,toBigInt as ft}from"@moonbeam-network/xcm-utils";async function I({address:r,chain:t,config:e,decimals:n,evmSigner:a,polkadot:s}){let c=e.balance.build({address:r,asset:s.chain.getBalanceAssetId(e.asset)});if(c.type===V.Substrate){let o=await s.query(c);return t.usesChainDecimals?ut(o,s.decimals,n):o}if(!a)throw new Error("Evm signer must be provided");return y(c,a).getBalance()}async function h({address:r,asset:t,config:e,evmSigner:n,polkadot:a}){let s=e.balance.build({address:r,asset:a.chain.getBalanceAssetId(t||e.asset)});if(s.type===V.Substrate)return a.getAssetDecimals(t||e.asset);if(!n)throw new Error("Evm signer must be provided");return y(s,n).getDecimals()}async function T(r,t){if(r.min)return t.query(r.min.build({asset:t.chain.getMinAssetId(r.asset)}));let e=t.chain.getAssetMin(r.asset);if(e){let n=await t.getAssetDecimals(r.asset);return ft(e,n)}return 0n}async function H({transferConfig:r,destinationAddress:t,destinationFee:e,evmSigner:n,polkadot:a,sourceAddress:s}){var X,_,N,$;let{asset:c,destination:m,source:{chain:o,config:i}}=r,u=k.fromAsset(c,{amount:0n,decimals:await h({address:t,chain:o,config:i,evmSigner:n,polkadot:a})}),l=(X=i.fee)!=null&&X.asset?k.fromAsset(i.fee.asset,{amount:0n,decimals:await h({address:t,asset:i.fee.asset,chain:o,config:i,evmSigner:n,polkadot:a})}):u,d=(_=i.destinationFee)!=null&&_.asset?k.fromAsset(i.destinationFee.asset,{amount:0n,decimals:await h({address:t,asset:i.destinationFee.asset,chain:o,config:i,evmSigner:n,polkadot:a})}):u,f=await I({address:s,chain:o,config:i,decimals:u.decimals,evmSigner:n,polkadot:a}),p=await L({address:s,balance:f,chain:o,decimals:l.decimals,feeConfig:i.fee,polkadot:a}),w=i.asset.isEqual(i.destinationFee.asset)?f:await L({address:s,balance:f,chain:o,decimals:d.decimals,feeConfig:i.destinationFee,polkadot:a}),S=await T(i,a),x=(N=i.extrinsic)==null?void 0:N.build({address:t,amount:f,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(c),source:o}),v=($=i.contract)==null?void 0:$.build({address:t,amount:f,asset:o.getAssetId(c),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),b=d.copyWith({amount:w}),A=await dt({balance:f,chain:o,contract:v,decimals:l.decimals,destinationFeeBalanceAmount:b,destinationFeeConfig:i.destinationFee,evmSigner:n,extrinsic:x,feeConfig:i.fee,polkadot:a,sourceAddress:s}),O=u.copyWith({amount:f}),{existentialDeposit:R}=a,q=l.copyWith({amount:A}),tt=l.copyWith({amount:p}),Q=u.copyWith({amount:S}),et=Ct({balanceAmount:O,existentialDeposit:R,feeAmount:q,minAmount:Q});return{balance:O,chain:o,destinationFeeBalance:b,existentialDeposit:R,fee:q,feeBalance:tt,max:et,min:Q}}async function L({address:r,balance:t,chain:e,decimals:n,feeConfig:a,polkadot:s}){if(!a)return t;let c=await s.query(a.balance.build({address:r,asset:s.chain.getBalanceAssetId(a.asset)}));return e.usesChainDecimals?W(c,s.decimals,n):c}async function dt({balance:r,chain:t,contract:e,decimals:n,destinationFeeConfig:a,destinationFeeBalanceAmount:s,evmSigner:c,extrinsic:m,feeConfig:o,polkadot:i,sourceAddress:u}){if(e){if(!c)throw new Error("EVM Signer must be provided");if(a&&s&&typeof a.amount=="number"){let l=Number(pt(s.amount,s.decimals));if(l&&a.amount>l)throw new Error(`Can't get a fee, make sure you have ${a==null?void 0:a.amount} ${a==null?void 0:a.asset.originSymbol} needed for fees in destination`)}return yt(r,e,n,c)}if(m){let l=await gt(r,m,i,u),d=ht(n,o),f=l+d;return t.usesChainDecimals?W(f,i.decimals,n):f}throw new Error("Either contract or extrinsic must be provided")}async function yt(r,t,e,n){let s=await y(t,n).getFee(r);return W(s,18,e)}async function gt(r,t,e,n){try{return await e.getFee(n,t)}catch(a){if(r)throw a;return 0n}}function ht(r,t){return t!=null&&t.xcmDeliveryFeeAmount?lt(t.xcmDeliveryFeeAmount,r):0n}function Ct({balanceAmount:r,existentialDeposit:t,feeAmount:e,minAmount:n}){let a=r.toBig().minus(n.toBig()).minus(r.isSame(t)?t.toBig():j(0)).minus(r.isSame(e)?e.toBig():j(0));return r.copyWith({amount:a.lt(0)?0n:BigInt(a.toFixed())})}import{ConfigBuilder as Z,ConfigService as Bt}from"@moonbeam-network/xcm-config";import{convertDecimals as Et,toBigInt as Y}from"@moonbeam-network/xcm-utils";import C from"big.js";import"@polkadot/api-augment";import{darwiniaPangoro as bt,eq as At,equilibrium as Pt,paring as wt}from"@moonbeam-network/xcm-config";import{AssetAmount as St}from"@moonbeam-network/xcm-types";import{getPolkadotApi as xt}from"@moonbeam-network/xcm-utils";var B=class r{api;chain;configService;constructor(t,e,n){this.api=t,this.chain=e,this.configService=n}static async create(t,e){return new r(await xt(t.ws),t,e)}static async createMulti(t,e){return Promise.all(t.map(n=>r.create(n,e)))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&[Pt.key].includes(this.chain.key))return At;if(e==="oring"&&this.chain.key===bt.key)return wt;if(!e)throw new Error("No native symbol key found");let n=this.configService.getAsset(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var a,s;let t=(a=this.api.consts.balances)==null?void 0:a.existentialDeposit,e=(s=this.api.consts.eqBalances)==null?void 0:s.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return St.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var c,m,o,i,u,l;let e=((c=this.api.query.assets)==null?void 0:c.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.assets)||((o=this.api.query.assetRegistry)==null?void 0:o.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.currencyMetadatas)||((u=this.api.query.assetRegistry)==null?void 0:u.assetMetadatas)||((l=this.api.query.assetRegistry)==null?void 0:l.assetMetadataMap);if(!e)return;let n=await e(t),a="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:("unwrapOrDefault"in a.decimals?a.decimals.unwrapOrDefault():a.decimals).toNumber(),symbol:a.symbol.toString()}}async getAssetDecimalsFromQuery(t){var a;let e=(a=this.api.query.assetsRegistry)==null?void 0:a.assetDecimals;return e?(await e(t)).unwrapOrDefault().toNumber():void 0}async getAssetDecimals(t){var a;let e=this.chain.getMetadataAssetId(t),n=this.chain.getAssetDecimals(t)||await this.getAssetDecimalsFromQuery(e)||((a=await this.getAssetMeta(e))==null?void 0:a.decimals)||this.decimals;if(!n)throw new Error(`No decimals found for asset ${t.originSymbol}`);return n}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],a=e.getArgs(n);return(await n(...a).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,n){let a=this.api.tx[e.module][e.func],s=e.getArgs(a);return(await a(...s).signAndSend(this.#t(n)?t:n,{nonce:-1,signer:this.#t(n)?n:void 0})).toString()}#t(t){return"signPayload"in t}};import{AssetAmount as J}from"@moonbeam-network/xcm-types";import{toBigInt as vt}from"@moonbeam-network/xcm-utils";async function U({transferConfig:r,destinationAddress:t,evmSigner:e,polkadot:n}){let{asset:a,destination:{chain:s,config:c}}=r,m=J.fromAsset(a,{amount:0n,decimals:await h({address:t,chain:s,config:c,evmSigner:e,polkadot:n})}),o=await I({address:t,chain:s,config:c,decimals:m.decimals,evmSigner:e,polkadot:n}),i=await T(c,n),u=m.copyWith({amount:o}),{existentialDeposit:l}=n,d=await Dt({address:t,config:r,evmSigner:e,polkadot:n}),f=m.copyWith({amount:i});return{balance:u,chain:s,existentialDeposit:l,fee:d,min:f}}async function Dt({config:r,polkadot:t}){let{amount:e,asset:n}=r.source.config.destinationFee,a=await t.getAssetDecimals(n),s=J.fromAsset(n,{amount:0n,decimals:a});if(Number.isFinite(e))return s.copyWith({amount:vt(e,a)});let c=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await c.call()})}async function F({configService:r,destinationAddress:t,evmSigner:e,polkadotSigner:n,sourceAddress:a,transferConfig:s}){let[c,m]=await B.createMulti([s.destination.chain,s.source.chain],r),o=await U({destinationAddress:t,evmSigner:e,polkadot:c,transferConfig:s}),i=await Tt(m,o.fee),u=await H({destinationAddress:t,destinationFee:i,evmSigner:e,polkadot:m,sourceAddress:a,transferConfig:s});return{destination:o,getEstimate(l){let f=C(Y(l,u.balance.decimals).toString()).minus(u.balance.isSame(i)?i.toBig():C(0));return u.balance.copyWith({amount:f.lt(0)?0n:BigInt(f.toFixed())})},isSwapPossible:!0,max:u.max,min:It(o),source:u,async swap(){return F({configService:r,destinationAddress:a,evmSigner:e,polkadotSigner:n,sourceAddress:t,transferConfig:{...s,destination:s.source,source:s.destination}})},async transfer(l){var v,b;let d=Y(l,u.balance.decimals),{asset:f,source:{chain:p,config:w}}=s,S=(v=w.contract)==null?void 0:v.build({address:t,amount:d,asset:p.getAssetId(f),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i)}),x=(b=w.extrinsic)==null?void 0:b.build({address:t,amount:d,asset:p.getAssetId(f),destination:o.chain,fee:i.amount,feeAsset:p.getAssetId(i),palletInstance:p.getAssetPalletInstance(f),source:p});if(S){if(!e)throw new Error("EVM Signer must be provided");return y(S,e).transfer().then(A=>typeof A=="object"?A.hash:A)}if(x){if(!n)throw new Error("Polkadot signer must be provided");return m.transfer(a,x,n)}throw new Error("Either contract or extrinsic must be provided")}}}function It({balance:r,existentialDeposit:t,fee:e,min:n}){let a=C(0).plus(r.isSame(e)?e.toBig():C(0)).plus(r.isSame(t)&&r.toBig().lt(t.toBig())?t.toBig():C(0)).plus(r.toBig().lt(n.toBig())?n.toBig():C(0));return r.copyWith({amount:BigInt(a.toFixed())})}async function Tt(r,t){let e=await r.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:Et(t.amount,t.decimals,e),decimals:e})}function Je(r){let t=(r==null?void 0:r.configService)??new Bt;return{assets(e){let{assets:n,asset:a}=Z(t).assets(e);return{assets:n,asset(s){let{sourceChains:c,source:m}=a(s);return{sourceChains:c,source(o){let{destinationChains:i,destination:u}=m(o);return{destinationChains:i,destination(l){return{async accounts(d,f,p){return F({...r,configService:t,destinationAddress:f,evmSigner:(p==null?void 0:p.evmSigner)??(p==null?void 0:p.ethersSigner),sourceAddress:d,transferConfig:u(l).build(),polkadotSigner:p==null?void 0:p.polkadotSigner})}}}}}}}}},async getTransferData({destinationAddress:e,destinationKeyOrChain:n,ethersSigner:a,evmSigner:s,keyOrAsset:c,polkadotSigner:m,sourceAddress:o,sourceKeyOrChain:i}){return F({configService:t,destinationAddress:e,evmSigner:s??a,polkadotSigner:m,sourceAddress:o,transferConfig:Z(t).assets().asset(c).source(i).destination(n).build()})}}}export{Je as Sdk,I as getBalance,yt as getContractFee,h as getDecimals,gt as getExtrinsicFee,dt as getFee,L as getFeeBalance,Ct as getMax,T as getMin,H as getSourceData};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/build/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport { FeeAssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport {\n GetBalancesParams,\n getBalance,\n getDecimals,\n getMin,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroFeeAmount.decimals,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroDestinationFeeAmount.decimals,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n chain,\n contract,\n decimals: zeroFeeAmount.decimals,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeBalanceParams\n extends Omit<GetBalancesParams, 'config' | 'evmSigner'> {\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n}\n\nexport async function getFeeBalance({\n address,\n balance,\n chain,\n decimals,\n feeConfig,\n polkadot,\n}: GetFeeBalanceParams) {\n if (!feeConfig) {\n return balance;\n }\n\n const feeBalance = await polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n );\n\n return chain.usesChainDecimals\n ? convertDecimals(feeBalance, polkadot.decimals, decimals)\n : feeBalance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n chain: AnyChain;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n chain,\n contract,\n decimals,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n const totalFee = extrinsicFee + xcmDeliveryFee;\n\n return chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, decimals)\n : totalFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, TransactionResponse } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return contract[this.#config.func].estimateGas(...this.#config.args);\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n if (!this.#signer.provider) return 0n;\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.provider.getFeeData();\n\n return (gasPrice || 0n) + (maxPriorityFeePerGas || 0n);\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetBalancesParams {\n address: string;\n asset?: Asset;\n chain: AnyChain;\n config: AssetConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;\n\nexport async function getBalance({\n address,\n chain,\n config,\n decimals,\n evmSigner,\n polkadot,\n}: GetBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n return chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, decimals)\n : balance;\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetDecimalsParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransactionResponse } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti(\n [transferConfig.destination.chain, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals =\n await sourcePolkadot.getAssetDecimals(destinationFee);\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.assets ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n const decimals =\n 'unwrapOrDefault' in unwrapped.decimals\n ? unwrapped.decimals.unwrapOrDefault()\n : unwrapped.decimals;\n\n return {\n decimals: decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n\n const decimals =\n this.chain.getAssetDecimals(asset) ||\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.decimals; // TODO remove this and handle it separately only for native assets\n\n if (!decimals) {\n throw new Error(`No decimals found for asset ${asset.originSymbol}`);\n }\n\n return decimals;\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","toBigInt","Big","Contract","createPublicClient","getContract","http","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Contract","Erc20ABI_default","getContract","createPublicClient","http","isEthersContract","Contract","createPublicClient","getContract","http","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","Contract","XtokensABI_default","getContract","createPublicClient","http","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","convertDecimals","toBigInt","getBalance","address","chain","config","decimals","evmSigner","polkadot","cfg","CallType","balance","convertDecimals","createContract","getDecimals","asset","getMin","min","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalance","destinationFeeBalance","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","destinationFeeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","feeConfig","convertDecimals","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","totalFee","createContract","error","toBigInt","result","Big","ConfigBuilder","ConfigService","convertDecimals","toBigInt","Big","darwiniaPangoro","eq","equilibrium","paring","AssetAmount","getPolkadotApi","PolkadotService","_PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","_f","fn","data","unwrapped","metaId","decimals","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.ts","../src/contract/contract.utils.ts","../src/contract/contracts/Erc20/Erc20ABI.json","../src/contract/contracts/Xtokens/Xtokens.ts","../src/contract/contracts/Xtokens/XtokensABI.json","../src/contract/contract.factory.ts","../src/getTransferData/getTransferData.utils.ts","../src/sdk.ts","../src/getTransferData/getTransferData.ts","../src/polkadot/PolkadotService.ts","../src/getTransferData/getDestinationData.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-use-before-define */\nimport {\n ContractConfig,\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n DestinationFeeConfig,\n FeeAssetConfig,\n TransferConfig,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, AssetAmount } from '@moonbeam-network/xcm-types';\nimport {\n convertDecimals,\n toBigInt,\n toDecimal,\n} from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner, SourceChainTransferData } from '../sdk.interfaces';\nimport {\n GetBalancesParams,\n getBalance,\n getDecimals,\n getMin,\n} from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.fee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n const zeroDestinationFeeAmount = config.destinationFee?.asset\n ? AssetAmount.fromAsset(config.destinationFee.asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n asset: config.destinationFee.asset,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n\n const feeBalance = await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroFeeAmount.decimals,\n feeConfig: config.fee,\n polkadot,\n });\n\n const destinationFeeBalance = config.asset.isEqual(\n config.destinationFee.asset,\n )\n ? balance\n : await getFeeBalance({\n address: sourceAddress,\n balance,\n chain,\n decimals: zeroDestinationFeeAmount.decimals,\n feeConfig: config.destinationFee,\n polkadot,\n });\n\n const min = await getMin(config, polkadot);\n\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const destinationFeeBalanceAmount = zeroDestinationFeeAmount.copyWith({\n amount: destinationFeeBalance,\n });\n\n const fee = await getFee({\n balance,\n chain,\n contract,\n decimals: zeroFeeAmount.decimals,\n destinationFeeBalanceAmount,\n destinationFeeConfig: config.destinationFee,\n evmSigner,\n extrinsic,\n feeConfig: config.fee,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n destinationFeeBalance: destinationFeeBalanceAmount,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeBalanceParams\n extends Omit<GetBalancesParams, 'config' | 'evmSigner'> {\n balance: bigint;\n feeConfig: FeeAssetConfig | undefined;\n}\n\nexport async function getFeeBalance({\n address,\n balance,\n chain,\n decimals,\n feeConfig,\n polkadot,\n}: GetFeeBalanceParams) {\n if (!feeConfig) {\n return balance;\n }\n\n const feeBalance = await polkadot.query(\n feeConfig.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(feeConfig.asset),\n }) as SubstrateQueryConfig,\n );\n\n return chain.usesChainDecimals\n ? convertDecimals(feeBalance, polkadot.decimals, decimals)\n : feeBalance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n chain: AnyChain;\n decimals: number;\n evmSigner?: EvmSigner;\n extrinsic?: ExtrinsicConfig;\n feeConfig?: FeeAssetConfig;\n destinationFeeConfig?: DestinationFeeConfig;\n destinationFeeBalanceAmount?: AssetAmount;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n chain,\n contract,\n decimals,\n destinationFeeConfig,\n destinationFeeBalanceAmount,\n evmSigner,\n extrinsic,\n feeConfig,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n if (\n destinationFeeConfig &&\n destinationFeeBalanceAmount &&\n typeof destinationFeeConfig.amount === 'number'\n ) {\n const destinationFeeBalance = Number(\n toDecimal(\n destinationFeeBalanceAmount.amount,\n destinationFeeBalanceAmount.decimals,\n ),\n );\n if (\n destinationFeeBalance &&\n destinationFeeConfig.amount > destinationFeeBalance\n ) {\n throw new Error(\n `Can't get a fee, make sure you have ${destinationFeeConfig?.amount} ${destinationFeeConfig?.asset.originSymbol} needed for fees in destination`,\n );\n }\n }\n\n return getContractFee(balance, contract, decimals, evmSigner);\n }\n\n if (extrinsic) {\n const extrinsicFee = await getExtrinsicFee(\n balance,\n extrinsic,\n polkadot,\n sourceAddress,\n );\n\n const xcmDeliveryFee = getXcmDeliveryFee(decimals, feeConfig);\n\n const totalFee = extrinsicFee + xcmDeliveryFee;\n\n return chain.usesChainDecimals\n ? convertDecimals(totalFee, polkadot.decimals, decimals)\n : totalFee;\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n evmSigner: EvmSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n evmSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nfunction getXcmDeliveryFee(\n decimals: number,\n feeConfig?: FeeAssetConfig,\n): bigint {\n return feeConfig?.xcmDeliveryFeeAmount\n ? toBigInt(feeConfig.xcmDeliveryFeeAmount, decimals)\n : 0n;\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './Erc20ABI.json';\n\ntype Erc20Contract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | Erc20Contract;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n this.address = config.address;\n\n this.#config = config;\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address as `0x${string}`,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async getBalance(): Promise<bigint> {\n if (isEthersContract(this.#contract)) {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n return balance.toBigInt();\n }\n return this.#contract.read.balanceOf(\n this.#config.args,\n ) as unknown as bigint;\n }\n\n async getDecimals(): Promise<number> {\n const decimals = isEthersContract(this.#contract)\n ? await this.#contract.decimals()\n : this.#contract.read.decimals();\n\n return decimals;\n }\n}\n","import { Contract, Signer as EthersSigner } from 'ethers';\nimport { Abi, GetContractReturnType, WalletClient } from 'viem';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport function isEthersSigner(signer: EvmSigner): signer is EthersSigner {\n return 'provider' in signer;\n}\n\nexport function isWalletClient(signer: EvmSigner): signer is WalletClient {\n return 'chain' in signer;\n}\n\nexport function isEthersContract(\n contract: Contract | GetContractReturnType<Abi | readonly unknown[]>,\n): contract is Contract {\n return 'signer' in contract;\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, TransactionResponse } from 'ethers';\nimport {\n GetContractReturnType,\n PublicClient,\n WriteContractReturnType,\n createPublicClient,\n getContract,\n http,\n} from 'viem';\nimport { EvmSigner } from '../../../sdk.interfaces';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport { isEthersContract, isEthersSigner } from '../../contract.utils';\nimport abi from './XtokensABI.json';\n\ntype XtokensContract = GetContractReturnType<typeof abi, PublicClient>;\n\nexport class Xtokens implements TransferContractInterface {\n readonly address = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract | XtokensContract;\n\n readonly #signer: EvmSigner;\n\n constructor(config: ContractConfig, signer: EvmSigner) {\n this.#config = config;\n\n this.#signer = signer;\n\n this.#contract = isEthersSigner(signer)\n ? new Contract(this.address, abi, signer)\n : getContract({\n abi,\n address: this.address,\n client: {\n public: createPublicClient({\n chain: signer.chain,\n transport: http(),\n }),\n wallet: signer,\n },\n });\n }\n\n async transfer(): Promise<TransactionResponse | WriteContractReturnType> {\n if (isEthersContract(this.#contract)) {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n return this.#contract.write[this.#config.func](this.#config.args);\n }\n\n async getEthersContractEstimatedGas(contract: Contract): Promise<bigint> {\n return contract[this.#config.func].estimateGas(...this.#config.args);\n }\n\n async getViemContractEstimatedGas(\n contract: XtokensContract,\n ): Promise<bigint> {\n if (!contract) {\n return 0n;\n }\n\n return contract.estimateGas[this.#config.func](this.#config.args as any);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = isEthersContract(this.#contract)\n ? await this.getEthersContractEstimatedGas(this.#contract)\n : await this.getViemContractEstimatedGas(this.#contract);\n const gasPrice = await this.getGasPrice();\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n throw new Error(\n \"Can't get a fee. Make sure that you have enough balance!\",\n );\n }\n }\n\n private async getGasPrice() {\n if (isEthersSigner(this.#signer)) {\n if (!this.#signer.provider) return 0n;\n const { gasPrice, maxPriorityFeePerGas } =\n await this.#signer.provider.getFeeData();\n\n return (gasPrice || 0n) + (maxPriorityFeePerGas || 0n);\n }\n\n const publicClient = createPublicClient({\n chain: this.#signer.chain,\n transport: http(),\n });\n\n return publicClient.getGasPrice();\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { EvmSigner } from '../sdk.interfaces';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: EvmSigner,\n): TransferContractInterface | BalanceContractInterface {\n if (config.module === 'Erc20') {\n return new Erc20(config, signer);\n }\n\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { CallType, SubstrateQueryConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { EvmSigner } from '../sdk.interfaces';\n\nexport interface GetBalancesParams {\n address: string;\n asset?: Asset;\n chain: AnyChain;\n config: AssetConfig;\n decimals: number;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport type GetDecimalsParams = Omit<GetBalancesParams, 'decimals'>;\n\nexport async function getBalance({\n address,\n chain,\n config,\n decimals,\n evmSigner,\n polkadot,\n}: GetBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n const balance = await polkadot.query(cfg as SubstrateQueryConfig);\n return chain.usesChainDecimals\n ? convertDecimals(balance, polkadot.decimals, decimals)\n : balance;\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getBalance();\n}\n\nexport async function getDecimals({\n address,\n asset,\n config,\n evmSigner,\n polkadot,\n}: GetDecimalsParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(asset || config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.getAssetDecimals(asset || config.asset);\n }\n\n if (!evmSigner) {\n throw new Error('Evm signer must be provided');\n }\n\n const contract = createContract(cfg, evmSigner) as BalanceContractInterface;\n\n return contract.getDecimals();\n}\n\nexport async function getMin(config: AssetConfig, polkadot: PolkadotService) {\n if (config.min) {\n return polkadot.query(\n config.min.build({ asset: polkadot.chain.getMinAssetId(config.asset) }),\n );\n }\n\n const min = polkadot.chain.getAssetMin(config.asset);\n\n if (min) {\n const decimals = await polkadot.getAssetDecimals(config.asset);\n\n return toBigInt(min, decimals);\n }\n\n return 0n;\n}\n","/* eslint-disable sort-keys */\nimport {\n ConfigBuilder,\n ConfigService,\n IConfigService,\n} from '@moonbeam-network/xcm-config';\nimport { AnyChain, Asset, Ecosystem } from '@moonbeam-network/xcm-types';\nimport { getTransferData as gtd } from './getTransferData/getTransferData';\nimport { Signers, TransferData } from './sdk.interfaces';\n\nexport interface SdkOptions extends Partial<Signers> {\n configService?: IConfigService;\n}\n\nexport function Sdk(options?: SdkOptions) {\n const configService = options?.configService ?? new ConfigService();\n\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder(configService).assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n configService,\n destinationAddress,\n evmSigner: signers?.evmSigner ?? signers?.ethersSigner,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n polkadotSigner: signers?.polkadotSigner,\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n evmSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n configService,\n destinationAddress,\n evmSigner: evmSigner ?? ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder(configService)\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { IConfigService, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { TransactionResponse } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport {\n DestinationChainTransferData,\n Signers,\n TransferData,\n} from '../sdk.interfaces';\nimport { getDestinationData } from './getDestinationData';\nimport { getSourceData } from './getSourceData';\n\nexport interface GetTransferDataParams extends Partial<Signers> {\n configService: IConfigService;\n destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n configService,\n destinationAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti(\n [transferConfig.destination.chain, transferConfig.source.chain],\n configService,\n );\n\n const destination = await getDestinationData({\n destinationAddress,\n evmSigner,\n polkadot: destPolkadot,\n transferConfig,\n });\n\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n evmSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n },\n /**\n * Right now it will be always true\n * because all current asset can be sent both directions\n * and our configuration need destination config.\n */\n isSwapPossible: true,\n max: source.max,\n min: getMin(destination),\n source,\n async swap() {\n return getTransferData({\n configService,\n destinationAddress: sourceAddress,\n evmSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!evmSigner) {\n throw new Error('EVM Signer must be provided');\n }\n\n return (\n createContract(contract, evmSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) =>\n typeof tx === 'object' ? (tx as TransactionResponse).hash : tx,\n );\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals =\n await sourcePolkadot.getAssetDecimals(destinationFee);\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n IConfigService,\n darwiniaPangoro,\n eq,\n equilibrium,\n paring,\n} from '@moonbeam-network/xcm-config';\nimport {\n AnyParachain,\n Asset,\n AssetAmount,\n ChainAssetId,\n} from '@moonbeam-network/xcm-types';\nimport { getPolkadotApi } from '@moonbeam-network/xcm-utils';\nimport { ApiPromise } from '@polkadot/api';\nimport type { Signer as PolkadotSigner } from '@polkadot/api/types';\nimport { Option, u128, u8 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n readonly configService: IConfigService;\n\n constructor(\n api: ApiPromise,\n chain: AnyParachain,\n configService: IConfigService,\n ) {\n this.api = api;\n this.chain = chain;\n this.configService = configService;\n }\n\n static async create(\n chain: AnyParachain,\n configService: IConfigService,\n ): Promise<PolkadotService> {\n return new PolkadotService(\n await getPolkadotApi(chain.ws),\n chain,\n configService,\n );\n }\n\n static async createMulti(\n chains: AnyParachain[],\n configService: IConfigService,\n ): Promise<PolkadotService[]> {\n return Promise.all(\n chains.map((chain: AnyParachain) =>\n PolkadotService.create(chain, configService),\n ),\n );\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && [equilibrium.key].includes(this.chain.key)) {\n return eq;\n }\n\n // TODO: Remove this once Darwinia Pangoro is updated\n if (key === 'oring' && this.chain.key === darwiniaPangoro.key) {\n return paring;\n }\n\n if (!key) {\n throw new Error('No native symbol key found');\n }\n\n const asset = this.configService.getAsset(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.assets ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n const decimals =\n 'unwrapOrDefault' in unwrapped.decimals\n ? unwrapped.decimals.unwrapOrDefault()\n : unwrapped.decimals;\n\n return {\n decimals: decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimalsFromQuery(\n asset: ChainAssetId,\n ): Promise<number | undefined> {\n const fn = this.api.query.assetsRegistry?.assetDecimals;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as Option<u8>;\n\n return data.unwrapOrDefault().toNumber();\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n const metaId = this.chain.getMetadataAssetId(asset);\n\n const decimals =\n this.chain.getAssetDecimals(asset) ||\n (await this.getAssetDecimalsFromQuery(metaId)) ||\n (await this.getAssetMeta(metaId))?.decimals ||\n this.decimals; // TODO remove this and handle it separately only for native assets\n\n if (!decimals) {\n throw new Error(`No decimals found for asset ${asset.originSymbol}`);\n }\n\n return decimals;\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { FeeConfigBuilder } from '@moonbeam-network/xcm-builder';\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData, EvmSigner } from '../sdk.interfaces';\nimport { getBalance, getDecimals, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n evmSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await getDecimals({\n address: destinationAddress,\n chain,\n config,\n evmSigner,\n polkadot,\n }),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n chain,\n config,\n decimals: zeroAmount.decimals,\n evmSigner,\n polkadot,\n });\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n\n const feeAmount = await getFee({\n address: destinationAddress,\n config: transferConfig,\n evmSigner,\n polkadot,\n });\n const minAmount = zeroAmount.copyWith({ amount: min });\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n address: string;\n config: TransferConfig;\n evmSigner?: EvmSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n // TODO we have to consider correctly here when an asset is ERC20 to get it from contract\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","toBigInt","toDecimal","Big","Contract","createPublicClient","getContract","http","isEthersSigner","signer","isEthersContract","contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","isEthersSigner","Contract","Erc20ABI_default","getContract","createPublicClient","http","isEthersContract","Contract","createPublicClient","getContract","http","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","isEthersSigner","Contract","XtokensABI_default","getContract","createPublicClient","http","isEthersContract","contract","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","convertDecimals","toBigInt","getBalance","address","chain","config","decimals","evmSigner","polkadot","cfg","CallType","balance","convertDecimals","createContract","getDecimals","asset","getMin","min","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","evmSigner","polkadot","sourceAddress","_a","_b","_c","_d","asset","destination","chain","config","zeroAmount","AssetAmount","getDecimals","zeroFeeAmount","zeroDestinationFeeAmount","balance","getBalance","feeBalance","getFeeBalance","destinationFeeBalance","min","getMin","extrinsic","contract","destinationFeeBalanceAmount","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","feeConfig","convertDecimals","destinationFeeConfig","toDecimal","getContractFee","extrinsicFee","getExtrinsicFee","xcmDeliveryFee","getXcmDeliveryFee","totalFee","createContract","error","toBigInt","result","Big","ConfigBuilder","ConfigService","convertDecimals","toBigInt","Big","darwiniaPangoro","eq","equilibrium","paring","AssetAmount","getPolkadotApi","PolkadotService","_PolkadotService","api","chain","configService","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","_f","fn","data","unwrapped","metaId","decimals","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","evmSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","getDecimals","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","configService","destinationAddress","evmSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","configService","ConfigService","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","evmSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moonbeam-network/xcm-sdk",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.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",
|
|
@@ -51,10 +51,10 @@
|
|
|
51
51
|
"types": "./build/index.d.ts",
|
|
52
52
|
"main": "./build/index.cjs",
|
|
53
53
|
"dependencies": {
|
|
54
|
-
"@moonbeam-network/xcm-builder": "2.0.
|
|
55
|
-
"@moonbeam-network/xcm-config": "2.0.
|
|
56
|
-
"@moonbeam-network/xcm-types": "2.0.
|
|
57
|
-
"@moonbeam-network/xcm-utils": "2.0.
|
|
54
|
+
"@moonbeam-network/xcm-builder": "2.0.2",
|
|
55
|
+
"@moonbeam-network/xcm-config": "2.0.5",
|
|
56
|
+
"@moonbeam-network/xcm-types": "2.0.2",
|
|
57
|
+
"@moonbeam-network/xcm-utils": "2.0.2",
|
|
58
58
|
"big.js": "^6.2.1"
|
|
59
59
|
},
|
|
60
60
|
"peerDependencies": {
|