Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions sdk/src/dlob/DLOB.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
} from '../constants/numericConstants';
import { decodeName } from '../userName';
import { DLOBNode, DLOBNodeType } from './DLOBNode';
import { DriftClient } from '../driftClient';
import { IDriftClient } from '../driftClient/types';
import {
getLimitPrice,
isOrderExpired,
Expand Down Expand Up @@ -1561,7 +1561,7 @@ export class DLOB implements IDLOB {
}

public printTop(
driftClient: DriftClient,
driftClient: IDriftClient,
slotSubscriber: SlotSubscriber,
marketIndex: number,
marketType: MarketType
Expand Down
2 changes: 1 addition & 1 deletion sdk/src/driftClient/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ import { PollingDriftClientAccountSubscriber } from '../accounts/driftClientAcco
import { WebSocketDriftClientAccountSubscriber } from '../accounts/driftClientAccount/webSocketDriftClientAccountSubscriber';
import { RetryTxSender } from '../tx/retryTxSender';
import { User } from '../user';
import { UserSubscriptionConfig } from '../userConfig';
import { UserSubscriptionConfig } from '../user/types';
import {
configs,
DRIFT_ORACLE_RECEIVER_ID,
Expand Down
14 changes: 7 additions & 7 deletions sdk/src/driftClient/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ import {
} from '../accounts/types';
import { TxSender, TxSigAndSlot } from '../tx/types';
import { OraclePriceData } from '../oracles/types';
import { User } from '../user';
import { UserSubscriptionConfig } from '../userConfig';
import { UserSubscriptionConfig } from '../user/types';
import { DriftEnv } from '../config/types';
import { IUserStats } from '../userStats/types';
import { UserStatsSubscriptionConfig } from '../userStatsConfig';
Expand All @@ -74,6 +73,7 @@ import {
SwapMode,
} from '../jupiter/jupiterClient';
import { TxHandler } from '../tx/txHandler';
import { IUser } from '../user/types';

type RemainingAccountParams = {
userAccounts: UserAccount[];
Expand All @@ -93,7 +93,7 @@ export interface IDriftClient {
env: DriftEnv;
opts?: ConfirmOptions;
useHotWalletAdmin?: boolean;
users: Map<string, User>;
users: Map<string, IUser>;
userStats?: IUserStats;
activeSubAccountId: number;
userAccountSubscriptionConfig: UserSubscriptionConfig;
Expand Down Expand Up @@ -139,7 +139,7 @@ export interface IDriftClient {
subAccountId: number,
accountSubscriptionConfig: UserSubscriptionConfig,
authority?: PublicKey
): User;
): IUser;
subscribe(): Promise<boolean>;
subscribeUsers(): Promise<boolean>[];

Expand Down Expand Up @@ -427,9 +427,9 @@ export interface IDriftClient {
getReclaimRentIx(
userAccountPublicKey: PublicKey
): Promise<TransactionInstruction>;
getUser(subAccountId?: number, authority?: PublicKey): User;
getUser(subAccountId?: number, authority?: PublicKey): IUser;
hasUser(subAccountId?: number, authority?: PublicKey): boolean;
getUsers(): User[];
getUsers(): IUser[];
getUserStats(): IUserStats;
fetchReferrerNameAccount(
name: string
Expand Down Expand Up @@ -2018,7 +2018,7 @@ export interface IDriftClient {
getMarketFees(
marketType: MarketType,
marketIndex?: number,
user?: User,
user?: IUser,
enteringHighLeverageMode?: boolean
): { takerFee: number; makerFee: number };

Expand Down
2 changes: 1 addition & 1 deletion sdk/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ export * from './adminClient';
export * from './assert/assert';
export * from './testClient';
export * from './user';
export * from './userConfig';
export * from './user/types';
export * from './userStats';
export * from './userName';
export * from './userStatsConfig';
Expand Down
10 changes: 5 additions & 5 deletions sdk/src/math/margin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ import { BN } from '@coral-xyz/anchor';
import { OraclePriceData } from '../oracles/types';
import { calculateMarketMarginRatio } from './market';
import { calculateScaledInitialAssetWeight } from './spotBalance';
import { DriftClient } from '../driftClient';
import { OneShotUserAccountSubscriber } from '../accounts/userAccount/oneShotUserAccountSubscriber';
import {
PerpMarketAccount,
Expand All @@ -27,6 +26,7 @@ import { PublicKey } from '@solana/web3.js';
import { User } from '../user';
import { isVariant } from '../types';
import { assert } from '../assert/assert';
import { IDriftClient } from '../driftClient/types';

export function calculateSizePremiumLiabilityWeight(
size: BN, // AMM_RESERVE_PRECISION
Expand Down Expand Up @@ -216,7 +216,7 @@ export function calculatePerpLiabilityValue(
* @returns
*/
export function calculateMarginUSDCRequiredForTrade(
driftClient: DriftClient,
driftClient: IDriftClient,
targetMarketIndex: number,
baseSize: BN,
userMaxMarginRatio?: number,
Expand Down Expand Up @@ -256,7 +256,7 @@ export function calculateMarginUSDCRequiredForTrade(
* Returns collateral required in the precision of the target collateral market.
*/
export function calculateCollateralDepositRequiredForTrade(
driftClient: DriftClient,
driftClient: IDriftClient,
targetMarketIndex: number,
baseSize: BN,
collateralIndex: number,
Expand Down Expand Up @@ -298,7 +298,7 @@ export function calculateCollateralDepositRequiredForTrade(
}

export function calculateCollateralValueOfDeposit(
driftClient: DriftClient,
driftClient: IDriftClient,
collateralIndex: number,
baseSize: BN
): BN {
Expand Down Expand Up @@ -345,7 +345,7 @@ export function calculateLiquidationPrice(
}

export function calculateUserMaxPerpOrderSize(
driftClient: DriftClient,
driftClient: IDriftClient,
userAccountKey: PublicKey,
userAccount: UserAccount,
targetMarketIndex: number,
Expand Down
8 changes: 4 additions & 4 deletions sdk/src/math/orders.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { User } from '../user';
import {
isOneOfVariant,
isVariant,
Expand All @@ -22,8 +21,9 @@ import {
calculateUpdatedAMM,
} from './amm';
import { standardizeBaseAssetAmount } from './utils';
import { IUser } from '../user/types';

export function isOrderRiskIncreasing(user: User, order: Order): boolean {
export function isOrderRiskIncreasing(user: IUser, order: Order): boolean {
if (!isVariant(order.status, 'open')) {
return false;
}
Expand Down Expand Up @@ -62,7 +62,7 @@ export function isOrderRiskIncreasing(user: User, order: Order): boolean {
}

export function isOrderRiskIncreasingInSameDirection(
user: User,
user: IUser,
order: Order
): boolean {
if (!isVariant(order.status, 'open')) {
Expand Down Expand Up @@ -94,7 +94,7 @@ export function isOrderRiskIncreasingInSameDirection(
return false;
}

export function isOrderReduceOnly(user: User, order: Order): boolean {
export function isOrderReduceOnly(user: IUser, order: Order): boolean {
if (!isVariant(order.status, 'open')) {
return false;
}
Expand Down
12 changes: 9 additions & 3 deletions sdk/src/user/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { PublicKey } from '@solana/web3.js';
import { EventEmitter } from 'events';
import StrictEventEmitter from 'strict-event-emitter-types';
import { DriftClient } from '../driftClient';
import {
HealthComponent,
HealthComponents,
Expand Down Expand Up @@ -93,7 +92,7 @@ import {
calculateWorstCaseBaseAssetAmount,
} from '../math/margin';
import { OraclePriceData } from '../oracles/types';
import { UserConfig } from '../userConfig';
import { UserSubscriptionConfig } from './types';
import { PollingUserAccountSubscriber } from '../accounts/userAccount/pollingUserAccountSubscriber';
import { WebSocketUserAccountSubscriber } from '../accounts/userAccount/webSocketUserAccountSubscriber';
import {
Expand All @@ -115,9 +114,16 @@ import { calculateSpotFuelBonus, calculatePerpFuelBonus } from '../math/fuel';
import { grpcUserAccountSubscriber } from '../accounts/userAccount/grpcUserAccountSubscriber';
import { IUserStats } from '../userStats/types';
import { IUser } from './types';
import { IDriftClient } from '../driftClient/types';

export type UserConfig = {
accountSubscription?: UserSubscriptionConfig;
driftClient: IDriftClient;
userAccountPublicKey: PublicKey;
};

export class User implements IUser {
driftClient: DriftClient;
driftClient: IDriftClient;
userAccountPublicKey: PublicKey;
accountSubscriber: UserAccountSubscriber;
_isSubscribed = false;
Expand Down
26 changes: 25 additions & 1 deletion sdk/src/user/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { PublicKey } from '@solana/web3.js';
import { Commitment, PublicKey } from '@solana/web3.js';
import { EventEmitter } from 'events';
import StrictEventEmitter from 'strict-event-emitter-types';
import {
Expand All @@ -18,13 +18,37 @@ import {
} from '../types';
import {
DataAndSlot,
GrpcConfigs,
UserAccountEvents,
UserAccountSubscriber,
} from '../accounts/types';
import { BN } from '@coral-xyz/anchor';
import { OraclePriceData } from '../oracles/types';
import { StrictOraclePrice } from '../oracles/strictOraclePrice';
import { IUserStats } from '../userStats/types';
import { BulkAccountLoader } from '../accounts/bulkAccountLoader/bulkAccountLoader';

export type UserSubscriptionConfig =
| {
type: 'grpc';
resubTimeoutMs?: number;
logResubMessages?: boolean;
grpcConfigs: GrpcConfigs;
}
| {
type: 'websocket';
resubTimeoutMs?: number;
logResubMessages?: boolean;
commitment?: Commitment;
}
| {
type: 'polling';
accountLoader: BulkAccountLoader;
}
| {
type: 'custom';
userAccountSubscriber: UserAccountSubscriber;
};

export interface IUser {
userAccountPublicKey: PublicKey;
Expand Down
32 changes: 0 additions & 32 deletions sdk/src/userConfig.ts

This file was deleted.

4 changes: 2 additions & 2 deletions sdk/src/userMap/events.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { User } from '../user';
import { IUser } from '../user/types';

export interface UserEvents {
userUpdate: (payload: User) => void;
userUpdate: (payload: IUser) => void;
update: void;
error: (e: Error) => void;
}
23 changes: 11 additions & 12 deletions sdk/src/userMap/types.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
import { User } from '../user';
import { DriftClient } from '../driftClient';
import { IDriftClient } from '../driftClient/types';
import { UserAccount, OrderRecord } from '../types';
import { WrappedEvent } from '../events/types';
import { UserSubscriptionConfig } from '../userConfig';
import { DataAndSlot } from '../accounts/types';
import { IDLOB, ProtectMakerParamsMap } from '../dlob/types';
import { PublicKey } from '@solana/web3.js';
import { UserAccountFilterCriteria as UserFilterCriteria } from './userMapConfig';
import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { UserEvents } from './events';
import { IUser, UserSubscriptionConfig } from '../user/types';

export interface IUserMap {
driftClient: DriftClient;
driftClient: IDriftClient;
eventEmitter: StrictEventEmitter<EventEmitter, UserEvents>;

subscribe(): Promise<void>;
Expand All @@ -31,9 +30,9 @@ export interface IUserMap {
* @param key userAccountPublicKey to get User for
* @returns user User | undefined
*/
get(key: string): User | undefined;
get(key: string): IUser | undefined;

getWithSlot(key: string): DataAndSlot<User> | undefined;
getWithSlot(key: string): DataAndSlot<IUser> | undefined;

/**
* gets the User for a particular userAccountPublicKey, if no User exists, new one is created
Expand All @@ -43,12 +42,12 @@ export interface IUserMap {
mustGet(
key: string,
accountSubscription?: UserSubscriptionConfig
): Promise<User>;
): Promise<IUser>;

mustGetWithSlot(
key: string,
accountSubscription?: UserSubscriptionConfig
): Promise<DataAndSlot<User>>;
): Promise<DataAndSlot<IUser>>;

mustGetUserAccount(key: string): Promise<UserAccount>;

Expand All @@ -73,13 +72,13 @@ export interface IUserMap {

updateWithEventRecord(record: WrappedEvent<any>): Promise<void>;

values(): IterableIterator<User>;
values(): IterableIterator<IUser>;

valuesWithSlot(): IterableIterator<DataAndSlot<User>>;
valuesWithSlot(): IterableIterator<DataAndSlot<IUser>>;

entries(): IterableIterator<[string, User]>;
entries(): IterableIterator<[string, IUser]>;

entriesWithSlot(): IterableIterator<[string, DataAndSlot<User>]>;
entriesWithSlot(): IterableIterator<[string, DataAndSlot<IUser>]>;

size(): number;

Expand Down
6 changes: 3 additions & 3 deletions sdk/src/userMap/userMap.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { BN } from '@coral-xyz/anchor';
import { User } from '../user';
import { DriftClient } from '../driftClient';
import {
UserAccount,
OrderRecord,
Expand All @@ -15,7 +14,7 @@ import {
} from '../types';
import { WrappedEvent } from '../events/types';
import { DLOB } from '../dlob/DLOB';
import { UserSubscriptionConfig } from '../userConfig';
import { UserSubscriptionConfig } from '../user/types';
import { DataAndSlot } from '../accounts/types';
import { OneShotUserAccountSubscriber } from '../accounts/userAccount/oneShotUserAccountSubscriber';
import { ProtectMakerParamsMap } from '../dlob/types';
Expand Down Expand Up @@ -47,12 +46,13 @@ import StrictEventEmitter from 'strict-event-emitter-types';
import { EventEmitter } from 'events';
import { UserEvents } from './events';
import { IUserMap } from './types';
import { IDriftClient } from '../driftClient/types';

const MAX_USER_ACCOUNT_SIZE_BYTES = 4376;

export class UserMap implements IUserMap {
private userMap = new Map<string, DataAndSlot<User>>();
driftClient: DriftClient;
driftClient: IDriftClient;
eventEmitter: StrictEventEmitter<EventEmitter, UserEvents>;
private connection: Connection;
private commitment: Commitment;
Expand Down
Loading
Loading