@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/lib/browser/user.js
CHANGED
|
@@ -4,13 +4,14 @@ exports.User = void 0;
|
|
|
4
4
|
const types_1 = require("./types");
|
|
5
5
|
const position_1 = require("./math/position");
|
|
6
6
|
const numericConstants_1 = require("./constants/numericConstants");
|
|
7
|
+
const utils_1 = require("./accounts/utils");
|
|
7
8
|
const bigNum_1 = require("./factory/bigNum");
|
|
8
9
|
const anchor_1 = require("./isomorphic/anchor");
|
|
9
10
|
const position_2 = require("./math/position");
|
|
10
11
|
const market_1 = require("./math/market");
|
|
11
12
|
const margin_1 = require("./math/margin");
|
|
12
13
|
const spotMarket_1 = require("./math/spotMarket");
|
|
13
|
-
const
|
|
14
|
+
const utils_2 = require("./math/utils");
|
|
14
15
|
const spotBalance_1 = require("./math/spotBalance");
|
|
15
16
|
const trade_1 = require("./math/trade");
|
|
16
17
|
const types_2 = require("./types");
|
|
@@ -27,10 +28,6 @@ const strictOraclePrice_1 = require("./oracles/strictOraclePrice");
|
|
|
27
28
|
const grpcUserAccountSubscriber_1 = require("./accounts/grpcUserAccountSubscriber");
|
|
28
29
|
const marginCalculation_1 = require("./marginCalculation");
|
|
29
30
|
class User {
|
|
30
|
-
/** @deprecated Use `velocityClient` instead. `driftClient` will be removed in a future major. */
|
|
31
|
-
get driftClient() {
|
|
32
|
-
return this.velocityClient;
|
|
33
|
-
}
|
|
34
31
|
get isSubscribed() {
|
|
35
32
|
return this._isSubscribed && this.accountSubscriber.isSubscribed;
|
|
36
33
|
}
|
|
@@ -38,40 +35,40 @@ class User {
|
|
|
38
35
|
this._isSubscribed = val;
|
|
39
36
|
}
|
|
40
37
|
constructor(config) {
|
|
41
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k
|
|
38
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
42
39
|
this._isSubscribed = false;
|
|
43
40
|
// Type-system guarantees at least one of the two is supplied.
|
|
44
|
-
const velocityClient =
|
|
41
|
+
const velocityClient = config.velocityClient;
|
|
45
42
|
this.velocityClient = velocityClient;
|
|
46
43
|
this.userAccountPublicKey = config.userAccountPublicKey;
|
|
47
|
-
if (((
|
|
44
|
+
if (((_a = config.accountSubscription) === null || _a === void 0 ? void 0 : _a.type) === 'polling') {
|
|
48
45
|
this.accountSubscriber = new pollingUserAccountSubscriber_1.PollingUserAccountSubscriber(velocityClient.connection, config.userAccountPublicKey, config.accountSubscription.accountLoader, this.velocityClient.program.account.user.coder.accounts.decodeUnchecked.bind(this.velocityClient.program.account.user.coder.accounts));
|
|
49
46
|
}
|
|
50
|
-
else if (((
|
|
47
|
+
else if (((_b = config.accountSubscription) === null || _b === void 0 ? void 0 : _b.type) === 'custom') {
|
|
51
48
|
this.accountSubscriber = config.accountSubscription.userAccountSubscriber;
|
|
52
49
|
}
|
|
53
|
-
else if (((
|
|
50
|
+
else if (((_c = config.accountSubscription) === null || _c === void 0 ? void 0 : _c.type) === 'grpc') {
|
|
54
51
|
if (config.accountSubscription.grpcMultiUserAccountSubscriber) {
|
|
55
52
|
this.accountSubscriber =
|
|
56
53
|
config.accountSubscription.grpcMultiUserAccountSubscriber.forUser(config.userAccountPublicKey);
|
|
57
54
|
}
|
|
58
55
|
else {
|
|
59
56
|
this.accountSubscriber = new grpcUserAccountSubscriber_1.grpcUserAccountSubscriber(config.accountSubscription.grpcConfigs, velocityClient.program, config.userAccountPublicKey, {
|
|
60
|
-
resubTimeoutMs: (
|
|
61
|
-
logResubMessages: (
|
|
57
|
+
resubTimeoutMs: (_d = config.accountSubscription) === null || _d === void 0 ? void 0 : _d.resubTimeoutMs,
|
|
58
|
+
logResubMessages: (_e = config.accountSubscription) === null || _e === void 0 ? void 0 : _e.logResubMessages,
|
|
62
59
|
});
|
|
63
60
|
}
|
|
64
61
|
}
|
|
65
62
|
else {
|
|
66
|
-
if (((
|
|
67
|
-
((
|
|
63
|
+
if (((_f = config.accountSubscription) === null || _f === void 0 ? void 0 : _f.type) === 'websocket' &&
|
|
64
|
+
((_g = config.accountSubscription) === null || _g === void 0 ? void 0 : _g.programUserAccountSubscriber)) {
|
|
68
65
|
this.accountSubscriber = new websocketProgramUserAccountSubscriber_1.WebSocketProgramUserAccountSubscriber(velocityClient.program, config.userAccountPublicKey, config.accountSubscription.programUserAccountSubscriber);
|
|
69
66
|
}
|
|
70
67
|
else {
|
|
71
68
|
this.accountSubscriber = new webSocketUserAccountSubscriber_1.WebSocketUserAccountSubscriber(velocityClient.program, config.userAccountPublicKey, {
|
|
72
|
-
resubTimeoutMs: (
|
|
73
|
-
logResubMessages: (
|
|
74
|
-
}, (
|
|
69
|
+
resubTimeoutMs: (_h = config.accountSubscription) === null || _h === void 0 ? void 0 : _h.resubTimeoutMs,
|
|
70
|
+
logResubMessages: (_j = config.accountSubscription) === null || _j === void 0 ? void 0 : _j.logResubMessages,
|
|
71
|
+
}, (_k = config.accountSubscription) === null || _k === void 0 ? void 0 : _k.commitment);
|
|
75
72
|
}
|
|
76
73
|
}
|
|
77
74
|
this.eventEmitter = this.accountSubscriber.eventEmitter;
|
|
@@ -96,15 +93,37 @@ class User {
|
|
|
96
93
|
this.isSubscribed = false;
|
|
97
94
|
}
|
|
98
95
|
getUserAccount() {
|
|
99
|
-
|
|
96
|
+
var _a;
|
|
97
|
+
return (_a = this.accountSubscriber.getUserAccountAndSlot()) === null || _a === void 0 ? void 0 : _a.data;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Like {@link getUserAccount} but throws a named error instead of returning
|
|
101
|
+
* `undefined` when the account has not been loaded yet. Use at call sites
|
|
102
|
+
* that structurally require a loaded account.
|
|
103
|
+
*/
|
|
104
|
+
getUserAccountOrThrow() {
|
|
105
|
+
const userAccount = this.getUserAccount();
|
|
106
|
+
if (!userAccount) {
|
|
107
|
+
throw new Error(`User account not loaded: ${this.getUserAccountPublicKey().toString()}`);
|
|
108
|
+
}
|
|
109
|
+
return userAccount;
|
|
100
110
|
}
|
|
101
111
|
async forceGetUserAccount() {
|
|
102
112
|
await this.fetchAccounts();
|
|
103
|
-
|
|
113
|
+
const account = this.accountSubscriber.getUserAccountAndSlot();
|
|
114
|
+
return account === null || account === void 0 ? void 0 : account.data;
|
|
104
115
|
}
|
|
105
116
|
getUserAccountAndSlot() {
|
|
106
117
|
return this.accountSubscriber.getUserAccountAndSlot();
|
|
107
118
|
}
|
|
119
|
+
/**
|
|
120
|
+
* Like {@link getUserAccountAndSlot} but throws a named error instead of
|
|
121
|
+
* returning `undefined` when the account has not been loaded yet. Use at
|
|
122
|
+
* call sites that structurally require a loaded account.
|
|
123
|
+
*/
|
|
124
|
+
getUserAccountAndSlotOrThrow() {
|
|
125
|
+
return (0, utils_1.assertDataAndSlot)(this.accountSubscriber.getUserAccountAndSlot(), `User account not loaded: ${this.getUserAccountPublicKey().toString()}`);
|
|
126
|
+
}
|
|
108
127
|
getPerpPositionForUserAccount(userAccount, marketIndex) {
|
|
109
128
|
return this.getActivePerpPositionsForUserAccount(userAccount).find((position) => position.marketIndex === marketIndex);
|
|
110
129
|
}
|
|
@@ -114,16 +133,23 @@ class User {
|
|
|
114
133
|
* @returns userPerpPosition
|
|
115
134
|
*/
|
|
116
135
|
getPerpPosition(marketIndex) {
|
|
117
|
-
const userAccount = this.
|
|
136
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
118
137
|
return this.getPerpPositionForUserAccount(userAccount, marketIndex);
|
|
119
138
|
}
|
|
120
139
|
getPerpPositionOrEmpty(marketIndex) {
|
|
121
140
|
var _a;
|
|
122
|
-
const userAccount = this.
|
|
141
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
123
142
|
return ((_a = this.getPerpPositionForUserAccount(userAccount, marketIndex)) !== null && _a !== void 0 ? _a : this.getEmptyPosition(marketIndex));
|
|
124
143
|
}
|
|
144
|
+
getPerpPositionOrThrow(marketIndex) {
|
|
145
|
+
const position = this.getPerpPosition(marketIndex);
|
|
146
|
+
if (!position) {
|
|
147
|
+
throw new Error(`No perp position found for market ${marketIndex}`);
|
|
148
|
+
}
|
|
149
|
+
return position;
|
|
150
|
+
}
|
|
125
151
|
getPerpPositionAndSlot(marketIndex) {
|
|
126
|
-
const userAccount = this.
|
|
152
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
127
153
|
const perpPosition = this.getPerpPositionForUserAccount(userAccount.data, marketIndex);
|
|
128
154
|
return {
|
|
129
155
|
data: perpPosition,
|
|
@@ -139,11 +165,11 @@ class User {
|
|
|
139
165
|
* @returns userSpotPosition
|
|
140
166
|
*/
|
|
141
167
|
getSpotPosition(marketIndex) {
|
|
142
|
-
const userAccount = this.
|
|
168
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
143
169
|
return this.getSpotPositionForUserAccount(userAccount, marketIndex);
|
|
144
170
|
}
|
|
145
171
|
getSpotPositionAndSlot(marketIndex) {
|
|
146
|
-
const userAccount = this.
|
|
172
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
147
173
|
const spotPosition = this.getSpotPositionForUserAccount(userAccount.data, marketIndex);
|
|
148
174
|
return {
|
|
149
175
|
data: spotPosition,
|
|
@@ -172,7 +198,7 @@ class User {
|
|
|
172
198
|
if (spotPosition === undefined) {
|
|
173
199
|
return numericConstants_1.ZERO;
|
|
174
200
|
}
|
|
175
|
-
const spotMarket = this.velocityClient.
|
|
201
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
176
202
|
return (0, spotBalance_1.getSignedTokenAmount)((0, spotBalance_2.getTokenAmount)(spotPosition.scaledBalance, spotMarket, spotPosition.balanceType), spotPosition.balanceType);
|
|
177
203
|
}
|
|
178
204
|
getEmptyPosition(marketIndex) {
|
|
@@ -201,8 +227,8 @@ class User {
|
|
|
201
227
|
const perpPosition = this.getPerpPosition(perpMarketIndex);
|
|
202
228
|
if (!perpPosition)
|
|
203
229
|
return numericConstants_1.ZERO;
|
|
204
|
-
const perpMarket = this.velocityClient.
|
|
205
|
-
const spotMarket = this.velocityClient.
|
|
230
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(perpMarketIndex);
|
|
231
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(perpMarket.quoteSpotMarketIndex);
|
|
206
232
|
if (perpPosition === undefined) {
|
|
207
233
|
return numericConstants_1.ZERO;
|
|
208
234
|
}
|
|
@@ -218,8 +244,8 @@ class User {
|
|
|
218
244
|
if (!((_a = perpPosition.isolatedPositionScaledBalance) === null || _a === void 0 ? void 0 : _a.gt(numericConstants_1.ZERO))) {
|
|
219
245
|
return total;
|
|
220
246
|
}
|
|
221
|
-
const perpMarket = this.velocityClient.
|
|
222
|
-
const quoteSpotMarket = this.velocityClient.
|
|
247
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
248
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(perpMarket.quoteSpotMarketIndex);
|
|
223
249
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(perpMarket.quoteSpotMarketIndex);
|
|
224
250
|
const strictOracle = new strictOraclePrice_1.StrictOraclePrice(quoteOraclePriceData.price, quoteOraclePriceData.twap);
|
|
225
251
|
const tokenAmount = (0, spotBalance_2.getTokenAmount)(perpPosition.isolatedPositionScaledBalance, quoteSpotMarket, types_2.SpotBalanceType.DEPOSIT);
|
|
@@ -238,11 +264,11 @@ class User {
|
|
|
238
264
|
* @returns Order
|
|
239
265
|
*/
|
|
240
266
|
getOrder(orderId) {
|
|
241
|
-
const userAccount = this.
|
|
267
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
242
268
|
return this.getOrderForUserAccount(userAccount, orderId);
|
|
243
269
|
}
|
|
244
270
|
getOrderAndSlot(orderId) {
|
|
245
|
-
const userAccount = this.
|
|
271
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
246
272
|
const order = this.getOrderForUserAccount(userAccount.data, orderId);
|
|
247
273
|
return {
|
|
248
274
|
data: order,
|
|
@@ -257,11 +283,11 @@ class User {
|
|
|
257
283
|
* @returns Order
|
|
258
284
|
*/
|
|
259
285
|
getOrderByUserOrderId(userOrderId) {
|
|
260
|
-
const userAccount = this.
|
|
286
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
261
287
|
return this.getOrderByUserIdForUserAccount(userAccount, userOrderId);
|
|
262
288
|
}
|
|
263
289
|
getOrderByUserOrderIdAndSlot(userOrderId) {
|
|
264
|
-
const userAccount = this.
|
|
290
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
265
291
|
const order = this.getOrderByUserIdForUserAccount(userAccount.data, userOrderId);
|
|
266
292
|
return {
|
|
267
293
|
data: order,
|
|
@@ -272,12 +298,14 @@ class User {
|
|
|
272
298
|
return userAccount === null || userAccount === void 0 ? void 0 : userAccount.orders.filter((order) => (0, types_1.isVariant)(order.status, 'open'));
|
|
273
299
|
}
|
|
274
300
|
getOpenOrders() {
|
|
301
|
+
var _a;
|
|
275
302
|
const userAccount = this.getUserAccount();
|
|
276
|
-
return this.getOpenOrdersForUserAccount(userAccount);
|
|
303
|
+
return (_a = this.getOpenOrdersForUserAccount(userAccount)) !== null && _a !== void 0 ? _a : [];
|
|
277
304
|
}
|
|
278
305
|
getOpenOrdersAndSlot() {
|
|
279
|
-
|
|
280
|
-
const
|
|
306
|
+
var _a;
|
|
307
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
308
|
+
const openOrders = (_a = this.getOpenOrdersForUserAccount(userAccount.data)) !== null && _a !== void 0 ? _a : [];
|
|
281
309
|
return {
|
|
282
310
|
data: openOrders,
|
|
283
311
|
slot: userAccount.slot,
|
|
@@ -296,7 +324,7 @@ class User {
|
|
|
296
324
|
* @returns : open asks
|
|
297
325
|
*/
|
|
298
326
|
getPerpBidAsks(marketIndex) {
|
|
299
|
-
const position = this.
|
|
327
|
+
const position = this.getPerpPositionOrThrow(marketIndex);
|
|
300
328
|
const totalOpenBids = position.openBids;
|
|
301
329
|
const totalOpenAsks = position.openAsks;
|
|
302
330
|
return [totalOpenBids, totalOpenAsks];
|
|
@@ -307,7 +335,7 @@ class User {
|
|
|
307
335
|
*/
|
|
308
336
|
getPerpBuyingPower(marketIndex, collateralBuffer = numericConstants_1.ZERO, maxMarginRatio = undefined, positionType = 'cross') {
|
|
309
337
|
const perpPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
310
|
-
const perpMarket = this.velocityClient.
|
|
338
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
|
|
311
339
|
const oraclePriceData = this.getOracleDataForPerpMarket(marketIndex);
|
|
312
340
|
const worstCaseBaseAssetAmount = perpPosition
|
|
313
341
|
? (0, margin_2.calculateWorstCaseBaseAssetAmount)(perpPosition, perpMarket, oraclePriceData.price)
|
|
@@ -326,9 +354,14 @@ class User {
|
|
|
326
354
|
}
|
|
327
355
|
return this.getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, worstCaseBaseAssetAmount, maxMarginRatio || perpPosition.maxMarginRatio);
|
|
328
356
|
}
|
|
357
|
+
resolveMaxMarginRatio(perpMarketMaxMarginRatio) {
|
|
358
|
+
// 0 means "no custom margin ratio override", so Math.max returns
|
|
359
|
+
// userAccount.maxMarginRatio unchanged — the expected semantic.
|
|
360
|
+
return Math.max(perpMarketMaxMarginRatio !== null && perpMarketMaxMarginRatio !== void 0 ? perpMarketMaxMarginRatio : 0, this.getUserAccountOrThrow().maxMarginRatio);
|
|
361
|
+
}
|
|
329
362
|
getPerpBuyingPowerFromFreeCollateralAndBaseAssetAmount(marketIndex, freeCollateral, baseAssetAmount, perpMarketMaxMarginRatio = undefined) {
|
|
330
|
-
const maxMarginRatio =
|
|
331
|
-
const marginRatio = (0, market_1.calculateMarketMarginRatio)(this.velocityClient.
|
|
363
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
364
|
+
const marginRatio = (0, market_1.calculateMarketMarginRatio)(this.velocityClient.getPerpMarketAccountOrThrow(marketIndex), baseAssetAmount, 'Initial', maxMarginRatio);
|
|
332
365
|
return freeCollateral.mul(numericConstants_1.MARGIN_PRECISION).div(new anchor_1.BN(marginRatio));
|
|
333
366
|
}
|
|
334
367
|
/**
|
|
@@ -406,11 +439,11 @@ class User {
|
|
|
406
439
|
});
|
|
407
440
|
}
|
|
408
441
|
getActivePerpPositions() {
|
|
409
|
-
const userAccount = this.
|
|
442
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
410
443
|
return this.getActivePerpPositionsForUserAccount(userAccount);
|
|
411
444
|
}
|
|
412
445
|
getActivePerpPositionsAndSlot() {
|
|
413
|
-
const userAccount = this.
|
|
446
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
414
447
|
const positions = this.getActivePerpPositionsForUserAccount(userAccount.data);
|
|
415
448
|
return {
|
|
416
449
|
data: positions,
|
|
@@ -421,11 +454,11 @@ class User {
|
|
|
421
454
|
return userAccount.spotPositions.filter((pos) => !(0, spotPosition_1.isSpotPositionAvailable)(pos));
|
|
422
455
|
}
|
|
423
456
|
getActiveSpotPositions() {
|
|
424
|
-
const userAccount = this.
|
|
457
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
425
458
|
return this.getActiveSpotPositionsForUserAccount(userAccount);
|
|
426
459
|
}
|
|
427
460
|
getActiveSpotPositionsAndSlot() {
|
|
428
|
-
const userAccount = this.
|
|
461
|
+
const userAccount = this.getUserAccountAndSlotOrThrow();
|
|
429
462
|
const positions = this.getActiveSpotPositionsForUserAccount(userAccount.data);
|
|
430
463
|
return {
|
|
431
464
|
data: positions,
|
|
@@ -440,9 +473,9 @@ class User {
|
|
|
440
473
|
return this.getActivePerpPositions()
|
|
441
474
|
.filter((pos) => marketIndex !== undefined ? pos.marketIndex === marketIndex : true)
|
|
442
475
|
.reduce((unrealizedPnl, perpPosition) => {
|
|
443
|
-
const market = this.velocityClient.
|
|
476
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
444
477
|
const oraclePriceData = this.getMMOracleDataForPerpMarket(market.marketIndex);
|
|
445
|
-
const quoteSpotMarket = this.velocityClient.
|
|
478
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(market.quoteSpotMarketIndex);
|
|
446
479
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(market.quoteSpotMarketIndex);
|
|
447
480
|
let positionUnrealizedPnl = (0, position_2.calculatePositionPNL)(market, perpPosition, withFunding, oraclePriceData);
|
|
448
481
|
let quotePrice;
|
|
@@ -476,10 +509,10 @@ class User {
|
|
|
476
509
|
* @returns : Precision QUOTE_PRECISION
|
|
477
510
|
*/
|
|
478
511
|
getUnrealizedFundingPNL(marketIndex) {
|
|
479
|
-
return this.
|
|
512
|
+
return this.getUserAccountOrThrow()
|
|
480
513
|
.perpPositions.filter((pos) => marketIndex !== undefined ? pos.marketIndex === marketIndex : true)
|
|
481
514
|
.reduce((pnl, perpPosition) => {
|
|
482
|
-
const market = this.velocityClient.
|
|
515
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
483
516
|
return pnl.add((0, position_1.calculateUnsettledFundingPnl)(market, perpPosition));
|
|
484
517
|
}, numericConstants_1.ZERO);
|
|
485
518
|
}
|
|
@@ -488,7 +521,7 @@ class User {
|
|
|
488
521
|
let netQuoteValue = numericConstants_1.ZERO;
|
|
489
522
|
let totalAssetValue = numericConstants_1.ZERO;
|
|
490
523
|
let totalLiabilityValue = numericConstants_1.ZERO;
|
|
491
|
-
for (const spotPosition of this.
|
|
524
|
+
for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
|
|
492
525
|
const countForBase = marketIndex === undefined || spotPosition.marketIndex === marketIndex;
|
|
493
526
|
const countForQuote = marketIndex === undefined ||
|
|
494
527
|
marketIndex === numericConstants_1.QUOTE_SPOT_MARKET_INDEX ||
|
|
@@ -497,7 +530,7 @@ class User {
|
|
|
497
530
|
(!countForBase && !countForQuote)) {
|
|
498
531
|
continue;
|
|
499
532
|
}
|
|
500
|
-
const spotMarketAccount = this.velocityClient.
|
|
533
|
+
const spotMarketAccount = this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
501
534
|
const oraclePriceData = this.getOracleDataForSpotMarket(spotPosition.marketIndex);
|
|
502
535
|
let twap5min;
|
|
503
536
|
if (strict) {
|
|
@@ -532,7 +565,7 @@ class User {
|
|
|
532
565
|
continue;
|
|
533
566
|
}
|
|
534
567
|
}
|
|
535
|
-
const { tokenAmount: worstCaseTokenAmount, ordersValue: worstCaseQuoteTokenAmount, } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.
|
|
568
|
+
const { tokenAmount: worstCaseTokenAmount, ordersValue: worstCaseQuoteTokenAmount, } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.getUserAccountOrThrow().maxMarginRatio);
|
|
536
569
|
if (worstCaseTokenAmount.gt(numericConstants_1.ZERO) && countForBase) {
|
|
537
570
|
const baseAssetValue = this.getSpotAssetValue(worstCaseTokenAmount, strictOraclePrice, spotMarketAccount, marginCategory);
|
|
538
571
|
totalAssetValue = totalAssetValue.add(baseAssetValue);
|
|
@@ -547,7 +580,7 @@ class User {
|
|
|
547
580
|
if (worstCaseQuoteTokenAmount.lt(numericConstants_1.ZERO) && countForQuote) {
|
|
548
581
|
let weight = numericConstants_1.SPOT_MARKET_WEIGHT_PRECISION;
|
|
549
582
|
if (marginCategory === 'Initial') {
|
|
550
|
-
weight = anchor_1.BN.max(weight, new anchor_1.BN(this.
|
|
583
|
+
weight = anchor_1.BN.max(weight, new anchor_1.BN(this.getUserAccountOrThrow().maxMarginRatio));
|
|
551
584
|
}
|
|
552
585
|
const weightedTokenValue = worstCaseQuoteTokenAmount
|
|
553
586
|
.abs()
|
|
@@ -572,14 +605,14 @@ class User {
|
|
|
572
605
|
return totalLiabilityValue;
|
|
573
606
|
}
|
|
574
607
|
getSpotLiabilityValue(tokenAmount, strictOraclePrice, spotMarketAccount, marginCategory, liquidationBuffer) {
|
|
575
|
-
return (0, spotBalance_2.getSpotLiabilityValue)(tokenAmount, strictOraclePrice, spotMarketAccount, this.
|
|
608
|
+
return (0, spotBalance_2.getSpotLiabilityValue)(tokenAmount, strictOraclePrice, spotMarketAccount, this.getUserAccountOrThrow().maxMarginRatio, marginCategory, liquidationBuffer);
|
|
576
609
|
}
|
|
577
610
|
getSpotMarketAssetValue(marketIndex, marginCategory, includeOpenOrders, strict = false, now) {
|
|
578
611
|
const { totalAssetValue } = this.getSpotMarketAssetAndLiabilityValue(marketIndex, marginCategory, undefined, includeOpenOrders, strict, now);
|
|
579
612
|
return totalAssetValue;
|
|
580
613
|
}
|
|
581
614
|
getSpotAssetValue(tokenAmount, strictOraclePrice, spotMarketAccount, marginCategory) {
|
|
582
|
-
return (0, spotBalance_2.getSpotAssetValue)(tokenAmount, strictOraclePrice, spotMarketAccount, this.
|
|
615
|
+
return (0, spotBalance_2.getSpotAssetValue)(tokenAmount, strictOraclePrice, spotMarketAccount, this.getUserAccountOrThrow().maxMarginRatio, marginCategory);
|
|
583
616
|
}
|
|
584
617
|
getSpotPositionValue(marketIndex, marginCategory, includeOpenOrders, strict = false, now) {
|
|
585
618
|
const { totalAssetValue, totalLiabilityValue } = this.getSpotMarketAssetAndLiabilityValue(marketIndex, marginCategory, undefined, includeOpenOrders, strict, now);
|
|
@@ -609,7 +642,11 @@ class User {
|
|
|
609
642
|
liquidationBufferMap,
|
|
610
643
|
});
|
|
611
644
|
if (perpMarketIndex !== undefined) {
|
|
612
|
-
const
|
|
645
|
+
const isolatedMarginCalculation = marginCalc.isolatedMarginCalculations.get(perpMarketIndex);
|
|
646
|
+
if (!isolatedMarginCalculation) {
|
|
647
|
+
throw new Error(`No isolated margin calculation for perp market ${perpMarketIndex}`);
|
|
648
|
+
}
|
|
649
|
+
const { totalCollateral, totalCollateralBuffer } = isolatedMarginCalculation;
|
|
613
650
|
if (liquidationBuffer === null || liquidationBuffer === void 0 ? void 0 : liquidationBuffer.gt(numericConstants_1.ZERO)) {
|
|
614
651
|
return totalCollateralBuffer;
|
|
615
652
|
}
|
|
@@ -673,7 +710,7 @@ class User {
|
|
|
673
710
|
return health;
|
|
674
711
|
}
|
|
675
712
|
calculateWeightedPerpPositionLiability(perpPosition, marginCategory, liquidationBuffer, includeOpenOrders, strict = false) {
|
|
676
|
-
const market = this.velocityClient.
|
|
713
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
677
714
|
let valuationPrice = this.getOracleDataForPerpMarket(market.marketIndex).price;
|
|
678
715
|
if ((0, types_1.isVariant)(market.status, 'settlement')) {
|
|
679
716
|
valuationPrice = market.expiryPrice;
|
|
@@ -690,7 +727,7 @@ class User {
|
|
|
690
727
|
liabilityValue = (0, margin_1.calculatePerpLiabilityValue)(baseAssetAmount, valuationPrice);
|
|
691
728
|
}
|
|
692
729
|
if (marginCategory) {
|
|
693
|
-
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.
|
|
730
|
+
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.getUserAccountOrThrow().maxMarginRatio);
|
|
694
731
|
let marginRatio = new anchor_1.BN((0, market_1.calculateMarketMarginRatio)(market, baseAssetAmount.abs(), marginCategory, userCustomMargin));
|
|
695
732
|
if (liquidationBuffer !== undefined) {
|
|
696
733
|
marginRatio = marginRatio.add(liquidationBuffer);
|
|
@@ -698,7 +735,7 @@ class User {
|
|
|
698
735
|
if ((0, types_1.isVariant)(market.status, 'settlement')) {
|
|
699
736
|
marginRatio = numericConstants_1.ZERO;
|
|
700
737
|
}
|
|
701
|
-
const quoteSpotMarket = this.velocityClient.
|
|
738
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(market.quoteSpotMarketIndex);
|
|
702
739
|
const quoteOraclePriceData = this.velocityClient.getOracleDataForSpotMarket(numericConstants_1.QUOTE_SPOT_MARKET_INDEX);
|
|
703
740
|
let quotePrice;
|
|
704
741
|
if (strict) {
|
|
@@ -723,7 +760,7 @@ class User {
|
|
|
723
760
|
* @returns : Precision QUOTE_PRECISION
|
|
724
761
|
*/
|
|
725
762
|
getPerpMarketLiabilityValue(marketIndex, marginCategory, liquidationBuffer, includeOpenOrders, strict = false) {
|
|
726
|
-
const perpPosition = this.
|
|
763
|
+
const perpPosition = this.getPerpPositionOrThrow(marketIndex);
|
|
727
764
|
return this.calculateWeightedPerpPositionLiability(perpPosition, marginCategory, liquidationBuffer, includeOpenOrders, strict);
|
|
728
765
|
}
|
|
729
766
|
/**
|
|
@@ -742,7 +779,7 @@ class User {
|
|
|
742
779
|
*/
|
|
743
780
|
getPerpPositionValue(marketIndex, oraclePriceData, includeOpenOrders = false) {
|
|
744
781
|
const userPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
745
|
-
const market = this.velocityClient.
|
|
782
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(userPosition.marketIndex);
|
|
746
783
|
return (0, margin_2.calculateBaseAssetValueWithOracle)(market, userPosition, oraclePriceData, includeOpenOrders);
|
|
747
784
|
}
|
|
748
785
|
/**
|
|
@@ -751,7 +788,7 @@ class User {
|
|
|
751
788
|
*/
|
|
752
789
|
getPerpLiabilityValue(marketIndex, oraclePriceData, includeOpenOrders = false) {
|
|
753
790
|
const userPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
754
|
-
const market = this.velocityClient.
|
|
791
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(userPosition.marketIndex);
|
|
755
792
|
if (includeOpenOrders) {
|
|
756
793
|
return (0, margin_1.calculateWorstCasePerpLiabilityValue)(userPosition, market, oraclePriceData.price).worstCaseLiabilityValue;
|
|
757
794
|
}
|
|
@@ -775,7 +812,7 @@ class User {
|
|
|
775
812
|
* @returns : Precision PRICE_PRECISION
|
|
776
813
|
*/
|
|
777
814
|
getPositionEstimatedExitPriceAndPnl(position, amountToClose, useAMMClose = false) {
|
|
778
|
-
const market = this.velocityClient.
|
|
815
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(position.marketIndex);
|
|
779
816
|
const entryPrice = (0, position_1.calculateEntryPrice)(position);
|
|
780
817
|
const oraclePriceData = this.getMMOracleDataForPerpMarket(position.marketIndex);
|
|
781
818
|
if (amountToClose) {
|
|
@@ -831,9 +868,9 @@ class User {
|
|
|
831
868
|
if (perpMarketIndex) {
|
|
832
869
|
const perpPosition = this.getPerpPositionOrEmpty(perpMarketIndex);
|
|
833
870
|
const perpLiability = this.calculateWeightedPerpPositionLiability(perpPosition, marginCategory, undefined, includeOpenOrders);
|
|
834
|
-
const perpMarket = this.velocityClient.
|
|
871
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
835
872
|
const oraclePriceData = this.getOracleDataForPerpMarket(perpPosition.marketIndex);
|
|
836
|
-
const quoteSpotMarket = this.velocityClient.
|
|
873
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(perpMarket.quoteSpotMarketIndex);
|
|
837
874
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(perpMarket.quoteSpotMarketIndex);
|
|
838
875
|
const strictOracle = new strictOraclePrice_1.StrictOraclePrice(quoteOraclePriceData.price, quoteOraclePriceData.twap);
|
|
839
876
|
const positionUnrealizedPnl = (0, position_2.calculatePositionPNL)(perpMarket, perpPosition, true, oraclePriceData);
|
|
@@ -862,6 +899,9 @@ class User {
|
|
|
862
899
|
isDustDepositPosition(spotMarketAccount) {
|
|
863
900
|
const marketIndex = spotMarketAccount.marketIndex;
|
|
864
901
|
const spotPosition = this.getSpotPosition(spotMarketAccount.marketIndex);
|
|
902
|
+
if (!spotPosition) {
|
|
903
|
+
throw new Error(`No spot position found for market ${spotMarketAccount.marketIndex}`);
|
|
904
|
+
}
|
|
865
905
|
if ((0, spotPosition_1.isSpotPositionAvailable)(spotPosition)) {
|
|
866
906
|
return false;
|
|
867
907
|
}
|
|
@@ -911,8 +951,8 @@ class User {
|
|
|
911
951
|
*/
|
|
912
952
|
getTotalAllTimePnl() {
|
|
913
953
|
const netUsdValue = this.getNetUsdValue();
|
|
914
|
-
const totalDeposits = this.
|
|
915
|
-
const totalWithdraws = this.
|
|
954
|
+
const totalDeposits = this.getUserAccountOrThrow().totalDeposits;
|
|
955
|
+
const totalWithdraws = this.getUserAccountOrThrow().totalWithdraws;
|
|
916
956
|
const totalPnl = netUsdValue.add(totalWithdraws).sub(totalDeposits);
|
|
917
957
|
return totalPnl;
|
|
918
958
|
}
|
|
@@ -1052,7 +1092,7 @@ class User {
|
|
|
1052
1092
|
this.hasIsolatedPositionBeingLiquidated());
|
|
1053
1093
|
}
|
|
1054
1094
|
isCrossMarginBeingLiquidated() {
|
|
1055
|
-
return ((this.
|
|
1095
|
+
return ((this.getUserAccountOrThrow().status &
|
|
1056
1096
|
(types_1.UserStatus.BEING_LIQUIDATED | types_1.UserStatus.BANKRUPT)) >
|
|
1057
1097
|
0);
|
|
1058
1098
|
}
|
|
@@ -1067,8 +1107,9 @@ class User {
|
|
|
1067
1107
|
0);
|
|
1068
1108
|
}
|
|
1069
1109
|
isIsolatedPositionBeingLiquidated(perpMarketIndex) {
|
|
1110
|
+
var _a;
|
|
1070
1111
|
const position = this.getActivePerpPositions().find((position) => position.marketIndex === perpMarketIndex);
|
|
1071
|
-
return (((position === null || position === void 0 ? void 0 : position.positionFlag) &
|
|
1112
|
+
return ((((_a = position === null || position === void 0 ? void 0 : position.positionFlag) !== null && _a !== void 0 ? _a : 0) &
|
|
1072
1113
|
(types_2.PositionFlag.BeingLiquidated | types_2.PositionFlag.Bankruptcy)) >
|
|
1073
1114
|
0);
|
|
1074
1115
|
}
|
|
@@ -1087,23 +1128,23 @@ class User {
|
|
|
1087
1128
|
return isolatedMarginCalculation.totalCollateral.lt(isolatedMarginCalculation.marginRequirement);
|
|
1088
1129
|
}
|
|
1089
1130
|
hasStatus(status) {
|
|
1090
|
-
return (this.
|
|
1131
|
+
return (this.getUserAccountOrThrow().status & status) > 0;
|
|
1091
1132
|
}
|
|
1092
1133
|
isBankrupt() {
|
|
1093
|
-
return (this.
|
|
1134
|
+
return (this.getUserAccountOrThrow().status & types_1.UserStatus.BANKRUPT) > 0;
|
|
1094
1135
|
}
|
|
1095
1136
|
/**
|
|
1096
1137
|
* Checks if any user position cumulative funding differs from respective market cumulative funding
|
|
1097
1138
|
* @returns
|
|
1098
1139
|
*/
|
|
1099
1140
|
needsToSettleFundingPayment() {
|
|
1100
|
-
for (const userPosition of this.
|
|
1141
|
+
for (const userPosition of this.getUserAccountOrThrow().perpPositions) {
|
|
1101
1142
|
if (userPosition.baseAssetAmount.eq(numericConstants_1.ZERO)) {
|
|
1102
1143
|
continue;
|
|
1103
1144
|
}
|
|
1104
|
-
const market = this.velocityClient.
|
|
1105
|
-
if (market.
|
|
1106
|
-
market.
|
|
1145
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(userPosition.marketIndex);
|
|
1146
|
+
if (market.cumulativeFundingRateLong.eq(userPosition.lastCumulativeFundingRate) ||
|
|
1147
|
+
market.cumulativeFundingRateShort.eq(userPosition.lastCumulativeFundingRate)) {
|
|
1107
1148
|
continue;
|
|
1108
1149
|
}
|
|
1109
1150
|
return true;
|
|
@@ -1123,7 +1164,7 @@ class User {
|
|
|
1123
1164
|
const totalCollateral = this.getTotalCollateral('Maintenance');
|
|
1124
1165
|
const maintenanceMarginRequirement = this.getMaintenanceMarginRequirement();
|
|
1125
1166
|
const freeCollateral = anchor_1.BN.max(numericConstants_1.ZERO, totalCollateral.sub(maintenanceMarginRequirement));
|
|
1126
|
-
const market = this.velocityClient.
|
|
1167
|
+
const market = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
1127
1168
|
let signedTokenAmount = (0, spotBalance_1.getSignedTokenAmount)((0, spotBalance_2.getTokenAmount)(currentSpotPosition.scaledBalance, market, currentSpotPosition.balanceType), currentSpotPosition.balanceType);
|
|
1128
1169
|
signedTokenAmount = signedTokenAmount.add(positionBaseSizeChange);
|
|
1129
1170
|
if (signedTokenAmount.eq(numericConstants_1.ZERO)) {
|
|
@@ -1133,14 +1174,14 @@ class User {
|
|
|
1133
1174
|
const oracle = market.oracle;
|
|
1134
1175
|
const perpMarketWithSameOracle = this.velocityClient
|
|
1135
1176
|
.getPerpMarketAccounts()
|
|
1136
|
-
.find((market) => market.
|
|
1177
|
+
.find((market) => market.oracle.equals(oracle));
|
|
1137
1178
|
const oraclePrice = this.velocityClient.getOracleDataForSpotMarket(marketIndex).price;
|
|
1138
1179
|
if (perpMarketWithSameOracle) {
|
|
1139
1180
|
const perpPosition = this.getPerpPositionOrEmpty(perpMarketWithSameOracle.marketIndex);
|
|
1140
1181
|
if (perpPosition) {
|
|
1141
1182
|
let freeCollateralDeltaForPerp = this.calculateFreeCollateralDeltaForPerp(perpMarketWithSameOracle, perpPosition, numericConstants_1.ZERO, oraclePrice);
|
|
1142
1183
|
if (freeCollateralDeltaForPerp) {
|
|
1143
|
-
const { numerator, denominator } = (0, oracles_1.getMultipleBetweenOracleSources)(market.oracleSource, perpMarketWithSameOracle.
|
|
1184
|
+
const { numerator, denominator } = (0, oracles_1.getMultipleBetweenOracleSources)(market.oracleSource, perpMarketWithSameOracle.oracleSource);
|
|
1144
1185
|
freeCollateralDeltaForPerp = freeCollateralDeltaForPerp
|
|
1145
1186
|
.mul(numerator)
|
|
1146
1187
|
.div(denominator);
|
|
@@ -1171,8 +1212,8 @@ class User {
|
|
|
1171
1212
|
* @returns Precision : PRICE_PRECISION
|
|
1172
1213
|
*/
|
|
1173
1214
|
liquidationPrice(marketIndex, positionBaseSizeChange = numericConstants_1.ZERO, estimatedEntryPrice = numericConstants_1.ZERO, marginCategory = 'Maintenance', includeOpenOrders = false, offsetCollateral = numericConstants_1.ZERO, marginType) {
|
|
1174
|
-
const market = this.velocityClient.
|
|
1175
|
-
const oracle =
|
|
1215
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(marketIndex);
|
|
1216
|
+
const oracle = market.oracle;
|
|
1176
1217
|
const oraclePrice = this.velocityClient.getOracleDataForPerpMarket(marketIndex).price;
|
|
1177
1218
|
const currentPerpPosition = this.getPerpPositionOrEmpty(marketIndex);
|
|
1178
1219
|
if (marginType === 'Isolated') {
|
|
@@ -1201,7 +1242,7 @@ class User {
|
|
|
1201
1242
|
const totalCollateral = this.getTotalCollateral(marginCategory, false, includeOpenOrders);
|
|
1202
1243
|
const marginRequirement = this.getMarginRequirement(marginCategory, undefined, false, includeOpenOrders);
|
|
1203
1244
|
let freeCollateral = anchor_1.BN.max(numericConstants_1.ZERO, totalCollateral.sub(marginRequirement)).add(offsetCollateral);
|
|
1204
|
-
positionBaseSizeChange = (0, orders_1.standardizeBaseAssetAmount)(positionBaseSizeChange, market.
|
|
1245
|
+
positionBaseSizeChange = (0, orders_1.standardizeBaseAssetAmount)(positionBaseSizeChange, market.orderStepSize);
|
|
1205
1246
|
const freeCollateralChangeFromNewPosition = this.calculateEntriesEffectOnFreeCollateral(market, oraclePrice, currentPerpPosition, positionBaseSizeChange, estimatedEntryPrice, includeOpenOrders);
|
|
1206
1247
|
freeCollateral = freeCollateral.add(freeCollateralChangeFromNewPosition);
|
|
1207
1248
|
let freeCollateralDelta = this.calculateFreeCollateralDeltaForPerp(market, currentPerpPosition, positionBaseSizeChange, oraclePrice, marginCategory, includeOpenOrders);
|
|
@@ -1217,7 +1258,7 @@ class User {
|
|
|
1217
1258
|
const signedTokenAmount = (0, spotBalance_1.getSignedTokenAmount)((0, spotBalance_2.getTokenAmount)(spotPosition.scaledBalance, spotMarketWithSameOracle, spotPosition.balanceType), spotPosition.balanceType);
|
|
1218
1259
|
let spotFreeCollateralDelta = this.calculateFreeCollateralDeltaForSpot(spotMarketWithSameOracle, signedTokenAmount, marginCategory);
|
|
1219
1260
|
if (spotFreeCollateralDelta) {
|
|
1220
|
-
const { numerator, denominator } = (0, oracles_1.getMultipleBetweenOracleSources)(market.
|
|
1261
|
+
const { numerator, denominator } = (0, oracles_1.getMultipleBetweenOracleSources)(market.oracleSource, spotMarketWithSameOracle.oracleSource);
|
|
1221
1262
|
spotFreeCollateralDelta = spotFreeCollateralDelta
|
|
1222
1263
|
.mul(numerator)
|
|
1223
1264
|
.div(denominator);
|
|
@@ -1274,7 +1315,7 @@ class User {
|
|
|
1274
1315
|
baseAssetAmount = perpPosition.baseAssetAmount;
|
|
1275
1316
|
liabilityValue = (0, margin_1.calculatePerpLiabilityValue)(baseAssetAmount, oraclePrice);
|
|
1276
1317
|
}
|
|
1277
|
-
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.
|
|
1318
|
+
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1278
1319
|
const marginRatio = (0, market_1.calculateMarketMarginRatio)(market, baseAssetAmount.abs(), marginCategory, userCustomMargin);
|
|
1279
1320
|
return liabilityValue.mul(new anchor_1.BN(marginRatio)).div(numericConstants_1.MARGIN_PRECISION);
|
|
1280
1321
|
};
|
|
@@ -1291,7 +1332,7 @@ class User {
|
|
|
1291
1332
|
// zero if include orders == false
|
|
1292
1333
|
const orderBaseAssetAmount = baseAssetAmount.sub(perpPosition.baseAssetAmount);
|
|
1293
1334
|
const proposedBaseAssetAmount = baseAssetAmount.add(positionBaseSizeChange);
|
|
1294
|
-
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.
|
|
1335
|
+
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1295
1336
|
const marginRatio = (0, market_1.calculateMarketMarginRatio)(market, proposedBaseAssetAmount.abs(), marginCategory, userCustomMargin);
|
|
1296
1337
|
const marginRatioQuotePrecision = new anchor_1.BN(marginRatio)
|
|
1297
1338
|
.mul(numericConstants_1.QUOTE_PRECISION)
|
|
@@ -1355,11 +1396,11 @@ class User {
|
|
|
1355
1396
|
return this.liquidationPrice(positionMarketIndex, closeBaseAmount, estimatedEntryPrice);
|
|
1356
1397
|
}
|
|
1357
1398
|
getMarginUSDCRequiredForTrade(targetMarketIndex, baseSize, estEntryPrice, perpMarketMaxMarginRatio) {
|
|
1358
|
-
const maxMarginRatio =
|
|
1399
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
1359
1400
|
return (0, margin_2.calculateMarginUSDCRequiredForTrade)(this.velocityClient, targetMarketIndex, baseSize, maxMarginRatio, estEntryPrice);
|
|
1360
1401
|
}
|
|
1361
1402
|
getCollateralDepositRequiredForTrade(targetMarketIndex, baseSize, collateralIndex, perpMarketMaxMarginRatio) {
|
|
1362
|
-
const maxMarginRatio =
|
|
1403
|
+
const maxMarginRatio = this.resolveMaxMarginRatio(perpMarketMaxMarginRatio);
|
|
1363
1404
|
return (0, margin_2.calculateCollateralDepositRequiredForTrade)(this.velocityClient, targetMarketIndex, baseSize, collateralIndex, maxMarginRatio);
|
|
1364
1405
|
}
|
|
1365
1406
|
/**
|
|
@@ -1382,7 +1423,7 @@ class User {
|
|
|
1382
1423
|
? true
|
|
1383
1424
|
: targetSide === currentPositionSide;
|
|
1384
1425
|
const oracleData = this.getMMOracleDataForPerpMarket(targetMarketIndex);
|
|
1385
|
-
const marketAccount = this.velocityClient.
|
|
1426
|
+
const marketAccount = this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
|
|
1386
1427
|
// 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.
|
|
1387
1428
|
const oppositeSizeLiabilityValue = targetingSameSide
|
|
1388
1429
|
? numericConstants_1.ZERO
|
|
@@ -1406,7 +1447,7 @@ class User {
|
|
|
1406
1447
|
const perpLiabilityValue = (0, margin_1.calculatePerpLiabilityValue)(currentPosition.baseAssetAmount, oracleData.price);
|
|
1407
1448
|
const totalCollateral = this.getTotalCollateral();
|
|
1408
1449
|
const marginRequirement = this.getInitialMarginRequirement();
|
|
1409
|
-
const marginRatio = Math.max(currentPosition.maxMarginRatio, this.
|
|
1450
|
+
const marginRatio = Math.max(currentPosition.maxMarginRatio, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1410
1451
|
const marginFreedByClosing = perpLiabilityValue
|
|
1411
1452
|
.mul(new anchor_1.BN(marginRatio))
|
|
1412
1453
|
.div(numericConstants_1.MARGIN_PRECISION);
|
|
@@ -1453,7 +1494,7 @@ class User {
|
|
|
1453
1494
|
* @returns tradeSizeAllowed : Precision QUOTE_PRECISION
|
|
1454
1495
|
*/
|
|
1455
1496
|
getMaxTradeSizeUSDCForSpot(targetMarketIndex, direction, currentQuoteAssetValue, currentSpotMarketNetValue) {
|
|
1456
|
-
const market = this.velocityClient.
|
|
1497
|
+
const market = this.velocityClient.getSpotMarketAccountOrThrow(targetMarketIndex);
|
|
1457
1498
|
const oraclePrice = this.velocityClient.getOracleDataForSpotMarket(targetMarketIndex).price;
|
|
1458
1499
|
currentQuoteAssetValue = this.getSpotMarketAssetValue(numericConstants_1.QUOTE_SPOT_MARKET_INDEX);
|
|
1459
1500
|
currentSpotMarketNetValue =
|
|
@@ -1461,19 +1502,19 @@ class User {
|
|
|
1461
1502
|
let freeCollateral = this.getFreeCollateral();
|
|
1462
1503
|
const marginRatio = (0, spotMarket_1.calculateSpotMarketMarginRatio)(market, oraclePrice, 'Initial', numericConstants_1.ZERO, (0, types_1.isVariant)(direction, 'long')
|
|
1463
1504
|
? types_2.SpotBalanceType.DEPOSIT
|
|
1464
|
-
: types_2.SpotBalanceType.BORROW, this.
|
|
1505
|
+
: types_2.SpotBalanceType.BORROW, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1465
1506
|
let tradeAmount = numericConstants_1.ZERO;
|
|
1466
|
-
if (this.
|
|
1507
|
+
if (this.getUserAccountOrThrow().isMarginTradingEnabled) {
|
|
1467
1508
|
// if the user is buying/selling and already short/long, need to account for closing out short/long
|
|
1468
1509
|
if ((0, types_1.isVariant)(direction, 'long') && currentSpotMarketNetValue.lt(numericConstants_1.ZERO)) {
|
|
1469
1510
|
tradeAmount = currentSpotMarketNetValue.abs();
|
|
1470
|
-
const marginRatio = (0, spotMarket_1.calculateSpotMarketMarginRatio)(market, oraclePrice, 'Initial', this.getTokenAmount(targetMarketIndex).abs(), types_2.SpotBalanceType.BORROW, this.
|
|
1511
|
+
const marginRatio = (0, spotMarket_1.calculateSpotMarketMarginRatio)(market, oraclePrice, 'Initial', this.getTokenAmount(targetMarketIndex).abs(), types_2.SpotBalanceType.BORROW, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1471
1512
|
freeCollateral = freeCollateral.add(tradeAmount.mul(new anchor_1.BN(marginRatio)).div(numericConstants_1.MARGIN_PRECISION));
|
|
1472
1513
|
}
|
|
1473
1514
|
else if ((0, types_1.isVariant)(direction, 'short') &&
|
|
1474
1515
|
currentSpotMarketNetValue.gt(numericConstants_1.ZERO)) {
|
|
1475
1516
|
tradeAmount = currentSpotMarketNetValue;
|
|
1476
|
-
const marginRatio = (0, spotMarket_1.calculateSpotMarketMarginRatio)(market, oraclePrice, 'Initial', this.getTokenAmount(targetMarketIndex), types_2.SpotBalanceType.DEPOSIT, this.
|
|
1517
|
+
const marginRatio = (0, spotMarket_1.calculateSpotMarketMarginRatio)(market, oraclePrice, 'Initial', this.getTokenAmount(targetMarketIndex), types_2.SpotBalanceType.DEPOSIT, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1477
1518
|
freeCollateral = freeCollateral.add(tradeAmount.mul(new anchor_1.BN(marginRatio)).div(numericConstants_1.MARGIN_PRECISION));
|
|
1478
1519
|
}
|
|
1479
1520
|
tradeAmount = tradeAmount.add(freeCollateral.mul(numericConstants_1.MARGIN_PRECISION).div(new anchor_1.BN(marginRatio)));
|
|
@@ -1496,8 +1537,8 @@ class User {
|
|
|
1496
1537
|
* @param iterationLimit how long to run appromixation before erroring out
|
|
1497
1538
|
*/
|
|
1498
1539
|
getMaxSwapAmount({ inMarketIndex, outMarketIndex, calculateSwap, iterationLimit = 1000, }) {
|
|
1499
|
-
const inMarket = this.velocityClient.
|
|
1500
|
-
const outMarket = this.velocityClient.
|
|
1540
|
+
const inMarket = this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
|
|
1541
|
+
const outMarket = this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
|
|
1501
1542
|
const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
|
|
1502
1543
|
const inOraclePrice = inOraclePriceData.price;
|
|
1503
1544
|
const outOraclePriceData = this.getOracleDataForSpotMarket(outMarketIndex);
|
|
@@ -1603,7 +1644,7 @@ class User {
|
|
|
1603
1644
|
return clonedPosition;
|
|
1604
1645
|
}
|
|
1605
1646
|
const preTokenAmount = (0, spotBalance_1.getSignedTokenAmount)((0, spotBalance_2.getTokenAmount)(position.scaledBalance, market, position.balanceType), position.balanceType);
|
|
1606
|
-
if ((0,
|
|
1647
|
+
if ((0, utils_2.sigNum)(preTokenAmount).eq((0, utils_2.sigNum)(tokenAmount))) {
|
|
1607
1648
|
const scaledBalanceDelta = (0, spotBalance_1.getBalance)(tokenAmount.abs(), market, position.balanceType);
|
|
1608
1649
|
clonedPosition.scaledBalance =
|
|
1609
1650
|
clonedPosition.scaledBalance.add(scaledBalanceDelta);
|
|
@@ -1625,15 +1666,15 @@ class User {
|
|
|
1625
1666
|
}
|
|
1626
1667
|
calculateSpotPositionFreeCollateralContribution(spotPosition, strictOraclePrice) {
|
|
1627
1668
|
const marginCategory = 'Initial';
|
|
1628
|
-
const spotMarketAccount = this.velocityClient.
|
|
1629
|
-
const { freeCollateralContribution } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.
|
|
1669
|
+
const spotMarketAccount = this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
1670
|
+
const { freeCollateralContribution } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.getUserAccountOrThrow().maxMarginRatio);
|
|
1630
1671
|
return freeCollateralContribution;
|
|
1631
1672
|
}
|
|
1632
1673
|
calculateSpotPositionLeverageContribution(spotPosition, strictOraclePrice) {
|
|
1633
1674
|
let totalAssetValue = numericConstants_1.ZERO;
|
|
1634
1675
|
let totalLiabilityValue = numericConstants_1.ZERO;
|
|
1635
|
-
const spotMarketAccount = this.velocityClient.
|
|
1636
|
-
const { tokenValue, ordersValue } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, 'Initial', this.
|
|
1676
|
+
const spotMarketAccount = this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
1677
|
+
const { tokenValue, ordersValue } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, 'Initial', this.getUserAccountOrThrow().maxMarginRatio);
|
|
1637
1678
|
if (tokenValue.gte(numericConstants_1.ZERO)) {
|
|
1638
1679
|
totalAssetValue = tokenValue;
|
|
1639
1680
|
}
|
|
@@ -1659,8 +1700,8 @@ class User {
|
|
|
1659
1700
|
* @param outAmount
|
|
1660
1701
|
*/
|
|
1661
1702
|
accountLeverageAfterSwap({ inMarketIndex, outMarketIndex, inAmount, outAmount, }) {
|
|
1662
|
-
const inMarket = this.velocityClient.
|
|
1663
|
-
const outMarket = this.velocityClient.
|
|
1703
|
+
const inMarket = this.velocityClient.getSpotMarketAccountOrThrow(inMarketIndex);
|
|
1704
|
+
const outMarket = this.velocityClient.getSpotMarketAccountOrThrow(outMarketIndex);
|
|
1664
1705
|
const inOraclePriceData = this.getOracleDataForSpotMarket(inMarketIndex);
|
|
1665
1706
|
const inOraclePrice = inOraclePriceData.price;
|
|
1666
1707
|
const outOraclePriceData = this.getOracleDataForSpotMarket(outMarketIndex);
|
|
@@ -1747,7 +1788,7 @@ class User {
|
|
|
1747
1788
|
return newLeverage;
|
|
1748
1789
|
}
|
|
1749
1790
|
const currentPosition = this.getPerpPositionOrEmpty(targetMarketIndex);
|
|
1750
|
-
const perpMarket = this.velocityClient.
|
|
1791
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(targetMarketIndex);
|
|
1751
1792
|
const oracleData = this.getOracleDataForPerpMarket(targetMarketIndex);
|
|
1752
1793
|
let {
|
|
1753
1794
|
// eslint-disable-next-line prefer-const
|
|
@@ -1782,13 +1823,11 @@ class User {
|
|
|
1782
1823
|
}
|
|
1783
1824
|
getUserFeeTier(marketType, now) {
|
|
1784
1825
|
const state = this.velocityClient.getStateAccount();
|
|
1785
|
-
const feeTierIndex = 0;
|
|
1786
1826
|
if ((0, types_1.isVariant)(marketType, 'perp')) {
|
|
1787
1827
|
const userStatsAccount = this.velocityClient
|
|
1788
|
-
.
|
|
1789
|
-
.
|
|
1828
|
+
.getUserStatsOrThrow()
|
|
1829
|
+
.getAccountOrThrow();
|
|
1790
1830
|
const total30dVolume = (0, trade_1.getUser30dRollingVolumeEstimate)(userStatsAccount, now);
|
|
1791
|
-
const stakedGovAssetAmount = userStatsAccount.ifStakedGovTokenAmount;
|
|
1792
1831
|
const volumeThresholds = [
|
|
1793
1832
|
new anchor_1.BN(2000000).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1794
1833
|
new anchor_1.BN(10000000).mul(numericConstants_1.QUOTE_PRECISION),
|
|
@@ -1796,14 +1835,6 @@ class User {
|
|
|
1796
1835
|
new anchor_1.BN(80000000).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1797
1836
|
new anchor_1.BN(200000000).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1798
1837
|
];
|
|
1799
|
-
const stakeThresholds = [
|
|
1800
|
-
new anchor_1.BN(1000 - 1).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1801
|
-
new anchor_1.BN(10000 - 1).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1802
|
-
new anchor_1.BN(50000 - 1).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1803
|
-
new anchor_1.BN(100000 - 1).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1804
|
-
new anchor_1.BN(250000 - 5).mul(numericConstants_1.QUOTE_PRECISION),
|
|
1805
|
-
];
|
|
1806
|
-
const stakeBenefitFrac = [0, 5, 10, 20, 30, 40];
|
|
1807
1838
|
let feeTierIndex = 5;
|
|
1808
1839
|
for (let i = 0; i < volumeThresholds.length; i++) {
|
|
1809
1840
|
if (total30dVolume.lt(volumeThresholds[i])) {
|
|
@@ -1811,23 +1842,9 @@ class User {
|
|
|
1811
1842
|
break;
|
|
1812
1843
|
}
|
|
1813
1844
|
}
|
|
1814
|
-
|
|
1815
|
-
for (let i = 0; i < stakeThresholds.length; i++) {
|
|
1816
|
-
if (stakedGovAssetAmount.lt(stakeThresholds[i])) {
|
|
1817
|
-
stakeBenefitIndex = i;
|
|
1818
|
-
break;
|
|
1819
|
-
}
|
|
1820
|
-
}
|
|
1821
|
-
const stakeBenefit = stakeBenefitFrac[stakeBenefitIndex];
|
|
1822
|
-
const tier = { ...state.perpFeeStructure.feeTiers[feeTierIndex] };
|
|
1823
|
-
if (stakeBenefit > 0) {
|
|
1824
|
-
tier.feeNumerator = (tier.feeNumerator * (100 - stakeBenefit)) / 100;
|
|
1825
|
-
tier.makerRebateNumerator =
|
|
1826
|
-
(tier.makerRebateNumerator * (100 + stakeBenefit)) / 100;
|
|
1827
|
-
}
|
|
1828
|
-
return tier;
|
|
1845
|
+
return state.perpFeeStructure.feeTiers[feeTierIndex];
|
|
1829
1846
|
}
|
|
1830
|
-
return state.spotFeeStructure.feeTiers[
|
|
1847
|
+
return state.spotFeeStructure.feeTiers[0];
|
|
1831
1848
|
}
|
|
1832
1849
|
/**
|
|
1833
1850
|
* Calculates how much perp fee will be taken for a given sized trade
|
|
@@ -1856,7 +1873,7 @@ class User {
|
|
|
1856
1873
|
*/
|
|
1857
1874
|
getWithdrawalLimit(marketIndex, reduceOnly) {
|
|
1858
1875
|
const nowTs = new anchor_1.BN(Math.floor(Date.now() / 1000));
|
|
1859
|
-
const spotMarket = this.velocityClient.
|
|
1876
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
1860
1877
|
// eslint-disable-next-line prefer-const
|
|
1861
1878
|
let { borrowLimit, withdrawLimit } = (0, spotBalance_2.calculateWithdrawLimit)(spotMarket, nowTs);
|
|
1862
1879
|
const freeCollateral = this.getFreeCollateral();
|
|
@@ -1884,7 +1901,7 @@ class User {
|
|
|
1884
1901
|
amountWithdrawable = userDepositAmount;
|
|
1885
1902
|
}
|
|
1886
1903
|
else {
|
|
1887
|
-
amountWithdrawable = (0,
|
|
1904
|
+
amountWithdrawable = (0, utils_2.divCeil)((0, utils_2.divCeil)(freeCollateral.mul(numericConstants_1.MARGIN_PRECISION), assetWeight).mul(numericConstants_1.PRICE_PRECISION), oracleData.price)
|
|
1888
1905
|
.mul(numeratorScale)
|
|
1889
1906
|
.div(denominatorScale);
|
|
1890
1907
|
}
|
|
@@ -1909,10 +1926,10 @@ class User {
|
|
|
1909
1926
|
}
|
|
1910
1927
|
}
|
|
1911
1928
|
canBypassWithdrawLimits(marketIndex) {
|
|
1912
|
-
const spotMarket = this.velocityClient.
|
|
1929
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(marketIndex);
|
|
1913
1930
|
const maxDepositAmount = spotMarket.withdrawGuardThreshold.div(new anchor_1.BN(10));
|
|
1914
1931
|
const position = this.getSpotPosition(marketIndex);
|
|
1915
|
-
const netDeposits = this.
|
|
1932
|
+
const netDeposits = this.getUserAccountOrThrow().totalDeposits.sub(this.getUserAccountOrThrow().totalWithdraws);
|
|
1916
1933
|
if (!position) {
|
|
1917
1934
|
return {
|
|
1918
1935
|
canBypass: false,
|
|
@@ -1946,7 +1963,7 @@ class User {
|
|
|
1946
1963
|
};
|
|
1947
1964
|
}
|
|
1948
1965
|
canMakeIdle(slot) {
|
|
1949
|
-
const userAccount = this.
|
|
1966
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
1950
1967
|
if (userAccount.idle) {
|
|
1951
1968
|
return false;
|
|
1952
1969
|
}
|
|
@@ -1989,12 +2006,13 @@ class User {
|
|
|
1989
2006
|
return true;
|
|
1990
2007
|
}
|
|
1991
2008
|
canBeDeleted(userStatsAccount, now) {
|
|
1992
|
-
const userAccount = this.
|
|
1993
|
-
const userStatsAccountToUse = userStatsAccount
|
|
2009
|
+
const userAccount = this.getUserAccountOrThrow();
|
|
2010
|
+
const userStatsAccountToUse = userStatsAccount !== null && userStatsAccount !== void 0 ? userStatsAccount : this.velocityClient.getUserStatsOrThrow().getAccount();
|
|
1994
2011
|
const nowInSeconds = now || new anchor_1.BN(Math.floor(Date.now() / 1000));
|
|
1995
2012
|
const stateAccount = this.velocityClient.getStateAccount();
|
|
1996
2013
|
// Referrer cannot delete sub_account_id 0
|
|
1997
|
-
const isReferrer =
|
|
2014
|
+
const isReferrer = userStatsAccountToUse !== undefined &&
|
|
2015
|
+
(userStatsAccountToUse.referrerStatus & types_1.ReferrerStatus.IsReferrer) > 0;
|
|
1998
2016
|
if (isReferrer && userAccount.subAccountId === 0) {
|
|
1999
2017
|
return { canDelete: false, reason: 'is-subaccount-0-referrer' };
|
|
2000
2018
|
}
|
|
@@ -2023,7 +2041,7 @@ class User {
|
|
|
2023
2041
|
}
|
|
2024
2042
|
}
|
|
2025
2043
|
// Fresh account (< 13 days) with init fee must be idle
|
|
2026
|
-
if (stateAccount.maxInitializeUserFee > 0) {
|
|
2044
|
+
if (stateAccount.maxInitializeUserFee > 0 && userStatsAccountToUse) {
|
|
2027
2045
|
const minActionTs = anchor_1.BN.min(userStatsAccountToUse.lastFillerVolume30DTs, anchor_1.BN.min(userStatsAccountToUse.lastMakerVolume30DTs, userStatsAccountToUse.lastTakerVolume30DTs));
|
|
2028
2046
|
const estimatedAge = anchor_1.BN.max(nowInSeconds.sub(minActionTs), numericConstants_1.ZERO);
|
|
2029
2047
|
if (estimatedAge.lt(new anchor_1.BN(numericConstants_1.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS))) {
|
|
@@ -2041,13 +2059,13 @@ class User {
|
|
|
2041
2059
|
let safestPerpTier = 4;
|
|
2042
2060
|
let safestSpotTier = 4;
|
|
2043
2061
|
for (const perpPosition of this.getActivePerpPositions()) {
|
|
2044
|
-
safestPerpTier = Math.min(safestPerpTier, (0, tiers_1.getPerpMarketTierNumber)(this.velocityClient.
|
|
2062
|
+
safestPerpTier = Math.min(safestPerpTier, (0, tiers_1.getPerpMarketTierNumber)(this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex)));
|
|
2045
2063
|
}
|
|
2046
2064
|
for (const spotPosition of this.getActiveSpotPositions()) {
|
|
2047
2065
|
if ((0, types_1.isVariant)(spotPosition.balanceType, 'deposit')) {
|
|
2048
2066
|
continue;
|
|
2049
2067
|
}
|
|
2050
|
-
safestSpotTier = Math.min(safestSpotTier, (0, tiers_1.getSpotMarketTierNumber)(this.velocityClient.
|
|
2068
|
+
safestSpotTier = Math.min(safestSpotTier, (0, tiers_1.getSpotMarketTierNumber)(this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex)));
|
|
2051
2069
|
}
|
|
2052
2070
|
return {
|
|
2053
2071
|
perpTier: safestPerpTier,
|
|
@@ -2055,7 +2073,7 @@ class User {
|
|
|
2055
2073
|
};
|
|
2056
2074
|
}
|
|
2057
2075
|
getPerpPositionHealth({ marginCategory, perpPosition, oraclePriceData, quoteOraclePriceData, includeOpenOrders = true, }) {
|
|
2058
|
-
const perpMarket = this.velocityClient.
|
|
2076
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
2059
2077
|
const _oraclePriceData = oraclePriceData ||
|
|
2060
2078
|
this.velocityClient.getOracleDataForPerpMarket(perpMarket.marketIndex);
|
|
2061
2079
|
const oraclePrice = _oraclePriceData.price;
|
|
@@ -2070,7 +2088,7 @@ class User {
|
|
|
2070
2088
|
worstCaseBaseAmount = perpPosition.baseAssetAmount;
|
|
2071
2089
|
worstCaseLiabilityValue = (0, margin_1.calculatePerpLiabilityValue)(perpPosition.baseAssetAmount, oraclePrice);
|
|
2072
2090
|
}
|
|
2073
|
-
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.
|
|
2091
|
+
const userCustomMargin = Math.max(perpPosition.maxMarginRatio, this.getUserAccountOrThrow().maxMarginRatio);
|
|
2074
2092
|
const marginRatio = new anchor_1.BN((0, market_1.calculateMarketMarginRatio)(perpMarket, worstCaseBaseAmount.abs(), marginCategory, userCustomMargin));
|
|
2075
2093
|
const _quoteOraclePriceData = quoteOraclePriceData ||
|
|
2076
2094
|
this.velocityClient.getOracleDataForSpotMarket(numericConstants_1.QUOTE_SPOT_MARKET_INDEX);
|
|
@@ -2096,7 +2114,7 @@ class User {
|
|
|
2096
2114
|
perpPnl: [],
|
|
2097
2115
|
};
|
|
2098
2116
|
for (const perpPosition of this.getActivePerpPositions()) {
|
|
2099
|
-
const perpMarket = this.velocityClient.
|
|
2117
|
+
const perpMarket = this.velocityClient.getPerpMarketAccountOrThrow(perpPosition.marketIndex);
|
|
2100
2118
|
const oraclePriceData = this.velocityClient.getOracleDataForPerpMarket(perpMarket.marketIndex);
|
|
2101
2119
|
const quoteOraclePriceData = this.velocityClient.getOracleDataForSpotMarket(numericConstants_1.QUOTE_SPOT_MARKET_INDEX);
|
|
2102
2120
|
healthComponents.perpPositions.push(this.getPerpPositionHealth({
|
|
@@ -2105,7 +2123,7 @@ class User {
|
|
|
2105
2123
|
oraclePriceData,
|
|
2106
2124
|
quoteOraclePriceData,
|
|
2107
2125
|
}));
|
|
2108
|
-
const quoteSpotMarket = this.velocityClient.
|
|
2126
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(perpMarket.quoteSpotMarketIndex);
|
|
2109
2127
|
const positionUnrealizedPnl = (0, position_2.calculatePositionPNL)(perpMarket, perpPosition, true, oraclePriceData);
|
|
2110
2128
|
let pnlWeight;
|
|
2111
2129
|
if (positionUnrealizedPnl.gt(numericConstants_1.ZERO)) {
|
|
@@ -2130,7 +2148,7 @@ class User {
|
|
|
2130
2148
|
}
|
|
2131
2149
|
let netQuoteValue = numericConstants_1.ZERO;
|
|
2132
2150
|
for (const spotPosition of this.getActiveSpotPositions()) {
|
|
2133
|
-
const spotMarketAccount = this.velocityClient.
|
|
2151
|
+
const spotMarketAccount = this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
2134
2152
|
const oraclePriceData = this.getOracleDataForSpotMarket(spotPosition.marketIndex);
|
|
2135
2153
|
const strictOraclePrice = new strictOraclePrice_1.StrictOraclePrice(oraclePriceData.price);
|
|
2136
2154
|
if (spotPosition.marketIndex === numericConstants_1.QUOTE_SPOT_MARKET_INDEX) {
|
|
@@ -2138,7 +2156,7 @@ class User {
|
|
|
2138
2156
|
netQuoteValue = netQuoteValue.add(tokenAmount);
|
|
2139
2157
|
continue;
|
|
2140
2158
|
}
|
|
2141
|
-
const { tokenAmount: worstCaseTokenAmount, tokenValue: tokenValue, weight, weightedTokenValue: weightedTokenValue, ordersValue: ordersValue, } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.
|
|
2159
|
+
const { tokenAmount: worstCaseTokenAmount, tokenValue: tokenValue, weight, weightedTokenValue: weightedTokenValue, ordersValue: ordersValue, } = (0, spotPosition_1.getWorstCaseTokenAmounts)(spotPosition, spotMarketAccount, strictOraclePrice, marginCategory, this.getUserAccountOrThrow().maxMarginRatio);
|
|
2142
2160
|
netQuoteValue = netQuoteValue.add(ordersValue);
|
|
2143
2161
|
const baseAssetValue = tokenValue.abs();
|
|
2144
2162
|
const weightedValue = weightedTokenValue.abs();
|
|
@@ -2165,7 +2183,7 @@ class User {
|
|
|
2165
2183
|
const spotMarketAccount = this.velocityClient.getQuoteSpotMarketAccount();
|
|
2166
2184
|
const oraclePriceData = this.getOracleDataForSpotMarket(numericConstants_1.QUOTE_SPOT_MARKET_INDEX);
|
|
2167
2185
|
const baseAssetValue = (0, spotBalance_1.getTokenValue)(netQuoteValue, spotMarketAccount.decimals, oraclePriceData);
|
|
2168
|
-
const { weight, weightedTokenValue } = (0, spotPosition_1.calculateWeightedTokenValue)(netQuoteValue, baseAssetValue, oraclePriceData.price, spotMarketAccount, marginCategory, this.
|
|
2186
|
+
const { weight, weightedTokenValue } = (0, spotPosition_1.calculateWeightedTokenValue)(netQuoteValue, baseAssetValue, oraclePriceData.price, spotMarketAccount, marginCategory, this.getUserAccountOrThrow().maxMarginRatio);
|
|
2169
2187
|
if (netQuoteValue.lt(numericConstants_1.ZERO)) {
|
|
2170
2188
|
healthComponents.borrows.push({
|
|
2171
2189
|
marketIndex: spotMarketAccount.marketIndex,
|
|
@@ -2232,7 +2250,9 @@ class User {
|
|
|
2232
2250
|
const liquidationBufferMap = (_b = opts === null || opts === void 0 ? void 0 : opts.liquidationBufferMap) !== null && _b !== void 0 ? _b : new Map();
|
|
2233
2251
|
const includeOpenOrders = (_c = opts === null || opts === void 0 ? void 0 : opts.includeOpenOrders) !== null && _c !== void 0 ? _c : true;
|
|
2234
2252
|
// Equivalent to on-chain user_custom_margin_ratio
|
|
2235
|
-
const userCustomMarginRatio = marginCategory === 'Initial'
|
|
2253
|
+
const userCustomMarginRatio = marginCategory === 'Initial'
|
|
2254
|
+
? this.getUserAccountOrThrow().maxMarginRatio
|
|
2255
|
+
: 0;
|
|
2236
2256
|
// Initialize calc via JS mirror of Rust/on-chain MarginCalculation
|
|
2237
2257
|
const isolatedMarginBuffers = new Map();
|
|
2238
2258
|
for (const [marketIndex, isolatedMarginBuffer,] of (_d = opts === null || opts === void 0 ? void 0 : opts.liquidationBufferMap) !== null && _d !== void 0 ? _d : new Map()) {
|
|
@@ -2246,11 +2266,11 @@ class User {
|
|
|
2246
2266
|
.setIsolatedMarginBuffers(isolatedMarginBuffers);
|
|
2247
2267
|
const calc = new marginCalculation_1.MarginCalculation(ctx);
|
|
2248
2268
|
// SPOT POSITIONS
|
|
2249
|
-
for (const spotPosition of this.
|
|
2269
|
+
for (const spotPosition of this.getUserAccountOrThrow().spotPositions) {
|
|
2250
2270
|
if ((0, spotPosition_1.isSpotPositionAvailable)(spotPosition))
|
|
2251
2271
|
continue;
|
|
2252
2272
|
const isQuote = spotPosition.marketIndex === numericConstants_1.QUOTE_SPOT_MARKET_INDEX;
|
|
2253
|
-
const spotMarket = this.velocityClient.
|
|
2273
|
+
const spotMarket = this.velocityClient.getSpotMarketAccountOrThrow(spotPosition.marketIndex);
|
|
2254
2274
|
const oraclePriceData = this.getOracleDataForSpotMarket(spotPosition.marketIndex);
|
|
2255
2275
|
const twap5 = strict
|
|
2256
2276
|
? (0, oracles_1.calculateLiveOracleTwap)(spotMarket.historicalOracleData, oraclePriceData, new anchor_1.BN(Math.floor(Date.now() / 1000)), numericConstants_1.FIVE_MINUTE)
|
|
@@ -2299,8 +2319,8 @@ class User {
|
|
|
2299
2319
|
}
|
|
2300
2320
|
// PERP POSITIONS
|
|
2301
2321
|
for (const marketPosition of this.getActivePerpPositions()) {
|
|
2302
|
-
const market = this.velocityClient.
|
|
2303
|
-
const quoteSpotMarket = this.velocityClient.
|
|
2322
|
+
const market = this.velocityClient.getPerpMarketAccountOrThrow(marketPosition.marketIndex);
|
|
2323
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(market.quoteSpotMarketIndex);
|
|
2304
2324
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(market.quoteSpotMarketIndex);
|
|
2305
2325
|
const oraclePriceData = this.getMMOracleDataForPerpMarket(market.marketIndex);
|
|
2306
2326
|
const nonMmmOraclePriceData = this.getOracleDataForPerpMarket(market.marketIndex);
|
|
@@ -2353,7 +2373,7 @@ class User {
|
|
|
2353
2373
|
// derive isolated quote deposit value, mirroring on-chain logic
|
|
2354
2374
|
let depositValue = numericConstants_1.ZERO;
|
|
2355
2375
|
if ((_h = marketPosition.isolatedPositionScaledBalance) === null || _h === void 0 ? void 0 : _h.gt(numericConstants_1.ZERO)) {
|
|
2356
|
-
const quoteSpotMarket = this.velocityClient.
|
|
2376
|
+
const quoteSpotMarket = this.velocityClient.getSpotMarketAccountOrThrow(market.quoteSpotMarketIndex);
|
|
2357
2377
|
const quoteOraclePriceData = this.getOracleDataForSpotMarket(market.quoteSpotMarketIndex);
|
|
2358
2378
|
const strictQuote = new strictOraclePrice_1.StrictOraclePrice(quoteOraclePriceData.price, strict
|
|
2359
2379
|
? quoteSpotMarket.historicalOracleData.lastOraclePriceTwap5Min
|