@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
package/src/accounts/fetch.ts
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { Connection, PublicKey } from '@solana/web3.js';
|
|
2
|
-
import {
|
|
3
|
-
RevenueShareAccount,
|
|
4
|
-
RevenueShareEscrowAccount,
|
|
5
|
-
UserAccount,
|
|
6
|
-
UserStatsAccount,
|
|
7
|
-
} from '../types';
|
|
8
|
-
import {
|
|
9
|
-
getRevenueShareAccountPublicKey,
|
|
10
|
-
getRevenueShareEscrowAccountPublicKey,
|
|
11
|
-
getUserAccountPublicKey,
|
|
12
|
-
getUserStatsAccountPublicKey,
|
|
13
|
-
} from '../addresses/pda';
|
|
14
|
-
import { VelocityProgram } from '../config';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Fetches every `UserAccount` (sub-account) belonging to `authority`, from sub-account id `0`
|
|
18
|
-
* up to `limit - 1`, in a single batched `getMultipleAccountsInfo` RPC call.
|
|
19
|
-
* @param connection Connection used for the batched fetch.
|
|
20
|
-
* @param program Anchor program used to derive PDAs and decode account data.
|
|
21
|
-
* @param authority Wallet/authority pubkey whose sub-accounts to fetch.
|
|
22
|
-
* @param limit Number of sub-account ids to check, starting at 0. Defaults to 8.
|
|
23
|
-
* @returns One entry per sub-account id in order; `undefined` where no account exists at that id.
|
|
24
|
-
*/
|
|
25
|
-
export async function fetchUserAccounts(
|
|
26
|
-
connection: Connection,
|
|
27
|
-
program: VelocityProgram,
|
|
28
|
-
authority: PublicKey,
|
|
29
|
-
limit = 8
|
|
30
|
-
): Promise<(UserAccount | undefined)[]> {
|
|
31
|
-
const userAccountPublicKeys = new Array<PublicKey>();
|
|
32
|
-
for (let i = 0; i < limit; i++) {
|
|
33
|
-
userAccountPublicKeys.push(
|
|
34
|
-
await getUserAccountPublicKey(program.programId, authority, i)
|
|
35
|
-
);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return fetchUserAccountsUsingKeys(connection, program, userAccountPublicKeys);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Fetches and decodes a specific list of `UserAccount` pubkeys in one batched
|
|
43
|
-
* `getMultipleAccountsInfo` RPC call. Unlike `fetchUserAccounts`, the caller supplies the exact
|
|
44
|
-
* addresses rather than deriving them by sub-account id.
|
|
45
|
-
* @param connection Connection used for the batched fetch.
|
|
46
|
-
* @param program Anchor program used to decode account data.
|
|
47
|
-
* @param userAccountPublicKeys Addresses to fetch, in order.
|
|
48
|
-
* @returns One entry per input pubkey, in the same order; `undefined` where no account exists at that address.
|
|
49
|
-
*/
|
|
50
|
-
export async function fetchUserAccountsUsingKeys(
|
|
51
|
-
connection: Connection,
|
|
52
|
-
program: VelocityProgram,
|
|
53
|
-
userAccountPublicKeys: PublicKey[]
|
|
54
|
-
): Promise<(UserAccount | undefined)[]> {
|
|
55
|
-
const accountInfos = await connection.getMultipleAccountsInfo(
|
|
56
|
-
userAccountPublicKeys,
|
|
57
|
-
'confirmed'
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
return accountInfos.map((accountInfo) => {
|
|
61
|
-
if (!accountInfo) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
return (program.account as any).user.coder.accounts.decodeUnchecked(
|
|
65
|
-
'user',
|
|
66
|
-
accountInfo.data
|
|
67
|
-
) as UserAccount;
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Fetches and decodes the `UserStatsAccount` for `authority`, if one exists.
|
|
73
|
-
* @param connection Connection used for the fetch.
|
|
74
|
-
* @param program Anchor program used to derive the PDA and decode account data.
|
|
75
|
-
* @param authority Wallet/authority pubkey the stats account belongs to.
|
|
76
|
-
* @returns The decoded account, or `undefined` if it hasn't been initialized on-chain.
|
|
77
|
-
*/
|
|
78
|
-
export async function fetchUserStatsAccount(
|
|
79
|
-
connection: Connection,
|
|
80
|
-
program: VelocityProgram,
|
|
81
|
-
authority: PublicKey
|
|
82
|
-
): Promise<UserStatsAccount | undefined> {
|
|
83
|
-
const userStatsPublicKey = getUserStatsAccountPublicKey(
|
|
84
|
-
program.programId,
|
|
85
|
-
authority
|
|
86
|
-
);
|
|
87
|
-
const accountInfo = await connection.getAccountInfo(
|
|
88
|
-
userStatsPublicKey,
|
|
89
|
-
'confirmed'
|
|
90
|
-
);
|
|
91
|
-
|
|
92
|
-
return accountInfo
|
|
93
|
-
? ((program.account as any).user.coder.accounts.decodeUnchecked(
|
|
94
|
-
'userStats',
|
|
95
|
-
accountInfo.data
|
|
96
|
-
) as UserStatsAccount)
|
|
97
|
-
: undefined;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Fetches and decodes the `RevenueShareAccount` for `authority` (tracks referral/builder revenue
|
|
102
|
-
* share balances), if one exists.
|
|
103
|
-
* @param connection Connection used for the fetch.
|
|
104
|
-
* @param program Anchor program used to derive the PDA and decode account data.
|
|
105
|
-
* @param authority Wallet/authority pubkey the revenue share account belongs to.
|
|
106
|
-
* @returns The decoded account, or `null` if it hasn't been initialized on-chain.
|
|
107
|
-
*/
|
|
108
|
-
export async function fetchRevenueShareAccount(
|
|
109
|
-
connection: Connection,
|
|
110
|
-
program: VelocityProgram,
|
|
111
|
-
authority: PublicKey
|
|
112
|
-
): Promise<RevenueShareAccount | null> {
|
|
113
|
-
const revenueShareAccountPublicKey = getRevenueShareAccountPublicKey(
|
|
114
|
-
program.programId,
|
|
115
|
-
authority
|
|
116
|
-
);
|
|
117
|
-
const accountInfo = await connection.getAccountInfo(
|
|
118
|
-
revenueShareAccountPublicKey
|
|
119
|
-
);
|
|
120
|
-
if (!accountInfo) return null;
|
|
121
|
-
return (program.account as any).revenueShare.coder.accounts.decode(
|
|
122
|
-
'revenueShare',
|
|
123
|
-
accountInfo.data
|
|
124
|
-
) as RevenueShareAccount;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/**
|
|
128
|
-
* Fetches and decodes the `RevenueShareEscrowAccount` for `authority` (holds escrowed
|
|
129
|
-
* revenue-share amounts pending distribution), if one exists.
|
|
130
|
-
* @param connection Connection used for the fetch.
|
|
131
|
-
* @param program Anchor program used to derive the PDA and decode account data.
|
|
132
|
-
* @param authority Wallet/authority pubkey the escrow account belongs to.
|
|
133
|
-
* @returns The decoded account, or `null` if it hasn't been initialized on-chain.
|
|
134
|
-
*/
|
|
135
|
-
export async function fetchRevenueShareEscrowAccount(
|
|
136
|
-
connection: Connection,
|
|
137
|
-
program: VelocityProgram,
|
|
138
|
-
authority: PublicKey
|
|
139
|
-
): Promise<RevenueShareEscrowAccount | null> {
|
|
140
|
-
const revenueShareEscrowPubKey = getRevenueShareEscrowAccountPublicKey(
|
|
141
|
-
program.programId,
|
|
142
|
-
authority
|
|
143
|
-
);
|
|
144
|
-
|
|
145
|
-
const escrow = await connection.getAccountInfo(revenueShareEscrowPubKey);
|
|
146
|
-
|
|
147
|
-
if (!escrow) return null;
|
|
148
|
-
|
|
149
|
-
const escrowAccount = (
|
|
150
|
-
program.account as any
|
|
151
|
-
).revenueShareEscrow.coder.accounts.decode(
|
|
152
|
-
'revenueShareEscrow',
|
|
153
|
-
escrow.data
|
|
154
|
-
) as RevenueShareEscrowAccount;
|
|
155
|
-
|
|
156
|
-
return escrowAccount;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/** Options accepted by `fetchAccount`/`fetchAccounts`. */
|
|
160
|
-
export type FetchAccountOptions = {
|
|
161
|
-
/** Commitment level for the underlying `getAccountInfo`/`getMultipleAccountsInfo` call; defaults to the connection's configured commitment if omitted. */
|
|
162
|
-
commitment?: Parameters<Connection['getAccountInfo']>[1];
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
* Fetches an account's raw data buffer without decoding it (no Anchor coder involved), for
|
|
167
|
-
* callers that only need the bytes.
|
|
168
|
-
* @param connection Connection used for the fetch.
|
|
169
|
-
* @param publicKey Account address to fetch.
|
|
170
|
-
* @param opts Optional commitment override.
|
|
171
|
-
* @returns The raw account data, or `null` if the account doesn't exist.
|
|
172
|
-
*/
|
|
173
|
-
export async function fetchAccount(
|
|
174
|
-
connection: Connection,
|
|
175
|
-
publicKey: PublicKey,
|
|
176
|
-
opts?: FetchAccountOptions
|
|
177
|
-
): Promise<Buffer | null> {
|
|
178
|
-
const info = await connection.getAccountInfo(publicKey, opts?.commitment);
|
|
179
|
-
return info?.data ?? null;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Batch variant of `fetchAccount` — fetches raw data buffers for multiple accounts in one
|
|
184
|
-
* `getMultipleAccountsInfo` call.
|
|
185
|
-
* @param connection Connection used for the fetch.
|
|
186
|
-
* @param publicKeys Account addresses to fetch, in order.
|
|
187
|
-
* @param opts Optional commitment override.
|
|
188
|
-
* @returns One entry per input pubkey, in the same order; `null` where the account doesn't exist.
|
|
189
|
-
*/
|
|
190
|
-
export async function fetchAccounts(
|
|
191
|
-
connection: Connection,
|
|
192
|
-
publicKeys: PublicKey[],
|
|
193
|
-
opts?: FetchAccountOptions
|
|
194
|
-
): Promise<(Buffer | null)[]> {
|
|
195
|
-
const infos = await connection.getMultipleAccountsInfo(
|
|
196
|
-
publicKeys,
|
|
197
|
-
opts?.commitment
|
|
198
|
-
);
|
|
199
|
-
return infos.map((info) => info?.data ?? null);
|
|
200
|
-
}
|
|
@@ -1,225 +0,0 @@
|
|
|
1
|
-
import { ResubOpts, GrpcConfigs } from './types';
|
|
2
|
-
import { PublicKey } from '@solana/web3.js';
|
|
3
|
-
import { VelocityProgram } from '../config';
|
|
4
|
-
import * as Buffer from 'buffer';
|
|
5
|
-
|
|
6
|
-
import { WebSocketAccountSubscriber } from './webSocketAccountSubscriber';
|
|
7
|
-
import {
|
|
8
|
-
Client,
|
|
9
|
-
ClientDuplexStream,
|
|
10
|
-
CommitmentLevel,
|
|
11
|
-
createClient,
|
|
12
|
-
SubscribeRequest,
|
|
13
|
-
SubscribeUpdate,
|
|
14
|
-
} from '../isomorphic/grpc';
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* `AccountSubscriber` for a single account, streamed via a gRPC Geyser plugin (Yellowstone or
|
|
18
|
-
* LaserStream, per `GrpcConfigs`) instead of the standard `connection.onAccountChange` WebSocket.
|
|
19
|
-
* Extends `WebSocketAccountSubscriber` to reuse its buffering/decode/resub-timer logic — only the
|
|
20
|
-
* transport (`subscribe`/`unsubscribe`) is replaced. Construct via the static `create` factory,
|
|
21
|
-
* not the constructor directly, since establishing the gRPC client is asynchronous.
|
|
22
|
-
*/
|
|
23
|
-
export class grpcAccountSubscriber<T> extends WebSocketAccountSubscriber<T> {
|
|
24
|
-
private client: Client;
|
|
25
|
-
private _stream?: ClientDuplexStream;
|
|
26
|
-
private get stream(): ClientDuplexStream {
|
|
27
|
-
if (!this._stream) {
|
|
28
|
-
throw new Error(
|
|
29
|
-
'grpcAccountSubscriber: stream accessed before subscribe()'
|
|
30
|
-
);
|
|
31
|
-
}
|
|
32
|
-
return this._stream;
|
|
33
|
-
}
|
|
34
|
-
private commitmentLevel: CommitmentLevel;
|
|
35
|
-
public listenerId?: number;
|
|
36
|
-
|
|
37
|
-
private constructor(
|
|
38
|
-
client: Client,
|
|
39
|
-
commitmentLevel: CommitmentLevel,
|
|
40
|
-
accountName: string,
|
|
41
|
-
program: VelocityProgram,
|
|
42
|
-
accountPublicKey: PublicKey,
|
|
43
|
-
decodeBuffer?: (buffer: Buffer) => T,
|
|
44
|
-
resubOpts?: ResubOpts
|
|
45
|
-
) {
|
|
46
|
-
super(accountName, program, accountPublicKey, decodeBuffer, resubOpts);
|
|
47
|
-
this.client = client;
|
|
48
|
-
this.commitmentLevel = commitmentLevel;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Creates a gRPC client (or reuses `clientProp`, letting multiple subscribers share one
|
|
53
|
-
* connection) and constructs a `grpcAccountSubscriber`. Does not itself start streaming — call
|
|
54
|
-
* `subscribe()` on the result.
|
|
55
|
-
* @param grpcConfigs gRPC Geyser endpoint/token/commitment config (Yellowstone or LaserStream).
|
|
56
|
-
* @param accountName Anchor account type name (used for logging and, absent `decodeBuffer`, for decoding via the program coder).
|
|
57
|
-
* @param program Anchor program providing the connection and coder.
|
|
58
|
-
* @param accountPublicKey Address of the account to track.
|
|
59
|
-
* @param decodeBuffer Optional custom decode function; defaults to `program.coder.accounts.decode(accountName, buffer)`.
|
|
60
|
-
* @param resubOpts Resubscription watchdog options; omit to disable the inactivity timer.
|
|
61
|
-
* @param clientProp Optional existing gRPC client to reuse instead of creating a new connection.
|
|
62
|
-
*/
|
|
63
|
-
public static async create<U>(
|
|
64
|
-
grpcConfigs: GrpcConfigs,
|
|
65
|
-
accountName: string,
|
|
66
|
-
program: VelocityProgram,
|
|
67
|
-
accountPublicKey: PublicKey,
|
|
68
|
-
decodeBuffer?: (buffer: Buffer) => U,
|
|
69
|
-
resubOpts?: ResubOpts,
|
|
70
|
-
clientProp?: Client
|
|
71
|
-
): Promise<grpcAccountSubscriber<U>> {
|
|
72
|
-
const client = clientProp
|
|
73
|
-
? clientProp
|
|
74
|
-
: await createClient(
|
|
75
|
-
grpcConfigs.endpoint,
|
|
76
|
-
grpcConfigs.token,
|
|
77
|
-
grpcConfigs.channelOptions ?? {}
|
|
78
|
-
);
|
|
79
|
-
const commitmentLevel =
|
|
80
|
-
// @ts-ignore :: isomorphic exported enum fails typescript but will work at runtime
|
|
81
|
-
grpcConfigs.commitmentLevel ?? CommitmentLevel.CONFIRMED;
|
|
82
|
-
|
|
83
|
-
return new grpcAccountSubscriber(
|
|
84
|
-
client,
|
|
85
|
-
commitmentLevel,
|
|
86
|
-
accountName,
|
|
87
|
-
program,
|
|
88
|
-
accountPublicKey,
|
|
89
|
-
decodeBuffer,
|
|
90
|
-
resubOpts
|
|
91
|
-
);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Seeds `dataAndSlot` with an initial `fetch()` (if not already set), opens a gRPC subscribe
|
|
96
|
-
* stream filtered to this single account, and writes the subscribe request. Idempotent: a
|
|
97
|
-
* no-op if already subscribed or mid-unsubscribe.
|
|
98
|
-
* @param onChange Invoked with the newly decoded account data on each accepted update.
|
|
99
|
-
*/
|
|
100
|
-
override async subscribe(onChange: (data: T) => void): Promise<void> {
|
|
101
|
-
if (this.listenerId != null || this.isUnsubscribing) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
this.onChange = onChange;
|
|
106
|
-
if (!this.dataAndSlot) {
|
|
107
|
-
await this.fetch();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
// Subscribe with grpc
|
|
111
|
-
this._stream =
|
|
112
|
-
(await this.client.subscribe()) as unknown as typeof this.stream;
|
|
113
|
-
const request: SubscribeRequest = {
|
|
114
|
-
slots: {},
|
|
115
|
-
accounts: {
|
|
116
|
-
account: {
|
|
117
|
-
account: [this.accountPublicKey.toString()],
|
|
118
|
-
owner: [],
|
|
119
|
-
filters: [],
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
transactions: {},
|
|
123
|
-
blocks: {},
|
|
124
|
-
blocksMeta: {},
|
|
125
|
-
accountsDataSlice: [],
|
|
126
|
-
commitment: this.commitmentLevel,
|
|
127
|
-
entry: {},
|
|
128
|
-
transactionsStatus: {},
|
|
129
|
-
};
|
|
130
|
-
this.stream.on('data', (chunk: SubscribeUpdate) => {
|
|
131
|
-
if (!chunk.account || !chunk.account.account) {
|
|
132
|
-
return;
|
|
133
|
-
}
|
|
134
|
-
const slot = Number(chunk.account.slot);
|
|
135
|
-
const accountInfo = {
|
|
136
|
-
owner: new PublicKey(chunk.account.account.owner),
|
|
137
|
-
lamports: Number(chunk.account.account.lamports),
|
|
138
|
-
data: Buffer.Buffer.from(chunk.account.account.data),
|
|
139
|
-
executable: chunk.account.account.executable,
|
|
140
|
-
rentEpoch: Number(chunk.account.account.rentEpoch),
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
if (this.resubOpts?.resubTimeoutMs) {
|
|
144
|
-
this.receivingData = true;
|
|
145
|
-
clearTimeout(this.timeoutId);
|
|
146
|
-
this.handleRpcResponse(
|
|
147
|
-
{
|
|
148
|
-
slot,
|
|
149
|
-
},
|
|
150
|
-
accountInfo
|
|
151
|
-
);
|
|
152
|
-
this.setTimeout();
|
|
153
|
-
} else {
|
|
154
|
-
this.handleRpcResponse(
|
|
155
|
-
{
|
|
156
|
-
slot,
|
|
157
|
-
},
|
|
158
|
-
accountInfo
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
});
|
|
162
|
-
|
|
163
|
-
return new Promise<void>((resolve, reject) => {
|
|
164
|
-
this.stream.write(request, (err) => {
|
|
165
|
-
if (err === null || err === undefined) {
|
|
166
|
-
this.listenerId = 1;
|
|
167
|
-
if (this.resubOpts?.resubTimeoutMs) {
|
|
168
|
-
this.receivingData = true;
|
|
169
|
-
this.setTimeout();
|
|
170
|
-
}
|
|
171
|
-
resolve();
|
|
172
|
-
} else {
|
|
173
|
-
reject(err);
|
|
174
|
-
}
|
|
175
|
-
});
|
|
176
|
-
}).catch((reason) => {
|
|
177
|
-
console.error(reason);
|
|
178
|
-
throw reason;
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* Writes an empty subscribe request to clear the stream's account filter and cancels any
|
|
184
|
-
* pending resub timeout.
|
|
185
|
-
* @param onResub Internal flag set to `true` when called as part of an automatic resubscribe cycle, which preserves `resubOpts.resubTimeoutMs` instead of clearing it. Callers should omit this.
|
|
186
|
-
*/
|
|
187
|
-
override async unsubscribe(onResub = false): Promise<void> {
|
|
188
|
-
if (!onResub && this.resubOpts) {
|
|
189
|
-
this.resubOpts.resubTimeoutMs = undefined;
|
|
190
|
-
}
|
|
191
|
-
this.isUnsubscribing = true;
|
|
192
|
-
clearTimeout(this.timeoutId);
|
|
193
|
-
this.timeoutId = undefined;
|
|
194
|
-
|
|
195
|
-
if (this.listenerId != null) {
|
|
196
|
-
const promise = new Promise<void>((resolve, reject) => {
|
|
197
|
-
const request: SubscribeRequest = {
|
|
198
|
-
slots: {},
|
|
199
|
-
accounts: {},
|
|
200
|
-
transactions: {},
|
|
201
|
-
blocks: {},
|
|
202
|
-
blocksMeta: {},
|
|
203
|
-
accountsDataSlice: [],
|
|
204
|
-
entry: {},
|
|
205
|
-
transactionsStatus: {},
|
|
206
|
-
};
|
|
207
|
-
this.stream.write(request, (err) => {
|
|
208
|
-
if (err === null || err === undefined) {
|
|
209
|
-
this.listenerId = undefined;
|
|
210
|
-
this.isUnsubscribing = false;
|
|
211
|
-
resolve();
|
|
212
|
-
} else {
|
|
213
|
-
reject(err);
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
}).catch((reason) => {
|
|
217
|
-
console.error(reason);
|
|
218
|
-
throw reason;
|
|
219
|
-
});
|
|
220
|
-
return promise;
|
|
221
|
-
} else {
|
|
222
|
-
this.isUnsubscribing = false;
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import { GrpcConfigs } from './types';
|
|
2
|
-
import { PublicKey } from '@solana/web3.js';
|
|
3
|
-
import { InsuranceFundStake } from '../types';
|
|
4
|
-
import { WebSocketInsuranceFundStakeAccountSubscriber } from './webSocketInsuranceFundStakeAccountSubscriber';
|
|
5
|
-
import { grpcAccountSubscriber } from './grpcAccountSubscriber';
|
|
6
|
-
import { VelocityProgram } from '../config';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* `InsuranceFundStakeAccountSubscriber` variant of `WebSocketInsuranceFundStakeAccountSubscriber`
|
|
10
|
-
* that tracks the `InsuranceFundStake` account via a `grpcAccountSubscriber` (gRPC Geyser stream)
|
|
11
|
-
* instead of `connection.onAccountChange`.
|
|
12
|
-
*/
|
|
13
|
-
export class grpcInsuranceFundStakeAccountSubscriber extends WebSocketInsuranceFundStakeAccountSubscriber {
|
|
14
|
-
private grpcConfigs: GrpcConfigs;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* @param grpcConfigs gRPC Geyser endpoint/token/commitment config (Yellowstone or LaserStream).
|
|
18
|
-
* @param program Anchor program providing the connection and coder.
|
|
19
|
-
* @param insuranceFundStakeAccountPublicKey Address of the `InsuranceFundStake` account to track.
|
|
20
|
-
* @param resubTimeoutMs Resub watchdog timeout (ms) passed to the underlying `grpcAccountSubscriber`.
|
|
21
|
-
*/
|
|
22
|
-
public constructor(
|
|
23
|
-
grpcConfigs: GrpcConfigs,
|
|
24
|
-
program: VelocityProgram,
|
|
25
|
-
insuranceFundStakeAccountPublicKey: PublicKey,
|
|
26
|
-
resubTimeoutMs?: number
|
|
27
|
-
) {
|
|
28
|
-
super(program, insuranceFundStakeAccountPublicKey, resubTimeoutMs);
|
|
29
|
-
this.grpcConfigs = grpcConfigs;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Creates the underlying `grpcAccountSubscriber` and subscribes it. Idempotent: a no-op
|
|
34
|
-
* (returns `true`) if already subscribed.
|
|
35
|
-
* @param insuranceFundStakeAccount Optional pre-fetched account data to seed the subscriber with, skipping the initial RPC fetch.
|
|
36
|
-
*/
|
|
37
|
-
async subscribe(
|
|
38
|
-
insuranceFundStakeAccount?: InsuranceFundStake
|
|
39
|
-
): Promise<boolean> {
|
|
40
|
-
if (this.isSubscribed) {
|
|
41
|
-
return true;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
this.insuranceFundStakeDataAccountSubscriber =
|
|
45
|
-
await grpcAccountSubscriber.create(
|
|
46
|
-
this.grpcConfigs,
|
|
47
|
-
'insuranceFundStake',
|
|
48
|
-
this.program,
|
|
49
|
-
this.insuranceFundStakeAccountPublicKey,
|
|
50
|
-
undefined,
|
|
51
|
-
{
|
|
52
|
-
resubTimeoutMs: this.resubTimeoutMs,
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
|
|
56
|
-
if (insuranceFundStakeAccount) {
|
|
57
|
-
this.insuranceFundStakeDataAccountSubscriber.setData(
|
|
58
|
-
insuranceFundStakeAccount
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
await this.insuranceFundStakeDataAccountSubscriber.subscribe(
|
|
63
|
-
(data: InsuranceFundStake) => {
|
|
64
|
-
this.eventEmitter.emit('insuranceFundStakeAccountUpdate', data);
|
|
65
|
-
this.eventEmitter.emit('update');
|
|
66
|
-
}
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
this.eventEmitter.emit('update');
|
|
70
|
-
this.isSubscribed = true;
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
}
|