@drift-labs/sdk-browser 2.157.0-beta.2 → 2.157.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/VERSION +1 -1
- package/lib/browser/accounts/grpcProgramAccountSubscriber.js +1 -5
- package/lib/browser/accounts/laserProgramAccountSubscriber.d.ts +2 -2
- package/lib/browser/accounts/types.d.ts +12 -4
- package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcProgramAccountSubscriber.js +1 -5
- package/lib/node/accounts/laserProgramAccountSubscriber.d.ts +2 -2
- package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/types.d.ts +12 -4
- package/lib/node/accounts/types.d.ts.map +1 -1
- package/lib/node/isomorphic/grpc.node.d.ts.map +1 -1
- package/package.json +2 -2
- package/scripts/grpc-client-test-comparison.ts +2 -3
- package/scripts/grpc-multiuser-client-test-comparison.ts +140 -138
- package/scripts/single-grpc-client-test.ts +2 -4
- package/src/accounts/grpcProgramAccountSubscriber.ts +3 -2
- package/src/accounts/laserProgramAccountSubscriber.ts +2 -2
- package/src/accounts/types.ts +14 -4
- package/src/isomorphic/grpc.node.ts +3 -1
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.157.0-beta.
|
|
1
|
+
2.157.0-beta.4
|
|
@@ -22,12 +22,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
26
|
exports.grpcProgramAccountSubscriber = void 0;
|
|
30
|
-
const bs58_1 = __importDefault(require("bs58"));
|
|
31
27
|
const web3_js_1 = require("@solana/web3.js");
|
|
32
28
|
const Buffer = __importStar(require("buffer"));
|
|
33
29
|
const webSocketProgramAccountSubscriber_1 = require("./webSocketProgramAccountSubscriber");
|
|
@@ -62,7 +58,7 @@ class grpcProgramAccountSubscriber extends webSocketProgramAccountSubscriber_1.W
|
|
|
62
58
|
return {
|
|
63
59
|
memcmp: {
|
|
64
60
|
offset: filter.memcmp.offset.toString(),
|
|
65
|
-
|
|
61
|
+
base58: filter.memcmp.bytes,
|
|
66
62
|
},
|
|
67
63
|
};
|
|
68
64
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
2
|
+
import { LaserGrpcConfigs, ResubOpts } from './types';
|
|
3
3
|
import { Program } from '@coral-xyz/anchor';
|
|
4
4
|
import { Context, MemcmpFilter, PublicKey } from '@solana/web3.js';
|
|
5
5
|
import { WebSocketProgramAccountSubscriber } from './webSocketProgramAccountSubscriber';
|
|
@@ -12,7 +12,7 @@ export declare class LaserstreamProgramAccountSubscriber<T> extends WebSocketPro
|
|
|
12
12
|
private readonly laserConfig;
|
|
13
13
|
private readonly laserCommitmentLevel;
|
|
14
14
|
private constructor();
|
|
15
|
-
static create<U>(grpcConfigs:
|
|
15
|
+
static create<U>(grpcConfigs: LaserGrpcConfigs, subscriptionName: string, accountDiscriminator: string, program: Program, decodeBufferFn: (accountName: string, ix: Buffer) => U, options?: {
|
|
16
16
|
filters: MemcmpFilter[];
|
|
17
17
|
}, resubOpts?: ResubOpts): Promise<LaserstreamProgramAccountSubscriber<U>>;
|
|
18
18
|
subscribe(onChange: (accountId: PublicKey, data: T, context: Context, buffer: Buffer) => void): Promise<void>;
|
|
@@ -8,7 +8,7 @@ import { Context, PublicKey } from '@solana/web3.js';
|
|
|
8
8
|
import { Account } from '@solana/spl-token';
|
|
9
9
|
import { OracleInfo, OraclePriceData } from '../oracles/types';
|
|
10
10
|
import { User } from '../user';
|
|
11
|
-
import {
|
|
11
|
+
import { Client, CommitmentLevel, LaserstreamConfig } from '../isomorphic/grpc';
|
|
12
12
|
export interface AccountSubscriber<T> {
|
|
13
13
|
dataAndSlot?: DataAndSlot<T>;
|
|
14
14
|
subscribe(onChange: (data: T) => void): Promise<void>;
|
|
@@ -155,18 +155,25 @@ export interface UserStatsAccountSubscriber {
|
|
|
155
155
|
unsubscribe(): Promise<void>;
|
|
156
156
|
getUserStatsAccountAndSlot(): DataAndSlot<UserStatsAccount>;
|
|
157
157
|
}
|
|
158
|
-
|
|
158
|
+
type BaseGrpcConfigs = {
|
|
159
159
|
endpoint: string;
|
|
160
160
|
token: string;
|
|
161
161
|
commitmentLevel?: CommitmentLevel;
|
|
162
|
-
channelOptions?: ChannelOptions;
|
|
163
162
|
/**
|
|
164
163
|
* Whether to enable automatic reconnection on connection loss .
|
|
165
164
|
* Defaults to false, will throw on connection loss.
|
|
166
165
|
*/
|
|
167
166
|
enableReconnect?: boolean;
|
|
168
|
-
client?: 'yellowstone' | 'laser';
|
|
169
167
|
};
|
|
168
|
+
export type YellowstoneGrpcConfigs = BaseGrpcConfigs & {
|
|
169
|
+
client?: 'yellowstone';
|
|
170
|
+
channelOptions?: ConstructorParameters<typeof Client>[2];
|
|
171
|
+
};
|
|
172
|
+
export type LaserGrpcConfigs = BaseGrpcConfigs & {
|
|
173
|
+
client: 'laser';
|
|
174
|
+
channelOptions?: LaserstreamConfig['channelOptions'];
|
|
175
|
+
};
|
|
176
|
+
export type GrpcConfigs = YellowstoneGrpcConfigs | LaserGrpcConfigs;
|
|
170
177
|
export interface HighLeverageModeConfigAccountSubscriber {
|
|
171
178
|
eventEmitter: StrictEventEmitter<EventEmitter, HighLeverageModeConfigAccountEvents>;
|
|
172
179
|
isSubscribed: boolean;
|
|
@@ -192,3 +199,4 @@ export interface ConstituentAccountEvents {
|
|
|
192
199
|
update: void;
|
|
193
200
|
error: (e: Error) => void;
|
|
194
201
|
}
|
|
202
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grpcProgramAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcProgramAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"grpcProgramAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/grpcProgramAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAUxF,qBAAa,4BAA4B,CACxC,CAAC,CACA,SAAQ,iCAAiC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAwD;IACtE,OAAO,CAAC,eAAe,CAAkB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO;WAwBa,MAAM,CAAC,CAAC,EAC3B,WAAW,EAAE,WAAW,EACxB,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,EAC5B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,CAAC,EACtD,OAAO,GAAE;QAAE,OAAO,EAAE,YAAY,EAAE,CAAA;KAEjC,EACD,SAAS,CAAC,EAAE,SAAS,GACnB,OAAO,CAAC,4BAA4B,CAAC,CAAC,CAAC,CAAC;IAsBrC,SAAS,CACd,QAAQ,EAAE,CACT,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KACV,IAAI,GACP,OAAO,CAAC,IAAI,CAAC;IA+FH,WAAW,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAsCxD"}
|
|
@@ -22,12 +22,8 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
|
-
};
|
|
28
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
26
|
exports.grpcProgramAccountSubscriber = void 0;
|
|
30
|
-
const bs58_1 = __importDefault(require("bs58"));
|
|
31
27
|
const web3_js_1 = require("@solana/web3.js");
|
|
32
28
|
const Buffer = __importStar(require("buffer"));
|
|
33
29
|
const webSocketProgramAccountSubscriber_1 = require("./webSocketProgramAccountSubscriber");
|
|
@@ -62,7 +58,7 @@ class grpcProgramAccountSubscriber extends webSocketProgramAccountSubscriber_1.W
|
|
|
62
58
|
return {
|
|
63
59
|
memcmp: {
|
|
64
60
|
offset: filter.memcmp.offset.toString(),
|
|
65
|
-
|
|
61
|
+
base58: filter.memcmp.bytes,
|
|
66
62
|
},
|
|
67
63
|
};
|
|
68
64
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
2
|
+
import { LaserGrpcConfigs, ResubOpts } from './types';
|
|
3
3
|
import { Program } from '@coral-xyz/anchor';
|
|
4
4
|
import { Context, MemcmpFilter, PublicKey } from '@solana/web3.js';
|
|
5
5
|
import { WebSocketProgramAccountSubscriber } from './webSocketProgramAccountSubscriber';
|
|
@@ -12,7 +12,7 @@ export declare class LaserstreamProgramAccountSubscriber<T> extends WebSocketPro
|
|
|
12
12
|
private readonly laserConfig;
|
|
13
13
|
private readonly laserCommitmentLevel;
|
|
14
14
|
private constructor();
|
|
15
|
-
static create<U>(grpcConfigs:
|
|
15
|
+
static create<U>(grpcConfigs: LaserGrpcConfigs, subscriptionName: string, accountDiscriminator: string, program: Program, decodeBufferFn: (accountName: string, ix: Buffer) => U, options?: {
|
|
16
16
|
filters: MemcmpFilter[];
|
|
17
17
|
}, resubOpts?: ResubOpts): Promise<LaserstreamProgramAccountSubscriber<U>>;
|
|
18
18
|
subscribe(onChange: (accountId: PublicKey, data: T, context: Context, buffer: Buffer) => void): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"laserProgramAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/laserProgramAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"laserProgramAccountSubscriber.d.ts","sourceRoot":"","sources":["../../../src/accounts/laserProgramAccountSubscriber.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,iCAAiC,EAAE,MAAM,qCAAqC,CAAC;AAExF,OAAO,EACN,oBAAoB,EAQpB,MAAM,oBAAoB,CAAC;AAE5B,KAAK,eAAe,GACnB,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAElE,qBAAa,mCAAmC,CAC/C,CAAC,CACA,SAAQ,iCAAiC,CAAC,CAAC,CAAC;IAC7C,OAAO,CAAC,MAAM,CAMD;IAEb,OAAO,CAAC,eAAe,CAAkB;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAoB;IAChD,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAA8B;IAEnE,OAAO;WAwBa,MAAM,CAAC,CAAC,EAC3B,WAAW,EAAE,gBAAgB,EAC7B,gBAAgB,EAAE,MAAM,EACxB,oBAAoB,EAAE,MAAM,EAC5B,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,CAAC,EACtD,OAAO,GAAE;QAAE,OAAO,EAAE,YAAY,EAAE,CAAA;KAEjC,EACD,SAAS,CAAC,EAAE,SAAS,GACnB,OAAO,CAAC,mCAAmC,CAAC,CAAC,CAAC,CAAC;IAiC5C,SAAS,CACd,QAAQ,EAAE,CACT,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,CAAC,EACP,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,KACV,IAAI,GACP,OAAO,CAAC,IAAI,CAAC;IAsFH,WAAW,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBjD,iBAAiB,CACvB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,GAChC,eAAe;CASlB"}
|
|
@@ -8,7 +8,7 @@ import { Context, PublicKey } from '@solana/web3.js';
|
|
|
8
8
|
import { Account } from '@solana/spl-token';
|
|
9
9
|
import { OracleInfo, OraclePriceData } from '../oracles/types';
|
|
10
10
|
import { User } from '../user';
|
|
11
|
-
import {
|
|
11
|
+
import { Client, CommitmentLevel, LaserstreamConfig } from '../isomorphic/grpc';
|
|
12
12
|
export interface AccountSubscriber<T> {
|
|
13
13
|
dataAndSlot?: DataAndSlot<T>;
|
|
14
14
|
subscribe(onChange: (data: T) => void): Promise<void>;
|
|
@@ -155,18 +155,25 @@ export interface UserStatsAccountSubscriber {
|
|
|
155
155
|
unsubscribe(): Promise<void>;
|
|
156
156
|
getUserStatsAccountAndSlot(): DataAndSlot<UserStatsAccount>;
|
|
157
157
|
}
|
|
158
|
-
|
|
158
|
+
type BaseGrpcConfigs = {
|
|
159
159
|
endpoint: string;
|
|
160
160
|
token: string;
|
|
161
161
|
commitmentLevel?: CommitmentLevel;
|
|
162
|
-
channelOptions?: ChannelOptions;
|
|
163
162
|
/**
|
|
164
163
|
* Whether to enable automatic reconnection on connection loss .
|
|
165
164
|
* Defaults to false, will throw on connection loss.
|
|
166
165
|
*/
|
|
167
166
|
enableReconnect?: boolean;
|
|
168
|
-
client?: 'yellowstone' | 'laser';
|
|
169
167
|
};
|
|
168
|
+
export type YellowstoneGrpcConfigs = BaseGrpcConfigs & {
|
|
169
|
+
client?: 'yellowstone';
|
|
170
|
+
channelOptions?: ConstructorParameters<typeof Client>[2];
|
|
171
|
+
};
|
|
172
|
+
export type LaserGrpcConfigs = BaseGrpcConfigs & {
|
|
173
|
+
client: 'laser';
|
|
174
|
+
channelOptions?: LaserstreamConfig['channelOptions'];
|
|
175
|
+
};
|
|
176
|
+
export type GrpcConfigs = YellowstoneGrpcConfigs | LaserGrpcConfigs;
|
|
170
177
|
export interface HighLeverageModeConfigAccountSubscriber {
|
|
171
178
|
eventEmitter: StrictEventEmitter<EventEmitter, HighLeverageModeConfigAccountEvents>;
|
|
172
179
|
isSubscribed: boolean;
|
|
@@ -192,4 +199,5 @@ export interface ConstituentAccountEvents {
|
|
|
192
199
|
update: void;
|
|
193
200
|
error: (e: Error) => void;
|
|
194
201
|
}
|
|
202
|
+
export {};
|
|
195
203
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/accounts/types.ts"],"names":[],"mappings":";;;AAAA,OAAO,EACN,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,EACtB,MAAM,UAAU,CAAC;AAClB,OAAO,kBAAkB,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/accounts/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grpc.node.d.ts","sourceRoot":"","sources":["../../../src/isomorphic/grpc.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGxE,YAAY,EACX,iBAAiB,EACjB,gBAAgB,IAAI,qBAAqB,EACzC,eAAe,IAAI,oBAAoB,GACvC,MAAM,oBAAoB,CAAC;AA4B5B,eAAO,MAAM,oBAAoB;;;;CAahC,CAAC;AAEF,eAAO,MAAM,qBAAqB,2DAajC,CAAC;AAGF,wBAAsB,iBAAiB,IAAI,OAAO,CACjD,cAAc,oBAAoB,EAAE,SAAS,CAC7C,CAGA;AAGD,wBAAsB,uBAAuB,IAAI,OAAO,CACvD,cAAc,oBAAoB,EAAE,eAAe,CACnD,CAGA;AAGD,wBAAsB,6BAA6B,IAAI,OAAO,CAC7D,cAAc,oBAAoB,EAAE,qBAAqB,CACzD,CAGA;AAKD,wBAAgB,cAAc,CAC7B,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,oBAAoB,EAAE,SAAS,CAAC,GAChE,UAAU,CAAC,cAAc,oBAAoB,EAAE,SAAS,CAAC,CAQ3D;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACnC,YAAY,EACX,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,GACf,CAAC;AAGF,wBAAsB,YAAY,CACjC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"grpc.node.d.ts","sourceRoot":"","sources":["../../../src/isomorphic/grpc.node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,8BAA8B,CAAC;AACvD,OAAO,KAAK,EACX,gBAAgB,EAChB,eAAe,EACf,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGxE,YAAY,EACX,iBAAiB,EACjB,gBAAgB,IAAI,qBAAqB,EACzC,eAAe,IAAI,oBAAoB,GACvC,MAAM,oBAAoB,CAAC;AA4B5B,eAAO,MAAM,oBAAoB;;;;CAahC,CAAC;AAEF,eAAO,MAAM,qBAAqB,2DAajC,CAAC;AAGF,wBAAsB,iBAAiB,IAAI,OAAO,CACjD,cAAc,oBAAoB,EAAE,SAAS,CAC7C,CAGA;AAGD,wBAAsB,uBAAuB,IAAI,OAAO,CACvD,cAAc,oBAAoB,EAAE,eAAe,CACnD,CAGA;AAGD,wBAAsB,6BAA6B,IAAI,OAAO,CAC7D,cAAc,oBAAoB,EAAE,qBAAqB,CACzD,CAGA;AAKD,wBAAgB,cAAc,CAC7B,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,oBAAoB,EAAE,SAAS,CAAC,GAChE,UAAU,CAAC,cAAc,oBAAoB,EAAE,SAAS,CAAC,CAQ3D;AAED,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AACnC,YAAY,EACX,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,eAAe,GACf,CAAC;AAGF,wBAAsB,YAAY,CACjC,GAAG,IAAI,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,GAC3C,OAAO,CAAC,MAAM,CAAC,CAKjB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drift-labs/sdk-browser",
|
|
3
|
-
"version": "2.157.0-beta.
|
|
3
|
+
"version": "2.157.0-beta.4",
|
|
4
4
|
"main": "lib/node/index.js",
|
|
5
5
|
"types": "lib/node/index.d.ts",
|
|
6
6
|
"module": "./lib/browser/index.js",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"@solana/web3.js": "1.98.0",
|
|
57
57
|
"@switchboard-xyz/common": "3.0.14",
|
|
58
58
|
"@switchboard-xyz/on-demand": "2.4.1",
|
|
59
|
-
"@triton-one/yellowstone-grpc": "
|
|
59
|
+
"@triton-one/yellowstone-grpc": "5.0.2",
|
|
60
60
|
"anchor-bankrun": "0.3.0",
|
|
61
61
|
"gill": "^0.10.2",
|
|
62
62
|
"nanoid": "3.3.4",
|
|
@@ -96,9 +96,8 @@ async function initializeGrpcDriftClientV2VersusV1() {
|
|
|
96
96
|
token: TOKEN,
|
|
97
97
|
commitmentLevel: CommitmentLevel.PROCESSED,
|
|
98
98
|
channelOptions: {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
'grpc.keepalive_permit_without_calls': 1,
|
|
99
|
+
grpcKeepAliveTimeout: 1_000,
|
|
100
|
+
grpcTcpKeepalive: 10_000,
|
|
102
101
|
},
|
|
103
102
|
},
|
|
104
103
|
};
|
|
@@ -13,144 +13,146 @@ const TOKEN = process.env.TOKEN;
|
|
|
13
13
|
const RPC_ENDPOINT = process.env.RPC_ENDPOINT;
|
|
14
14
|
|
|
15
15
|
const USER_ACCOUNT_PUBKEYS = [
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
// Add user account public keys here, e.g.:
|
|
17
|
+
// new PublicKey('...')
|
|
18
18
|
];
|
|
19
19
|
|
|
20
20
|
async function testGrpcUserAccountSubscriberV1VsV2() {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
21
|
+
console.log('🚀 Initializing User Account Subscriber V1 vs V2 Test...');
|
|
22
|
+
|
|
23
|
+
if (USER_ACCOUNT_PUBKEYS.length === 0) {
|
|
24
|
+
console.error(
|
|
25
|
+
'❌ No user account public keys provided. Please add some to USER_ACCOUNT_PUBKEYS array.'
|
|
26
|
+
);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const connection = new Connection(RPC_ENDPOINT);
|
|
31
|
+
const wallet = new Wallet(new Keypair());
|
|
32
|
+
|
|
33
|
+
const programId = new PublicKey(DRIFT_PROGRAM_ID);
|
|
34
|
+
const provider = new AnchorProvider(
|
|
35
|
+
connection,
|
|
36
|
+
// @ts-ignore
|
|
37
|
+
wallet,
|
|
38
|
+
{
|
|
39
|
+
commitment: 'processed',
|
|
40
|
+
}
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
const program = new Program(driftIDL as Idl, programId, provider);
|
|
44
|
+
|
|
45
|
+
const grpcConfigs = {
|
|
46
|
+
endpoint: GRPC_ENDPOINT,
|
|
47
|
+
token: TOKEN,
|
|
48
|
+
commitmentLevel: CommitmentLevel.PROCESSED,
|
|
49
|
+
channelOptions: {
|
|
50
|
+
grpcKeepAliveTimeout: 1_000,
|
|
51
|
+
grpcTcpKeepalive: 10_000,
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
console.log(`📊 Testing ${USER_ACCOUNT_PUBKEYS.length} user accounts...`);
|
|
56
|
+
|
|
57
|
+
// V1: Create individual subscribers for each user account
|
|
58
|
+
const v1Subscribers = USER_ACCOUNT_PUBKEYS.map(
|
|
59
|
+
(pubkey) =>
|
|
60
|
+
new grpcUserAccountSubscriber(grpcConfigs, program, pubkey, {
|
|
61
|
+
logResubMessages: true,
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
// V2: Create a single multi-subscriber and get per-user interfaces
|
|
66
|
+
const v2MultiSubscriber = new grpcMultiUserAccountSubscriber(
|
|
67
|
+
program,
|
|
68
|
+
grpcConfigs,
|
|
69
|
+
{ logResubMessages: true }
|
|
70
|
+
);
|
|
71
|
+
const v2Subscribers = USER_ACCOUNT_PUBKEYS.map((pubkey) =>
|
|
72
|
+
v2MultiSubscriber.forUser(pubkey)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
// Subscribe all V1 subscribers
|
|
76
|
+
console.log('🔗 Subscribing V1 subscribers...');
|
|
77
|
+
await Promise.all(v1Subscribers.map((sub) => sub.subscribe()));
|
|
78
|
+
console.log('✅ V1 subscribers ready');
|
|
79
|
+
|
|
80
|
+
// Subscribe all V2 subscribers
|
|
81
|
+
console.log('🔗 Subscribing V2 subscribers...');
|
|
82
|
+
await v2MultiSubscriber.subscribe();
|
|
83
|
+
console.log('✅ V2 subscribers ready');
|
|
84
|
+
|
|
85
|
+
const compare = () => {
|
|
86
|
+
try {
|
|
87
|
+
let passedTests = 0;
|
|
88
|
+
let totalTests = 0;
|
|
89
|
+
|
|
90
|
+
// Test each user account
|
|
91
|
+
for (let i = 0; i < USER_ACCOUNT_PUBKEYS.length; i++) {
|
|
92
|
+
const pubkey = USER_ACCOUNT_PUBKEYS[i];
|
|
93
|
+
const v1Sub = v1Subscribers[i];
|
|
94
|
+
const v2Sub = v2Subscribers[i];
|
|
95
|
+
|
|
96
|
+
totalTests++;
|
|
97
|
+
|
|
98
|
+
// 1. Test isSubscribed
|
|
99
|
+
assert.strictEqual(
|
|
100
|
+
v1Sub.isSubscribed,
|
|
101
|
+
v2Sub.isSubscribed,
|
|
102
|
+
`User ${pubkey.toBase58()}: isSubscribed should match`
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
// 2. Test getUserAccountAndSlot
|
|
106
|
+
const v1Data = v1Sub.getUserAccountAndSlot();
|
|
107
|
+
const v2Data = v2Sub.getUserAccountAndSlot();
|
|
108
|
+
|
|
109
|
+
// Compare the user account data
|
|
110
|
+
assert.deepStrictEqual(
|
|
111
|
+
v1Data.data,
|
|
112
|
+
v2Data.data,
|
|
113
|
+
`User ${pubkey.toBase58()}: account data should match`
|
|
114
|
+
);
|
|
115
|
+
|
|
116
|
+
// Slots might differ slightly due to timing, but let's check if they're close
|
|
117
|
+
const slotDiff = Math.abs(v1Data.slot - v2Data.slot);
|
|
118
|
+
if (slotDiff > 10) {
|
|
119
|
+
console.warn(
|
|
120
|
+
`⚠️ User ${pubkey.toBase58()}: slot difference is ${slotDiff} (v1: ${
|
|
121
|
+
v1Data.slot
|
|
122
|
+
}, v2: ${v2Data.slot})`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
passedTests++;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
console.log(
|
|
130
|
+
`✅ All comparisons passed (${passedTests}/${totalTests} user accounts)`
|
|
131
|
+
);
|
|
132
|
+
} catch (error) {
|
|
133
|
+
console.error('❌ Comparison failed:', error);
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
// Run initial comparison
|
|
138
|
+
compare();
|
|
139
|
+
|
|
140
|
+
// Run comparison every second to verify live updates
|
|
141
|
+
const interval = setInterval(compare, 1000);
|
|
142
|
+
|
|
143
|
+
const cleanup = async () => {
|
|
144
|
+
clearInterval(interval);
|
|
145
|
+
console.log('🧹 Cleaning up...');
|
|
146
|
+
await Promise.all([
|
|
147
|
+
...v1Subscribers.map((sub) => sub.unsubscribe()),
|
|
148
|
+
...v2Subscribers.map((sub) => sub.unsubscribe()),
|
|
149
|
+
]);
|
|
150
|
+
console.log('✅ Cleanup complete');
|
|
151
|
+
process.exit(0);
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
process.on('SIGINT', cleanup);
|
|
155
|
+
process.on('SIGTERM', cleanup);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
testGrpcUserAccountSubscriberV1VsV2().catch(console.error);
|
|
@@ -97,15 +97,13 @@ async function initializeSingleGrpcClient() {
|
|
|
97
97
|
);
|
|
98
98
|
console.log(`🔮 Oracles: ${oracleInfos.length}`);
|
|
99
99
|
|
|
100
|
-
|
|
101
100
|
const grpcConfigs = {
|
|
102
101
|
endpoint: GRPC_ENDPOINT,
|
|
103
102
|
token: TOKEN,
|
|
104
103
|
commitmentLevel: CommitmentLevel.PROCESSED,
|
|
105
104
|
channelOptions: {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
'grpc.keepalive_permit_without_calls': 1,
|
|
105
|
+
grpcKeepAliveTimeout: 1_000,
|
|
106
|
+
grpcTcpKeepalive: 10_000,
|
|
109
107
|
},
|
|
110
108
|
};
|
|
111
109
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { ResubOpts, GrpcConfigs } from './types';
|
|
2
2
|
import { Program } from '@coral-xyz/anchor';
|
|
3
|
-
import bs58 from 'bs58';
|
|
4
3
|
import { Context, MemcmpFilter, PublicKey } from '@solana/web3.js';
|
|
5
4
|
import * as Buffer from 'buffer';
|
|
6
5
|
import { WebSocketProgramAccountSubscriber } from './webSocketProgramAccountSubscriber';
|
|
@@ -94,14 +93,16 @@ export class grpcProgramAccountSubscriber<
|
|
|
94
93
|
// Subscribe with grpc
|
|
95
94
|
this.stream =
|
|
96
95
|
(await this.client.subscribe()) as unknown as typeof this.stream;
|
|
96
|
+
|
|
97
97
|
const filters = this.options.filters.map((filter) => {
|
|
98
98
|
return {
|
|
99
99
|
memcmp: {
|
|
100
100
|
offset: filter.memcmp.offset.toString(),
|
|
101
|
-
|
|
101
|
+
base58: filter.memcmp.bytes,
|
|
102
102
|
},
|
|
103
103
|
};
|
|
104
104
|
});
|
|
105
|
+
|
|
105
106
|
const request: SubscribeRequest = {
|
|
106
107
|
slots: {},
|
|
107
108
|
accounts: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LaserGrpcConfigs, ResubOpts } from './types';
|
|
2
2
|
import { Program } from '@coral-xyz/anchor';
|
|
3
3
|
import { Context, MemcmpFilter, PublicKey } from '@solana/web3.js';
|
|
4
4
|
import * as Buffer from 'buffer';
|
|
@@ -60,7 +60,7 @@ export class LaserstreamProgramAccountSubscriber<
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
public static async create<U>(
|
|
63
|
-
grpcConfigs:
|
|
63
|
+
grpcConfigs: LaserGrpcConfigs,
|
|
64
64
|
subscriptionName: string,
|
|
65
65
|
accountDiscriminator: string,
|
|
66
66
|
program: Program,
|
package/src/accounts/types.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { Context, PublicKey } from '@solana/web3.js';
|
|
|
15
15
|
import { Account } from '@solana/spl-token';
|
|
16
16
|
import { OracleInfo, OraclePriceData } from '../oracles/types';
|
|
17
17
|
import { User } from '../user';
|
|
18
|
-
import {
|
|
18
|
+
import { Client, CommitmentLevel, LaserstreamConfig } from '../isomorphic/grpc';
|
|
19
19
|
|
|
20
20
|
export interface AccountSubscriber<T> {
|
|
21
21
|
dataAndSlot?: DataAndSlot<T>;
|
|
@@ -225,19 +225,29 @@ export interface UserStatsAccountSubscriber {
|
|
|
225
225
|
getUserStatsAccountAndSlot(): DataAndSlot<UserStatsAccount>;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
-
|
|
228
|
+
type BaseGrpcConfigs = {
|
|
229
229
|
endpoint: string;
|
|
230
230
|
token: string;
|
|
231
231
|
commitmentLevel?: CommitmentLevel;
|
|
232
|
-
channelOptions?: ChannelOptions;
|
|
233
232
|
/**
|
|
234
233
|
* Whether to enable automatic reconnection on connection loss .
|
|
235
234
|
* Defaults to false, will throw on connection loss.
|
|
236
235
|
*/
|
|
237
236
|
enableReconnect?: boolean;
|
|
238
|
-
client?: 'yellowstone' | 'laser';
|
|
239
237
|
};
|
|
240
238
|
|
|
239
|
+
export type YellowstoneGrpcConfigs = BaseGrpcConfigs & {
|
|
240
|
+
client?: 'yellowstone';
|
|
241
|
+
channelOptions?: ConstructorParameters<typeof Client>[2];
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
export type LaserGrpcConfigs = BaseGrpcConfigs & {
|
|
245
|
+
client: 'laser';
|
|
246
|
+
channelOptions?: LaserstreamConfig['channelOptions'];
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
export type GrpcConfigs = YellowstoneGrpcConfigs | LaserGrpcConfigs;
|
|
250
|
+
|
|
241
251
|
export interface HighLeverageModeConfigAccountSubscriber {
|
|
242
252
|
eventEmitter: StrictEventEmitter<
|
|
243
253
|
EventEmitter,
|
|
@@ -121,5 +121,7 @@ export async function createClient(
|
|
|
121
121
|
...args: ConstructorParameters<typeof Client>
|
|
122
122
|
): Promise<Client> {
|
|
123
123
|
const { default: Client_ } = await import('@triton-one/yellowstone-grpc');
|
|
124
|
-
|
|
124
|
+
const client = new Client_(...args);
|
|
125
|
+
await client.connect();
|
|
126
|
+
return client;
|
|
125
127
|
}
|