Skip to content

Commit

Permalink
Merge pull request #30 from drift-labs/master
Browse files Browse the repository at this point in the history
refactor pruner
  • Loading branch information
NourAlharithi authored Sep 18, 2024
2 parents 0ed8a76 + a9c4371 commit fe3b692
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 61 deletions.
2 changes: 1 addition & 1 deletion drift-common
Submodule drift-common updated 86 files
+ bun.lockb
+ common-ts/bun.lockb
+51 −46 common-ts/package.json
+5 −1 common-ts/src/EnvironmentConstants.ts
+36 −7 common-ts/src/clients/redisClient.ts
+17 −11 common-ts/src/common-ui-utils/commonUiUtils.ts
+8 −5 common-ts/src/common-ui-utils/order.ts
+2 −0 common-ts/src/common-ui-utils/user.ts
+24 −2 common-ts/src/constants/autogenerated/driftErrors.json
+1 −0 common-ts/src/constants/index.ts
+3 −3 common-ts/src/constants/misc.ts
+61 −0 common-ts/src/constants/superstake.ts
+2 −0 common-ts/src/index.ts
+8 −4 common-ts/src/serializableTypes.ts
+7 −0 common-ts/src/types/Superstake.ts
+19 −0 common-ts/src/types/UIMarket.ts
+2 −0 common-ts/src/types/index.ts
+1 −1 common-ts/src/utils/index.ts
+60 −0 common-ts/src/utils/logger.ts
+4 −2 common-ts/src/utils/priority-fees/PriorityFeeStrategies.ts
+126 −0 common-ts/src/utils/s3Buckets.ts
+422 −0 common-ts/src/utils/superstake.ts
+5 −0 common-ts/src/utils/token.ts
+79 −0 common-ts/tests/utils/enumUtils.test.ts
+2 −0 common-ts/tests/utils/equalityChecks.test.ts
+1,005 −43 common-ts/yarn.lock
+2 −2 icons/.env.example
+2 −1 icons/README.md
+ icons/bun.lockb
+1 −5 icons/src/icons/components/CaretDown.tsx
+1 −5 icons/src/icons/components/CaretUp.tsx
+28 −0 icons/src/icons/components/Compare.tsx
+13 −6 icons/src/icons/components/Copy.tsx
+34 −0 icons/src/icons/components/Details.tsx
+1 −1 icons/src/icons/components/Discord.tsx
+4 −3 icons/src/icons/components/DrawAnnounce.tsx
+4 −3 icons/src/icons/components/DrawGift.tsx
+4 −3 icons/src/icons/components/DrawLock.tsx
+4 −3 icons/src/icons/components/DrawPrize.tsx
+6 −9 icons/src/icons/components/EyeShow.tsx
+9 −9 icons/src/icons/components/Fuel.tsx
+67 −0 icons/src/icons/components/FuelFilled.tsx
+43 −0 icons/src/icons/components/FuelMini.tsx
+1 −1 icons/src/icons/components/Hot.tsx
+4 −5 icons/src/icons/components/Interface.tsx
+28 −0 icons/src/icons/components/Like.tsx
+3 −6 icons/src/icons/components/Loader.tsx
+26 −0 icons/src/icons/components/Loading15.tsx
+26 −0 icons/src/icons/components/Loading95.tsx
+28 −0 icons/src/icons/components/Metadao.tsx
+28 −0 icons/src/icons/components/No.tsx
+4 −4 icons/src/icons/components/OrderbookHorizontal.tsx
+2 −2 icons/src/icons/components/OrderbookVertical.tsx
+34 −0 icons/src/icons/components/Realms.tsx
+28 −0 icons/src/icons/components/Replies.tsx
+1 −1 icons/src/icons/components/SSS.tsx
+28 −0 icons/src/icons/components/Simple.tsx
+28 −0 icons/src/icons/components/Smart.tsx
+30 −0 icons/src/icons/components/SortDown.tsx
+30 −0 icons/src/icons/components/SortUp.tsx
+1 −7 icons/src/icons/components/Stake.tsx
+28 −0 icons/src/icons/components/Status.tsx
+1 −1 icons/src/icons/components/SuccessFilled.tsx
+4 −5 icons/src/icons/components/Swap.tsx
+26 −0 icons/src/icons/components/Telegram.tsx
+28 −0 icons/src/icons/components/Unlike.tsx
+28 −0 icons/src/icons/components/Vote.tsx
+28 −0 icons/src/icons/components/YES.tsx
+20 −0 icons/src/icons/index.ts
+1 −1 protocol
+ react/bun.lockb
+7 −3 react/src/actions/driftActions.ts
+1 −0 react/src/hooks/index.ts
+39 −56 react/src/hooks/oraclePrice/useSyncOraclePriceStore.ts
+15 −34 react/src/hooks/priorityFees/usePriorityFeeSubscriber.ts
+6 −4 react/src/hooks/priorityFees/usePriorityFeesPollingRate.ts
+5 −1 react/src/hooks/useGeoBlocking.tsx
+41 −0 react/src/hooks/useHandleBadRpc.ts
+5 −6 react/src/hooks/useSolBalance.tsx
+1 −0 react/src/providers/DriftProvider.tsx
+9 −12 react/src/stores/priorityFee/usePriorityFeeStore.ts
+17 −12 react/src/stores/priorityFee/useSyncPriorityFeeStore.ts
+3 −8 react/src/stores/useCommonDriftStore.tsx
+6 −9 react/src/stores/useOraclePriceStore.tsx
+5 −8 react/src/stores/useScreenSizeStore.ts
+945 −38 react/yarn.lock
99 changes: 39 additions & 60 deletions src/pruner.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,8 @@
import {
DriftClient,
DriftEnv,
PublicKey,
Wallet,
getNonIdleUserFilter,
getUserFilter,
} from '@drift-labs/sdk';
import { DriftClient, DriftEnv, UserMap, Wallet } from '@drift-labs/sdk';
import { RedisClient, RedisClientPrefix } from '@drift/common';
import { Connection, Keypair, RpcResponseAndContext } from '@solana/web3.js';
import { Connection, Keypair } from '@solana/web3.js';
import { sleep } from './utils/utils';
import { logger } from './utils/logger';
import bs58 from 'bs58';

