@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,72 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { Keypair } from '@solana/web3.js';
|
|
3
|
-
import { VelocityCore } from '../../src/core/VelocityCore';
|
|
4
|
-
import { BN } from '../../src/isomorphic/anchor';
|
|
5
|
-
import type { UserAccount } from '../../src/types';
|
|
6
|
-
|
|
7
|
-
describe('VelocityCore.remainingAccounts', () => {
|
|
8
|
-
test('includes spot/perp + oracle accounts based on user positions', () => {
|
|
9
|
-
const spotMarket0 = {
|
|
10
|
-
marketIndex: 0,
|
|
11
|
-
pubkey: Keypair.generate().publicKey,
|
|
12
|
-
oracle: Keypair.generate().publicKey,
|
|
13
|
-
} as any;
|
|
14
|
-
const quoteSpotMarket = {
|
|
15
|
-
marketIndex: 0,
|
|
16
|
-
pubkey: spotMarket0.pubkey,
|
|
17
|
-
oracle: spotMarket0.oracle,
|
|
18
|
-
} as any;
|
|
19
|
-
const perpMarket0 = {
|
|
20
|
-
pubkey: Keypair.generate().publicKey,
|
|
21
|
-
quoteSpotMarketIndex: 0,
|
|
22
|
-
oracle: Keypair.generate().publicKey,
|
|
23
|
-
oracleSource: { prelaunch: {} },
|
|
24
|
-
amm: {},
|
|
25
|
-
} as any;
|
|
26
|
-
|
|
27
|
-
const user: UserAccount = {
|
|
28
|
-
authority: Keypair.generate().publicKey,
|
|
29
|
-
subAccountId: 0,
|
|
30
|
-
spotPositions: [
|
|
31
|
-
{
|
|
32
|
-
marketIndex: 0,
|
|
33
|
-
scaledBalance: new BN(1),
|
|
34
|
-
openBids: new BN(0),
|
|
35
|
-
openAsks: new BN(0),
|
|
36
|
-
cumulativeDeposits: new BN(0),
|
|
37
|
-
balanceType: { deposit: {} },
|
|
38
|
-
openOrders: 0,
|
|
39
|
-
} as any,
|
|
40
|
-
],
|
|
41
|
-
perpPositions: [
|
|
42
|
-
{
|
|
43
|
-
marketIndex: 0,
|
|
44
|
-
baseAssetAmount: new BN(1),
|
|
45
|
-
} as any,
|
|
46
|
-
],
|
|
47
|
-
} as any;
|
|
48
|
-
|
|
49
|
-
const ctx = {
|
|
50
|
-
getPerpMarketAccount: () => perpMarket0,
|
|
51
|
-
getSpotMarketAccount: () => quoteSpotMarket,
|
|
52
|
-
getUserAccountAndSlot: () => ({ slot: 0 }),
|
|
53
|
-
activeSubAccountId: 0,
|
|
54
|
-
authority: user.authority,
|
|
55
|
-
perpMarketLastSlotCache: new Map<number, number>(),
|
|
56
|
-
spotMarketLastSlotCache: new Map<number, number>(),
|
|
57
|
-
mustIncludePerpMarketIndexes: new Set<number>(),
|
|
58
|
-
mustIncludeSpotMarketIndexes: new Set<number>(),
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
const metas = VelocityCore.remainingAccounts.getRemainingAccounts(
|
|
62
|
-
ctx as any,
|
|
63
|
-
{
|
|
64
|
-
userAccounts: [user],
|
|
65
|
-
}
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
const keys = new Set(metas.map((m) => m.pubkey.toBase58()));
|
|
69
|
-
expect(keys.has(perpMarket0.pubkey.toBase58())).toBe(true);
|
|
70
|
-
expect(keys.has(perpMarket0.oracle.toBase58())).toBe(true);
|
|
71
|
-
});
|
|
72
|
-
});
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from 'bun:test';
|
|
2
|
-
import { Keypair } from '@solana/web3.js';
|
|
3
|
-
import { VelocityCore } from '../../src/core/VelocityCore';
|
|
4
|
-
|
|
5
|
-
describe('VelocityCore settlement/liquidation builders', () => {
|
|
6
|
-
test('buildSettlePnlInstruction wires args', async () => {
|
|
7
|
-
const called: any[] = [];
|
|
8
|
-
const fakeIx = {
|
|
9
|
-
keys: [],
|
|
10
|
-
programId: Keypair.generate().publicKey,
|
|
11
|
-
data: Buffer.alloc(0),
|
|
12
|
-
};
|
|
13
|
-
const program = {
|
|
14
|
-
instruction: {
|
|
15
|
-
settlePnl: async (...args: any[]) => {
|
|
16
|
-
called.push(args);
|
|
17
|
-
return fakeIx;
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
const pk = () => Keypair.generate().publicKey;
|
|
22
|
-
|
|
23
|
-
const ix = await VelocityCore.buildSettlePnlInstruction({
|
|
24
|
-
program,
|
|
25
|
-
marketIndex: 1,
|
|
26
|
-
state: pk(),
|
|
27
|
-
authority: pk(),
|
|
28
|
-
user: pk(),
|
|
29
|
-
spotMarketVault: pk(),
|
|
30
|
-
remainingAccounts: [],
|
|
31
|
-
});
|
|
32
|
-
expect(ix).toBe(fakeIx as any);
|
|
33
|
-
expect(called[0][0]).toBe(1);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
test('buildLiquidatePerpInstruction wires args', async () => {
|
|
37
|
-
const called: any[] = [];
|
|
38
|
-
const fakeIx = {
|
|
39
|
-
keys: [],
|
|
40
|
-
programId: Keypair.generate().publicKey,
|
|
41
|
-
data: Buffer.alloc(0),
|
|
42
|
-
};
|
|
43
|
-
const program = {
|
|
44
|
-
instruction: {
|
|
45
|
-
liquidatePerp: async (...args: any[]) => {
|
|
46
|
-
called.push(args);
|
|
47
|
-
return fakeIx;
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
};
|
|
51
|
-
const pk = () => Keypair.generate().publicKey;
|
|
52
|
-
|
|
53
|
-
const ix = await VelocityCore.buildLiquidatePerpInstruction({
|
|
54
|
-
program,
|
|
55
|
-
marketIndex: 2,
|
|
56
|
-
maxBaseAssetAmount: 123,
|
|
57
|
-
limitPrice: null,
|
|
58
|
-
state: pk(),
|
|
59
|
-
authority: pk(),
|
|
60
|
-
user: pk(),
|
|
61
|
-
userStats: pk(),
|
|
62
|
-
liquidator: pk(),
|
|
63
|
-
liquidatorStats: pk(),
|
|
64
|
-
remainingAccounts: [],
|
|
65
|
-
});
|
|
66
|
-
expect(ix).toBe(fakeIx as any);
|
|
67
|
-
expect(called[0][0]).toBe(2);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
import { Connection, Keypair, PublicKey } from '@solana/web3.js';
|
|
2
|
-
import { CustomizedCadenceBulkAccountLoader } from '../../src/accounts/customizedCadenceBulkAccountLoader';
|
|
3
|
-
import { expect } from 'chai';
|
|
4
|
-
|
|
5
|
-
describe('CustomizedCadenceBulkAccountLoader', () => {
|
|
6
|
-
let connection: Connection;
|
|
7
|
-
let loader: CustomizedCadenceBulkAccountLoader;
|
|
8
|
-
const defaultPollingFrequency = 1000;
|
|
9
|
-
|
|
10
|
-
beforeEach(() => {
|
|
11
|
-
connection = {
|
|
12
|
-
// Return one response per batched getMultipleAccounts request, each with a
|
|
13
|
-
// `value` entry for every pubkey actually requested (not a hard-coded 10), so
|
|
14
|
-
// all registered accounts get data. Fresh random buffers per call ensure each
|
|
15
|
-
// poll differs, so repeat polls re-fire callbacks (the loader skips unchanged
|
|
16
|
-
// buffers).
|
|
17
|
-
_rpcBatchRequest: async (
|
|
18
|
-
requests: Array<{ methodName: string; args: any[] }>
|
|
19
|
-
) => {
|
|
20
|
-
return Promise.resolve(
|
|
21
|
-
requests.map((request) => {
|
|
22
|
-
const pubkeys: string[] = request.args?.[0] ?? [];
|
|
23
|
-
return {
|
|
24
|
-
result: {
|
|
25
|
-
context: { slot: 1 },
|
|
26
|
-
value: pubkeys.map(() => ({
|
|
27
|
-
data: [
|
|
28
|
-
Buffer.from(Math.random().toString()).toString('base64'),
|
|
29
|
-
'base64',
|
|
30
|
-
],
|
|
31
|
-
})),
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
})
|
|
35
|
-
);
|
|
36
|
-
},
|
|
37
|
-
} as unknown as Connection;
|
|
38
|
-
loader = new CustomizedCadenceBulkAccountLoader(
|
|
39
|
-
connection,
|
|
40
|
-
'processed',
|
|
41
|
-
defaultPollingFrequency
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
afterEach(() => {
|
|
46
|
-
loader.stopPolling();
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
it('should add account with custom polling frequency', async () => {
|
|
50
|
-
const pubkey = new PublicKey(Keypair.generate().publicKey);
|
|
51
|
-
const customFrequency = 500;
|
|
52
|
-
const callback = () => {}; // Empty spy function for mocha
|
|
53
|
-
|
|
54
|
-
const id = await loader.addAccount(pubkey, callback, customFrequency);
|
|
55
|
-
|
|
56
|
-
expect(id).to.exist;
|
|
57
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(customFrequency);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('should remove account and clean up polling', async () => {
|
|
61
|
-
const pubkey = new PublicKey(Keypair.generate().publicKey);
|
|
62
|
-
const customFrequency = 500;
|
|
63
|
-
const callback = () => {};
|
|
64
|
-
|
|
65
|
-
const cid = await loader.addAccount(pubkey, callback, customFrequency);
|
|
66
|
-
loader.removeAccount(pubkey, cid);
|
|
67
|
-
|
|
68
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(null);
|
|
69
|
-
});
|
|
70
|
-
|
|
71
|
-
it('should update custom polling frequency', async () => {
|
|
72
|
-
const pubkey = new PublicKey(Keypair.generate().publicKey);
|
|
73
|
-
const initialFrequency = 500;
|
|
74
|
-
const newFrequency = 200;
|
|
75
|
-
const callback = () => {};
|
|
76
|
-
|
|
77
|
-
await loader.addAccount(pubkey, callback, initialFrequency);
|
|
78
|
-
loader.setCustomPollingFrequency(pubkey, newFrequency);
|
|
79
|
-
|
|
80
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(newFrequency);
|
|
81
|
-
});
|
|
82
|
-
|
|
83
|
-
it('should use default polling frequency when no custom frequency provided', async () => {
|
|
84
|
-
const pubkey = new PublicKey(Keypair.generate().publicKey);
|
|
85
|
-
const callback = () => {};
|
|
86
|
-
|
|
87
|
-
await loader.addAccount(pubkey, callback);
|
|
88
|
-
|
|
89
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(defaultPollingFrequency);
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
it('should clear all polling on clearAccountFrequencies', async () => {
|
|
93
|
-
const pubkey1 = new PublicKey(Keypair.generate().publicKey);
|
|
94
|
-
const pubkey2 = new PublicKey(Keypair.generate().publicKey);
|
|
95
|
-
const callback = () => {};
|
|
96
|
-
|
|
97
|
-
await loader.addAccount(pubkey1, callback, 500);
|
|
98
|
-
await loader.addAccount(pubkey2, callback, 1000);
|
|
99
|
-
loader.clearAccountFrequencies();
|
|
100
|
-
|
|
101
|
-
expect(loader.getAccountCadence(pubkey1)).to.equal(null);
|
|
102
|
-
expect(loader.getAccountCadence(pubkey2)).to.equal(null);
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
it('should remove key from previous polling group when setting new frequency', async () => {
|
|
106
|
-
const pubkey = new PublicKey(Keypair.generate().publicKey);
|
|
107
|
-
const pubkey2 = new PublicKey(Keypair.generate().publicKey);
|
|
108
|
-
const pubkey3 = new PublicKey(Keypair.generate().publicKey);
|
|
109
|
-
const initialFrequency = 500;
|
|
110
|
-
const newFrequency = 1000;
|
|
111
|
-
const callback = () => {};
|
|
112
|
-
|
|
113
|
-
// Add accounts with initial frequency
|
|
114
|
-
await loader.addAccount(pubkey, callback, initialFrequency);
|
|
115
|
-
await loader.addAccount(pubkey2, callback, initialFrequency);
|
|
116
|
-
await loader.addAccount(pubkey3, callback, initialFrequency);
|
|
117
|
-
|
|
118
|
-
// Verify they're all in the initial frequency group
|
|
119
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(initialFrequency);
|
|
120
|
-
expect(loader.getAccountCadence(pubkey2)).to.equal(initialFrequency);
|
|
121
|
-
expect(loader.getAccountCadence(pubkey3)).to.equal(initialFrequency);
|
|
122
|
-
|
|
123
|
-
// Change polling frequency for first pubkey only
|
|
124
|
-
loader.setCustomPollingFrequency(pubkey, newFrequency);
|
|
125
|
-
|
|
126
|
-
// Verify first pubkey is updated to new frequency
|
|
127
|
-
expect(loader.getAccountCadence(pubkey)).to.equal(newFrequency);
|
|
128
|
-
|
|
129
|
-
// Verify other pubkeys remain in initial group
|
|
130
|
-
expect(loader.getAccountCadence(pubkey2)).to.equal(initialFrequency);
|
|
131
|
-
expect(loader.getAccountCadence(pubkey3)).to.equal(initialFrequency);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it('accounts in different polling groups fire at appropriate intervals', async function () {
|
|
135
|
-
this.timeout(10000);
|
|
136
|
-
const loader = new CustomizedCadenceBulkAccountLoader(
|
|
137
|
-
connection,
|
|
138
|
-
'processed',
|
|
139
|
-
1000
|
|
140
|
-
);
|
|
141
|
-
|
|
142
|
-
// Create test accounts and callbacks with counters
|
|
143
|
-
const oneSecGroupPubkey = new PublicKey(Keypair.generate().publicKey);
|
|
144
|
-
const oneSecGroup = {
|
|
145
|
-
pubkey: oneSecGroupPubkey,
|
|
146
|
-
callCount: 0,
|
|
147
|
-
};
|
|
148
|
-
|
|
149
|
-
const threeSecGroup = Array.from({ length: 5 }, () => ({
|
|
150
|
-
pubkey: new PublicKey(Keypair.generate().publicKey),
|
|
151
|
-
callCount: 0,
|
|
152
|
-
}));
|
|
153
|
-
|
|
154
|
-
const fourSecGroup = Array.from({ length: 10 }, () => ({
|
|
155
|
-
pubkey: new PublicKey(Keypair.generate().publicKey),
|
|
156
|
-
callCount: 0,
|
|
157
|
-
}));
|
|
158
|
-
|
|
159
|
-
// Add accounts with different frequencies
|
|
160
|
-
await loader.addAccount(
|
|
161
|
-
oneSecGroup.pubkey,
|
|
162
|
-
() => {
|
|
163
|
-
oneSecGroup.callCount += 1;
|
|
164
|
-
},
|
|
165
|
-
1000
|
|
166
|
-
);
|
|
167
|
-
|
|
168
|
-
for (const account of threeSecGroup) {
|
|
169
|
-
await loader.addAccount(
|
|
170
|
-
account.pubkey,
|
|
171
|
-
() => {
|
|
172
|
-
account.callCount++;
|
|
173
|
-
},
|
|
174
|
-
3000
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
for (const account of fourSecGroup) {
|
|
179
|
-
await loader.addAccount(
|
|
180
|
-
account.pubkey,
|
|
181
|
-
() => {
|
|
182
|
-
account.callCount++;
|
|
183
|
-
},
|
|
184
|
-
4000
|
|
185
|
-
);
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
loader.startPolling();
|
|
189
|
-
|
|
190
|
-
// Wait for 6 seconds to allow multiple intervals to fire
|
|
191
|
-
await new Promise((resolve) => setTimeout(resolve, 4500));
|
|
192
|
-
|
|
193
|
-
// 1s group should have fired ~4 times
|
|
194
|
-
expect(oneSecGroup.callCount).to.be.greaterThanOrEqual(3);
|
|
195
|
-
expect(oneSecGroup.callCount).to.be.lessThanOrEqual(5);
|
|
196
|
-
|
|
197
|
-
// 3s group should have fired ~2 times
|
|
198
|
-
for (const account of threeSecGroup) {
|
|
199
|
-
expect(account.callCount).to.be.greaterThanOrEqual(1);
|
|
200
|
-
expect(account.callCount).to.be.lessThanOrEqual(4);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// 4s group: custom frequency > default (1s), so fires at default ~4 times in 4.5s
|
|
204
|
-
for (const account of fourSecGroup) {
|
|
205
|
-
expect(account.callCount).to.be.greaterThanOrEqual(1);
|
|
206
|
-
expect(account.callCount).to.be.lessThanOrEqual(5);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
loader.stopPolling();
|
|
210
|
-
});
|
|
211
|
-
});
|