Skip to content

Commit 7841108

Browse files
committed
fix: grpc v2 doing extra subscribes for oracles
1 parent a9198ab commit 7841108

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

sdk/scripts/client-test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ const GRPC_ENDPOINT = process.env.GRPC_ENDPOINT;
2424
const TOKEN = process.env.TOKEN;
2525

2626
async function initializeGrpcDriftClientV2VersusV1() {
27-
const connection = new Connection('');
27+
const connection = new Connection('https://api.mainnet-beta.solana.com');
2828
const wallet = new Wallet(new Keypair());
2929
dotenv.config({ path: '../' });
3030

@@ -119,6 +119,7 @@ async function initializeGrpcDriftClientV2VersusV1() {
119119
accountSubscription: {
120120
...baseAccountSubscription,
121121
driftClientAccountSubscriber: grpcDriftClientAccountSubscriberV2,
122+
logResubMessages: true,
122123
},
123124
perpMarketIndexes,
124125
spotMarketIndexes,
@@ -132,6 +133,7 @@ async function initializeGrpcDriftClientV2VersusV1() {
132133
accountSubscription: {
133134
...baseAccountSubscription,
134135
driftClientAccountSubscriber: grpcDriftClientAccountSubscriber,
136+
// logResubMessages: true,
135137
},
136138
perpMarketIndexes,
137139
spotMarketIndexes,
@@ -142,6 +144,14 @@ async function initializeGrpcDriftClientV2VersusV1() {
142144
const clientV1 = new DriftClient(configV1);
143145

144146
await Promise.all([clientV1.subscribe(), clientV2.subscribe()]);
147+
148+
clientV2.eventEmitter.on('oraclePriceUpdate', (pubkey, source, data) => {
149+
const key = pubkey.toBase58();
150+
const src = Object.keys(source ?? {})[0];
151+
console.log(
152+
`v2 oracle update ${key} (${src}) price ${data.price.toString()}`
153+
);
154+
});
145155
const compare = () => {
146156
for (const idx of perpMarketIndexes) {
147157
const p1 = clientV1.getOracleDataForPerpMarket(idx).price;

sdk/src/accounts/grpcDriftClientAccountSubscriberV2.ts

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,9 @@ export class grpcDriftClientAccountSubscriberV2
215215
}
216216

217217
async addOracle(oracleInfo: OracleInfo): Promise<boolean> {
218+
if (this.resubOpts?.logResubMessages) {
219+
console.log('[grpcDriftClientAccountSubscriberV2] addOracle');
220+
}
218221
if (oracleInfo.publicKey.equals(PublicKey.default)) {
219222
return true;
220223
}
@@ -228,10 +231,7 @@ export class grpcDriftClientAccountSubscriberV2
228231
this.oracleInfos = this.oracleInfos.concat(oracleInfo);
229232
}
230233

231-
if (this.oracleMultiSubscriber) {
232-
await this.unsubscribeFromOracles();
233-
await this.subscribeToOracles();
234-
}
234+
this.oracleMultiSubscriber?.addAccounts([oracleInfo.publicKey]);
235235

236236
return true;
237237
}
@@ -461,6 +461,11 @@ export class grpcDriftClientAccountSubscriberV2
461461
}
462462

463463
async subscribeToPerpMarketAccounts(): Promise<boolean> {
464+
if (this.resubOpts?.logResubMessages) {
465+
console.log(
466+
'[grpcDriftClientAccountSubscriberV2] subscribeToPerpMarketAccounts'
467+
);
468+
}
464469
const perpMarketIndexToAccountPubkeys: Array<[number, PublicKey]> =
465470
await Promise.all(
466471
this.perpMarketIndexes.map(async (marketIndex) => [
@@ -523,6 +528,11 @@ export class grpcDriftClientAccountSubscriberV2
523528
}
524529

525530
async subscribeToSpotMarketAccounts(): Promise<boolean> {
531+
if (this.resubOpts?.logResubMessages) {
532+
console.log(
533+
'[grpcDriftClientAccountSubscriberV2] subscribeToSpotMarketAccounts'
534+
);
535+
}
526536
const spotMarketIndexToAccountPubkeys: Array<[number, PublicKey]> =
527537
await Promise.all(
528538
this.spotMarketIndexes.map(async (marketIndex) => [
@@ -585,6 +595,9 @@ export class grpcDriftClientAccountSubscriberV2
585595
}
586596

587597
async subscribeToOracles(): Promise<boolean> {
598+
if (this.resubOpts?.logResubMessages) {
599+
console.log('grpcDriftClientAccountSubscriberV2 subscribeToOracles');
600+
}
588601
const oraclePubkeyToInfosMap = new Map<string, OracleInfo[]>();
589602
for (const info of this.oracleInfos) {
590603
const pubkey = info.publicKey.toBase58();

sdk/src/accounts/grpcMultiAccountSubscriber.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ export class grpcMultiAccountSubscriber<T, U = undefined> {
189189
accountProps: U
190190
) => void
191191
): Promise<void> {
192+
if (this.resubOpts?.logResubMessages) {
193+
console.log(`[${this.accountName}] grpcMultiAccountSubscriber subscribe`);
194+
}
192195
if (this.listenerId != null || this.isUnsubscribing) {
193196
return;
194197
}

0 commit comments

Comments
 (0)