@velocity-exchange/sdk 0.4.0 → 0.6.1
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 +52 -0
- package/lib/browser/adminClient.js +97 -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 +191 -15
- package/lib/browser/idl/velocity.json +192 -16
- package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/browser/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
- package/lib/browser/types.d.ts +6 -0
- package/lib/browser/user.d.ts +20 -3
- package/lib/browser/user.js +52 -4
- package/lib/browser/velocityClient.d.ts +46 -10
- package/lib/browser/velocityClient.js +107 -35
- package/lib/node/adminClient.d.ts +52 -0
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +97 -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 +191 -15
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +192 -16
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -0
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +10 -4
- package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +37 -27
- package/lib/node/types.d.ts +6 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +20 -3
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +52 -4
- 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,342 +0,0 @@
|
|
|
1
|
-
import { PublicKey, RpcResponseAndContext } from '@solana/web3.js';
|
|
2
|
-
import { VelocityClient } from '../velocityClient';
|
|
3
|
-
import { RevenueShareEscrowAccount } from '../types';
|
|
4
|
-
import { getRevenueShareEscrowAccountPublicKey } from '../addresses/pda';
|
|
5
|
-
import { getRevenueShareEscrowFilter } from '../memcmp';
|
|
6
|
-
|
|
7
|
-
/** In-memory cache mapping each authority to their `RevenueShareEscrow` account (builder/referral fee accrual escrow). */
|
|
8
|
-
export class RevenueShareEscrowMap {
|
|
9
|
-
/**
|
|
10
|
-
* map from authority pubkey to RevenueShareEscrow account data.
|
|
11
|
-
*/
|
|
12
|
-
private authorityEscrowMap = new Map<string, RevenueShareEscrowAccount>();
|
|
13
|
-
private velocityClient: VelocityClient;
|
|
14
|
-
private parallelSync: boolean;
|
|
15
|
-
|
|
16
|
-
private fetchPromise?: Promise<void>;
|
|
17
|
-
private fetchPromiseResolver: () => void = () => {};
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Creates a new RevenueShareEscrowMap instance.
|
|
21
|
-
*
|
|
22
|
-
* @param {VelocityClient} velocityClient - The VelocityClient instance.
|
|
23
|
-
* @param {boolean} parallelSync - Whether to sync accounts in parallel.
|
|
24
|
-
*/
|
|
25
|
-
constructor(velocityClient: VelocityClient, parallelSync?: boolean) {
|
|
26
|
-
this.velocityClient = velocityClient;
|
|
27
|
-
this.parallelSync = parallelSync !== undefined ? parallelSync : true;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Populates the map via a one-time `sync()` (no-op if already populated).
|
|
32
|
-
* There is no live/push subscription here — call `sync()`/`slowSync()`
|
|
33
|
-
* again later to pick up new or updated escrow accounts.
|
|
34
|
-
*/
|
|
35
|
-
public async subscribe() {
|
|
36
|
-
if (this.size() > 0) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
await this.velocityClient.subscribe();
|
|
41
|
-
await this.sync();
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/** Returns true if `authorityPublicKey` has a `RevenueShareEscrow` account cached in the map. */
|
|
45
|
-
public has(authorityPublicKey: string): boolean {
|
|
46
|
-
return this.authorityEscrowMap.has(authorityPublicKey);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Returns the cached `RevenueShareEscrowAccount` for `authorityPublicKey`, or `undefined` if not (yet) in the map. */
|
|
50
|
-
public get(
|
|
51
|
-
authorityPublicKey: string
|
|
52
|
-
): RevenueShareEscrowAccount | undefined {
|
|
53
|
-
return this.authorityEscrowMap.get(authorityPublicKey);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/**
|
|
57
|
-
* Enforce that a RevenueShareEscrow will exist for the given authorityPublicKey,
|
|
58
|
-
* reading one from the blockchain if necessary.
|
|
59
|
-
* @param authorityPublicKey
|
|
60
|
-
* @returns
|
|
61
|
-
*/
|
|
62
|
-
public async mustGet(
|
|
63
|
-
authorityPublicKey: string
|
|
64
|
-
): Promise<RevenueShareEscrowAccount | undefined> {
|
|
65
|
-
if (!this.has(authorityPublicKey)) {
|
|
66
|
-
await this.addRevenueShareEscrow(authorityPublicKey);
|
|
67
|
-
}
|
|
68
|
-
return this.get(authorityPublicKey);
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Fetches and decodes `authority`'s `RevenueShareEscrow` account directly
|
|
73
|
-
* via RPC and caches it. If the account does not exist (a normal condition
|
|
74
|
-
* — not every authority has an escrow), logs a debug message and leaves the
|
|
75
|
-
* map entry absent rather than throwing.
|
|
76
|
-
*/
|
|
77
|
-
public async addRevenueShareEscrow(authority: string) {
|
|
78
|
-
const escrowAccountPublicKey = getRevenueShareEscrowAccountPublicKey(
|
|
79
|
-
this.velocityClient.program.programId,
|
|
80
|
-
new PublicKey(authority)
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
const accountInfo = await this.velocityClient.connection.getAccountInfo(
|
|
85
|
-
escrowAccountPublicKey,
|
|
86
|
-
'processed'
|
|
87
|
-
);
|
|
88
|
-
|
|
89
|
-
if (accountInfo && accountInfo.data) {
|
|
90
|
-
const escrow = (
|
|
91
|
-
this.velocityClient.program.account as any
|
|
92
|
-
).revenueShareEscrow.coder.accounts.decode(
|
|
93
|
-
'revenueShareEscrow',
|
|
94
|
-
accountInfo.data
|
|
95
|
-
) as RevenueShareEscrowAccount;
|
|
96
|
-
|
|
97
|
-
this.authorityEscrowMap.set(authority, escrow);
|
|
98
|
-
}
|
|
99
|
-
} catch (error) {
|
|
100
|
-
// RevenueShareEscrow account doesn't exist for this authority, which is normal
|
|
101
|
-
console.debug(
|
|
102
|
-
`No RevenueShareEscrow account found for authority: ${authority}`
|
|
103
|
-
);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/** Number of `RevenueShareEscrow` accounts currently cached in the map. */
|
|
108
|
-
public size(): number {
|
|
109
|
-
return this.authorityEscrowMap.size;
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/** Fully (re)populates the map via `syncAll` (a `getProgramAccounts` scan). Concurrent calls share the same in-flight promise. */
|
|
113
|
-
public async sync(): Promise<void> {
|
|
114
|
-
if (this.fetchPromise) {
|
|
115
|
-
return this.fetchPromise;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
this.fetchPromise = new Promise((resolver) => {
|
|
119
|
-
this.fetchPromiseResolver = resolver;
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
try {
|
|
123
|
-
await this.syncAll();
|
|
124
|
-
} finally {
|
|
125
|
-
this.fetchPromiseResolver();
|
|
126
|
-
this.fetchPromise = undefined;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
/**
|
|
131
|
-
* A slow, bankrun test friendly version of sync(), uses getAccountInfo on every cached account to refresh data
|
|
132
|
-
* @returns
|
|
133
|
-
*/
|
|
134
|
-
public async slowSync(): Promise<void> {
|
|
135
|
-
if (this.fetchPromise) {
|
|
136
|
-
return this.fetchPromise;
|
|
137
|
-
}
|
|
138
|
-
for (const authority of this.authorityEscrowMap.keys()) {
|
|
139
|
-
const accountInfo = await this.velocityClient.connection.getAccountInfo(
|
|
140
|
-
getRevenueShareEscrowAccountPublicKey(
|
|
141
|
-
this.velocityClient.program.programId,
|
|
142
|
-
new PublicKey(authority)
|
|
143
|
-
),
|
|
144
|
-
'confirmed'
|
|
145
|
-
);
|
|
146
|
-
if (accountInfo === null) {
|
|
147
|
-
throw new Error(
|
|
148
|
-
`RevenueShareEscrow account not found for authority ${authority} during slowSync`
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
const escrowNew = (
|
|
152
|
-
this.velocityClient.program.account as any
|
|
153
|
-
).revenueShareEscrow.coder.accounts.decode(
|
|
154
|
-
'revenueShareEscrow',
|
|
155
|
-
accountInfo.data
|
|
156
|
-
) as RevenueShareEscrowAccount;
|
|
157
|
-
this.authorityEscrowMap.set(authority, escrowNew);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
/**
|
|
162
|
-
* Fetches and decodes every `RevenueShareEscrow` program account (via
|
|
163
|
-
* `getRevenueShareEscrowFilter`), in batches of 100 with a 10ms delay
|
|
164
|
-
* between batches to avoid overwhelming the RPC, and caches them keyed by
|
|
165
|
-
* `escrow.authority`. Batch decoding runs in parallel unless constructed
|
|
166
|
-
* with `parallelSync: false`. A decode failure for one account is logged
|
|
167
|
-
* and skipped rather than aborting the whole sync.
|
|
168
|
-
*/
|
|
169
|
-
public async syncAll(): Promise<void> {
|
|
170
|
-
const rpcRequestArgs = [
|
|
171
|
-
this.velocityClient.program.programId.toBase58(),
|
|
172
|
-
{
|
|
173
|
-
commitment: this.velocityClient.opts.commitment,
|
|
174
|
-
filters: [getRevenueShareEscrowFilter()],
|
|
175
|
-
encoding: 'base64',
|
|
176
|
-
withContext: true,
|
|
177
|
-
},
|
|
178
|
-
];
|
|
179
|
-
|
|
180
|
-
const rpcJSONResponse: any =
|
|
181
|
-
// @ts-ignore
|
|
182
|
-
await this.velocityClient.connection._rpcRequest(
|
|
183
|
-
'getProgramAccounts',
|
|
184
|
-
rpcRequestArgs
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
const rpcResponseAndContext: RpcResponseAndContext<
|
|
188
|
-
Array<{
|
|
189
|
-
pubkey: string;
|
|
190
|
-
account: {
|
|
191
|
-
data: [string, string];
|
|
192
|
-
};
|
|
193
|
-
}>
|
|
194
|
-
> = rpcJSONResponse.result;
|
|
195
|
-
|
|
196
|
-
const batchSize = 100;
|
|
197
|
-
for (let i = 0; i < rpcResponseAndContext.value.length; i += batchSize) {
|
|
198
|
-
const batch = rpcResponseAndContext.value.slice(i, i + batchSize);
|
|
199
|
-
|
|
200
|
-
if (this.parallelSync) {
|
|
201
|
-
await Promise.all(
|
|
202
|
-
batch.map(async (programAccount) => {
|
|
203
|
-
try {
|
|
204
|
-
// @ts-ignore
|
|
205
|
-
const buffer = Buffer.from(
|
|
206
|
-
programAccount.account.data[0],
|
|
207
|
-
programAccount.account.data[1] as BufferEncoding
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
const escrow = (
|
|
211
|
-
this.velocityClient.program.account as any
|
|
212
|
-
).revenueShareEscrow.coder.accounts.decode(
|
|
213
|
-
'revenueShareEscrow',
|
|
214
|
-
buffer
|
|
215
|
-
) as RevenueShareEscrowAccount;
|
|
216
|
-
|
|
217
|
-
// Extract authority from the account data
|
|
218
|
-
const authorityKey = escrow.authority.toBase58();
|
|
219
|
-
this.authorityEscrowMap.set(authorityKey, escrow);
|
|
220
|
-
} catch (error) {
|
|
221
|
-
console.warn(
|
|
222
|
-
`Failed to decode RevenueShareEscrow account ${programAccount.pubkey}:`,
|
|
223
|
-
error
|
|
224
|
-
);
|
|
225
|
-
}
|
|
226
|
-
})
|
|
227
|
-
);
|
|
228
|
-
} else {
|
|
229
|
-
for (const programAccount of batch) {
|
|
230
|
-
try {
|
|
231
|
-
// @ts-ignore
|
|
232
|
-
const buffer = Buffer.from(
|
|
233
|
-
programAccount.account.data[0],
|
|
234
|
-
programAccount.account.data[1] as BufferEncoding
|
|
235
|
-
);
|
|
236
|
-
|
|
237
|
-
const escrow = (
|
|
238
|
-
this.velocityClient.program.account as any
|
|
239
|
-
).revenueShareEscrow.coder.accounts.decode(
|
|
240
|
-
'revenueShareEscrow',
|
|
241
|
-
buffer
|
|
242
|
-
) as RevenueShareEscrowAccount;
|
|
243
|
-
|
|
244
|
-
// Extract authority from the account data
|
|
245
|
-
const authorityKey = escrow.authority.toBase58();
|
|
246
|
-
this.authorityEscrowMap.set(authorityKey, escrow);
|
|
247
|
-
} catch (error) {
|
|
248
|
-
console.warn(
|
|
249
|
-
`Failed to decode RevenueShareEscrow account ${programAccount.pubkey}:`,
|
|
250
|
-
error
|
|
251
|
-
);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// Add a small delay between batches to avoid overwhelming the RPC
|
|
257
|
-
await new Promise((resolve) => setTimeout(resolve, 10));
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/** Returns a shallow copy of the full authority-to-escrow map (mutating the returned map does not affect the cache). */
|
|
262
|
-
public getAll(): Map<string, RevenueShareEscrowAccount> {
|
|
263
|
-
return new Map(this.authorityEscrowMap);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/** Returns the base58 authority pubkeys of every `RevenueShareEscrow` account currently cached. */
|
|
267
|
-
public getAuthorities(): string[] {
|
|
268
|
-
return Array.from(this.authorityEscrowMap.keys());
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* Get `RevenueShareEscrow` accounts that have at least one entry in
|
|
273
|
-
* `approvedBuilders` — builders this user has approved to charge an order
|
|
274
|
-
* fee (not "referrers": `referrer` is a separate field on the account).
|
|
275
|
-
*/
|
|
276
|
-
public getEscrowsWithApprovedReferrers(): Map<
|
|
277
|
-
string,
|
|
278
|
-
RevenueShareEscrowAccount
|
|
279
|
-
> {
|
|
280
|
-
const result = new Map<string, RevenueShareEscrowAccount>();
|
|
281
|
-
for (const [authority, escrow] of this.authorityEscrowMap) {
|
|
282
|
-
if (escrow.approvedBuilders && escrow.approvedBuilders.length > 0) {
|
|
283
|
-
result.set(authority, escrow);
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
return result;
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
/**
|
|
290
|
-
* Get `RevenueShareEscrow` accounts with at least one entry in `orders` —
|
|
291
|
-
* the ring buffer of in-flight builder/referral fee accruals not yet
|
|
292
|
-
* settled via settle-PnL.
|
|
293
|
-
*/
|
|
294
|
-
public getEscrowsWithOrders(): Map<string, RevenueShareEscrowAccount> {
|
|
295
|
-
const result = new Map<string, RevenueShareEscrowAccount>();
|
|
296
|
-
for (const [authority, escrow] of this.authorityEscrowMap) {
|
|
297
|
-
if (escrow.orders && escrow.orders.length > 0) {
|
|
298
|
-
result.set(authority, escrow);
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
return result;
|
|
302
|
-
}
|
|
303
|
-
|
|
304
|
-
/**
|
|
305
|
-
* Returns the first cached `RevenueShareEscrow` account whose `referrer`
|
|
306
|
-
* field equals `referrerPublicKey`. There is no reverse index, so this is
|
|
307
|
-
* an O(n) scan over every cached escrow; prefer `getAllByReferrer` if more
|
|
308
|
-
* than one escrow may share the same referrer.
|
|
309
|
-
*/
|
|
310
|
-
public getByReferrer(
|
|
311
|
-
referrerPublicKey: string
|
|
312
|
-
): RevenueShareEscrowAccount | undefined {
|
|
313
|
-
for (const escrow of this.authorityEscrowMap.values()) {
|
|
314
|
-
if (escrow.referrer.toBase58() === referrerPublicKey) {
|
|
315
|
-
return escrow;
|
|
316
|
-
}
|
|
317
|
-
}
|
|
318
|
-
return undefined;
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
/**
|
|
322
|
-
* Returns every cached `RevenueShareEscrow` account whose `referrer` field
|
|
323
|
-
* equals `referrerPublicKey`. O(n) scan over every cached escrow (no
|
|
324
|
-
* reverse index).
|
|
325
|
-
*/
|
|
326
|
-
public getAllByReferrer(
|
|
327
|
-
referrerPublicKey: string
|
|
328
|
-
): RevenueShareEscrowAccount[] {
|
|
329
|
-
const result: RevenueShareEscrowAccount[] = [];
|
|
330
|
-
for (const escrow of this.authorityEscrowMap.values()) {
|
|
331
|
-
if (escrow.referrer.toBase58() === referrerPublicKey) {
|
|
332
|
-
result.push(escrow);
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
return result;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
/** Clears the in-memory map. Does not tear down any RPC subscriptions (this class has none — `subscribe` only triggers a one-time sync). */
|
|
339
|
-
public async unsubscribe() {
|
|
340
|
-
this.authorityEscrowMap.clear();
|
|
341
|
-
}
|
|
342
|
-
}
|