@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
package/src/decode/user.ts
DELETED
|
@@ -1,401 +0,0 @@
|
|
|
1
|
-
import { BN } from '../isomorphic/anchor';
|
|
2
|
-
import {
|
|
3
|
-
MarketType,
|
|
4
|
-
Order,
|
|
5
|
-
OrderStatus,
|
|
6
|
-
OrderTriggerCondition,
|
|
7
|
-
OrderType,
|
|
8
|
-
PerpPosition,
|
|
9
|
-
PositionDirection,
|
|
10
|
-
PositionFlag,
|
|
11
|
-
SpotBalanceType,
|
|
12
|
-
SpotPosition,
|
|
13
|
-
UserAccount,
|
|
14
|
-
} from '../types';
|
|
15
|
-
import { PublicKey } from '@solana/web3.js';
|
|
16
|
-
import { ZERO } from '../constants/numericConstants';
|
|
17
|
-
|
|
18
|
-
function readUnsignedBigInt64LE(buffer: Buffer, offset: number): BN {
|
|
19
|
-
return new BN(buffer.subarray(offset, offset + 8), 10, 'le');
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
function readSignedBigInt64LE(buffer: Buffer, offset: number): BN {
|
|
23
|
-
const unsignedValue = new BN(buffer.subarray(offset, offset + 8), 10, 'le');
|
|
24
|
-
if (unsignedValue.testn(63)) {
|
|
25
|
-
const inverted = unsignedValue.notn(64).addn(1);
|
|
26
|
-
return inverted.neg();
|
|
27
|
-
} else {
|
|
28
|
-
return unsignedValue;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* Hand-rolled, offset-based decoder for the `User` account, used as a fast path instead of
|
|
34
|
-
* Anchor's generic Borsh decoder in hot paths (e.g. bulk DLOB/account-map refreshes). Byte offsets
|
|
35
|
-
* here are hardcoded to the current on-chain `User` layout and must be kept in sync with any
|
|
36
|
-
* change to `programs/velocity/src/state/user.rs` — see the offset notes in `../memcmp.ts`
|
|
37
|
-
* (`USER_IDLE_OFFSET` etc.), which mirror this same layout and will silently return zero matches
|
|
38
|
-
* if this decoder and those offsets drift apart.
|
|
39
|
-
*
|
|
40
|
-
* Empty slots are skipped without full-field decoding: a spot position is treated as unused when
|
|
41
|
-
* `scaledBalance == 0 && openOrders == 0`; a perp position when `baseAssetAmount`,
|
|
42
|
-
* `quoteAssetAmount`, and `isolatedPositionScaledBalance` are all 0, `openOrders == 0`, and
|
|
43
|
-
* neither `BeingLiquidated` nor `Bankruptcy` position flags are set; an order slot when its
|
|
44
|
-
* `status` byte isn't `1` (`OrderStatus.OPEN`) — in all three cases the skipped slot is omitted
|
|
45
|
-
* from the returned array entirely (only active entries are pushed), so the array length may be
|
|
46
|
-
* less than the on-chain fixed slot count.
|
|
47
|
-
* @param buffer - Raw `User` account data, including its 8-byte Anchor discriminator (skipped internally).
|
|
48
|
-
* @returns The decoded `UserAccount`. Amount/price fields retain on-chain precision (e.g.
|
|
49
|
-
* `baseAssetAmount`/`openBids`/`openAsks` in BASE_PRECISION 1e9, `quoteAssetAmount` and other
|
|
50
|
-
* quote-denominated fields in QUOTE_PRECISION 1e6, order `price`/`triggerPrice`/auction prices in
|
|
51
|
-
* PRICE_PRECISION 1e6) — this function only re-parses bytes, it does not rescale anything.
|
|
52
|
-
* @throws Error if an order's encoded `status`, `orderType`, or `triggerCondition` byte doesn't match a known enum value.
|
|
53
|
-
*/
|
|
54
|
-
export function decodeUser(buffer: Buffer): UserAccount {
|
|
55
|
-
let offset = 8;
|
|
56
|
-
const authority = new PublicKey(buffer.slice(offset, offset + 32));
|
|
57
|
-
offset += 32;
|
|
58
|
-
const delegate = new PublicKey(buffer.slice(offset, offset + 32));
|
|
59
|
-
offset += 32;
|
|
60
|
-
const name = [];
|
|
61
|
-
for (let i = 0; i < 32; i++) {
|
|
62
|
-
name.push(buffer.readUint8(offset + i));
|
|
63
|
-
}
|
|
64
|
-
offset += 32;
|
|
65
|
-
|
|
66
|
-
const spotPositions: SpotPosition[] = [];
|
|
67
|
-
for (let i = 0; i < 8; i++) {
|
|
68
|
-
const scaledBalance = readUnsignedBigInt64LE(buffer, offset);
|
|
69
|
-
const openOrders = buffer.readUInt8(offset + 35);
|
|
70
|
-
if (scaledBalance.eq(ZERO) && openOrders === 0) {
|
|
71
|
-
offset += 40;
|
|
72
|
-
continue;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
offset += 8;
|
|
76
|
-
const openBids = readSignedBigInt64LE(buffer, offset);
|
|
77
|
-
offset += 8;
|
|
78
|
-
const openAsks = readSignedBigInt64LE(buffer, offset);
|
|
79
|
-
offset += 8;
|
|
80
|
-
const cumulativeDeposits = readSignedBigInt64LE(buffer, offset);
|
|
81
|
-
offset += 8;
|
|
82
|
-
const marketIndex = buffer.readUInt16LE(offset);
|
|
83
|
-
offset += 2;
|
|
84
|
-
const balanceTypeNum = buffer.readUInt8(offset);
|
|
85
|
-
let balanceType: SpotBalanceType;
|
|
86
|
-
if (balanceTypeNum === 0) {
|
|
87
|
-
balanceType = SpotBalanceType.DEPOSIT;
|
|
88
|
-
} else {
|
|
89
|
-
balanceType = SpotBalanceType.BORROW;
|
|
90
|
-
}
|
|
91
|
-
offset += 6;
|
|
92
|
-
spotPositions.push({
|
|
93
|
-
scaledBalance,
|
|
94
|
-
openBids,
|
|
95
|
-
openAsks,
|
|
96
|
-
cumulativeDeposits,
|
|
97
|
-
marketIndex,
|
|
98
|
-
balanceType,
|
|
99
|
-
openOrders,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const perpPositions: PerpPosition[] = [];
|
|
104
|
-
for (let i = 0; i < 8; i++) {
|
|
105
|
-
const baseAssetAmount = readSignedBigInt64LE(buffer, offset + 8);
|
|
106
|
-
const quoteAssetAmount = readSignedBigInt64LE(buffer, offset + 16);
|
|
107
|
-
const isolatedPositionScaledBalance = readUnsignedBigInt64LE(
|
|
108
|
-
buffer,
|
|
109
|
-
offset + 64
|
|
110
|
-
);
|
|
111
|
-
const openOrders = buffer.readUInt8(offset + 78);
|
|
112
|
-
const positionFlag = buffer.readUInt8(offset + 79);
|
|
113
|
-
|
|
114
|
-
if (
|
|
115
|
-
baseAssetAmount.eq(ZERO) &&
|
|
116
|
-
openOrders === 0 &&
|
|
117
|
-
quoteAssetAmount.eq(ZERO) &&
|
|
118
|
-
isolatedPositionScaledBalance.eq(ZERO) &&
|
|
119
|
-
!(
|
|
120
|
-
(positionFlag &
|
|
121
|
-
(PositionFlag.BeingLiquidated | PositionFlag.Bankruptcy)) >
|
|
122
|
-
0
|
|
123
|
-
)
|
|
124
|
-
) {
|
|
125
|
-
offset += 80;
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
const lastCumulativeFundingRate = readSignedBigInt64LE(buffer, offset);
|
|
130
|
-
offset += 24;
|
|
131
|
-
const quoteBreakEvenAmount = readSignedBigInt64LE(buffer, offset);
|
|
132
|
-
offset += 8;
|
|
133
|
-
const quoteEntryAmount = readSignedBigInt64LE(buffer, offset);
|
|
134
|
-
offset += 8;
|
|
135
|
-
const openBids = readSignedBigInt64LE(buffer, offset);
|
|
136
|
-
offset += 8;
|
|
137
|
-
const openAsks = readSignedBigInt64LE(buffer, offset);
|
|
138
|
-
offset += 8;
|
|
139
|
-
const settledPnl = readSignedBigInt64LE(buffer, offset);
|
|
140
|
-
offset += 8;
|
|
141
|
-
offset += 8; // isolated_position_scaled_balance (already pre-read above)
|
|
142
|
-
offset += 2; // skip padding[u8; 2]
|
|
143
|
-
const maxMarginRatio = buffer.readUInt16LE(offset); // offset+74
|
|
144
|
-
offset += 2;
|
|
145
|
-
const marketIndex = buffer.readUInt16LE(offset); // offset+76
|
|
146
|
-
offset += 4; // advance past marketIndex(2) + openOrders(1) + positionFlag(1)
|
|
147
|
-
perpPositions.push({
|
|
148
|
-
lastCumulativeFundingRate,
|
|
149
|
-
baseAssetAmount,
|
|
150
|
-
quoteAssetAmount,
|
|
151
|
-
quoteBreakEvenAmount,
|
|
152
|
-
quoteEntryAmount,
|
|
153
|
-
openBids,
|
|
154
|
-
openAsks,
|
|
155
|
-
settledPnl,
|
|
156
|
-
remainderBaseAssetAmount: 0,
|
|
157
|
-
marketIndex,
|
|
158
|
-
openOrders,
|
|
159
|
-
maxMarginRatio,
|
|
160
|
-
positionFlag,
|
|
161
|
-
isolatedPositionScaledBalance,
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
const orders: Order[] = [];
|
|
166
|
-
for (let i = 0; i < 32; i++) {
|
|
167
|
-
// skip order if it's not open
|
|
168
|
-
if (buffer.readUint8(offset + 86) !== 1) {
|
|
169
|
-
offset += 104;
|
|
170
|
-
continue;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
const slot = readUnsignedBigInt64LE(buffer, offset);
|
|
174
|
-
offset += 8;
|
|
175
|
-
const price = readUnsignedBigInt64LE(buffer, offset);
|
|
176
|
-
offset += 8;
|
|
177
|
-
const baseAssetAmount = readUnsignedBigInt64LE(buffer, offset);
|
|
178
|
-
offset += 8;
|
|
179
|
-
const baseAssetAmountFilled = readUnsignedBigInt64LE(buffer, offset);
|
|
180
|
-
offset += 8;
|
|
181
|
-
const quoteAssetAmountFilled = readUnsignedBigInt64LE(buffer, offset);
|
|
182
|
-
offset += 8;
|
|
183
|
-
const triggerPrice = readUnsignedBigInt64LE(buffer, offset);
|
|
184
|
-
offset += 8;
|
|
185
|
-
const auctionStartPrice = readSignedBigInt64LE(buffer, offset);
|
|
186
|
-
offset += 8;
|
|
187
|
-
const auctionEndPrice = readSignedBigInt64LE(buffer, offset);
|
|
188
|
-
offset += 8;
|
|
189
|
-
const maxTs = readSignedBigInt64LE(buffer, offset);
|
|
190
|
-
offset += 8;
|
|
191
|
-
const oraclePriceOffset = readSignedBigInt64LE(buffer, offset);
|
|
192
|
-
offset += 8;
|
|
193
|
-
const orderId = buffer.readUInt32LE(offset);
|
|
194
|
-
offset += 4;
|
|
195
|
-
const marketIndex = buffer.readUInt16LE(offset);
|
|
196
|
-
offset += 2;
|
|
197
|
-
const orderStatusNum = buffer.readUInt8(offset);
|
|
198
|
-
|
|
199
|
-
let status: OrderStatus;
|
|
200
|
-
if (orderStatusNum === 0) {
|
|
201
|
-
status = OrderStatus.INIT;
|
|
202
|
-
} else if (orderStatusNum === 1) {
|
|
203
|
-
status = OrderStatus.OPEN;
|
|
204
|
-
} else {
|
|
205
|
-
throw new Error(`decodeUser: unknown order status ${orderStatusNum}`);
|
|
206
|
-
}
|
|
207
|
-
offset += 1;
|
|
208
|
-
const orderTypeNum = buffer.readUInt8(offset);
|
|
209
|
-
let orderType: OrderType;
|
|
210
|
-
if (orderTypeNum === 0) {
|
|
211
|
-
orderType = OrderType.MARKET;
|
|
212
|
-
} else if (orderTypeNum === 1) {
|
|
213
|
-
orderType = OrderType.LIMIT;
|
|
214
|
-
} else if (orderTypeNum === 2) {
|
|
215
|
-
orderType = OrderType.TRIGGER_MARKET;
|
|
216
|
-
} else if (orderTypeNum === 3) {
|
|
217
|
-
orderType = OrderType.TRIGGER_LIMIT;
|
|
218
|
-
} else if (orderTypeNum === 4) {
|
|
219
|
-
orderType = OrderType.ORACLE;
|
|
220
|
-
} else {
|
|
221
|
-
throw new Error(`decodeUser: unknown order type ${orderTypeNum}`);
|
|
222
|
-
}
|
|
223
|
-
offset += 1;
|
|
224
|
-
const marketTypeNum = buffer.readUInt8(offset);
|
|
225
|
-
let marketType: MarketType;
|
|
226
|
-
if (marketTypeNum === 0) {
|
|
227
|
-
marketType = MarketType.SPOT;
|
|
228
|
-
} else {
|
|
229
|
-
marketType = MarketType.PERP;
|
|
230
|
-
}
|
|
231
|
-
offset += 1;
|
|
232
|
-
const userOrderId = buffer.readUint8(offset);
|
|
233
|
-
offset += 1;
|
|
234
|
-
const existingPositionDirectionNum = buffer.readUInt8(offset);
|
|
235
|
-
let existingPositionDirection: PositionDirection;
|
|
236
|
-
if (existingPositionDirectionNum === 0) {
|
|
237
|
-
existingPositionDirection = PositionDirection.LONG;
|
|
238
|
-
} else {
|
|
239
|
-
existingPositionDirection = PositionDirection.SHORT;
|
|
240
|
-
}
|
|
241
|
-
offset += 1;
|
|
242
|
-
const positionDirectionNum = buffer.readUInt8(offset);
|
|
243
|
-
let direction: PositionDirection;
|
|
244
|
-
if (positionDirectionNum === 0) {
|
|
245
|
-
direction = PositionDirection.LONG;
|
|
246
|
-
} else {
|
|
247
|
-
direction = PositionDirection.SHORT;
|
|
248
|
-
}
|
|
249
|
-
offset += 1;
|
|
250
|
-
const reduceOnly = buffer.readUInt8(offset) === 1;
|
|
251
|
-
offset += 1;
|
|
252
|
-
const postOnly = buffer.readUInt8(offset) === 1;
|
|
253
|
-
offset += 1;
|
|
254
|
-
const immediateOrCancel = buffer.readUInt8(offset) === 1;
|
|
255
|
-
offset += 1;
|
|
256
|
-
const triggerConditionNum = buffer.readUInt8(offset);
|
|
257
|
-
let triggerCondition: OrderTriggerCondition;
|
|
258
|
-
if (triggerConditionNum === 0) {
|
|
259
|
-
triggerCondition = OrderTriggerCondition.ABOVE;
|
|
260
|
-
} else if (triggerConditionNum === 1) {
|
|
261
|
-
triggerCondition = OrderTriggerCondition.BELOW;
|
|
262
|
-
} else if (triggerConditionNum === 2) {
|
|
263
|
-
triggerCondition = OrderTriggerCondition.TRIGGERED_ABOVE;
|
|
264
|
-
} else if (triggerConditionNum === 3) {
|
|
265
|
-
triggerCondition = OrderTriggerCondition.TRIGGERED_BELOW;
|
|
266
|
-
} else {
|
|
267
|
-
throw new Error(
|
|
268
|
-
`decodeUser: unknown trigger condition ${triggerConditionNum}`
|
|
269
|
-
);
|
|
270
|
-
}
|
|
271
|
-
offset += 1;
|
|
272
|
-
const auctionDuration = buffer.readUInt8(offset);
|
|
273
|
-
offset += 1;
|
|
274
|
-
const postedSlotTail = buffer.readUint8(offset);
|
|
275
|
-
offset += 1;
|
|
276
|
-
const bitFlags = buffer.readUint8(offset);
|
|
277
|
-
offset += 1;
|
|
278
|
-
offset += 5; // padding
|
|
279
|
-
orders.push({
|
|
280
|
-
slot,
|
|
281
|
-
price,
|
|
282
|
-
baseAssetAmount,
|
|
283
|
-
baseAssetAmountFilled,
|
|
284
|
-
quoteAssetAmountFilled,
|
|
285
|
-
triggerPrice,
|
|
286
|
-
auctionStartPrice,
|
|
287
|
-
auctionEndPrice,
|
|
288
|
-
maxTs,
|
|
289
|
-
oraclePriceOffset,
|
|
290
|
-
orderId,
|
|
291
|
-
marketIndex,
|
|
292
|
-
status,
|
|
293
|
-
orderType,
|
|
294
|
-
marketType,
|
|
295
|
-
userOrderId,
|
|
296
|
-
existingPositionDirection,
|
|
297
|
-
direction,
|
|
298
|
-
reduceOnly,
|
|
299
|
-
postOnly,
|
|
300
|
-
immediateOrCancel,
|
|
301
|
-
triggerCondition,
|
|
302
|
-
auctionDuration,
|
|
303
|
-
bitFlags,
|
|
304
|
-
postedSlotTail,
|
|
305
|
-
});
|
|
306
|
-
}
|
|
307
|
-
|
|
308
|
-
const totalDeposits = readUnsignedBigInt64LE(buffer, offset);
|
|
309
|
-
offset += 8;
|
|
310
|
-
|
|
311
|
-
const totalWithdraws = readUnsignedBigInt64LE(buffer, offset);
|
|
312
|
-
offset += 8;
|
|
313
|
-
|
|
314
|
-
const totalSocialLoss = readUnsignedBigInt64LE(buffer, offset);
|
|
315
|
-
offset += 8;
|
|
316
|
-
|
|
317
|
-
const settledPerpPnl = readSignedBigInt64LE(buffer, offset);
|
|
318
|
-
offset += 8;
|
|
319
|
-
|
|
320
|
-
const cumulativeSpotFees = readSignedBigInt64LE(buffer, offset);
|
|
321
|
-
offset += 8;
|
|
322
|
-
|
|
323
|
-
const cumulativePerpFunding = readSignedBigInt64LE(buffer, offset);
|
|
324
|
-
offset += 8;
|
|
325
|
-
|
|
326
|
-
const liquidationMarginFreed = readUnsignedBigInt64LE(buffer, offset);
|
|
327
|
-
offset += 8;
|
|
328
|
-
|
|
329
|
-
const lastActiveSlot = readUnsignedBigInt64LE(buffer, offset);
|
|
330
|
-
offset += 8;
|
|
331
|
-
|
|
332
|
-
const nextOrderId = buffer.readUInt32LE(offset);
|
|
333
|
-
offset += 4;
|
|
334
|
-
|
|
335
|
-
const maxMarginRatio = buffer.readUInt32LE(offset);
|
|
336
|
-
offset += 4;
|
|
337
|
-
|
|
338
|
-
const nextLiquidationId = buffer.readUInt16LE(offset);
|
|
339
|
-
offset += 2;
|
|
340
|
-
|
|
341
|
-
const subAccountId = buffer.readUInt16LE(offset);
|
|
342
|
-
offset += 2;
|
|
343
|
-
|
|
344
|
-
const status = buffer.readUInt8(offset);
|
|
345
|
-
offset += 1;
|
|
346
|
-
|
|
347
|
-
const isMarginTradingEnabled = buffer.readUInt8(offset) === 1;
|
|
348
|
-
offset += 1;
|
|
349
|
-
|
|
350
|
-
const idle = buffer.readUInt8(offset) === 1;
|
|
351
|
-
offset += 1;
|
|
352
|
-
|
|
353
|
-
const openOrders = buffer.readUInt8(offset);
|
|
354
|
-
offset += 1;
|
|
355
|
-
|
|
356
|
-
const hasOpenOrder = buffer.readUInt8(offset) === 1;
|
|
357
|
-
offset += 1;
|
|
358
|
-
|
|
359
|
-
const openAuctions = buffer.readUInt8(offset);
|
|
360
|
-
offset += 1;
|
|
361
|
-
|
|
362
|
-
const hasOpenAuction = buffer.readUInt8(offset) === 1;
|
|
363
|
-
offset += 1;
|
|
364
|
-
|
|
365
|
-
const poolId = buffer.readUint8(offset);
|
|
366
|
-
offset += 1;
|
|
367
|
-
|
|
368
|
-
const specialUserStatus = buffer.readUInt8(offset);
|
|
369
|
-
offset += 1;
|
|
370
|
-
|
|
371
|
-
offset += 14; // padding
|
|
372
|
-
return {
|
|
373
|
-
authority,
|
|
374
|
-
delegate,
|
|
375
|
-
name,
|
|
376
|
-
spotPositions,
|
|
377
|
-
perpPositions,
|
|
378
|
-
orders,
|
|
379
|
-
totalDeposits,
|
|
380
|
-
totalWithdraws,
|
|
381
|
-
totalSocialLoss,
|
|
382
|
-
settledPerpPnl,
|
|
383
|
-
cumulativeSpotFees,
|
|
384
|
-
cumulativePerpFunding,
|
|
385
|
-
liquidationMarginFreed,
|
|
386
|
-
lastActiveSlot,
|
|
387
|
-
nextOrderId,
|
|
388
|
-
maxMarginRatio,
|
|
389
|
-
nextLiquidationId,
|
|
390
|
-
subAccountId,
|
|
391
|
-
status,
|
|
392
|
-
isMarginTradingEnabled,
|
|
393
|
-
idle,
|
|
394
|
-
openOrders,
|
|
395
|
-
hasOpenOrder,
|
|
396
|
-
openAuctions,
|
|
397
|
-
hasOpenAuction,
|
|
398
|
-
poolId,
|
|
399
|
-
specialUserStatus,
|
|
400
|
-
};
|
|
401
|
-
}
|