Files
trade-drift-dlob/src/dlobProvider.ts
moosecat a55be980fe send indicative quotes to mainnet (#374)
* Bumping drift-common to ab538e0c1efbf64a3dfecf2af16e5a75aab81400

* Bumping drift-common to cf7f6ec63febe0d3b661f187e4e26e729797c4d0

* Bumping drift-common to 149f5efe5444d89b53b5370dcea4a3115fec8c5f

* Bumping drift-common to c879f8a85bfcbaef1f1c6d9c6bf4a05e8970fa0a

* Bumping drift-common to d089c9ed7e7400a0f3ea98a0184a4e3bf273fcf5

* dlob add fetch indicative quotes (#372)

* dlob add fetch indicative quotes

* indicative ws stream

* prettify

* allow for oracle orders

* Bumping drift-common to 56331c89a2285a04cc86a639e0fceeda03366f43

* add console log for debugging indicative

* add indicative in l2 queries

* add more console logging for debugging

* bump common and remove logging

* Bumping drift-common to 43104f473f43111f8cc34733a43a85b5fef7f778

* Bumping drift-common to 6d75612fa1fab858daa90cdb91f0c8c9edbc8242

* Bumping drift-common to 3a42e9665c04a27bcf92e7faa50c168690312880

* Bumping drift-common to 20351d45f2644fb7194ffce441d3d2cb8d6c6b4b

* Bumping drift-common to 04216dfc03aa659db24fc24ba42aa8a4e9a8bb9a

* Bumping drift-common to ad20bbe9d3a262c547f66ec464306fabac539fd8

* Bumping drift-common to 5539ad5f3849b19e1b7106f783a16a182fc9a411

* Bumping drift-common to 8b7e118f1aed9d1d7a786cd165f0ceef2a07297c

* Bumping drift-common to 52b7948cebb0ed6bc1f8278b0f549366a1be3ba0

* Bumping drift-common to 26a603c2d78f7f662cb872075bdff1fd6b75ec43

* Bumping drift-common to 683bfc5cefe5097a257511507f22831f185f1549

* Bumping drift-common to b66eaade382a58b563fdc5ee6c03bc98e5bb2195

* Bumping drift-common to 9a48bea13265723c5d17377e68aaf9984b24c722

* Bumping drift-common to a147ab129f6eb59d77889ac2b7a915ca910d83dd

* Bumping drift-common to 65891abfcd5f59c726aecb211ae77ca38394bdf1

* Bumping drift-common to 540cdbbc9b322990d288af8f4f3183f2c96087b7

* Bumping drift-common to 978b8a03b59d0dc24d1269f319ff6a7ff711775a

* Bumping drift-common to af74d01953db3683bca585c2111910cbbe171a72

* Bumping drift-common to cd684e22082438f0cb784ec234fd9e5d3cd63bb2

---------

Co-authored-by: GitHub Actions <41898282+github-actions[bot]@users.noreply.github.com>
2025-04-28 10:16:44 -07:00

108 lines
2.5 KiB
TypeScript

import {
DLOB,
OrderSubscriber,
ProtectMakerParamsMap,
UserAccount,
UserMap,
} from '@drift-labs/sdk';
import { PublicKey } from '@solana/web3.js';
export type DLOBProvider = {
subscribe(): Promise<void>;
getDLOB(
slot: number,
protectedMakerParamsMap?: ProtectMakerParamsMap
): Promise<DLOB>;
getUniqueAuthorities(): PublicKey[];
getUserAccounts(): Generator<{
userAccount: UserAccount;
publicKey: PublicKey;
}>;
getUserAccount(publicKey: PublicKey): UserAccount | undefined;
size(): number;
fetch(): Promise<void>;
getSlot(): number;
};
export function getDLOBProviderFromUserMap(userMap: UserMap): DLOBProvider {
return {
subscribe: async () => {
await userMap.subscribe();
},
getDLOB: async (
slot: number,
protectedMakerParamsMap?: ProtectMakerParamsMap
) => {
return await userMap.getDLOB(slot, protectedMakerParamsMap);
},
getUniqueAuthorities: () => {
return userMap.getUniqueAuthorities();
},
getUserAccounts: function* () {
for (const user of userMap.values()) {
yield {
userAccount: user.getUserAccount(),
publicKey: user.getUserAccountPublicKey(),
};
}
},
getUserAccount: (publicKey) => {
return userMap.get(publicKey.toString())?.getUserAccount();
},
size: () => {
return userMap.size();
},
fetch: () => {
return userMap.sync();
},
getSlot: () => {
return userMap.getSlot();
},
};
}
export function getDLOBProviderFromOrderSubscriber(
orderSubscriber: OrderSubscriber
): DLOBProvider {
return {
subscribe: async () => {
await orderSubscriber.subscribe();
},
getDLOB: async (
slot: number,
protectedMakerParamsMap?: ProtectMakerParamsMap
) => {
return await orderSubscriber.getDLOB(slot, protectedMakerParamsMap);
},
getUniqueAuthorities: () => {
const authorities = new Set<string>();
for (const { userAccount } of orderSubscriber.usersAccounts.values()) {
authorities.add(userAccount.authority.toBase58());
}
const pubkeys = Array.from(authorities).map((a) => new PublicKey(a));
return pubkeys;
},
getUserAccounts: function* () {
for (const [
key,
{ userAccount },
] of orderSubscriber.usersAccounts.entries()) {
yield { userAccount: userAccount, publicKey: new PublicKey(key) };
}
},
getUserAccount: (publicKey) => {
return orderSubscriber.usersAccounts.get(publicKey.toString())
?.userAccount;
},
size(): number {
return orderSubscriber.usersAccounts.size;
},
fetch() {
return orderSubscriber.fetch();
},
getSlot: () => {
return orderSubscriber.getSlot();
},
};
}