@velocity-exchange/sdk 0.4.0 → 0.6.0
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/README.md +3 -3
- package/lib/browser/adminClient.d.ts +35 -0
- package/lib/browser/adminClient.js +65 -0
- package/lib/browser/config.js +6 -7
- package/lib/browser/constants/numericConstants.d.ts +1 -1
- package/lib/browser/constants/numericConstants.js +1 -1
- package/lib/browser/decode/user.js +5 -1
- package/lib/browser/idl/velocity.d.ts +146 -3
- package/lib/browser/idl/velocity.json +147 -4
- package/lib/browser/orderSubscriber/OrderSubscriber.js +3 -0
- package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
- package/lib/browser/types.d.ts +4 -0
- package/lib/browser/user.d.ts +15 -0
- package/lib/browser/user.js +37 -1
- package/lib/browser/velocityClient.d.ts +46 -10
- package/lib/browser/velocityClient.js +107 -35
- package/lib/node/adminClient.d.ts +35 -0
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +65 -0
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +6 -7
- package/lib/node/constants/numericConstants.d.ts +1 -1
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +1 -1
- package/lib/node/decode/user.d.ts.map +1 -1
- package/lib/node/decode/user.js +5 -1
- package/lib/node/idl/velocity.d.ts +146 -3
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +147 -4
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +3 -0
- package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +37 -27
- package/lib/node/types.d.ts +4 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +15 -0
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +37 -1
- package/lib/node/velocityClient.d.ts +46 -10
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +107 -35
- package/package.json +7 -3
- package/.prettierignore +0 -1
- package/CHANGELOG.md +0 -132
- package/build-browser.js +0 -58
- package/bunfig.toml +0 -3
- package/esbuild-shims.js +0 -12
- package/scripts/deposit-isolated-positions.ts +0 -110
- package/scripts/find-flagged-users.ts +0 -213
- package/scripts/grpc-client-test-comparison.ts +0 -372
- package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
- package/scripts/postbuild.js +0 -95
- package/scripts/single-grpc-client-test.ts +0 -284
- package/scripts/withdraw-isolated-positions.ts +0 -174
- package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
- package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
- package/src/accounts/basicUserAccountSubscriber.ts +0 -79
- package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
- package/src/accounts/bulkAccountLoader.ts +0 -358
- package/src/accounts/bulkUserStatsSubscription.ts +0 -40
- package/src/accounts/bulkUserSubscription.ts +0 -39
- package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
- package/src/accounts/fetch.ts +0 -200
- package/src/accounts/grpcAccountSubscriber.ts +0 -225
- package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
- package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
- package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
- package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
- package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
- package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
- package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
- package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
- package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
- package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
- package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
- package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
- package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
- package/src/accounts/testBulkAccountLoader.ts +0 -59
- package/src/accounts/types.ts +0 -428
- package/src/accounts/utils.ts +0 -90
- package/src/accounts/webSocketAccountSubscriber.ts +0 -304
- package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
- package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
- package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
- package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
- package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
- package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
- package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
- package/src/addresses/marketAddresses.ts +0 -28
- package/src/addresses/pda.ts +0 -620
- package/src/adminClient.ts +0 -8136
- package/src/assert/assert.ts +0 -5
- package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
- package/src/auctionSubscriber/index.ts +0 -9
- package/src/auctionSubscriber/types.ts +0 -30
- package/src/bankrun/bankrunConnection.ts +0 -630
- package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
- package/src/blockhashSubscriber/index.ts +0 -6
- package/src/blockhashSubscriber/types.ts +0 -13
- package/src/clock/clockSubscriber.ts +0 -146
- package/src/config.ts +0 -312
- package/src/constants/index.ts +0 -9
- package/src/constants/numericConstants.ts +0 -194
- package/src/constants/perpMarkets.ts +0 -127
- package/src/constants/spotMarkets.ts +0 -104
- package/src/constants/txConstants.ts +0 -2
- package/src/constituentMap/constituentMap.ts +0 -305
- package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
- package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
- package/src/core/VelocityCore.ts +0 -606
- package/src/core/index.ts +0 -12
- package/src/core/instructions/deposit.ts +0 -64
- package/src/core/instructions/fill.ts +0 -51
- package/src/core/instructions/funding.ts +0 -33
- package/src/core/instructions/liquidation.ts +0 -55
- package/src/core/instructions/orders.ts +0 -84
- package/src/core/instructions/perpOrders.ts +0 -312
- package/src/core/instructions/settlement.ts +0 -40
- package/src/core/instructions/trigger.ts +0 -41
- package/src/core/instructions/withdraw.ts +0 -65
- package/src/core/remainingAccounts.ts +0 -320
- package/src/core/signedMsg.ts +0 -109
- package/src/decode/customCoder.ts +0 -148
- package/src/decode/user.ts +0 -401
- package/src/dlob/DLOB.ts +0 -2793
- package/src/dlob/DLOBNode.ts +0 -305
- package/src/dlob/DLOBSubscriber.ts +0 -269
- package/src/dlob/NodeList.ts +0 -244
- package/src/dlob/orderBookLevels.ts +0 -695
- package/src/dlob/types.ts +0 -37
- package/src/events/eventList.ts +0 -114
- package/src/events/eventSubscriber.ts +0 -521
- package/src/events/eventsServerLogProvider.ts +0 -189
- package/src/events/fetchLogs.ts +0 -219
- package/src/events/parse.ts +0 -271
- package/src/events/pollingLogProvider.ts +0 -113
- package/src/events/sort.ts +0 -51
- package/src/events/txEventCache.ts +0 -92
- package/src/events/types.ts +0 -337
- package/src/events/webSocketLogProvider.ts +0 -152
- package/src/factory/bigNum.ts +0 -709
- package/src/factory/oracleClient.ts +0 -73
- package/src/idl/pyth.json +0 -142
- package/src/idl/pyth.ts +0 -97
- package/src/idl/pyth_solana_receiver.json +0 -628
- package/src/idl/token_faucet.json +0 -229
- package/src/idl/token_faucet.ts +0 -197
- package/src/idl/velocity.json +0 -23974
- package/src/idl/velocity.ts +0 -23980
- package/src/index.ts +0 -150
- package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
- package/src/isomorphic/README.md +0 -19
- package/src/isomorphic/anchor.browser.ts +0 -44
- package/src/isomorphic/anchor.node.ts +0 -1
- package/src/isomorphic/anchor.ts +0 -1
- package/src/isomorphic/anchor29.browser.ts +0 -24
- package/src/isomorphic/anchor29.node.ts +0 -1
- package/src/isomorphic/anchor29.ts +0 -1
- package/src/isomorphic/grpc.browser.ts +0 -4
- package/src/isomorphic/grpc.node.ts +0 -130
- package/src/isomorphic/grpc.ts +0 -1
- package/src/jupiter/jupiterClient.ts +0 -502
- package/src/keypair.ts +0 -32
- package/src/margin/README.md +0 -138
- package/src/marginCalculation.ts +0 -407
- package/src/marinade/idl/idl.json +0 -1962
- package/src/marinade/index.ts +0 -73
- package/src/marinade/types.ts +0 -3925
- package/src/math/amm.ts +0 -1758
- package/src/math/auction.ts +0 -480
- package/src/math/bankruptcy.ts +0 -138
- package/src/math/builder.ts +0 -130
- package/src/math/conversion.ts +0 -45
- package/src/math/exchangeStatus.ts +0 -261
- package/src/math/funding.ts +0 -498
- package/src/math/insurance.ts +0 -171
- package/src/math/liquidation.ts +0 -433
- package/src/math/margin.ts +0 -327
- package/src/math/market.ts +0 -487
- package/src/math/oracles.ts +0 -477
- package/src/math/orders.ts +0 -500
- package/src/math/position.ts +0 -381
- package/src/math/repeg.ts +0 -223
- package/src/math/spotBalance.ts +0 -996
- package/src/math/spotMarket.ts +0 -115
- package/src/math/spotPosition.ts +0 -263
- package/src/math/state.ts +0 -71
- package/src/math/superStake.ts +0 -602
- package/src/math/tiers.ts +0 -73
- package/src/math/trade.ts +0 -879
- package/src/math/utils.ts +0 -183
- package/src/memcmp.ts +0 -279
- package/src/oracles/oracleClientCache.ts +0 -41
- package/src/oracles/oracleId.ts +0 -99
- package/src/oracles/prelaunchOracleClient.ts +0 -63
- package/src/oracles/pythClient.ts +0 -125
- package/src/oracles/pythLazerClient.ts +0 -141
- package/src/oracles/quoteAssetOracleClient.ts +0 -43
- package/src/oracles/strictOraclePrice.ts +0 -40
- package/src/oracles/types.ts +0 -82
- package/src/oracles/utils.ts +0 -45
- package/src/orderParams.ts +0 -117
- package/src/orderSubscriber/OrderSubscriber.ts +0 -378
- package/src/orderSubscriber/PollingSubscription.ts +0 -50
- package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
- package/src/orderSubscriber/grpcSubscription.ts +0 -155
- package/src/orderSubscriber/index.ts +0 -7
- package/src/orderSubscriber/types.ts +0 -64
- package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
- package/src/priorityFee/averageStrategy.ts +0 -13
- package/src/priorityFee/ewmaStrategy.ts +0 -51
- package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
- package/src/priorityFee/index.ts +0 -16
- package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
- package/src/priorityFee/maxStrategy.ts +0 -8
- package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
- package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
- package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
- package/src/priorityFee/types.ts +0 -82
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
- package/src/pyth/constants.ts +0 -9
- package/src/pyth/index.ts +0 -15
- package/src/pyth/pythLazerSubscriber.ts +0 -365
- package/src/pyth/types.ts +0 -4451
- package/src/pyth/utils.ts +0 -13
- package/src/slot/SlotSubscriber.ts +0 -126
- package/src/slot/SlothashSubscriber.ts +0 -163
- package/src/swap/UnifiedSwapClient.ts +0 -315
- package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
- package/src/swift/index.ts +0 -10
- package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
- package/src/swift/swiftOrderSubscriber.ts +0 -351
- package/src/testClient.ts +0 -42
- package/src/titan/titanClient.ts +0 -438
- package/src/token/index.ts +0 -13
- package/src/tokenFaucet.ts +0 -296
- package/src/tx/baseTxSender.ts +0 -651
- package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
- package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
- package/src/tx/blockhashFetcher/types.ts +0 -9
- package/src/tx/fastSingleTxSender.ts +0 -200
- package/src/tx/forwardOnlyTxSender.ts +0 -193
- package/src/tx/priorityFeeCalculator.ts +0 -117
- package/src/tx/reportTransactionError.ts +0 -176
- package/src/tx/retryTxSender.ts +0 -177
- package/src/tx/txHandler.ts +0 -1009
- package/src/tx/txParamProcessor.ts +0 -225
- package/src/tx/types.ts +0 -117
- package/src/tx/utils.ts +0 -133
- package/src/tx/whileValidTxSender.ts +0 -377
- package/src/types.ts +0 -2575
- package/src/user.ts +0 -5316
- package/src/userConfig.ts +0 -38
- package/src/userMap/PollingSubscription.ts +0 -61
- package/src/userMap/WebsocketSubscription.ts +0 -93
- package/src/userMap/grpcSubscription.ts +0 -93
- package/src/userMap/referrerMap.ts +0 -360
- package/src/userMap/revenueShareEscrowMap.ts +0 -342
- package/src/userMap/userMap.ts +0 -784
- package/src/userMap/userMapConfig.ts +0 -82
- package/src/userMap/userStatsMap.ts +0 -393
- package/src/userName.ts +0 -37
- package/src/userStats.ts +0 -159
- package/src/userStatsConfig.ts +0 -35
- package/src/util/TransactionConfirmationManager.ts +0 -333
- package/src/util/chainClock.ts +0 -65
- package/src/util/computeUnits.ts +0 -101
- package/src/util/digest.ts +0 -33
- package/src/util/ed25519Utils.ts +0 -95
- package/src/util/promiseTimeout.ts +0 -23
- package/src/velocityClient.ts +0 -14802
- package/src/velocityClientConfig.ts +0 -119
- package/src/wallet.ts +0 -91
- package/tests/VelocityCore/builder_escrow.test.ts +0 -121
- package/tests/VelocityCore/decode.test.ts +0 -16
- package/tests/VelocityCore/fill_trigger.test.ts +0 -73
- package/tests/VelocityCore/instructions.test.ts +0 -46
- package/tests/VelocityCore/pdas.test.ts +0 -30
- package/tests/VelocityCore/perp_orders.test.ts +0 -205
- package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
- package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
- package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
- package/tests/amm/test.ts +0 -2402
- package/tests/auctions/test.ts +0 -81
- package/tests/bn/test.ts +0 -355
- package/tests/builder/builderFee.test.ts +0 -42
- package/tests/ci/verifyConstants.ts +0 -393
- package/tests/decode/test.ts +0 -262
- package/tests/decode/userAccountBufferStrings.ts +0 -102
- package/tests/dlob/helpers.ts +0 -748
- package/tests/dlob/test.ts +0 -6969
- package/tests/dlob/tickSizeStandardization.ts +0 -545
- package/tests/events/parseLogsForCuUsage.ts +0 -139
- package/tests/exchangeStatus/test.ts +0 -45
- package/tests/insurance/test.ts +0 -40
- package/tests/liquidation/test.ts +0 -125
- package/tests/oracles/mmOracleGate.test.ts +0 -379
- package/tests/oracles/pythPegSnap.test.ts +0 -76
- package/tests/sdkParity/enumParity.test.ts +0 -84
- package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
- package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
- package/tests/spot/test.ts +0 -281
- package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
- package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
- package/tests/tx/priorityFeeCalculator.ts +0 -77
- package/tests/tx/priorityFeeStrategy.ts +0 -95
- package/tests/user/bankruptcy.ts +0 -165
- package/tests/user/feeAndWithdrawLimits.ts +0 -284
- package/tests/user/getMarginCalculation.ts +0 -586
- package/tests/user/helpers.ts +0 -184
- package/tests/user/liquidations.ts +0 -129
- package/tests/user/marginCalculations.test.ts +0 -321
- package/tests/user/test.ts +0 -833
- package/tsconfig.browser.json +0 -18
- package/tsconfig.json +0 -36
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { ResubOpts, GrpcConfigs } from './types';
|
|
2
|
-
import { PublicKey } from '@solana/web3.js';
|
|
3
|
-
import { UserStatsAccount } from '../types';
|
|
4
|
-
import { WebSocketUserStatsAccountSubscriber } from './webSocketUserStatsAccountSubsriber';
|
|
5
|
-
import { grpcAccountSubscriber } from './grpcAccountSubscriber';
|
|
6
|
-
import { VelocityProgram } from '../config';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* `UserStatsAccountSubscriber` variant of `WebSocketUserStatsAccountSubscriber` that tracks the
|
|
10
|
-
* `UserStatsAccount` via a `grpcAccountSubscriber` (gRPC Geyser stream) instead of `connection.onAccountChange`.
|
|
11
|
-
*/
|
|
12
|
-
export class grpcUserStatsAccountSubscriber extends WebSocketUserStatsAccountSubscriber {
|
|
13
|
-
private grpcConfigs: GrpcConfigs;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* @param grpcConfigs gRPC Geyser endpoint/token/commitment config (Yellowstone or LaserStream).
|
|
17
|
-
* @param program Anchor program providing the connection and coder.
|
|
18
|
-
* @param userStatsAccountPublicKey Address of the `UserStatsAccount` to track.
|
|
19
|
-
* @param resubOpts Resubscription watchdog options passed to the underlying `grpcAccountSubscriber`.
|
|
20
|
-
*/
|
|
21
|
-
public constructor(
|
|
22
|
-
grpcConfigs: GrpcConfigs,
|
|
23
|
-
program: VelocityProgram,
|
|
24
|
-
userStatsAccountPublicKey: PublicKey,
|
|
25
|
-
resubOpts?: ResubOpts
|
|
26
|
-
) {
|
|
27
|
-
super(program, userStatsAccountPublicKey, resubOpts);
|
|
28
|
-
this.grpcConfigs = grpcConfigs;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Creates the underlying `grpcAccountSubscriber` and subscribes it. Idempotent: a no-op
|
|
33
|
-
* (returns `true`) if already subscribed.
|
|
34
|
-
* @param userStatsAccount Optional pre-fetched account data to seed the subscriber with, skipping the initial RPC fetch.
|
|
35
|
-
*/
|
|
36
|
-
async subscribe(userStatsAccount?: UserStatsAccount): Promise<boolean> {
|
|
37
|
-
if (this.isSubscribed) {
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
this.userStatsAccountSubscriber = await grpcAccountSubscriber.create(
|
|
42
|
-
this.grpcConfigs,
|
|
43
|
-
'userStats',
|
|
44
|
-
this.program,
|
|
45
|
-
this.userStatsAccountPublicKey,
|
|
46
|
-
undefined,
|
|
47
|
-
this.resubOpts
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
if (userStatsAccount) {
|
|
51
|
-
this.userStatsAccountSubscriber.setData(userStatsAccount);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
await this.userStatsAccountSubscriber.subscribe(
|
|
55
|
-
(data: UserStatsAccount) => {
|
|
56
|
-
this.eventEmitter.emit('userStatsAccountUpdate', data);
|
|
57
|
-
this.eventEmitter.emit('update');
|
|
58
|
-
}
|
|
59
|
-
);
|
|
60
|
-
|
|
61
|
-
this.eventEmitter.emit('update');
|
|
62
|
-
this.isSubscribed = true;
|
|
63
|
-
return true;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
import { WebSocketVelocityClientAccountSubscriber } from './webSocketVelocityClientAccountSubscriber';
|
|
2
|
-
import { OracleInfo, OraclePriceData } from '../oracles/types';
|
|
3
|
-
import { findAllMarketAndOracles, VelocityProgram } from '../config';
|
|
4
|
-
import {
|
|
5
|
-
getVelocityStateAccountPublicKey,
|
|
6
|
-
getPerpMarketPublicKey,
|
|
7
|
-
getSpotMarketPublicKey,
|
|
8
|
-
} from '../addresses/pda';
|
|
9
|
-
import { DelistedMarketSetting, GrpcConfigs, ResubOpts } from './types';
|
|
10
|
-
import { grpcAccountSubscriber } from './grpcAccountSubscriber';
|
|
11
|
-
import { PerpMarketAccount, SpotMarketAccount, StateAccount } from '../types';
|
|
12
|
-
import { getOracleId } from '../oracles/oracleId';
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* `VelocityClientAccountSubscriber` variant of `WebSocketVelocityClientAccountSubscriber` that
|
|
16
|
-
* subscribes each per-account subscriber via `grpcAccountSubscriber.create` (gRPC Geyser stream)
|
|
17
|
-
* instead of `connection.onAccountChange`. Reuses the parent class's `setInitialData`/oracle-map/
|
|
18
|
-
* delisted-market logic verbatim; only the account-subscription creation is overridden.
|
|
19
|
-
*/
|
|
20
|
-
export class grpcVelocityClientAccountSubscriber extends WebSocketVelocityClientAccountSubscriber {
|
|
21
|
-
private grpcConfigs: GrpcConfigs;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* @param grpcConfigs gRPC Geyser endpoint/token/commitment config (Yellowstone or LaserStream).
|
|
25
|
-
* @param program Anchor program used to derive PDAs, decode accounts, and resolve oracle clients.
|
|
26
|
-
* @param perpMarketIndexes Perp market indexes to track, if `shouldFindAllMarketsAndOracles` is false.
|
|
27
|
-
* @param spotMarketIndexes Spot market indexes to track, if `shouldFindAllMarketsAndOracles` is false.
|
|
28
|
-
* @param oracleInfos Oracles to track up front, if `shouldFindAllMarketsAndOracles` is false.
|
|
29
|
-
* @param shouldFindAllMarketsAndOracles If true, `subscribe()` first discovers every market/oracle from on-chain state.
|
|
30
|
-
* @param delistedMarketSetting Behavior applied to delisted perp markets/oracles after subscribing.
|
|
31
|
-
* @param resubOpts Resubscription watchdog options passed to every per-account subscriber.
|
|
32
|
-
*/
|
|
33
|
-
constructor(
|
|
34
|
-
grpcConfigs: GrpcConfigs,
|
|
35
|
-
program: VelocityProgram,
|
|
36
|
-
perpMarketIndexes: number[],
|
|
37
|
-
spotMarketIndexes: number[],
|
|
38
|
-
oracleInfos: OracleInfo[],
|
|
39
|
-
shouldFindAllMarketsAndOracles: boolean,
|
|
40
|
-
delistedMarketSetting: DelistedMarketSetting,
|
|
41
|
-
resubOpts?: ResubOpts
|
|
42
|
-
) {
|
|
43
|
-
super(
|
|
44
|
-
program,
|
|
45
|
-
perpMarketIndexes,
|
|
46
|
-
spotMarketIndexes,
|
|
47
|
-
oracleInfos,
|
|
48
|
-
shouldFindAllMarketsAndOracles,
|
|
49
|
-
delistedMarketSetting,
|
|
50
|
-
resubOpts
|
|
51
|
-
);
|
|
52
|
-
this.grpcConfigs = grpcConfigs;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Subscribes the `State` account via gRPC, batch-seeds all market/oracle accounts via
|
|
57
|
-
* `setInitialData()` (inherited RPC-based batch fetch), then subscribes every per-account gRPC
|
|
58
|
-
* subscriber for perp markets, spot markets, and oracles. Applies `delistedMarketSetting`
|
|
59
|
-
* afterward. Idempotent: a no-op if already subscribed, and concurrent calls while a subscribe
|
|
60
|
-
* is in flight share the same result via `subscriptionPromise`.
|
|
61
|
-
*/
|
|
62
|
-
public async subscribe(): Promise<boolean> {
|
|
63
|
-
if (this.isSubscribed) {
|
|
64
|
-
return true;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
if (this.isSubscribing) {
|
|
68
|
-
return await this.subscriptionPromise;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
this.isSubscribing = true;
|
|
72
|
-
|
|
73
|
-
this.subscriptionPromise = new Promise((res) => {
|
|
74
|
-
this.subscriptionPromiseResolver = res;
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
if (this.shouldFindAllMarketsAndOracles) {
|
|
78
|
-
const {
|
|
79
|
-
perpMarketIndexes,
|
|
80
|
-
perpMarketAccounts,
|
|
81
|
-
spotMarketIndexes,
|
|
82
|
-
spotMarketAccounts,
|
|
83
|
-
oracleInfos,
|
|
84
|
-
} = await findAllMarketAndOracles(this.program);
|
|
85
|
-
this.perpMarketIndexes = perpMarketIndexes;
|
|
86
|
-
this.spotMarketIndexes = spotMarketIndexes;
|
|
87
|
-
this.oracleInfos = oracleInfos;
|
|
88
|
-
// front run and set the initial data here to save extra gma call in set initial data
|
|
89
|
-
this.initialPerpMarketAccountData = new Map(
|
|
90
|
-
perpMarketAccounts.map((market) => [market.marketIndex, market])
|
|
91
|
-
);
|
|
92
|
-
this.initialSpotMarketAccountData = new Map(
|
|
93
|
-
spotMarketAccounts.map((market) => [market.marketIndex, market])
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const statePublicKey = await getVelocityStateAccountPublicKey(
|
|
98
|
-
this.program.programId
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
// create and activate main state account subscription
|
|
102
|
-
this.stateAccountSubscriber =
|
|
103
|
-
await grpcAccountSubscriber.create<StateAccount>(
|
|
104
|
-
this.grpcConfigs,
|
|
105
|
-
'state',
|
|
106
|
-
this.program,
|
|
107
|
-
statePublicKey,
|
|
108
|
-
undefined,
|
|
109
|
-
undefined
|
|
110
|
-
);
|
|
111
|
-
await this.stateAccountSubscriber.subscribe((data: StateAccount) => {
|
|
112
|
-
this.eventEmitter.emit('stateAccountUpdate', data);
|
|
113
|
-
this.eventEmitter.emit('update');
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
// set initial data to avoid spamming getAccountInfo calls in webSocketAccountSubscriber
|
|
117
|
-
await this.setInitialData();
|
|
118
|
-
|
|
119
|
-
await Promise.all([
|
|
120
|
-
// subscribe to market accounts
|
|
121
|
-
this.subscribeToPerpMarketAccounts(),
|
|
122
|
-
// subscribe to spot market accounts
|
|
123
|
-
this.subscribeToSpotMarketAccounts(),
|
|
124
|
-
// subscribe to oracles
|
|
125
|
-
this.subscribeToOracles(),
|
|
126
|
-
]);
|
|
127
|
-
|
|
128
|
-
this.eventEmitter.emit('update');
|
|
129
|
-
|
|
130
|
-
await this.handleDelistedMarkets();
|
|
131
|
-
|
|
132
|
-
await Promise.all([this.setPerpOracleMap(), this.setSpotOracleMap()]);
|
|
133
|
-
|
|
134
|
-
this.subscriptionPromiseResolver(true);
|
|
135
|
-
|
|
136
|
-
this.isSubscribing = false;
|
|
137
|
-
this.isSubscribed = true;
|
|
138
|
-
|
|
139
|
-
// delete initial data
|
|
140
|
-
this.removeInitialData();
|
|
141
|
-
|
|
142
|
-
return true;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Creates and subscribes a `grpcAccountSubscriber` for one spot market, seeding it from
|
|
147
|
-
* `initialSpotMarketAccountData` if available.
|
|
148
|
-
* @param marketIndex Spot market index to subscribe.
|
|
149
|
-
*/
|
|
150
|
-
override async subscribeToSpotMarketAccount(
|
|
151
|
-
marketIndex: number
|
|
152
|
-
): Promise<boolean> {
|
|
153
|
-
const marketPublicKey = await getSpotMarketPublicKey(
|
|
154
|
-
this.program.programId,
|
|
155
|
-
marketIndex
|
|
156
|
-
);
|
|
157
|
-
const accountSubscriber =
|
|
158
|
-
await grpcAccountSubscriber.create<SpotMarketAccount>(
|
|
159
|
-
this.grpcConfigs,
|
|
160
|
-
'spotMarket',
|
|
161
|
-
this.program,
|
|
162
|
-
marketPublicKey,
|
|
163
|
-
undefined,
|
|
164
|
-
this.resubOpts
|
|
165
|
-
);
|
|
166
|
-
const initialSpotMarketData =
|
|
167
|
-
this.initialSpotMarketAccountData?.get(marketIndex);
|
|
168
|
-
if (initialSpotMarketData) {
|
|
169
|
-
accountSubscriber.setData(initialSpotMarketData);
|
|
170
|
-
}
|
|
171
|
-
await accountSubscriber.subscribe((data: SpotMarketAccount) => {
|
|
172
|
-
this.eventEmitter.emit('spotMarketAccountUpdate', data);
|
|
173
|
-
this.eventEmitter.emit('update');
|
|
174
|
-
});
|
|
175
|
-
this.spotMarketAccountSubscribers.set(marketIndex, accountSubscriber);
|
|
176
|
-
return true;
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
/**
|
|
180
|
-
* Creates and subscribes a `grpcAccountSubscriber` for one perp market, seeding it from
|
|
181
|
-
* `initialPerpMarketAccountData` if available. Unlike the parent class's WebSocket variant,
|
|
182
|
-
* does not call `ensureAccountFetched` — the gRPC subscriber's own initial `fetch()` (inside
|
|
183
|
-
* `subscribe`) is relied on directly.
|
|
184
|
-
* @param marketIndex Perp market index to subscribe.
|
|
185
|
-
*/
|
|
186
|
-
async subscribeToPerpMarketAccount(marketIndex: number): Promise<boolean> {
|
|
187
|
-
const perpMarketPublicKey = await getPerpMarketPublicKey(
|
|
188
|
-
this.program.programId,
|
|
189
|
-
marketIndex
|
|
190
|
-
);
|
|
191
|
-
const accountSubscriber =
|
|
192
|
-
await grpcAccountSubscriber.create<PerpMarketAccount>(
|
|
193
|
-
this.grpcConfigs,
|
|
194
|
-
'perpMarket',
|
|
195
|
-
this.program,
|
|
196
|
-
perpMarketPublicKey,
|
|
197
|
-
undefined,
|
|
198
|
-
this.resubOpts
|
|
199
|
-
);
|
|
200
|
-
const initialPerpMarketData =
|
|
201
|
-
this.initialPerpMarketAccountData?.get(marketIndex);
|
|
202
|
-
if (initialPerpMarketData) {
|
|
203
|
-
accountSubscriber.setData(initialPerpMarketData);
|
|
204
|
-
}
|
|
205
|
-
await accountSubscriber.subscribe((data: PerpMarketAccount) => {
|
|
206
|
-
this.eventEmitter.emit('perpMarketAccountUpdate', data);
|
|
207
|
-
this.eventEmitter.emit('update');
|
|
208
|
-
});
|
|
209
|
-
this.perpMarketAccountSubscribers.set(marketIndex, accountSubscriber);
|
|
210
|
-
return true;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
/**
|
|
214
|
-
* Creates and subscribes a `grpcAccountSubscriber` for one oracle, decoding buffers with the
|
|
215
|
-
* source-appropriate `OracleClient`. Seeds from `initialOraclePriceData` if available.
|
|
216
|
-
* @param oracleInfo Oracle pubkey and source to subscribe.
|
|
217
|
-
* @returns `false` if no `OracleClient` is registered for `oracleInfo.source`; otherwise `true`.
|
|
218
|
-
*/
|
|
219
|
-
async subscribeToOracle(oracleInfo: OracleInfo): Promise<boolean> {
|
|
220
|
-
const oracleId = getOracleId(oracleInfo.publicKey, oracleInfo.source);
|
|
221
|
-
const client = this.oracleClientCache.get(
|
|
222
|
-
oracleInfo.source,
|
|
223
|
-
this.program.provider.connection,
|
|
224
|
-
this.program
|
|
225
|
-
);
|
|
226
|
-
if (!client) {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
const accountSubscriber =
|
|
230
|
-
await grpcAccountSubscriber.create<OraclePriceData>(
|
|
231
|
-
this.grpcConfigs,
|
|
232
|
-
'oracle',
|
|
233
|
-
this.program,
|
|
234
|
-
oracleInfo.publicKey,
|
|
235
|
-
(buffer: Buffer) => {
|
|
236
|
-
return client.getOraclePriceDataFromBuffer(buffer);
|
|
237
|
-
},
|
|
238
|
-
this.resubOpts
|
|
239
|
-
);
|
|
240
|
-
const initialOraclePriceData = this.initialOraclePriceData?.get(oracleId);
|
|
241
|
-
if (initialOraclePriceData) {
|
|
242
|
-
accountSubscriber.setData(initialOraclePriceData);
|
|
243
|
-
}
|
|
244
|
-
await accountSubscriber.subscribe((data: OraclePriceData) => {
|
|
245
|
-
this.eventEmitter.emit(
|
|
246
|
-
'oraclePriceUpdate',
|
|
247
|
-
oracleInfo.publicKey,
|
|
248
|
-
oracleInfo.source,
|
|
249
|
-
data
|
|
250
|
-
);
|
|
251
|
-
this.eventEmitter.emit('update');
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
this.oracleSubscribers.set(oracleId, accountSubscriber);
|
|
255
|
-
return true;
|
|
256
|
-
}
|
|
257
|
-
}
|