@reyaxyz/common 0.176.0 → 0.177.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/README.md CHANGED
@@ -6,5 +6,5 @@
6
6
 
7
7
  | Statements | Branches | Functions | Lines |
8
8
  | --------------------------- | ----------------------- | ------------------------- | ----------------- |
9
- | ![Statements](https://img.shields.io/badge/statements-14.22%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-14.2%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-8.75%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-14.74%25-red.svg?style=flat) |
9
+ | ![Statements](https://img.shields.io/badge/statements-14.2%25-red.svg?style=flat) | ![Branches](https://img.shields.io/badge/branches-14.05%25-red.svg?style=flat) | ![Functions](https://img.shields.io/badge/functions-8.75%25-red.svg?style=flat) | ![Lines](https://img.shields.io/badge/lines-14.72%25-red.svg?style=flat) |
10
10
 
@@ -108,6 +108,8 @@ var ExposureCommand = /** @class */ (function () {
108
108
  realized_pnl_latest_snapshot: (0, bignumber_js_1.default)(0),
109
109
  latest_funding_cashflow: (0, bignumber_js_1.default)(0),
110
110
  last_price: (0, bignumber_js_1.default)(0),
111
+ average_entry_price_off_chain_tracker: (0, bignumber_js_1.default)(0),
112
+ funding_value_off_chain_tracker: (0, bignumber_js_1.default)(0),
111
113
  average_entry_price: (0, bignumber_js_1.default)(0),
112
114
  last_timestamp: (0, bignumber_js_1.default)(0),
113
115
  funding_value: (0, bignumber_js_1.default)(0),
@@ -1 +1 @@
1
- {"version":3,"file":"command.js","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\nimport cloneDeep from 'lodash.clonedeep';\nimport {\n AccountAssetBalance,\n CollateralAddressToExchangePriceMap,\n CollateralInfo,\n ExchangeInfo,\n ExposureCommandState,\n MarginInfo,\n MarketConfiguration,\n MarketIdToOraclePriceMap,\n MarketStorage,\n PositionInfo,\n PositionInfoMarketConfiguration,\n RiskMatrix,\n RiskMultipliersConfiguration,\n EditCollateralAction,\n} from './types';\nimport { amountNormalizer } from '../../utils';\n\nexport class ExposureCommand {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n mtmRpnlSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n constructor(\n accountId: number,\n rootCollateralPoolId: number,\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n accountBalancePerAsset: AccountAssetBalance[],\n groupedByCollateral: Record<string, AccountAssetBalance>,\n riskMultipliers: RiskMultipliersConfiguration,\n riskMatrices: RiskMatrix[],\n exchangeInfoPerAsset: ExchangeInfo[],\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n uniqueTokenAddresses: string[],\n uniqueQuoteCollaterals: string[],\n tokenMarginInfoPerAsset: MarginInfo[],\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n mtmRpnlSum: BigNumber,\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap,\n ) {\n this.accountId = accountId;\n this.rootCollateralPoolId = rootCollateralPoolId;\n this.oraclePricePerMarket = oraclePricePerMarket;\n this.accountBalancePerAsset = accountBalancePerAsset;\n this.groupedByCollateral = groupedByCollateral;\n this.riskMultipliers = riskMultipliers;\n this.riskMatrices = riskMatrices;\n this.exchangeInfoPerAsset = exchangeInfoPerAsset;\n this.positionInfoMarketConfiguration = positionInfoMarketConfiguration;\n this.uniqueTokenAddresses = uniqueTokenAddresses;\n this.uniqueQuoteCollaterals = uniqueQuoteCollaterals;\n this.tokenMarginInfoPerAsset = tokenMarginInfoPerAsset;\n this.realizedPnLSum = realizedPnLSum;\n this.unrealizedPnLSum = unrealizedPnLSum;\n this.mtmRpnlSum = mtmRpnlSum;\n this.collateralAddressToExchangePrice = collateralAddressToExchangePrice;\n }\n\n getState(): ExposureCommandState {\n return {\n accountId: this.accountId,\n rootCollateralPoolId: this.rootCollateralPoolId,\n oraclePricePerMarket: this.oraclePricePerMarket,\n accountBalancePerAsset: this.accountBalancePerAsset,\n groupedByCollateral: this.groupedByCollateral,\n riskMultipliers: this.riskMultipliers,\n riskMatrices: this.riskMatrices,\n exchangeInfoPerAsset: this.exchangeInfoPerAsset,\n positionInfoMarketConfiguration: this.positionInfoMarketConfiguration,\n uniqueTokenAddresses: this.uniqueTokenAddresses,\n uniqueQuoteCollaterals: this.uniqueQuoteCollaterals,\n tokenMarginInfoPerAsset: this.tokenMarginInfoPerAsset,\n realizedPnLSum: this.realizedPnLSum,\n unrealizedPnLSum: this.unrealizedPnLSum,\n mtmRpnlSum: this.mtmRpnlSum,\n collateralAddressToExchangePrice: this.collateralAddressToExchangePrice,\n };\n }\n\n get getUsdNodeMarginInfo() {\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n this.uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n this.tokenMarginInfoPerAsset,\n );\n }\n\n get balancePerAsset() {\n return this.tokenMarginInfoPerAsset;\n }\n get exchangePricePerAsset() {\n return this.exchangeInfoPerAsset;\n }\n\n getUsdNodeMarginInfoPostTrade(\n positionAmount: number,\n collateralAddress: string,\n marketConfiguration: MarketConfiguration,\n riskBlockId: number,\n ) {\n // perform deep copy of the object\n const positionInfoMarketConfiguration: PositionInfoMarketConfiguration[] =\n cloneDeep(this.positionInfoMarketConfiguration);\n\n // Check if the market_id already exists in the array\n const existingConfigIndex = positionInfoMarketConfiguration.findIndex(\n (config) =>\n config.market_id ===\n BigNumber(String(marketConfiguration.market_id)).toNumber(),\n );\n\n if (existingConfigIndex !== -1) {\n // If it exists, update the amount\n positionInfoMarketConfiguration[existingConfigIndex].base = BigNumber(\n positionInfoMarketConfiguration[existingConfigIndex].base,\n ).plus(positionAmount);\n } else {\n // If it doesn't exist, add a new element\n positionInfoMarketConfiguration.push({\n base: BigNumber(positionAmount),\n realized_pnl: BigNumber(0),\n realized_pnl_with_mtm: BigNumber(0),\n realized_pnl_latest_snapshot: BigNumber(0),\n latest_funding_cashflow: BigNumber(0),\n last_price: BigNumber(0),\n average_entry_price: BigNumber(0),\n last_timestamp: BigNumber(0),\n funding_value: BigNumber(0),\n base_multiplier: BigNumber(0),\n adl_unwind_price: BigNumber(0),\n market_id: BigNumber(String(marketConfiguration.market_id)).toNumber(),\n market_configuration: marketConfiguration,\n risk_block_id: riskBlockId,\n });\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return {\n usdNodeMarginInfo: ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n ),\n tokenMarginInfoPerAsset: tokenMarginInfoPerAsset,\n };\n }\n\n getEditCollateralActionsToCoverMargin(\n requiredMargin: number,\n ): EditCollateralAction[] {\n /*\n * Note, this function is implicitely making an assumption that required margin can be covered by\n * the account without breaching account IMR\n * */\n const editCollateralActions: EditCollateralAction[] = [];\n let marginToCover = requiredMargin;\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n // todo: p2: consider prioritising rUSD when looping through token infos & document math in comments\n for (const tokenInfo of tokenMarginInfoPerAsset) {\n if (tokenInfo.marginBalance < 0) {\n continue;\n }\n\n // todo: p1: haircut and exchange rate adjustment should not be done for rUSD\n // does exchangeInfo currently return haircut as zero and price as 1?\n // todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl\n\n const exchangeInfo = this.exchangeInfoPerAsset.find((exchangeInfo) => {\n return tokenInfo.assetAddress === exchangeInfo.tokenAddress;\n });\n\n if (!exchangeInfo) {\n throw new Error(\n 'Unable to retrieve exchange info when calculating collaterals needed to cover margin',\n );\n }\n\n const marginBalanceWithHaircutInRUSD =\n ExposureCommand.exchangeWithPriceHaircut(\n tokenInfo.marginBalance,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n\n if (marginBalanceWithHaircutInRUSD > marginToCover) {\n const collateralDelta =\n -ExposureCommand.reverseExchangeWithPriceHaircut(\n marginToCover,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: collateralDelta,\n });\n break;\n } else {\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: -tokenInfo.marginBalance,\n });\n marginToCover = marginToCover - marginBalanceWithHaircutInRUSD;\n }\n }\n return editCollateralActions;\n }\n\n getUsdNodeMarginInfoPostEditCollaterals(\n editCollateralActions: EditCollateralAction[],\n ) {\n // todo: check if there's a way to simplify this function & deprecate the single edit collateral sim below as it's a\n // subset of this function\n\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n\n // counterfactual update deep copy\n\n for (const action of editCollateralActions) {\n if (groupedByCollateral[action.collateralAddress]) {\n groupedByCollateral[action.collateralAddress] = {\n ...groupedByCollateral[action.collateralAddress],\n amount:\n groupedByCollateral[action.collateralAddress].amount +\n action.collateralDelta,\n };\n } else {\n groupedByCollateral[action.collateralAddress] = {\n accountId: this.accountId,\n collateral: action.collateralAddress,\n amount: action.collateralDelta,\n };\n }\n\n uniqueQuoteCollaterals.add(action.collateralAddress);\n\n if (!this.uniqueTokenAddresses.includes(action.collateralAddress)) {\n uniqueTokenAddresses.push(action.collateralAddress);\n }\n }\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n getUsdNodeMarginInfoPostEditCollateral(\n collateralDelta: number,\n collateralAddress: string,\n ) {\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n // counterfactual update deep copy\n if (groupedByCollateral[collateralAddress]) {\n groupedByCollateral[collateralAddress] = {\n ...groupedByCollateral[collateralAddress],\n amount: groupedByCollateral[collateralAddress].amount + collateralDelta,\n };\n } else {\n groupedByCollateral[collateralAddress] = {\n accountId: this.accountId,\n collateral: collateralAddress,\n amount: collateralDelta,\n };\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n static calculateTokenMarginInfoPerAsset(\n groupedByCollateral: Record<string, AccountAssetBalance>,\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n uniqueQuoteCollaterals: Set<string>,\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n ): MarginInfo[] {\n const tokenMarginInfoPerAsset: MarginInfo[] = [];\n\n // todo: p2: investigate the ts-expect-error cases below\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const uniqueQuoteTokens: Lowercase<string>[] = Array.from(\n uniqueQuoteCollaterals,\n );\n\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const tokenUnion: Set<Lowercase<string>> = new Set([\n ...Object.keys(groupedByCollateral),\n ...uniqueQuoteTokens,\n ]); // get unique union of those arrays\n const uniqueTokenAddresses: Lowercase<string>[] = Array.from(tokenUnion);\n\n for (const token of uniqueTokenAddresses) {\n tokenMarginInfoPerAsset.push(\n ExposureCommand.getTokenMarginInfo(\n rootCollateralPoolId,\n riskMatrices,\n riskMultipliers,\n ExposureCommand.getCollateralInfo(\n token,\n uniqueQuoteCollaterals.has(token) ? realizedPnLSum : BigNumber(0),\n uniqueQuoteCollaterals.has(token) ? unrealizedPnLSum : BigNumber(0),\n groupedByCollateral[token]?.amount || 0,\n ),\n token,\n positionInfoMarketConfiguration,\n oraclePricePerMarket,\n uniqueQuoteTokens,\n ),\n );\n }\n\n return tokenMarginInfoPerAsset;\n }\n static calculateLiquidation(\n marginBalance: number,\n liquidationMarginRequirement: number,\n oraclePrice: number,\n positionBase: number,\n ): BigNumber {\n const liquidationPrice = BigNumber(oraclePrice).minus(\n BigNumber(marginBalance)\n .minus(liquidationMarginRequirement)\n .div(positionBase),\n );\n\n return BigNumber.max(0, liquidationPrice);\n }\n\n static calculateImpliedLeverage(\n notionalExposure: number,\n oldIMR: number,\n newIMR: number,\n ): number {\n const changeInImr = BigNumber(newIMR).minus(oldIMR);\n\n if (changeInImr.eq(0)) {\n return 0;\n }\n return BigNumber(notionalExposure).div(changeInImr).toNumber();\n }\n\n static combineMarginInfo(\n parentMarginInfo: MarginInfo,\n sonMarginInfo: MarginInfo,\n sonParentExchangeInfo: ExchangeInfo,\n ): MarginInfo {\n return {\n assetAddress: parentMarginInfo.assetAddress,\n marginBalance: BigNumber(parentMarginInfo.marginBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.marginBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n realBalance: BigNumber(parentMarginInfo.realBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.realBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n initialDelta: BigNumber(parentMarginInfo.initialDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.realBalance,\n sonMarginInfo.initialDelta,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n maintenanceDelta: BigNumber(parentMarginInfo.maintenanceDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.maintenanceDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationDelta: BigNumber(parentMarginInfo.liquidationDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.liquidationDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n dutchDelta: BigNumber(parentMarginInfo.dutchDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.dutchDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n adlDelta: BigNumber(parentMarginInfo.adlDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.adlDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n\n initialBufferDelta: BigNumber(parentMarginInfo.initialBufferDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.initialBufferDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationMarginRequirement: BigNumber(\n parentMarginInfo.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.liquidationMarginRequirement,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n };\n }\n\n static getUsdNodeMarginInfo(\n accountCollateralPoolId: number,\n quoteTokens: string[],\n exchangeInfoPerAsset: ExchangeInfo[],\n marginInfoPerToken: MarginInfo[],\n ) {\n let usdNodeMarginInfo: MarginInfo = {\n assetAddress: '',\n marginBalance: 0,\n realBalance: 0,\n initialDelta: 0,\n maintenanceDelta: 0,\n liquidationDelta: 0,\n dutchDelta: 0,\n adlDelta: 0,\n initialBufferDelta: 0,\n liquidationMarginRequirement: 0,\n };\n for (const quoteToken of quoteTokens) {\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return quoteToken === exchangeInfo.tokenAddress;\n });\n\n const marginInfo = marginInfoPerToken.find((marginInfo) => {\n return quoteToken === marginInfo.assetAddress;\n });\n\n if (!exchangeInfo || !marginInfo) {\n throw Error('Missing exchangeInfo/marginInfo');\n }\n\n usdNodeMarginInfo = ExposureCommand.combineMarginInfo(\n usdNodeMarginInfo,\n marginInfo,\n exchangeInfo,\n );\n }\n\n return usdNodeMarginInfo;\n }\n static getCollateralInfo(\n collateralAddress: string,\n realisedPnl: BigNumber,\n unrealizedPnL: BigNumber,\n netDeposits: number,\n ): CollateralInfo {\n return {\n netDeposits: netDeposits,\n marginBalance: BigNumber(netDeposits)\n .plus(realisedPnl)\n .plus(unrealizedPnL)\n .toNumber(),\n realBalance: BigNumber(netDeposits).plus(realisedPnl).toNumber(),\n };\n }\n\n static getTokenMarginInfo(\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n collateralInfo: CollateralInfo,\n collateralAddress: Lowercase<string>,\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n uniqueQuoteTokens: string[],\n ): MarginInfo {\n const marginRequirements = {\n liquidationMarginRequirement: 0,\n initialMarginRequirement: 0,\n maintenanceMarginRequirement: 0,\n dutchMarginRequirement: 0,\n adlMarginRequirement: 0,\n initialBufferMarginRequirement: 0,\n };\n if (uniqueQuoteTokens.includes(collateralAddress)) {\n // uniqueQuoteTokens is list is active markets tokens\n for (const riskMatrix of riskMatrices) {\n const filledExposures = ExposureCommand.getBlockExposures(\n positions,\n oraclePricePerMarket,\n riskMatrix.risk_block_id,\n );\n\n marginRequirements.liquidationMarginRequirement = BigNumber(\n marginRequirements.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.computeLiquidationMarginRequirement(\n riskMatrix.matrix,\n filledExposures,\n ),\n )\n .toNumber();\n }\n\n // Get the initial margin requirement\n marginRequirements.initialMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the maintenance margin requirement\n marginRequirements.maintenanceMarginRequirement = amountNormalizer(\n String(riskMultipliers.mmr_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the dutch margin requirement\n marginRequirements.dutchMarginRequirement = amountNormalizer(\n String(riskMultipliers.dutch_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the adl margin requirement\n marginRequirements.adlMarginRequirement = amountNormalizer(\n String(riskMultipliers.adl_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the initial buffer margin requirement\n marginRequirements.initialBufferMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_buffer_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n }\n return {\n assetAddress: collateralAddress,\n marginBalance: collateralInfo.marginBalance,\n realBalance: collateralInfo.realBalance,\n initialDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialMarginRequirement)\n .toNumber(),\n maintenanceDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.maintenanceMarginRequirement)\n .toNumber(),\n liquidationDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.liquidationMarginRequirement)\n .toNumber(),\n dutchDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.dutchMarginRequirement)\n .toNumber(),\n adlDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.adlMarginRequirement)\n .toNumber(),\n initialBufferDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialBufferMarginRequirement)\n .toNumber(),\n liquidationMarginRequirement:\n marginRequirements.liquidationMarginRequirement,\n };\n }\n\n static computeLiquidationMarginRequirement(\n matrix: BigNumber[][],\n filledExposures: BigNumber[],\n ): number {\n let lmrFilledSquared = 0;\n\n for (let i = 0; i < filledExposures.length; i++) {\n if (BigNumber(filledExposures[i]).eq(0)) {\n continue;\n }\n for (let j = 0; j < filledExposures.length; j++) {\n const riskParam = matrix[i][j];\n\n if (BigNumber(filledExposures[j]).eq(0) || BigNumber(riskParam).eq(0)) {\n continue;\n }\n\n lmrFilledSquared = BigNumber(lmrFilledSquared)\n .plus(\n BigNumber(filledExposures[i])\n .multipliedBy(filledExposures[j])\n .multipliedBy(riskParam),\n )\n .toNumber();\n }\n }\n return BigNumber(lmrFilledSquared).sqrt().toNumber();\n }\n\n static getBlockExposures(\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n riskBlockId: number,\n ): BigNumber[] {\n const filledExposures: number[] = [];\n let maxIndex = 0; // Keep track of the highest riskMatrixIndex encountered\n\n for (const position of positions) {\n if (riskBlockId !== position.risk_block_id) continue;\n const marketFilledExposure = ExposureCommand.getAccountFilledExposures(\n position,\n position.market_configuration,\n oraclePricePerMarket[position.market_id],\n );\n const index = marketFilledExposure.riskMatrixIndex;\n filledExposures[index] = BigNumber(filledExposures[index] || 0)\n .plus(marketFilledExposure.exposure)\n .toNumber();\n\n if (index > maxIndex) maxIndex = index;\n }\n\n // Ensure filledExposures array is correctly populated up to maxIndex\n for (let i = 0; i <= maxIndex; i++) {\n if (filledExposures[i] === undefined) {\n filledExposures[i] = 0;\n }\n }\n return filledExposures.map((num) => BigNumber(num));\n }\n\n static getAccountFilledExposures(\n position: PositionInfo,\n marketConfiguration: MarketConfiguration,\n oraclePrice: number,\n ) {\n const base = position.base;\n return {\n exposure: BigNumber(oraclePrice).multipliedBy(base),\n riskMatrixIndex: BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber(),\n };\n }\n\n static computePricePnL(\n openBase: BigNumber,\n openPrice: BigNumber,\n exitPrice: BigNumber,\n ) {\n return BigNumber(\n BigNumber(exitPrice).minus(openPrice).multipliedBy(openBase),\n );\n }\n\n static getMarginRatio(marginInfo: MarginInfo) {\n if (marginInfo.liquidationMarginRequirement === 0) {\n return 0;\n }\n\n if (marginInfo.marginBalance <= 0) {\n return 1;\n }\n\n const health = BigNumber(marginInfo.liquidationMarginRequirement).div(\n marginInfo.marginBalance,\n );\n\n if (health.gt(1)) {\n return 1;\n }\n return health.toNumber();\n }\n\n static exchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return haircutPrice.multipliedBy(quantity).toNumber();\n }\n\n static reverseExchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n /*\n * this operation takes quantity in rUSD terms, price between collateral token (e.g. weth) and rusd\n * alongside the haircut between weth and rusd\n * it then returns a quantity in collateral token terms (e.g. weth) which would return quantity if it were to be\n * passed through the exchangeWithPriceHaircut function\n * */\n // todo: p2: consider abstracting haircut price calculation into separate function as duplciated\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return BigNumber(quantity).dividedBy(haircutPrice).toNumber();\n }\n\n static getBalanceWithHaircut(\n exchangeInfoPerAsset: ExchangeInfo[],\n assetAddress: string,\n marginBalance: number,\n ) {\n // todo: p1: haircut and exchange rate adjustment should not be done for rUSD\n // does exchangeInfo currently return haircut as zero and price as 1?\n // todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl\n\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return assetAddress === exchangeInfo.tokenAddress;\n });\n\n if (!exchangeInfo) {\n throw new Error(\n 'Unable to retrieve exchange info when calculating collaterals needed to cover margin',\n );\n }\n\n return ExposureCommand.exchangeWithPriceHaircut(\n marginBalance,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n }\n\n getSlippage(\n deltaBase: number,\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ): number {\n const deltaExposure = BigNumber(\n this.oraclePricePerMarket[marketConfiguration.market_id],\n )\n .times(deltaBase)\n .toNumber();\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n // isPool is true as we only get slippage for the pool\n const { maxExposureShort, maxExposureLong, exposures } =\n this.getMaxExposure(marketConfiguration, marketStorage, true);\n\n const netExposure = exposures[riskMatrixIndex].plus(deltaExposure);\n const maxExposure = netExposure.lt(0) ? maxExposureShort : maxExposureLong;\n\n return BigNumber(netExposure)\n .negated()\n .div(\n BigNumber(maxExposure)\n .times(amountNormalizer(marketConfiguration.depth_factor))\n .plus(netExposure),\n )\n .toNumber();\n }\n\n getMaxExposure(\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n isPool: boolean,\n ) {\n // todo: p2: cosider turning this into a hashmap vs. an array so that O(1) access\n const riskMatrix = this.riskMatrices.find((riskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(String(marketStorage.risk_block_id)).toNumber()\n );\n });\n\n if (!riskMatrix) {\n throw new Error(\"RiskMatrix Doesn't exist\");\n }\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n let imrMultiplier;\n if (isPool) {\n imrMultiplier = 8.01;\n } else {\n imrMultiplier = amountNormalizer(\n String(this.riskMultipliers.im_multiplier),\n ).toNumber();\n }\n\n const marginInfo = this.tokenMarginInfoPerAsset.find((marginInfo) => {\n return marginInfo.assetAddress === marketStorage.quote_collateral;\n });\n\n if (!marginInfo) {\n throw new Error(\"marginInfo doesn't exist\");\n }\n\n const exposures = ExposureCommand.getBlockExposures(\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n BigNumber(String(marketStorage.risk_block_id)).toNumber(),\n );\n\n const { maxExposureShort, maxExposureLong } =\n ExposureCommand.computeMaxExposures(\n riskMatrix.matrix,\n exposures,\n marginInfo.liquidationMarginRequirement,\n marginInfo.marginBalance < 0 ? 0 : marginInfo.marginBalance,\n imrMultiplier,\n riskMatrixIndex,\n );\n\n return {\n maxExposureShort,\n maxExposureLong,\n exposures,\n riskMatrixIndex,\n };\n }\n\n static computeMaxExposures(\n riskMatrix: BigNumber[][],\n exposures: BigNumber[],\n lmr: number,\n balance: number,\n imrMultiplier: number,\n exposureIndex: number,\n ) {\n let b = BigNumber(0);\n\n for (let i = 0; i < exposures.length; i++) {\n b = BigNumber(b).plus(\n BigNumber(exposures[i]).multipliedBy(\n BigNumber(riskMatrix[exposureIndex][i]).plus(\n riskMatrix[i][exposureIndex],\n ),\n ),\n );\n }\n const { x1, x2 } = this.solveQuadraticEquation(\n BigNumber(riskMatrix[exposureIndex][exposureIndex]).toNumber(), // changes here\n b.toNumber(),\n this.computeC(lmr, balance, imrMultiplier),\n );\n\n const maxShortExposure = BigNumber(x1).plus(exposures[exposureIndex]);\n const maxLongExposure = BigNumber(x2).plus(exposures[exposureIndex]);\n\n const availableShortExposure = maxShortExposure.lt(0)\n ? maxShortExposure.negated().toNumber()\n : 0;\n\n const availableLongExposure = maxLongExposure.gt(0)\n ? maxLongExposure.toNumber()\n : 0;\n\n return {\n maxExposureShort: availableShortExposure,\n maxExposureLong: availableLongExposure,\n };\n }\n\n static solveQuadraticEquation(a: number, b: number, c: number) {\n if (BigNumber(a).eq(0)) {\n throw new Error('ZeroQuadraticCoefficient');\n }\n\n const delta = BigNumber(b)\n .multipliedBy(b)\n .minus(BigNumber(4).multipliedBy(a).multipliedBy(c));\n\n if (delta.lt(0)) {\n return {\n x1: BigNumber(0),\n x2: BigNumber(0),\n };\n }\n\n const rootDelta = delta.sqrt();\n\n const x1 = BigNumber(b)\n .multipliedBy(-1)\n .minus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n const x2 = BigNumber(b)\n .multipliedBy(-1)\n .plus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n return {\n x1,\n x2,\n };\n }\n\n static computeC(lmr: number, balance: number, imrMultiplier: number): number {\n const lmrSD = BigNumber(lmr);\n const lmrSquared = lmrSD.multipliedBy(lmrSD);\n\n const balanceSD = BigNumber(balance);\n const balanceSquared = balanceSD.multipliedBy(balanceSD);\n\n const imrMultiplierSD = BigNumber(imrMultiplier);\n const imrMultiplierSquared = imrMultiplierSD.multipliedBy(imrMultiplierSD);\n\n return lmrSquared\n .minus(balanceSquared.div(imrMultiplierSquared))\n .toNumber();\n }\n\n static calculateFee(\n price: number,\n amount: number,\n feeParameter: BigNumber,\n ): number {\n return BigNumber(price).times(amount).times(feeParameter).abs().toNumber();\n }\n\n static calculateEstimatedPrice(price: number, slippage: number): number {\n return BigNumber(price).times(BigNumber(1).plus(slippage)).toNumber();\n }\n\n static MA_HEALTH_DANGER_THRESHOLD = 95;\n static MA_HEALTH_WARNING_THRESHOLD = 80;\n static evaluateHealthStatus(marginRatioPercentage: number) {\n if (marginRatioPercentage >= ExposureCommand.MA_HEALTH_DANGER_THRESHOLD) {\n return 'danger';\n } else if (\n marginRatioPercentage >= ExposureCommand.MA_HEALTH_WARNING_THRESHOLD\n ) {\n return 'warning';\n } else {\n return 'healthy';\n }\n }\n\n static getFundingPeriods(lastFundingTimeStamp: BigNumber) {\n const secondsElapsed = BigNumber(Date.now() / 1000).minus(\n lastFundingTimeStamp,\n );\n const ONE_DAY_IN_SECONDS = 86400;\n return BigNumber(secondsElapsed).div(ONE_DAY_IN_SECONDS);\n }\n\n static getFundingRateDelta(\n fundingPeriods: BigNumber,\n lastFundingVelocity: BigNumber,\n ) {\n return lastFundingVelocity.multipliedBy(fundingPeriods);\n }\n\n static getCurrentFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const fundingPeriods = ExposureCommand.getFundingPeriods(\n last_funding_timestamp,\n );\n const fundingRateDelta = ExposureCommand.getFundingRateDelta(\n fundingPeriods,\n lastFundingVelocity,\n );\n\n return lastFundingRate.plus(fundingRateDelta);\n }\n\n static getCurrentHourlyFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const dailyFundingRate = this.getCurrentFundingRate(\n last_funding_timestamp,\n lastFundingVelocity,\n lastFundingRate,\n );\n return dailyFundingRate.div(24);\n }\n\n convertToUsd(amount: number, tokenAddress: string): number {\n return BigNumber(amount)\n .times(this.collateralAddressToExchangePrice[tokenAddress])\n .toNumber();\n }\n\n getExchangeRate(tokenAddress: string): number {\n return this.collateralAddressToExchangePrice[tokenAddress];\n }\n\n get realisedPnl() {\n return this.realizedPnLSum.toNumber();\n }\n\n get unRealisedPnl() {\n return this.unrealizedPnLSum.toNumber();\n }\n\n get accountTotalBalanceUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPrice =\n this.collateralAddressToExchangePrice[collateralAsset.assetAddress] ||\n 0;\n\n const balanceInUSD = BigNumber(collateralPrice)\n .times(collateralAsset.marginBalance)\n .toNumber();\n accountTotalBalance += balanceInUSD;\n }\n\n return accountTotalBalance;\n }\n\n get accountTotalBalanceWithHaircutUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPriceWithHaircut = ExposureCommand.getBalanceWithHaircut(\n this.exchangeInfoPerAsset,\n collateralAsset.assetAddress,\n collateralAsset.marginBalance,\n );\n\n accountTotalBalance += collateralPriceWithHaircut;\n }\n\n return accountTotalBalance;\n }\n\n getMtmRpnlSum() {\n return this.mtmRpnlSum.toNumber();\n }\n}\n"]}
1
+ {"version":3,"file":"command.js","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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","sourcesContent":["import BigNumber from 'bignumber.js';\nimport cloneDeep from 'lodash.clonedeep';\nimport {\n AccountAssetBalance,\n CollateralAddressToExchangePriceMap,\n CollateralInfo,\n ExchangeInfo,\n ExposureCommandState,\n MarginInfo,\n MarketConfiguration,\n MarketIdToOraclePriceMap,\n MarketStorage,\n PositionInfo,\n PositionInfoMarketConfiguration,\n RiskMatrix,\n RiskMultipliersConfiguration,\n EditCollateralAction,\n} from './types';\nimport { amountNormalizer } from '../../utils';\n\nexport class ExposureCommand {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n mtmRpnlSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n constructor(\n accountId: number,\n rootCollateralPoolId: number,\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n accountBalancePerAsset: AccountAssetBalance[],\n groupedByCollateral: Record<string, AccountAssetBalance>,\n riskMultipliers: RiskMultipliersConfiguration,\n riskMatrices: RiskMatrix[],\n exchangeInfoPerAsset: ExchangeInfo[],\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n uniqueTokenAddresses: string[],\n uniqueQuoteCollaterals: string[],\n tokenMarginInfoPerAsset: MarginInfo[],\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n mtmRpnlSum: BigNumber,\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap,\n ) {\n this.accountId = accountId;\n this.rootCollateralPoolId = rootCollateralPoolId;\n this.oraclePricePerMarket = oraclePricePerMarket;\n this.accountBalancePerAsset = accountBalancePerAsset;\n this.groupedByCollateral = groupedByCollateral;\n this.riskMultipliers = riskMultipliers;\n this.riskMatrices = riskMatrices;\n this.exchangeInfoPerAsset = exchangeInfoPerAsset;\n this.positionInfoMarketConfiguration = positionInfoMarketConfiguration;\n this.uniqueTokenAddresses = uniqueTokenAddresses;\n this.uniqueQuoteCollaterals = uniqueQuoteCollaterals;\n this.tokenMarginInfoPerAsset = tokenMarginInfoPerAsset;\n this.realizedPnLSum = realizedPnLSum;\n this.unrealizedPnLSum = unrealizedPnLSum;\n this.mtmRpnlSum = mtmRpnlSum;\n this.collateralAddressToExchangePrice = collateralAddressToExchangePrice;\n }\n\n getState(): ExposureCommandState {\n return {\n accountId: this.accountId,\n rootCollateralPoolId: this.rootCollateralPoolId,\n oraclePricePerMarket: this.oraclePricePerMarket,\n accountBalancePerAsset: this.accountBalancePerAsset,\n groupedByCollateral: this.groupedByCollateral,\n riskMultipliers: this.riskMultipliers,\n riskMatrices: this.riskMatrices,\n exchangeInfoPerAsset: this.exchangeInfoPerAsset,\n positionInfoMarketConfiguration: this.positionInfoMarketConfiguration,\n uniqueTokenAddresses: this.uniqueTokenAddresses,\n uniqueQuoteCollaterals: this.uniqueQuoteCollaterals,\n tokenMarginInfoPerAsset: this.tokenMarginInfoPerAsset,\n realizedPnLSum: this.realizedPnLSum,\n unrealizedPnLSum: this.unrealizedPnLSum,\n mtmRpnlSum: this.mtmRpnlSum,\n collateralAddressToExchangePrice: this.collateralAddressToExchangePrice,\n };\n }\n\n get getUsdNodeMarginInfo() {\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n this.uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n this.tokenMarginInfoPerAsset,\n );\n }\n\n get balancePerAsset() {\n return this.tokenMarginInfoPerAsset;\n }\n get exchangePricePerAsset() {\n return this.exchangeInfoPerAsset;\n }\n\n getUsdNodeMarginInfoPostTrade(\n positionAmount: number,\n collateralAddress: string,\n marketConfiguration: MarketConfiguration,\n riskBlockId: number,\n ) {\n // perform deep copy of the object\n const positionInfoMarketConfiguration: PositionInfoMarketConfiguration[] =\n cloneDeep(this.positionInfoMarketConfiguration);\n\n // Check if the market_id already exists in the array\n const existingConfigIndex = positionInfoMarketConfiguration.findIndex(\n (config) =>\n config.market_id ===\n BigNumber(String(marketConfiguration.market_id)).toNumber(),\n );\n\n if (existingConfigIndex !== -1) {\n // If it exists, update the amount\n positionInfoMarketConfiguration[existingConfigIndex].base = BigNumber(\n positionInfoMarketConfiguration[existingConfigIndex].base,\n ).plus(positionAmount);\n } else {\n // If it doesn't exist, add a new element\n positionInfoMarketConfiguration.push({\n base: BigNumber(positionAmount),\n realized_pnl: BigNumber(0),\n realized_pnl_with_mtm: BigNumber(0),\n realized_pnl_latest_snapshot: BigNumber(0),\n latest_funding_cashflow: BigNumber(0),\n last_price: BigNumber(0),\n average_entry_price_off_chain_tracker: BigNumber(0),\n funding_value_off_chain_tracker: BigNumber(0),\n average_entry_price: BigNumber(0),\n last_timestamp: BigNumber(0),\n funding_value: BigNumber(0),\n base_multiplier: BigNumber(0),\n adl_unwind_price: BigNumber(0),\n market_id: BigNumber(String(marketConfiguration.market_id)).toNumber(),\n market_configuration: marketConfiguration,\n risk_block_id: riskBlockId,\n });\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n uniqueQuoteCollaterals.add(collateralAddress);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return {\n usdNodeMarginInfo: ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n ),\n tokenMarginInfoPerAsset: tokenMarginInfoPerAsset,\n };\n }\n\n getEditCollateralActionsToCoverMargin(\n requiredMargin: number,\n ): EditCollateralAction[] {\n /*\n * Note, this function is implicitely making an assumption that required margin can be covered by\n * the account without breaching account IMR\n * */\n const editCollateralActions: EditCollateralAction[] = [];\n let marginToCover = requiredMargin;\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n this.groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n // todo: p2: consider prioritising rUSD when looping through token infos & document math in comments\n for (const tokenInfo of tokenMarginInfoPerAsset) {\n if (tokenInfo.marginBalance < 0) {\n continue;\n }\n\n // todo: p1: haircut and exchange rate adjustment should not be done for rUSD\n // does exchangeInfo currently return haircut as zero and price as 1?\n // todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl\n\n const exchangeInfo = this.exchangeInfoPerAsset.find((exchangeInfo) => {\n return tokenInfo.assetAddress === exchangeInfo.tokenAddress;\n });\n\n if (!exchangeInfo) {\n throw new Error(\n 'Unable to retrieve exchange info when calculating collaterals needed to cover margin',\n );\n }\n\n const marginBalanceWithHaircutInRUSD =\n ExposureCommand.exchangeWithPriceHaircut(\n tokenInfo.marginBalance,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n\n if (marginBalanceWithHaircutInRUSD > marginToCover) {\n const collateralDelta =\n -ExposureCommand.reverseExchangeWithPriceHaircut(\n marginToCover,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: collateralDelta,\n });\n break;\n } else {\n editCollateralActions.push({\n collateralAddress: tokenInfo.assetAddress,\n collateralDelta: -tokenInfo.marginBalance,\n });\n marginToCover = marginToCover - marginBalanceWithHaircutInRUSD;\n }\n }\n return editCollateralActions;\n }\n\n getUsdNodeMarginInfoPostEditCollaterals(\n editCollateralActions: EditCollateralAction[],\n ) {\n // todo: check if there's a way to simplify this function & deprecate the single edit collateral sim below as it's a\n // subset of this function\n\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n\n // counterfactual update deep copy\n\n for (const action of editCollateralActions) {\n if (groupedByCollateral[action.collateralAddress]) {\n groupedByCollateral[action.collateralAddress] = {\n ...groupedByCollateral[action.collateralAddress],\n amount:\n groupedByCollateral[action.collateralAddress].amount +\n action.collateralDelta,\n };\n } else {\n groupedByCollateral[action.collateralAddress] = {\n accountId: this.accountId,\n collateral: action.collateralAddress,\n amount: action.collateralDelta,\n };\n }\n\n uniqueQuoteCollaterals.add(action.collateralAddress);\n\n if (!this.uniqueTokenAddresses.includes(action.collateralAddress)) {\n uniqueTokenAddresses.push(action.collateralAddress);\n }\n }\n\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n getUsdNodeMarginInfoPostEditCollateral(\n collateralDelta: number,\n collateralAddress: string,\n ) {\n // perform deep copy of the object\n const groupedByCollateral: Record<string, AccountAssetBalance> = cloneDeep(\n this.groupedByCollateral,\n );\n\n // counterfactual update deep copy\n if (groupedByCollateral[collateralAddress]) {\n groupedByCollateral[collateralAddress] = {\n ...groupedByCollateral[collateralAddress],\n amount: groupedByCollateral[collateralAddress].amount + collateralDelta,\n };\n } else {\n groupedByCollateral[collateralAddress] = {\n accountId: this.accountId,\n collateral: collateralAddress,\n amount: collateralDelta,\n };\n }\n\n const uniqueQuoteCollaterals = new Set(this.uniqueQuoteCollaterals);\n const tokenMarginInfoPerAsset =\n ExposureCommand.calculateTokenMarginInfoPerAsset(\n groupedByCollateral,\n this.rootCollateralPoolId,\n this.riskMatrices,\n this.riskMultipliers,\n uniqueQuoteCollaterals,\n this.realizedPnLSum,\n this.unrealizedPnLSum,\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n );\n\n const uniqueTokenAddresses = [...this.uniqueTokenAddresses];\n if (!this.uniqueTokenAddresses.includes(collateralAddress)) {\n uniqueTokenAddresses.push(collateralAddress);\n }\n\n return ExposureCommand.getUsdNodeMarginInfo(\n this.rootCollateralPoolId,\n uniqueTokenAddresses,\n this.exchangeInfoPerAsset,\n tokenMarginInfoPerAsset,\n );\n }\n\n static calculateTokenMarginInfoPerAsset(\n groupedByCollateral: Record<string, AccountAssetBalance>,\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n uniqueQuoteCollaterals: Set<string>,\n realizedPnLSum: BigNumber,\n unrealizedPnLSum: BigNumber,\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n ): MarginInfo[] {\n const tokenMarginInfoPerAsset: MarginInfo[] = [];\n\n // todo: p2: investigate the ts-expect-error cases below\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const uniqueQuoteTokens: Lowercase<string>[] = Array.from(\n uniqueQuoteCollaterals,\n );\n\n // @ts-expect-error no easy way to make sure string can be casted to Lowercase<string> type\n const tokenUnion: Set<Lowercase<string>> = new Set([\n ...Object.keys(groupedByCollateral),\n ...uniqueQuoteTokens,\n ]); // get unique union of those arrays\n const uniqueTokenAddresses: Lowercase<string>[] = Array.from(tokenUnion);\n\n for (const token of uniqueTokenAddresses) {\n tokenMarginInfoPerAsset.push(\n ExposureCommand.getTokenMarginInfo(\n rootCollateralPoolId,\n riskMatrices,\n riskMultipliers,\n ExposureCommand.getCollateralInfo(\n token,\n uniqueQuoteCollaterals.has(token) ? realizedPnLSum : BigNumber(0),\n uniqueQuoteCollaterals.has(token) ? unrealizedPnLSum : BigNumber(0),\n groupedByCollateral[token]?.amount || 0,\n ),\n token,\n positionInfoMarketConfiguration,\n oraclePricePerMarket,\n uniqueQuoteTokens,\n ),\n );\n }\n\n return tokenMarginInfoPerAsset;\n }\n static calculateLiquidation(\n marginBalance: number,\n liquidationMarginRequirement: number,\n oraclePrice: number,\n positionBase: number,\n ): BigNumber {\n const liquidationPrice = BigNumber(oraclePrice).minus(\n BigNumber(marginBalance)\n .minus(liquidationMarginRequirement)\n .div(positionBase),\n );\n\n return BigNumber.max(0, liquidationPrice);\n }\n\n static calculateImpliedLeverage(\n notionalExposure: number,\n oldIMR: number,\n newIMR: number,\n ): number {\n const changeInImr = BigNumber(newIMR).minus(oldIMR);\n\n if (changeInImr.eq(0)) {\n return 0;\n }\n return BigNumber(notionalExposure).div(changeInImr).toNumber();\n }\n\n static combineMarginInfo(\n parentMarginInfo: MarginInfo,\n sonMarginInfo: MarginInfo,\n sonParentExchangeInfo: ExchangeInfo,\n ): MarginInfo {\n return {\n assetAddress: parentMarginInfo.assetAddress,\n marginBalance: BigNumber(parentMarginInfo.marginBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.marginBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n realBalance: BigNumber(parentMarginInfo.realBalance)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.realBalance,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n initialDelta: BigNumber(parentMarginInfo.initialDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.realBalance,\n sonMarginInfo.initialDelta,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n maintenanceDelta: BigNumber(parentMarginInfo.maintenanceDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.maintenanceDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationDelta: BigNumber(parentMarginInfo.liquidationDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.liquidationDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n dutchDelta: BigNumber(parentMarginInfo.dutchDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.dutchDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n adlDelta: BigNumber(parentMarginInfo.adlDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.adlDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n\n initialBufferDelta: BigNumber(parentMarginInfo.initialBufferDelta)\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n BigNumber.min(\n sonMarginInfo.initialBufferDelta,\n sonMarginInfo.realBalance,\n ).toNumber(),\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n liquidationMarginRequirement: BigNumber(\n parentMarginInfo.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.exchangeWithPriceHaircut(\n sonMarginInfo.liquidationMarginRequirement,\n sonParentExchangeInfo.price,\n sonParentExchangeInfo.priceHaircut,\n ),\n )\n .toNumber(),\n };\n }\n\n static getUsdNodeMarginInfo(\n accountCollateralPoolId: number,\n quoteTokens: string[],\n exchangeInfoPerAsset: ExchangeInfo[],\n marginInfoPerToken: MarginInfo[],\n ) {\n let usdNodeMarginInfo: MarginInfo = {\n assetAddress: '',\n marginBalance: 0,\n realBalance: 0,\n initialDelta: 0,\n maintenanceDelta: 0,\n liquidationDelta: 0,\n dutchDelta: 0,\n adlDelta: 0,\n initialBufferDelta: 0,\n liquidationMarginRequirement: 0,\n };\n for (const quoteToken of quoteTokens) {\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return quoteToken === exchangeInfo.tokenAddress;\n });\n\n const marginInfo = marginInfoPerToken.find((marginInfo) => {\n return quoteToken === marginInfo.assetAddress;\n });\n\n if (!exchangeInfo || !marginInfo) {\n throw Error('Missing exchangeInfo/marginInfo');\n }\n\n usdNodeMarginInfo = ExposureCommand.combineMarginInfo(\n usdNodeMarginInfo,\n marginInfo,\n exchangeInfo,\n );\n }\n\n return usdNodeMarginInfo;\n }\n static getCollateralInfo(\n collateralAddress: string,\n realisedPnl: BigNumber,\n unrealizedPnL: BigNumber,\n netDeposits: number,\n ): CollateralInfo {\n return {\n netDeposits: netDeposits,\n marginBalance: BigNumber(netDeposits)\n .plus(realisedPnl)\n .plus(unrealizedPnL)\n .toNumber(),\n realBalance: BigNumber(netDeposits).plus(realisedPnl).toNumber(),\n };\n }\n\n static getTokenMarginInfo(\n rootCollateralPoolId: number,\n riskMatrices: RiskMatrix[],\n riskMultipliers: RiskMultipliersConfiguration,\n collateralInfo: CollateralInfo,\n collateralAddress: Lowercase<string>,\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n uniqueQuoteTokens: string[],\n ): MarginInfo {\n const marginRequirements = {\n liquidationMarginRequirement: 0,\n initialMarginRequirement: 0,\n maintenanceMarginRequirement: 0,\n dutchMarginRequirement: 0,\n adlMarginRequirement: 0,\n initialBufferMarginRequirement: 0,\n };\n if (uniqueQuoteTokens.includes(collateralAddress)) {\n // uniqueQuoteTokens is list is active markets tokens\n for (const riskMatrix of riskMatrices) {\n const filledExposures = ExposureCommand.getBlockExposures(\n positions,\n oraclePricePerMarket,\n riskMatrix.risk_block_id,\n );\n\n marginRequirements.liquidationMarginRequirement = BigNumber(\n marginRequirements.liquidationMarginRequirement,\n )\n .plus(\n ExposureCommand.computeLiquidationMarginRequirement(\n riskMatrix.matrix,\n filledExposures,\n ),\n )\n .toNumber();\n }\n\n // Get the initial margin requirement\n marginRequirements.initialMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the maintenance margin requirement\n marginRequirements.maintenanceMarginRequirement = amountNormalizer(\n String(riskMultipliers.mmr_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n // Get the dutch margin requirement\n marginRequirements.dutchMarginRequirement = amountNormalizer(\n String(riskMultipliers.dutch_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the adl margin requirement\n marginRequirements.adlMarginRequirement = amountNormalizer(\n String(riskMultipliers.adl_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n\n // Get the initial buffer margin requirement\n marginRequirements.initialBufferMarginRequirement = amountNormalizer(\n String(riskMultipliers.im_buffer_multiplier),\n )\n .multipliedBy(marginRequirements.liquidationMarginRequirement)\n .toNumber();\n }\n return {\n assetAddress: collateralAddress,\n marginBalance: collateralInfo.marginBalance,\n realBalance: collateralInfo.realBalance,\n initialDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialMarginRequirement)\n .toNumber(),\n maintenanceDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.maintenanceMarginRequirement)\n .toNumber(),\n liquidationDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.liquidationMarginRequirement)\n .toNumber(),\n dutchDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.dutchMarginRequirement)\n .toNumber(),\n adlDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.adlMarginRequirement)\n .toNumber(),\n initialBufferDelta: BigNumber(collateralInfo.marginBalance)\n .minus(marginRequirements.initialBufferMarginRequirement)\n .toNumber(),\n liquidationMarginRequirement:\n marginRequirements.liquidationMarginRequirement,\n };\n }\n\n static computeLiquidationMarginRequirement(\n matrix: BigNumber[][],\n filledExposures: BigNumber[],\n ): number {\n let lmrFilledSquared = 0;\n\n for (let i = 0; i < filledExposures.length; i++) {\n if (BigNumber(filledExposures[i]).eq(0)) {\n continue;\n }\n for (let j = 0; j < filledExposures.length; j++) {\n const riskParam = matrix[i][j];\n\n if (BigNumber(filledExposures[j]).eq(0) || BigNumber(riskParam).eq(0)) {\n continue;\n }\n\n lmrFilledSquared = BigNumber(lmrFilledSquared)\n .plus(\n BigNumber(filledExposures[i])\n .multipliedBy(filledExposures[j])\n .multipliedBy(riskParam),\n )\n .toNumber();\n }\n }\n return BigNumber(lmrFilledSquared).sqrt().toNumber();\n }\n\n static getBlockExposures(\n positions: PositionInfoMarketConfiguration[],\n oraclePricePerMarket: MarketIdToOraclePriceMap,\n riskBlockId: number,\n ): BigNumber[] {\n const filledExposures: number[] = [];\n let maxIndex = 0; // Keep track of the highest riskMatrixIndex encountered\n\n for (const position of positions) {\n if (riskBlockId !== position.risk_block_id) continue;\n const marketFilledExposure = ExposureCommand.getAccountFilledExposures(\n position,\n position.market_configuration,\n oraclePricePerMarket[position.market_id],\n );\n const index = marketFilledExposure.riskMatrixIndex;\n filledExposures[index] = BigNumber(filledExposures[index] || 0)\n .plus(marketFilledExposure.exposure)\n .toNumber();\n\n if (index > maxIndex) maxIndex = index;\n }\n\n // Ensure filledExposures array is correctly populated up to maxIndex\n for (let i = 0; i <= maxIndex; i++) {\n if (filledExposures[i] === undefined) {\n filledExposures[i] = 0;\n }\n }\n return filledExposures.map((num) => BigNumber(num));\n }\n\n static getAccountFilledExposures(\n position: PositionInfo,\n marketConfiguration: MarketConfiguration,\n oraclePrice: number,\n ) {\n const base = position.base;\n return {\n exposure: BigNumber(oraclePrice).multipliedBy(base),\n riskMatrixIndex: BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber(),\n };\n }\n\n static computePricePnL(\n openBase: BigNumber,\n openPrice: BigNumber,\n exitPrice: BigNumber,\n ) {\n return BigNumber(\n BigNumber(exitPrice).minus(openPrice).multipliedBy(openBase),\n );\n }\n\n static getMarginRatio(marginInfo: MarginInfo) {\n if (marginInfo.liquidationMarginRequirement === 0) {\n return 0;\n }\n\n if (marginInfo.marginBalance <= 0) {\n return 1;\n }\n\n const health = BigNumber(marginInfo.liquidationMarginRequirement).div(\n marginInfo.marginBalance,\n );\n\n if (health.gt(1)) {\n return 1;\n }\n return health.toNumber();\n }\n\n static exchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return haircutPrice.multipliedBy(quantity).toNumber();\n }\n\n static reverseExchangeWithPriceHaircut(\n quantity: number,\n price: number,\n haircut: number,\n ) {\n /*\n * this operation takes quantity in rUSD terms, price between collateral token (e.g. weth) and rusd\n * alongside the haircut between weth and rusd\n * it then returns a quantity in collateral token terms (e.g. weth) which would return quantity if it were to be\n * passed through the exchangeWithPriceHaircut function\n * */\n // todo: p2: consider abstracting haircut price calculation into separate function as duplciated\n // For positive quantities, the haircut is `quantity * (1 - haircut)`\n // For negative values, the haircut is `quantity / (1 - haircut)` because a negative value means the haircut should be applied from B to A.\n const calHelper = BigNumber(quantity).gt(0)\n ? BigNumber(1).minus(haircut)\n : BigNumber(1).div(BigNumber(1).minus(haircut));\n const haircutPrice = BigNumber(price).multipliedBy(calHelper);\n\n return BigNumber(quantity).dividedBy(haircutPrice).toNumber();\n }\n\n static getBalanceWithHaircut(\n exchangeInfoPerAsset: ExchangeInfo[],\n assetAddress: string,\n marginBalance: number,\n ) {\n // todo: p1: haircut and exchange rate adjustment should not be done for rUSD\n // does exchangeInfo currently return haircut as zero and price as 1?\n // todo: p2: can just look at net deposits rather than margin balance for non-rusd as non pnl\n\n const exchangeInfo = exchangeInfoPerAsset.find((exchangeInfo) => {\n return assetAddress === exchangeInfo.tokenAddress;\n });\n\n if (!exchangeInfo) {\n throw new Error(\n 'Unable to retrieve exchange info when calculating collaterals needed to cover margin',\n );\n }\n\n return ExposureCommand.exchangeWithPriceHaircut(\n marginBalance,\n exchangeInfo.price,\n exchangeInfo.priceHaircut,\n );\n }\n\n getSlippage(\n deltaBase: number,\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n ): number {\n const deltaExposure = BigNumber(\n this.oraclePricePerMarket[marketConfiguration.market_id],\n )\n .times(deltaBase)\n .toNumber();\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n // isPool is true as we only get slippage for the pool\n const { maxExposureShort, maxExposureLong, exposures } =\n this.getMaxExposure(marketConfiguration, marketStorage, true);\n\n const netExposure = exposures[riskMatrixIndex].plus(deltaExposure);\n const maxExposure = netExposure.lt(0) ? maxExposureShort : maxExposureLong;\n\n return BigNumber(netExposure)\n .negated()\n .div(\n BigNumber(maxExposure)\n .times(amountNormalizer(marketConfiguration.depth_factor))\n .plus(netExposure),\n )\n .toNumber();\n }\n\n getMaxExposure(\n marketConfiguration: MarketConfiguration,\n marketStorage: MarketStorage,\n isPool: boolean,\n ) {\n // todo: p2: cosider turning this into a hashmap vs. an array so that O(1) access\n const riskMatrix = this.riskMatrices.find((riskMatrix) => {\n return (\n riskMatrix.risk_block_id ===\n BigNumber(String(marketStorage.risk_block_id)).toNumber()\n );\n });\n\n if (!riskMatrix) {\n throw new Error(\"RiskMatrix Doesn't exist\");\n }\n\n const riskMatrixIndex = BigNumber(\n String(marketConfiguration.risk_matrix_index),\n ).toNumber();\n\n let imrMultiplier;\n if (isPool) {\n imrMultiplier = 8.01;\n } else {\n imrMultiplier = amountNormalizer(\n String(this.riskMultipliers.im_multiplier),\n ).toNumber();\n }\n\n const marginInfo = this.tokenMarginInfoPerAsset.find((marginInfo) => {\n return marginInfo.assetAddress === marketStorage.quote_collateral;\n });\n\n if (!marginInfo) {\n throw new Error(\"marginInfo doesn't exist\");\n }\n\n const exposures = ExposureCommand.getBlockExposures(\n this.positionInfoMarketConfiguration,\n this.oraclePricePerMarket,\n BigNumber(String(marketStorage.risk_block_id)).toNumber(),\n );\n\n const { maxExposureShort, maxExposureLong } =\n ExposureCommand.computeMaxExposures(\n riskMatrix.matrix,\n exposures,\n marginInfo.liquidationMarginRequirement,\n marginInfo.marginBalance < 0 ? 0 : marginInfo.marginBalance,\n imrMultiplier,\n riskMatrixIndex,\n );\n\n return {\n maxExposureShort,\n maxExposureLong,\n exposures,\n riskMatrixIndex,\n };\n }\n\n static computeMaxExposures(\n riskMatrix: BigNumber[][],\n exposures: BigNumber[],\n lmr: number,\n balance: number,\n imrMultiplier: number,\n exposureIndex: number,\n ) {\n let b = BigNumber(0);\n\n for (let i = 0; i < exposures.length; i++) {\n b = BigNumber(b).plus(\n BigNumber(exposures[i]).multipliedBy(\n BigNumber(riskMatrix[exposureIndex][i]).plus(\n riskMatrix[i][exposureIndex],\n ),\n ),\n );\n }\n const { x1, x2 } = this.solveQuadraticEquation(\n BigNumber(riskMatrix[exposureIndex][exposureIndex]).toNumber(), // changes here\n b.toNumber(),\n this.computeC(lmr, balance, imrMultiplier),\n );\n\n const maxShortExposure = BigNumber(x1).plus(exposures[exposureIndex]);\n const maxLongExposure = BigNumber(x2).plus(exposures[exposureIndex]);\n\n const availableShortExposure = maxShortExposure.lt(0)\n ? maxShortExposure.negated().toNumber()\n : 0;\n\n const availableLongExposure = maxLongExposure.gt(0)\n ? maxLongExposure.toNumber()\n : 0;\n\n return {\n maxExposureShort: availableShortExposure,\n maxExposureLong: availableLongExposure,\n };\n }\n\n static solveQuadraticEquation(a: number, b: number, c: number) {\n if (BigNumber(a).eq(0)) {\n throw new Error('ZeroQuadraticCoefficient');\n }\n\n const delta = BigNumber(b)\n .multipliedBy(b)\n .minus(BigNumber(4).multipliedBy(a).multipliedBy(c));\n\n if (delta.lt(0)) {\n return {\n x1: BigNumber(0),\n x2: BigNumber(0),\n };\n }\n\n const rootDelta = delta.sqrt();\n\n const x1 = BigNumber(b)\n .multipliedBy(-1)\n .minus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n const x2 = BigNumber(b)\n .multipliedBy(-1)\n .plus(rootDelta)\n .div(BigNumber(2).multipliedBy(a));\n\n return {\n x1,\n x2,\n };\n }\n\n static computeC(lmr: number, balance: number, imrMultiplier: number): number {\n const lmrSD = BigNumber(lmr);\n const lmrSquared = lmrSD.multipliedBy(lmrSD);\n\n const balanceSD = BigNumber(balance);\n const balanceSquared = balanceSD.multipliedBy(balanceSD);\n\n const imrMultiplierSD = BigNumber(imrMultiplier);\n const imrMultiplierSquared = imrMultiplierSD.multipliedBy(imrMultiplierSD);\n\n return lmrSquared\n .minus(balanceSquared.div(imrMultiplierSquared))\n .toNumber();\n }\n\n static calculateFee(\n price: number,\n amount: number,\n feeParameter: BigNumber,\n ): number {\n return BigNumber(price).times(amount).times(feeParameter).abs().toNumber();\n }\n\n static calculateEstimatedPrice(price: number, slippage: number): number {\n return BigNumber(price).times(BigNumber(1).plus(slippage)).toNumber();\n }\n\n static MA_HEALTH_DANGER_THRESHOLD = 95;\n static MA_HEALTH_WARNING_THRESHOLD = 80;\n static evaluateHealthStatus(marginRatioPercentage: number) {\n if (marginRatioPercentage >= ExposureCommand.MA_HEALTH_DANGER_THRESHOLD) {\n return 'danger';\n } else if (\n marginRatioPercentage >= ExposureCommand.MA_HEALTH_WARNING_THRESHOLD\n ) {\n return 'warning';\n } else {\n return 'healthy';\n }\n }\n\n static getFundingPeriods(lastFundingTimeStamp: BigNumber) {\n const secondsElapsed = BigNumber(Date.now() / 1000).minus(\n lastFundingTimeStamp,\n );\n const ONE_DAY_IN_SECONDS = 86400;\n return BigNumber(secondsElapsed).div(ONE_DAY_IN_SECONDS);\n }\n\n static getFundingRateDelta(\n fundingPeriods: BigNumber,\n lastFundingVelocity: BigNumber,\n ) {\n return lastFundingVelocity.multipliedBy(fundingPeriods);\n }\n\n static getCurrentFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const fundingPeriods = ExposureCommand.getFundingPeriods(\n last_funding_timestamp,\n );\n const fundingRateDelta = ExposureCommand.getFundingRateDelta(\n fundingPeriods,\n lastFundingVelocity,\n );\n\n return lastFundingRate.plus(fundingRateDelta);\n }\n\n static getCurrentHourlyFundingRate(\n last_funding_timestamp: BigNumber,\n lastFundingVelocity: BigNumber,\n lastFundingRate: BigNumber,\n ) {\n const dailyFundingRate = this.getCurrentFundingRate(\n last_funding_timestamp,\n lastFundingVelocity,\n lastFundingRate,\n );\n return dailyFundingRate.div(24);\n }\n\n convertToUsd(amount: number, tokenAddress: string): number {\n return BigNumber(amount)\n .times(this.collateralAddressToExchangePrice[tokenAddress])\n .toNumber();\n }\n\n getExchangeRate(tokenAddress: string): number {\n return this.collateralAddressToExchangePrice[tokenAddress];\n }\n\n get realisedPnl() {\n return this.realizedPnLSum.toNumber();\n }\n\n get unRealisedPnl() {\n return this.unrealizedPnLSum.toNumber();\n }\n\n get accountTotalBalanceUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPrice =\n this.collateralAddressToExchangePrice[collateralAsset.assetAddress] ||\n 0;\n\n const balanceInUSD = BigNumber(collateralPrice)\n .times(collateralAsset.marginBalance)\n .toNumber();\n accountTotalBalance += balanceInUSD;\n }\n\n return accountTotalBalance;\n }\n\n get accountTotalBalanceWithHaircutUsd() {\n let accountTotalBalance = 0;\n\n for (const collateralAsset of this.tokenMarginInfoPerAsset) {\n const collateralPriceWithHaircut = ExposureCommand.getBalanceWithHaircut(\n this.exchangeInfoPerAsset,\n collateralAsset.assetAddress,\n collateralAsset.marginBalance,\n );\n\n accountTotalBalance += collateralPriceWithHaircut;\n }\n\n return accountTotalBalance;\n }\n\n getMtmRpnlSum() {\n return this.mtmRpnlSum.toNumber();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport interface MarketStorage {\n market_id: number;\n quote_collateral: string;\n instrument_address: string;\n name: string;\n risk_block_id: number;\n collateral_pool_id: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface MarketConfiguration {\n market_id: number;\n risk_matrix_index: number;\n max_open_base: number;\n velocity_multiplier: number;\n minimum_order_base: number;\n base_spacing: number;\n price_spacing: number;\n oracle_node_id: string;\n mtm_window: number;\n dutch_config_lambda: number;\n dutch_config_min_base: number;\n slippage_params_phi: number;\n slippage_params_beta: number;\n depth_factor: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport type AccountAssetBalance = {\n accountId: number;\n collateral: string;\n amount: number;\n};\n\nexport interface RiskMultipliersConfiguration {\n collateral_pool_id: number;\n im_multiplier: number;\n mmr_multiplier: number;\n dutch_multiplier: number;\n adl_multiplier: number;\n im_buffer_multiplier: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface RiskMatrix {\n collateral_pool_id: number;\n risk_block_id: number;\n matrix: BigNumber[][];\n}\nexport type MarketIdToOraclePriceMap = {\n [marketId: number]: number;\n};\n\nexport type CollateralAddressToExchangePriceMap = {\n [address: string]: number;\n};\n\nexport interface ExchangeInfo {\n price: number;\n priceHaircut: number;\n autoExchangeDiscount: number;\n tokenAddress: string;\n}\n\nexport interface PositionInfo {\n base: BigNumber;\n realized_pnl: BigNumber;\n realized_pnl_with_mtm: BigNumber;\n realized_pnl_latest_snapshot: BigNumber;\n latest_funding_cashflow: BigNumber;\n last_price: BigNumber;\n average_entry_price: BigNumber;\n last_timestamp: BigNumber;\n funding_value: BigNumber;\n base_multiplier: BigNumber;\n adl_unwind_price: BigNumber;\n market_id: number;\n}\n\nexport type PositionInfoMarketConfiguration = PositionInfo & {\n market_configuration: MarketConfiguration;\n risk_block_id: number;\n};\n\nexport interface MarginInfo {\n assetAddress: Lowercase<string>;\n marginBalance: number;\n realBalance: number;\n initialDelta: number;\n maintenanceDelta: number;\n liquidationDelta: number;\n dutchDelta: number;\n adlDelta: number;\n initialBufferDelta: number;\n liquidationMarginRequirement: number;\n}\n\nexport interface CollateralInfo {\n netDeposits: number;\n marginBalance: number;\n realBalance: number;\n}\n\nexport type ExposureCommandState = {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n mtmRpnlSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n};\n\nexport type TradeSimulationState = {\n feeParameter: BigNumber;\n marketStorage: MarketStorage;\n marketConfiguration: MarketConfiguration;\n exposureDataAccount: ExposureCommandState;\n exposureDataPassivePool: ExposureCommandState;\n};\n\nexport type EditCollateralSimulationState = {\n exposureDataAccount: ExposureCommandState;\n};\n\nexport type EditCollateralAction = {\n collateralDelta: number;\n collateralAddress: Lowercase<string>;\n};\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"","sourcesContent":["import BigNumber from 'bignumber.js';\n\nexport interface MarketStorage {\n market_id: number;\n quote_collateral: string;\n instrument_address: string;\n name: string;\n risk_block_id: number;\n collateral_pool_id: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface MarketConfiguration {\n market_id: number;\n risk_matrix_index: number;\n max_open_base: number;\n velocity_multiplier: number;\n minimum_order_base: number;\n base_spacing: number;\n price_spacing: number;\n oracle_node_id: string;\n mtm_window: number;\n dutch_config_lambda: number;\n dutch_config_min_base: number;\n slippage_params_phi: number;\n slippage_params_beta: number;\n depth_factor: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport type AccountAssetBalance = {\n accountId: number;\n collateral: string;\n amount: number;\n};\n\nexport interface RiskMultipliersConfiguration {\n collateral_pool_id: number;\n im_multiplier: number;\n mmr_multiplier: number;\n dutch_multiplier: number;\n adl_multiplier: number;\n im_buffer_multiplier: number;\n block_timestamp: number;\n block_number: number;\n}\n\nexport interface RiskMatrix {\n collateral_pool_id: number;\n risk_block_id: number;\n matrix: BigNumber[][];\n}\nexport type MarketIdToOraclePriceMap = {\n [marketId: number]: number;\n};\n\nexport type CollateralAddressToExchangePriceMap = {\n [address: string]: number;\n};\n\nexport interface ExchangeInfo {\n price: number;\n priceHaircut: number;\n autoExchangeDiscount: number;\n tokenAddress: string;\n}\n\nexport interface PositionInfo {\n base: BigNumber;\n realized_pnl: BigNumber;\n realized_pnl_with_mtm: BigNumber;\n realized_pnl_latest_snapshot: BigNumber;\n latest_funding_cashflow: BigNumber;\n last_price: BigNumber;\n average_entry_price: BigNumber;\n average_entry_price_off_chain_tracker: BigNumber;\n funding_value_off_chain_tracker: BigNumber;\n last_timestamp: BigNumber;\n funding_value: BigNumber;\n base_multiplier: BigNumber;\n adl_unwind_price: BigNumber;\n market_id: number;\n}\n\nexport type PositionInfoMarketConfiguration = PositionInfo & {\n market_configuration: MarketConfiguration;\n risk_block_id: number;\n};\n\nexport interface MarginInfo {\n assetAddress: Lowercase<string>;\n marginBalance: number;\n realBalance: number;\n initialDelta: number;\n maintenanceDelta: number;\n liquidationDelta: number;\n dutchDelta: number;\n adlDelta: number;\n initialBufferDelta: number;\n liquidationMarginRequirement: number;\n}\n\nexport interface CollateralInfo {\n netDeposits: number;\n marginBalance: number;\n realBalance: number;\n}\n\nexport type ExposureCommandState = {\n accountId: number;\n rootCollateralPoolId: number;\n oraclePricePerMarket: MarketIdToOraclePriceMap;\n accountBalancePerAsset: AccountAssetBalance[];\n groupedByCollateral: Record<string, AccountAssetBalance>;\n riskMultipliers: RiskMultipliersConfiguration;\n riskMatrices: RiskMatrix[];\n exchangeInfoPerAsset: ExchangeInfo[];\n positionInfoMarketConfiguration: PositionInfoMarketConfiguration[];\n uniqueTokenAddresses: string[];\n uniqueQuoteCollaterals: string[];\n tokenMarginInfoPerAsset: MarginInfo[];\n realizedPnLSum: BigNumber;\n unrealizedPnLSum: BigNumber;\n mtmRpnlSum: BigNumber;\n collateralAddressToExchangePrice: CollateralAddressToExchangePriceMap;\n};\n\nexport type TradeSimulationState = {\n feeParameter: BigNumber;\n marketStorage: MarketStorage;\n marketConfiguration: MarketConfiguration;\n exposureDataAccount: ExposureCommandState;\n exposureDataPassivePool: ExposureCommandState;\n};\n\nexport type EditCollateralSimulationState = {\n exposureDataAccount: ExposureCommandState;\n};\n\nexport type EditCollateralAction = {\n collateralDelta: number;\n collateralAddress: Lowercase<string>;\n};\n"]}
@@ -48,7 +48,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
48
48
  };
49
49
  var _a;
50
50
  Object.defineProperty(exports, "__esModule", { value: true });
51
- exports.decodeError = exports.executeTransaction = exports.estimateGasWithoutHardcoding = exports.estimateGasFromTxAndChainId = exports.estimateGas = void 0;
51
+ exports.decodeErrorBytes = exports.executeTransaction = exports.estimateGasWithoutHardcoding = exports.estimateGasFromTxAndChainId = exports.estimateGas = void 0;
52
52
  var ethers_1 = require("ethers");
53
53
  var types_1 = require("../types");
54
54
  var contractAddresses_1 = require("./contractAddresses");
@@ -56,6 +56,7 @@ var Errors_json_1 = require("./abis/Errors.json");
56
56
  var ethers_decode_error_1 = require("ethers-decode-error");
57
57
  var txHelpers_1 = require("./txHelpers");
58
58
  var utils_1 = require("../utils");
59
+ var ethers_2 = require("ethers");
59
60
  var reyaChainIdRPCMapper = (_a = {},
60
61
  _a[types_1.ReyaChainId.reyaNetwork] = 'https://rpc.reya.network',
61
62
  _a[types_1.ReyaChainId.reyaCronos] = 'https://rpc.reya-cronos.gelato.digital',
@@ -267,20 +268,16 @@ var customReasonMapper = function (_a) {
267
268
  function addGasBuffer(estimation) {
268
269
  return (estimation * BigInt(120)) / BigInt(100);
269
270
  }
270
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
271
- function decodeError(returnData) {
271
+ function decodeErrorBytes(returnData) {
272
272
  return __awaiter(this, void 0, void 0, function () {
273
- var decodedError, reason;
273
+ var INTERFACE, decodedError;
274
274
  return __generator(this, function (_a) {
275
- switch (_a.label) {
276
- case 0: return [4 /*yield*/, errorDecoder.decode(returnData)];
277
- case 1:
278
- decodedError = _a.sent();
279
- reason = customReasonMapper(decodedError);
280
- return [2 /*return*/, reason];
281
- }
275
+ INTERFACE = new ethers_2.Interface(Errors_json_1.abi);
276
+ decodedError = INTERFACE.parseError(returnData);
277
+ console.log(decodedError);
278
+ return [2 /*return*/, "".concat(decodedError === null || decodedError === void 0 ? void 0 : decodedError.name, ": ").concat(decodedError === null || decodedError === void 0 ? void 0 : decodedError.args) || 'Error not found'];
282
279
  });
283
280
  });
284
281
  }
285
- exports.decodeError = decodeError;
282
+ exports.decodeErrorBytes = decodeErrorBytes;
286
283
  //# sourceMappingURL=executeTransaction.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeTransaction.js","sourceRoot":"/","sources":["transactions/executeTransaction.ts"],"names":[],"mappings":"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","sourcesContent":["import { ethers, JsonRpcSigner, Signer } from 'ethers';\nimport { MoneyInOutChainId, ReyaChainId } from '../types';\nimport { ContractType, getAddress } from './contractAddresses';\nimport { abi } from './abis/Errors.json';\nimport { ErrorDecoder } from 'ethers-decode-error';\nimport type { DecodedError } from 'ethers-decode-error';\nimport { getGasBuffer } from './txHelpers';\nimport { getPublicRpcUrlsOrThrow } from '../utils';\n\nconst reyaChainIdRPCMapper: { [key: number]: string } = {\n [ReyaChainId.reyaNetwork]: 'https://rpc.reya.network',\n [ReyaChainId.reyaCronos]: 'https://rpc.reya-cronos.gelato.digital',\n};\n\nexport type Transaction = {\n from: string;\n to: string;\n data: string;\n value?: string;\n};\nconst errorDecoder = ErrorDecoder.create([abi]);\n\nexport async function estimateGas(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress, // @todo Update with relayer address\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n const gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const provider = ethers.getDefaultProvider(reyaChainIdRPCMapper[chainId]);\n await provider.call(tx);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\n\nexport async function estimateGasFromTxAndChainId(\n chainId: ReyaChainId | MoneyInOutChainId,\n tx: ethers.TransactionRequest,\n): Promise<bigint> {\n const rpcUrls = getPublicRpcUrlsOrThrow(chainId);\n let lastError = null;\n\n for (const url of rpcUrls) {\n try {\n const provider = new ethers.JsonRpcProvider(url);\n const estimation = await provider.estimateGas(tx);\n return addGasBuffer(estimation);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error('All RPC URLs failed; last error: ' + lastError);\n}\n\nexport async function estimateGasWithoutHardcoding(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress, // @todo Update with relayer address\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n let gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const provider = ethers.getDefaultProvider(reyaChainIdRPCMapper[chainId]);\n const estimation = await provider.estimateGas(tx);\n gasLimit = addGasBuffer(estimation);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\n\nasync function estimateGasExternalChains(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress,\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n let gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const gasEstimate = await signer.estimateGas(tx);\n gasLimit = getGasBuffer(gasEstimate);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating external transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\nexport async function executeTransaction(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n) {\n const txData = await estimateGasExternalChains(\n signer,\n data,\n value,\n chainId,\n targetContract,\n );\n\n try {\n const txResponse = await signer.sendTransaction(txData);\n const txReceipt = await txResponse.wait();\n return txReceipt;\n } catch (error) {\n console.warn(error);\n throw new Error('Transaction Execution Error');\n }\n}\nconst customReasonMapper = ({ name, reason }: DecodedError): string => {\n switch (name) {\n case 'SignatureInvalid':\n return `Invalid signature. Please refresh page and try again`;\n case 'StalePriceDetected':\n return `Price not updated, please try again a bit later`;\n case 'SmallOrderSize':\n return `Order size below minimum`;\n case 'DustyOrderSize':\n return `Order amount is not divisible by trade size spacing`;\n case 'AccountBelowIM':\n return `Account below required margin`;\n default:\n // This handles the non-custom errors\n return reason ?? 'Error executing transaction';\n }\n};\n\nfunction addGasBuffer(estimation: bigint): bigint {\n return (estimation * BigInt(120)) / BigInt(100);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function decodeError(returnData: any): Promise<string> {\n const decodedError = await errorDecoder.decode(returnData);\n const reason = customReasonMapper(decodedError);\n return reason;\n}\n"]}
1
+ {"version":3,"file":"executeTransaction.js","sourceRoot":"/","sources":["transactions/executeTransaction.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iCAAuD;AACvD,kCAA0D;AAC1D,yDAA+D;AAC/D,kDAAyC;AACzC,2DAAmD;AAEnD,yCAA2C;AAC3C,kCAAmD;AACnD,iCAAmC;AAEnC,IAAM,oBAAoB;IACxB,GAAC,mBAAW,CAAC,WAAW,IAAG,0BAA0B;IACrD,GAAC,mBAAW,CAAC,UAAU,IAAG,wCAAwC;OACnE,CAAC;AAQF,IAAM,YAAY,GAAG,kCAAY,CAAC,MAAM,CAAC,CAAC,iBAAG,CAAC,CAAC,CAAC;AAEhD,SAAsB,WAAW,CAC/B,MAA8B,EAC9B,IAAY,EACZ,KAAa,EACb,OAAe,EACf,cAAqC;;;;;wBAQd,qBAAM,MAAM,CAAC,UAAU,EAAE,EAAA;;oBAA1C,cAAc,GAAG,SAAyB;oBAE1C,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAY,CAAC,CAAC,QAAQ,CAC1D,cAA8B,CAC/B;wBACC,CAAC,CAAC,IAAA,8BAAU,EAAC,OAAO,EAAE,cAA8B,CAAC;wBACrD,CAAC,CAAC,cAAc,CAAC;oBACb,EAAE,cACN,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,eAAe,EACnB,IAAI,MAAA,IACD,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACpD,CAAC;oBAEI,QAAQ,GAAW,MAAM,CAAC,SAAS,CAAC,CAAC;;;;oBAGnC,QAAQ,GAAG,eAAM,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC1E,qBAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,EAAA;;oBAAvB,SAAuB,CAAC;;;;oBAEH,qBAAM,YAAY,CAAC,MAAM,CAAC,OAAK,CAAC,EAAA;;oBAA/C,YAAY,GAAG,SAAgC;oBAC/C,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;oBAChD,OAAO,CAAC,KAAK,CACX,uDAAgD,cAAc,qBAAW,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,cAAI,YAAY,cAAI,OAAK,CAAE,CACvH,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;;oBAG1B,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC,QAAQ,CAAC,OAAsB,CAAC,EAAE,CAAC;wBAC1D,oBAAoB,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC3C,YAAY,GAAW,MAAM,CAAC,WAAW,CAAC,CAAC;wBACjD,4CAAY,EAAE,KAAE,QAAQ,UAAA,EAAE,oBAAoB,sBAAA,EAAE,YAAY,cAAA,KAAG;oBACjE,CAAC;oBAED,4CAAY,EAAE,KAAE,QAAQ,UAAA,KAAG;;;;CAC5B;AAhDD,kCAgDC;AAED,SAAsB,2BAA2B,CAC/C,OAAwC,EACxC,EAA6B;;;;;;oBAEvB,OAAO,GAAG,IAAA,+BAAuB,EAAC,OAAO,CAAC,CAAC;oBAC7C,SAAS,GAAG,IAAI,CAAC;0BAEI,EAAP,mBAAO;;;yBAAP,CAAA,qBAAO,CAAA;oBAAd,GAAG;;;;oBAEJ,QAAQ,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;oBAC9B,qBAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA;;oBAA3C,UAAU,GAAG,SAA8B;oBACjD,sBAAO,YAAY,CAAC,UAAU,CAAC,EAAC;;;oBAEhC,SAAS,GAAG,OAAK,CAAC;;;oBANJ,IAAO,CAAA;;wBAUzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,SAAS,CAAC,CAAC;;;;CAClE;AAlBD,kEAkBC;AAED,SAAsB,4BAA4B,CAChD,MAA8B,EAC9B,IAAY,EACZ,KAAa,EACb,OAAe,EACf,cAAqC;;;;;wBAQd,qBAAM,MAAM,CAAC,UAAU,EAAE,EAAA;;oBAA1C,cAAc,GAAG,SAAyB;oBAE1C,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAY,CAAC,CAAC,QAAQ,CAC1D,cAA8B,CAC/B;wBACC,CAAC,CAAC,IAAA,8BAAU,EAAC,OAAO,EAAE,cAA8B,CAAC;wBACrD,CAAC,CAAC,cAAc,CAAC;oBACb,EAAE,cACN,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,eAAe,EACnB,IAAI,MAAA,IACD,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACpD,CAAC;oBAEE,QAAQ,GAAW,MAAM,CAAC,SAAS,CAAC,CAAC;;;;oBAGjC,QAAQ,GAAG,eAAM,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC;oBACvD,qBAAM,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA;;oBAA3C,UAAU,GAAG,SAA8B;oBACjD,QAAQ,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;;;;oBAEf,qBAAM,YAAY,CAAC,MAAM,CAAC,OAAK,CAAC,EAAA;;oBAA/C,YAAY,GAAG,SAAgC;oBAC/C,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;oBAChD,OAAO,CAAC,KAAK,CACX,uDAAgD,cAAc,qBAAW,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,cAAI,YAAY,cAAI,OAAK,CAAE,CACvH,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;;oBAG1B,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC,QAAQ,CAAC,OAAsB,CAAC,EAAE,CAAC;wBAC1D,oBAAoB,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC3C,YAAY,GAAW,MAAM,CAAC,WAAW,CAAC,CAAC;wBACjD,4CAAY,EAAE,KAAE,QAAQ,UAAA,EAAE,oBAAoB,sBAAA,EAAE,YAAY,cAAA,KAAG;oBACjE,CAAC;oBAED,4CAAY,EAAE,KAAE,QAAQ,UAAA,KAAG;;;;CAC5B;AAjDD,oEAiDC;AAED,SAAe,yBAAyB,CACtC,MAA8B,EAC9B,IAAY,EACZ,KAAa,EACb,OAAe,EACf,cAAqC;;;;;wBAQd,qBAAM,MAAM,CAAC,UAAU,EAAE,EAAA;;oBAA1C,cAAc,GAAG,SAAyB;oBAE1C,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAY,CAAC,CAAC,QAAQ,CAC1D,cAA8B,CAC/B;wBACC,CAAC,CAAC,IAAA,8BAAU,EAAC,OAAO,EAAE,cAA8B,CAAC;wBACrD,CAAC,CAAC,cAAc,CAAC;oBACb,EAAE,cACN,IAAI,EAAE,cAAc,EACpB,EAAE,EAAE,eAAe,EACnB,IAAI,MAAA,IACD,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACpD,CAAC;oBAEE,QAAQ,GAAW,MAAM,CAAC,SAAS,CAAC,CAAC;;;;oBAGnB,qBAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,EAAA;;oBAA1C,WAAW,GAAG,SAA4B;oBAChD,QAAQ,GAAG,IAAA,wBAAY,EAAC,WAAW,CAAC,CAAC;;;;oBAEhB,qBAAM,YAAY,CAAC,MAAM,CAAC,OAAK,CAAC,EAAA;;oBAA/C,YAAY,GAAG,SAAgC;oBAC/C,MAAM,GAAG,kBAAkB,CAAC,YAAY,CAAC,CAAC;oBAChD,OAAO,CAAC,KAAK,CACX,gEAAyD,cAAc,qBAAW,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,cAAI,YAAY,cAAI,OAAK,CAAE,CAChI,CAAC;oBACF,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;;oBAG1B,IAAI,MAAM,CAAC,MAAM,CAAC,mBAAW,CAAC,CAAC,QAAQ,CAAC,OAAsB,CAAC,EAAE,CAAC;wBAC1D,oBAAoB,GAAW,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC3C,YAAY,GAAW,MAAM,CAAC,WAAW,CAAC,CAAC;wBACjD,4CAAY,EAAE,KAAE,QAAQ,UAAA,EAAE,oBAAoB,sBAAA,EAAE,YAAY,cAAA,KAAG;oBACjE,CAAC;oBAED,4CAAY,EAAE,KAAE,QAAQ,UAAA,KAAG;;;;CAC5B;AACD,SAAsB,kBAAkB,CACtC,MAA8B,EAC9B,IAAY,EACZ,KAAa,EACb,OAAe,EACf,cAAqC;;;;;wBAEtB,qBAAM,yBAAyB,CAC5C,MAAM,EACN,IAAI,EACJ,KAAK,EACL,OAAO,EACP,cAAc,CACf,EAAA;;oBANK,MAAM,GAAG,SAMd;;;;oBAGoB,qBAAM,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,EAAA;;oBAAjD,UAAU,GAAG,SAAoC;oBACrC,qBAAM,UAAU,CAAC,IAAI,EAAE,EAAA;;oBAAnC,SAAS,GAAG,SAAuB;oBACzC,sBAAO,SAAS,EAAC;;;oBAEjB,OAAO,CAAC,IAAI,CAAC,OAAK,CAAC,CAAC;oBACpB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;;;;;CAElD;AAvBD,gDAuBC;AACD,IAAM,kBAAkB,GAAG,UAAC,EAA8B;QAA5B,IAAI,UAAA,EAAE,MAAM,YAAA;IACxC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,kBAAkB;YACrB,OAAO,sDAAsD,CAAC;QAChE,KAAK,oBAAoB;YACvB,OAAO,iDAAiD,CAAC;QAC3D,KAAK,gBAAgB;YACnB,OAAO,0BAA0B,CAAC;QACpC,KAAK,gBAAgB;YACnB,OAAO,qDAAqD,CAAC;QAC/D,KAAK,gBAAgB;YACnB,OAAO,+BAA+B,CAAC;QACzC;YACE,qCAAqC;YACrC,OAAO,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,6BAA6B,CAAC;IACnD,CAAC;AACH,CAAC,CAAC;AAEF,SAAS,YAAY,CAAC,UAAkB;IACtC,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAClD,CAAC;AAED,SAAsB,gBAAgB,CAAC,UAAkB;;;;YACjD,SAAS,GAAG,IAAI,kBAAS,CAAC,iBAAG,CAAC,CAAC;YAC/B,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,sBAAO,UAAG,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,eAAK,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,IAAI,CAAE,IAAI,iBAAiB,EAAC;;;CAC5E;AALD,4CAKC","sourcesContent":["import { ethers, JsonRpcSigner, Signer } from 'ethers';\nimport { MoneyInOutChainId, ReyaChainId } from '../types';\nimport { ContractType, getAddress } from './contractAddresses';\nimport { abi } from './abis/Errors.json';\nimport { ErrorDecoder } from 'ethers-decode-error';\nimport type { DecodedError } from 'ethers-decode-error';\nimport { getGasBuffer } from './txHelpers';\nimport { getPublicRpcUrlsOrThrow } from '../utils';\nimport { Interface } from 'ethers';\n\nconst reyaChainIdRPCMapper: { [key: number]: string } = {\n [ReyaChainId.reyaNetwork]: 'https://rpc.reya.network',\n [ReyaChainId.reyaCronos]: 'https://rpc.reya-cronos.gelato.digital',\n};\n\nexport type Transaction = {\n from: string;\n to: string;\n data: string;\n value?: string;\n};\nconst errorDecoder = ErrorDecoder.create([abi]);\n\nexport async function estimateGas(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress, // @todo Update with relayer address\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n const gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const provider = ethers.getDefaultProvider(reyaChainIdRPCMapper[chainId]);\n await provider.call(tx);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\n\nexport async function estimateGasFromTxAndChainId(\n chainId: ReyaChainId | MoneyInOutChainId,\n tx: ethers.TransactionRequest,\n): Promise<bigint> {\n const rpcUrls = getPublicRpcUrlsOrThrow(chainId);\n let lastError = null;\n\n for (const url of rpcUrls) {\n try {\n const provider = new ethers.JsonRpcProvider(url);\n const estimation = await provider.estimateGas(tx);\n return addGasBuffer(estimation);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error('All RPC URLs failed; last error: ' + lastError);\n}\n\nexport async function estimateGasWithoutHardcoding(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress, // @todo Update with relayer address\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n let gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const provider = ethers.getDefaultProvider(reyaChainIdRPCMapper[chainId]);\n const estimation = await provider.estimateGas(tx);\n gasLimit = addGasBuffer(estimation);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\n\nasync function estimateGasExternalChains(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n): Promise<\n Transaction & {\n gasLimit: bigint;\n maxPriorityFeePerGas?: bigint;\n maxFeePerGas?: bigint;\n }\n> {\n const accountAddress = await signer.getAddress();\n\n const contractAddress = Object.values(ContractType).includes(\n targetContract as ContractType,\n )\n ? getAddress(chainId, targetContract as ContractType)\n : targetContract;\n const tx = {\n from: accountAddress,\n to: contractAddress,\n data,\n ...(value && value !== '0' ? { value: value } : {}),\n };\n\n let gasLimit: bigint = BigInt('5000000'); // hardcode to 5m gas limit if fails to get estimate\n\n try {\n const gasEstimate = await signer.estimateGas(tx);\n gasLimit = getGasBuffer(gasEstimate);\n } catch (error) {\n const decodedError = await errorDecoder.decode(error);\n const reason = customReasonMapper(decodedError);\n console.error(\n `Error simulating external transaction account address ${accountAddress} reason ${decodedError?.name} ${decodedError} ${error}`,\n );\n throw new Error(reason);\n }\n\n if (Object.values(ReyaChainId).includes(chainId as ReyaChainId)) {\n const maxPriorityFeePerGas: bigint = BigInt('0');\n const maxFeePerGas: bigint = BigInt('100000000');\n return { ...tx, gasLimit, maxPriorityFeePerGas, maxFeePerGas };\n }\n\n return { ...tx, gasLimit };\n}\nexport async function executeTransaction(\n signer: Signer | JsonRpcSigner,\n data: string,\n value: string,\n chainId: number,\n targetContract: ContractType | string,\n) {\n const txData = await estimateGasExternalChains(\n signer,\n data,\n value,\n chainId,\n targetContract,\n );\n\n try {\n const txResponse = await signer.sendTransaction(txData);\n const txReceipt = await txResponse.wait();\n return txReceipt;\n } catch (error) {\n console.warn(error);\n throw new Error('Transaction Execution Error');\n }\n}\nconst customReasonMapper = ({ name, reason }: DecodedError): string => {\n switch (name) {\n case 'SignatureInvalid':\n return `Invalid signature. Please refresh page and try again`;\n case 'StalePriceDetected':\n return `Price not updated, please try again a bit later`;\n case 'SmallOrderSize':\n return `Order size below minimum`;\n case 'DustyOrderSize':\n return `Order amount is not divisible by trade size spacing`;\n case 'AccountBelowIM':\n return `Account below required margin`;\n default:\n // This handles the non-custom errors\n return reason ?? 'Error executing transaction';\n }\n};\n\nfunction addGasBuffer(estimation: bigint): bigint {\n return (estimation * BigInt(120)) / BigInt(100);\n}\n\nexport async function decodeErrorBytes(returnData: string): Promise<string> {\n const INTERFACE = new Interface(abi);\n const decodedError = INTERFACE.parseError(returnData);\n console.log(decodedError);\n return `${decodedError?.name}: ${decodedError?.args}` || 'Error not found';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"/","sources":["commands/exposure/command.ts"],"names":[],"mappings":"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"}
@@ -67,6 +67,8 @@ export interface PositionInfo {
67
67
  latest_funding_cashflow: BigNumber;
68
68
  last_price: BigNumber;
69
69
  average_entry_price: BigNumber;
70
+ average_entry_price_off_chain_tracker: BigNumber;
71
+ funding_value_off_chain_tracker: BigNumber;
70
72
  last_timestamp: BigNumber;
71
73
  funding_value: BigNumber;
72
74
  base_multiplier: BigNumber;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["commands/exposure/types.ts"],"names":[],"mappings":"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"}
@@ -19,5 +19,5 @@ export declare function estimateGasWithoutHardcoding(signer: Signer | JsonRpcSig
19
19
  maxFeePerGas?: bigint;
20
20
  }>;
21
21
  export declare function executeTransaction(signer: Signer | JsonRpcSigner, data: string, value: string, chainId: number, targetContract: ContractType | string): Promise<ethers.TransactionReceipt | null>;
22
- export declare function decodeError(returnData: any): Promise<string>;
22
+ export declare function decodeErrorBytes(returnData: string): Promise<string>;
23
23
  //# sourceMappingURL=executeTransaction.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"executeTransaction.d.ts","sourceRoot":"/","sources":["transactions/executeTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAc,MAAM,qBAAqB,CAAC;AAY/D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,GACpC,OAAO,CACR,WAAW,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CACF,CAoCA;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,WAAW,GAAG,iBAAiB,EACxC,EAAE,EAAE,MAAM,CAAC,kBAAkB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,GACpC,OAAO,CACR,WAAW,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CACF,CAqCA;AAmDD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,6CAkBtC;AAwBD,wBAAsB,WAAW,CAAC,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,CAIlE"}
1
+ {"version":3,"file":"executeTransaction.d.ts","sourceRoot":"/","sources":["transactions/executeTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAc,MAAM,qBAAqB,CAAC;AAa/D,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGF,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,GACpC,OAAO,CACR,WAAW,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CACF,CAoCA;AAED,wBAAsB,2BAA2B,CAC/C,OAAO,EAAE,WAAW,GAAG,iBAAiB,EACxC,EAAE,EAAE,MAAM,CAAC,kBAAkB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAejB;AAED,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,GACpC,OAAO,CACR,WAAW,GAAG;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CACF,CAqCA;AAmDD,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,aAAa,EAC9B,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,YAAY,GAAG,MAAM,6CAkBtC;AAuBD,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reyaxyz/common",
3
- "version": "0.176.0",
3
+ "version": "0.177.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org"
@@ -43,5 +43,5 @@
43
43
  "generate:coverage-badges": "npx istanbul-badges-readme --silent"
44
44
  },
45
45
  "packageManager": "pnpm@8.3.1",
46
- "gitHead": "892ee3db9762b33ff7965db5ea551ddc51fa8948"
46
+ "gitHead": "a3e431a523376725ae3b5837a10dcd59d3859fc6"
47
47
  }
@@ -139,6 +139,8 @@ export class ExposureCommand {
139
139
  realized_pnl_latest_snapshot: BigNumber(0),
140
140
  latest_funding_cashflow: BigNumber(0),
141
141
  last_price: BigNumber(0),
142
+ average_entry_price_off_chain_tracker: BigNumber(0),
143
+ funding_value_off_chain_tracker: BigNumber(0),
142
144
  average_entry_price: BigNumber(0),
143
145
  last_timestamp: BigNumber(0),
144
146
  funding_value: BigNumber(0),
@@ -75,6 +75,8 @@ export interface PositionInfo {
75
75
  latest_funding_cashflow: BigNumber;
76
76
  last_price: BigNumber;
77
77
  average_entry_price: BigNumber;
78
+ average_entry_price_off_chain_tracker: BigNumber;
79
+ funding_value_off_chain_tracker: BigNumber;
78
80
  last_timestamp: BigNumber;
79
81
  funding_value: BigNumber;
80
82
  base_multiplier: BigNumber;
@@ -6,6 +6,7 @@ import { ErrorDecoder } from 'ethers-decode-error';
6
6
  import type { DecodedError } from 'ethers-decode-error';
7
7
  import { getGasBuffer } from './txHelpers';
8
8
  import { getPublicRpcUrlsOrThrow } from '../utils';
9
+ import { Interface } from 'ethers';
9
10
 
10
11
  const reyaChainIdRPCMapper: { [key: number]: string } = {
11
12
  [ReyaChainId.reyaNetwork]: 'https://rpc.reya.network',
@@ -236,9 +237,9 @@ function addGasBuffer(estimation: bigint): bigint {
236
237
  return (estimation * BigInt(120)) / BigInt(100);
237
238
  }
238
239
 
239
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
240
- export async function decodeError(returnData: any): Promise<string> {
241
- const decodedError = await errorDecoder.decode(returnData);
242
- const reason = customReasonMapper(decodedError);
243
- return reason;
240
+ export async function decodeErrorBytes(returnData: string): Promise<string> {
241
+ const INTERFACE = new Interface(abi);
242
+ const decodedError = INTERFACE.parseError(returnData);
243
+ console.log(decodedError);
244
+ return `${decodedError?.name}: ${decodedError?.args}` || 'Error not found';
244
245
  }