UNPKG

@atomiqlabs/sdk

Version:

atomiq labs SDK for cross-chain swaps between smart chains and bitcoin

93 lines (92 loc) 4.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SwapperFactory = void 0; const base_1 = require("@atomiqlabs/base"); const sdk_lib_1 = require("@atomiqlabs/sdk-lib"); const SmartChainAssets_1 = require("./SmartChainAssets"); const LocalStorageManager_1 = require("./storage/LocalStorageManager"); class SwapperFactory { constructor(initializers) { this.initializers = initializers; this.Tokens = { BITCOIN: sdk_lib_1.BitcoinTokens }; this.TokenResolver = {}; this.initializers = initializers; initializers.forEach(initializer => { const addressMap = {}; this.Tokens[initializer.chainId] = {}; for (let ticker in initializer.tokens) { const assetData = initializer.tokens[ticker]; this.Tokens[initializer.chainId][ticker] = addressMap[assetData.address] = { chain: "SC", chainId: initializer.chainId, address: assetData.address, name: SmartChainAssets_1.SmartChainAssets[ticker].name, decimals: assetData.decimals, displayDecimals: assetData.displayDecimals, ticker }; } this.TokenResolver[initializer.chainId] = { getToken: (address) => addressMap[address] }; }); } newSwapper(options) { options.bitcoinNetwork ?? (options.bitcoinNetwork = base_1.BitcoinNetwork.MAINNET); options.storagePrefix ?? (options.storagePrefix = "atomiqsdk-" + options.bitcoinNetwork + "-"); options.defaultTrustedIntermediaryUrl ?? (options.defaultTrustedIntermediaryUrl = options.bitcoinNetwork === base_1.BitcoinNetwork.MAINNET ? "https://node3.gethopa.com:34100" : "https://node3.gethopa.com:24100"); options.registryUrl ?? (options.registryUrl = options.bitcoinNetwork === base_1.BitcoinNetwork.MAINNET ? "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry-mainnet.json?ref=main" : "https://api.github.com/repos/adambor/SolLightning-registry/contents/registry.json?ref=main"); const mempoolApi = options.mempoolApi ?? new sdk_lib_1.MempoolApi(options.bitcoinNetwork === base_1.BitcoinNetwork.TESTNET ? [ "https://mempool.space/testnet/api/", "https://mempool.fra.mempool.space/testnet/api/", "https://mempool.va1.mempool.space/testnet/api/", "https://mempool.tk7.mempool.space/testnet/api/" ] : [ "https://mempool.space/api/", "https://mempool.fra.mempool.space/api/", "https://mempool.va1.mempool.space/api/", "https://mempool.tk7.mempool.space/api/" ]); const bitcoinRpc = new sdk_lib_1.MempoolBitcoinRpc(mempoolApi); const pricingAssets = []; Object.keys(SmartChainAssets_1.SmartChainAssets).forEach((ticker) => { const chains = {}; for (let { tokens, chainId } of this.initializers) { if (tokens[ticker] != null) chains[chainId] = tokens[ticker]; } const assetData = SmartChainAssets_1.SmartChainAssets[ticker]; pricingAssets.push({ ...assetData.pricing, chains, ticker, name: assetData.name }); }); options.chainStorageCtor ?? (options.chainStorageCtor = (name) => new LocalStorageManager_1.LocalStorageManager(name)); const chains = {}; for (let { initializer, chainId } of this.initializers) { if (options.chains[chainId] == null) continue; chains[chainId] = initializer(options.chains[chainId], bitcoinRpc, options.bitcoinNetwork, options.chainStorageCtor); } const swapPricing = options.getPriceFn != null ? new sdk_lib_1.SingleSwapPrice(options.pricingFeeDifferencePPM ?? 10000n, new sdk_lib_1.CustomPriceProvider(pricingAssets.map(val => { return { coinId: val.ticker, chains: val.chains }; }), options.getPriceFn)) : sdk_lib_1.RedundantSwapPrice.createFromTokenMap(options.pricingFeeDifferencePPM ?? 10000n, pricingAssets); return new sdk_lib_1.Swapper(bitcoinRpc, chains, swapPricing, pricingAssets, options); } } exports.SwapperFactory = SwapperFactory;