@quantara/sdk
Version: 
JavaScript/TypeScript SDK for interacting with Quantara Protocol on Neura Testnet
395 lines (394 loc) • 17.7 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.buildMarketsConfigsRequest = exports.buildMarketsValuesRequest = exports.buildClaimableFundingDataRequest = void 0;
const contracts_1 = require("../../configs/contracts");
const dataStore_1 = require("../../configs/dataStore");
const hash_1 = require("../../utils/hash");
const marketKeysAndConfigs_1 = require("../../utils/marketKeysAndConfigs");
const markets_1 = require("../../utils/markets");
const objects_1 = require("../../utils/objects");
const prebuilt_1 = require("../../prebuilt");
function buildClaimableFundingDataRequest({ marketsAddresses, marketsData, chainId, account, }) {
    if (!marketsAddresses) {
        return {};
    }
    return marketsAddresses.reduce((request, marketAddress) => {
        const market = (0, objects_1.getByKey)(marketsData, marketAddress);
        if (!market) {
            return request;
        }
        const keys = (0, hash_1.hashDataMap)({
            claimableFundingAmountLong: [
                ["bytes32", "address", "address", "address"],
                [dataStore_1.CLAIMABLE_FUNDING_AMOUNT, marketAddress, market.longTokenAddress, account],
            ],
            claimableFundingAmountShort: [
                ["bytes32", "address", "address", "address"],
                [dataStore_1.CLAIMABLE_FUNDING_AMOUNT, marketAddress, market.shortTokenAddress, account],
            ],
        });
        request[marketAddress] = {
            contractAddress: (0, contracts_1.getContract)(chainId, "DataStore"),
            abiId: "DataStore",
            calls: {
                claimableFundingAmountLong: {
                    methodName: "getUint",
                    params: [keys.claimableFundingAmountLong],
                },
                claimableFundingAmountShort: {
                    methodName: "getUint",
                    params: [keys.claimableFundingAmountShort],
                },
            },
        };
        return request;
    }, {});
}
exports.buildClaimableFundingDataRequest = buildClaimableFundingDataRequest;
async function buildMarketsValuesRequest(chainId, { marketsAddresses, marketsData, tokensData, dataStoreAddress, syntheticsReaderAddress, }) {
    const request = {};
    for (const marketAddress of marketsAddresses || []) {
        const market = (0, objects_1.getByKey)(marketsData, marketAddress);
        if (!market) {
            // eslint-disable-next-line no-console
            console.warn(`No market data found for ${marketAddress}, skipping market values request`);
            continue;
        }
        const marketPrices = (0, markets_1.getContractMarketPrices)(tokensData, market);
        if (!marketPrices) {
            // eslint-disable-next-line no-console
            console.warn(`No market prices for ${marketAddress}, skipping market values request`);
            continue;
        }
        const marketProps = {
            marketToken: market.marketTokenAddress,
            indexToken: market.indexTokenAddress,
            longToken: market.longTokenAddress,
            shortToken: market.shortTokenAddress,
        };
        request[`${marketAddress}-reader`] = {
            contractAddress: syntheticsReaderAddress,
            abiId: "SyntheticsReader",
            calls: {
                marketInfo: {
                    methodName: "getMarketInfo",
                    params: [dataStoreAddress, marketPrices, marketAddress],
                },
                marketTokenPriceMax: {
                    methodName: "getMarketTokenPrice",
                    params: [
                        dataStoreAddress,
                        marketProps,
                        marketPrices.indexTokenPrice,
                        marketPrices.longTokenPrice,
                        marketPrices.shortTokenPrice,
                        dataStore_1.MAX_PNL_FACTOR_FOR_TRADERS_KEY,
                        true,
                    ],
                },
                marketTokenPriceMin: {
                    methodName: "getMarketTokenPrice",
                    params: [
                        dataStoreAddress,
                        marketProps,
                        marketPrices.indexTokenPrice,
                        marketPrices.longTokenPrice,
                        marketPrices.shortTokenPrice,
                        dataStore_1.MAX_PNL_FACTOR_FOR_TRADERS_KEY,
                        false,
                    ],
                },
            },
        };
        let prebuiltHashedKeys = prebuilt_1.HASHED_MARKET_VALUES_KEYS[chainId]?.[marketAddress];
        if (!prebuiltHashedKeys) {
            // eslint-disable-next-line no-console
            console.warn(`No pre-built hashed market keys found for the market ${marketAddress}. Run \`yarn prebuild\` to generate them.`);
            if (!marketsData?.[marketAddress]) {
                throw new Error(`No market data found for the market ${marketAddress}`);
            }
            prebuiltHashedKeys = (0, marketKeysAndConfigs_1.hashMarketValuesKeys)(marketsData[marketAddress]);
        }
        const keys = {
            ...prebuiltHashedKeys,
        };
        request[`${marketAddress}-dataStore`] = {
            contractAddress: dataStoreAddress,
            abiId: "DataStore",
            calls: {
                longPoolAmount: {
                    methodName: "getUint",
                    params: [keys.longPoolAmount],
                },
                shortPoolAmount: {
                    methodName: "getUint",
                    params: [keys.shortPoolAmount],
                },
                positionImpactPoolAmount: {
                    methodName: "getUint",
                    params: [keys.positionImpactPoolAmount],
                },
                swapImpactPoolAmountLong: {
                    methodName: "getUint",
                    params: [keys.swapImpactPoolAmountLong],
                },
                swapImpactPoolAmountShort: {
                    methodName: "getUint",
                    params: [keys.swapImpactPoolAmountShort],
                },
                longInterestUsingLongToken: {
                    methodName: "getUint",
                    params: [keys.longInterestUsingLongToken],
                },
                longInterestUsingShortToken: {
                    methodName: "getUint",
                    params: [keys.longInterestUsingShortToken],
                },
                shortInterestUsingLongToken: {
                    methodName: "getUint",
                    params: [keys.shortInterestUsingLongToken],
                },
                shortInterestUsingShortToken: {
                    methodName: "getUint",
                    params: [keys.shortInterestUsingShortToken],
                },
                longInterestInTokensUsingLongToken: {
                    methodName: "getUint",
                    params: [keys.longInterestInTokensUsingLongToken],
                },
                longInterestInTokensUsingShortToken: {
                    methodName: "getUint",
                    params: [keys.longInterestInTokensUsingShortToken],
                },
                shortInterestInTokensUsingLongToken: {
                    methodName: "getUint",
                    params: [keys.shortInterestInTokensUsingLongToken],
                },
                shortInterestInTokensUsingShortToken: {
                    methodName: "getUint",
                    params: [keys.shortInterestInTokensUsingShortToken],
                },
            },
        };
    }
    return request;
}
exports.buildMarketsValuesRequest = buildMarketsValuesRequest;
async function buildMarketsConfigsRequest(chainId, { marketsData, marketsAddresses, dataStoreAddress, }) {
    const request = {};
    for (const marketAddress of marketsAddresses || []) {
        let prebuiltHashedKeys = prebuilt_1.HASHED_MARKET_CONFIG_KEYS[chainId]?.[marketAddress];
        if (!prebuiltHashedKeys) {
            // eslint-disable-next-line no-console
            console.warn(`No pre-built hashed config keys found for the market ${marketAddress}. Run \`yarn prebuild\` to generate them.`);
            if (!marketsData?.[marketAddress]) {
                throw new Error(`No market data found for the market ${marketAddress}`);
            }
            prebuiltHashedKeys = (0, marketKeysAndConfigs_1.hashMarketConfigKeys)(marketsData[marketAddress]);
        }
        request[`${marketAddress}-dataStore`] = {
            contractAddress: dataStoreAddress,
            abiId: "DataStore",
            calls: {
                isDisabled: {
                    methodName: "getBool",
                    params: [prebuiltHashedKeys.isDisabled],
                },
                maxLongPoolAmount: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxLongPoolAmount],
                },
                maxShortPoolAmount: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxShortPoolAmount],
                },
                maxLongPoolUsdForDeposit: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxLongPoolUsdForDeposit],
                },
                maxShortPoolUsdForDeposit: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxShortPoolUsdForDeposit],
                },
                longPoolAmountAdjustment: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.longPoolAmountAdjustment],
                },
                shortPoolAmountAdjustment: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.shortPoolAmountAdjustment],
                },
                reserveFactorLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.reserveFactorLong],
                },
                reserveFactorShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.reserveFactorShort],
                },
                openInterestReserveFactorLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.openInterestReserveFactorLong],
                },
                openInterestReserveFactorShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.openInterestReserveFactorShort],
                },
                maxOpenInterestLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxOpenInterestLong],
                },
                maxOpenInterestShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxOpenInterestShort],
                },
                minPositionImpactPoolAmount: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.minPositionImpactPoolAmount],
                },
                positionImpactPoolDistributionRate: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionImpactPoolDistributionRate],
                },
                borrowingFactorLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.borrowingFactorLong],
                },
                borrowingFactorShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.borrowingFactorShort],
                },
                borrowingExponentFactorLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.borrowingExponentFactorLong],
                },
                borrowingExponentFactorShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.borrowingExponentFactorShort],
                },
                fundingFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.fundingFactor],
                },
                fundingExponentFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.fundingExponentFactor],
                },
                fundingIncreaseFactorPerSecond: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.fundingIncreaseFactorPerSecond],
                },
                fundingDecreaseFactorPerSecond: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.fundingDecreaseFactorPerSecond],
                },
                thresholdForStableFunding: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.thresholdForStableFunding],
                },
                thresholdForDecreaseFunding: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.thresholdForDecreaseFunding],
                },
                minFundingFactorPerSecond: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.minFundingFactorPerSecond],
                },
                maxFundingFactorPerSecond: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxFundingFactorPerSecond],
                },
                maxPnlFactorForTradersLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxPnlFactorForTradersLong],
                },
                maxPnlFactorForTradersShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxPnlFactorForTradersShort],
                },
                positionFeeFactorForPositiveImpact: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionFeeFactorForPositiveImpact],
                },
                positionFeeFactorForNegativeImpact: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionFeeFactorForNegativeImpact],
                },
                positionImpactFactorPositive: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionImpactFactorPositive],
                },
                positionImpactFactorNegative: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionImpactFactorNegative],
                },
                maxPositionImpactFactorPositive: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxPositionImpactFactorPositive],
                },
                maxPositionImpactFactorNegative: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxPositionImpactFactorNegative],
                },
                maxPositionImpactFactorForLiquidations: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.maxPositionImpactFactorForLiquidations],
                },
                minCollateralFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.minCollateralFactor],
                },
                minCollateralFactorForOpenInterestLong: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.minCollateralFactorForOpenInterestLong],
                },
                minCollateralFactorForOpenInterestShort: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.minCollateralFactorForOpenInterestShort],
                },
                positionImpactExponentFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.positionImpactExponentFactor],
                },
                swapFeeFactorForPositiveImpact: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.swapFeeFactorForPositiveImpact],
                },
                swapFeeFactorForNegativeImpact: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.swapFeeFactorForNegativeImpact],
                },
                atomicSwapFeeFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.atomicSwapFeeFactor],
                },
                swapImpactFactorPositive: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.swapImpactFactorPositive],
                },
                swapImpactFactorNegative: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.swapImpactFactorNegative],
                },
                swapImpactExponentFactor: {
                    methodName: "getUint",
                    params: [prebuiltHashedKeys.swapImpactExponentFactor],
                },
                virtualMarketId: {
                    methodName: "getBytes32",
                    params: [prebuiltHashedKeys.virtualMarketId],
                },
                virtualShortTokenId: {
                    methodName: "getBytes32",
                    params: [prebuiltHashedKeys.virtualShortTokenId],
                },
                virtualLongTokenId: {
                    methodName: "getBytes32",
                    params: [prebuiltHashedKeys.virtualLongTokenId],
                },
            },
        };
    }
    return request;
}
exports.buildMarketsConfigsRequest = buildMarketsConfigsRequest;