@moonbeam-network/xcm-sdk 1.0.7 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -6
- package/build/index.cjs +1 -1
- package/build/index.cjs.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.mjs +1 -1
- package/build/index.mjs.map +1 -1
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|

|
|
2
2
|
|
|
3
|
-
The Moonbeam XCM SDK enables developers to easily
|
|
3
|
+
The Moonbeam XCM SDK enables developers to easily transfer assets between chains, either between parachains or between a parachain and the relay chain, within the Polkadot/Kusama ecosystem. With the SDK, you don't need to worry about determining the multilocation of the origin or destination assets or which extrinsics are used on which networks to send XCM transfers.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The XCM SDK offers helper functions, that provide a very simple interface to execute XCM transfers between chains in the Polkadot/Kusama ecosystem. In addition, the XCM config package allows any parachain project to add their information in a standard way, so they can be immediately supported by the XCM SDK.
|
|
6
|
+
|
|
7
|
+
# Documentation
|
|
6
8
|
|
|
7
9
|
## v1 (current)
|
|
8
10
|
|
|
9
|
-
-
|
|
11
|
+
- [readme](https://github.com/PureStake/xcm-sdk/tree/main)
|
|
12
|
+
- [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/xcm-sdk/)
|
|
13
|
+
- [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/reference/)
|
|
10
14
|
|
|
11
15
|
## v0 (previous)
|
|
12
16
|
|
|
13
17
|
- [readme](https://github.com/PureStake/xcm-sdk/tree/v0)
|
|
14
|
-
- [usage](https://docs.moonbeam.network/builders/xcm/xcm-sdk/xcm-sdk/)
|
|
15
|
-
- [
|
|
18
|
+
- [usage](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v0/xcm-sdk/)
|
|
19
|
+
- [reference](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v0/reference/)
|
|
16
20
|
|
|
17
21
|
# Installation
|
|
18
22
|
|
|
@@ -28,7 +32,44 @@ npm i @polkadot/api @polkadot/api-augment @polkadot/types @polkadot/util @polkad
|
|
|
28
32
|
|
|
29
33
|
# Usage
|
|
30
34
|
|
|
31
|
-
|
|
35
|
+
The following sections contain basic examples of how to work with the XCM SDK to build transfer data to transfer an asset from one chain to another and how to submit the transfer. For a detailed overview on how to use each method, including a reference to the parameters and returned data of each method exposed by the SDK, please refer to the [XCM SDK v1 docs](https://docs.moonbeam.network/builders/interoperability/xcm/xcm-sdk/v1/).
|
|
36
|
+
|
|
37
|
+
## Build XCM Transfer Data
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
import { Sdk } from '@moonbeam-network/xcm-sdk';
|
|
41
|
+
|
|
42
|
+
const { assets, getTransferData } = Sdk();
|
|
43
|
+
|
|
44
|
+
// You can build the XCM transfer data via the assets function
|
|
45
|
+
const dataViaAssetsMethod = await assets()
|
|
46
|
+
.asset('INSERT_ASSET')
|
|
47
|
+
.source('INSERT_SOURCE_CHAIN')
|
|
48
|
+
.destination('INSERT_DESTINATION_CHAIN')
|
|
49
|
+
.accounts('INSERT_SOURCE_ADDRESS', 'INSERT_DESTINATION_ADDRESS', {
|
|
50
|
+
ethersSigner?: 'INSERT_ETHERS_SIGNER',
|
|
51
|
+
polkadotSigner?: 'INSERT_POLKADOT_SIGNER',
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Or via the getTransferData function
|
|
55
|
+
const dataViaGetTransferDataMethod = await getTransferData({
|
|
56
|
+
destinationAddress: 'INSERT_DESTINATION_ADDRESS',
|
|
57
|
+
destinationKeyOrChain: 'INSERT_DESTINATION_CHAIN',
|
|
58
|
+
ethersSigner?: 'INSERT_ETHERS_SIGNER',
|
|
59
|
+
keyOrAsset: 'INSERT_ASSET',
|
|
60
|
+
polkadotSigner?: 'INSERT_POLKADOT_SIGNER',
|
|
61
|
+
sourceAddress: 'INSERT_SOURCE_ADDRESS',
|
|
62
|
+
sourceKeyOrChain: 'INSERT_SOURCE_CHAIN',
|
|
63
|
+
});
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Transfer
|
|
67
|
+
|
|
68
|
+
```js
|
|
69
|
+
...
|
|
70
|
+
|
|
71
|
+
const hash = await dataViaGetTransferDataMethod.transfer('INSERT_TRANSFER_AMOUNT');
|
|
72
|
+
```
|
|
32
73
|
|
|
33
74
|
# Examples
|
|
34
75
|
|
package/build/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var st=Object.create;var S=Object.defineProperty;var rt=Object.getOwnPropertyDescriptor;var at=Object.getOwnPropertyNames;var it=Object.getPrototypeOf,ot=Object.prototype.hasOwnProperty;var ct=(n,t)=>{for(var e in t)S(n,e,{get:t[e],enumerable:!0})},z=(n,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of at(t))!ot.call(n,r)&&r!==e&&S(n,r,{get:()=>t[r],enumerable:!(s=rt(t,r))||s.enumerable});return n};var N=(n,t,e)=>(e=n!=null?st(it(n)):{},z(t||!n||!n.__esModule?S(e,"default",{value:n,enumerable:!0}):e,n)),mt=n=>z(S({},"__esModule",{value:!0}),n);var lt={};ct(lt,{Sdk:()=>dt,getContractFee:()=>J,getExtrinsicFee:()=>U,getFee:()=>H,getFeeBalances:()=>L,getMax:()=>V,getSourceData:()=>v});module.exports=mt(lt);var M=require("@moonbeam-network/xcm-types"),j=require("@moonbeam-network/xcm-utils"),E=N(require("big.js"),1);var $=require("ethers");var X=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var D=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new $.Contract(this.address,X,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),s=await this.getGasPrice();return e*s}catch(e){return console.error(e),0n}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function T(n,t){if(n.module==="Xtokens")return new D(n,t);throw new Error(`Contract ${n.module} not found`)}var Q=require("@moonbeam-network/xcm-utils");async function B(n,t,e){return e.query(t.balance.build({address:n,asset:e.chain.getBalanceAssetId(t.asset)}))}async function I(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 s=await t.getAssetDecimals(n.asset);return(0,Q.toBigInt)(e,s)}return 0n}async function v({transferConfig:n,destinationAddress:t,destinationFee:e,ethersSigner:s,polkadot:r,sourceAddress:a}){var O,R,K;let{asset:i,destination:m,source:{chain:o,config:c}}=n,f=M.AssetAmount.fromAsset(i,{amount:0n,decimals:await r.getAssetDecimals(i)}),g=(O=c.fee)!=null&&O.asset?M.AssetAmount.fromAsset(c.fee.asset,{amount:0n,decimals:await r.getAssetDecimals(c.fee.asset)}):f,u=await B(a,c,r),p=await L({address:a,balance:u,config:c,polkadot:r}),P=await I(c,r),C=(R=c.extrinsic)==null?void 0:R.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),x=(K=c.contract)==null?void 0:K.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),b=await H({balance:u,contract:x,decimals:g.decimals,ethersSigner:s,extrinsic:C,polkadot:r,sourceAddress:a}),h=f.copyWith({amount:u}),{existentialDeposit:w}=r,W=g.copyWith({amount:b}),et=g.copyWith({amount:p}),q=f.copyWith({amount:P}),nt=V({balanceAmount:h,existentialDeposit:w,feeAmount:W,minAmount:q});return{balance:h,chain:o,existentialDeposit:w,fee:W,feeBalance:et,max:nt,min:q}}async function L({address:n,balance:t,config:e,polkadot:s}){return e.fee?s.query(e.fee.balance.build({address:n,asset:s.chain.getBalanceAssetId(e.fee.asset)})):t}async function H({balance:n,contract:t,decimals:e,ethersSigner:s,extrinsic:r,polkadot:a,sourceAddress:i}){if(t){if(!s)throw new Error("Ethers signer must be provided");return J(n,t,e,s)}if(r)return U(n,r,a,i);throw new Error("Either contract or extrinsic must be provided")}async function J(n,t,e,s){let a=await T(t,s).getFee(n);return(0,j.convertDecimals)(a,18,e)}async function U(n,t,e,s){try{return await e.getFee(s,t)}catch(r){if(n)throw r;return 0n}}function V({balanceAmount:n,existentialDeposit:t,feeAmount:e,minAmount:s}){let r=n.toBig().minus(s.toBig()).minus(n.isSame(t)?t.toBig():(0,E.default)(0)).minus(n.isSame(e)?e.toBig():(0,E.default)(0));return n.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}var G=require("@moonbeam-network/xcm-config");var A=require("@moonbeam-network/xcm-utils"),y=N(require("big.js"),1);var Wt=require("@polkadot/api-augment"),d=require("@moonbeam-network/xcm-config"),Y=require("@moonbeam-network/xcm-types"),Z=require("@moonbeam-network/xcm-utils"),l=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new l(await(0,Z.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(l.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===d.equilibriumAlphanet.key)return d.eq;if(e==="oring"&&this.chain.key===d.darwiniaPangoro.key)return d.paring;if(!e)throw new Error("No native symbol key found");let s=d.assetsMap.get(e);if(!s)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return s}get existentialDeposit(){var r,a;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(a=this.api.consts.eqBalances)==null?void 0:a.existentialDeposit,s=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return Y.AssetAmount.fromAsset(this.asset,{amount:s,decimals:this.decimals})}async getAssetMeta(t){var a,i,m,o,c;let e=((a=this.api.query.assets)==null?void 0:a.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadataMap);if(!e)return;let s=await e(t),r="unwrapOrDefault"in s?s.unwrapOrDefault():s;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let s=this.api.tx[e.module][e.func],r=e.getArgs(s);return(await s(...r).paymentInfo(t,{nonce:-1})).partialFee.toBigInt()}async transfer(t,e,s){let r=this.api.tx[e.module][e.func],a=e.getArgs(r);return(await r(...a).signAndSend(this.#t(s)?t:s,{nonce:-1,signer:this.#t(s)?s:void 0})).toString()}#t(t){return"signPayload"in t}};var F=require("@moonbeam-network/xcm-types"),_=require("@moonbeam-network/xcm-utils");async function tt({transferConfig:n,destinationAddress:t,polkadot:e}){let{asset:s,destination:{chain:r,config:a}}=n,i=F.AssetAmount.fromAsset(s,{amount:0n,decimals:await e.getAssetDecimals(s)}),m=await B(t,a,e),o=await I(a,e),c=i.copyWith({amount:m}),{existentialDeposit:f}=e,g=await ft({config:n,polkadot:e}),u=i.copyWith({amount:o});return{balance:c,chain:r,existentialDeposit:f,fee:g,min:u}}async function ft({config:n,polkadot:t}){let{amount:e,asset:s}=n.source.config.destinationFee,r=await t.getAssetDecimals(s),a=F.AssetAmount.fromAsset(s,{amount:0n,decimals:r});if(Number.isFinite(e))return a.copyWith({amount:(0,_.toBigInt)(e,r)});let i=e.build({api:t.api,asset:t.chain.getAssetId(s)});return a.copyWith({amount:await i.call()})}async function k({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:s,transferConfig:r}){let[a,i]=await l.createMulti([r.destination.chain,r.source.chain]),m=await tt({destinationAddress:n,polkadot:a,transferConfig:r}),o=await pt(i,m.fee),c=await v({destinationAddress:n,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:s,transferConfig:r});return{destination:m,getEstimate(f){let u=(0,y.default)((0,A.toBigInt)(f,c.balance.decimals).toString()).minus(c.balance.isSame(o)?o.toBig():(0,y.default)(0));return c.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:c.max,min:gt(m),source:c,async swap(){return k({destinationAddress:s,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(f){var b,h;let g=(0,A.toBigInt)(f,c.balance.decimals),{asset:u,source:{chain:p,config:P}}=r,C=(b=P.contract)==null?void 0:b.build({address:n,amount:g,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o)}),x=(h=P.extrinsic)==null?void 0:h.build({address:n,amount:g,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o),palletInstance:p.getAssetPalletInstance(u),source:p});if(C){if(!t)throw new Error("Ethers signer must be provided");return T(C,t).transfer().then(w=>w.hash)}if(x){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(s,x,e)}throw new Error("Either contract or extrinsic must be provided")}}}function gt({balance:n,existentialDeposit:t,fee:e,min:s}){let r=(0,y.default)(0).plus(n.isSame(e)?e.toBig():(0,y.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,y.default)(0)).plus(n.toBig().lt(s.toBig())?s.toBig():(0,y.default)(0));return n.copyWith({amount:BigInt(r.toFixed())})}async function pt(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,A.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function dt(n){return{assets(t){let{assets:e,asset:s}=(0,G.ConfigBuilder)().assets(t);return{assets:e,asset(r){let{sourceChains:a,source:i}=s(r);return{sourceChains:a,source(m){let{destinationChains:o,destination:c}=i(m);return{destinationChains:o,destination(f){return{async accounts(g,u,p){return k({...n,...p,destinationAddress:u,sourceAddress:g,transferConfig:c(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:s,keyOrAsset:r,polkadotSigner:a,sourceAddress:i,sourceKeyOrChain:m}){return k({destinationAddress:t,ethersSigner:s,polkadotSigner:a,sourceAddress:i,transferConfig:(0,G.ConfigBuilder)().assets().asset(r).source(m).destination(e).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalances,getMax,getSourceData});
|
|
1
|
+
"use strict";var ot=Object.create;var B=Object.defineProperty;var ct=Object.getOwnPropertyDescriptor;var mt=Object.getOwnPropertyNames;var ut=Object.getPrototypeOf,pt=Object.prototype.hasOwnProperty;var ft=(n,t)=>{for(var e in t)B(n,e,{get:t[e],enumerable:!0})},K=(n,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of mt(t))!pt.call(n,r)&&r!==e&&B(n,r,{get:()=>t[r],enumerable:!(a=ct(t,r))||a.enumerable});return n};var z=(n,t,e)=>(e=n!=null?ot(ut(n)):{},K(t||!n||!n.__esModule?B(e,"default",{value:n,enumerable:!0}):e,n)),lt=n=>K(B({},"__esModule",{value:!0}),n);var Ct={};ft(Ct,{Sdk:()=>bt,getContractFee:()=>Y,getExtrinsicFee:()=>Z,getFee:()=>V,getFeeBalances:()=>U,getMax:()=>tt,getSourceData:()=>F});module.exports=lt(Ct);var E=require("@moonbeam-network/xcm-types"),J=require("@moonbeam-network/xcm-utils"),k=z(require("big.js"),1);var X=require("ethers");var N=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var T=class{address;#t;#e;constructor(t,e){if(!t.address)throw new Error("Contract address is required");this.address=t.address,this.#t=t,this.#e=new X.Contract(this.address,N,e)}async getBalance(){return(await this.#e.balanceOf(...this.#t.args)).toBigInt()}};var j=require("ethers");var $=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var I=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new j.Contract(this.address,$,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),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(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function h(n,t){if(n.module==="Erc20")return new T(n,t);if(n.module==="Xtokens")return new I(n,t);throw new Error(`Contract ${n.module} not found`)}var L=require("@moonbeam-network/xcm-builder"),H=require("@moonbeam-network/xcm-utils");async function D({address:n,config:t,ethersSigner:e,polkadot:a}){let r=t.balance.build({address:n,asset:a.chain.getBalanceAssetId(t.asset)});return r.type===L.CallType.Substrate?a.query(r):h(r,e).getBalance()}async function v(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,H.toBigInt)(e,a)}return 0n}async function F({transferConfig:n,destinationAddress:t,destinationFee:e,ethersSigner:a,polkadot:r,sourceAddress:s}){var _,Q,R;let{asset:i,destination:m,source:{chain:o,config:c}}=n,f=E.AssetAmount.fromAsset(i,{amount:0n,decimals:await r.getAssetDecimals(i)}),l=(_=c.fee)!=null&&_.asset?E.AssetAmount.fromAsset(c.fee.asset,{amount:0n,decimals:await r.getAssetDecimals(c.fee.asset)}):f,u=await D({address:s,config:c,ethersSigner:a,polkadot:r}),p=await U({address:s,balance:u,config:c,polkadot:r}),C=await v(c,r),P=(Q=c.extrinsic)==null?void 0:Q.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),w=(R=c.contract)==null?void 0:R.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),x=await V({balance:u,contract:w,decimals:l.decimals,ethersSigner:a,extrinsic:P,polkadot:r,sourceAddress:s}),A=f.copyWith({amount:u}),{existentialDeposit:S}=r,W=l.copyWith({amount:x}),st=l.copyWith({amount:p}),O=f.copyWith({amount:C}),it=tt({balanceAmount:A,existentialDeposit:S,feeAmount:W,minAmount:O});return{balance:A,chain:o,existentialDeposit:S,fee:W,feeBalance:st,max:it,min:O}}async function U({address:n,balance:t,config:e,polkadot:a}){return e.fee?a.query(e.fee.balance.build({address:n,asset:a.chain.getBalanceAssetId(e.fee.asset)})):t}async function V({balance:n,contract:t,decimals:e,ethersSigner:a,extrinsic:r,polkadot:s,sourceAddress:i}){if(t){if(!a)throw new Error("Ethers signer must be provided");return Y(n,t,e,a)}if(r)return Z(n,r,s,i);throw new Error("Either contract or extrinsic must be provided")}async function Y(n,t,e,a){let s=await h(t,a).getFee(n);return(0,J.convertDecimals)(s,18,e)}async function Z(n,t,e,a){try{return await e.getFee(a,t)}catch(r){if(n)throw r;return 0n}}function tt({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 q=require("@moonbeam-network/xcm-config");var b=require("@moonbeam-network/xcm-utils"),y=z(require("big.js"),1);var Vt=require("@polkadot/api-augment"),d=require("@moonbeam-network/xcm-config"),et=require("@moonbeam-network/xcm-types"),nt=require("@moonbeam-network/xcm-utils"),g=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new g(await(0,nt.getPolkadotApi)(t.ws),t)}static async createMulti(t){return Promise.all(t.map(g.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===d.equilibriumAlphanet.key)return d.eq;if(e==="oring"&&this.chain.key===d.darwiniaPangoro.key)return d.paring;if(!e)throw new Error("No native symbol key found");let a=d.assetsMap.get(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 et.AssetAmount.fromAsset(this.asset,{amount:a,decimals:this.decimals})}async getAssetMeta(t){var s,i,m,o,c;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadataMap);if(!e)return;let a=await e(t),r="unwrapOrDefault"in a?a.unwrapOrDefault():a;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let 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 G=require("@moonbeam-network/xcm-types"),at=require("@moonbeam-network/xcm-utils");async function rt({transferConfig:n,destinationAddress:t,ethersSigner:e,polkadot:a}){let{asset:r,destination:{chain:s,config:i}}=n,m=G.AssetAmount.fromAsset(r,{amount:0n,decimals:await a.getAssetDecimals(r)}),o=await D({address:t,config:i,ethersSigner:e,polkadot:a}),c=await v(i,a),f=m.copyWith({amount:o}),{existentialDeposit:l}=a,u=await yt({config:n,polkadot:a}),p=m.copyWith({amount:c});return{balance:f,chain:s,existentialDeposit:l,fee:u,min:p}}async function yt({config:n,polkadot:t}){let{amount:e,asset:a}=n.source.config.destinationFee,r=await t.getAssetDecimals(a),s=G.AssetAmount.fromAsset(a,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:(0,at.toBigInt)(e,r)});let i=e.build({api:t.api,asset:t.chain.getAssetId(a)});return s.copyWith({amount:await i.call()})}async function M({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:a,transferConfig:r}){if(!t)throw new Error("Ethers signer must be provided");let[s,i]=await g.createMulti([r.destination.chain,r.source.chain]),m=await rt({destinationAddress:n,ethersSigner:t,polkadot:s,transferConfig:r}),o=await At(i,m.fee),c=await F({destinationAddress:n,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:a,transferConfig:r});return{destination:m,getEstimate(f){let u=(0,y.default)((0,b.toBigInt)(f,c.balance.decimals).toString()).minus(c.balance.isSame(o)?o.toBig():(0,y.default)(0));return c.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:c.max,min:ht(m),source:c,async swap(){return M({destinationAddress:a,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(f){var x,A;let l=(0,b.toBigInt)(f,c.balance.decimals),{asset:u,source:{chain:p,config:C}}=r,P=(x=C.contract)==null?void 0:x.build({address:n,amount:l,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o)}),w=(A=C.extrinsic)==null?void 0:A.build({address:n,amount:l,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o),palletInstance:p.getAssetPalletInstance(u),source:p});if(P){if(!t)throw new Error("Ethers signer must be provided");return h(P,t).transfer().then(S=>S.hash)}if(w){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(a,w,e)}throw new Error("Either contract or extrinsic must be provided")}}}function ht({balance:n,existentialDeposit:t,fee:e,min:a}){let r=(0,y.default)(0).plus(n.isSame(e)?e.toBig():(0,y.default)(0)).plus(n.isSame(t)&&n.toBig().lt(t.toBig())?t.toBig():(0,y.default)(0)).plus(n.toBig().lt(a.toBig())?a.toBig():(0,y.default)(0));return n.copyWith({amount:BigInt(r.toFixed())})}async function At(n,t){let e=await n.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:(0,b.convertDecimals)(t.amount,t.decimals,e),decimals:e})}function bt(n){return{assets(t){let{assets:e,asset:a}=(0,q.ConfigBuilder)().assets(t);return{assets:e,asset(r){let{sourceChains:s,source:i}=a(r);return{sourceChains:s,source(m){let{destinationChains:o,destination:c}=i(m);return{destinationChains:o,destination(f){return{async accounts(l,u,p){return M({...n,...p,destinationAddress:u,sourceAddress:l,transferConfig:c(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:a,keyOrAsset:r,polkadotSigner:s,sourceAddress:i,sourceKeyOrChain:m}){return M({destinationAddress:t,ethersSigner:a,polkadotSigner:s,sourceAddress:i,transferConfig:(0,q.ConfigBuilder)().assets().asset(r).source(m).destination(e).build()})}}}0&&(module.exports={Sdk,getContractFee,getExtrinsicFee,getFee,getFeeBalances,getMax,getSourceData});
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/build/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/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 { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner?: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const balance = await getBalance(sourceAddress, config, polkadot);\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n config,\n polkadot,\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 const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n config,\n polkadot,\n}: GetBalancesParams) {\n return config.fee\n ? polkadot.query(\n config.fee.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.fee.asset),\n }),\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(config, ethersSigner);\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { ContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements ContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n return 0n;\n }\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport { ContractInterface } from './contract.interfaces';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): ContractInterface {\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\n\nexport async function getBalance(\n address: string,\n config: AssetConfig,\n polkadot: PolkadotService,\n) {\n return polkadot.query(\n config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n }),\n );\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 { ConfigBuilder } 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\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { createContract } from '../contract';\nimport { 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 destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.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 destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return createContract(contract, ethersSigner)\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\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 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.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 = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* 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 } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const balance = await getBalance(destinationAddress, config, polkadot);\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalances","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Xtokens","import_xcm_utils","getBalance","address","config","polkadot","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","zeroFeeAmount","balance","getBalance","feeBalance","getFeeBalances","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","getContractFee","getExtrinsicFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","polkadot","asset","chain","config","zeroAmount","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.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 { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n ethersSigner,\n polkadot,\n });\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n config,\n polkadot,\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 const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n config,\n polkadot,\n}: GetBalancesParams) {\n return config.fee\n ? polkadot.query(\n config.fee.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.fee.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n ethersSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport abi from './Erc20ABI.json';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n constructor(config: ContractConfig, signer: Signer) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async getBalance(): Promise<bigint> {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n\n return balance.toBigInt();\n }\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements TransferContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n 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 const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\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 { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getBalance({\n address,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getBalance();\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 { ConfigBuilder } 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\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { 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 destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n ethersSigner,\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 ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.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 destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return (\n createContract(contract, ethersSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\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 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.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 = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* 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 { Signer as EthersSigner } from 'ethers';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n ethersSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n ethersSigner,\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({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["src_exports","__export","Sdk","getContractFee","getExtrinsicFee","getFee","getFeeBalances","getMax","getSourceData","__toCommonJS","import_xcm_types","import_xcm_utils","import_big","import_ethers","Erc20ABI_default","Erc20","#config","#contract","config","signer","Erc20ABI_default","import_ethers","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","import_xcm_builder","import_xcm_utils","getBalance","address","config","ethersSigner","polkadot","cfg","createContract","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","zeroFeeAmount","balance","getBalance","feeBalance","getFeeBalances","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","getContractFee","getExtrinsicFee","createContract","error","result","Big","import_xcm_config","import_xcm_utils","import_big","import_api_augment","import_xcm_config","import_xcm_types","import_xcm_utils","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","import_xcm_types","import_xcm_utils","getDestinationData","transferConfig","destinationAddress","ethersSigner","polkadot","asset","chain","config","zeroAmount","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","Sdk","options","ecosystem","assets","asset","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/build/index.d.ts
CHANGED
package/build/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{AssetAmount as F}from"@moonbeam-network/xcm-types";import{convertDecimals as j}from"@moonbeam-network/xcm-utils";import G from"big.js";import{Contract as $}from"ethers";var v=[{inputs:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transfer",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"currencyAddress",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"}],internalType:"struct Xtokens.Currency[]",name:"currencies",type:"tuple[]"},{internalType:"uint32",name:"feeItem",type:"uint32"},{components:[{internalType:"uint8",name:"parents",type:"uint8"},{internalType:"bytes[]",name:"interior",type:"bytes[]"}],internalType:"struct Xtokens.Multilocation",name:"destination",type:"tuple"},{internalType:"uint64",name:"weight",type:"uint64"}],name:"transferMultiCurrencies",outputs:[],stateMutability:"nonpayable",type:"function"}];var b=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new $(this.address,v,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),n=await this.getGasPrice();return e*n}catch(e){return console.error(e),0n}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function w(s,t){if(s.module==="Xtokens")return new b(s,t);throw new Error(`Contract ${s.module} not found`)}import{toBigInt as Q}from"@moonbeam-network/xcm-utils";async function S(s,t,e){return e.query(t.balance.build({address:s,asset:e.chain.getBalanceAssetId(t.asset)}))}async function D(s,t){if(s.min)return t.query(s.min.build({asset:t.chain.getMinAssetId(s.asset)}));let e=t.chain.getAssetMin(s.asset);if(e){let n=await t.getAssetDecimals(s.asset);return Q(e,n)}return 0n}async function W({transferConfig:s,destinationAddress:t,destinationFee:e,ethersSigner:n,polkadot:r,sourceAddress:a}){var k,M,E;let{asset:i,destination:m,source:{chain:o,config:c}}=s,f=F.fromAsset(i,{amount:0n,decimals:await r.getAssetDecimals(i)}),g=(k=c.fee)!=null&&k.asset?F.fromAsset(c.fee.asset,{amount:0n,decimals:await r.getAssetDecimals(c.fee.asset)}):f,u=await S(a,c,r),p=await L({address:a,balance:u,config:c,polkadot:r}),h=await D(c,r),A=(M=c.extrinsic)==null?void 0:M.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),P=(E=c.contract)==null?void 0:E.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),C=await H({balance:u,contract:P,decimals:g.decimals,ethersSigner:n,extrinsic:A,polkadot:r,sourceAddress:a}),y=f.copyWith({amount:u}),{existentialDeposit:x}=r,B=g.copyWith({amount:C}),z=g.copyWith({amount:p}),I=f.copyWith({amount:h}),N=V({balanceAmount:y,existentialDeposit:x,feeAmount:B,minAmount:I});return{balance:y,chain:o,existentialDeposit:x,fee:B,feeBalance:z,max:N,min:I}}async function L({address:s,balance:t,config:e,polkadot:n}){return e.fee?n.query(e.fee.balance.build({address:s,asset:n.chain.getBalanceAssetId(e.fee.asset)})):t}async function H({balance:s,contract:t,decimals:e,ethersSigner:n,extrinsic:r,polkadot:a,sourceAddress:i}){if(t){if(!n)throw new Error("Ethers signer must be provided");return J(s,t,e,n)}if(r)return U(s,r,a,i);throw new Error("Either contract or extrinsic must be provided")}async function J(s,t,e,n){let a=await w(t,n).getFee(s);return j(a,18,e)}async function U(s,t,e,n){try{return await e.getFee(n,t)}catch(r){if(s)throw r;return 0n}}function V({balanceAmount:s,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=s.toBig().minus(n.toBig()).minus(s.isSame(t)?t.toBig():G(0)).minus(s.isSame(e)?e.toBig():G(0));return s.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}import{ConfigBuilder as K}from"@moonbeam-network/xcm-config";import{convertDecimals as it,toBigInt as R}from"@moonbeam-network/xcm-utils";import l from"big.js";import"@polkadot/api-augment";import{assetsMap as Y,darwiniaPangoro as Z,eq as _,equilibriumAlphanet as tt,paring as et}from"@moonbeam-network/xcm-config";import{AssetAmount as nt}from"@moonbeam-network/xcm-types";import{getPolkadotApi as st}from"@moonbeam-network/xcm-utils";var d=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new d(await st(t.ws),t)}static async createMulti(t){return Promise.all(t.map(d.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===tt.key)return _;if(e==="oring"&&this.chain.key===Z.key)return et;if(!e)throw new Error("No native symbol key found");let n=Y.get(e);if(!n)throw new Error(`No asset found for key "${e}" and symbol "${t}"`);return n}get existentialDeposit(){var r,a;let t=(r=this.api.consts.balances)==null?void 0:r.existentialDeposit,e=(a=this.api.consts.eqBalances)==null?void 0:a.existentialDeposit,n=(t==null?void 0:t.toBigInt())||(e==null?void 0:e.toBigInt())||0n;return nt.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var a,i,m,o,c;let e=((a=this.api.query.assets)==null?void 0:a.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],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],a=e.getArgs(r);return(await r(...a).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 q}from"@moonbeam-network/xcm-types";import{toBigInt as rt}from"@moonbeam-network/xcm-utils";async function O({transferConfig:s,destinationAddress:t,polkadot:e}){let{asset:n,destination:{chain:r,config:a}}=s,i=q.fromAsset(n,{amount:0n,decimals:await e.getAssetDecimals(n)}),m=await S(t,a,e),o=await D(a,e),c=i.copyWith({amount:m}),{existentialDeposit:f}=e,g=await at({config:s,polkadot:e}),u=i.copyWith({amount:o});return{balance:c,chain:r,existentialDeposit:f,fee:g,min:u}}async function at({config:s,polkadot:t}){let{amount:e,asset:n}=s.source.config.destinationFee,r=await t.getAssetDecimals(n),a=q.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return a.copyWith({amount:rt(e,r)});let i=e.build({api:t.api,asset:t.chain.getAssetId(n)});return a.copyWith({amount:await i.call()})}async function T({destinationAddress:s,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:r}){let[a,i]=await d.createMulti([r.destination.chain,r.source.chain]),m=await O({destinationAddress:s,polkadot:a,transferConfig:r}),o=await ct(i,m.fee),c=await W({destinationAddress:s,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:n,transferConfig:r});return{destination:m,getEstimate(f){let u=l(R(f,c.balance.decimals).toString()).minus(c.balance.isSame(o)?o.toBig():l(0));return c.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:c.max,min:ot(m),source:c,async swap(){return T({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:s,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(f){var C,y;let g=R(f,c.balance.decimals),{asset:u,source:{chain:p,config:h}}=r,A=(C=h.contract)==null?void 0:C.build({address:s,amount:g,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o)}),P=(y=h.extrinsic)==null?void 0:y.build({address:s,amount:g,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o),palletInstance:p.getAssetPalletInstance(u),source:p});if(A){if(!t)throw new Error("Ethers signer must be provided");return w(A,t).transfer().then(x=>x.hash)}if(P){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(n,P,e)}throw new Error("Either contract or extrinsic must be provided")}}}function ot({balance:s,existentialDeposit:t,fee:e,min:n}){let r=l(0).plus(s.isSame(e)?e.toBig():l(0)).plus(s.isSame(t)&&s.toBig().lt(t.toBig())?t.toBig():l(0)).plus(s.toBig().lt(n.toBig())?n.toBig():l(0));return s.copyWith({amount:BigInt(r.toFixed())})}async function ct(s,t){let e=await s.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:it(t.amount,t.decimals,e),decimals:e})}function ee(s){return{assets(t){let{assets:e,asset:n}=K().assets(t);return{assets:e,asset(r){let{sourceChains:a,source:i}=n(r);return{sourceChains:a,source(m){let{destinationChains:o,destination:c}=i(m);return{destinationChains:o,destination(f){return{async accounts(g,u,p){return T({...s,...p,destinationAddress:u,sourceAddress:g,transferConfig:c(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:n,keyOrAsset:r,polkadotSigner:a,sourceAddress:i,sourceKeyOrChain:m}){return T({destinationAddress:t,ethersSigner:n,polkadotSigner:a,sourceAddress:i,transferConfig:K().assets().asset(r).source(m).destination(e).build()})}}}export{ee as Sdk,J as getContractFee,U as getExtrinsicFee,H as getFee,L as getFeeBalances,V as getMax,W as getSourceData};
|
|
1
|
+
import{AssetAmount as q}from"@moonbeam-network/xcm-types";import{convertDecimals as U}from"@moonbeam-network/xcm-utils";import W from"big.js";import{Contract as $}from"ethers";var F=[{constant:!0,inputs:[],name:"name",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_spender",type:"address"},{name:"_value",type:"uint256"}],name:"approve",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"totalSupply",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_from",type:"address"},{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transferFrom",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[],name:"decimals",outputs:[{name:"",type:"uint8"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"}],name:"balanceOf",outputs:[{name:"balance",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{constant:!0,inputs:[],name:"symbol",outputs:[{name:"",type:"string"}],payable:!1,stateMutability:"view",type:"function"},{constant:!1,inputs:[{name:"_to",type:"address"},{name:"_value",type:"uint256"}],name:"transfer",outputs:[{name:"",type:"bool"}],payable:!1,stateMutability:"nonpayable",type:"function"},{constant:!0,inputs:[{name:"_owner",type:"address"},{name:"_spender",type:"address"}],name:"allowance",outputs:[{name:"",type:"uint256"}],payable:!1,stateMutability:"view",type:"function"},{payable:!0,stateMutability:"payable",type:"fallback"},{anonymous:!1,inputs:[{indexed:!0,name:"owner",type:"address"},{indexed:!0,name:"spender",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,name:"from",type:"address"},{indexed:!0,name:"to",type:"address"},{indexed:!1,name:"value",type:"uint256"}],name:"Transfer",type:"event"}];var x=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=new $(this.address,F,e)}async getBalance(){return(await this.#e.balanceOf(...this.#t.args)).toBigInt()}};import{Contract as L}from"ethers";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 S=class{address="0x0000000000000000000000000000000000000804";#t;#e;#n;constructor(t,e){this.#t=t,this.#n=e,this.#e=new L(this.address,G,e)}async transfer(){return this.#e[this.#t.func](...this.#t.args)}async getFee(t){if(t===0n)return 0n;try{let e=(await this.#e.estimateGas[this.#t.func](...this.#t.args)).toBigInt(),n=await this.getGasPrice();return e*n}catch(e){throw console.error(e),new Error("Can't get a fee. Make sure that you have enough balance!")}}async getGasPrice(){let{gasPrice:t,maxPriorityFeePerGas:e}=await this.#n.getFeeData();return((t==null?void 0:t.toBigInt())||0n)+((e==null?void 0:e.toBigInt())||0n)}};function g(a,t){if(a.module==="Erc20")return new x(a,t);if(a.module==="Xtokens")return new S(a,t);throw new Error(`Contract ${a.module} not found`)}import{CallType as H}from"@moonbeam-network/xcm-builder";import{toBigInt as J}from"@moonbeam-network/xcm-utils";async function B({address:a,config:t,ethersSigner:e,polkadot:n}){let r=t.balance.build({address:a,asset:n.chain.getBalanceAssetId(t.asset)});return r.type===H.Substrate?n.query(r):g(r,e).getBalance()}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 J(e,n)}return 0n}async function O({transferConfig:a,destinationAddress:t,destinationFee:e,ethersSigner:n,polkadot:r,sourceAddress:s}){var M,E,k;let{asset:i,destination:m,source:{chain:o,config:c}}=a,f=q.fromAsset(i,{amount:0n,decimals:await r.getAssetDecimals(i)}),l=(M=c.fee)!=null&&M.asset?q.fromAsset(c.fee.asset,{amount:0n,decimals:await r.getAssetDecimals(c.fee.asset)}):f,u=await B({address:s,config:c,ethersSigner:n,polkadot:r}),p=await V({address:s,balance:u,config:c,polkadot:r}),A=await T(c,r),b=(E=c.extrinsic)==null?void 0:E.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e),palletInstance:o.getAssetPalletInstance(i),source:o}),C=(k=c.contract)==null?void 0:k.build({address:t,amount:u,asset:o.getAssetId(i),destination:m.chain,fee:e.amount,feeAsset:o.getAssetId(e)}),P=await Y({balance:u,contract:C,decimals:l.decimals,ethersSigner:n,extrinsic:b,polkadot:r,sourceAddress:s}),h=f.copyWith({amount:u}),{existentialDeposit:w}=r,D=l.copyWith({amount:P}),z=l.copyWith({amount:p}),v=f.copyWith({amount:A}),N=et({balanceAmount:h,existentialDeposit:w,feeAmount:D,minAmount:v});return{balance:h,chain:o,existentialDeposit:w,fee:D,feeBalance:z,max:N,min:v}}async function V({address:a,balance:t,config:e,polkadot:n}){return e.fee?n.query(e.fee.balance.build({address:a,asset:n.chain.getBalanceAssetId(e.fee.asset)})):t}async function Y({balance:a,contract:t,decimals:e,ethersSigner:n,extrinsic:r,polkadot:s,sourceAddress:i}){if(t){if(!n)throw new Error("Ethers signer must be provided");return Z(a,t,e,n)}if(r)return tt(a,r,s,i);throw new Error("Either contract or extrinsic must be provided")}async function Z(a,t,e,n){let s=await g(t,n).getFee(a);return U(s,18,e)}async function tt(a,t,e,n){try{return await e.getFee(n,t)}catch(r){if(a)throw r;return 0n}}function et({balanceAmount:a,existentialDeposit:t,feeAmount:e,minAmount:n}){let r=a.toBig().minus(n.toBig()).minus(a.isSame(t)?t.toBig():W(0)).minus(a.isSame(e)?e.toBig():W(0));return a.copyWith({amount:r.lt(0)?0n:BigInt(r.toFixed())})}import{ConfigBuilder as K}from"@moonbeam-network/xcm-config";import{convertDecimals as pt,toBigInt as R}from"@moonbeam-network/xcm-utils";import y from"big.js";import"@polkadot/api-augment";import{assetsMap as nt,darwiniaPangoro as at,eq as rt,equilibriumAlphanet as st,paring as it}from"@moonbeam-network/xcm-config";import{AssetAmount as ot}from"@moonbeam-network/xcm-types";import{getPolkadotApi as ct}from"@moonbeam-network/xcm-utils";var d=class{api;chain;constructor(t,e){this.api=t,this.chain=e}static async create(t){return new d(await ct(t.ws),t)}static async createMulti(t){return Promise.all(t.map(d.create))}get decimals(){return this.api.registry.chainDecimals.at(0)||12}get asset(){let t=this.api.registry.chainTokens.at(0),e=t==null?void 0:t.toString().toLowerCase();if(e==="token"&&this.chain.key===st.key)return rt;if(e==="oring"&&this.chain.key===at.key)return it;if(!e)throw new Error("No native symbol key found");let n=nt.get(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 ot.fromAsset(this.asset,{amount:n,decimals:this.decimals})}async getAssetMeta(t){var s,i,m,o,c;let e=((s=this.api.query.assets)==null?void 0:s.metadata)||((i=this.api.query.assetRegistry)==null?void 0:i.metadata)||((m=this.api.query.assetRegistry)==null?void 0:m.currencyMetadatas)||((o=this.api.query.assetRegistry)==null?void 0:o.assetMetadatas)||((c=this.api.query.assetRegistry)==null?void 0:c.assetMetadataMap);if(!e)return;let n=await e(t),r="unwrapOrDefault"in n?n.unwrapOrDefault():n;return{decimals:r.decimals.toNumber(),symbol:r.symbol.toString()}}async getAssetDecimals(t){var e;return((e=await this.getAssetMeta(this.chain.getMetadataAssetId(t)))==null?void 0:e.decimals)||this.chain.getAssetDecimals(t)||this.decimals}async query(t){let e=await this.api.query[t.module][t.func](...t.args);return t.transform(e)}async getFee(t,e){let n=this.api.tx[e.module][e.func],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 _}from"@moonbeam-network/xcm-types";import{toBigInt as mt}from"@moonbeam-network/xcm-utils";async function Q({transferConfig:a,destinationAddress:t,ethersSigner:e,polkadot:n}){let{asset:r,destination:{chain:s,config:i}}=a,m=_.fromAsset(r,{amount:0n,decimals:await n.getAssetDecimals(r)}),o=await B({address:t,config:i,ethersSigner:e,polkadot:n}),c=await T(i,n),f=m.copyWith({amount:o}),{existentialDeposit:l}=n,u=await ut({config:a,polkadot:n}),p=m.copyWith({amount:c});return{balance:f,chain:s,existentialDeposit:l,fee:u,min:p}}async function ut({config:a,polkadot:t}){let{amount:e,asset:n}=a.source.config.destinationFee,r=await t.getAssetDecimals(n),s=_.fromAsset(n,{amount:0n,decimals:r});if(Number.isFinite(e))return s.copyWith({amount:mt(e,r)});let i=e.build({api:t.api,asset:t.chain.getAssetId(n)});return s.copyWith({amount:await i.call()})}async function I({destinationAddress:a,ethersSigner:t,polkadotSigner:e,sourceAddress:n,transferConfig:r}){if(!t)throw new Error("Ethers signer must be provided");let[s,i]=await d.createMulti([r.destination.chain,r.source.chain]),m=await Q({destinationAddress:a,ethersSigner:t,polkadot:s,transferConfig:r}),o=await lt(i,m.fee),c=await O({destinationAddress:a,destinationFee:o,ethersSigner:t,polkadot:i,sourceAddress:n,transferConfig:r});return{destination:m,getEstimate(f){let u=y(R(f,c.balance.decimals).toString()).minus(c.balance.isSame(o)?o.toBig():y(0));return c.balance.copyWith({amount:u.lt(0)?0n:BigInt(u.toFixed())})},isSwapPossible:!0,max:c.max,min:ft(m),source:c,async swap(){return I({destinationAddress:n,ethersSigner:t,polkadotSigner:e,sourceAddress:a,transferConfig:{...r,destination:r.source,source:r.destination}})},async transfer(f){var P,h;let l=R(f,c.balance.decimals),{asset:u,source:{chain:p,config:A}}=r,b=(P=A.contract)==null?void 0:P.build({address:a,amount:l,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o)}),C=(h=A.extrinsic)==null?void 0:h.build({address:a,amount:l,asset:p.getAssetId(u),destination:m.chain,fee:o.amount,feeAsset:p.getAssetId(o),palletInstance:p.getAssetPalletInstance(u),source:p});if(b){if(!t)throw new Error("Ethers signer must be provided");return g(b,t).transfer().then(w=>w.hash)}if(C){if(!e)throw new Error("Polkadot signer must be provided");return i.transfer(n,C,e)}throw new Error("Either contract or extrinsic must be provided")}}}function ft({balance:a,existentialDeposit:t,fee:e,min:n}){let r=y(0).plus(a.isSame(e)?e.toBig():y(0)).plus(a.isSame(t)&&a.toBig().lt(t.toBig())?t.toBig():y(0)).plus(a.toBig().lt(n.toBig())?n.toBig():y(0));return a.copyWith({amount:BigInt(r.toFixed())})}async function lt(a,t){let e=await a.getAssetDecimals(t);return t.decimals===e?t:t.copyWith({amount:pt(t.amount,t.decimals,e),decimals:e})}function Ce(a){return{assets(t){let{assets:e,asset:n}=K().assets(t);return{assets:e,asset(r){let{sourceChains:s,source:i}=n(r);return{sourceChains:s,source(m){let{destinationChains:o,destination:c}=i(m);return{destinationChains:o,destination(f){return{async accounts(l,u,p){return I({...a,...p,destinationAddress:u,sourceAddress:l,transferConfig:c(f).build()})}}}}}}}}},async getTransferData({destinationAddress:t,destinationKeyOrChain:e,ethersSigner:n,keyOrAsset:r,polkadotSigner:s,sourceAddress:i,sourceKeyOrChain:m}){return I({destinationAddress:t,ethersSigner:n,polkadotSigner:s,sourceAddress:i,transferConfig:K().assets().asset(r).source(m).destination(e).build()})}}}export{Ce as Sdk,Z as getContractFee,tt as getExtrinsicFee,Y as getFee,V as getFeeBalances,et as getMax,O 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/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 { ContractConfig, ExtrinsicConfig } from '@moonbeam-network/xcm-builder';\nimport { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner?: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const balance = await getBalance(sourceAddress, config, polkadot);\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n config,\n polkadot,\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 const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n config,\n polkadot,\n}: GetBalancesParams) {\n return config.fee\n ? polkadot.query(\n config.fee.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.fee.asset),\n }),\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(config, ethersSigner);\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { ContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements ContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n return 0n;\n }\n }\n\n private async getGasPrice() {\n const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport { ContractInterface } from './contract.interfaces';\nimport { Xtokens } from './contracts/Xtokens';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\n): ContractInterface {\n if (config.module === 'Xtokens') {\n return new Xtokens(config, signer);\n }\n\n throw new Error(`Contract ${config.module} not found`);\n}\n","import { AssetConfig } from '@moonbeam-network/xcm-config';\nimport { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { PolkadotService } from '../polkadot';\n\nexport async function getBalance(\n address: string,\n config: AssetConfig,\n polkadot: PolkadotService,\n) {\n return polkadot.query(\n config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n }),\n );\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 { ConfigBuilder } 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\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { createContract } from '../contract';\nimport { 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 destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n polkadot: destPolkadot,\n transferConfig,\n });\n const destinationFee = await getDestinationFeeWithSourceDecimals(\n srcPolkadot,\n destination.fee,\n );\n const source = await getSourceData({\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.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 destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return createContract(contract, ethersSigner)\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\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 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.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 = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* 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 } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const balance = await getBalance(destinationAddress, config, polkadot);\n const min = await getMin(config, polkadot);\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = await getFee({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","Big","Contract","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","Contract","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Xtokens","toBigInt","getBalance","address","config","polkadot","getMin","min","decimals","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","AssetAmount","zeroFeeAmount","balance","getBalance","feeBalance","getFeeBalances","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","getContractFee","getExtrinsicFee","createContract","convertDecimals","error","result","Big","ConfigBuilder","convertDecimals","toBigInt","Big","assetsMap","darwiniaPangoro","eq","equilibriumAlphanet","paring","AssetAmount","getPolkadotApi","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","polkadot","asset","chain","config","zeroAmount","AssetAmount","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
|
|
1
|
+
{"version":3,"sources":["../src/getTransferData/getSourceData.ts","../src/contract/contracts/Erc20/Erc20.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 { AssetConfig, TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { Signer as EthersSigner } from 'ethers';\nimport { TransferContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\nimport { SourceChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetSourceDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n destinationFee: AssetAmount;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getSourceData({\n transferConfig,\n destinationAddress,\n destinationFee,\n ethersSigner,\n polkadot,\n sourceAddress,\n}: GetSourceDataParams): Promise<SourceChainTransferData> {\n const {\n asset,\n destination,\n source: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n const zeroFeeAmount = config.fee?.asset\n ? AssetAmount.fromAsset(config.fee.asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(config.fee.asset),\n })\n : zeroAmount;\n\n const balance = await getBalance({\n address: sourceAddress,\n config,\n ethersSigner,\n polkadot,\n });\n const feeBalance = await getFeeBalances({\n address: sourceAddress,\n balance,\n config,\n polkadot,\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 const contract = config.contract?.build({\n address: destinationAddress,\n amount: balance,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const fee = await getFee({\n balance,\n contract,\n decimals: zeroFeeAmount.decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n });\n\n const balanceAmount = zeroAmount.copyWith({ amount: balance });\n const { existentialDeposit } = polkadot;\n const feeAmount = zeroFeeAmount.copyWith({ amount: fee });\n const feeBalanceAmount = zeroFeeAmount.copyWith({ amount: feeBalance });\n const minAmount = zeroAmount.copyWith({ amount: min });\n const maxAmount = getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n feeBalance: feeBalanceAmount,\n max: maxAmount,\n min: minAmount,\n };\n}\n\nexport interface GetBalancesParams {\n address: string;\n balance: bigint;\n config: AssetConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFeeBalances({\n address,\n balance,\n config,\n polkadot,\n}: GetBalancesParams) {\n return config.fee\n ? polkadot.query(\n config.fee.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.fee.asset),\n }) as SubstrateQueryConfig,\n )\n : balance;\n}\n\nexport interface GetFeeParams {\n balance: bigint;\n contract?: ContractConfig;\n decimals: number;\n ethersSigner?: EthersSigner;\n extrinsic?: ExtrinsicConfig;\n polkadot: PolkadotService;\n sourceAddress: string;\n}\n\nexport async function getFee({\n balance,\n contract,\n decimals,\n ethersSigner,\n extrinsic,\n polkadot,\n sourceAddress,\n}: GetFeeParams): Promise<bigint> {\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return getContractFee(balance, contract, decimals, ethersSigner);\n }\n\n if (extrinsic) {\n return getExtrinsicFee(balance, extrinsic, polkadot, sourceAddress);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n}\n\nexport async function getContractFee(\n balance: bigint,\n config: ContractConfig,\n decimals: number,\n ethersSigner: EthersSigner,\n): Promise<bigint> {\n const contract = createContract(\n config,\n ethersSigner,\n ) as TransferContractInterface;\n const fee = await contract.getFee(balance);\n\n return convertDecimals(fee, 18, decimals);\n}\n\nexport async function getExtrinsicFee(\n balance: bigint,\n extrinsic: ExtrinsicConfig,\n polkadot: PolkadotService,\n sourceAddress: string,\n): Promise<bigint> {\n /**\n * If account has no balance (account doesn't exist),\n * we can't get the fee from some chains.\n * Example: Phala - PHA\n */\n try {\n return await polkadot.getFee(sourceAddress, extrinsic);\n } catch (error) {\n if (balance) {\n throw error;\n }\n\n return 0n;\n }\n}\n\nexport interface GetMaxParams {\n balanceAmount: AssetAmount;\n existentialDeposit: AssetAmount;\n feeAmount: AssetAmount;\n minAmount: AssetAmount;\n}\n\nexport function getMax({\n balanceAmount,\n existentialDeposit,\n feeAmount,\n minAmount,\n}: GetMaxParams): AssetAmount {\n const result = balanceAmount\n .toBig()\n .minus(minAmount.toBig())\n .minus(\n balanceAmount.isSame(existentialDeposit)\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .minus(balanceAmount.isSame(feeAmount) ? feeAmount.toBig() : Big(0));\n\n return balanceAmount.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.toFixed()),\n });\n}\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { BalanceContractInterface } from '../../contract.interfaces';\nimport abi from './Erc20ABI.json';\n\nexport class Erc20 implements BalanceContractInterface {\n readonly address: string;\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n constructor(config: ContractConfig, signer: Signer) {\n if (!config.address) {\n throw new Error('Contract address is required');\n }\n\n this.address = config.address;\n this.#config = config;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async getBalance(): Promise<bigint> {\n const balance = await this.#contract.balanceOf(...this.#config.args);\n\n return balance.toBigInt();\n }\n}\n","[\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"name\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"approve\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"totalSupply\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_from\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transferFrom\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"decimals\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"name\": \"balance\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [],\n \"name\": \"symbol\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"string\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"constant\": false,\n \"inputs\": [\n {\n \"name\": \"_to\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"constant\": true,\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\"\n },\n {\n \"name\": \"_spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"allowance\",\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"payable\": false,\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"payable\": true,\n \"stateMutability\": \"payable\",\n \"type\": \"fallback\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"owner\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"spender\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Approval\",\n \"type\": \"event\"\n },\n {\n \"anonymous\": false,\n \"inputs\": [\n {\n \"indexed\": true,\n \"name\": \"from\",\n \"type\": \"address\"\n },\n {\n \"indexed\": true,\n \"name\": \"to\",\n \"type\": \"address\"\n },\n {\n \"indexed\": false,\n \"name\": \"value\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"Transfer\",\n \"type\": \"event\"\n }\n]\n","import type { TransactionResponse } from '@ethersproject/abstract-provider';\nimport { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Contract, Signer } from 'ethers';\nimport { TransferContractInterface } from '../../contract.interfaces';\nimport abi from './XtokensABI.json';\n\nexport class Xtokens implements TransferContractInterface {\n readonly address: string = '0x0000000000000000000000000000000000000804';\n\n readonly #config: ContractConfig;\n\n readonly #contract: Contract;\n\n readonly #signer: Signer;\n\n constructor(config: ContractConfig, signer: Signer) {\n this.#config = config;\n this.#signer = signer;\n this.#contract = new Contract(this.address, abi, signer);\n }\n\n async transfer(): Promise<TransactionResponse> {\n return this.#contract[this.#config.func](...this.#config.args);\n }\n\n async getFee(amount: bigint): Promise<bigint> {\n if (amount === 0n) {\n return 0n;\n }\n\n /**\n * Contract can throw an error if user balance is smaller than fee.\n * Or if you try to send 0 as amount.\n */\n try {\n const estimatedGas = (\n await this.#contract.estimateGas[this.#config.func](\n ...this.#config.args,\n )\n ).toBigInt();\n const gasPrice = await this.getGasPrice();\n\n return estimatedGas * gasPrice;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(error);\n\n 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 const { gasPrice, maxPriorityFeePerGas } = await this.#signer.getFeeData();\n\n return (\n (gasPrice?.toBigInt() || 0n) + (maxPriorityFeePerGas?.toBigInt() || 0n)\n );\n }\n}\n","[\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transfer\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"components\": [\n {\n \"internalType\": \"address\",\n \"name\": \"currencyAddress\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amount\",\n \"type\": \"uint256\"\n }\n ],\n \"internalType\": \"struct Xtokens.Currency[]\",\n \"name\": \"currencies\",\n \"type\": \"tuple[]\"\n },\n {\n \"internalType\": \"uint32\",\n \"name\": \"feeItem\",\n \"type\": \"uint32\"\n },\n {\n \"components\": [\n {\n \"internalType\": \"uint8\",\n \"name\": \"parents\",\n \"type\": \"uint8\"\n },\n {\n \"internalType\": \"bytes[]\",\n \"name\": \"interior\",\n \"type\": \"bytes[]\"\n }\n ],\n \"internalType\": \"struct Xtokens.Multilocation\",\n \"name\": \"destination\",\n \"type\": \"tuple\"\n },\n {\n \"internalType\": \"uint64\",\n \"name\": \"weight\",\n \"type\": \"uint64\"\n }\n ],\n \"name\": \"transferMultiCurrencies\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n }\n]\n","import { ContractConfig } from '@moonbeam-network/xcm-builder';\nimport { Signer } from 'ethers';\nimport {\n BalanceContractInterface,\n TransferContractInterface,\n} from './contract.interfaces';\nimport { Erc20, Xtokens } from './contracts';\n\nexport function createContract(\n config: ContractConfig,\n signer: Signer,\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 { toBigInt } from '@moonbeam-network/xcm-utils';\nimport { Signer as EthersSigner } from 'ethers';\nimport { BalanceContractInterface, createContract } from '../contract';\nimport { PolkadotService } from '../polkadot';\n\nexport interface GetFeeBalancesParams {\n address: string;\n config: AssetConfig;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getBalance({\n address,\n config,\n ethersSigner,\n polkadot,\n}: GetFeeBalancesParams) {\n const cfg = config.balance.build({\n address,\n asset: polkadot.chain.getBalanceAssetId(config.asset),\n });\n\n if (cfg.type === CallType.Substrate) {\n return polkadot.query(cfg as SubstrateQueryConfig);\n }\n\n const contract = createContract(\n cfg,\n ethersSigner,\n ) as BalanceContractInterface;\n\n return contract.getBalance();\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 { ConfigBuilder } 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\nexport function Sdk(options?: SdkOptions) {\n return {\n assets(ecosystem?: Ecosystem) {\n const { assets, asset } = ConfigBuilder().assets(ecosystem);\n\n return {\n assets,\n asset(keyOrAsset: string | Asset) {\n const { sourceChains, source } = asset(keyOrAsset);\n\n return {\n sourceChains,\n source(keyOrChain: string | AnyChain) {\n const { destinationChains, destination } = source(keyOrChain);\n\n return {\n destinationChains,\n destination(destKeyOrChain: string | AnyChain) {\n return {\n async accounts(\n sourceAddress: string,\n destinationAddress: string,\n signers?: Partial<Signers>,\n ): Promise<TransferData> {\n return gtd({\n ...options,\n ...signers,\n destinationAddress,\n sourceAddress,\n transferConfig: destination(destKeyOrChain).build(),\n });\n },\n };\n },\n };\n },\n };\n },\n };\n },\n async getTransferData({\n destinationAddress,\n destinationKeyOrChain,\n ethersSigner,\n keyOrAsset,\n polkadotSigner,\n sourceAddress,\n sourceKeyOrChain,\n }: SdkTransferParams): Promise<TransferData> {\n return gtd({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig: ConfigBuilder()\n .assets()\n .asset(keyOrAsset)\n .source(sourceKeyOrChain)\n .destination(destinationKeyOrChain)\n .build(),\n });\n },\n };\n}\n\nexport interface SdkTransferParams extends Partial<Signers> {\n destinationAddress: string;\n destinationKeyOrChain: string | AnyChain;\n keyOrAsset: string | Asset;\n sourceAddress: string;\n sourceKeyOrChain: string | AnyChain;\n}\n","/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { TransferConfig } from '@moonbeam-network/xcm-config';\nimport { AssetAmount } from '@moonbeam-network/xcm-types';\nimport { convertDecimals, toBigInt } from '@moonbeam-network/xcm-utils';\nimport Big from 'big.js';\nimport { 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 destinationAddress: string;\n sourceAddress: string;\n transferConfig: TransferConfig;\n}\n\nexport async function getTransferData({\n destinationAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress,\n transferConfig,\n}: GetTransferDataParams): Promise<TransferData> {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n const [destPolkadot, srcPolkadot] = await PolkadotService.createMulti([\n transferConfig.destination.chain,\n transferConfig.source.chain,\n ]);\n\n const destination = await getDestinationData({\n destinationAddress,\n ethersSigner,\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 ethersSigner,\n polkadot: srcPolkadot,\n sourceAddress,\n transferConfig,\n });\n\n return {\n destination,\n getEstimate(amount: number | string) {\n const bigAmount = Big(\n toBigInt(amount, source.balance.decimals).toString(),\n );\n const result = bigAmount.minus(\n source.balance.isSame(destinationFee) ? destinationFee.toBig() : Big(0),\n );\n\n return source.balance.copyWith({\n amount: result.lt(0) ? 0n : BigInt(result.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 destinationAddress: sourceAddress,\n ethersSigner,\n polkadotSigner,\n sourceAddress: destinationAddress,\n transferConfig: {\n ...transferConfig,\n destination: transferConfig.source,\n source: transferConfig.destination,\n },\n });\n },\n async transfer(amount): Promise<string> {\n const bigintAmount = toBigInt(amount, source.balance.decimals);\n const {\n asset,\n source: { chain, config },\n } = transferConfig;\n\n const contract = config.contract?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n });\n const extrinsic = config.extrinsic?.build({\n address: destinationAddress,\n amount: bigintAmount,\n asset: chain.getAssetId(asset),\n destination: destination.chain,\n fee: destinationFee.amount,\n feeAsset: chain.getAssetId(destinationFee),\n palletInstance: chain.getAssetPalletInstance(asset),\n source: chain,\n });\n\n if (contract) {\n if (!ethersSigner) {\n throw new Error('Ethers signer must be provided');\n }\n\n return (\n createContract(contract, ethersSigner) as TransferContractInterface\n )\n .transfer()\n .then((tx) => tx.hash);\n }\n\n if (extrinsic) {\n if (!polkadotSigner) {\n throw new Error('Polkadot signer must be provided');\n }\n\n return srcPolkadot.transfer(sourceAddress, extrinsic, polkadotSigner);\n }\n\n throw new Error('Either contract or extrinsic must be provided');\n },\n };\n}\n\nfunction getMin({\n balance,\n existentialDeposit,\n fee,\n min,\n}: DestinationChainTransferData) {\n const result = Big(0)\n .plus(balance.isSame(fee) ? fee.toBig() : Big(0))\n .plus(\n balance.isSame(existentialDeposit) &&\n balance.toBig().lt(existentialDeposit.toBig())\n ? existentialDeposit.toBig()\n : Big(0),\n )\n .plus(balance.toBig().lt(min.toBig()) ? min.toBig() : Big(0));\n\n return balance.copyWith({\n amount: BigInt(result.toFixed()),\n });\n}\n\nexport async function getDestinationFeeWithSourceDecimals(\n sourcePolkadot: PolkadotService,\n destinationFee: AssetAmount,\n): Promise<AssetAmount> {\n const destinationFeeDecimals = await sourcePolkadot.getAssetDecimals(\n destinationFee,\n );\n const destinationFeeAsset =\n destinationFee.decimals === destinationFeeDecimals\n ? destinationFee\n : destinationFee.copyWith({\n amount: convertDecimals(\n destinationFee.amount,\n destinationFee.decimals,\n destinationFeeDecimals,\n ),\n decimals: destinationFeeDecimals,\n });\n\n return destinationFeeAsset;\n}\n","import '@polkadot/api-augment';\n\nimport {\n ExtrinsicConfig,\n SubstrateQueryConfig,\n} from '@moonbeam-network/xcm-builder';\nimport {\n assetsMap,\n darwiniaPangoro,\n eq,\n equilibriumAlphanet,\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 } from '@polkadot/types';\nimport { IKeyringPair } from '@polkadot/types/types';\nimport { AssetMetadata } from './PolkadotService.interfaces';\n\nexport class PolkadotService {\n readonly api: ApiPromise;\n\n readonly chain: AnyParachain;\n\n constructor(api: ApiPromise, chain: AnyParachain) {\n this.api = api;\n this.chain = chain;\n }\n\n static async create(chain: AnyParachain): Promise<PolkadotService> {\n return new PolkadotService(await getPolkadotApi(chain.ws), chain);\n }\n\n static async createMulti(chains: AnyParachain[]): Promise<PolkadotService[]> {\n return Promise.all(chains.map(PolkadotService.create));\n }\n\n get decimals(): number {\n return this.api.registry.chainDecimals.at(0) || 12;\n }\n\n get asset(): Asset {\n const symbol = this.api.registry.chainTokens.at(0);\n const key = symbol?.toString().toLowerCase();\n\n // TODO: Remove this once Equilibrium Alphanet is updated\n // or find better way if issue appears on other chains\n if (key === 'token' && this.chain.key === equilibriumAlphanet.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 = assetsMap.get(key);\n\n if (!asset) {\n throw new Error(`No asset found for key \"${key}\" and symbol \"${symbol}\"`);\n }\n\n return asset;\n }\n\n get existentialDeposit(): AssetAmount {\n const existentialDeposit = this.api.consts.balances?.existentialDeposit;\n const eqExistentialDeposit = this.api.consts.eqBalances\n ?.existentialDeposit as unknown as u128 | undefined;\n const amount =\n existentialDeposit?.toBigInt() || eqExistentialDeposit?.toBigInt() || 0n;\n\n return AssetAmount.fromAsset(this.asset, {\n amount,\n decimals: this.decimals,\n });\n }\n\n async getAssetMeta(\n asset: ChainAssetId,\n ): Promise<{ symbol: string; decimals: number } | undefined> {\n const fn =\n this.api.query.assets?.metadata ||\n this.api.query.assetRegistry?.metadata ||\n this.api.query.assetRegistry?.currencyMetadatas ||\n this.api.query.assetRegistry?.assetMetadatas ||\n this.api.query.assetRegistry?.assetMetadataMap;\n\n if (!fn) {\n return undefined;\n }\n\n const data = (await fn(asset)) as AssetMetadata | Option<AssetMetadata>;\n const unwrapped = 'unwrapOrDefault' in data ? data.unwrapOrDefault() : data;\n\n return {\n decimals: unwrapped.decimals.toNumber(),\n symbol: unwrapped.symbol.toString(),\n };\n }\n\n async getAssetDecimals(asset: Asset): Promise<number> {\n return (\n (await this.getAssetMeta(this.chain.getMetadataAssetId(asset)))\n ?.decimals ||\n this.chain.getAssetDecimals(asset) ||\n this.decimals\n );\n }\n\n async query(config: SubstrateQueryConfig): Promise<bigint> {\n const response = await this.api.query[config.module][config.func](\n ...config.args,\n );\n\n return config.transform(response);\n }\n\n async getFee(account: string, config: ExtrinsicConfig): Promise<bigint> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const info = await extrinsic.paymentInfo(account, { nonce: -1 });\n\n return info.partialFee.toBigInt();\n }\n\n async transfer(\n account: string,\n config: ExtrinsicConfig,\n signer: PolkadotSigner | IKeyringPair,\n ): Promise<string> {\n const fn = this.api.tx[config.module][config.func];\n const args = config.getArgs(fn);\n\n const extrinsic = fn(...args);\n const hash = await extrinsic.signAndSend(\n this.#isSigner(signer) ? account : signer,\n {\n nonce: -1,\n signer: this.#isSigner(signer) ? signer : undefined,\n },\n );\n\n return hash.toString();\n }\n\n // eslint-disable-next-line class-methods-use-this\n #isSigner(signer: PolkadotSigner | IKeyringPair): signer is PolkadotSigner {\n return 'signPayload' in signer;\n }\n}\n","/* 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 { Signer as EthersSigner } from 'ethers';\nimport { PolkadotService } from '../polkadot';\nimport { DestinationChainTransferData } from '../sdk.interfaces';\nimport { getBalance, getMin } from './getTransferData.utils';\n\nexport interface GetDestinationDataParams {\n transferConfig: TransferConfig;\n destinationAddress: string;\n ethersSigner: EthersSigner;\n polkadot: PolkadotService;\n}\n\nexport async function getDestinationData({\n transferConfig,\n destinationAddress,\n ethersSigner,\n polkadot,\n}: GetDestinationDataParams): Promise<DestinationChainTransferData> {\n const {\n asset,\n destination: { chain, config },\n } = transferConfig;\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals: await polkadot.getAssetDecimals(asset),\n });\n\n const balance = await getBalance({\n address: destinationAddress,\n config,\n ethersSigner,\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({ config: transferConfig, polkadot });\n const minAmount = zeroAmount.copyWith({ amount: min });\n\n return {\n balance: balanceAmount,\n chain,\n existentialDeposit,\n fee: feeAmount,\n min: minAmount,\n };\n}\n\nexport interface GetFeeParams {\n config: TransferConfig;\n polkadot: PolkadotService;\n}\n\nexport async function getFee({\n config,\n polkadot,\n}: GetFeeParams): Promise<AssetAmount> {\n const { amount, asset } = config.source.config.destinationFee;\n const decimals = await polkadot.getAssetDecimals(asset);\n const zeroAmount = AssetAmount.fromAsset(asset, {\n amount: 0n,\n decimals,\n });\n\n if (Number.isFinite(amount)) {\n return zeroAmount.copyWith({\n amount: toBigInt(amount as number, decimals),\n });\n }\n\n const cfg = (amount as FeeConfigBuilder).build({\n api: polkadot.api,\n asset: polkadot.chain.getAssetId(asset),\n });\n\n return zeroAmount.copyWith({\n amount: await cfg.call(),\n });\n}\n"],"mappings":"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","names":["AssetAmount","convertDecimals","Big","Contract","Erc20ABI_default","Erc20","#config","#contract","config","signer","Contract","Erc20ABI_default","Contract","XtokensABI_default","Xtokens","#config","#contract","#signer","config","signer","Contract","XtokensABI_default","amount","estimatedGas","gasPrice","error","maxPriorityFeePerGas","createContract","config","signer","Erc20","Xtokens","CallType","toBigInt","getBalance","address","config","ethersSigner","polkadot","cfg","CallType","createContract","getMin","min","decimals","toBigInt","getSourceData","transferConfig","destinationAddress","destinationFee","ethersSigner","polkadot","sourceAddress","_a","_b","_c","asset","destination","chain","config","zeroAmount","AssetAmount","zeroFeeAmount","balance","getBalance","feeBalance","getFeeBalances","min","getMin","extrinsic","contract","fee","getFee","balanceAmount","existentialDeposit","feeAmount","feeBalanceAmount","minAmount","maxAmount","getMax","address","decimals","getContractFee","getExtrinsicFee","createContract","convertDecimals","error","result","Big","ConfigBuilder","convertDecimals","toBigInt","Big","assetsMap","darwiniaPangoro","eq","equilibriumAlphanet","paring","AssetAmount","getPolkadotApi","PolkadotService","api","chain","chains","symbol","key","asset","_a","_b","existentialDeposit","eqExistentialDeposit","amount","_c","_d","_e","fn","data","unwrapped","config","response","account","args","signer","#isSigner","AssetAmount","toBigInt","getDestinationData","transferConfig","destinationAddress","ethersSigner","polkadot","asset","chain","config","zeroAmount","AssetAmount","balance","getBalance","min","getMin","balanceAmount","existentialDeposit","feeAmount","getFee","minAmount","amount","decimals","toBigInt","cfg","getTransferData","destinationAddress","ethersSigner","polkadotSigner","sourceAddress","transferConfig","destPolkadot","srcPolkadot","PolkadotService","destination","getDestinationData","destinationFee","getDestinationFeeWithSourceDecimals","source","getSourceData","amount","result","Big","toBigInt","getMin","_a","_b","bigintAmount","asset","chain","config","contract","extrinsic","createContract","tx","balance","existentialDeposit","fee","min","sourcePolkadot","destinationFeeDecimals","convertDecimals","Sdk","options","ecosystem","assets","asset","ConfigBuilder","keyOrAsset","sourceChains","source","keyOrChain","destinationChains","destination","destKeyOrChain","sourceAddress","destinationAddress","signers","getTransferData","destinationKeyOrChain","ethersSigner","polkadotSigner","sourceKeyOrChain"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moonbeam-network/xcm-sdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
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",
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
"link": "npm ln",
|
|
9
9
|
"lint": "eslint ./src --ext .js,.ts",
|
|
10
10
|
"lint:fix": "npm run lint -- --fix",
|
|
11
|
+
"typecheck": "tsc --noEmit",
|
|
11
12
|
"test:acc": "jest --forceExit --testTimeout 300000 ./tests/acceptance",
|
|
12
13
|
"prepack": "prettier --write build/index.d.ts"
|
|
13
14
|
},
|
|
@@ -46,17 +47,17 @@
|
|
|
46
47
|
"types": "./build/index.d.ts",
|
|
47
48
|
"main": "./build/index.cjs",
|
|
48
49
|
"dependencies": {
|
|
49
|
-
"@moonbeam-network/xcm-builder": "1.0.
|
|
50
|
-
"@moonbeam-network/xcm-config": "1.0.
|
|
50
|
+
"@moonbeam-network/xcm-builder": "1.0.5",
|
|
51
|
+
"@moonbeam-network/xcm-config": "1.0.9",
|
|
51
52
|
"@moonbeam-network/xcm-types": "1.0.1",
|
|
52
|
-
"@moonbeam-network/xcm-utils": "1.
|
|
53
|
+
"@moonbeam-network/xcm-utils": "1.0.2",
|
|
53
54
|
"big.js": "^6.2.1"
|
|
54
55
|
},
|
|
55
56
|
"peerDependencies": {
|
|
56
|
-
"@polkadot/api": "^10.
|
|
57
|
-
"@polkadot/api-augment": "^10.
|
|
58
|
-
"@polkadot/types": "^10.
|
|
59
|
-
"@polkadot/util": "^12.
|
|
57
|
+
"@polkadot/api": "^10.9.1",
|
|
58
|
+
"@polkadot/api-augment": "^10.9.1",
|
|
59
|
+
"@polkadot/types": "^10.9.1",
|
|
60
|
+
"@polkadot/util": "^12.3.2",
|
|
60
61
|
"ethers": "^5.7.2"
|
|
61
62
|
}
|
|
62
63
|
}
|