UNPKG

@crypto-dex-sdk/parachains-bifrost

Version:

Zenlink Parachains Impl for Bifrost

344 lines (336 loc) 10.3 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // index.ts var index_exports = {}; __export(index_exports, { NodeCurrencyId: () => NodeCurrencyId2, NodeCurrencyIdType: () => NodeCurrencyIdType, NodeTokenSymbol: () => NodeTokenSymbol, NodeTokenSymbolIndex: () => NodeTokenSymbolIndex, PAIR_ADDRESSES: () => PAIR_ADDRESSES, SwapRouter: () => SwapRouter, TokenType2: () => TokenType2, addressToNodeCurrency: () => addressToNodeCurrency, isNativeCurrency: () => isNativeCurrency, nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId: () => nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId, pairAddressToAssets: () => pairAddressToAssets, parseNodePrimitivesCurrency: () => parseNodePrimitivesCurrency, parseSymbolOrIndexToIndex: () => parseSymbolOrIndexToIndex }); module.exports = __toCommonJS(index_exports); // libs/constants/address.ts var import_format = require("@crypto-dex-sdk/format"); var PAIR_ADDRESSES = { // BNC-KSM "2001-0-0-2001-2-516": { address: "2001-2-2216203126272", account: "eCSrvaystgdffuJxPVZUZmUBqiz2nXKWuUWHQBPqvJFeDh1" }, // KSM-AUSD "2001-2-516-2001-2-770": { address: "2001-2-3307158636032", account: "eCSrvaystgdffuJxPVTJc2eQMgp9PnuPh7mMaQ6KbTynFRM" }, // KSM-VSKSM "2001-2-516-2001-2-1028": { address: "2001-2-4415260198400", account: "eCSrvaystgdffuJxPVW4UMxAXMuTpU3jkCJeiqppyfoi6SG" }, // BNC-ZLK "2001-0-0-2001-2-519": { address: "2001-2-2229088028160", account: "eCSrvaystgdffuJxPVU5NQfnXRohvjWF9u8VaeUWRg1mn1y" }, // KAR-ZLK "2001-2-518-2001-2-519": { address: "2001-2-2229121975808", account: "eCSrvaystgdffuJxPVRWqnxeKZJ3dWu8qJYidgLLStXXkiG" }, // KSM-RMRK "2001-2-516-2001-2-521": { address: "2001-2-2237711779328", account: "eCSrvaystgdffuJxPVU9u7Vv2AVjXTAEwbuujLggS6t6HoE" }, // VKSM-KSM "2001-2-260-2001-2-516": { address: "2001-2-2216220165632", account: "eCSrvaystgdffuJxPVYKf8H8UYnHGNRdVGUvj1SWSiatWMq" }, // BNC-USDT "2001-0-0-2001-2-2048": { address: "2001-2-8796093023744", account: "eCSrvaystgdffuJxPVN8LrN9JeAtrYVV1usKGABuUhYdqYw" }, // BNC-VBNC "2001-0-0-2001-2-257": { address: "2001-2-1103806596608", account: "eCSrvaystgdffuJxPVZ7pEK8ZMmZ7Nwg2144eZYgWdx4g6v" }, // KSM-KBTC "2001-2-516-2001-2-2050": { address: "2001-2-8804716774912", account: "eCSrvaystgdffuJxPVPy4UFedBDC5ZVsx7jsR8jPLZkyno1" }, // vKSM-USDT "2001-2-260-2001-2-2048": { address: "2001-2-8796110063104", account: "eCSrvaystgdffuJxPVNFYzcsVNZLG9E8TgSkUG1GcjD519E" }, // MOVR-VMOVR "2001-2-266-2001-2-522": { address: "2001-2-2241990362624", account: "eCSrvaystgdffuJxPVQfmrQY3XBfm6FPSBj1nJwmT48ASum" }, // BNC-DOT "2030-0-0-2030-2-2048": { address: "2030-2-8796093023744", account: "eCSrvaystgdffuJxPVTne2cjBdWDh6yPvzt8RdkFdihjqS1" }, // GLMR-vGLMR "2030-2-2049-2030-2-2305": { address: "2030-2-9900033902080", account: "eCSrvaystgdffuJxPVbKj318eoUb12vu85hWk7CQFktdf79" }, // vDOT-vsDOT "2030-2-2304-2030-2-2560": { address: "2030-2-10995267274240", account: "eCSrvaystgdffuJxPVS4SfFvaM26m6tAxwDLPvawBAYbnJd" }, // FIL-vFIL "2030-2-2052-2030-2-2308": { address: "2030-2-9912919000576", account: "eCSrvaystgdffuJxPVPVePp3f8Zegp8AuNsTv4FApKHtAt9" }, // DOT-vDOT "2030-2-2048-2030-2-2304": { address: "2030-2-9895738869248", account: "eCSrvaystgdffuJxPVRct68qJUZs1sFz762d7d37KJvb7Pz" } }; var pairAddressToAssets = Object.entries(PAIR_ADDRESSES).reduce( (acc, [assetsAddress, { address }]) => { const addresses = (assetsAddress.match(/\d+(-\d+)(-\d+)/g) || []).filter(import_format.isZenlinkAddress); const assetsId = addresses.map(import_format.addressToZenlinkAssetId); acc[address] = assetsId; return acc; }, {} ); // libs/formats/currency.ts var import_chain2 = require("@crypto-dex-sdk/chain"); var import_format3 = require("@crypto-dex-sdk/format"); // libs/parseNodePrimitivesCurrency.ts var import_chain = require("@crypto-dex-sdk/chain"); var import_format2 = require("@crypto-dex-sdk/format"); var NodeCurrencyId = { 0: "Native", 1: "XCM", 2: "Stellar", 3: "ZenlinkLPToken" }; function parseAssetU8(assetIndex) { return (assetIndex & 65280) >> 8; } function parseAssetType(assetIndex) { return assetIndex & 255; } function parseNodePrimitivesCurrency2(asset) { const { chainId, assetIndex } = asset; if (chainId === import_chain.ParachainId.BIFROST_KUSAMA || chainId === import_chain.ParachainId.BIFROST_POLKADOT) return parseNodePrimitivesCurrency(asset); const assetTypeU8 = parseAssetU8(assetIndex); const assetSymbol = parseAssetType(assetIndex); const nodeCurrencyId = NodeCurrencyId[assetTypeU8]; if (!nodeCurrencyId) throw new Error("invalid asset"); if (nodeCurrencyId === "ZenlinkLPToken") { const [asset0, asset1] = pairAddressToAssets[(0, import_format2.zenlinkAssetIdToAddress)(asset)]; const asset0Type = parseAssetType(asset0.assetIndex).toString(); const asset0U8 = parseAssetU8(asset0.assetIndex); const asset1Type = parseAssetType(asset1.assetIndex).toString(); const asset1U8 = parseAssetU8(asset1.assetIndex); return { [nodeCurrencyId]: [ asset0Type, asset0U8, asset1Type, asset1U8 ] }; } return { [nodeCurrencyId]: assetSymbol }; } // libs/formats/currency.ts var NodeCurrencyId2 = { 0: "Native", 1: "VToken", 2: "Token", 3: "Stable", 4: "VSToken", 5: "VSBond", 6: "LPToken", 7: "ForeignAsset", 8: "Token2", 9: "VToken2", 10: "VSToken2", 11: "VSBond2", 12: "StableLpToken" }; var NodeCurrencyIdType = { Native: 0, VToken: 1, Token: 2, Stable: 3, VSToken: 4, VSBond: 5, LPToken: 6, ForeignAsset: 7, Token2: 8, VToken2: 9, VSToken2: 10, VSBond2: 11, StableLpToken: 12 }; var NodeTokenSymbol = { 0: "ASG", 1: "BNC", 2: "KUSD", 3: "DOT", 4: "KSM", 5: "ETH", 6: "KAR", 7: "ZLK", 8: "PHA", 9: "RMRK", 10: "MOVR" }; var NodeTokenSymbolIndex = { ASG: 0, BNC: 1, KUSD: 2, DOT: 3, KSM: 4, ETH: 5, KAR: 6, ZLK: 7, PHA: 8, RMRK: 9, MOVR: 10 }; var TokenType2 = [7, 8, 9, 10, 12]; function parseAssetU82(assetIndex) { return (assetIndex & 65280) >> 8; } function parseAssetType2(assetIndex) { return assetIndex & 255; } function parseToTokenIndex(type, index) { if (type === 0) return 0; return (type << 8) + index; } function parseSymbolOrIndexToIndex(symbolIndex) { return typeof symbolIndex === "number" ? symbolIndex : NodeTokenSymbolIndex[symbolIndex]; } function parseNodePrimitivesCurrency(asset) { const { chainId, assetIndex } = asset; if (chainId === import_chain2.ParachainId.AMPLITUDE || chainId === import_chain2.ParachainId.PENDULUM) return parseNodePrimitivesCurrency2(asset); const assetTypeU8 = parseAssetU82(assetIndex); const nodeCurrencyId = NodeCurrencyId2[assetTypeU8]; if (!nodeCurrencyId) throw new Error("invalid asset"); if (TokenType2.includes(assetTypeU8)) return { [nodeCurrencyId]: parseAssetType2(assetIndex) }; if (nodeCurrencyId === "LPToken") { const [asset0, asset1] = pairAddressToAssets[(0, import_format3.zenlinkAssetIdToAddress)(asset)]; const asset0U8 = parseAssetU82(asset0.assetIndex); const asset1U8 = parseAssetU82(asset1.assetIndex); return { [nodeCurrencyId]: [ NodeTokenSymbol[parseAssetType2(asset0.assetIndex)], asset0U8, NodeTokenSymbol[parseAssetType2(asset1.assetIndex)], asset1U8 ] }; } return { [nodeCurrencyId]: NodeTokenSymbol[parseAssetType2(assetIndex)] }; } function addressToNodeCurrency(address) { return parseNodePrimitivesCurrency((0, import_format3.addressToZenlinkAssetId)(address)); } function nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId(currency, chainId) { const [tokenType, tokenSymbol] = Object.entries(currency)[0]; const tokenIndex = parseToTokenIndex( NodeCurrencyIdType[tokenType], parseSymbolOrIndexToIndex(tokenSymbol) ); return { chainId, assetType: tokenIndex === 0 ? 0 : 2, assetIndex: tokenIndex }; } // libs/utils.ts var import_format4 = require("@crypto-dex-sdk/format"); function isNativeCurrency(currency) { const { assetType, assetIndex } = (0, import_format4.addressToZenlinkAssetId)(currency.wrapped.address); return assetType === 0 && assetIndex === 0; } // SwapRouter.ts var import_format5 = require("@crypto-dex-sdk/format"); var SwapRouter = class { /** * Cannot be constructed. */ constructor() { } static swapCallParameters(trade, options) { const methodName = "swapExactAssetsForAssets"; const args = [ trade.inputAmount.quotient.toString(), trade.minimumAmountOut(options.allowedSlippage).quotient.toString(), trade.route.tokenPath.map((token) => (0, import_format5.addressToZenlinkAssetId)(token.address)), options.recipient, options.deadline ]; return { extrinsic: [ options.api.tx.zenlinkProtocol[methodName](...args) ] }; } }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { NodeCurrencyId, NodeCurrencyIdType, NodeTokenSymbol, NodeTokenSymbolIndex, PAIR_ADDRESSES, SwapRouter, TokenType2, addressToNodeCurrency, isNativeCurrency, nodePrimitiveCurrencyToZenlinkProtocolPrimitivesAssetId, pairAddressToAssets, parseNodePrimitivesCurrency, parseSymbolOrIndexToIndex });