@velocity-exchange/sdk 0.0.5 → 0.2.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/.prettierignore +1 -1
- package/CHANGELOG.md +35 -0
- package/README.md +30 -30
- package/bun.lock +24 -2
- package/lib/browser/accounts/basicUserAccountSubscriber.d.ts +5 -3
- package/lib/browser/accounts/basicUserAccountSubscriber.js +4 -3
- package/lib/browser/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
- package/lib/browser/accounts/basicUserStatsAccountSubscriber.js +4 -3
- package/lib/browser/accounts/bulkAccountLoader.d.ts +5 -5
- package/lib/browser/accounts/bulkAccountLoader.js +12 -1
- package/lib/browser/accounts/grpcAccountSubscriber.d.ts +2 -1
- package/lib/browser/accounts/grpcAccountSubscriber.js +8 -2
- package/lib/browser/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
- package/lib/browser/accounts/grpcMultiAccountSubscriber.js +13 -5
- package/lib/browser/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
- package/lib/browser/accounts/grpcMultiUserAccountSubscriber.js +12 -8
- package/lib/browser/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
- package/lib/browser/accounts/grpcProgramAccountSubscriber.js +9 -3
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +19 -6
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -5
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +44 -23
- package/lib/browser/accounts/laserProgramAccountSubscriber.js +4 -1
- package/lib/browser/accounts/oneShotUserAccountSubscriber.js +4 -3
- package/lib/browser/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
- package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
- package/lib/browser/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
- package/lib/browser/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
- package/lib/browser/accounts/pollingOracleAccountSubscriber.js +16 -5
- package/lib/browser/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
- package/lib/browser/accounts/pollingTokenAccountSubscriber.js +16 -5
- package/lib/browser/accounts/pollingUserAccountSubscriber.d.ts +8 -4
- package/lib/browser/accounts/pollingUserAccountSubscriber.js +17 -11
- package/lib/browser/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
- package/lib/browser/accounts/pollingUserStatsAccountSubscriber.js +6 -6
- package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -5
- package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +69 -35
- package/lib/browser/accounts/types.d.ts +6 -12
- package/lib/browser/accounts/utils.d.ts +1 -0
- package/lib/browser/accounts/utils.js +10 -3
- package/lib/browser/accounts/webSocketAccountSubscriber.d.ts +4 -2
- package/lib/browser/accounts/webSocketAccountSubscriber.js +17 -5
- package/lib/browser/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
- package/lib/browser/accounts/webSocketAccountSubscriberV2.js +17 -6
- package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
- package/lib/browser/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
- package/lib/browser/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
- package/lib/browser/accounts/webSocketProgramAccountSubscriber.js +14 -3
- package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
- package/lib/browser/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
- package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
- package/lib/browser/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
- package/lib/browser/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
- package/lib/browser/accounts/webSocketUserAccountSubscriber.js +9 -0
- package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
- package/lib/browser/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -8
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +52 -26
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -7
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +49 -20
- package/lib/browser/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
- package/lib/browser/accounts/websocketProgramUserAccountSubscriber.js +0 -3
- package/lib/browser/addresses/marketAddresses.js +3 -2
- package/lib/browser/addresses/pda.d.ts +1 -9
- package/lib/browser/addresses/pda.js +4 -23
- package/lib/browser/adminClient.d.ts +25 -29
- package/lib/browser/adminClient.js +168 -169
- package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +2 -4
- package/lib/browser/auctionSubscriber/auctionSubscriber.js +8 -10
- package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +2 -4
- package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +11 -10
- package/lib/browser/auctionSubscriber/types.d.ts +3 -2
- package/lib/browser/bankrun/bankrunConnection.d.ts +6 -4
- package/lib/browser/bankrun/bankrunConnection.js +69 -31
- package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
- package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +3 -2
- package/lib/browser/clock/clockSubscriber.d.ts +6 -6
- package/lib/browser/clock/clockSubscriber.js +4 -3
- package/lib/browser/config.d.ts +11 -20
- package/lib/browser/config.js +13 -36
- package/lib/browser/constants/index.d.ts +1 -2
- package/lib/browser/constants/index.js +1 -2
- package/lib/browser/constants/numericConstants.d.ts +1 -3
- package/lib/browser/constants/numericConstants.js +3 -5
- package/lib/browser/constituentMap/constituentMap.d.ts +0 -2
- package/lib/browser/constituentMap/constituentMap.js +10 -6
- package/lib/browser/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
- package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
- package/lib/browser/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
- package/lib/browser/core/VelocityCore.d.ts +9 -15
- package/lib/browser/core/VelocityCore.js +5 -7
- package/lib/browser/core/instructions/perpOrders.d.ts +14 -0
- package/lib/browser/core/instructions/perpOrders.js +14 -0
- package/lib/browser/core/instructions/withdraw.d.ts +1 -1
- package/lib/browser/core/instructions/withdraw.js +1 -1
- package/lib/browser/core/remainingAccounts.d.ts +2 -2
- package/lib/browser/core/remainingAccounts.js +5 -5
- package/lib/browser/decode/user.js +9 -1
- package/lib/browser/dlob/DLOB.d.ts +7 -2
- package/lib/browser/dlob/DLOB.js +205 -142
- package/lib/browser/dlob/DLOBNode.d.ts +5 -2
- package/lib/browser/dlob/DLOBNode.js +7 -0
- package/lib/browser/dlob/DLOBSubscriber.d.ts +0 -2
- package/lib/browser/dlob/DLOBSubscriber.js +39 -39
- package/lib/browser/dlob/NodeList.js +8 -7
- package/lib/browser/dlob/orderBookLevels.js +24 -17
- package/lib/browser/dlob/types.d.ts +0 -2
- package/lib/browser/events/eventList.js +4 -1
- package/lib/browser/events/eventSubscriber.d.ts +6 -3
- package/lib/browser/events/eventSubscriber.js +75 -26
- package/lib/browser/events/eventsServerLogProvider.d.ts +1 -1
- package/lib/browser/events/eventsServerLogProvider.js +17 -10
- package/lib/browser/events/fetchLogs.d.ts +1 -1
- package/lib/browser/events/fetchLogs.js +4 -2
- package/lib/browser/events/parse.js +14 -14
- package/lib/browser/events/pollingLogProvider.d.ts +1 -1
- package/lib/browser/events/pollingLogProvider.js +1 -0
- package/lib/browser/events/txEventCache.js +6 -2
- package/lib/browser/events/types.d.ts +3 -7
- package/lib/browser/events/types.js +1 -3
- package/lib/browser/events/webSocketLogProvider.d.ts +1 -1
- package/lib/browser/events/webSocketLogProvider.js +5 -2
- package/lib/browser/factory/bigNum.js +1 -1
- package/lib/{node/idl/drift.d.ts → browser/idl/velocity.d.ts} +2412 -2481
- package/lib/browser/idl/{drift.json → velocity.json} +2265 -2333
- package/lib/browser/index.d.ts +1 -3
- package/lib/browser/index.js +1 -4
- package/lib/browser/jupiter/jupiterClient.d.ts +1 -1
- package/lib/browser/jupiter/jupiterClient.js +18 -8
- package/lib/browser/marginCalculation.js +1 -0
- package/lib/browser/math/amm.d.ts +31 -13
- package/lib/browser/math/amm.js +87 -31
- package/lib/browser/math/auction.js +16 -12
- package/lib/browser/math/bankruptcy.js +1 -1
- package/lib/browser/math/builder.d.ts +18 -1
- package/lib/browser/math/builder.js +32 -1
- package/lib/browser/math/funding.js +30 -30
- package/lib/browser/math/insurance.d.ts +1 -1
- package/lib/browser/math/insurance.js +4 -5
- package/lib/browser/math/margin.d.ts +3 -11
- package/lib/browser/math/margin.js +10 -69
- package/lib/browser/math/market.d.ts +4 -12
- package/lib/browser/math/market.js +12 -46
- package/lib/browser/math/oracles.d.ts +4 -7
- package/lib/browser/math/oracles.js +24 -37
- package/lib/browser/math/orders.d.ts +2 -7
- package/lib/browser/math/orders.js +9 -81
- package/lib/browser/math/position.d.ts +0 -4
- package/lib/browser/math/position.js +6 -11
- package/lib/browser/math/repeg.d.ts +0 -1
- package/lib/browser/math/repeg.js +1 -23
- package/lib/browser/math/spotBalance.d.ts +4 -4
- package/lib/browser/math/spotBalance.js +6 -6
- package/lib/browser/math/spotMarket.d.ts +0 -6
- package/lib/browser/math/spotMarket.js +1 -16
- package/lib/browser/math/spotPosition.d.ts +4 -4
- package/lib/browser/math/state.d.ts +0 -2
- package/lib/browser/math/state.js +1 -9
- package/lib/browser/math/superStake.d.ts +11 -63
- package/lib/browser/math/superStake.js +29 -28
- package/lib/browser/math/trade.js +7 -7
- package/lib/browser/math/utils.d.ts +1 -1
- package/lib/browser/math/utils.js +1 -1
- package/lib/browser/memcmp.d.ts +0 -1
- package/lib/browser/memcmp.js +1 -10
- package/lib/browser/oracles/prelaunchOracleClient.js +3 -2
- package/lib/browser/oracles/pythClient.js +9 -3
- package/lib/browser/oracles/pythLazerClient.js +5 -4
- package/lib/browser/oracles/utils.d.ts +4 -0
- package/lib/browser/oracles/utils.js +9 -1
- package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -3
- package/lib/browser/orderSubscriber/OrderSubscriber.js +16 -14
- package/lib/browser/orderSubscriber/WebsocketSubscription.js +1 -1
- package/lib/browser/orderSubscriber/grpcSubscription.js +2 -2
- package/lib/browser/orderSubscriber/types.d.ts +0 -2
- package/lib/browser/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
- package/lib/browser/priorityFee/priorityFeeSubscriber.d.ts +2 -6
- package/lib/browser/priorityFee/priorityFeeSubscriber.js +34 -18
- package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
- package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +3 -11
- package/lib/browser/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
- package/lib/browser/priorityFee/types.d.ts +3 -8
- package/lib/browser/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
- package/lib/browser/priorityFee/velocityPriorityFeeMethod.js +1 -3
- package/lib/browser/pyth/pythLazerSubscriber.d.ts +1 -1
- package/lib/browser/pyth/pythLazerSubscriber.js +1 -1
- package/lib/browser/pyth/types.d.ts +0 -1
- package/lib/browser/slot/SlotSubscriber.d.ts +1 -1
- package/lib/browser/slot/SlotSubscriber.js +2 -1
- package/lib/browser/slot/SlothashSubscriber.d.ts +3 -2
- package/lib/browser/slot/SlothashSubscriber.js +11 -4
- package/lib/browser/swap/UnifiedSwapClient.js +1 -1
- package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
- package/lib/browser/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
- package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +7 -7
- package/lib/browser/swift/signedMsgUserAccountSubscriber.js +14 -10
- package/lib/browser/swift/swiftOrderSubscriber.d.ts +7 -6
- package/lib/browser/swift/swiftOrderSubscriber.js +15 -16
- package/lib/browser/testClient.js +3 -2
- package/lib/browser/tokenFaucet.js +16 -2
- package/lib/browser/tx/baseTxSender.d.ts +4 -4
- package/lib/browser/tx/baseTxSender.js +5 -4
- package/lib/browser/tx/fastSingleTxSender.d.ts +3 -3
- package/lib/browser/tx/fastSingleTxSender.js +9 -5
- package/lib/browser/tx/reportTransactionError.d.ts +2 -2
- package/lib/browser/tx/reportTransactionError.js +5 -1
- package/lib/browser/tx/retryTxSender.d.ts +1 -1
- package/lib/browser/tx/retryTxSender.js +4 -2
- package/lib/browser/tx/txHandler.d.ts +7 -1
- package/lib/browser/tx/txHandler.js +54 -40
- package/lib/browser/tx/txParamProcessor.d.ts +4 -1
- package/lib/browser/tx/txParamProcessor.js +6 -0
- package/lib/browser/tx/types.d.ts +1 -1
- package/lib/browser/tx/whileValidTxSender.d.ts +1 -6
- package/lib/browser/tx/whileValidTxSender.js +35 -13
- package/lib/browser/types.d.ts +102 -157
- package/lib/browser/types.js +6 -2
- package/lib/browser/user.d.ts +22 -10
- package/lib/browser/user.js +174 -154
- package/lib/browser/userConfig.d.ts +3 -2
- package/lib/browser/userMap/WebsocketSubscription.d.ts +1 -1
- package/lib/browser/userMap/WebsocketSubscription.js +1 -1
- package/lib/browser/userMap/grpcSubscription.d.ts +1 -1
- package/lib/browser/userMap/grpcSubscription.js +1 -1
- package/lib/browser/userMap/referrerMap.d.ts +0 -2
- package/lib/browser/userMap/referrerMap.js +10 -7
- package/lib/browser/userMap/revenueShareEscrowMap.d.ts +0 -2
- package/lib/browser/userMap/revenueShareEscrowMap.js +4 -4
- package/lib/browser/userMap/userMap.d.ts +3 -5
- package/lib/browser/userMap/userMap.js +39 -30
- package/lib/browser/userMap/userMapConfig.d.ts +3 -2
- package/lib/browser/userMap/userStatsMap.d.ts +1 -3
- package/lib/browser/userMap/userStatsMap.js +18 -17
- package/lib/browser/userStats.d.ts +7 -4
- package/lib/browser/userStats.js +28 -18
- package/lib/browser/userStatsConfig.d.ts +3 -2
- package/lib/browser/util/TransactionConfirmationManager.js +4 -2
- package/lib/browser/util/chainClock.d.ts +1 -1
- package/lib/browser/util/computeUnits.d.ts +1 -1
- package/lib/browser/util/computeUnits.js +6 -1
- package/lib/browser/util/ed25519Utils.d.ts +1 -1
- package/lib/browser/util/ed25519Utils.js +1 -1
- package/lib/browser/velocityClient.d.ts +144 -71
- package/lib/browser/velocityClient.js +653 -457
- package/lib/browser/velocityClientConfig.d.ts +0 -8
- package/lib/node/accounts/basicUserAccountSubscriber.d.ts +5 -3
- package/lib/node/accounts/basicUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/basicUserAccountSubscriber.js +4 -3
- package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts +5 -3
- package/lib/node/accounts/basicUserStatsAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/basicUserStatsAccountSubscriber.js +4 -3
- package/lib/node/accounts/bulkAccountLoader.d.ts +5 -5
- package/lib/node/accounts/bulkAccountLoader.d.ts.map +1 -1
- package/lib/node/accounts/bulkAccountLoader.js +12 -1
- package/lib/node/accounts/grpcAccountSubscriber.d.ts +2 -1
- package/lib/node/accounts/grpcAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcAccountSubscriber.js +8 -2
- package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts +3 -2
- package/lib/node/accounts/grpcMultiAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcMultiAccountSubscriber.js +13 -5
- package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts +2 -1
- package/lib/node/accounts/grpcMultiUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcMultiUserAccountSubscriber.js +12 -8
- package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts +2 -1
- package/lib/node/accounts/grpcProgramAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcProgramAccountSubscriber.js +9 -3
- package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/node/accounts/grpcVelocityClientAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/grpcVelocityClientAccountSubscriber.js +19 -6
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +1 -5
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +44 -23
- package/lib/node/accounts/laserProgramAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/laserProgramAccountSubscriber.js +4 -1
- package/lib/node/accounts/oneShotUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/oneShotUserAccountSubscriber.js +4 -3
- package/lib/node/accounts/oneShotUserStatsAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/oneShotUserStatsAccountSubscriber.js +7 -3
- package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts +4 -2
- package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingInsuranceFundStakeAccountSubscriber.js +3 -3
- package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts +0 -2
- package/lib/node/accounts/pollingOracleAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingOracleAccountSubscriber.js +16 -5
- package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts +0 -2
- package/lib/node/accounts/pollingTokenAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingTokenAccountSubscriber.js +16 -5
- package/lib/node/accounts/pollingUserAccountSubscriber.d.ts +8 -4
- package/lib/node/accounts/pollingUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingUserAccountSubscriber.js +17 -11
- package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts +4 -2
- package/lib/node/accounts/pollingUserStatsAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingUserStatsAccountSubscriber.js +6 -6
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +7 -5
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +69 -35
- package/lib/node/accounts/types.d.ts +6 -12
- package/lib/node/accounts/types.d.ts.map +1 -1
- package/lib/node/accounts/utils.d.ts +1 -0
- package/lib/node/accounts/utils.d.ts.map +1 -1
- package/lib/node/accounts/utils.js +10 -3
- package/lib/node/accounts/webSocketAccountSubscriber.d.ts +4 -2
- package/lib/node/accounts/webSocketAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketAccountSubscriber.js +17 -5
- package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts +4 -2
- package/lib/node/accounts/webSocketAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/webSocketAccountSubscriberV2.js +17 -6
- package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts +4 -2
- package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketInsuranceFundStakeAccountSubscriber.js +9 -0
- package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts +3 -1
- package/lib/node/accounts/webSocketProgramAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketProgramAccountSubscriber.js +14 -3
- package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts +3 -1
- package/lib/node/accounts/webSocketProgramAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/webSocketProgramAccountSubscriberV2.js +15 -3
- package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts +3 -1
- package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/webSocketProgramAccountsSubscriberV2.js +14 -4
- package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts +4 -2
- package/lib/node/accounts/webSocketUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketUserAccountSubscriber.js +9 -0
- package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts +4 -2
- package/lib/node/accounts/webSocketUserStatsAccountSubsriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketUserStatsAccountSubsriber.js +9 -0
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +4 -8
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +52 -26
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +7 -7
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +49 -20
- package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts +1 -1
- package/lib/node/accounts/websocketProgramUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/websocketProgramUserAccountSubscriber.js +0 -3
- package/lib/node/addresses/marketAddresses.d.ts.map +1 -1
- package/lib/node/addresses/marketAddresses.js +3 -2
- package/lib/node/addresses/pda.d.ts +1 -9
- package/lib/node/addresses/pda.d.ts.map +1 -1
- package/lib/node/addresses/pda.js +4 -23
- package/lib/node/adminClient.d.ts +25 -29
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +168 -169
- package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +2 -4
- package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
- package/lib/node/auctionSubscriber/auctionSubscriber.js +8 -10
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +2 -4
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +11 -10
- package/lib/node/auctionSubscriber/types.d.ts +3 -2
- package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
- package/lib/node/bankrun/bankrunConnection.d.ts +6 -4
- package/lib/node/bankrun/bankrunConnection.d.ts.map +1 -1
- package/lib/node/bankrun/bankrunConnection.js +69 -31
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +1 -1
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +3 -2
- package/lib/node/clock/clockSubscriber.d.ts +6 -6
- package/lib/node/clock/clockSubscriber.d.ts.map +1 -1
- package/lib/node/clock/clockSubscriber.js +4 -3
- package/lib/node/config.d.ts +11 -20
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +13 -36
- package/lib/node/constants/index.d.ts +1 -2
- package/lib/node/constants/index.d.ts.map +1 -1
- package/lib/node/constants/index.js +1 -2
- package/lib/node/constants/numericConstants.d.ts +1 -3
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +3 -5
- package/lib/node/constituentMap/constituentMap.d.ts +0 -2
- package/lib/node/constituentMap/constituentMap.d.ts.map +1 -1
- package/lib/node/constituentMap/constituentMap.js +10 -6
- package/lib/node/constituentMap/pollingConstituentAccountSubscriber.d.ts.map +1 -1
- package/lib/node/constituentMap/pollingConstituentAccountSubscriber.js +3 -2
- package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts +2 -3
- package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.d.ts.map +1 -1
- package/lib/node/constituentMap/webSocketConstituentAccountSubscriber.js +10 -3
- package/lib/node/core/VelocityCore.d.ts +9 -15
- package/lib/node/core/VelocityCore.d.ts.map +1 -1
- package/lib/node/core/VelocityCore.js +5 -7
- package/lib/node/core/instructions/perpOrders.d.ts +14 -0
- package/lib/node/core/instructions/perpOrders.d.ts.map +1 -1
- package/lib/node/core/instructions/perpOrders.js +14 -0
- package/lib/node/core/instructions/withdraw.d.ts +1 -1
- package/lib/node/core/instructions/withdraw.d.ts.map +1 -1
- package/lib/node/core/instructions/withdraw.js +1 -1
- package/lib/node/core/remainingAccounts.d.ts +2 -2
- package/lib/node/core/remainingAccounts.d.ts.map +1 -1
- package/lib/node/core/remainingAccounts.js +5 -5
- package/lib/node/decode/user.d.ts.map +1 -1
- package/lib/node/decode/user.js +9 -1
- package/lib/node/dlob/DLOB.d.ts +7 -2
- package/lib/node/dlob/DLOB.d.ts.map +1 -1
- package/lib/node/dlob/DLOB.js +205 -142
- package/lib/node/dlob/DLOBNode.d.ts +5 -2
- package/lib/node/dlob/DLOBNode.d.ts.map +1 -1
- package/lib/node/dlob/DLOBNode.js +7 -0
- package/lib/node/dlob/DLOBSubscriber.d.ts +0 -2
- package/lib/node/dlob/DLOBSubscriber.d.ts.map +1 -1
- package/lib/node/dlob/DLOBSubscriber.js +39 -39
- package/lib/node/dlob/NodeList.d.ts.map +1 -1
- package/lib/node/dlob/NodeList.js +8 -7
- package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
- package/lib/node/dlob/orderBookLevels.js +24 -17
- package/lib/node/dlob/types.d.ts +0 -2
- package/lib/node/dlob/types.d.ts.map +1 -1
- package/lib/node/events/eventList.d.ts +3 -3
- package/lib/node/events/eventList.d.ts.map +1 -1
- package/lib/node/events/eventList.js +4 -1
- package/lib/node/events/eventSubscriber.d.ts +6 -3
- package/lib/node/events/eventSubscriber.d.ts.map +1 -1
- package/lib/node/events/eventSubscriber.js +75 -26
- package/lib/node/events/eventsServerLogProvider.d.ts +2 -2
- package/lib/node/events/eventsServerLogProvider.d.ts.map +1 -1
- package/lib/node/events/eventsServerLogProvider.js +17 -10
- package/lib/node/events/fetchLogs.d.ts +1 -1
- package/lib/node/events/fetchLogs.d.ts.map +1 -1
- package/lib/node/events/fetchLogs.js +4 -2
- package/lib/node/events/parse.d.ts.map +1 -1
- package/lib/node/events/parse.js +14 -14
- package/lib/node/events/pollingLogProvider.d.ts +2 -2
- package/lib/node/events/pollingLogProvider.d.ts.map +1 -1
- package/lib/node/events/pollingLogProvider.js +1 -0
- package/lib/node/events/txEventCache.d.ts +3 -3
- package/lib/node/events/txEventCache.d.ts.map +1 -1
- package/lib/node/events/txEventCache.js +6 -2
- package/lib/node/events/types.d.ts +3 -7
- package/lib/node/events/types.d.ts.map +1 -1
- package/lib/node/events/types.js +1 -3
- package/lib/node/events/webSocketLogProvider.d.ts +2 -2
- package/lib/node/events/webSocketLogProvider.d.ts.map +1 -1
- package/lib/node/events/webSocketLogProvider.js +5 -2
- package/lib/node/factory/bigNum.js +1 -1
- package/lib/{browser/idl/drift.d.ts → node/idl/velocity.d.ts} +2413 -2480
- package/lib/node/idl/velocity.d.ts.map +1 -0
- package/lib/node/idl/{drift.json → velocity.json} +2265 -2333
- package/lib/node/index.d.ts +1 -3
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -4
- package/lib/node/jupiter/jupiterClient.d.ts +1 -1
- package/lib/node/jupiter/jupiterClient.d.ts.map +1 -1
- package/lib/node/jupiter/jupiterClient.js +18 -8
- package/lib/node/marginCalculation.d.ts.map +1 -1
- package/lib/node/marginCalculation.js +1 -0
- package/lib/node/math/amm.d.ts +31 -13
- package/lib/node/math/amm.d.ts.map +1 -1
- package/lib/node/math/amm.js +87 -31
- package/lib/node/math/auction.d.ts.map +1 -1
- package/lib/node/math/auction.js +16 -12
- package/lib/node/math/bankruptcy.js +1 -1
- package/lib/node/math/builder.d.ts +18 -1
- package/lib/node/math/builder.d.ts.map +1 -1
- package/lib/node/math/builder.js +32 -1
- package/lib/node/math/funding.d.ts.map +1 -1
- package/lib/node/math/funding.js +30 -30
- package/lib/node/math/insurance.d.ts +1 -1
- package/lib/node/math/insurance.d.ts.map +1 -1
- package/lib/node/math/insurance.js +4 -5
- package/lib/node/math/margin.d.ts +3 -11
- package/lib/node/math/margin.d.ts.map +1 -1
- package/lib/node/math/margin.js +10 -69
- package/lib/node/math/market.d.ts +4 -12
- package/lib/node/math/market.d.ts.map +1 -1
- package/lib/node/math/market.js +12 -46
- package/lib/node/math/oracles.d.ts +4 -7
- package/lib/node/math/oracles.d.ts.map +1 -1
- package/lib/node/math/oracles.js +24 -37
- package/lib/node/math/orders.d.ts +2 -7
- package/lib/node/math/orders.d.ts.map +1 -1
- package/lib/node/math/orders.js +9 -81
- package/lib/node/math/position.d.ts +1 -5
- package/lib/node/math/position.d.ts.map +1 -1
- package/lib/node/math/position.js +6 -11
- package/lib/node/math/repeg.d.ts +0 -1
- package/lib/node/math/repeg.d.ts.map +1 -1
- package/lib/node/math/repeg.js +1 -23
- package/lib/node/math/spotBalance.d.ts +4 -4
- package/lib/node/math/spotBalance.d.ts.map +1 -1
- package/lib/node/math/spotBalance.js +6 -6
- package/lib/node/math/spotMarket.d.ts +0 -6
- package/lib/node/math/spotMarket.d.ts.map +1 -1
- package/lib/node/math/spotMarket.js +1 -16
- package/lib/node/math/spotPosition.d.ts +4 -4
- package/lib/node/math/spotPosition.d.ts.map +1 -1
- package/lib/node/math/state.d.ts +0 -2
- package/lib/node/math/state.d.ts.map +1 -1
- package/lib/node/math/state.js +1 -9
- package/lib/node/math/superStake.d.ts +11 -63
- package/lib/node/math/superStake.d.ts.map +1 -1
- package/lib/node/math/superStake.js +29 -28
- package/lib/node/math/trade.d.ts +2 -2
- package/lib/node/math/trade.d.ts.map +1 -1
- package/lib/node/math/trade.js +7 -7
- package/lib/node/math/utils.d.ts +1 -1
- package/lib/node/math/utils.js +1 -1
- package/lib/node/memcmp.d.ts +0 -1
- package/lib/node/memcmp.d.ts.map +1 -1
- package/lib/node/memcmp.js +1 -10
- package/lib/node/oracles/oracleClientCache.d.ts +1 -1
- package/lib/node/oracles/prelaunchOracleClient.d.ts.map +1 -1
- package/lib/node/oracles/prelaunchOracleClient.js +3 -2
- package/lib/node/oracles/pythClient.d.ts.map +1 -1
- package/lib/node/oracles/pythClient.js +9 -3
- package/lib/node/oracles/pythLazerClient.d.ts.map +1 -1
- package/lib/node/oracles/pythLazerClient.js +5 -4
- package/lib/node/oracles/utils.d.ts +4 -0
- package/lib/node/oracles/utils.d.ts.map +1 -1
- package/lib/node/oracles/utils.js +9 -1
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -3
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +16 -14
- package/lib/node/orderSubscriber/WebsocketSubscription.js +1 -1
- package/lib/node/orderSubscriber/grpcSubscription.js +2 -2
- package/lib/node/orderSubscriber/types.d.ts +0 -2
- package/lib/node/orderSubscriber/types.d.ts.map +1 -1
- package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts +1 -1
- package/lib/node/priorityFee/heliusPriorityFeeMethod.d.ts.map +1 -1
- package/lib/node/priorityFee/priorityFeeSubscriber.d.ts +2 -6
- package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
- package/lib/node/priorityFee/priorityFeeSubscriber.js +34 -18
- package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
- package/lib/node/priorityFee/priorityFeeSubscriberMap.d.ts.map +1 -1
- package/lib/node/priorityFee/priorityFeeSubscriberMap.js +3 -11
- package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts +1 -1
- package/lib/node/priorityFee/solanaPriorityFeeMethod.d.ts.map +1 -1
- package/lib/node/priorityFee/types.d.ts +3 -8
- package/lib/node/priorityFee/types.d.ts.map +1 -1
- package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts +0 -8
- package/lib/node/priorityFee/velocityPriorityFeeMethod.d.ts.map +1 -1
- package/lib/node/priorityFee/velocityPriorityFeeMethod.js +1 -3
- package/lib/node/pyth/pythLazerSubscriber.d.ts +1 -1
- package/lib/node/pyth/pythLazerSubscriber.js +1 -1
- package/lib/node/pyth/types.d.ts +0 -1
- package/lib/node/pyth/types.d.ts.map +1 -1
- package/lib/node/slot/SlotSubscriber.d.ts +1 -1
- package/lib/node/slot/SlotSubscriber.d.ts.map +1 -1
- package/lib/node/slot/SlotSubscriber.js +2 -1
- package/lib/node/slot/SlothashSubscriber.d.ts +3 -2
- package/lib/node/slot/SlothashSubscriber.d.ts.map +1 -1
- package/lib/node/slot/SlothashSubscriber.js +11 -4
- package/lib/node/swap/UnifiedSwapClient.js +1 -1
- package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts +0 -3
- package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/swift/grpcSignedMsgUserAccountSubscriber.js +5 -5
- package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +7 -7
- package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/swift/signedMsgUserAccountSubscriber.js +14 -10
- package/lib/node/swift/swiftOrderSubscriber.d.ts +7 -6
- package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
- package/lib/node/swift/swiftOrderSubscriber.js +15 -16
- package/lib/node/testClient.js +3 -2
- package/lib/node/tokenFaucet.d.ts.map +1 -1
- package/lib/node/tokenFaucet.js +16 -2
- package/lib/node/tx/baseTxSender.d.ts +4 -4
- package/lib/node/tx/baseTxSender.d.ts.map +1 -1
- package/lib/node/tx/baseTxSender.js +5 -4
- package/lib/node/tx/fastSingleTxSender.d.ts +3 -3
- package/lib/node/tx/fastSingleTxSender.d.ts.map +1 -1
- package/lib/node/tx/fastSingleTxSender.js +9 -5
- package/lib/node/tx/reportTransactionError.d.ts +2 -2
- package/lib/node/tx/reportTransactionError.d.ts.map +1 -1
- package/lib/node/tx/reportTransactionError.js +5 -1
- package/lib/node/tx/retryTxSender.d.ts +1 -1
- package/lib/node/tx/retryTxSender.d.ts.map +1 -1
- package/lib/node/tx/retryTxSender.js +4 -2
- package/lib/node/tx/txHandler.d.ts +9 -3
- package/lib/node/tx/txHandler.d.ts.map +1 -1
- package/lib/node/tx/txHandler.js +54 -40
- package/lib/node/tx/txParamProcessor.d.ts +4 -1
- package/lib/node/tx/txParamProcessor.d.ts.map +1 -1
- package/lib/node/tx/txParamProcessor.js +6 -0
- package/lib/node/tx/types.d.ts +1 -1
- package/lib/node/tx/types.d.ts.map +1 -1
- package/lib/node/tx/whileValidTxSender.d.ts +1 -6
- package/lib/node/tx/whileValidTxSender.d.ts.map +1 -1
- package/lib/node/tx/whileValidTxSender.js +35 -13
- package/lib/node/types.d.ts +100 -155
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/types.js +6 -2
- package/lib/node/user.d.ts +22 -10
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +174 -154
- package/lib/node/userConfig.d.ts +3 -2
- package/lib/node/userConfig.d.ts.map +1 -1
- package/lib/node/userMap/WebsocketSubscription.d.ts +1 -1
- package/lib/node/userMap/WebsocketSubscription.d.ts.map +1 -1
- package/lib/node/userMap/WebsocketSubscription.js +1 -1
- package/lib/node/userMap/grpcSubscription.d.ts +1 -1
- package/lib/node/userMap/grpcSubscription.d.ts.map +1 -1
- package/lib/node/userMap/grpcSubscription.js +1 -1
- package/lib/node/userMap/referrerMap.d.ts +0 -2
- package/lib/node/userMap/referrerMap.d.ts.map +1 -1
- package/lib/node/userMap/referrerMap.js +10 -7
- package/lib/node/userMap/revenueShareEscrowMap.d.ts +0 -2
- package/lib/node/userMap/revenueShareEscrowMap.d.ts.map +1 -1
- package/lib/node/userMap/revenueShareEscrowMap.js +4 -4
- package/lib/node/userMap/userMap.d.ts +3 -5
- package/lib/node/userMap/userMap.d.ts.map +1 -1
- package/lib/node/userMap/userMap.js +39 -30
- package/lib/node/userMap/userMapConfig.d.ts +3 -2
- package/lib/node/userMap/userMapConfig.d.ts.map +1 -1
- package/lib/node/userMap/userStatsMap.d.ts +1 -3
- package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
- package/lib/node/userMap/userStatsMap.js +18 -17
- package/lib/node/userStats.d.ts +7 -4
- package/lib/node/userStats.d.ts.map +1 -1
- package/lib/node/userStats.js +28 -18
- package/lib/node/userStatsConfig.d.ts +3 -2
- package/lib/node/userStatsConfig.d.ts.map +1 -1
- package/lib/node/util/TransactionConfirmationManager.d.ts.map +1 -1
- package/lib/node/util/TransactionConfirmationManager.js +4 -2
- package/lib/node/util/chainClock.d.ts +1 -1
- package/lib/node/util/chainClock.d.ts.map +1 -1
- package/lib/node/util/computeUnits.d.ts +1 -1
- package/lib/node/util/computeUnits.d.ts.map +1 -1
- package/lib/node/util/computeUnits.js +6 -1
- package/lib/node/util/ed25519Utils.d.ts +1 -1
- package/lib/node/util/ed25519Utils.js +1 -1
- package/lib/node/velocityClient.d.ts +145 -72
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +653 -457
- package/lib/node/velocityClientConfig.d.ts +0 -8
- package/lib/node/velocityClientConfig.d.ts.map +1 -1
- package/package.json +10 -9
- package/scripts/deposit-isolated-positions.ts +2 -2
- package/scripts/find-flagged-users.ts +1 -1
- package/scripts/grpc-client-test-comparison.ts +4 -4
- package/scripts/grpc-multiuser-client-test-comparison.ts +2 -2
- package/scripts/single-grpc-client-test.ts +3 -3
- package/scripts/updateVersion.js +4 -4
- package/scripts/withdraw-isolated-positions.ts +2 -2
- package/src/accounts/basicUserAccountSubscriber.ts +7 -5
- package/src/accounts/basicUserStatsAccountSubscriber.ts +9 -5
- package/src/accounts/bulkAccountLoader.ts +20 -7
- package/src/accounts/grpcAccountSubscriber.ts +11 -3
- package/src/accounts/grpcMultiAccountSubscriber.ts +24 -9
- package/src/accounts/grpcMultiUserAccountSubscriber.ts +16 -12
- package/src/accounts/grpcProgramAccountSubscriber.ts +12 -4
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +17 -14
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +69 -49
- package/src/accounts/laserProgramAccountSubscriber.ts +4 -1
- package/src/accounts/oneShotUserAccountSubscriber.ts +5 -3
- package/src/accounts/oneShotUserStatsAccountSubscriber.ts +8 -3
- package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +11 -5
- package/src/accounts/pollingOracleAccountSubscriber.ts +17 -10
- package/src/accounts/pollingTokenAccountSubscriber.ts +17 -10
- package/src/accounts/pollingUserAccountSubscriber.ts +26 -20
- package/src/accounts/pollingUserStatsAccountSubscriber.ts +12 -10
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +80 -41
- package/src/accounts/types.ts +8 -13
- package/src/accounts/utils.ts +12 -2
- package/src/accounts/webSocketAccountSubscriber.ts +23 -10
- package/src/accounts/webSocketAccountSubscriberV2.ts +23 -8
- package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +17 -2
- package/src/accounts/webSocketProgramAccountSubscriber.ts +29 -4
- package/src/accounts/webSocketProgramAccountSubscriberV2.ts +30 -4
- package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +29 -4
- package/src/accounts/webSocketUserAccountSubscriber.ts +11 -2
- package/src/accounts/webSocketUserStatsAccountSubsriber.ts +15 -2
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +79 -58
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +77 -45
- package/src/accounts/websocketProgramUserAccountSubscriber.ts +1 -6
- package/src/addresses/marketAddresses.ts +3 -2
- package/src/addresses/pda.ts +3 -38
- package/src/adminClient.ts +285 -315
- package/src/auctionSubscriber/auctionSubscriber.ts +8 -11
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +13 -11
- package/src/auctionSubscriber/types.ts +3 -3
- package/src/bankrun/bankrunConnection.ts +83 -39
- package/src/blockhashSubscriber/BlockhashSubscriber.ts +5 -4
- package/src/clock/clockSubscriber.ts +10 -9
- package/src/config.ts +16 -70
- package/src/constants/index.ts +1 -2
- package/src/constants/numericConstants.ts +3 -3
- package/src/constituentMap/constituentMap.ts +10 -7
- package/src/constituentMap/pollingConstituentAccountSubscriber.ts +4 -2
- package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +13 -4
- package/src/core/VelocityCore.ts +11 -20
- package/src/core/instructions/perpOrders.ts +14 -0
- package/src/core/instructions/withdraw.ts +2 -2
- package/src/core/remainingAccounts.ts +7 -7
- package/src/decode/user.ts +8 -1
- package/src/dlob/DLOB.ts +300 -176
- package/src/dlob/DLOBNode.ts +23 -3
- package/src/dlob/DLOBSubscriber.ts +53 -42
- package/src/dlob/NodeList.ts +8 -7
- package/src/dlob/orderBookLevels.ts +51 -25
- package/src/dlob/types.ts +0 -2
- package/src/events/eventList.ts +4 -1
- package/src/events/eventSubscriber.ts +108 -50
- package/src/events/eventsServerLogProvider.ts +24 -15
- package/src/events/fetchLogs.ts +3 -3
- package/src/events/parse.ts +14 -14
- package/src/events/pollingLogProvider.ts +2 -2
- package/src/events/txEventCache.ts +8 -2
- package/src/events/types.ts +4 -15
- package/src/events/webSocketLogProvider.ts +5 -3
- package/src/factory/bigNum.ts +2 -2
- package/src/idl/{drift.json → velocity.json} +2265 -2333
- package/src/idl/{drift.ts → velocity.ts} +2267 -2335
- package/src/index.ts +1 -6
- package/src/jupiter/jupiterClient.ts +30 -10
- package/src/margin/README.md +2 -2
- package/src/marginCalculation.ts +1 -0
- package/src/math/amm.ts +217 -40
- package/src/math/auction.ts +16 -12
- package/src/math/bankruptcy.ts +1 -1
- package/src/math/builder.ts +45 -1
- package/src/math/funding.ts +51 -47
- package/src/math/insurance.ts +6 -8
- package/src/math/margin.ts +12 -119
- package/src/math/market.ts +16 -98
- package/src/math/oracles.ts +29 -43
- package/src/math/orders.ts +13 -109
- package/src/math/position.ts +6 -12
- package/src/math/repeg.ts +0 -29
- package/src/math/spotBalance.ts +14 -10
- package/src/math/spotMarket.ts +2 -28
- package/src/math/spotPosition.ts +4 -4
- package/src/math/state.ts +0 -8
- package/src/math/superStake.ts +36 -85
- package/src/math/trade.ts +7 -3
- package/src/math/utils.ts +1 -1
- package/src/memcmp.ts +0 -9
- package/src/oracles/prelaunchOracleClient.ts +7 -2
- package/src/oracles/pythClient.ts +12 -3
- package/src/oracles/pythLazerClient.ts +10 -5
- package/src/oracles/utils.ts +15 -0
- package/src/orderSubscriber/OrderSubscriber.ts +12 -12
- package/src/orderSubscriber/WebsocketSubscription.ts +1 -1
- package/src/orderSubscriber/grpcSubscription.ts +2 -2
- package/src/orderSubscriber/types.ts +0 -2
- package/src/priorityFee/heliusPriorityFeeMethod.ts +1 -1
- package/src/priorityFee/priorityFeeSubscriber.ts +50 -21
- package/src/priorityFee/priorityFeeSubscriberMap.ts +2 -10
- package/src/priorityFee/solanaPriorityFeeMethod.ts +1 -1
- package/src/priorityFee/types.ts +3 -13
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -12
- package/src/pyth/pythLazerSubscriber.ts +1 -1
- package/src/pyth/types.ts +0 -2
- package/src/slot/SlotSubscriber.ts +3 -3
- package/src/slot/SlothashSubscriber.ts +17 -6
- package/src/swap/UnifiedSwapClient.ts +1 -1
- package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +5 -6
- package/src/swift/signedMsgUserAccountSubscriber.ts +18 -16
- package/src/swift/swiftOrderSubscriber.ts +17 -21
- package/src/testClient.ts +2 -2
- package/src/tokenFaucet.ts +22 -3
- package/src/tx/baseTxSender.ts +10 -10
- package/src/tx/fastSingleTxSender.ts +12 -8
- package/src/tx/reportTransactionError.ts +12 -7
- package/src/tx/retryTxSender.ts +6 -4
- package/src/tx/txHandler.ts +88 -43
- package/src/tx/txParamProcessor.ts +18 -3
- package/src/tx/types.ts +1 -1
- package/src/tx/whileValidTxSender.ts +51 -22
- package/src/types.ts +119 -173
- package/src/user.ts +208 -165
- package/src/userConfig.ts +1 -3
- package/src/userMap/WebsocketSubscription.ts +2 -2
- package/src/userMap/grpcSubscription.ts +2 -2
- package/src/userMap/referrerMap.ts +13 -13
- package/src/userMap/revenueShareEscrowMap.ts +6 -5
- package/src/userMap/userMap.ts +46 -32
- package/src/userMap/userMapConfig.ts +3 -3
- package/src/userMap/userStatsMap.ts +32 -23
- package/src/userStats.ts +22 -13
- package/src/userStatsConfig.ts +3 -3
- package/src/util/TransactionConfirmationManager.ts +10 -2
- package/src/util/chainClock.ts +1 -1
- package/src/util/computeUnits.ts +7 -3
- package/src/util/ed25519Utils.ts +1 -1
- package/src/velocityClient.ts +867 -600
- package/src/velocityClientConfig.ts +0 -10
- package/tests/{DriftCore → VelocityCore}/decode.test.ts +1 -1
- package/tests/{DriftCore → VelocityCore}/fill_trigger.test.ts +1 -1
- package/tests/{DriftCore → VelocityCore}/instructions.test.ts +1 -1
- package/tests/{DriftCore → VelocityCore}/pdas.test.ts +4 -2
- package/tests/amm/test.ts +138 -0
- package/tests/ci/verifyConstants.ts +24 -27
- package/tests/decode/test.ts +2 -2
- package/tests/dlob/helpers.ts +11 -10
- package/tests/events/parseLogsForCuUsage.ts +15 -15
- package/tests/user/helpers.ts +9 -9
- package/tests/user/test.ts +13 -10
- package/tsconfig.json +1 -0
- package/lib/browser/constants/insuranceFund.d.ts +0 -5
- package/lib/browser/constants/insuranceFund.js +0 -9
- package/lib/browser/tx/forwardOnlyTxSender.d.ts +0 -37
- package/lib/browser/tx/forwardOnlyTxSender.js +0 -92
- package/lib/browser/util/deprecatedAlias.d.ts +0 -26
- package/lib/browser/util/deprecatedAlias.js +0 -10
- package/lib/browser/util/tps.d.ts +0 -2
- package/lib/browser/util/tps.js +0 -16
- package/lib/node/constants/insuranceFund.d.ts +0 -6
- package/lib/node/constants/insuranceFund.d.ts.map +0 -1
- package/lib/node/constants/insuranceFund.js +0 -9
- package/lib/node/idl/drift.d.ts.map +0 -1
- package/lib/node/tx/forwardOnlyTxSender.d.ts +0 -38
- package/lib/node/tx/forwardOnlyTxSender.d.ts.map +0 -1
- package/lib/node/tx/forwardOnlyTxSender.js +0 -92
- package/lib/node/util/deprecatedAlias.d.ts +0 -27
- package/lib/node/util/deprecatedAlias.d.ts.map +0 -1
- package/lib/node/util/deprecatedAlias.js +0 -10
- package/lib/node/util/tps.d.ts +0 -3
- package/lib/node/util/tps.d.ts.map +0 -1
- package/lib/node/util/tps.js +0 -16
- package/src/constants/insuranceFund.ts +0 -8
- package/src/tx/forwardOnlyTxSender.ts +0 -145
- package/src/util/deprecatedAlias.ts +0 -21
- package/src/util/tps.ts +0 -27
- /package/lib/browser/idl/{drift.js → velocity.js} +0 -0
- /package/lib/node/idl/{drift.js → velocity.js} +0 -0
- /package/tests/{DriftCore → VelocityCore}/perp_orders.test.ts +0 -0
- /package/tests/{DriftCore → VelocityCore}/remainingAccounts.test.ts +0 -0
- /package/tests/{DriftCore → VelocityCore}/settlement_liquidation.test.ts +0 -0
package/src/user.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* User — read-oriented abstraction over the on-chain `User` account.
|
|
3
3
|
*
|
|
4
4
|
* Responsibilities:
|
|
5
|
-
* - Margin and free-collateral calculations (mirrors `programs/
|
|
5
|
+
* - Margin and free-collateral calculations (mirrors `programs/velocity/src/math/margin.rs`).
|
|
6
6
|
* - Position accessors: perp positions, spot positions, unrealized PnL, leverage.
|
|
7
7
|
* - Open order queries and filtering.
|
|
8
8
|
* - Health factor and liquidation threshold checks.
|
|
@@ -58,6 +58,7 @@ import {
|
|
|
58
58
|
UserAccountEvents,
|
|
59
59
|
UserAccountSubscriber,
|
|
60
60
|
} from './accounts/types';
|
|
61
|
+
import { assertDataAndSlot } from './accounts/utils';
|
|
61
62
|
import { BigNum } from './factory/bigNum';
|
|
62
63
|
import { BN } from './isomorphic/anchor';
|
|
63
64
|
import { calculateBaseAssetValue, calculatePositionPNL } from './math/position';
|
|
@@ -129,10 +130,6 @@ export type MarginType = 'Cross' | 'Isolated';
|
|
|
129
130
|
|
|
130
131
|
export class User {
|
|
131
132
|
velocityClient: VelocityClient;
|
|
132
|
-
/** @deprecated Use `velocityClient` instead. `driftClient` will be removed in a future major. */
|
|
133
|
-
public get driftClient(): VelocityClient {
|
|
134
|
-
return this.velocityClient;
|
|
135
|
-
}
|
|
136
133
|
userAccountPublicKey: PublicKey;
|
|
137
134
|
accountSubscriber: UserAccountSubscriber;
|
|
138
135
|
_isSubscribed = false;
|
|
@@ -148,7 +145,7 @@ export class User {
|
|
|
148
145
|
|
|
149
146
|
public constructor(config: UserConfig) {
|
|
150
147
|
// Type-system guarantees at least one of the two is supplied.
|
|
151
|
-
const velocityClient =
|
|
148
|
+
const velocityClient = config.velocityClient!;
|
|
152
149
|
this.velocityClient = velocityClient;
|
|
153
150
|
this.userAccountPublicKey = config.userAccountPublicKey;
|
|
154
151
|
if (config.accountSubscription?.type === 'polling') {
|
|
@@ -228,19 +225,47 @@ export class User {
|
|
|
228
225
|
this.isSubscribed = false;
|
|
229
226
|
}
|
|
230
227
|
|
|
231
|
-
public getUserAccount(): UserAccount {
|
|
232
|
-
return this.accountSubscriber.getUserAccountAndSlot()
|
|
228
|
+
public getUserAccount(): UserAccount | undefined {
|
|
229
|
+
return this.accountSubscriber.getUserAccountAndSlot()?.data;
|
|
233
230
|
}
|
|
234
231
|
|
|
235
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Like {@link getUserAccount} but throws a named error instead of returning
|
|
234
|
+
* `undefined` when the account has not been loaded yet. Use at call sites
|
|
235
|
+
* that structurally require a loaded account.
|
|
236
|
+
*/
|
|
237
|
+
public getUserAccountOrThrow(): UserAccount {
|
|
238
|
+
const userAccount = this.getUserAccount();
|
|
239
|
+
if (!userAccount) {
|
|
240
|
+
throw new Error(
|
|
241
|
+
`User account not loaded: ${this.getUserAccountPublicKey().toString()}`
|
|
242
|
+
);
|
|
243
|
+
}
|
|
244
|
+
return userAccount;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
public async forceGetUserAccount(): Promise<UserAccount | undefined> {
|
|
236
248
|
await this.fetchAccounts();
|
|
237
|
-
|
|
249
|
+
const account = this.accountSubscriber.getUserAccountAndSlot();
|
|
250
|
+
return account?.data;
|
|
238
251
|
}
|
|
239
252
|
|
|
240
253
|
public getUserAccountAndSlot(): DataAndSlot<UserAccount> | undefined {
|
|
241
254
|
return this.accountSubscriber.getUserAccountAndSlot();
|
|
242
255
|
}
|
|
243
256
|
|
|
257
|
+
/**
|
|
258
|
+
* Like {@link getUserAccountAndSlot} but throws a named error instead of
|
|
259
|
+
* returning `undefined` when the account has not been loaded yet. Use at
|
|
260
|
+
* call sites that structurally require a loaded account.
|
|
261
|
+
*/
|
|
262
|
+
public getUserAccountAndSlotOrThrow(): DataAndSlot<UserAccount> {
|
|
263
|
+
return assertDataAndSlot(
|
|
264
|
+
this.accountSubscriber.getUserAccountAndSlot(),
|
|
265
|
+
`User account not loaded: ${this.getUserAccountPublicKey().toString()}`
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
|
|
244
269
|
public getPerpPositionForUserAccount(
|
|
245
270
|
userAccount: UserAccount,
|
|
246
271
|
marketIndex: number
|
|
@@ -256,22 +281,30 @@ export class User {
|
|
|
256
281
|
* @returns userPerpPosition
|
|
257
282
|
*/
|
|
258
283
|
public getPerpPosition(marketIndex: number): PerpPosition | undefined {
|
|
259
|
-
const userAccount = this.
|
|
284
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
260
285
|
return this.getPerpPositionForUserAccount(userAccount, marketIndex);
|
|
261
286
|
}
|
|
262
287
|
|
|
263
288
|
public getPerpPositionOrEmpty(marketIndex: number): PerpPosition {
|
|
264
|
-
const userAccount = this.
|
|
289
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
265
290
|
return (
|
|
266
291
|
this.getPerpPositionForUserAccount(userAccount, marketIndex) ??
|
|
267
292
|
this.getEmptyPosition(marketIndex)
|
|
268
293
|
);
|
|
269
294
|
}
|
|
270
295
|
|
|
296
|
+
public getPerpPositionOrThrow(marketIndex: number): PerpPosition {
|
|
297
|
+
const position = this.getPerpPosition(marketIndex);
|
|
298
|
+
if (!position) {
|
|
299
|
+
throw new Error(`No perp position found for market ${marketIndex}`);
|
|
300
|
+
}
|
|
301
|
+
return position;
|
|
302
|
+
}
|
|
303
|
+
|
|
271
304
|
public getPerpPositionAndSlot(
|
|
272
305
|
marketIndex: number
|
|
273
306
|
): DataAndSlot<PerpPosition | undefined> {
|
|
274
|
-
const userAccount = this.
|
|
307
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
275
308
|
const perpPosition = this.getPerpPositionForUserAccount(
|
|
276
309
|
userAccount.data,
|
|
277
310
|
marketIndex
|
|
@@ -297,14 +330,14 @@ export class User {
|
|
|
297
330
|
* @returns userSpotPosition
|
|
298
331
|
*/
|
|
299
332
|
public getSpotPosition(marketIndex: number): SpotPosition | undefined {
|
|
300
|
-
const userAccount = this.
|
|
333
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
301
334
|
return this.getSpotPositionForUserAccount(userAccount, marketIndex);
|
|
302
335
|
}
|
|
303
336
|
|
|
304
337
|
public getSpotPositionAndSlot(
|
|
305
338
|
marketIndex: number
|
|
306
339
|
): DataAndSlot<SpotPosition | undefined> {
|
|
307
|
-
const userAccount = this.
|
|
340
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
308
341
|
const spotPosition = this.getSpotPositionForUserAccount(
|
|
309
342
|
userAccount.data,
|
|
310
343
|
marketIndex
|
|
@@ -338,7 +371,8 @@ export class User {
|
|
|
338
371
|
if (spotPosition === undefined) {
|
|
339
372
|
return ZERO;
|
|
340
373
|
}
|
|
341
|
-
const spotMarket =
|
|
374
|
+
const spotMarket =
|
|
375
|
+
this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
342
376
|
return getSignedTokenAmount(
|
|
343
377
|
getTokenAmount(
|
|
344
378
|
spotPosition.scaledBalance,
|
|
@@ -376,8 +410,8 @@ export class User {
|
|
|
376
410
|
const perpPosition = this.getPerpPosition(perpMarketIndex);
|
|
377
411
|
if (!perpPosition) return ZERO;
|
|
378
412
|
const perpMarket =
|
|
379
|
-
this.velocityClient.
|
|
380
|
-
const spotMarket = this.velocityClient.
|
|
413
|
+
this.velocityClient.getPerpMarketAccountOrThrow(perpMarketIndex);
|
|
414
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
381
415
|
perpMarket.quoteSpotMarketIndex
|
|
382
416
|
);
|
|
383
417
|
if (perpPosition === undefined) {
|
|
@@ -399,10 +433,10 @@ export class User {
|
|
|
399
433
|
return total;
|
|
400
434
|
}
|
|
401
435
|
|
|
402
|
-
const perpMarket = this.velocityClient.
|
|
436
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
403
437
|
perpPosition.marketIndex
|
|
404
438
|
);
|
|
405
|
-
const quoteSpotMarket = this.velocityClient.
|
|
439
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
406
440
|
perpMarket.quoteSpotMarketIndex
|
|
407
441
|
);
|
|
408
442
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(
|
|
@@ -442,12 +476,12 @@ export class User {
|
|
|
442
476
|
* @returns Order
|
|
443
477
|
*/
|
|
444
478
|
public getOrder(orderId: number): Order | undefined {
|
|
445
|
-
const userAccount = this.
|
|
479
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
446
480
|
return this.getOrderForUserAccount(userAccount, orderId);
|
|
447
481
|
}
|
|
448
482
|
|
|
449
483
|
public getOrderAndSlot(orderId: number): DataAndSlot<Order | undefined> {
|
|
450
|
-
const userAccount = this.
|
|
484
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
451
485
|
const order = this.getOrderForUserAccount(userAccount.data, orderId);
|
|
452
486
|
return {
|
|
453
487
|
data: order,
|
|
@@ -469,14 +503,14 @@ export class User {
|
|
|
469
503
|
* @returns Order
|
|
470
504
|
*/
|
|
471
505
|
public getOrderByUserOrderId(userOrderId: number): Order | undefined {
|
|
472
|
-
const userAccount = this.
|
|
506
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
473
507
|
return this.getOrderByUserIdForUserAccount(userAccount, userOrderId);
|
|
474
508
|
}
|
|
475
509
|
|
|
476
510
|
public getOrderByUserOrderIdAndSlot(
|
|
477
511
|
userOrderId: number
|
|
478
512
|
): DataAndSlot<Order | undefined> {
|
|
479
|
-
const userAccount = this.
|
|
513
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
480
514
|
const order = this.getOrderByUserIdForUserAccount(
|
|
481
515
|
userAccount.data,
|
|
482
516
|
userOrderId
|
|
@@ -487,7 +521,9 @@ export class User {
|
|
|
487
521
|
};
|
|
488
522
|
}
|
|
489
523
|
|
|
490
|
-
public getOpenOrdersForUserAccount(
|
|
524
|
+
public getOpenOrdersForUserAccount(
|
|
525
|
+
userAccount?: UserAccount
|
|
526
|
+
): Order[] | undefined {
|
|
491
527
|
return userAccount?.orders.filter((order) =>
|
|
492
528
|
isVariant(order.status, 'open')
|
|
493
529
|
);
|
|
@@ -495,12 +531,12 @@ export class User {
|
|
|
495
531
|
|
|
496
532
|
public getOpenOrders(): Order[] {
|
|
497
533
|
const userAccount = this.getUserAccount();
|
|
498
|
-
return this.getOpenOrdersForUserAccount(userAccount);
|
|
534
|
+
return this.getOpenOrdersForUserAccount(userAccount) ?? [];
|
|
499
535
|
}
|
|
500
536
|
|
|
501
537
|
public getOpenOrdersAndSlot(): DataAndSlot<Order[]> {
|
|
502
|
-
const userAccount = this.
|
|
503
|
-
const openOrders = this.getOpenOrdersForUserAccount(userAccount.data);
|
|
538
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
539
|
+
const openOrders = this.getOpenOrdersForUserAccount(userAccount.data) ?? [];
|
|
504
540
|
return {
|
|
505
541
|
data: openOrders,
|
|
506
542
|
slot: userAccount.slot,
|
|
@@ -525,7 +561,7 @@ export class User {
|
|
|
525
561
|
* @returns : open asks
|
|
526
562
|
*/
|
|
527
563
|
public getPerpBidAsks(marketIndex: number): [BN, BN] {
|
|
528
|
-
const position = this.
|
|
564
|
+
const position = this.getPerpPositionOrThrow(marketIndex);
|
|
529
565
|
|
|
530
566
|
const totalOpenBids = position.openBids;
|
|
531
567
|
const totalOpenAsks = position.openAsks;
|
|
@@ -540,12 +576,13 @@ export class User {
|
|
|
540
576
|
public getPerpBuyingPower(
|
|
541
577
|
marketIndex: number,
|
|
542
578
|
collateralBuffer = ZERO,
|
|
543
|
-
maxMarginRatio = undefined,
|
|
579
|
+
maxMarginRatio: number | undefined = undefined,
|
|
544
580
|
positionType: 'isolated' | 'cross' = 'cross'
|
|
545
581
|
): BN {
|
|
546
582
|
const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
547
583
|
|
|
548
|
-
const perpMarket =
|
|
584
|
+
const perpMarket =
|
|
585
|
+
this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
|
|
549
586
|
const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
|
|
550
587
|
const worstCaseBaseAssetAmount = perpPosition
|
|
551
588
|
? calculateWorstCaseBaseAssetAmount(
|
|
@@ -595,18 +632,24 @@ export class User {
|
|
|
595
632
|
);
|
|
596
633
|
}
|
|
597
634
|
|
|
635
|
+
private resolveMaxMarginRatio(perpMarketMaxMarginRatio?: number): number {
|
|
636
|
+
// 0 means "no custom margin ratio override", so Math.max returns
|
|
637
|
+
// userAccount.maxMarginRatio unchanged — the expected semantic.
|
|
638
|
+
return Math.max(
|
|
639
|
+
perpMarketMaxMarginRatio ?? 0,
|
|
640
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
641
|
+
);
|
|
642
|
+
}
|
|
643
|
+
|
|
598
644
|
getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(
|
|
599
645
|
marketIndex: number,
|
|
600
646
|
freeCollateral: BN,
|
|
601
647
|
baseAssetAmount: BN,
|
|
602
|
-
perpMarketMaxMarginRatio = undefined
|
|
648
|
+
perpMarketMaxMarginRatio: number | undefined = undefined
|
|
603
649
|
): BN {
|
|
604
|
-
const maxMarginRatio =
|
|
605
|
-
perpMarketMaxMarginRatio,
|
|
606
|
-
this.getUserAccount().maxMarginRatio
|
|
607
|
-
);
|
|
650
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
608
651
|
const marginRatio = calculateMarketMarginRatio(
|
|
609
|
-
this.velocityClient.
|
|
652
|
+
this.velocityClient.getPerpMarketAccountOrThrow(marketIndex),
|
|
610
653
|
baseAssetAmount,
|
|
611
654
|
'Initial',
|
|
612
655
|
maxMarginRatio
|
|
@@ -751,11 +794,11 @@ export class User {
|
|
|
751
794
|
}
|
|
752
795
|
|
|
753
796
|
public getActivePerpPositions(): PerpPosition[] {
|
|
754
|
-
const userAccount = this.
|
|
797
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
755
798
|
return this.getActivePerpPositionsForUserAccount(userAccount);
|
|
756
799
|
}
|
|
757
800
|
public getActivePerpPositionsAndSlot(): DataAndSlot<PerpPosition[]> {
|
|
758
|
-
const userAccount = this.
|
|
801
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
759
802
|
const positions = this.getActivePerpPositionsForUserAccount(
|
|
760
803
|
userAccount.data
|
|
761
804
|
);
|
|
@@ -774,11 +817,11 @@ export class User {
|
|
|
774
817
|
}
|
|
775
818
|
|
|
776
819
|
public getActiveSpotPositions(): SpotPosition[] {
|
|
777
|
-
const userAccount = this.
|
|
820
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
778
821
|
return this.getActiveSpotPositionsForUserAccount(userAccount);
|
|
779
822
|
}
|
|
780
823
|
public getActiveSpotPositionsAndSlot(): DataAndSlot<SpotPosition[]> {
|
|
781
|
-
const userAccount = this.
|
|
824
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
782
825
|
const positions = this.getActiveSpotPositionsForUserAccount(
|
|
783
826
|
userAccount.data
|
|
784
827
|
);
|
|
@@ -804,14 +847,14 @@ export class User {
|
|
|
804
847
|
marketIndex !== undefined ? pos.marketIndex === marketIndex : true
|
|
805
848
|
)
|
|
806
849
|
.reduce((unrealizedPnl, perpPosition) => {
|
|
807
|
-
const market = this.velocityClient.
|
|
850
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
808
851
|
perpPosition.marketIndex
|
|
809
852
|
);
|
|
810
853
|
const oraclePriceData = this.getMMOracleDataForPerpMarket(
|
|
811
854
|
market.marketIndex
|
|
812
855
|
);
|
|
813
856
|
|
|
814
|
-
const quoteSpotMarket = this.velocityClient.
|
|
857
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
815
858
|
market.quoteSpotMarketIndex
|
|
816
859
|
);
|
|
817
860
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(
|
|
@@ -875,12 +918,12 @@ export class User {
|
|
|
875
918
|
* @returns : Precision QUOTE_PRECISION
|
|
876
919
|
*/
|
|
877
920
|
public getUnrealizedFundingPNL(marketIndex?: number): BN {
|
|
878
|
-
return this.
|
|
921
|
+
return this.getUserAccountOrThrow()
|
|
879
922
|
.perpPositions.filter((pos) =>
|
|
880
923
|
marketIndex !== undefined ? pos.marketIndex === marketIndex : true
|
|
881
924
|
)
|
|
882
925
|
.reduce((pnl, perpPosition) => {
|
|
883
|
-
const market = this.velocityClient.
|
|
926
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
884
927
|
perpPosition.marketIndex
|
|
885
928
|
);
|
|
886
929
|
return pnl.add(calculateUnsettledFundingPnl(market, perpPosition));
|
|
@@ -899,7 +942,7 @@ export class User {
|
|
|
899
942
|
let netQuoteValue = ZERO;
|
|
900
943
|
let totalAssetValue = ZERO;
|
|
901
944
|
let totalLiabilityValue = ZERO;
|
|
902
|
-
for (const spotPosition of this.
|
|
945
|
+
for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
|
|
903
946
|
const countForBase =
|
|
904
947
|
marketIndex === undefined || spotPosition.marketIndex === marketIndex;
|
|
905
948
|
|
|
@@ -915,7 +958,9 @@ export class User {
|
|
|
915
958
|
}
|
|
916
959
|
|
|
917
960
|
const spotMarketAccount: SpotMarketAccount =
|
|
918
|
-
this.velocityClient.
|
|
961
|
+
this.velocityClient.getSpotMarketAccountOrThrow(
|
|
962
|
+
spotPosition.marketIndex
|
|
963
|
+
);
|
|
919
964
|
|
|
920
965
|
const oraclePriceData = this.getOracleDataForSpotMarket(
|
|
921
966
|
spotPosition.marketIndex
|
|
@@ -1018,7 +1063,7 @@ export class User {
|
|
|
1018
1063
|
spotMarketAccount,
|
|
1019
1064
|
strictOraclePrice,
|
|
1020
1065
|
marginCategory,
|
|
1021
|
-
this.
|
|
1066
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
1022
1067
|
);
|
|
1023
1068
|
|
|
1024
1069
|
if (worstCaseTokenAmount.gt(ZERO) && countForBase) {
|
|
@@ -1051,7 +1096,10 @@ export class User {
|
|
|
1051
1096
|
if (worstCaseQuoteTokenAmount.lt(ZERO) && countForQuote) {
|
|
1052
1097
|
let weight = SPOT_MARKET_WEIGHT_PRECISION;
|
|
1053
1098
|
if (marginCategory === 'Initial') {
|
|
1054
|
-
weight = BN.max(
|
|
1099
|
+
weight = BN.max(
|
|
1100
|
+
weight,
|
|
1101
|
+
new BN(this.getUserAccountOrThrow().maxMarginRatio)
|
|
1102
|
+
);
|
|
1055
1103
|
}
|
|
1056
1104
|
|
|
1057
1105
|
const weightedTokenValue = worstCaseQuoteTokenAmount
|
|
@@ -1108,7 +1156,7 @@ export class User {
|
|
|
1108
1156
|
tokenAmount,
|
|
1109
1157
|
strictOraclePrice,
|
|
1110
1158
|
spotMarketAccount,
|
|
1111
|
-
this.
|
|
1159
|
+
this.getUserAccountOrThrow().maxMarginRatio,
|
|
1112
1160
|
marginCategory,
|
|
1113
1161
|
liquidationBuffer
|
|
1114
1162
|
);
|
|
@@ -1142,7 +1190,7 @@ export class User {
|
|
|
1142
1190
|
tokenAmount,
|
|
1143
1191
|
strictOraclePrice,
|
|
1144
1192
|
spotMarketAccount,
|
|
1145
|
-
this.
|
|
1193
|
+
this.getUserAccountOrThrow().maxMarginRatio,
|
|
1146
1194
|
marginCategory
|
|
1147
1195
|
);
|
|
1148
1196
|
}
|
|
@@ -1203,8 +1251,15 @@ export class User {
|
|
|
1203
1251
|
});
|
|
1204
1252
|
|
|
1205
1253
|
if (perpMarketIndex !== undefined) {
|
|
1206
|
-
const
|
|
1254
|
+
const isolatedMarginCalculation =
|
|
1207
1255
|
marginCalc.isolatedMarginCalculations.get(perpMarketIndex);
|
|
1256
|
+
if (!isolatedMarginCalculation) {
|
|
1257
|
+
throw new Error(
|
|
1258
|
+
`No isolated margin calculation for perp market ${perpMarketIndex}`
|
|
1259
|
+
);
|
|
1260
|
+
}
|
|
1261
|
+
const { totalCollateral, totalCollateralBuffer } =
|
|
1262
|
+
isolatedMarginCalculation;
|
|
1208
1263
|
if (liquidationBuffer?.gt(ZERO)) {
|
|
1209
1264
|
return totalCollateralBuffer;
|
|
1210
1265
|
}
|
|
@@ -1304,7 +1359,7 @@ export class User {
|
|
|
1304
1359
|
includeOpenOrders?: boolean,
|
|
1305
1360
|
strict = false
|
|
1306
1361
|
): BN {
|
|
1307
|
-
const market = this.velocityClient.
|
|
1362
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
1308
1363
|
perpPosition.marketIndex
|
|
1309
1364
|
);
|
|
1310
1365
|
|
|
@@ -1338,7 +1393,7 @@ export class User {
|
|
|
1338
1393
|
if (marginCategory) {
|
|
1339
1394
|
const userCustomMargin = Math.max(
|
|
1340
1395
|
perpPosition.maxMarginRatio,
|
|
1341
|
-
this.
|
|
1396
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
1342
1397
|
);
|
|
1343
1398
|
let marginRatio = new BN(
|
|
1344
1399
|
calculateMarketMarginRatio(
|
|
@@ -1357,7 +1412,7 @@ export class User {
|
|
|
1357
1412
|
marginRatio = ZERO;
|
|
1358
1413
|
}
|
|
1359
1414
|
|
|
1360
|
-
const quoteSpotMarket = this.velocityClient.
|
|
1415
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
1361
1416
|
market.quoteSpotMarketIndex
|
|
1362
1417
|
);
|
|
1363
1418
|
const quoteOraclePriceData =
|
|
@@ -1400,7 +1455,7 @@ export class User {
|
|
|
1400
1455
|
includeOpenOrders?: boolean,
|
|
1401
1456
|
strict = false
|
|
1402
1457
|
): BN {
|
|
1403
|
-
const perpPosition = this.
|
|
1458
|
+
const perpPosition = this.getPerpPositionOrThrow(marketIndex);
|
|
1404
1459
|
return this.calculateWeightedPerpPositionLiability(
|
|
1405
1460
|
perpPosition,
|
|
1406
1461
|
marginCategory,
|
|
@@ -1445,7 +1500,7 @@ export class User {
|
|
|
1445
1500
|
includeOpenOrders = false
|
|
1446
1501
|
): BN {
|
|
1447
1502
|
const userPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
1448
|
-
const market = this.velocityClient.
|
|
1503
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
1449
1504
|
userPosition.marketIndex
|
|
1450
1505
|
);
|
|
1451
1506
|
return calculateBaseAssetValueWithOracle(
|
|
@@ -1466,7 +1521,7 @@ export class User {
|
|
|
1466
1521
|
includeOpenOrders = false
|
|
1467
1522
|
): BN {
|
|
1468
1523
|
const userPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
1469
|
-
const market = this.velocityClient.
|
|
1524
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
1470
1525
|
userPosition.marketIndex
|
|
1471
1526
|
);
|
|
1472
1527
|
|
|
@@ -1505,7 +1560,7 @@ export class User {
|
|
|
1505
1560
|
amountToClose?: BN,
|
|
1506
1561
|
useAMMClose = false
|
|
1507
1562
|
): [BN, BN] {
|
|
1508
|
-
const market = this.velocityClient.
|
|
1563
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
1509
1564
|
position.marketIndex
|
|
1510
1565
|
);
|
|
1511
1566
|
|
|
@@ -1594,7 +1649,7 @@ export class User {
|
|
|
1594
1649
|
|
|
1595
1650
|
getLeverageComponents(
|
|
1596
1651
|
includeOpenOrders = true,
|
|
1597
|
-
marginCategory: MarginCategory = undefined,
|
|
1652
|
+
marginCategory: MarginCategory | undefined = undefined,
|
|
1598
1653
|
perpMarketIndex?: number
|
|
1599
1654
|
): {
|
|
1600
1655
|
perpLiabilityValue: BN;
|
|
@@ -1610,14 +1665,14 @@ export class User {
|
|
|
1610
1665
|
undefined,
|
|
1611
1666
|
includeOpenOrders
|
|
1612
1667
|
);
|
|
1613
|
-
const perpMarket = this.velocityClient.
|
|
1668
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
1614
1669
|
perpPosition.marketIndex
|
|
1615
1670
|
);
|
|
1616
1671
|
|
|
1617
1672
|
const oraclePriceData = this.getOracleDataForPerpMarket(
|
|
1618
1673
|
perpPosition.marketIndex
|
|
1619
1674
|
);
|
|
1620
|
-
const quoteSpotMarket = this.velocityClient.
|
|
1675
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
1621
1676
|
perpMarket.quoteSpotMarketIndex
|
|
1622
1677
|
);
|
|
1623
1678
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(
|
|
@@ -1690,6 +1745,12 @@ export class User {
|
|
|
1690
1745
|
|
|
1691
1746
|
const spotPosition = this.getSpotPosition(spotMarketAccount.marketIndex);
|
|
1692
1747
|
|
|
1748
|
+
if (!spotPosition) {
|
|
1749
|
+
throw new Error(
|
|
1750
|
+
`No spot position found for market ${spotMarketAccount.marketIndex}`
|
|
1751
|
+
);
|
|
1752
|
+
}
|
|
1753
|
+
|
|
1693
1754
|
if (isSpotPositionAvailable(spotPosition)) {
|
|
1694
1755
|
return false;
|
|
1695
1756
|
}
|
|
@@ -1776,8 +1837,8 @@ export class User {
|
|
|
1776
1837
|
*/
|
|
1777
1838
|
getTotalAllTimePnl(): BN {
|
|
1778
1839
|
const netUsdValue = this.getNetUsdValue();
|
|
1779
|
-
const totalDeposits = this.
|
|
1780
|
-
const totalWithdraws = this.
|
|
1840
|
+
const totalDeposits = this.getUserAccountOrThrow().totalDeposits;
|
|
1841
|
+
const totalWithdraws = this.getUserAccountOrThrow().totalWithdraws;
|
|
1781
1842
|
|
|
1782
1843
|
const totalPnl = netUsdValue.add(totalWithdraws).sub(totalDeposits);
|
|
1783
1844
|
|
|
@@ -2016,7 +2077,7 @@ export class User {
|
|
|
2016
2077
|
|
|
2017
2078
|
public isCrossMarginBeingLiquidated(): boolean {
|
|
2018
2079
|
return (
|
|
2019
|
-
(this.
|
|
2080
|
+
(this.getUserAccountOrThrow().status &
|
|
2020
2081
|
(UserStatus.BEING_LIQUIDATED | UserStatus.BANKRUPT)) >
|
|
2021
2082
|
0
|
|
2022
2083
|
);
|
|
@@ -2043,7 +2104,7 @@ export class User {
|
|
|
2043
2104
|
);
|
|
2044
2105
|
|
|
2045
2106
|
return (
|
|
2046
|
-
(position?.positionFlag &
|
|
2107
|
+
((position?.positionFlag ?? 0) &
|
|
2047
2108
|
(PositionFlag.BeingLiquidated | PositionFlag.Bankruptcy)) >
|
|
2048
2109
|
0
|
|
2049
2110
|
);
|
|
@@ -2072,11 +2133,11 @@ export class User {
|
|
|
2072
2133
|
}
|
|
2073
2134
|
|
|
2074
2135
|
public hasStatus(status: UserStatus): boolean {
|
|
2075
|
-
return (this.
|
|
2136
|
+
return (this.getUserAccountOrThrow().status & status) > 0;
|
|
2076
2137
|
}
|
|
2077
2138
|
|
|
2078
2139
|
public isBankrupt(): boolean {
|
|
2079
|
-
return (this.
|
|
2140
|
+
return (this.getUserAccountOrThrow().status & UserStatus.BANKRUPT) > 0;
|
|
2080
2141
|
}
|
|
2081
2142
|
|
|
2082
2143
|
/**
|
|
@@ -2084,19 +2145,19 @@ export class User {
|
|
|
2084
2145
|
* @returns
|
|
2085
2146
|
*/
|
|
2086
2147
|
public needsToSettleFundingPayment(): boolean {
|
|
2087
|
-
for (const userPosition of this.
|
|
2148
|
+
for (const userPosition of this.getUserAccountOrThrow().perpPositions) {
|
|
2088
2149
|
if (userPosition.baseAssetAmount.eq(ZERO)) {
|
|
2089
2150
|
continue;
|
|
2090
2151
|
}
|
|
2091
2152
|
|
|
2092
|
-
const market = this.velocityClient.
|
|
2153
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
2093
2154
|
userPosition.marketIndex
|
|
2094
2155
|
);
|
|
2095
2156
|
if (
|
|
2096
|
-
market.
|
|
2157
|
+
market.cumulativeFundingRateLong.eq(
|
|
2097
2158
|
userPosition.lastCumulativeFundingRate
|
|
2098
2159
|
) ||
|
|
2099
|
-
market.
|
|
2160
|
+
market.cumulativeFundingRateShort.eq(
|
|
2100
2161
|
userPosition.lastCumulativeFundingRate
|
|
2101
2162
|
)
|
|
2102
2163
|
) {
|
|
@@ -2130,7 +2191,7 @@ export class User {
|
|
|
2130
2191
|
totalCollateral.sub(maintenanceMarginRequirement)
|
|
2131
2192
|
);
|
|
2132
2193
|
|
|
2133
|
-
const market = this.velocityClient.
|
|
2194
|
+
const market = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
2134
2195
|
let signedTokenAmount = getSignedTokenAmount(
|
|
2135
2196
|
getTokenAmount(
|
|
2136
2197
|
currentSpotPosition.scaledBalance,
|
|
@@ -2153,7 +2214,7 @@ export class User {
|
|
|
2153
2214
|
const oracle = market.oracle;
|
|
2154
2215
|
const perpMarketWithSameOracle = this.velocityClient
|
|
2155
2216
|
.getPerpMarketAccounts()
|
|
2156
|
-
.find((market) => market.
|
|
2217
|
+
.find((market) => market.oracle.equals(oracle));
|
|
2157
2218
|
const oraclePrice =
|
|
2158
2219
|
this.velocityClient.getOracleDataForSpotMarket(marketIndex).price;
|
|
2159
2220
|
if (perpMarketWithSameOracle) {
|
|
@@ -2172,7 +2233,7 @@ export class User {
|
|
|
2172
2233
|
if (freeCollateralDeltaForPerp) {
|
|
2173
2234
|
const { numerator, denominator } = getMultipleBetweenOracleSources(
|
|
2174
2235
|
market.oracleSource,
|
|
2175
|
-
perpMarketWithSameOracle.
|
|
2236
|
+
perpMarketWithSameOracle.oracleSource
|
|
2176
2237
|
);
|
|
2177
2238
|
freeCollateralDeltaForPerp = freeCollateralDeltaForPerp
|
|
2178
2239
|
.mul(numerator)
|
|
@@ -2221,10 +2282,9 @@ export class User {
|
|
|
2221
2282
|
offsetCollateral = ZERO,
|
|
2222
2283
|
marginType?: MarginType
|
|
2223
2284
|
): BN {
|
|
2224
|
-
const market = this.velocityClient.
|
|
2285
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
|
|
2225
2286
|
|
|
2226
|
-
const oracle =
|
|
2227
|
-
this.velocityClient.getPerpMarketAccount(marketIndex).amm.oracle;
|
|
2287
|
+
const oracle = market.oracle;
|
|
2228
2288
|
|
|
2229
2289
|
const oraclePrice =
|
|
2230
2290
|
this.velocityClient.getOracleDataForPerpMarket(marketIndex).price;
|
|
@@ -2292,7 +2352,7 @@ export class User {
|
|
|
2292
2352
|
|
|
2293
2353
|
positionBaseSizeChange = standardizeBaseAssetAmount(
|
|
2294
2354
|
positionBaseSizeChange,
|
|
2295
|
-
market.
|
|
2355
|
+
market.orderStepSize
|
|
2296
2356
|
);
|
|
2297
2357
|
|
|
2298
2358
|
const freeCollateralChangeFromNewPosition =
|
|
@@ -2345,7 +2405,7 @@ export class User {
|
|
|
2345
2405
|
|
|
2346
2406
|
if (spotFreeCollateralDelta) {
|
|
2347
2407
|
const { numerator, denominator } = getMultipleBetweenOracleSources(
|
|
2348
|
-
market.
|
|
2408
|
+
market.oracleSource,
|
|
2349
2409
|
spotMarketWithSameOracle.oracleSource
|
|
2350
2410
|
);
|
|
2351
2411
|
spotFreeCollateralDelta = spotFreeCollateralDelta
|
|
@@ -2436,7 +2496,7 @@ export class User {
|
|
|
2436
2496
|
|
|
2437
2497
|
const userCustomMargin = Math.max(
|
|
2438
2498
|
perpPosition.maxMarginRatio,
|
|
2439
|
-
this.
|
|
2499
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2440
2500
|
);
|
|
2441
2501
|
const marginRatio = calculateMarketMarginRatio(
|
|
2442
2502
|
market,
|
|
@@ -2485,7 +2545,7 @@ export class User {
|
|
|
2485
2545
|
|
|
2486
2546
|
const userCustomMargin = Math.max(
|
|
2487
2547
|
perpPosition.maxMarginRatio,
|
|
2488
|
-
this.
|
|
2548
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2489
2549
|
);
|
|
2490
2550
|
|
|
2491
2551
|
const marginRatio = calculateMarketMarginRatio(
|
|
@@ -2598,10 +2658,7 @@ export class User {
|
|
|
2598
2658
|
estEntryPrice?: BN,
|
|
2599
2659
|
perpMarketMaxMarginRatio?: number
|
|
2600
2660
|
): BN {
|
|
2601
|
-
const maxMarginRatio =
|
|
2602
|
-
perpMarketMaxMarginRatio,
|
|
2603
|
-
this.getUserAccount().maxMarginRatio
|
|
2604
|
-
);
|
|
2661
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
2605
2662
|
return calculateMarginUSDCRequiredForTrade(
|
|
2606
2663
|
this.velocityClient,
|
|
2607
2664
|
targetMarketIndex,
|
|
@@ -2617,10 +2674,7 @@ export class User {
|
|
|
2617
2674
|
collateralIndex: number,
|
|
2618
2675
|
perpMarketMaxMarginRatio?: number
|
|
2619
2676
|
): BN {
|
|
2620
|
-
const maxMarginRatio =
|
|
2621
|
-
perpMarketMaxMarginRatio,
|
|
2622
|
-
this.getUserAccount().maxMarginRatio
|
|
2623
|
-
);
|
|
2677
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
2624
2678
|
return calculateCollateralDepositRequiredForTrade(
|
|
2625
2679
|
this.velocityClient,
|
|
2626
2680
|
targetMarketIndex,
|
|
@@ -2641,7 +2695,7 @@ export class User {
|
|
|
2641
2695
|
public getMaxTradeSizeUSDCForPerp(
|
|
2642
2696
|
targetMarketIndex: number,
|
|
2643
2697
|
tradeSide: PositionDirection,
|
|
2644
|
-
maxMarginRatio = undefined,
|
|
2698
|
+
maxMarginRatio: number | undefined = undefined,
|
|
2645
2699
|
positionType: 'isolated' | 'cross' = 'cross'
|
|
2646
2700
|
): { tradeSize: BN; oppositeSideTradeSize: BN } {
|
|
2647
2701
|
let tradeSize = ZERO;
|
|
@@ -2661,7 +2715,7 @@ export class User {
|
|
|
2661
2715
|
const oracleData = this.getMMOracleDataForPerpMarket(targetMarketIndex);
|
|
2662
2716
|
|
|
2663
2717
|
const marketAccount =
|
|
2664
|
-
this.velocityClient.
|
|
2718
|
+
this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
|
|
2665
2719
|
|
|
2666
2720
|
// add any position we have on the opposite side of the current trade, because we can "flip" the size of this position without taking any extra leverage.
|
|
2667
2721
|
const oppositeSizeLiabilityValue = targetingSameSide
|
|
@@ -2700,7 +2754,7 @@ export class User {
|
|
|
2700
2754
|
const marginRequirement = this.getInitialMarginRequirement();
|
|
2701
2755
|
const marginRatio = Math.max(
|
|
2702
2756
|
currentPosition.maxMarginRatio,
|
|
2703
|
-
this.
|
|
2757
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2704
2758
|
);
|
|
2705
2759
|
const marginFreedByClosing = perpLiabilityValue
|
|
2706
2760
|
.mul(new BN(marginRatio))
|
|
@@ -2788,7 +2842,8 @@ export class User {
|
|
|
2788
2842
|
currentQuoteAssetValue?: BN,
|
|
2789
2843
|
currentSpotMarketNetValue?: BN
|
|
2790
2844
|
): BN {
|
|
2791
|
-
const market =
|
|
2845
|
+
const market =
|
|
2846
|
+
this.velocityClient.getSpotMarketAccountOrThrow(targetMarketIndex);
|
|
2792
2847
|
const oraclePrice =
|
|
2793
2848
|
this.velocityClient.getOracleDataForSpotMarket(targetMarketIndex).price;
|
|
2794
2849
|
|
|
@@ -2808,11 +2863,11 @@ export class User {
|
|
|
2808
2863
|
isVariant(direction, 'long')
|
|
2809
2864
|
? SpotBalanceType.DEPOSIT
|
|
2810
2865
|
: SpotBalanceType.BORROW,
|
|
2811
|
-
this.
|
|
2866
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2812
2867
|
);
|
|
2813
2868
|
|
|
2814
2869
|
let tradeAmount = ZERO;
|
|
2815
|
-
if (this.
|
|
2870
|
+
if (this.getUserAccountOrThrow().isMarginTradingEnabled) {
|
|
2816
2871
|
// if the user is buying/selling and already short/long, need to account for closing out short/long
|
|
2817
2872
|
if (isVariant(direction, 'long') && currentSpotMarketNetValue.lt(ZERO)) {
|
|
2818
2873
|
tradeAmount = currentSpotMarketNetValue.abs();
|
|
@@ -2822,7 +2877,7 @@ export class User {
|
|
|
2822
2877
|
'Initial',
|
|
2823
2878
|
this.getTokenAmount(targetMarketIndex).abs(),
|
|
2824
2879
|
SpotBalanceType.BORROW,
|
|
2825
|
-
this.
|
|
2880
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2826
2881
|
);
|
|
2827
2882
|
freeCollateral = freeCollateral.add(
|
|
2828
2883
|
tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
|
|
@@ -2838,7 +2893,7 @@ export class User {
|
|
|
2838
2893
|
'Initial',
|
|
2839
2894
|
this.getTokenAmount(targetMarketIndex),
|
|
2840
2895
|
SpotBalanceType.DEPOSIT,
|
|
2841
|
-
this.
|
|
2896
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
2842
2897
|
);
|
|
2843
2898
|
freeCollateral = freeCollateral.add(
|
|
2844
2899
|
tradeAmount.mul(new BN(marginRatio)).div(MARGIN_PRECISION)
|
|
@@ -2880,8 +2935,10 @@ export class User {
|
|
|
2880
2935
|
calculateSwap?: (inAmount: BN) => BN;
|
|
2881
2936
|
iterationLimit?: number;
|
|
2882
2937
|
}): { inAmount: BN; outAmount: BN; leverage: BN } {
|
|
2883
|
-
const inMarket =
|
|
2884
|
-
|
|
2938
|
+
const inMarket =
|
|
2939
|
+
this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
|
|
2940
|
+
const outMarket =
|
|
2941
|
+
this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
|
|
2885
2942
|
|
|
2886
2943
|
const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
|
|
2887
2944
|
const inOraclePrice = inOraclePriceData.price;
|
|
@@ -3138,14 +3195,14 @@ export class User {
|
|
|
3138
3195
|
const marginCategory = 'Initial';
|
|
3139
3196
|
|
|
3140
3197
|
const spotMarketAccount: SpotMarketAccount =
|
|
3141
|
-
this.velocityClient.
|
|
3198
|
+
this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
3142
3199
|
|
|
3143
3200
|
const { freeCollateralContribution } = getWorstCaseTokenAmounts(
|
|
3144
3201
|
spotPosition,
|
|
3145
3202
|
spotMarketAccount,
|
|
3146
3203
|
strictOraclePrice,
|
|
3147
3204
|
marginCategory,
|
|
3148
|
-
this.
|
|
3205
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
3149
3206
|
);
|
|
3150
3207
|
|
|
3151
3208
|
return freeCollateralContribution;
|
|
@@ -3162,14 +3219,14 @@ export class User {
|
|
|
3162
3219
|
let totalLiabilityValue = ZERO;
|
|
3163
3220
|
|
|
3164
3221
|
const spotMarketAccount: SpotMarketAccount =
|
|
3165
|
-
this.velocityClient.
|
|
3222
|
+
this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
3166
3223
|
|
|
3167
3224
|
const { tokenValue, ordersValue } = getWorstCaseTokenAmounts(
|
|
3168
3225
|
spotPosition,
|
|
3169
3226
|
spotMarketAccount,
|
|
3170
3227
|
strictOraclePrice,
|
|
3171
3228
|
'Initial',
|
|
3172
|
-
this.
|
|
3229
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
3173
3230
|
);
|
|
3174
3231
|
|
|
3175
3232
|
if (tokenValue.gte(ZERO)) {
|
|
@@ -3208,8 +3265,10 @@ export class User {
|
|
|
3208
3265
|
inAmount: BN;
|
|
3209
3266
|
outAmount: BN;
|
|
3210
3267
|
}): BN {
|
|
3211
|
-
const inMarket =
|
|
3212
|
-
|
|
3268
|
+
const inMarket =
|
|
3269
|
+
this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
|
|
3270
|
+
const outMarket =
|
|
3271
|
+
this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
|
|
3213
3272
|
|
|
3214
3273
|
const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
|
|
3215
3274
|
const inOraclePrice = inOraclePriceData.price;
|
|
@@ -3412,7 +3471,7 @@ export class User {
|
|
|
3412
3471
|
const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
|
|
3413
3472
|
|
|
3414
3473
|
const perpMarket =
|
|
3415
|
-
this.velocityClient.
|
|
3474
|
+
this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
|
|
3416
3475
|
const oracleData = this.getOracleDataForPerpMarket(targetMarketIndex);
|
|
3417
3476
|
|
|
3418
3477
|
let {
|
|
@@ -3482,17 +3541,15 @@ export class User {
|
|
|
3482
3541
|
public getUserFeeTier(marketType: MarketType, now?: BN) {
|
|
3483
3542
|
const state = this.velocityClient.getStateAccount();
|
|
3484
3543
|
|
|
3485
|
-
const feeTierIndex = 0;
|
|
3486
3544
|
if (isVariant(marketType, 'perp')) {
|
|
3487
3545
|
const userStatsAccount: UserStatsAccount = this.velocityClient
|
|
3488
|
-
.
|
|
3489
|
-
.
|
|
3546
|
+
.getUserStatsOrThrow()
|
|
3547
|
+
.getAccountOrThrow();
|
|
3490
3548
|
|
|
3491
3549
|
const total30dVolume = getUser30dRollingVolumeEstimate(
|
|
3492
3550
|
userStatsAccount,
|
|
3493
3551
|
now
|
|
3494
3552
|
);
|
|
3495
|
-
const stakedGovAssetAmount = userStatsAccount.ifStakedGovTokenAmount;
|
|
3496
3553
|
|
|
3497
3554
|
const volumeThresholds = [
|
|
3498
3555
|
new BN(2_000_000).mul(QUOTE_PRECISION),
|
|
@@ -3501,14 +3558,6 @@ export class User {
|
|
|
3501
3558
|
new BN(80_000_000).mul(QUOTE_PRECISION),
|
|
3502
3559
|
new BN(200_000_000).mul(QUOTE_PRECISION),
|
|
3503
3560
|
];
|
|
3504
|
-
const stakeThresholds = [
|
|
3505
|
-
new BN(1_000 - 1).mul(QUOTE_PRECISION),
|
|
3506
|
-
new BN(10_000 - 1).mul(QUOTE_PRECISION),
|
|
3507
|
-
new BN(50_000 - 1).mul(QUOTE_PRECISION),
|
|
3508
|
-
new BN(100_000 - 1).mul(QUOTE_PRECISION),
|
|
3509
|
-
new BN(250_000 - 5).mul(QUOTE_PRECISION),
|
|
3510
|
-
];
|
|
3511
|
-
const stakeBenefitFrac = [0, 5, 10, 20, 30, 40];
|
|
3512
3561
|
|
|
3513
3562
|
let feeTierIndex = 5;
|
|
3514
3563
|
for (let i = 0; i < volumeThresholds.length; i++) {
|
|
@@ -3518,29 +3567,10 @@ export class User {
|
|
|
3518
3567
|
}
|
|
3519
3568
|
}
|
|
3520
3569
|
|
|
3521
|
-
|
|
3522
|
-
for (let i = 0; i < stakeThresholds.length; i++) {
|
|
3523
|
-
if (stakedGovAssetAmount.lt(stakeThresholds[i])) {
|
|
3524
|
-
stakeBenefitIndex = i;
|
|
3525
|
-
break;
|
|
3526
|
-
}
|
|
3527
|
-
}
|
|
3528
|
-
|
|
3529
|
-
const stakeBenefit = stakeBenefitFrac[stakeBenefitIndex];
|
|
3530
|
-
|
|
3531
|
-
const tier = { ...state.perpFeeStructure.feeTiers[feeTierIndex] };
|
|
3532
|
-
|
|
3533
|
-
if (stakeBenefit > 0) {
|
|
3534
|
-
tier.feeNumerator = (tier.feeNumerator * (100 - stakeBenefit)) / 100;
|
|
3535
|
-
|
|
3536
|
-
tier.makerRebateNumerator =
|
|
3537
|
-
(tier.makerRebateNumerator * (100 + stakeBenefit)) / 100;
|
|
3538
|
-
}
|
|
3539
|
-
|
|
3540
|
-
return tier;
|
|
3570
|
+
return state.perpFeeStructure.feeTiers[feeTierIndex];
|
|
3541
3571
|
}
|
|
3542
3572
|
|
|
3543
|
-
return state.spotFeeStructure.feeTiers[
|
|
3573
|
+
return state.spotFeeStructure.feeTiers[0];
|
|
3544
3574
|
}
|
|
3545
3575
|
|
|
3546
3576
|
/**
|
|
@@ -3575,7 +3605,8 @@ export class User {
|
|
|
3575
3605
|
*/
|
|
3576
3606
|
public getWithdrawalLimit(marketIndex: number, reduceOnly?: boolean): BN {
|
|
3577
3607
|
const nowTs = new BN(Math.floor(Date.now() / 1000));
|
|
3578
|
-
const spotMarket =
|
|
3608
|
+
const spotMarket =
|
|
3609
|
+
this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
3579
3610
|
|
|
3580
3611
|
// eslint-disable-next-line prefer-const
|
|
3581
3612
|
let { borrowLimit, withdrawLimit } = calculateWithdrawLimit(
|
|
@@ -3667,12 +3698,13 @@ export class User {
|
|
|
3667
3698
|
depositAmount: BN;
|
|
3668
3699
|
maxDepositAmount: BN;
|
|
3669
3700
|
} {
|
|
3670
|
-
const spotMarket =
|
|
3701
|
+
const spotMarket =
|
|
3702
|
+
this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
3671
3703
|
const maxDepositAmount = spotMarket.withdrawGuardThreshold.div(new BN(10));
|
|
3672
3704
|
const position = this.getSpotPosition(marketIndex);
|
|
3673
3705
|
|
|
3674
|
-
const netDeposits = this.
|
|
3675
|
-
this.
|
|
3706
|
+
const netDeposits = this.getUserAccountOrThrow().totalDeposits.sub(
|
|
3707
|
+
this.getUserAccountOrThrow().totalWithdraws
|
|
3676
3708
|
);
|
|
3677
3709
|
|
|
3678
3710
|
if (!position) {
|
|
@@ -3717,7 +3749,7 @@ export class User {
|
|
|
3717
3749
|
}
|
|
3718
3750
|
|
|
3719
3751
|
public canMakeIdle(slot: BN): boolean {
|
|
3720
|
-
const userAccount = this.
|
|
3752
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
3721
3753
|
if (userAccount.idle) {
|
|
3722
3754
|
return false;
|
|
3723
3755
|
}
|
|
@@ -3775,14 +3807,16 @@ export class User {
|
|
|
3775
3807
|
userStatsAccount?: UserStatsAccount,
|
|
3776
3808
|
now?: BN
|
|
3777
3809
|
): { canDelete: boolean; reason?: string } {
|
|
3778
|
-
const userAccount = this.
|
|
3810
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
3779
3811
|
const userStatsAccountToUse =
|
|
3780
|
-
userStatsAccount
|
|
3812
|
+
userStatsAccount ??
|
|
3813
|
+
this.velocityClient.getUserStatsOrThrow().getAccount();
|
|
3781
3814
|
const nowInSeconds = now || new BN(Math.floor(Date.now() / 1000));
|
|
3782
3815
|
const stateAccount = this.velocityClient.getStateAccount();
|
|
3783
3816
|
|
|
3784
3817
|
// Referrer cannot delete sub_account_id 0
|
|
3785
3818
|
const isReferrer =
|
|
3819
|
+
userStatsAccountToUse !== undefined &&
|
|
3786
3820
|
(userStatsAccountToUse.referrerStatus & ReferrerStatus.IsReferrer) > 0;
|
|
3787
3821
|
if (isReferrer && userAccount.subAccountId === 0) {
|
|
3788
3822
|
return { canDelete: false, reason: 'is-subaccount-0-referrer' };
|
|
@@ -3818,7 +3852,7 @@ export class User {
|
|
|
3818
3852
|
}
|
|
3819
3853
|
|
|
3820
3854
|
// Fresh account (< 13 days) with init fee must be idle
|
|
3821
|
-
if (stateAccount.maxInitializeUserFee > 0) {
|
|
3855
|
+
if (stateAccount.maxInitializeUserFee > 0 && userStatsAccountToUse) {
|
|
3822
3856
|
const minActionTs = BN.min(
|
|
3823
3857
|
userStatsAccountToUse.lastFillerVolume30DTs,
|
|
3824
3858
|
BN.min(
|
|
@@ -3848,7 +3882,9 @@ export class User {
|
|
|
3848
3882
|
safestPerpTier = Math.min(
|
|
3849
3883
|
safestPerpTier,
|
|
3850
3884
|
getPerpMarketTierNumber(
|
|
3851
|
-
this.velocityClient.
|
|
3885
|
+
this.velocityClient.getPerpMarketAccountOrThrow(
|
|
3886
|
+
perpPosition.marketIndex
|
|
3887
|
+
)
|
|
3852
3888
|
)
|
|
3853
3889
|
);
|
|
3854
3890
|
}
|
|
@@ -3861,7 +3897,9 @@ export class User {
|
|
|
3861
3897
|
safestSpotTier = Math.min(
|
|
3862
3898
|
safestSpotTier,
|
|
3863
3899
|
getSpotMarketTierNumber(
|
|
3864
|
-
this.velocityClient.
|
|
3900
|
+
this.velocityClient.getSpotMarketAccountOrThrow(
|
|
3901
|
+
spotPosition.marketIndex
|
|
3902
|
+
)
|
|
3865
3903
|
)
|
|
3866
3904
|
);
|
|
3867
3905
|
}
|
|
@@ -3885,7 +3923,7 @@ export class User {
|
|
|
3885
3923
|
quoteOraclePriceData?: OraclePriceData;
|
|
3886
3924
|
includeOpenOrders?: boolean;
|
|
3887
3925
|
}): HealthComponent {
|
|
3888
|
-
const perpMarket = this.velocityClient.
|
|
3926
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
3889
3927
|
perpPosition.marketIndex
|
|
3890
3928
|
);
|
|
3891
3929
|
const _oraclePriceData =
|
|
@@ -3913,7 +3951,7 @@ export class User {
|
|
|
3913
3951
|
|
|
3914
3952
|
const userCustomMargin = Math.max(
|
|
3915
3953
|
perpPosition.maxMarginRatio,
|
|
3916
|
-
this.
|
|
3954
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
3917
3955
|
);
|
|
3918
3956
|
const marginRatio = new BN(
|
|
3919
3957
|
calculateMarketMarginRatio(
|
|
@@ -3960,7 +3998,7 @@ export class User {
|
|
|
3960
3998
|
};
|
|
3961
3999
|
|
|
3962
4000
|
for (const perpPosition of this.getActivePerpPositions()) {
|
|
3963
|
-
const perpMarket = this.velocityClient.
|
|
4001
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
3964
4002
|
perpPosition.marketIndex
|
|
3965
4003
|
);
|
|
3966
4004
|
|
|
@@ -3980,7 +4018,7 @@ export class User {
|
|
|
3980
4018
|
})
|
|
3981
4019
|
);
|
|
3982
4020
|
|
|
3983
|
-
const quoteSpotMarket = this.velocityClient.
|
|
4021
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
3984
4022
|
perpMarket.quoteSpotMarketIndex
|
|
3985
4023
|
);
|
|
3986
4024
|
|
|
@@ -4024,7 +4062,9 @@ export class User {
|
|
|
4024
4062
|
let netQuoteValue = ZERO;
|
|
4025
4063
|
for (const spotPosition of this.getActiveSpotPositions()) {
|
|
4026
4064
|
const spotMarketAccount: SpotMarketAccount =
|
|
4027
|
-
this.velocityClient.
|
|
4065
|
+
this.velocityClient.getSpotMarketAccountOrThrow(
|
|
4066
|
+
spotPosition.marketIndex
|
|
4067
|
+
);
|
|
4028
4068
|
|
|
4029
4069
|
const oraclePriceData = this.getOracleDataForSpotMarket(
|
|
4030
4070
|
spotPosition.marketIndex
|
|
@@ -4057,7 +4097,7 @@ export class User {
|
|
|
4057
4097
|
spotMarketAccount,
|
|
4058
4098
|
strictOraclePrice,
|
|
4059
4099
|
marginCategory,
|
|
4060
|
-
this.
|
|
4100
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
4061
4101
|
);
|
|
4062
4102
|
|
|
4063
4103
|
netQuoteValue = netQuoteValue.add(ordersValue);
|
|
@@ -4102,7 +4142,7 @@ export class User {
|
|
|
4102
4142
|
oraclePriceData.price,
|
|
4103
4143
|
spotMarketAccount,
|
|
4104
4144
|
marginCategory,
|
|
4105
|
-
this.
|
|
4145
|
+
this.getUserAccountOrThrow().maxMarginRatio
|
|
4106
4146
|
);
|
|
4107
4147
|
|
|
4108
4148
|
if (netQuoteValue.lt(ZERO)) {
|
|
@@ -4210,7 +4250,9 @@ export class User {
|
|
|
4210
4250
|
|
|
4211
4251
|
// Equivalent to on-chain user_custom_margin_ratio
|
|
4212
4252
|
const userCustomMarginRatio =
|
|
4213
|
-
marginCategory === 'Initial'
|
|
4253
|
+
marginCategory === 'Initial'
|
|
4254
|
+
? this.getUserAccountOrThrow().maxMarginRatio
|
|
4255
|
+
: 0;
|
|
4214
4256
|
|
|
4215
4257
|
// Initialize calc via JS mirror of Rust/on-chain MarginCalculation
|
|
4216
4258
|
const isolatedMarginBuffers = new Map<number, BN>();
|
|
@@ -4229,12 +4271,12 @@ export class User {
|
|
|
4229
4271
|
const calc = new MarginCalculation(ctx);
|
|
4230
4272
|
|
|
4231
4273
|
// SPOT POSITIONS
|
|
4232
|
-
for (const spotPosition of this.
|
|
4274
|
+
for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
|
|
4233
4275
|
if (isSpotPositionAvailable(spotPosition)) continue;
|
|
4234
4276
|
|
|
4235
4277
|
const isQuote = spotPosition.marketIndex === QUOTE_SPOT_MARKET_INDEX;
|
|
4236
4278
|
|
|
4237
|
-
const spotMarket = this.velocityClient.
|
|
4279
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
4238
4280
|
spotPosition.marketIndex
|
|
4239
4281
|
);
|
|
4240
4282
|
const oraclePriceData = this.getOracleDataForSpotMarket(
|
|
@@ -4340,10 +4382,10 @@ export class User {
|
|
|
4340
4382
|
|
|
4341
4383
|
// PERP POSITIONS
|
|
4342
4384
|
for (const marketPosition of this.getActivePerpPositions()) {
|
|
4343
|
-
const market = this.velocityClient.
|
|
4385
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(
|
|
4344
4386
|
marketPosition.marketIndex
|
|
4345
4387
|
);
|
|
4346
|
-
const quoteSpotMarket = this.velocityClient.
|
|
4388
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(
|
|
4347
4389
|
market.quoteSpotMarketIndex
|
|
4348
4390
|
);
|
|
4349
4391
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(
|
|
@@ -4449,9 +4491,10 @@ export class User {
|
|
|
4449
4491
|
// derive isolated quote deposit value, mirroring on-chain logic
|
|
4450
4492
|
let depositValue = ZERO;
|
|
4451
4493
|
if (marketPosition.isolatedPositionScaledBalance?.gt(ZERO)) {
|
|
4452
|
-
const quoteSpotMarket =
|
|
4453
|
-
|
|
4454
|
-
|
|
4494
|
+
const quoteSpotMarket =
|
|
4495
|
+
this.velocityClient.getSpotMarketAccountOrThrow(
|
|
4496
|
+
market.quoteSpotMarketIndex
|
|
4497
|
+
);
|
|
4455
4498
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(
|
|
4456
4499
|
market.quoteSpotMarketIndex
|
|
4457
4500
|
);
|