Skip to content

Commit

Permalink
feat(bonsai-core): add operation types, organize abacus-ts (#1421)
Browse files Browse the repository at this point in the history
  • Loading branch information
jaredvu authored Jan 10, 2025
1 parent 31ad327 commit 72343e8
Show file tree
Hide file tree
Showing 19 changed files with 76 additions and 40 deletions.
2 changes: 1 addition & 1 deletion .prettierrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"^./polyfills$",
"^react$",
"<THIRD_PARTY_MODULES>",
"^@/(constants|abi)(.*)$",
"^@/(constants|abi|types)(.*)$",
"^@/(hooks|contexts)(.*)$",
"^@/(styles|icons)(.*)$",
"^@/(components|views|pages|layout)(.*)$",
Expand Down
2 changes: 1 addition & 1 deletion src/abacus-ts/calculators/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { weakMapMemoize } from 'reselect';

import { getTickSizeDecimalsFromPrice } from '@/lib/numbers';

import { AssetInfo, AssetInfos } from '../rawTypes';
import { AssetInfo, AssetInfos } from '../types/rawTypes';

export const parseAssetInfo = weakMapMemoize((assetInfo: AssetInfo, assetId: string) => ({
assetId,
Expand Down
3 changes: 2 additions & 1 deletion src/abacus-ts/calculators/blockRewards.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { IndexerHistoricalBlockTradingReward } from '@/types/indexer/indexerApiGen';
import { keyBy, maxBy } from 'lodash';

import { IndexerHistoricalBlockTradingReward } from '@/types/indexer/indexerApiGen';

import { MustBigNumber } from '@/lib/numbers';

import { Loadable } from '../lib/loadable';
Expand Down
2 changes: 1 addition & 1 deletion src/abacus-ts/calculators/fills.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IndexerCompositeFillObject } from '@/types/indexer/indexerManual';
import { keyBy, maxBy, orderBy } from 'lodash';

import { EMPTY_ARR } from '@/constants/objects';
import { IndexerCompositeFillObject } from '@/types/indexer/indexerManual';

import { MustBigNumber } from '@/lib/numbers';

Expand Down
6 changes: 3 additions & 3 deletions src/abacus-ts/calculators/markets.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { IndexerPerpetualMarketResponseObject } from '@/types/indexer/indexerApiGen';
import BigNumber from 'bignumber.js';
import { mapValues } from 'lodash';
import { weakMapMemoize } from 'reselect';

import { TOKEN_DECIMALS, USD_DECIMALS } from '@/constants/numbers';
import { IndexerPerpetualMarketResponseObject } from '@/types/indexer/indexerApiGen';

import {
getAssetFromMarketId,
Expand All @@ -12,8 +12,8 @@ import {
} from '@/lib/assetUtils';
import { MaybeBigNumber, MustBigNumber } from '@/lib/numbers';

import { MarketsData } from '../rawTypes';
import { MarketInfo, MarketsInfo } from '../summaryTypes';
import { MarketsData } from '../types/rawTypes';
import { MarketInfo, MarketsInfo } from '../types/summaryTypes';

export function calculateAllMarkets(markets: MarketsData | undefined): MarketsInfo | undefined {
if (markets == null) {
Expand Down
8 changes: 4 additions & 4 deletions src/abacus-ts/calculators/orders.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { IndexerBestEffortOpenedStatus, IndexerOrderStatus } from '@/types/indexer/indexerApiGen';
import { IndexerCompositeOrderObject } from '@/types/indexer/indexerManual';
import { HeightResponse } from '@dydxprotocol/v4-client-js';
import { mapValues, maxBy, orderBy } from 'lodash';

import { NUM_PARENT_SUBACCOUNTS } from '@/constants/account';
import { IndexerBestEffortOpenedStatus, IndexerOrderStatus } from '@/types/indexer/indexerApiGen';
import { IndexerCompositeOrderObject } from '@/types/indexer/indexerManual';

import { assertNever } from '@/lib/assertNever';
import { getDisplayableTickerFromMarket } from '@/lib/assetUtils';
import { mapIfPresent } from '@/lib/do';
import { MaybeBigNumber, MustBigNumber } from '@/lib/numbers';

import { mergeObjects } from '../lib/mergeObjects';
import { OrdersData } from '../rawTypes';
import { OrderStatus, SubaccountOrder } from '../summaryTypes';
import { OrdersData } from '../types/rawTypes';
import { OrderStatus, SubaccountOrder } from '../types/summaryTypes';

export function calculateOpenOrders(orders: SubaccountOrder[]) {
return orders.filter(
Expand Down
12 changes: 6 additions & 6 deletions src/abacus-ts/calculators/subaccount.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
import BigNumber from 'bignumber.js';
import { mapValues, orderBy } from 'lodash';

import { NUM_PARENT_SUBACCOUNTS } from '@/constants/account';
import {
IndexerPerpetualMarketResponseObject,
IndexerPerpetualPositionResponseObject,
IndexerPerpetualPositionStatus,
IndexerPositionSide,
} from '@/types/indexer/indexerApiGen';
import BigNumber from 'bignumber.js';
import { mapValues, orderBy } from 'lodash';

import { NUM_PARENT_SUBACCOUNTS } from '@/constants/account';

import { getAssetFromMarketId } from '@/lib/assetUtils';
import { calc } from '@/lib/do';
import { BIG_NUMBERS, MaybeBigNumber, MustBigNumber, ToBigNumber } from '@/lib/numbers';
import { isPresent } from '@/lib/typeUtils';

import { ChildSubaccountData, MarketsData, ParentSubaccountData } from '../rawTypes';
import { ChildSubaccountData, MarketsData, ParentSubaccountData } from '../types/rawTypes';
import {
GroupedSubaccountSummary,
SubaccountPosition,
Expand All @@ -24,7 +24,7 @@ import {
SubaccountSummary,
SubaccountSummaryCore,
SubaccountSummaryDerived,
} from '../summaryTypes';
} from '../types/summaryTypes';
import { getMarketEffectiveInitialMarginForMarket } from './markets';

export function calculateParentSubaccountPositions(
Expand Down
2 changes: 1 addition & 1 deletion src/abacus-ts/calculators/transfers.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IndexerTransferCommonResponseObject } from '@/types/indexer/indexerManual';
import { keyBy, maxBy } from 'lodash';

import { EMPTY_ARR } from '@/constants/objects';
import { IndexerTransferCommonResponseObject } from '@/types/indexer/indexerManual';

import { MustBigNumber } from '@/lib/numbers';

Expand Down
2 changes: 1 addition & 1 deletion src/abacus-ts/rest/funding.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { IndexerHistoricalFundingResponse } from '@/types/indexer/indexerApiGen';
import { useQuery } from '@tanstack/react-query';

import { timeUnits } from '@/constants/time';
import { IndexerHistoricalFundingResponse } from '@/types/indexer/indexerApiGen';

import { useAppSelector } from '@/state/appTypes';
import { getCurrentMarketIdIfTradeable } from '@/state/perpetualsSelectors';
Expand Down
3 changes: 2 additions & 1 deletion src/abacus-ts/rest/orders.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { isParentSubaccountOrders } from '@/types/indexer/indexerChecks';
import { keyBy } from 'lodash';

import { isParentSubaccountOrders } from '@/types/indexer/indexerChecks';

import { type RootStore } from '@/state/_store';
import { setAccountOrdersRaw } from '@/state/raw';

Expand Down
2 changes: 1 addition & 1 deletion src/abacus-ts/selectors/account.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { IndexerPerpetualPositionStatus } from '@/types/indexer/indexerApiGen';
import { pick } from 'lodash';
import { shallowEqual } from 'react-redux';

import { EMPTY_ARR } from '@/constants/objects';
import { IndexerPerpetualPositionStatus } from '@/types/indexer/indexerApiGen';

import { createAppSelector } from '@/state/appTypes';
import { getCurrentMarketId } from '@/state/perpetualsSelectors';
Expand Down
32 changes: 32 additions & 0 deletions src/abacus-ts/types/operationTypes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { ofType, unionize, UnionOf } from 'unionize';

import {
IndexerAssetPositionResponseObject,
IndexerPerpetualPositionResponseObject,
} from '@/types/indexer/indexerApiGen';

export const SubaccountOperations = unionize(
{
AddPerpetualPosition: ofType<{
subaccountNumber: string;
market: string;
position: Omit<IndexerPerpetualPositionResponseObject, 'market' | 'subaccountNumber'>;
}>(),
ModifyPerpetualPosition: ofType<{
subaccountNumber: string;
market: string;
changes: Partial<Omit<IndexerPerpetualPositionResponseObject, 'market' | 'subaccountNumber'>>;
}>(),
ModifyUsdcAssetPosition: ofType<{
subaccountNumber: string;
changes: Partial<Pick<IndexerAssetPositionResponseObject, 'size' | 'side'>>;
}>(),
},
{ tag: 'operation' as const, value: 'payload' as const }
);

export type SubaccountOperation = UnionOf<typeof SubaccountOperations>;

export interface SubaccountBatchedOperations {
operations: SubaccountOperation[];
}
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { MetadataServiceAssetInfo, MetadataServicePrice } from '@/constants/assetMetadata';
import {
IndexerAssetPositionResponseObject,
IndexerHistoricalBlockTradingReward,
Expand All @@ -11,8 +12,6 @@ import {
IndexerTransferCommonResponseObject,
} from '@/types/indexer/indexerManual';

import { MetadataServiceAssetInfo, MetadataServicePrice } from '@/constants/assetMetadata';

import { PartialBy } from '@/lib/typeUtils';

export type MarketsData = { [marketId: string]: IndexerPerpetualMarketResponseObject };
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { type BigNumber } from 'bignumber.js';

import {
IndexerAPITimeInForce,
IndexerOrderSide,
IndexerOrderType,
IndexerPerpetualMarketResponseObject,
IndexerPerpetualPositionResponseObject,
} from '@/types/indexer/indexerApiGen';
import { type BigNumber } from 'bignumber.js';

import { BaseTrade } from './rawTypes';

Expand Down
8 changes: 4 additions & 4 deletions src/abacus-ts/websocket/markets.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { throttle } from 'lodash';

import { timeUnits } from '@/constants/time';
import {
isWsMarketUpdateResponses,
isWsPerpetualMarketResponse,
} from '@/types/indexer/indexerChecks';
import { throttle } from 'lodash';

import { timeUnits } from '@/constants/time';

import { type RootStore } from '@/state/_store';
import { setAllMarketsRaw } from '@/state/raw';

import { createStoreEffect } from '../lib/createStoreEffect';
import { Loadable, loadableLoaded, loadablePending } from '../lib/loadable';
import { logAbacusTsError } from '../logs';
import { MarketsData } from '../rawTypes';
import { selectWebsocketUrl } from '../socketSelectors';
import { MarketsData } from '../types/rawTypes';
import { makeWsValueManager, subscribeToWsValue } from './lib/indexerValueManagerHelpers';
import { IndexerWebsocket } from './lib/indexerWebsocket';
import { WebsocketDerivedValue } from './lib/websocketDerivedValue';
Expand Down
4 changes: 2 additions & 2 deletions src/abacus-ts/websocket/orderbook.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { isWsOrderbookResponse, isWsOrderbookUpdateResponses } from '@/types/indexer/indexerChecks';
import { keyBy, mapValues, throttle } from 'lodash';

import { timeUnits } from '@/constants/time';
import { isWsOrderbookResponse, isWsOrderbookUpdateResponses } from '@/types/indexer/indexerChecks';

import { type RootStore } from '@/state/_store';
import { createAppSelector } from '@/state/appTypes';
Expand All @@ -13,8 +13,8 @@ import { isTruthy } from '@/lib/isTruthy';
import { createStoreEffect } from '../lib/createStoreEffect';
import { Loadable, loadableIdle, loadableLoaded, loadablePending } from '../lib/loadable';
import { logAbacusTsError } from '../logs';
import { OrderbookData } from '../rawTypes';
import { selectWebsocketUrl } from '../socketSelectors';
import { OrderbookData } from '../types/rawTypes';
import { makeWsValueManager, subscribeToWsValue } from './lib/indexerValueManagerHelpers';
import { IndexerWebsocket } from './lib/indexerWebsocket';
import { WebsocketDerivedValue } from './lib/websocketDerivedValue';
Expand Down
7 changes: 4 additions & 3 deletions src/abacus-ts/websocket/parentSubaccount.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import { produce } from 'immer';
import { isEmpty, keyBy } from 'lodash';

import {
IndexerAssetPositionResponseObject,
IndexerOrderResponseObject,
Expand All @@ -9,8 +12,6 @@ import {
isWsParentSubaccountUpdates,
} from '@/types/indexer/indexerChecks';
import { IndexerWsOrderUpdate } from '@/types/indexer/indexerManual';
import { produce } from 'immer';
import { isEmpty, keyBy } from 'lodash';

import { type RootStore } from '@/state/_store';
import { createAppSelector } from '@/state/appTypes';
Expand All @@ -22,8 +23,8 @@ import { MustBigNumber } from '@/lib/numbers';
import { accountRefreshSignal } from '../accountRefreshSignal';
import { createStoreEffect } from '../lib/createStoreEffect';
import { Loadable, loadableIdle, loadableLoaded, loadablePending } from '../lib/loadable';
import { ChildSubaccountData, ParentSubaccountData } from '../rawTypes';
import { selectParentSubaccountInfo, selectWebsocketUrl } from '../socketSelectors';
import { ChildSubaccountData, ParentSubaccountData } from '../types/rawTypes';
import { makeWsValueManager, subscribeToWsValue } from './lib/indexerValueManagerHelpers';
import { IndexerWebsocket } from './lib/indexerWebsocket';
import { WebsocketDerivedValue } from './lib/websocketDerivedValue';
Expand Down
5 changes: 3 additions & 2 deletions src/abacus-ts/websocket/trades.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,17 @@
import { useEffect, useState } from 'react';

import { isWsTradesResponse, isWsTradesUpdateResponses } from '@/types/indexer/indexerChecks';
import { orderBy } from 'lodash';

import { isWsTradesResponse, isWsTradesUpdateResponses } from '@/types/indexer/indexerChecks';

import { useAppSelector } from '@/state/appTypes';
import { getCurrentMarketIdIfTradeable } from '@/state/perpetualsSelectors';

import { mergeById } from '@/lib/mergeById';

import { Loadable, loadableIdle, loadableLoaded, loadablePending } from '../lib/loadable';
import { TradesData } from '../rawTypes';
import { selectWebsocketUrl } from '../socketSelectors';
import { TradesData } from '../types/rawTypes';
import { makeWsValueManager, subscribeToWsValue } from './lib/indexerValueManagerHelpers';
import { IndexerWebsocket } from './lib/indexerWebsocket';
import { WebsocketDerivedValue } from './lib/websocketDerivedValue';
Expand Down
10 changes: 5 additions & 5 deletions src/state/raw.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,16 @@ import {
OrderbookData,
OrdersData,
ParentSubaccountData,
} from '@/abacus-ts/rawTypes';
} from '@/abacus-ts/types/rawTypes';
import { HeightResponse } from '@dydxprotocol/v4-client-js';
import { createSlice, PayloadAction } from '@reduxjs/toolkit';

import { DydxNetwork } from '@/constants/networks';
import {
IndexerHistoricalBlockTradingRewardsResponse,
IndexerParentSubaccountTransferResponse,
} from '@/types/indexer/indexerApiGen';
import { IndexerCompositeFillResponse } from '@/types/indexer/indexerManual';
import { HeightResponse } from '@dydxprotocol/v4-client-js';
import { createSlice, PayloadAction } from '@reduxjs/toolkit';

import { DydxNetwork } from '@/constants/networks';

interface NetworkState {
indexerClientReady: boolean;
Expand Down

0 comments on commit 72343e8

Please sign in to comment.