@xchainjs/xchain-mayachain-query 0.1.20 → 1.0.0
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/lib/index.esm.js +30 -13
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +29 -12
- package/lib/index.js.map +1 -1
- package/lib/mayachain-query.d.ts +5 -5
- package/lib/types.d.ts +52 -11
- package/lib/utils/const.d.ts +8 -7
- package/lib/utils/utils.d.ts +3 -2
- package/package.json +4 -4
package/lib/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { assetFromStringEx, assetToString, baseAmount, CryptoAmount, CachedValue,
|
|
1
|
+
import { assetFromStringEx, assetToString, baseAmount, CryptoAmount, CachedValue, AssetCryptoAmount, eqAsset, isSynthAsset } from '@xchainjs/xchain-util';
|
|
2
2
|
import { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query';
|
|
3
3
|
import { BigNumber } from 'bignumber.js';
|
|
4
4
|
import { Network } from '@xchainjs/xchain-client';
|
|
@@ -343,6 +343,8 @@ class MayachainQuery {
|
|
|
343
343
|
asset: destinationAsset,
|
|
344
344
|
affiliateFee: new CryptoAmount(baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
345
345
|
outboundFee: new CryptoAmount(baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
346
|
+
liquidityFee: new CryptoAmount(baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
347
|
+
totalFee: new CryptoAmount(baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
346
348
|
},
|
|
347
349
|
outboundDelayBlocks: 0,
|
|
348
350
|
outboundDelaySeconds: 0,
|
|
@@ -350,8 +352,12 @@ class MayachainQuery {
|
|
|
350
352
|
inboundConfirmationBlocks: 0,
|
|
351
353
|
canSwap: false,
|
|
352
354
|
errors: [`Mayanode request quote: ${response.error}`],
|
|
355
|
+
expiry: 0,
|
|
353
356
|
slipBasisPoints: 0,
|
|
354
357
|
totalSwapSeconds: 0,
|
|
358
|
+
streamingSwapSeconds: 0,
|
|
359
|
+
streamingSwapBlocks: 0,
|
|
360
|
+
maxStreamingQuantity: 0,
|
|
355
361
|
warning: '',
|
|
356
362
|
};
|
|
357
363
|
}
|
|
@@ -369,13 +375,23 @@ class MayachainQuery {
|
|
|
369
375
|
asset: feeAsset,
|
|
370
376
|
affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
371
377
|
outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
378
|
+
liquidityFee: new CryptoAmount(baseAmount(swapQuote.fees.liquidity, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
379
|
+
totalFee: new CryptoAmount(baseAmount(swapQuote.fees.total, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
372
380
|
},
|
|
381
|
+
expiry: swapQuote.expiry,
|
|
382
|
+
recommendedMinAmountIn: new CryptoAmount(baseAmount(swapQuote.recommended_min_amount_in || '0', eqAsset(fromAsset, CacaoAsset) ? 10 : 8), fromAsset),
|
|
383
|
+
router: swapQuote.router,
|
|
384
|
+
recommendedGasRate: swapQuote.recommended_gas_rate,
|
|
385
|
+
gasRateUnits: swapQuote.gas_rate_units,
|
|
373
386
|
slipBasisPoints: swapQuote.fees.slippage_bps,
|
|
374
387
|
outboundDelayBlocks: swapQuote.outbound_delay_blocks,
|
|
375
388
|
outboundDelaySeconds: swapQuote.outbound_delay_seconds,
|
|
376
389
|
inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,
|
|
377
390
|
inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,
|
|
378
|
-
|
|
391
|
+
maxStreamingQuantity: swapQuote.max_streaming_quantity,
|
|
392
|
+
streamingSwapBlocks: swapQuote.streaming_swap_blocks,
|
|
393
|
+
streamingSwapSeconds: swapQuote.streaming_swap_seconds,
|
|
394
|
+
totalSwapSeconds: swapQuote.total_swap_seconds || 0,
|
|
379
395
|
canSwap: !(!swapQuote.memo || errors.length > 0),
|
|
380
396
|
errors,
|
|
381
397
|
warning: '',
|
|
@@ -389,13 +405,13 @@ class MayachainQuery {
|
|
|
389
405
|
getDustValues() {
|
|
390
406
|
// TODO: Find out how to fetch native asset decimals
|
|
391
407
|
return {
|
|
392
|
-
[BtcChain]: new
|
|
393
|
-
[EthChain]: new
|
|
394
|
-
[DashChain]: new
|
|
395
|
-
[KujiraChain]: new
|
|
396
|
-
[ThorChain]: new
|
|
397
|
-
[MayaChain]: new
|
|
398
|
-
[ArbChain]: new
|
|
408
|
+
[BtcChain]: new AssetCryptoAmount(baseAmount(10000, 8), BtcAsset),
|
|
409
|
+
[EthChain]: new AssetCryptoAmount(baseAmount(0, 18), EthAsset),
|
|
410
|
+
[DashChain]: new AssetCryptoAmount(baseAmount(10000, 8), DashAsset),
|
|
411
|
+
[KujiraChain]: new AssetCryptoAmount(baseAmount(0, 6), KujiraAsset),
|
|
412
|
+
[ThorChain]: new AssetCryptoAmount(baseAmount(0, 8), RuneAsset),
|
|
413
|
+
[MayaChain]: new AssetCryptoAmount(baseAmount(0, 10), CacaoAsset),
|
|
414
|
+
[ArbChain]: new AssetCryptoAmount(baseAmount(0, 18), ArbAsset),
|
|
399
415
|
};
|
|
400
416
|
}
|
|
401
417
|
/**
|
|
@@ -489,9 +505,10 @@ class MayachainQuery {
|
|
|
489
505
|
const assetDecimals = yield this.mayachainCache.getAssetDecimals();
|
|
490
506
|
const getCryptoAmount = (assetDecimals, asset, amount) => {
|
|
491
507
|
const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS;
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
508
|
+
const assetFormatted = assetFromStringEx(asset);
|
|
509
|
+
return decimals === DEFAULT_MAYACHAIN_DECIMALS || eqAsset(CacaoAsset, assetFormatted)
|
|
510
|
+
? new CryptoAmount(baseAmount(amount, decimals), assetFormatted)
|
|
511
|
+
: getCryptoAmountWithNotation(new CryptoAmount(baseAmount(amount), assetFormatted), decimals);
|
|
495
512
|
};
|
|
496
513
|
return {
|
|
497
514
|
count: actionsResume.count ? Number(actionsResume.count) : 0,
|
|
@@ -566,7 +583,7 @@ class MayachainQuery {
|
|
|
566
583
|
const totalFeePerBlock = baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0);
|
|
567
584
|
const txFee = baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[assetToString(CacaoAsset)]);
|
|
568
585
|
return {
|
|
569
|
-
value: new
|
|
586
|
+
value: new AssetCryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),
|
|
570
587
|
memo: `~:${name}:${isUpdate ? chain || (details === null || details === void 0 ? void 0 : details.aliases[0].chain) : chain}:${isUpdate ? chainAddress || (details === null || details === void 0 ? void 0 : details.aliases[0].address) : chainAddress}:${isUpdate ? owner || (details === null || details === void 0 ? void 0 : details.owner) : owner}:MAYA.CACAO`,
|
|
571
588
|
};
|
|
572
589
|
});
|
package/lib/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n LastBlock,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info', 'https://api-maya.liquify.com'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param streamingInterval - the interval in which streaming swaps are swapped\n * @param streamingQuantity - the quantity of swaps within a streaming swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n streamingInterval?: number,\n streamingQuantity?: number,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Return the last block of every chain at a certain MAYAChain height\n * @param height - optional MAYAChain height, default, latest block\n * @returns - last block data or block data pertaining to that height number\n */\n public async getLatestBlock(height?: number): Promise<LastBlock[]> {\n for (const api of this.networkApis) {\n try {\n return (await api.lastblock(height)).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\nexport const ArbAsset = assetFromStringEx('ARB.ETH')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\nexport const ArbChain = 'ARB'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n\n// TODO: Move this util functions to xchain-util to avoid replication between Thorchain and Mayachain\nexport const getCryptoAmountWithNotation = (amount: CryptoAmount, notation: number): CryptoAmount => {\n const inputAmountBaseNotation = amount.baseAmount.amount()\n const decimalsDiff = notation - amount.baseAmount.decimal\n return new CryptoAmount(baseAmount(inputAmountBaseNotation.times(10 ** decimalsDiff), notation), amount.asset)\n}\n","import { PoolDetail } from '@xchainjs/xchain-mayamidgard'\nimport { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n expirationTimePools: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n private readonly poolsCache: CachedValue<PoolDetail[]> // Cached value pools\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 60000, expirationTimePools: 60000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n this.poolsCache = new CachedValue<PoolDetail[]>(() => this.refreshPoolsCache(), this.conf.expirationTimePools)\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n if (!this.poolsCache) throw Error(`Could not refresh pools cache`)\n return await this.poolsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 10,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n\n /**\n * Refreshes the Pools cache\n * @returns {PoolDetail[]} the list of pools\n */\n private async refreshPoolsCache(): Promise<PoolDetail[]> {\n return this.midgardQuery.getPools()\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { PoolDetail, Transaction } from '@xchainjs/xchain-mayamidgard'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport {\n Address,\n Asset,\n CryptoAmount,\n assetFromStringEx,\n assetToString,\n baseAmount,\n eqAsset,\n isSynthAsset,\n} from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport {\n InboundDetail,\n MAYANameDetails,\n QuoteMAYAName,\n QuoteMAYANameParams,\n QuoteSwap,\n QuoteSwapParams,\n SwapHistoryParams,\n SwapsHistory,\n} from './types'\nimport {\n ArbAsset,\n ArbChain,\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n getCryptoAmountWithNotation,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n streamingInterval,\n streamingQuantity,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.fees.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n [ArbChain]: new CryptoAmount(baseAmount(0, 18), ArbAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n const details = await this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n if (!details) return undefined\n\n return {\n name: MAYAName,\n owner: details.owner,\n expireBlockHeight: Number(details.expire),\n aliases: details.entries,\n }\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: Asset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n\n /**\n * Get pools details\n * @returns {PoolDetail[]} pools details\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.mayachainCache.getPools()\n }\n\n /**\n * Get swap addresses swap history\n * @param {SwapHistoryParams} params Swap history params\n * @param {Address[]} params.addresses - List of addresses\n * @returns {SwapsHistory} Swap history\n */\n public async getSwapHistory({ addresses }: SwapHistoryParams): Promise<SwapsHistory> {\n const actionsResume = await this.mayachainCache.midgardQuery.getActions({\n address: addresses.join(','),\n type: 'swap',\n })\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n\n const getCryptoAmount = (assetDecimals: Record<string, number>, asset: string, amount: string): CryptoAmount => {\n const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS\n return decimals === DEFAULT_MAYACHAIN_DECIMALS || eqAsset(CacaoAsset, assetFromStringEx(asset))\n ? new CryptoAmount(baseAmount(amount, decimals), assetFromStringEx(asset))\n : getCryptoAmountWithNotation(new CryptoAmount(baseAmount(amount), assetFromStringEx(asset)), decimals)\n }\n\n return {\n count: actionsResume.count ? Number(actionsResume.count) : 0,\n swaps: actionsResume.actions.map((action) => {\n let transaction: Transaction | undefined = action.out.filter((out) => out.txID !== '')[0] // For non to protocol asset swap\n if (!transaction) {\n // For to protocol asset swap\n transaction = action.out.sort((out1, out2) => Number(out2.coins[0].amount) - Number(out1.coins[0].amount))[0]\n }\n return {\n date: new Date(Number(action.date) / 10 ** 6),\n status: action.status,\n inboundTx: {\n hash: action.in[0].txID,\n address: action.in[0].address,\n amount: getCryptoAmount(assetDecimals, action.in[0].coins[0].asset, action.in[0].coins[0].amount),\n },\n outboundTx: transaction\n ? {\n hash: transaction.txID,\n address: transaction.address,\n amount: getCryptoAmount(assetDecimals, transaction.coins[0].asset, transaction.coins[0].amount),\n }\n : undefined,\n }\n }),\n }\n }\n\n /**\n * Get the MAYANames owned by an address\n * @param {Address} owner - Thorchain address\n * @returns {MAYANameDetails[]} List of MAYANames owned by the address\n */\n public async getMAYANamesByOwner(owner: Address): Promise<MAYANameDetails[]> {\n const mayaNames = await this.mayachainCache.midgardQuery.getMAYANameReverseLookup(owner)\n\n if (!mayaNames || mayaNames.length === 0) return []\n\n const tasks = mayaNames.map((mayaName) => this.getMAYANameDetails(mayaName))\n\n const mayaNamesDetails = await Promise.all(tasks)\n return mayaNamesDetails.filter((mayaNameDetails) => mayaNameDetails !== undefined) as MAYANameDetails[]\n }\n\n /**\n * Estimate the cost of an update or MAYAName registration\n * @param {QuoteMAYANameParams} params Params to make the update or the registration\n * @returns {QuoteMAYAName} Memo to make the update or the registration and the estimation of the operation\n */\n public async estimateMAYAName({\n name,\n owner,\n isUpdate,\n expiry,\n chain,\n chainAddress,\n }: QuoteMAYANameParams): Promise<QuoteMAYAName> {\n const details = await this.getMAYANameDetails(name)\n\n if (!details && isUpdate) {\n throw Error('Can not update an unregistered MAYAName')\n }\n\n if (details?.owner && !isUpdate) {\n throw Error('MAYAName already registered')\n }\n\n let numberOfBlocksToAddToExpiry = isUpdate ? 0 : 5_256_000 // Average blocks per year https://docs.mayaprotocol.com/mayachain-dev-docs/introduction/mayaname-guide\n\n if (expiry) {\n const numberOfSecondsToExpire = Math.floor(expiry.getTime() / 1000) - Math.floor(Date.now() / 1000)\n if (numberOfSecondsToExpire < 0) throw Error('Can not update expiry time before the one already registered')\n numberOfBlocksToAddToExpiry = Math.round(numberOfSecondsToExpire / 6) // 1 block every 6 seconds\n }\n\n // Calculate fee\n\n const constantsDetails = await this.mayachainCache.mayanode.getMimir()\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n const oneTimeFee = isUpdate\n ? baseAmount(0, assetDecimals[assetToString(CacaoAsset)])\n : baseAmount(constantsDetails['TNSREGISTERFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n const totalFeePerBlock = baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(\n numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0,\n )\n\n const txFee = baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n return {\n value: new CryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),\n memo: `~:${name}:${isUpdate ? chain || details?.aliases[0].chain : chain}:${\n isUpdate ? chainAddress || details?.aliases[0].address : chainAddress\n }:${isUpdate ? owner || details?.owner : owner}:MAYA.CACAO`,\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n LastBlock,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info', 'https://api-maya.liquify.com'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param streamingInterval - the interval in which streaming swaps are swapped\n * @param streamingQuantity - the quantity of swaps within a streaming swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n streamingInterval?: number,\n streamingQuantity?: number,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Return the last block of every chain at a certain MAYAChain height\n * @param height - optional MAYAChain height, default, latest block\n * @returns - last block data or block data pertaining to that height number\n */\n public async getLatestBlock(height?: number): Promise<LastBlock[]> {\n for (const api of this.networkApis) {\n try {\n return (await api.lastblock(height)).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n}\n","import { Asset, assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC') as Asset\nexport const EthAsset = assetFromStringEx('ETH.ETH') as Asset\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO') as Asset\nexport const RuneAsset = assetFromStringEx('THOR.RUNE') as Asset\nexport const DashAsset = assetFromStringEx('DASH.DASH') as Asset\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI') as Asset\nexport const ArbAsset = assetFromStringEx('ARB.ETH') as Asset\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\nexport const ArbChain = 'ARB'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CompatibleAsset } from '../types'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (\n inputAmount: CryptoAmount<CompatibleAsset>,\n outDecimals: number,\n): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n\n// TODO: Move this util functions to xchain-util to avoid replication between Thorchain and Mayachain\nexport const getCryptoAmountWithNotation = <T extends CompatibleAsset>(\n amount: CryptoAmount<T>,\n notation: number,\n): CryptoAmount<CompatibleAsset> => {\n const inputAmountBaseNotation = amount.baseAmount.amount()\n const decimalsDiff = notation - amount.baseAmount.decimal\n return new CryptoAmount<T>(baseAmount(inputAmountBaseNotation.times(10 ** decimalsDiff), notation), amount.asset)\n}\n","import { PoolDetail } from '@xchainjs/xchain-mayamidgard'\nimport { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n expirationTimePools: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n private readonly poolsCache: CachedValue<PoolDetail[]> // Cached value pools\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 60000, expirationTimePools: 60000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n this.poolsCache = new CachedValue<PoolDetail[]>(() => this.refreshPoolsCache(), this.conf.expirationTimePools)\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n if (!this.poolsCache) throw Error(`Could not refresh pools cache`)\n return await this.poolsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 10,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n\n /**\n * Refreshes the Pools cache\n * @returns {PoolDetail[]} the list of pools\n */\n private async refreshPoolsCache(): Promise<PoolDetail[]> {\n return this.midgardQuery.getPools()\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { PoolDetail, Transaction } from '@xchainjs/xchain-mayamidgard'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport {\n Address,\n AssetCryptoAmount,\n CryptoAmount,\n assetFromStringEx,\n assetToString,\n baseAmount,\n eqAsset,\n isSynthAsset,\n} from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport {\n CompatibleAsset,\n InboundDetail,\n MAYANameDetails,\n QuoteMAYAName,\n QuoteMAYANameParams,\n QuoteSwap,\n QuoteSwapParams,\n SwapHistoryParams,\n SwapsHistory,\n} from './types'\nimport {\n ArbAsset,\n ArbChain,\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n getCryptoAmountWithNotation,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n streamingInterval,\n streamingQuantity,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n liquidityFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n totalFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n expiry: 0,\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n streamingSwapSeconds: 0,\n streamingSwapBlocks: 0,\n maxStreamingQuantity: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset) as CompatibleAsset\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n liquidityFee: new CryptoAmount(baseAmount(swapQuote.fees.liquidity, isFeeAssetCacao ? 10 : 8), feeAsset),\n totalFee: new CryptoAmount(baseAmount(swapQuote.fees.total, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n expiry: swapQuote.expiry,\n recommendedMinAmountIn: new CryptoAmount(\n baseAmount(swapQuote.recommended_min_amount_in || '0', eqAsset(fromAsset, CacaoAsset) ? 10 : 8),\n fromAsset,\n ),\n router: swapQuote.router,\n recommendedGasRate: swapQuote.recommended_gas_rate,\n gasRateUnits: swapQuote.gas_rate_units,\n slipBasisPoints: swapQuote.fees.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n maxStreamingQuantity: swapQuote.max_streaming_quantity,\n streamingSwapBlocks: swapQuote.streaming_swap_blocks,\n streamingSwapSeconds: swapQuote.streaming_swap_seconds,\n totalSwapSeconds: swapQuote.total_swap_seconds || 0,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, AssetCryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new AssetCryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new AssetCryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new AssetCryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new AssetCryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new AssetCryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new AssetCryptoAmount(baseAmount(0, 10), CacaoAsset),\n [ArbChain]: new AssetCryptoAmount(baseAmount(0, 18), ArbAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): AssetCryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n const details = await this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n if (!details) return undefined\n\n return {\n name: MAYAName,\n owner: details.owner,\n expireBlockHeight: Number(details.expire),\n aliases: details.entries,\n }\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: CompatibleAsset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n\n /**\n * Get pools details\n * @returns {PoolDetail[]} pools details\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.mayachainCache.getPools()\n }\n\n /**\n * Get swap addresses swap history\n * @param {SwapHistoryParams} params Swap history params\n * @param {Address[]} params.addresses - List of addresses\n * @returns {SwapsHistory} Swap history\n */\n public async getSwapHistory({ addresses }: SwapHistoryParams): Promise<SwapsHistory> {\n const actionsResume = await this.mayachainCache.midgardQuery.getActions({\n address: addresses.join(','),\n type: 'swap',\n })\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n\n const getCryptoAmount = (\n assetDecimals: Record<string, number>,\n asset: string,\n amount: string,\n ): CryptoAmount<CompatibleAsset> => {\n const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS\n const assetFormatted = assetFromStringEx(asset) as CompatibleAsset\n return decimals === DEFAULT_MAYACHAIN_DECIMALS || eqAsset(CacaoAsset, assetFormatted)\n ? new CryptoAmount(baseAmount(amount, decimals), assetFormatted)\n : getCryptoAmountWithNotation(new CryptoAmount(baseAmount(amount), assetFormatted), decimals)\n }\n\n return {\n count: actionsResume.count ? Number(actionsResume.count) : 0,\n swaps: actionsResume.actions.map((action) => {\n let transaction: Transaction | undefined = action.out.filter((out) => out.txID !== '')[0] // For non to protocol asset swap\n if (!transaction) {\n // For to protocol asset swap\n transaction = action.out.sort((out1, out2) => Number(out2.coins[0].amount) - Number(out1.coins[0].amount))[0]\n }\n return {\n date: new Date(Number(action.date) / 10 ** 6),\n status: action.status,\n inboundTx: {\n hash: action.in[0].txID,\n address: action.in[0].address,\n amount: getCryptoAmount(assetDecimals, action.in[0].coins[0].asset, action.in[0].coins[0].amount),\n },\n outboundTx: transaction\n ? {\n hash: transaction.txID,\n address: transaction.address,\n amount: getCryptoAmount(assetDecimals, transaction.coins[0].asset, transaction.coins[0].amount),\n }\n : undefined,\n }\n }),\n }\n }\n\n /**\n * Get the MAYANames owned by an address\n * @param {Address} owner - Thorchain address\n * @returns {MAYANameDetails[]} List of MAYANames owned by the address\n */\n public async getMAYANamesByOwner(owner: Address): Promise<MAYANameDetails[]> {\n const mayaNames = await this.mayachainCache.midgardQuery.getMAYANameReverseLookup(owner)\n\n if (!mayaNames || mayaNames.length === 0) return []\n\n const tasks = mayaNames.map((mayaName) => this.getMAYANameDetails(mayaName))\n\n const mayaNamesDetails = await Promise.all(tasks)\n return mayaNamesDetails.filter((mayaNameDetails) => mayaNameDetails !== undefined) as MAYANameDetails[]\n }\n\n /**\n * Estimate the cost of an update or MAYAName registration\n * @param {QuoteMAYANameParams} params Params to make the update or the registration\n * @returns {QuoteMAYAName} Memo to make the update or the registration and the estimation of the operation\n */\n public async estimateMAYAName({\n name,\n owner,\n isUpdate,\n expiry,\n chain,\n chainAddress,\n }: QuoteMAYANameParams): Promise<QuoteMAYAName> {\n const details = await this.getMAYANameDetails(name)\n\n if (!details && isUpdate) {\n throw Error('Can not update an unregistered MAYAName')\n }\n\n if (details?.owner && !isUpdate) {\n throw Error('MAYAName already registered')\n }\n\n let numberOfBlocksToAddToExpiry = isUpdate ? 0 : 5_256_000 // Average blocks per year https://docs.mayaprotocol.com/mayachain-dev-docs/introduction/mayaname-guide\n\n if (expiry) {\n const numberOfSecondsToExpire = Math.floor(expiry.getTime() / 1000) - Math.floor(Date.now() / 1000)\n if (numberOfSecondsToExpire < 0) throw Error('Can not update expiry time before the one already registered')\n numberOfBlocksToAddToExpiry = Math.round(numberOfSecondsToExpire / 6) // 1 block every 6 seconds\n }\n\n // Calculate fee\n\n const constantsDetails = await this.mayachainCache.mayanode.getMimir()\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n const oneTimeFee = isUpdate\n ? baseAmount(0, assetDecimals[assetToString(CacaoAsset)])\n : baseAmount(constantsDetails['TNSREGISTERFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n const totalFeePerBlock = baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(\n numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0,\n )\n\n const txFee = baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n return {\n value: new AssetCryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),\n memo: `~:${name}:${isUpdate ? chain || details?.aliases[0].chain : chain}:${\n isUpdate ? chainAddress || details?.aliases[0].address : chainAddress\n }:${isUpdate ? owner || details?.owner : owner}:MAYA.CACAO`,\n }\n }\n}\n"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -352,6 +352,8 @@ class MayachainQuery {
|
|
|
352
352
|
asset: destinationAsset,
|
|
353
353
|
affiliateFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(0, toAssetString === xchainUtil.assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
354
354
|
outboundFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(0, toAssetString === xchainUtil.assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
355
|
+
liquidityFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(0, toAssetString === xchainUtil.assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
356
|
+
totalFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(0, toAssetString === xchainUtil.assetToString(CacaoAsset) ? 10 : 8), destinationAsset),
|
|
355
357
|
},
|
|
356
358
|
outboundDelayBlocks: 0,
|
|
357
359
|
outboundDelaySeconds: 0,
|
|
@@ -359,8 +361,12 @@ class MayachainQuery {
|
|
|
359
361
|
inboundConfirmationBlocks: 0,
|
|
360
362
|
canSwap: false,
|
|
361
363
|
errors: [`Mayanode request quote: ${response.error}`],
|
|
364
|
+
expiry: 0,
|
|
362
365
|
slipBasisPoints: 0,
|
|
363
366
|
totalSwapSeconds: 0,
|
|
367
|
+
streamingSwapSeconds: 0,
|
|
368
|
+
streamingSwapBlocks: 0,
|
|
369
|
+
maxStreamingQuantity: 0,
|
|
364
370
|
warning: '',
|
|
365
371
|
};
|
|
366
372
|
}
|
|
@@ -378,13 +384,23 @@ class MayachainQuery {
|
|
|
378
384
|
asset: feeAsset,
|
|
379
385
|
affiliateFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
380
386
|
outboundFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
387
|
+
liquidityFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(swapQuote.fees.liquidity, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
388
|
+
totalFee: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(swapQuote.fees.total, isFeeAssetCacao ? 10 : 8), feeAsset),
|
|
381
389
|
},
|
|
390
|
+
expiry: swapQuote.expiry,
|
|
391
|
+
recommendedMinAmountIn: new xchainUtil.CryptoAmount(xchainUtil.baseAmount(swapQuote.recommended_min_amount_in || '0', xchainUtil.eqAsset(fromAsset, CacaoAsset) ? 10 : 8), fromAsset),
|
|
392
|
+
router: swapQuote.router,
|
|
393
|
+
recommendedGasRate: swapQuote.recommended_gas_rate,
|
|
394
|
+
gasRateUnits: swapQuote.gas_rate_units,
|
|
382
395
|
slipBasisPoints: swapQuote.fees.slippage_bps,
|
|
383
396
|
outboundDelayBlocks: swapQuote.outbound_delay_blocks,
|
|
384
397
|
outboundDelaySeconds: swapQuote.outbound_delay_seconds,
|
|
385
398
|
inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,
|
|
386
399
|
inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,
|
|
387
|
-
|
|
400
|
+
maxStreamingQuantity: swapQuote.max_streaming_quantity,
|
|
401
|
+
streamingSwapBlocks: swapQuote.streaming_swap_blocks,
|
|
402
|
+
streamingSwapSeconds: swapQuote.streaming_swap_seconds,
|
|
403
|
+
totalSwapSeconds: swapQuote.total_swap_seconds || 0,
|
|
388
404
|
canSwap: !(!swapQuote.memo || errors.length > 0),
|
|
389
405
|
errors,
|
|
390
406
|
warning: '',
|
|
@@ -398,13 +414,13 @@ class MayachainQuery {
|
|
|
398
414
|
getDustValues() {
|
|
399
415
|
// TODO: Find out how to fetch native asset decimals
|
|
400
416
|
return {
|
|
401
|
-
[BtcChain]: new xchainUtil.
|
|
402
|
-
[EthChain]: new xchainUtil.
|
|
403
|
-
[DashChain]: new xchainUtil.
|
|
404
|
-
[KujiraChain]: new xchainUtil.
|
|
405
|
-
[ThorChain]: new xchainUtil.
|
|
406
|
-
[MayaChain]: new xchainUtil.
|
|
407
|
-
[ArbChain]: new xchainUtil.
|
|
417
|
+
[BtcChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(10000, 8), BtcAsset),
|
|
418
|
+
[EthChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(0, 18), EthAsset),
|
|
419
|
+
[DashChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(10000, 8), DashAsset),
|
|
420
|
+
[KujiraChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(0, 6), KujiraAsset),
|
|
421
|
+
[ThorChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(0, 8), RuneAsset),
|
|
422
|
+
[MayaChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(0, 10), CacaoAsset),
|
|
423
|
+
[ArbChain]: new xchainUtil.AssetCryptoAmount(xchainUtil.baseAmount(0, 18), ArbAsset),
|
|
408
424
|
};
|
|
409
425
|
}
|
|
410
426
|
/**
|
|
@@ -498,9 +514,10 @@ class MayachainQuery {
|
|
|
498
514
|
const assetDecimals = yield this.mayachainCache.getAssetDecimals();
|
|
499
515
|
const getCryptoAmount = (assetDecimals, asset, amount) => {
|
|
500
516
|
const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS;
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
517
|
+
const assetFormatted = xchainUtil.assetFromStringEx(asset);
|
|
518
|
+
return decimals === DEFAULT_MAYACHAIN_DECIMALS || xchainUtil.eqAsset(CacaoAsset, assetFormatted)
|
|
519
|
+
? new xchainUtil.CryptoAmount(xchainUtil.baseAmount(amount, decimals), assetFormatted)
|
|
520
|
+
: getCryptoAmountWithNotation(new xchainUtil.CryptoAmount(xchainUtil.baseAmount(amount), assetFormatted), decimals);
|
|
504
521
|
};
|
|
505
522
|
return {
|
|
506
523
|
count: actionsResume.count ? Number(actionsResume.count) : 0,
|
|
@@ -575,7 +592,7 @@ class MayachainQuery {
|
|
|
575
592
|
const totalFeePerBlock = xchainUtil.baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0);
|
|
576
593
|
const txFee = xchainUtil.baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[xchainUtil.assetToString(CacaoAsset)]);
|
|
577
594
|
return {
|
|
578
|
-
value: new xchainUtil.
|
|
595
|
+
value: new xchainUtil.AssetCryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),
|
|
579
596
|
memo: `~:${name}:${isUpdate ? chain || (details === null || details === void 0 ? void 0 : details.aliases[0].chain) : chain}:${isUpdate ? chainAddress || (details === null || details === void 0 ? void 0 : details.aliases[0].address) : chainAddress}:${isUpdate ? owner || (details === null || details === void 0 ? void 0 : details.owner) : owner}:MAYA.CACAO`,
|
|
580
597
|
};
|
|
581
598
|
});
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n LastBlock,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info', 'https://api-maya.liquify.com'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param streamingInterval - the interval in which streaming swaps are swapped\n * @param streamingQuantity - the quantity of swaps within a streaming swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n streamingInterval?: number,\n streamingQuantity?: number,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Return the last block of every chain at a certain MAYAChain height\n * @param height - optional MAYAChain height, default, latest block\n * @returns - last block data or block data pertaining to that height number\n */\n public async getLatestBlock(height?: number): Promise<LastBlock[]> {\n for (const api of this.networkApis) {\n try {\n return (await api.lastblock(height)).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n}\n","import { assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC')\nexport const EthAsset = assetFromStringEx('ETH.ETH')\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO')\nexport const RuneAsset = assetFromStringEx('THOR.RUNE')\nexport const DashAsset = assetFromStringEx('DASH.DASH')\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI')\nexport const ArbAsset = assetFromStringEx('ARB.ETH')\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\nexport const ArbChain = 'ARB'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (inputAmount: CryptoAmount, outDecimals: number): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n\n// TODO: Move this util functions to xchain-util to avoid replication between Thorchain and Mayachain\nexport const getCryptoAmountWithNotation = (amount: CryptoAmount, notation: number): CryptoAmount => {\n const inputAmountBaseNotation = amount.baseAmount.amount()\n const decimalsDiff = notation - amount.baseAmount.decimal\n return new CryptoAmount(baseAmount(inputAmountBaseNotation.times(10 ** decimalsDiff), notation), amount.asset)\n}\n","import { PoolDetail } from '@xchainjs/xchain-mayamidgard'\nimport { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n expirationTimePools: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n private readonly poolsCache: CachedValue<PoolDetail[]> // Cached value pools\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 60000, expirationTimePools: 60000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n this.poolsCache = new CachedValue<PoolDetail[]>(() => this.refreshPoolsCache(), this.conf.expirationTimePools)\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n if (!this.poolsCache) throw Error(`Could not refresh pools cache`)\n return await this.poolsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 10,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n\n /**\n * Refreshes the Pools cache\n * @returns {PoolDetail[]} the list of pools\n */\n private async refreshPoolsCache(): Promise<PoolDetail[]> {\n return this.midgardQuery.getPools()\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { PoolDetail, Transaction } from '@xchainjs/xchain-mayamidgard'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport {\n Address,\n Asset,\n CryptoAmount,\n assetFromStringEx,\n assetToString,\n baseAmount,\n eqAsset,\n isSynthAsset,\n} from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport {\n InboundDetail,\n MAYANameDetails,\n QuoteMAYAName,\n QuoteMAYANameParams,\n QuoteSwap,\n QuoteSwapParams,\n SwapHistoryParams,\n SwapsHistory,\n} from './types'\nimport {\n ArbAsset,\n ArbChain,\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n getCryptoAmountWithNotation,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n streamingInterval,\n streamingQuantity,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset)\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n slipBasisPoints: swapQuote.fees.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n totalSwapSeconds: (swapQuote.inbound_confirmation_seconds || 0) + swapQuote.outbound_delay_seconds,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, CryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new CryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new CryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new CryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new CryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new CryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new CryptoAmount(baseAmount(0, 10), CacaoAsset),\n [ArbChain]: new CryptoAmount(baseAmount(0, 18), ArbAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): CryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n const details = await this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n if (!details) return undefined\n\n return {\n name: MAYAName,\n owner: details.owner,\n expireBlockHeight: Number(details.expire),\n aliases: details.entries,\n }\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: Asset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n\n /**\n * Get pools details\n * @returns {PoolDetail[]} pools details\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.mayachainCache.getPools()\n }\n\n /**\n * Get swap addresses swap history\n * @param {SwapHistoryParams} params Swap history params\n * @param {Address[]} params.addresses - List of addresses\n * @returns {SwapsHistory} Swap history\n */\n public async getSwapHistory({ addresses }: SwapHistoryParams): Promise<SwapsHistory> {\n const actionsResume = await this.mayachainCache.midgardQuery.getActions({\n address: addresses.join(','),\n type: 'swap',\n })\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n\n const getCryptoAmount = (assetDecimals: Record<string, number>, asset: string, amount: string): CryptoAmount => {\n const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS\n return decimals === DEFAULT_MAYACHAIN_DECIMALS || eqAsset(CacaoAsset, assetFromStringEx(asset))\n ? new CryptoAmount(baseAmount(amount, decimals), assetFromStringEx(asset))\n : getCryptoAmountWithNotation(new CryptoAmount(baseAmount(amount), assetFromStringEx(asset)), decimals)\n }\n\n return {\n count: actionsResume.count ? Number(actionsResume.count) : 0,\n swaps: actionsResume.actions.map((action) => {\n let transaction: Transaction | undefined = action.out.filter((out) => out.txID !== '')[0] // For non to protocol asset swap\n if (!transaction) {\n // For to protocol asset swap\n transaction = action.out.sort((out1, out2) => Number(out2.coins[0].amount) - Number(out1.coins[0].amount))[0]\n }\n return {\n date: new Date(Number(action.date) / 10 ** 6),\n status: action.status,\n inboundTx: {\n hash: action.in[0].txID,\n address: action.in[0].address,\n amount: getCryptoAmount(assetDecimals, action.in[0].coins[0].asset, action.in[0].coins[0].amount),\n },\n outboundTx: transaction\n ? {\n hash: transaction.txID,\n address: transaction.address,\n amount: getCryptoAmount(assetDecimals, transaction.coins[0].asset, transaction.coins[0].amount),\n }\n : undefined,\n }\n }),\n }\n }\n\n /**\n * Get the MAYANames owned by an address\n * @param {Address} owner - Thorchain address\n * @returns {MAYANameDetails[]} List of MAYANames owned by the address\n */\n public async getMAYANamesByOwner(owner: Address): Promise<MAYANameDetails[]> {\n const mayaNames = await this.mayachainCache.midgardQuery.getMAYANameReverseLookup(owner)\n\n if (!mayaNames || mayaNames.length === 0) return []\n\n const tasks = mayaNames.map((mayaName) => this.getMAYANameDetails(mayaName))\n\n const mayaNamesDetails = await Promise.all(tasks)\n return mayaNamesDetails.filter((mayaNameDetails) => mayaNameDetails !== undefined) as MAYANameDetails[]\n }\n\n /**\n * Estimate the cost of an update or MAYAName registration\n * @param {QuoteMAYANameParams} params Params to make the update or the registration\n * @returns {QuoteMAYAName} Memo to make the update or the registration and the estimation of the operation\n */\n public async estimateMAYAName({\n name,\n owner,\n isUpdate,\n expiry,\n chain,\n chainAddress,\n }: QuoteMAYANameParams): Promise<QuoteMAYAName> {\n const details = await this.getMAYANameDetails(name)\n\n if (!details && isUpdate) {\n throw Error('Can not update an unregistered MAYAName')\n }\n\n if (details?.owner && !isUpdate) {\n throw Error('MAYAName already registered')\n }\n\n let numberOfBlocksToAddToExpiry = isUpdate ? 0 : 5_256_000 // Average blocks per year https://docs.mayaprotocol.com/mayachain-dev-docs/introduction/mayaname-guide\n\n if (expiry) {\n const numberOfSecondsToExpire = Math.floor(expiry.getTime() / 1000) - Math.floor(Date.now() / 1000)\n if (numberOfSecondsToExpire < 0) throw Error('Can not update expiry time before the one already registered')\n numberOfBlocksToAddToExpiry = Math.round(numberOfSecondsToExpire / 6) // 1 block every 6 seconds\n }\n\n // Calculate fee\n\n const constantsDetails = await this.mayachainCache.mayanode.getMimir()\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n const oneTimeFee = isUpdate\n ? baseAmount(0, assetDecimals[assetToString(CacaoAsset)])\n : baseAmount(constantsDetails['TNSREGISTERFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n const totalFeePerBlock = baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(\n numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0,\n )\n\n const txFee = baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n return {\n value: new CryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),\n memo: `~:${name}:${isUpdate ? chain || details?.aliases[0].chain : chain}:${\n isUpdate ? chainAddress || details?.aliases[0].address : chainAddress\n }:${isUpdate ? owner || details?.owner : owner}:MAYA.CACAO`,\n }\n }\n}\n"],"names":["Network","QuoteApi","Configuration","MimirApi","NetworkApi","axiosRetry","axios","assetFromStringEx","assetToString","baseAmount","CryptoAmount","MidgardQuery","CachedValue","BigNumber","isSynthAsset","eqAsset"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/utils/mayanode.ts","../src/utils/const.ts","../src/utils/utils.ts","../src/mayachain-cache.ts","../src/mayachain-query.ts"],"sourcesContent":["import { Network } from '@xchainjs/xchain-client'\nimport {\n Configuration,\n InboundAddress,\n LastBlock,\n MimirApi,\n MimirResponse,\n NetworkApi,\n QuoteApi,\n QuoteSwapResponse,\n} from '@xchainjs/xchain-mayanode'\nimport axios from 'axios'\nimport axiosRetry from 'axios-retry'\n\nexport type MayanodeConfig = {\n apiRetries: number\n mayanodeBaseUrls: string[]\n}\n\nconst defaultMayanodeConfig: Record<Network, MayanodeConfig> = {\n mainnet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://mayanode.mayachain.info', 'https://api-maya.liquify.com'],\n },\n stagenet: {\n apiRetries: 3,\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n testnet: {\n apiRetries: 3,\n // There is no testnet for mayanode\n mayanodeBaseUrls: ['https://stagenet.mayanode.mayachain.info'],\n },\n}\n\nexport class Mayanode {\n private config: MayanodeConfig\n private network: Network\n private quoteApis: QuoteApi[]\n private mimirApis: MimirApi[]\n private networkApis: NetworkApi[]\n\n constructor(network: Network = Network.Mainnet, config?: MayanodeConfig) {\n this.network = network\n this.config = config ?? defaultMayanodeConfig[this.network]\n this.quoteApis = this.config.mayanodeBaseUrls.map((url) => new QuoteApi(new Configuration({ basePath: url })))\n this.mimirApis = this.config.mayanodeBaseUrls.map((url) => new MimirApi(new Configuration({ basePath: url })))\n this.networkApis = this.config.mayanodeBaseUrls.map((url) => new NetworkApi(new Configuration({ basePath: url })))\n\n axiosRetry(axios, { retries: this.config.apiRetries, retryDelay: axiosRetry.exponentialDelay })\n }\n\n /**\n * TODO\n * @param fromAsset - input asset\n * @param toAsset - output asset\n * @param amount - amount to swap\n * @param destinationAddress - destination address for the swap\n * @param streamingInterval - the interval in which streaming swaps are swapped\n * @param streamingQuantity - the quantity of swaps within a streaming swap\n * @param toleranceBps - slip percent\n * @param affiliateBps - affiliate percent\n * @param affiliate - affiliate address\n * @param height - block height\n * @returns quotes swap object response\n */\n public async getSwapQuote(\n fromAsset: string,\n toAsset: string,\n amount: number,\n destinationAddress?: string,\n streamingInterval?: number,\n streamingQuantity?: number,\n toleranceBps?: number,\n affiliateBps?: number,\n affiliate?: string,\n height?: number,\n ): Promise<QuoteSwapResponse> {\n for (const api of this.quoteApis) {\n try {\n return (\n await api.quoteswap(\n height,\n fromAsset,\n toAsset,\n amount,\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliate,\n )\n ).data\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Get current active mimir configuration.\n * @returns mimir configuration\n */\n public async getMimir(): Promise<MimirResponse> {\n for (const api of this.mimirApis) {\n try {\n return (await api.mimir()).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n\n /**\n * Get the set of asgard addresses that should be used for inbound transactions.\n * @returns MAYA inbound addresses\n */\n public async getInboundAddresses(): Promise<InboundAddress[]> {\n for (const api of this.networkApis) {\n try {\n const resp = (await api.inboundAddresses()).data\n return resp\n } catch (e) {}\n }\n throw new Error(`MAYANode not responding`)\n }\n\n /**\n * Return the last block of every chain at a certain MAYAChain height\n * @param height - optional MAYAChain height, default, latest block\n * @returns - last block data or block data pertaining to that height number\n */\n public async getLatestBlock(height?: number): Promise<LastBlock[]> {\n for (const api of this.networkApis) {\n try {\n return (await api.lastblock(height)).data\n } catch (e) {}\n }\n throw Error(`MAYANode not responding`)\n }\n}\n","import { Asset, assetFromStringEx } from '@xchainjs/xchain-util'\n\nexport const BtcAsset = assetFromStringEx('BTC.BTC') as Asset\nexport const EthAsset = assetFromStringEx('ETH.ETH') as Asset\nexport const CacaoAsset = assetFromStringEx('MAYA.CACAO') as Asset\nexport const RuneAsset = assetFromStringEx('THOR.RUNE') as Asset\nexport const DashAsset = assetFromStringEx('DASH.DASH') as Asset\nexport const KujiraAsset = assetFromStringEx('KUJI.KUJI') as Asset\nexport const ArbAsset = assetFromStringEx('ARB.ETH') as Asset\n\nexport const BtcChain = 'BTC'\nexport const EthChain = 'ETH'\nexport const MayaChain = 'MAYA'\nexport const ThorChain = 'THOR'\nexport const DashChain = 'DASH'\nexport const KujiraChain = 'KUJI'\nexport const ArbChain = 'ARB'\n\nexport const DEFAULT_MAYACHAIN_DECIMALS = 8\n","import { Asset, CryptoAmount, assetToString, baseAmount } from '@xchainjs/xchain-util'\nimport BigNumber from 'bignumber.js'\n\nimport { CompatibleAsset } from '../types'\n\nimport { CacaoAsset } from './const'\n\nexport const isCacaoAsset = (asset: Asset): boolean => assetToString(asset) === assetToString(CacaoAsset)\n\nexport const getBaseAmountWithDiffDecimals = (\n inputAmount: CryptoAmount<CompatibleAsset>,\n outDecimals: number,\n): BigNumber => {\n const inDecimals = inputAmount.baseAmount.decimal\n let baseAmountOut = inputAmount.baseAmount.amount()\n const adjustDecimals = outDecimals - inDecimals\n baseAmountOut = baseAmountOut.times(10 ** adjustDecimals)\n return baseAmount(baseAmountOut, outDecimals).amount()\n}\n\n// TODO: Move this util functions to xchain-util to avoid replication between Thorchain and Mayachain\nexport const getCryptoAmountWithNotation = <T extends CompatibleAsset>(\n amount: CryptoAmount<T>,\n notation: number,\n): CryptoAmount<CompatibleAsset> => {\n const inputAmountBaseNotation = amount.baseAmount.amount()\n const decimalsDiff = notation - amount.baseAmount.decimal\n return new CryptoAmount<T>(baseAmount(inputAmountBaseNotation.times(10 ** decimalsDiff), notation), amount.asset)\n}\n","import { PoolDetail } from '@xchainjs/xchain-mayamidgard'\nimport { MidgardQuery } from '@xchainjs/xchain-mayamidgard-query'\nimport { CachedValue } from '@xchainjs/xchain-util'\nimport { BigNumber } from 'bignumber.js'\n\nimport { InboundDetail } from './types'\nimport { MayaChain, Mayanode } from './utils'\n\nexport type MayachainCacheConf = {\n expirationTimeInboundAddress: number // Expiration time for the inbound address cache in milliseconds\n expirationTimePools: number // Expiration time for the inbound address cache in milliseconds\n}\n\n/**\n * This class manages retrieving information from up-to-date Mayachain.\n */\nexport class MayachainCache {\n readonly midgardQuery: MidgardQuery // Instance of the Maya MidgardQuery API\n readonly mayanode: Mayanode // Instance of the Maya Mayanode API\n private conf: MayachainCacheConf // Configuration for the cache\n private readonly inboundDetailCache: CachedValue<Record<string, InboundDetail>> // Cached value for inbound details\n private readonly assetDecimalsCache: CachedValue<Record<string, number>> // Cached value for asset decimals\n private readonly poolsCache: CachedValue<PoolDetail[]> // Cached value pools\n\n /**\n * Constructor to create a MayachainCache.\n *\n * @param midgardQuery - An instance of the Maya MidgardQuery API.\n * @param mayanode - An instance of the Maya Mayanode API.\n * @param configuration - Optional configuration for the cache.\n * @returns MayachainCache.\n */\n constructor(\n midgardQuery = new MidgardQuery(),\n mayanode = new Mayanode(),\n configuration?: Partial<MayachainCacheConf>,\n ) {\n // Initialize instances and configuration\n this.midgardQuery = midgardQuery\n this.mayanode = mayanode\n this.conf = { expirationTimeInboundAddress: 60000, expirationTimePools: 60000, ...configuration }\n\n // Initialize cached values\n this.inboundDetailCache = new CachedValue<Record<string, InboundDetail>>(\n () => this.refreshInboundDetailCache(),\n this.conf.expirationTimeInboundAddress,\n )\n this.assetDecimalsCache = new CachedValue<Record<string, number>>(() => this.refreshAssetDecimalsCache())\n this.poolsCache = new CachedValue<PoolDetail[]>(() => this.refreshPoolsCache(), this.conf.expirationTimePools)\n }\n\n /**\n * Get inbound addresses details.\n *\n * @returns Inbound details.\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n if (!this.inboundDetailCache) throw Error(`Could not refresh inbound details`)\n return await this.inboundDetailCache.getValue()\n }\n\n /**\n * Get the number of decimals of the supported Mayachain tokens.\n *\n * @returns {Record<string, number>} A record with the string asset notation as key and the number of decimals as value.\n */\n public async getAssetDecimals(): Promise<Record<string, number>> {\n if (!this.assetDecimalsCache) throw Error(`Could not refresh assets decimals`)\n return await this.assetDecimalsCache.getValue()\n }\n\n public async getPools(): Promise<PoolDetail[]> {\n if (!this.poolsCache) throw Error(`Could not refresh pools cache`)\n return await this.poolsCache.getValue()\n }\n\n /**\n * Refreshes the InboundDetailCache cache.\n */\n private async refreshInboundDetailCache(): Promise<Record<string, InboundDetail>> {\n // Implementation details for refreshing the inbound detail cache\n const [mimirDetails, allInboundAddresses] = await Promise.all([\n this.mayanode.getMimir(),\n this.mayanode.getInboundAddresses(),\n ])\n const inboundDetails: Record<string, InboundDetail> = {}\n for (const inbound of allInboundAddresses) {\n const chain = inbound.chain\n if (\n !chain ||\n !inbound.gas_rate ||\n !inbound.address ||\n !inbound.gas_rate_units ||\n !inbound.outbound_tx_size ||\n !inbound.outbound_fee ||\n !inbound.gas_rate_units\n )\n throw new Error(`Missing required inbound info`)\n\n inboundDetails[chain] = {\n chain: chain,\n address: inbound.address,\n router: inbound.router,\n gasRate: new BigNumber(inbound.gas_rate),\n gasRateUnits: inbound.gas_rate_units,\n outboundTxSize: new BigNumber(inbound.outbound_tx_size),\n outboundFee: new BigNumber(inbound.outbound_fee),\n haltedChain: inbound?.halted || !!mimirDetails[`HALT${chain}CHAIN`] || !!mimirDetails['HALTCHAINGLOBAL'],\n haltedTrading: !!mimirDetails['HALTTRADING'] || !!mimirDetails[`HALT${chain}TRADING`],\n haltedLP: !!mimirDetails['PAUSELP'] || !!mimirDetails[`PAUSELP${chain}`],\n }\n }\n // add mock MAYAChain inbound details\n inboundDetails[MayaChain] = {\n chain: MayaChain,\n address: '',\n router: '',\n gasRate: new BigNumber(0),\n gasRateUnits: '',\n outboundTxSize: new BigNumber(0),\n outboundFee: new BigNumber(0),\n haltedChain: false,\n haltedTrading: !!mimirDetails['HALTTRADING'],\n haltedLP: false, //\n }\n\n return inboundDetails\n }\n\n /**\n * Refreshes the number of decimals of the supported Mayachain tokens.\n */\n private async refreshAssetDecimalsCache(): Promise<Record<string, number>> {\n // Implementation details for refreshing the asset decimals cache\n // TODO: As soon as Mayachain returns native decimals from any endpoint of its API, refactor the function\n return {\n 'BTC.BTC': 8,\n 'ETH.ETH': 18,\n 'DASH.DASH': 8,\n 'KUJI.KUJI': 6,\n 'THOR.RUNE': 8,\n 'MAYA.CACAO': 10,\n 'ETH.USDT-0xdAC17F958D2ee523a2206206994597C13D831ec7': 6,\n 'ETH.USDC-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48': 6,\n 'ETH.WSTETH-0X7F39C581F595B53C5CB19BD0B3F8DA6C935E2CA0': 18,\n 'KUJI.USK': 6,\n }\n }\n\n /**\n * Refreshes the Pools cache\n * @returns {PoolDetail[]} the list of pools\n */\n private async refreshPoolsCache(): Promise<PoolDetail[]> {\n return this.midgardQuery.getPools()\n }\n}\n","import { Network } from '@xchainjs/xchain-client'\nimport { PoolDetail, Transaction } from '@xchainjs/xchain-mayamidgard'\nimport { QuoteSwapResponse } from '@xchainjs/xchain-mayanode'\nimport {\n Address,\n AssetCryptoAmount,\n CryptoAmount,\n assetFromStringEx,\n assetToString,\n baseAmount,\n eqAsset,\n isSynthAsset,\n} from '@xchainjs/xchain-util'\n\nimport { MayachainCache } from './mayachain-cache'\nimport {\n CompatibleAsset,\n InboundDetail,\n MAYANameDetails,\n QuoteMAYAName,\n QuoteMAYANameParams,\n QuoteSwap,\n QuoteSwapParams,\n SwapHistoryParams,\n SwapsHistory,\n} from './types'\nimport {\n ArbAsset,\n ArbChain,\n BtcAsset,\n BtcChain,\n CacaoAsset,\n DEFAULT_MAYACHAIN_DECIMALS,\n DashAsset,\n DashChain,\n EthAsset,\n EthChain,\n KujiraAsset,\n KujiraChain,\n MayaChain,\n RuneAsset,\n ThorChain,\n getBaseAmountWithDiffDecimals,\n getCryptoAmountWithNotation,\n} from './utils'\n\n/**\n * MAYAChain Class for interacting with MAYAChain.\n * Recommended main class to use for swapping with MAYAChain\n * Has access to Midgard and MAYANode data\n */\nexport class MayachainQuery {\n private mayachainCache: MayachainCache\n\n /**\n * Constructor to create a MayachainAMM\n * @param mayachainCache - an instance of the MayachainCache (could be pointing to stagenet,testnet,mainnet)\n * @param chainAttributes - attributes used to calculate waitTime & conf counting\n * @returns MayachainAMM\n */\n constructor(mayachainCache = new MayachainCache()) {\n // Initialize MayachainCache instance\n this.mayachainCache = mayachainCache\n }\n\n /**\n * Get the Mayachain network.\n * @returns\n */\n public getNetwork(): Network {\n return this.mayachainCache.midgardQuery.getNetwork()\n }\n\n /**\n * Quote a swap operation.\n * @param {QuoteSwapParams} quoteSwapParams - Parameters for the quote swap operation.\n * @returns {QuoteSwap} A quote for the swap operation.\n */\n public async quoteSwap({\n fromAsset,\n destinationAsset,\n amount,\n destinationAddress,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n streamingInterval,\n streamingQuantity,\n }: QuoteSwapParams): Promise<QuoteSwap> {\n const fromAssetString = assetToString(fromAsset)\n const toAssetString = assetToString(destinationAsset)\n // Endpoint allows 10 decimals for Cacao, 8 for the rest of assets\n const inputAmount =\n fromAssetString === assetToString(CacaoAsset)\n ? amount.baseAmount.amount()\n : getBaseAmountWithDiffDecimals(amount, 8)\n\n const swapQuote: QuoteSwapResponse = await this.mayachainCache.mayanode.getSwapQuote(\n fromAssetString,\n toAssetString,\n inputAmount.toNumber(),\n destinationAddress,\n streamingInterval,\n streamingQuantity,\n toleranceBps,\n affiliateBps,\n affiliateAddress,\n height,\n )\n\n const response: { error?: string } = JSON.parse(JSON.stringify(swapQuote))\n if (response.error) {\n return {\n toAddress: ``,\n memo: ``,\n expectedAmount: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: destinationAsset,\n affiliateFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n outboundFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n liquidityFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n totalFee: new CryptoAmount(\n baseAmount(0, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n },\n outboundDelayBlocks: 0,\n outboundDelaySeconds: 0,\n inboundConfirmationSeconds: 0,\n inboundConfirmationBlocks: 0,\n canSwap: false,\n errors: [`Mayanode request quote: ${response.error}`],\n expiry: 0,\n slipBasisPoints: 0,\n totalSwapSeconds: 0,\n streamingSwapSeconds: 0,\n streamingSwapBlocks: 0,\n maxStreamingQuantity: 0,\n warning: '',\n }\n }\n\n const feeAsset = assetFromStringEx(swapQuote.fees.asset) as CompatibleAsset\n\n const errors: string[] = []\n if (swapQuote.memo === undefined) errors.push(`Error parsing swap quote: Memo is ${swapQuote.memo}`)\n\n const isFeeAssetCacao = swapQuote.fees.asset === assetToString(CacaoAsset)\n return {\n toAddress: swapQuote.inbound_address || '',\n memo: swapQuote.memo || '',\n expectedAmount: new CryptoAmount(\n baseAmount(swapQuote.expected_amount_out, toAssetString === assetToString(CacaoAsset) ? 10 : 8),\n destinationAsset,\n ),\n dustThreshold: this.getChainDustValue(fromAsset.chain),\n fees: {\n asset: feeAsset,\n affiliateFee: new CryptoAmount(baseAmount(swapQuote.fees.affiliate, isFeeAssetCacao ? 10 : 8), feeAsset),\n outboundFee: new CryptoAmount(baseAmount(swapQuote.fees.outbound, isFeeAssetCacao ? 10 : 8), feeAsset),\n liquidityFee: new CryptoAmount(baseAmount(swapQuote.fees.liquidity, isFeeAssetCacao ? 10 : 8), feeAsset),\n totalFee: new CryptoAmount(baseAmount(swapQuote.fees.total, isFeeAssetCacao ? 10 : 8), feeAsset),\n },\n expiry: swapQuote.expiry,\n recommendedMinAmountIn: new CryptoAmount(\n baseAmount(swapQuote.recommended_min_amount_in || '0', eqAsset(fromAsset, CacaoAsset) ? 10 : 8),\n fromAsset,\n ),\n router: swapQuote.router,\n recommendedGasRate: swapQuote.recommended_gas_rate,\n gasRateUnits: swapQuote.gas_rate_units,\n slipBasisPoints: swapQuote.fees.slippage_bps,\n outboundDelayBlocks: swapQuote.outbound_delay_blocks,\n outboundDelaySeconds: swapQuote.outbound_delay_seconds,\n inboundConfirmationSeconds: swapQuote.inbound_confirmation_seconds,\n inboundConfirmationBlocks: swapQuote.inbound_confirmation_blocks,\n maxStreamingQuantity: swapQuote.max_streaming_quantity,\n streamingSwapBlocks: swapQuote.streaming_swap_blocks,\n streamingSwapSeconds: swapQuote.streaming_swap_seconds,\n totalSwapSeconds: swapQuote.total_swap_seconds || 0,\n canSwap: !(!swapQuote.memo || errors.length > 0),\n errors,\n warning: '',\n }\n }\n\n /**\n * Return mayachain supported chains dust amounts\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getDustValues(): Record<string, AssetCryptoAmount> {\n // TODO: Find out how to fetch native asset decimals\n return {\n [BtcChain]: new AssetCryptoAmount(baseAmount(10000, 8), BtcAsset),\n [EthChain]: new AssetCryptoAmount(baseAmount(0, 18), EthAsset),\n [DashChain]: new AssetCryptoAmount(baseAmount(10000, 8), DashAsset),\n [KujiraChain]: new AssetCryptoAmount(baseAmount(0, 6), KujiraAsset),\n [ThorChain]: new AssetCryptoAmount(baseAmount(0, 8), RuneAsset),\n [MayaChain]: new AssetCryptoAmount(baseAmount(0, 10), CacaoAsset),\n [ArbChain]: new AssetCryptoAmount(baseAmount(0, 18), ArbAsset),\n }\n }\n\n /**\n * Return the dust crypto amount from the given chain\n * @param {string} chain Chain to retrieve the dust amount of\n * @returns a map where chain is the key and dust amount cryptoAmount as value\n */\n public getChainDustValue(chain: string): AssetCryptoAmount {\n const dustValue = this.getDustValues()[chain]\n if (!dustValue) throw Error(`No dust value known for ${chain} chain`)\n return dustValue\n }\n\n /**\n * Get MAYAname details\n * @param {string} MAYAName\n * @returns {MAYANameDetails | undefined} MAYANames details or undefined it is does not exist\n */\n public async getMAYANameDetails(MAYAName: string): Promise<MAYANameDetails | undefined> {\n const details = await this.mayachainCache.midgardQuery.getMAYANameDetails(MAYAName)\n if (!details) return undefined\n\n return {\n name: MAYAName,\n owner: details.owner,\n expireBlockHeight: Number(details.expire),\n aliases: details.entries,\n }\n }\n\n /**\n * Get inbound addresses details\n * @returns Inbound details\n */\n public async getInboundDetails(): Promise<Record<string, InboundDetail>> {\n return this.mayachainCache.getInboundDetails()\n }\n\n /**\n * Get chain inbound address details\n * @returns Inbound details\n */\n public async getChainInboundDetails(chain: string): Promise<InboundDetail> {\n const inboundDetails = await this.getInboundDetails()\n if (!inboundDetails[chain]) throw Error(`No inbound details known for ${chain} chain`)\n return inboundDetails[chain]\n }\n\n /**\n * Get asset decimals\n * @param {Asset} asset\n * @returns the asset decimals\n * @throws {Error} if the asset is not supported in Mayachain\n */\n public async getAssetDecimals(asset: CompatibleAsset): Promise<number> {\n if (isSynthAsset(asset)) return DEFAULT_MAYACHAIN_DECIMALS\n\n const assetNotation = assetToString(asset)\n const assetsDecimals = await this.mayachainCache.getAssetDecimals()\n if (!assetsDecimals[assetNotation]) throw Error(`Can not get decimals for ${assetNotation}`)\n\n return assetsDecimals[assetNotation]\n }\n\n /**\n * Get pools details\n * @returns {PoolDetail[]} pools details\n */\n public async getPools(): Promise<PoolDetail[]> {\n return this.mayachainCache.getPools()\n }\n\n /**\n * Get swap addresses swap history\n * @param {SwapHistoryParams} params Swap history params\n * @param {Address[]} params.addresses - List of addresses\n * @returns {SwapsHistory} Swap history\n */\n public async getSwapHistory({ addresses }: SwapHistoryParams): Promise<SwapsHistory> {\n const actionsResume = await this.mayachainCache.midgardQuery.getActions({\n address: addresses.join(','),\n type: 'swap',\n })\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n\n const getCryptoAmount = (\n assetDecimals: Record<string, number>,\n asset: string,\n amount: string,\n ): CryptoAmount<CompatibleAsset> => {\n const decimals = asset in assetDecimals ? assetDecimals[asset] : DEFAULT_MAYACHAIN_DECIMALS\n const assetFormatted = assetFromStringEx(asset) as CompatibleAsset\n return decimals === DEFAULT_MAYACHAIN_DECIMALS || eqAsset(CacaoAsset, assetFormatted)\n ? new CryptoAmount(baseAmount(amount, decimals), assetFormatted)\n : getCryptoAmountWithNotation(new CryptoAmount(baseAmount(amount), assetFormatted), decimals)\n }\n\n return {\n count: actionsResume.count ? Number(actionsResume.count) : 0,\n swaps: actionsResume.actions.map((action) => {\n let transaction: Transaction | undefined = action.out.filter((out) => out.txID !== '')[0] // For non to protocol asset swap\n if (!transaction) {\n // For to protocol asset swap\n transaction = action.out.sort((out1, out2) => Number(out2.coins[0].amount) - Number(out1.coins[0].amount))[0]\n }\n return {\n date: new Date(Number(action.date) / 10 ** 6),\n status: action.status,\n inboundTx: {\n hash: action.in[0].txID,\n address: action.in[0].address,\n amount: getCryptoAmount(assetDecimals, action.in[0].coins[0].asset, action.in[0].coins[0].amount),\n },\n outboundTx: transaction\n ? {\n hash: transaction.txID,\n address: transaction.address,\n amount: getCryptoAmount(assetDecimals, transaction.coins[0].asset, transaction.coins[0].amount),\n }\n : undefined,\n }\n }),\n }\n }\n\n /**\n * Get the MAYANames owned by an address\n * @param {Address} owner - Thorchain address\n * @returns {MAYANameDetails[]} List of MAYANames owned by the address\n */\n public async getMAYANamesByOwner(owner: Address): Promise<MAYANameDetails[]> {\n const mayaNames = await this.mayachainCache.midgardQuery.getMAYANameReverseLookup(owner)\n\n if (!mayaNames || mayaNames.length === 0) return []\n\n const tasks = mayaNames.map((mayaName) => this.getMAYANameDetails(mayaName))\n\n const mayaNamesDetails = await Promise.all(tasks)\n return mayaNamesDetails.filter((mayaNameDetails) => mayaNameDetails !== undefined) as MAYANameDetails[]\n }\n\n /**\n * Estimate the cost of an update or MAYAName registration\n * @param {QuoteMAYANameParams} params Params to make the update or the registration\n * @returns {QuoteMAYAName} Memo to make the update or the registration and the estimation of the operation\n */\n public async estimateMAYAName({\n name,\n owner,\n isUpdate,\n expiry,\n chain,\n chainAddress,\n }: QuoteMAYANameParams): Promise<QuoteMAYAName> {\n const details = await this.getMAYANameDetails(name)\n\n if (!details && isUpdate) {\n throw Error('Can not update an unregistered MAYAName')\n }\n\n if (details?.owner && !isUpdate) {\n throw Error('MAYAName already registered')\n }\n\n let numberOfBlocksToAddToExpiry = isUpdate ? 0 : 5_256_000 // Average blocks per year https://docs.mayaprotocol.com/mayachain-dev-docs/introduction/mayaname-guide\n\n if (expiry) {\n const numberOfSecondsToExpire = Math.floor(expiry.getTime() / 1000) - Math.floor(Date.now() / 1000)\n if (numberOfSecondsToExpire < 0) throw Error('Can not update expiry time before the one already registered')\n numberOfBlocksToAddToExpiry = Math.round(numberOfSecondsToExpire / 6) // 1 block every 6 seconds\n }\n\n // Calculate fee\n\n const constantsDetails = await this.mayachainCache.mayanode.getMimir()\n const assetDecimals = await this.mayachainCache.getAssetDecimals()\n const oneTimeFee = isUpdate\n ? baseAmount(0, assetDecimals[assetToString(CacaoAsset)])\n : baseAmount(constantsDetails['TNSREGISTERFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n const totalFeePerBlock = baseAmount(constantsDetails['TNSFEEPERBLOCK']).times(\n numberOfBlocksToAddToExpiry > 0 ? numberOfBlocksToAddToExpiry : 0,\n )\n\n const txFee = baseAmount(constantsDetails['NATIVETRANSACTIONFEE'], assetDecimals[assetToString(CacaoAsset)])\n\n return {\n value: new AssetCryptoAmount(oneTimeFee.plus(totalFeePerBlock).plus(txFee), CacaoAsset),\n memo: `~:${name}:${isUpdate ? chain || details?.aliases[0].chain : chain}:${\n isUpdate ? chainAddress || details?.aliases[0].address : chainAddress\n }:${isUpdate ? owner || details?.owner : owner}:MAYA.CACAO`,\n }\n }\n}\n"],"names":["Network","QuoteApi","Configuration","MimirApi","NetworkApi","axiosRetry","axios","assetFromStringEx","assetToString","baseAmount","CryptoAmount","MidgardQuery","CachedValue","BigNumber","eqAsset","AssetCryptoAmount","isSynthAsset"],"mappings":"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"}
|
package/lib/mayachain-query.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Network } from '@xchainjs/xchain-client';
|
|
2
2
|
import { PoolDetail } from '@xchainjs/xchain-mayamidgard';
|
|
3
|
-
import { Address,
|
|
3
|
+
import { Address, AssetCryptoAmount } from '@xchainjs/xchain-util';
|
|
4
4
|
import { MayachainCache } from './mayachain-cache';
|
|
5
|
-
import { InboundDetail, MAYANameDetails, QuoteMAYAName, QuoteMAYANameParams, QuoteSwap, QuoteSwapParams, SwapHistoryParams, SwapsHistory } from './types';
|
|
5
|
+
import { CompatibleAsset, InboundDetail, MAYANameDetails, QuoteMAYAName, QuoteMAYANameParams, QuoteSwap, QuoteSwapParams, SwapHistoryParams, SwapsHistory } from './types';
|
|
6
6
|
/**
|
|
7
7
|
* MAYAChain Class for interacting with MAYAChain.
|
|
8
8
|
* Recommended main class to use for swapping with MAYAChain
|
|
@@ -32,13 +32,13 @@ export declare class MayachainQuery {
|
|
|
32
32
|
* Return mayachain supported chains dust amounts
|
|
33
33
|
* @returns a map where chain is the key and dust amount cryptoAmount as value
|
|
34
34
|
*/
|
|
35
|
-
getDustValues(): Record<string,
|
|
35
|
+
getDustValues(): Record<string, AssetCryptoAmount>;
|
|
36
36
|
/**
|
|
37
37
|
* Return the dust crypto amount from the given chain
|
|
38
38
|
* @param {string} chain Chain to retrieve the dust amount of
|
|
39
39
|
* @returns a map where chain is the key and dust amount cryptoAmount as value
|
|
40
40
|
*/
|
|
41
|
-
getChainDustValue(chain: string):
|
|
41
|
+
getChainDustValue(chain: string): AssetCryptoAmount;
|
|
42
42
|
/**
|
|
43
43
|
* Get MAYAname details
|
|
44
44
|
* @param {string} MAYAName
|
|
@@ -61,7 +61,7 @@ export declare class MayachainQuery {
|
|
|
61
61
|
* @returns the asset decimals
|
|
62
62
|
* @throws {Error} if the asset is not supported in Mayachain
|
|
63
63
|
*/
|
|
64
|
-
getAssetDecimals(asset:
|
|
64
|
+
getAssetDecimals(asset: CompatibleAsset): Promise<number>;
|
|
65
65
|
/**
|
|
66
66
|
* Get pools details
|
|
67
67
|
* @returns {PoolDetail[]} pools details
|
package/lib/types.d.ts
CHANGED
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { TxHash } from '@xchainjs/xchain-client';
|
|
2
|
-
import { Address, Asset, Chain, CryptoAmount } from '@xchainjs/xchain-util';
|
|
2
|
+
import { Address, Asset, AssetCryptoAmount, Chain, CryptoAmount, SynthAsset, TokenAsset } from '@xchainjs/xchain-util';
|
|
3
3
|
import { BigNumber } from 'bignumber.js';
|
|
4
|
+
export type CompatibleAsset = Asset | TokenAsset | SynthAsset;
|
|
4
5
|
/**
|
|
5
6
|
* Represents fees associated with a swap.
|
|
6
7
|
*/
|
|
7
8
|
export type Fees = {
|
|
8
|
-
asset:
|
|
9
|
-
affiliateFee: CryptoAmount
|
|
10
|
-
outboundFee: CryptoAmount
|
|
9
|
+
asset: CompatibleAsset;
|
|
10
|
+
affiliateFee: CryptoAmount<CompatibleAsset>;
|
|
11
|
+
outboundFee: CryptoAmount<CompatibleAsset>;
|
|
12
|
+
/**
|
|
13
|
+
* The liquidity fees paid to pools
|
|
14
|
+
*/
|
|
15
|
+
liquidityFee: CryptoAmount<CompatibleAsset>;
|
|
16
|
+
/**
|
|
17
|
+
* Total fees
|
|
18
|
+
*/
|
|
19
|
+
totalFee: CryptoAmount<CompatibleAsset>;
|
|
11
20
|
};
|
|
12
21
|
/**
|
|
13
22
|
* Represents a quote for a swap operation.
|
|
@@ -15,8 +24,8 @@ export type Fees = {
|
|
|
15
24
|
export type QuoteSwap = {
|
|
16
25
|
toAddress: Address;
|
|
17
26
|
memo: string;
|
|
18
|
-
expectedAmount: CryptoAmount
|
|
19
|
-
dustThreshold:
|
|
27
|
+
expectedAmount: CryptoAmount<CompatibleAsset>;
|
|
28
|
+
dustThreshold: AssetCryptoAmount;
|
|
20
29
|
fees: Fees;
|
|
21
30
|
inboundConfirmationSeconds?: number;
|
|
22
31
|
inboundConfirmationBlocks?: number;
|
|
@@ -24,6 +33,38 @@ export type QuoteSwap = {
|
|
|
24
33
|
outboundDelayBlocks: number;
|
|
25
34
|
totalSwapSeconds: number;
|
|
26
35
|
slipBasisPoints: number;
|
|
36
|
+
/**
|
|
37
|
+
* The EVM chain router contract address
|
|
38
|
+
*/
|
|
39
|
+
router?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Expiration timestamp in unix seconds
|
|
42
|
+
*/
|
|
43
|
+
expiry: number;
|
|
44
|
+
/**
|
|
45
|
+
* The recommended minimum inbound amount for this transaction type & inbound asset. Sending less than this amount could result in failed refunds.
|
|
46
|
+
*/
|
|
47
|
+
recommendedMinAmountIn?: CryptoAmount;
|
|
48
|
+
/**
|
|
49
|
+
* The recommended gas rate to use for the inbound to ensure timely confirmation
|
|
50
|
+
*/
|
|
51
|
+
recommendedGasRate?: string;
|
|
52
|
+
/**
|
|
53
|
+
* The units of the recommended gas rate
|
|
54
|
+
*/
|
|
55
|
+
gasRateUnits?: string;
|
|
56
|
+
/**
|
|
57
|
+
* The maximum amount of trades a streaming swap can do for a trade
|
|
58
|
+
*/
|
|
59
|
+
streamingSwapSeconds?: number;
|
|
60
|
+
/**
|
|
61
|
+
* The number of blocks the streaming swap will execute over
|
|
62
|
+
*/
|
|
63
|
+
streamingSwapBlocks?: number;
|
|
64
|
+
/**
|
|
65
|
+
* Approx the number of seconds the streaming swap will execute over
|
|
66
|
+
*/
|
|
67
|
+
maxStreamingQuantity?: number;
|
|
27
68
|
canSwap: boolean;
|
|
28
69
|
errors: string[];
|
|
29
70
|
warning: string;
|
|
@@ -32,9 +73,9 @@ export type QuoteSwap = {
|
|
|
32
73
|
* Represents parameters for quoting a swap operation.
|
|
33
74
|
*/
|
|
34
75
|
export type QuoteSwapParams = {
|
|
35
|
-
fromAsset:
|
|
36
|
-
destinationAsset:
|
|
37
|
-
amount: CryptoAmount
|
|
76
|
+
fromAsset: CompatibleAsset;
|
|
77
|
+
destinationAsset: CompatibleAsset;
|
|
78
|
+
amount: CryptoAmount<CompatibleAsset>;
|
|
38
79
|
fromAddress?: string;
|
|
39
80
|
destinationAddress?: string;
|
|
40
81
|
height?: number;
|
|
@@ -68,7 +109,7 @@ export type SwapHistoryParams = {
|
|
|
68
109
|
export type TransactionAction = {
|
|
69
110
|
hash: TxHash;
|
|
70
111
|
address: Address;
|
|
71
|
-
amount: CryptoAmount
|
|
112
|
+
amount: CryptoAmount<CompatibleAsset>;
|
|
72
113
|
};
|
|
73
114
|
/**
|
|
74
115
|
* Swap resume
|
|
@@ -186,5 +227,5 @@ export type QuoteMAYAName = {
|
|
|
186
227
|
/**
|
|
187
228
|
* Estimation of the update or the registration of the MAYAName
|
|
188
229
|
*/
|
|
189
|
-
value:
|
|
230
|
+
value: AssetCryptoAmount;
|
|
190
231
|
};
|
package/lib/utils/const.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
export declare const
|
|
3
|
-
export declare const
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
1
|
+
import { Asset } from '@xchainjs/xchain-util';
|
|
2
|
+
export declare const BtcAsset: Asset;
|
|
3
|
+
export declare const EthAsset: Asset;
|
|
4
|
+
export declare const CacaoAsset: Asset;
|
|
5
|
+
export declare const RuneAsset: Asset;
|
|
6
|
+
export declare const DashAsset: Asset;
|
|
7
|
+
export declare const KujiraAsset: Asset;
|
|
8
|
+
export declare const ArbAsset: Asset;
|
|
8
9
|
export declare const BtcChain = "BTC";
|
|
9
10
|
export declare const EthChain = "ETH";
|
|
10
11
|
export declare const MayaChain = "MAYA";
|
package/lib/utils/utils.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Asset, CryptoAmount } from '@xchainjs/xchain-util';
|
|
2
2
|
import BigNumber from 'bignumber.js';
|
|
3
|
+
import { CompatibleAsset } from '../types';
|
|
3
4
|
export declare const isCacaoAsset: (asset: Asset) => boolean;
|
|
4
|
-
export declare const getBaseAmountWithDiffDecimals: (inputAmount: CryptoAmount
|
|
5
|
-
export declare const getCryptoAmountWithNotation: (amount: CryptoAmount
|
|
5
|
+
export declare const getBaseAmountWithDiffDecimals: (inputAmount: CryptoAmount<CompatibleAsset>, outDecimals: number) => BigNumber;
|
|
6
|
+
export declare const getCryptoAmountWithNotation: <T extends CompatibleAsset>(amount: CryptoAmount<T>, notation: number) => CryptoAmount<CompatibleAsset>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xchainjs/xchain-mayachain-query",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Mayachain query module that is responsible for estimating swap calculations and add/remove liquidity for thorchain",
|
|
6
6
|
"keywords": [
|
|
@@ -33,11 +33,11 @@
|
|
|
33
33
|
"postversion": "git push --follow-tags"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@xchainjs/xchain-client": "0.
|
|
36
|
+
"@xchainjs/xchain-client": "1.0.0",
|
|
37
37
|
"@xchainjs/xchain-mayamidgard": "0.1.5",
|
|
38
|
-
"@xchainjs/xchain-mayamidgard-query": "0.1.
|
|
38
|
+
"@xchainjs/xchain-mayamidgard-query": "0.1.16",
|
|
39
39
|
"@xchainjs/xchain-mayanode": "0.1.8",
|
|
40
|
-
"@xchainjs/xchain-util": "0.
|
|
40
|
+
"@xchainjs/xchain-util": "1.0.0",
|
|
41
41
|
"axios": "1.3.6",
|
|
42
42
|
"axios-retry": "3.2.5",
|
|
43
43
|
"bignumber.js": "9.0.0"
|