diff --git a/drift-common b/drift-common index fedca73..fa3ecbe 160000 --- a/drift-common +++ b/drift-common @@ -1 +1 @@ -Subproject commit fedca73a67d061df392f2829c8214935659cf61e +Subproject commit fa3ecbecb1d40d6d56b7c0e5b5ae784c1e951fac diff --git a/src/index.ts b/src/index.ts index 9b8a137..37f3acb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -410,7 +410,8 @@ const main = async (): Promise => { if (accountFlag) { const topAccounts = await getRawAccountFromId( userMapClient, - topMakers + topMakers, + driftClient.connection ); res.end(JSON.stringify(topAccounts)); return; diff --git a/src/utils/utils.ts b/src/utils/utils.ts index 7aa2ab8..329a95c 100644 --- a/src/utils/utils.ts +++ b/src/utils/utils.ts @@ -18,6 +18,7 @@ import { RedisClient } from '@drift/common/clients'; import { logger } from './logger'; import { NextFunction, Request, Response } from 'express'; import FEATURE_FLAGS from './featureFlags'; +import { Connection } from '@solana/web3.js'; export const l2WithBNToStrings = (l2: L2OrderBook): any => { for (const key of Object.keys(l2)) { @@ -380,7 +381,8 @@ export const getAccountFromId = async ( export const getRawAccountFromId = async ( userMapClient: RedisClient, - topMakers: string[] + topMakers: string[], + connection: Connection ): Promise< { userAccountPubKey: string; @@ -395,7 +397,19 @@ export const getRawAccountFromId = async ( userAccountPubKey, accountBase64: userAccountEncoded.split('::')[1], }; + } else { + // user is not in the userMap, try to fetch from the connection + const account = await connection.getAccountInfo( + new PublicKey(userAccountPubKey) + ); + if (account) { + return { + userAccountPubKey, + accountBase64: account.data.toString('base64'), + }; + } } + return { userAccountPubKey, accountBase64: null,