require('dotenv').config();

Expand Down Expand Up @@ -39,55 +31,25 @@ async function main() {
wallet,
env: driftEnv,
});
await driftClient.subscribe();

const program = driftClient.program;

const {
memcmp: { offset },
} = getNonIdleUserFilter();

const idleUserFilter = {
memcmp: {
offset,
bytes: bs58.encode(Uint8Array.from([1])),
},
};

const filters = [getUserFilter(), idleUserFilter];

const rpcRequestArgs = [
program.programId,
{
commitment: 'confirmed',
filters,
encoding: 'base64+zstd',
withContext: true,
const userMap = new UserMap({
driftClient,
connection,
includeIdle: false,
fastDecode: true,
subscriptionConfig: {
type: 'polling',
frequency: 0,
commitment: 'finalized',
},
];

// @ts-ignore
const response = await program.provider.connection._rpcRequest(
'getProgramAccounts',
rpcRequestArgs
);

const rpcResponseAndContext: RpcResponseAndContext<
Array<{ pubkey: PublicKey; account: { data: [string, string] } }>
> = response.result;

const idleUsers = new Set<string>();

rpcResponseAndContext.value.map(async (programAccount) => {
idleUsers.add(programAccount.pubkey.toString());
});
await userMap.sync();

logger.info('Pruning idle users...');
if (idleUsers.size === 0) {
if (userMap.size() === 0) {
throw new Error('UserMap size cant be 0');
}

console.log(`Number of idle users: ${idleUsers.size}`);

const redisClient = USE_ELASTICACHE
? new RedisClient({
prefix: RedisClientPrefix.USER_MAP,
Expand All @@ -101,17 +63,34 @@ async function main() {

await redisClient.connect();

const userList = await redisClient.lRange('user_pubkeys', 0, -1);
const idleUserInCache = userList.filter((item) => idleUsers.has(item));

for (const key of idleUserInCache) {
console.log(`Pruning user: ${key}`);
await redisClient.delete(key);
await redisClient.lRem('user_pubkeys', 0, key);
}
// Fetch the userMap and prune the redis cache from idle users
let cursor = '0';
let numIdleUsers = 0;
do {
const reply = await redisClient
.forceGetClient()
.scan(cursor, 'MATCH', '*', 'COUNT', 100);
cursor = reply[0];
const keys = reply[1];

// Process the keys
for (let key of keys) {
if (key.includes(':')) {
key = key.split(':').at(-1);
}
if (key == 'user_pubkeys') continue;
if (userMap.get(key) === undefined) {
console.log(`Pruning idle or deleted user: ${key}`);
await redisClient.delete(key);
await redisClient.lRem('user_pubkeys', 0, key);
numIdleUsers++;
}
}
} while (cursor !== '0');

redisClient.disconnect();

console.log(`Pruned ${numIdleUsers} users`);
console.log('Done!!');
process.exit(0);
}
Expand Down

0 comments on commit fe3b692

Please sign in to comment.