@velocity-exchange/sdk 0.0.3 → 0.1.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 +1 -1
- package/lib/browser/accounts/grpcProgramAccountSubscriber.js +1 -1
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriber.js +1 -3
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +0 -4
- package/lib/browser/accounts/grpcVelocityClientAccountSubscriberV2.js +5 -7
- package/lib/browser/accounts/laserProgramAccountSubscriber.js +1 -1
- package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/browser/accounts/pollingVelocityClientAccountSubscriber.js +5 -7
- package/lib/browser/accounts/types.d.ts +2 -8
- package/lib/browser/accounts/utils.js +2 -2
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriber.js +5 -7
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +0 -4
- package/lib/browser/accounts/webSocketVelocityClientAccountSubscriberV2.js +5 -7
- package/lib/browser/addresses/pda.d.ts +1 -7
- package/lib/browser/addresses/pda.js +4 -10
- package/lib/browser/adminClient.d.ts +1 -1
- package/lib/browser/adminClient.js +21 -21
- package/lib/browser/auctionSubscriber/auctionSubscriber.d.ts +1 -3
- package/lib/browser/auctionSubscriber/auctionSubscriber.js +2 -6
- package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -3
- package/lib/browser/auctionSubscriber/auctionSubscriberGrpc.js +2 -6
- package/lib/browser/auctionSubscriber/types.d.ts +3 -2
- package/lib/browser/config.d.ts +10 -19
- package/lib/browser/config.js +6 -33
- package/lib/browser/constants/insuranceFund.d.ts +1 -1
- package/lib/browser/constants/insuranceFund.js +1 -1
- package/lib/browser/constituentMap/constituentMap.d.ts +0 -2
- package/lib/browser/constituentMap/constituentMap.js +5 -5
- package/lib/browser/core/VelocityCore.d.ts +9 -15
- package/lib/browser/core/VelocityCore.js +5 -7
- package/lib/browser/core/instructions/withdraw.d.ts +1 -1
- package/lib/browser/core/instructions/withdraw.js +1 -1
- package/lib/browser/core/remainingAccounts.js +3 -3
- package/lib/browser/decode/user.js +5 -5
- package/lib/browser/dlob/DLOB.d.ts +1 -1
- package/lib/browser/dlob/DLOB.js +7 -7
- package/lib/browser/dlob/DLOBNode.js +1 -2
- package/lib/browser/dlob/DLOBSubscriber.d.ts +0 -2
- package/lib/browser/dlob/DLOBSubscriber.js +2 -7
- package/lib/browser/dlob/orderBookLevels.js +7 -7
- package/lib/browser/dlob/types.d.ts +0 -2
- package/lib/browser/events/eventSubscriber.d.ts +1 -1
- package/lib/browser/events/eventsServerLogProvider.js +2 -2
- package/lib/browser/events/parse.js +14 -14
- package/lib/browser/events/types.d.ts +3 -5
- package/lib/browser/events/types.js +1 -1
- package/lib/browser/idl/{drift.d.ts → velocity.d.ts} +1043 -768
- package/lib/browser/idl/{drift.json → velocity.json} +1034 -759
- package/lib/browser/index.d.ts +1 -1
- package/lib/browser/index.js +1 -2
- package/lib/browser/math/amm.d.ts +10 -10
- package/lib/browser/math/amm.js +29 -28
- package/lib/browser/math/auction.d.ts +1 -1
- package/lib/browser/math/auction.js +18 -21
- package/lib/browser/math/builder.d.ts +18 -1
- package/lib/browser/math/builder.js +32 -1
- package/lib/browser/math/funding.js +26 -26
- package/lib/browser/math/margin.d.ts +4 -4
- package/lib/browser/math/margin.js +15 -15
- package/lib/browser/math/market.js +13 -13
- package/lib/browser/math/oracles.d.ts +4 -4
- package/lib/browser/math/oracles.js +23 -23
- package/lib/browser/math/orders.d.ts +2 -2
- package/lib/browser/math/orders.js +12 -12
- package/lib/browser/math/position.js +4 -4
- package/lib/browser/math/superStake.d.ts +8 -10
- package/lib/browser/math/superStake.js +18 -20
- package/lib/browser/math/trade.js +5 -5
- package/lib/browser/math/utils.d.ts +1 -1
- package/lib/browser/math/utils.js +1 -1
- package/lib/browser/oracles/pythLazerClient.js +2 -2
- package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +0 -2
- package/lib/browser/orderSubscriber/OrderSubscriber.js +8 -12
- 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/priorityFeeSubscriber.d.ts +1 -5
- package/lib/browser/priorityFee/priorityFeeSubscriber.js +7 -15
- package/lib/browser/priorityFee/priorityFeeSubscriberMap.d.ts +0 -4
- package/lib/browser/priorityFee/priorityFeeSubscriberMap.js +3 -11
- 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/swap/UnifiedSwapClient.js +1 -1
- package/lib/browser/swift/signedMsgUserAccountSubscriber.d.ts +4 -5
- package/lib/browser/swift/signedMsgUserAccountSubscriber.js +2 -6
- package/lib/browser/swift/swiftOrderSubscriber.d.ts +6 -5
- package/lib/browser/swift/swiftOrderSubscriber.js +5 -11
- package/lib/browser/types.d.ts +81 -93
- package/lib/browser/types.js +4 -0
- package/lib/browser/user.d.ts +1 -3
- package/lib/browser/user.js +19 -23
- package/lib/browser/userConfig.d.ts +3 -2
- package/lib/browser/userMap/WebsocketSubscription.js +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 +0 -4
- package/lib/browser/userMap/revenueShareEscrowMap.d.ts +0 -2
- package/lib/browser/userMap/revenueShareEscrowMap.js +0 -4
- package/lib/browser/userMap/userMap.d.ts +2 -4
- package/lib/browser/userMap/userMap.js +10 -14
- package/lib/browser/userMap/userMapConfig.d.ts +3 -2
- package/lib/browser/userMap/userStatsMap.d.ts +0 -2
- package/lib/browser/userMap/userStatsMap.js +0 -4
- package/lib/browser/userStats.d.ts +0 -2
- package/lib/browser/userStats.js +10 -14
- package/lib/browser/userStatsConfig.d.ts +3 -2
- package/lib/browser/util/ed25519Utils.d.ts +1 -1
- package/lib/browser/util/ed25519Utils.js +1 -1
- package/lib/browser/velocityClient.d.ts +59 -44
- package/lib/browser/velocityClient.js +259 -197
- package/lib/browser/velocityClientConfig.d.ts +0 -8
- package/lib/node/accounts/grpcProgramAccountSubscriber.js +1 -1
- 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 +1 -3
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts +0 -4
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/grpcVelocityClientAccountSubscriberV2.js +5 -7
- package/lib/node/accounts/laserProgramAccountSubscriber.js +1 -1
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/pollingVelocityClientAccountSubscriber.js +5 -7
- package/lib/node/accounts/types.d.ts +2 -8
- package/lib/node/accounts/types.d.ts.map +1 -1
- package/lib/node/accounts/utils.js +2 -2
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts +0 -4
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.d.ts.map +1 -1
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriber.js +5 -7
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts +0 -4
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.d.ts.map +1 -1
- package/lib/node/accounts/webSocketVelocityClientAccountSubscriberV2.js +5 -7
- package/lib/node/addresses/pda.d.ts +1 -7
- package/lib/node/addresses/pda.d.ts.map +1 -1
- package/lib/node/addresses/pda.js +4 -10
- package/lib/node/adminClient.d.ts +1 -1
- package/lib/node/adminClient.js +21 -21
- package/lib/node/auctionSubscriber/auctionSubscriber.d.ts +1 -3
- package/lib/node/auctionSubscriber/auctionSubscriber.d.ts.map +1 -1
- package/lib/node/auctionSubscriber/auctionSubscriber.js +2 -6
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts +1 -3
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.d.ts.map +1 -1
- package/lib/node/auctionSubscriber/auctionSubscriberGrpc.js +2 -6
- package/lib/node/auctionSubscriber/types.d.ts +3 -2
- package/lib/node/auctionSubscriber/types.d.ts.map +1 -1
- package/lib/node/config.d.ts +10 -19
- package/lib/node/config.d.ts.map +1 -1
- package/lib/node/config.js +6 -33
- package/lib/node/constants/insuranceFund.d.ts +1 -1
- package/lib/node/constants/insuranceFund.js +1 -1
- 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 +5 -5
- 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/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.js +3 -3
- package/lib/node/decode/user.js +5 -5
- package/lib/node/dlob/DLOB.d.ts +1 -1
- package/lib/node/dlob/DLOB.d.ts.map +1 -1
- package/lib/node/dlob/DLOB.js +7 -7
- package/lib/node/dlob/DLOBNode.js +1 -2
- 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 +2 -7
- package/lib/node/dlob/orderBookLevels.d.ts.map +1 -1
- package/lib/node/dlob/orderBookLevels.js +7 -7
- package/lib/node/dlob/types.d.ts +0 -2
- package/lib/node/dlob/types.d.ts.map +1 -1
- package/lib/node/events/eventSubscriber.d.ts +1 -1
- package/lib/node/events/eventsServerLogProvider.js +2 -2
- package/lib/node/events/parse.d.ts.map +1 -1
- package/lib/node/events/parse.js +14 -14
- package/lib/node/events/types.d.ts +3 -5
- package/lib/node/events/types.d.ts.map +1 -1
- package/lib/node/events/types.js +1 -1
- package/lib/node/idl/{drift.d.ts → velocity.d.ts} +1044 -769
- package/lib/node/idl/velocity.d.ts.map +1 -0
- package/lib/node/idl/{drift.json → velocity.json} +1034 -759
- package/lib/node/index.d.ts +1 -1
- package/lib/node/index.d.ts.map +1 -1
- package/lib/node/index.js +1 -2
- package/lib/node/math/amm.d.ts +10 -10
- package/lib/node/math/amm.d.ts.map +1 -1
- package/lib/node/math/amm.js +29 -28
- package/lib/node/math/auction.d.ts +1 -1
- package/lib/node/math/auction.d.ts.map +1 -1
- package/lib/node/math/auction.js +18 -21
- 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 +26 -26
- package/lib/node/math/margin.d.ts +4 -4
- package/lib/node/math/margin.d.ts.map +1 -1
- package/lib/node/math/margin.js +15 -15
- package/lib/node/math/market.d.ts.map +1 -1
- package/lib/node/math/market.js +13 -13
- package/lib/node/math/oracles.d.ts +4 -4
- package/lib/node/math/oracles.d.ts.map +1 -1
- package/lib/node/math/oracles.js +23 -23
- package/lib/node/math/orders.d.ts +2 -2
- package/lib/node/math/orders.d.ts.map +1 -1
- package/lib/node/math/orders.js +12 -12
- package/lib/node/math/position.d.ts.map +1 -1
- package/lib/node/math/position.js +4 -4
- package/lib/node/math/superStake.d.ts +8 -10
- package/lib/node/math/superStake.d.ts.map +1 -1
- package/lib/node/math/superStake.js +18 -20
- package/lib/node/math/trade.d.ts.map +1 -1
- package/lib/node/math/trade.js +5 -5
- package/lib/node/math/utils.d.ts +1 -1
- package/lib/node/math/utils.js +1 -1
- package/lib/node/oracles/pythLazerClient.js +2 -2
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts +0 -2
- package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
- package/lib/node/orderSubscriber/OrderSubscriber.js +8 -12
- 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/priorityFeeSubscriber.d.ts +1 -5
- package/lib/node/priorityFee/priorityFeeSubscriber.d.ts.map +1 -1
- package/lib/node/priorityFee/priorityFeeSubscriber.js +7 -15
- 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/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/swap/UnifiedSwapClient.js +1 -1
- package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts +4 -5
- package/lib/node/swift/signedMsgUserAccountSubscriber.d.ts.map +1 -1
- package/lib/node/swift/signedMsgUserAccountSubscriber.js +2 -6
- package/lib/node/swift/swiftOrderSubscriber.d.ts +6 -5
- package/lib/node/swift/swiftOrderSubscriber.d.ts.map +1 -1
- package/lib/node/swift/swiftOrderSubscriber.js +5 -11
- package/lib/node/types.d.ts +81 -93
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/types.js +4 -0
- package/lib/node/user.d.ts +1 -3
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/user.js +19 -23
- package/lib/node/userConfig.d.ts +3 -2
- package/lib/node/userConfig.d.ts.map +1 -1
- package/lib/node/userMap/WebsocketSubscription.js +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 +0 -4
- 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 +0 -4
- package/lib/node/userMap/userMap.d.ts +2 -4
- package/lib/node/userMap/userMap.d.ts.map +1 -1
- package/lib/node/userMap/userMap.js +10 -14
- 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 +0 -2
- package/lib/node/userMap/userStatsMap.d.ts.map +1 -1
- package/lib/node/userMap/userStatsMap.js +0 -4
- package/lib/node/userStats.d.ts +0 -2
- package/lib/node/userStats.d.ts.map +1 -1
- package/lib/node/userStats.js +10 -14
- package/lib/node/userStatsConfig.d.ts +3 -2
- package/lib/node/userStatsConfig.d.ts.map +1 -1
- package/lib/node/util/ed25519Utils.d.ts +1 -1
- package/lib/node/util/ed25519Utils.js +1 -1
- package/lib/node/velocityClient.d.ts +59 -44
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +259 -197
- package/lib/node/velocityClientConfig.d.ts +0 -8
- package/lib/node/velocityClientConfig.d.ts.map +1 -1
- package/package.json +6 -7
- 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/grpcProgramAccountSubscriber.ts +1 -1
- package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -7
- package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +4 -11
- package/src/accounts/laserProgramAccountSubscriber.ts +1 -1
- package/src/accounts/pollingVelocityClientAccountSubscriber.ts +4 -11
- package/src/accounts/types.ts +2 -9
- package/src/accounts/utils.ts +2 -2
- package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +4 -11
- package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +4 -11
- package/src/addresses/pda.ts +3 -13
- package/src/adminClient.ts +21 -21
- package/src/auctionSubscriber/auctionSubscriber.ts +1 -6
- package/src/auctionSubscriber/auctionSubscriberGrpc.ts +1 -6
- package/src/auctionSubscriber/types.ts +3 -3
- package/src/config.ts +8 -64
- package/src/constants/insuranceFund.ts +1 -1
- package/src/constituentMap/constituentMap.ts +2 -6
- package/src/core/VelocityCore.ts +11 -20
- package/src/core/instructions/withdraw.ts +2 -2
- package/src/core/remainingAccounts.ts +3 -3
- package/src/decode/user.ts +5 -5
- package/src/dlob/DLOB.ts +7 -7
- package/src/dlob/DLOBNode.ts +1 -1
- package/src/dlob/DLOBSubscriber.ts +2 -8
- package/src/dlob/orderBookLevels.ts +12 -6
- package/src/dlob/types.ts +0 -2
- package/src/events/eventSubscriber.ts +1 -1
- package/src/events/eventsServerLogProvider.ts +2 -2
- package/src/events/parse.ts +14 -14
- package/src/events/types.ts +4 -7
- package/src/idl/{drift.json → velocity.json} +1034 -759
- package/src/idl/{drift.ts → velocity.ts} +1036 -761
- package/src/index.ts +1 -4
- package/src/margin/README.md +2 -2
- package/src/math/amm.ts +43 -21
- package/src/math/auction.ts +19 -22
- package/src/math/builder.ts +45 -1
- package/src/math/funding.ts +46 -43
- package/src/math/margin.ts +15 -15
- package/src/math/market.ts +21 -13
- package/src/math/oracles.ts +29 -26
- package/src/math/orders.ts +21 -11
- package/src/math/position.ts +9 -3
- package/src/math/superStake.ts +21 -24
- package/src/math/trade.ts +9 -1
- package/src/math/utils.ts +1 -1
- package/src/oracles/pythLazerClient.ts +3 -3
- package/src/orderSubscriber/OrderSubscriber.ts +2 -8
- package/src/orderSubscriber/WebsocketSubscription.ts +1 -1
- package/src/orderSubscriber/grpcSubscription.ts +2 -2
- package/src/orderSubscriber/types.ts +0 -2
- package/src/priorityFee/priorityFeeSubscriber.ts +5 -12
- package/src/priorityFee/priorityFeeSubscriberMap.ts +2 -10
- package/src/priorityFee/types.ts +4 -9
- package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -12
- package/src/pyth/pythLazerSubscriber.ts +1 -1
- package/src/swap/UnifiedSwapClient.ts +1 -1
- package/src/swift/signedMsgUserAccountSubscriber.ts +2 -8
- package/src/swift/swiftOrderSubscriber.ts +7 -12
- package/src/types.ts +86 -104
- package/src/user.ts +9 -14
- package/src/userConfig.ts +1 -3
- package/src/userMap/WebsocketSubscription.ts +1 -1
- package/src/userMap/grpcSubscription.ts +1 -1
- package/src/userMap/referrerMap.ts +0 -4
- package/src/userMap/revenueShareEscrowMap.ts +0 -4
- package/src/userMap/userMap.ts +3 -7
- package/src/userMap/userMapConfig.ts +3 -3
- package/src/userMap/userStatsMap.ts +0 -4
- package/src/userStats.ts +1 -5
- package/src/userStatsConfig.ts +3 -3
- package/src/util/ed25519Utils.ts +1 -1
- package/src/velocityClient.ts +345 -231
- package/src/velocityClientConfig.ts +3 -11
- 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/auctions/test.ts +4 -4
- package/tests/ci/verifyConstants.ts +24 -27
- package/tests/decode/test.ts +3 -3
- package/tests/dlob/helpers.ts +5 -9
- package/tests/dlob/test.ts +5 -5
- package/tests/events/parseLogsForCuUsage.ts +15 -15
- package/tests/user/helpers.ts +10 -10
- package/tests/user/test.ts +13 -10
- package/lib/browser/util/deprecatedAlias.d.ts +0 -26
- package/lib/browser/util/deprecatedAlias.js +0 -10
- package/lib/node/idl/drift.d.ts.map +0 -1
- 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/src/util/deprecatedAlias.ts +0 -25
- /package/lib/browser/idl/{drift.js → velocity.js} +0 -0
- /package/lib/node/idl/{drift.js → velocity.js} +0 -0
- /package/tests/{DriftCore → VelocityCore}/perp_orders.test.ts +0 -0
- /package/tests/{DriftCore → VelocityCore}/remainingAccounts.test.ts +0 -0
- /package/tests/{DriftCore → VelocityCore}/settlement_liquidation.test.ts +0 -0
package/src/math/margin.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Margin calculation helpers — TypeScript mirror of `programs/
|
|
2
|
+
* Margin calculation helpers — TypeScript mirror of `programs/velocity/src/math/margin.rs`.
|
|
3
3
|
* Computes initial/maintenance margin requirements, free collateral, and account health.
|
|
4
4
|
* Used by {@link User} for leverage queries and by keeper bots for liquidation eligibility checks.
|
|
5
5
|
*/
|
|
@@ -220,17 +220,17 @@ export function calculatePerpLiabilityValue(
|
|
|
220
220
|
* @returns
|
|
221
221
|
*/
|
|
222
222
|
export function calculateMarginUSDCRequiredForTrade(
|
|
223
|
-
|
|
223
|
+
velocityClient: VelocityClient,
|
|
224
224
|
targetMarketIndex: number,
|
|
225
225
|
baseSize: BN,
|
|
226
226
|
userMaxMarginRatio?: number,
|
|
227
227
|
entryPrice?: BN
|
|
228
228
|
): BN {
|
|
229
|
-
const targetMarket =
|
|
229
|
+
const targetMarket = velocityClient.getPerpMarketAccount(targetMarketIndex);
|
|
230
230
|
|
|
231
231
|
const price =
|
|
232
232
|
entryPrice ??
|
|
233
|
-
|
|
233
|
+
velocityClient.getOracleDataForPerpMarket(targetMarket.marketIndex).price;
|
|
234
234
|
|
|
235
235
|
const perpLiabilityValue = calculatePerpLiabilityValue(baseSize, price);
|
|
236
236
|
|
|
@@ -254,7 +254,7 @@ export function calculateMarginUSDCRequiredForTrade(
|
|
|
254
254
|
* Returns collateral required in the precision of the target collateral market.
|
|
255
255
|
*/
|
|
256
256
|
export function calculateCollateralDepositRequiredForTrade(
|
|
257
|
-
|
|
257
|
+
velocityClient: VelocityClient,
|
|
258
258
|
targetMarketIndex: number,
|
|
259
259
|
baseSize: BN,
|
|
260
260
|
collateralIndex: number,
|
|
@@ -262,17 +262,17 @@ export function calculateCollateralDepositRequiredForTrade(
|
|
|
262
262
|
estEntryPrice?: BN
|
|
263
263
|
): BN {
|
|
264
264
|
const marginRequiredUsdc = calculateMarginUSDCRequiredForTrade(
|
|
265
|
-
|
|
265
|
+
velocityClient,
|
|
266
266
|
targetMarketIndex,
|
|
267
267
|
baseSize,
|
|
268
268
|
userMaxMarginRatio,
|
|
269
269
|
estEntryPrice
|
|
270
270
|
);
|
|
271
271
|
|
|
272
|
-
const collateralMarket =
|
|
272
|
+
const collateralMarket = velocityClient.getSpotMarketAccount(collateralIndex);
|
|
273
273
|
|
|
274
274
|
const collateralOracleData =
|
|
275
|
-
|
|
275
|
+
velocityClient.getOracleDataForSpotMarket(collateralIndex);
|
|
276
276
|
|
|
277
277
|
const scaledAssetWeight = calculateScaledInitialAssetWeight(
|
|
278
278
|
collateralMarket,
|
|
@@ -280,7 +280,7 @@ export function calculateCollateralDepositRequiredForTrade(
|
|
|
280
280
|
);
|
|
281
281
|
|
|
282
282
|
// Base amount required to deposit = (marginRequiredUsdc / priceOfAsset) / assetWeight .. (E.g. $100 required / $10000 price / 0.5 weight)
|
|
283
|
-
const baseAmountRequired =
|
|
283
|
+
const baseAmountRequired = velocityClient
|
|
284
284
|
.convertToSpotPrecision(collateralIndex, marginRequiredUsdc)
|
|
285
285
|
.mul(PRICE_PRECISION) // adjust for division by oracle price
|
|
286
286
|
.mul(SPOT_MARKET_WEIGHT_PRECISION) // adjust for division by scaled asset weight
|
|
@@ -294,14 +294,14 @@ export function calculateCollateralDepositRequiredForTrade(
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
export function calculateCollateralValueOfDeposit(
|
|
297
|
-
|
|
297
|
+
velocityClient: VelocityClient,
|
|
298
298
|
collateralIndex: number,
|
|
299
299
|
baseSize: BN
|
|
300
300
|
): BN {
|
|
301
|
-
const collateralMarket =
|
|
301
|
+
const collateralMarket = velocityClient.getSpotMarketAccount(collateralIndex);
|
|
302
302
|
|
|
303
303
|
const collateralOracleData =
|
|
304
|
-
|
|
304
|
+
velocityClient.getOracleDataForSpotMarket(collateralIndex);
|
|
305
305
|
|
|
306
306
|
const scaledAssetWeight = calculateScaledInitialAssetWeight(
|
|
307
307
|
collateralMarket,
|
|
@@ -341,20 +341,20 @@ export function calculateLiquidationPrice(
|
|
|
341
341
|
}
|
|
342
342
|
|
|
343
343
|
export function calculateUserMaxPerpOrderSize(
|
|
344
|
-
|
|
344
|
+
velocityClient: VelocityClient,
|
|
345
345
|
userAccountKey: PublicKey,
|
|
346
346
|
userAccount: UserAccount,
|
|
347
347
|
targetMarketIndex: number,
|
|
348
348
|
tradeSide: PositionDirection
|
|
349
349
|
): { tradeSize: BN; oppositeSideTradeSize: BN } {
|
|
350
350
|
const userAccountSubscriber = new OneShotUserAccountSubscriber(
|
|
351
|
-
|
|
351
|
+
velocityClient.program,
|
|
352
352
|
userAccountKey,
|
|
353
353
|
userAccount
|
|
354
354
|
);
|
|
355
355
|
|
|
356
356
|
const user = new User({
|
|
357
|
-
|
|
357
|
+
velocityClient,
|
|
358
358
|
userAccountPublicKey: userAccountKey,
|
|
359
359
|
accountSubscription: {
|
|
360
360
|
type: 'custom',
|
package/src/math/market.ts
CHANGED
|
@@ -45,7 +45,11 @@ export function calculateReservePrice(
|
|
|
45
45
|
market: PerpMarketAccount,
|
|
46
46
|
mmOraclePriceData: MMOraclePriceData
|
|
47
47
|
): BN {
|
|
48
|
-
const newAmm = calculateUpdatedAMM(
|
|
48
|
+
const newAmm = calculateUpdatedAMM(
|
|
49
|
+
market.amm,
|
|
50
|
+
market.totalExchangeFee,
|
|
51
|
+
mmOraclePriceData
|
|
52
|
+
);
|
|
49
53
|
return calculatePrice(
|
|
50
54
|
newAmm.baseAssetReserve,
|
|
51
55
|
newAmm.quoteAssetReserve,
|
|
@@ -67,6 +71,8 @@ export function calculateBidPrice(
|
|
|
67
71
|
const { baseAssetReserve, quoteAssetReserve, newPeg } =
|
|
68
72
|
calculateUpdatedAMMSpreadReserves(
|
|
69
73
|
market.amm,
|
|
74
|
+
market.marketStats,
|
|
75
|
+
market.totalExchangeFee,
|
|
70
76
|
PositionDirection.SHORT,
|
|
71
77
|
mmOraclePriceData,
|
|
72
78
|
latestSlot
|
|
@@ -89,6 +95,8 @@ export function calculateAskPrice(
|
|
|
89
95
|
const { baseAssetReserve, quoteAssetReserve, newPeg } =
|
|
90
96
|
calculateUpdatedAMMSpreadReserves(
|
|
91
97
|
market.amm,
|
|
98
|
+
market.marketStats,
|
|
99
|
+
market.totalExchangeFee,
|
|
92
100
|
PositionDirection.LONG,
|
|
93
101
|
mmOraclePriceData,
|
|
94
102
|
latestSlot
|
|
@@ -251,8 +259,8 @@ export function calculateNetUserPnl(
|
|
|
251
259
|
.div(BASE_PRECISION)
|
|
252
260
|
.div(PRICE_TO_QUOTE_PRECISION);
|
|
253
261
|
|
|
254
|
-
const netUserCostBasis = perpMarket.
|
|
255
|
-
perpMarket.
|
|
262
|
+
const netUserCostBasis = perpMarket.quoteAssetAmount.add(
|
|
263
|
+
perpMarket.netUnsettledFundingPnl
|
|
256
264
|
);
|
|
257
265
|
|
|
258
266
|
const netUserPnl = netUserPositionValue.add(netUserCostBasis);
|
|
@@ -297,7 +305,7 @@ export function calculateAvailablePerpLiquidity(
|
|
|
297
305
|
market.amm.baseAssetReserve,
|
|
298
306
|
market.amm.minBaseAssetReserve,
|
|
299
307
|
market.amm.maxBaseAssetReserve,
|
|
300
|
-
market.
|
|
308
|
+
market.orderStepSize
|
|
301
309
|
);
|
|
302
310
|
|
|
303
311
|
asks = asks.abs();
|
|
@@ -358,9 +366,9 @@ export function getTriggerPrice(
|
|
|
358
366
|
const lastFillPrice = market.lastFillPrice;
|
|
359
367
|
|
|
360
368
|
// Calculate 5-minute basis
|
|
361
|
-
const markPrice5minTwap = market.
|
|
369
|
+
const markPrice5minTwap = market.marketStats.lastMarkPriceTwap5Min;
|
|
362
370
|
const lastOraclePriceTwap5min =
|
|
363
|
-
market.
|
|
371
|
+
market.marketStats.historicalOracleData.lastOraclePriceTwap5Min;
|
|
364
372
|
const basis5min = markPrice5minTwap.sub(lastOraclePriceTwap5min);
|
|
365
373
|
|
|
366
374
|
const oraclePlusBasis5min = oraclePrice.add(basis5min);
|
|
@@ -388,23 +396,23 @@ function getLastFundingBasis(
|
|
|
388
396
|
oraclePrice: BN,
|
|
389
397
|
now: BN
|
|
390
398
|
): BN {
|
|
391
|
-
if (market.
|
|
392
|
-
const lastFundingRate = market.
|
|
399
|
+
if (market.lastFundingOracleTwap.gt(ZERO)) {
|
|
400
|
+
const lastFundingRate = market.lastFundingRate
|
|
393
401
|
.mul(PRICE_PRECISION)
|
|
394
|
-
.div(market.
|
|
402
|
+
.div(market.lastFundingOracleTwap)
|
|
395
403
|
.muln(24);
|
|
396
404
|
const lastFundingRatePreAdj = lastFundingRate.sub(
|
|
397
405
|
FUNDING_RATE_PRECISION.div(new BN(3333)) // FUNDING_RATE_OFFSET_PERCENTAGE
|
|
398
406
|
);
|
|
399
407
|
const timeLeftUntilFundingUpdate = BN.min(
|
|
400
|
-
BN.max(now.sub(market.
|
|
401
|
-
market.
|
|
408
|
+
BN.max(now.sub(market.lastFundingRateTs), ZERO),
|
|
409
|
+
market.marketStats.fundingPeriod
|
|
402
410
|
);
|
|
403
411
|
const lastFundingBasis = oraclePrice
|
|
404
412
|
.mul(lastFundingRatePreAdj)
|
|
405
413
|
.div(PERCENTAGE_PRECISION)
|
|
406
|
-
.mul(market.
|
|
407
|
-
.div(market.
|
|
414
|
+
.mul(market.marketStats.fundingPeriod.sub(timeLeftUntilFundingUpdate))
|
|
415
|
+
.div(market.marketStats.fundingPeriod)
|
|
408
416
|
.div(new BN(1000)); // FUNDING_RATE_BUFFER
|
|
409
417
|
return lastFundingBasis;
|
|
410
418
|
} else {
|
package/src/math/oracles.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
|
-
AMM,
|
|
3
2
|
HistoricalOracleData,
|
|
3
|
+
MarketStats,
|
|
4
4
|
OracleGuardRails,
|
|
5
5
|
OracleSource,
|
|
6
6
|
OracleValidity,
|
|
@@ -64,14 +64,14 @@ export function getOracleValidity(
|
|
|
64
64
|
const isNonPositive = oraclePriceData.price.lte(ZERO);
|
|
65
65
|
const isTooVolatile = BN.max(
|
|
66
66
|
oraclePriceData.price,
|
|
67
|
-
market.
|
|
67
|
+
market.marketStats.historicalOracleData.lastOraclePriceTwap
|
|
68
68
|
)
|
|
69
69
|
.div(
|
|
70
70
|
BN.max(
|
|
71
71
|
ONE,
|
|
72
72
|
BN.min(
|
|
73
73
|
oraclePriceData.price,
|
|
74
|
-
market.
|
|
74
|
+
market.marketStats.historicalOracleData.lastOraclePriceTwap
|
|
75
75
|
)
|
|
76
76
|
)
|
|
77
77
|
)
|
|
@@ -89,16 +89,16 @@ export function getOracleValidity(
|
|
|
89
89
|
const oracleDelay = slot.sub(oraclePriceData.slot).sub(oracleStalenessBuffer);
|
|
90
90
|
|
|
91
91
|
let isStaleForAmmImmediate = true;
|
|
92
|
-
if (market.
|
|
92
|
+
if (market.oracleSlotDelayOverride != 0) {
|
|
93
93
|
isStaleForAmmImmediate = oracleDelay.gt(
|
|
94
|
-
BN.max(new BN(market.
|
|
94
|
+
BN.max(new BN(market.oracleSlotDelayOverride), ZERO)
|
|
95
95
|
);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
98
|
let isStaleForAmmLowRisk = false;
|
|
99
|
-
if (market.
|
|
99
|
+
if (market.oracleLowRiskSlotDelayOverride != 0) {
|
|
100
100
|
isStaleForAmmLowRisk = oracleDelay.gt(
|
|
101
|
-
BN.max(new BN(market.
|
|
101
|
+
BN.max(new BN(market.oracleLowRiskSlotDelayOverride), ZERO)
|
|
102
102
|
);
|
|
103
103
|
} else {
|
|
104
104
|
isStaleForAmmLowRisk = oracleDelay.gt(
|
|
@@ -109,7 +109,7 @@ export function getOracleValidity(
|
|
|
109
109
|
let isStaleForMargin = oracleDelay.gt(
|
|
110
110
|
new BN(oracleGuardRails.validity.slotsBeforeStaleForMargin)
|
|
111
111
|
);
|
|
112
|
-
if (isVariant(market.
|
|
112
|
+
if (isVariant(market.oracleSource, 'pythLazerStableCoin')) {
|
|
113
113
|
isStaleForMargin = oracleDelay.gt(
|
|
114
114
|
new BN(oracleGuardRails.validity.slotsBeforeStaleForMargin).muln(3)
|
|
115
115
|
);
|
|
@@ -142,13 +142,13 @@ export function isOracleValid(
|
|
|
142
142
|
): boolean {
|
|
143
143
|
// checks if oracle is valid for an AMM only fill
|
|
144
144
|
|
|
145
|
-
const
|
|
145
|
+
const stats = market.marketStats;
|
|
146
146
|
const isOraclePriceNonPositive = oraclePriceData.price.lte(ZERO);
|
|
147
147
|
const isOraclePriceTooVolatile =
|
|
148
148
|
oraclePriceData.price
|
|
149
|
-
.div(BN.max(ONE,
|
|
149
|
+
.div(BN.max(ONE, stats.historicalOracleData.lastOraclePriceTwap))
|
|
150
150
|
.gt(oracleGuardRails.validity.tooVolatileRatio) ||
|
|
151
|
-
|
|
151
|
+
stats.historicalOracleData.lastOraclePriceTwap
|
|
152
152
|
.div(BN.max(ONE, oraclePriceData.price))
|
|
153
153
|
.gt(oracleGuardRails.validity.tooVolatileRatio);
|
|
154
154
|
|
|
@@ -177,14 +177,14 @@ export function isOracleValid(
|
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
export function isOracleTooDivergent(
|
|
180
|
-
|
|
180
|
+
marketStats: MarketStats,
|
|
181
181
|
oraclePriceData: OraclePriceData,
|
|
182
182
|
oracleGuardRails: OracleGuardRails
|
|
183
183
|
): boolean {
|
|
184
184
|
const oracleSpreadPct = oraclePriceData.price
|
|
185
|
-
.sub(
|
|
185
|
+
.sub(marketStats.historicalOracleData.lastOraclePriceTwap5Min)
|
|
186
186
|
.mul(PERCENTAGE_PRECISION)
|
|
187
|
-
.div(
|
|
187
|
+
.div(marketStats.historicalOracleData.lastOraclePriceTwap5Min);
|
|
188
188
|
const maxDivergence = BN.max(
|
|
189
189
|
oracleGuardRails.priceDivergence.oracleTwap5MinPercentDivergence,
|
|
190
190
|
PERCENTAGE_PRECISION.div(new BN(2))
|
|
@@ -230,25 +230,28 @@ export function calculateLiveOracleTwap(
|
|
|
230
230
|
}
|
|
231
231
|
|
|
232
232
|
export function calculateLiveOracleStd(
|
|
233
|
-
|
|
233
|
+
marketStats: MarketStats,
|
|
234
234
|
oraclePriceData: OraclePriceData,
|
|
235
235
|
now: BN
|
|
236
236
|
): BN {
|
|
237
237
|
const sinceLastUpdate = BN.max(
|
|
238
238
|
ONE,
|
|
239
|
-
now.sub(
|
|
239
|
+
now.sub(marketStats.historicalOracleData.lastOraclePriceTwapTs)
|
|
240
|
+
);
|
|
241
|
+
const sinceStart = BN.max(
|
|
242
|
+
ZERO,
|
|
243
|
+
marketStats.fundingPeriod.sub(sinceLastUpdate)
|
|
240
244
|
);
|
|
241
|
-
const sinceStart = BN.max(ZERO, amm.fundingPeriod.sub(sinceLastUpdate));
|
|
242
245
|
|
|
243
246
|
const liveOracleTwap = calculateLiveOracleTwap(
|
|
244
|
-
|
|
247
|
+
marketStats.historicalOracleData,
|
|
245
248
|
oraclePriceData,
|
|
246
249
|
now,
|
|
247
|
-
|
|
250
|
+
marketStats.fundingPeriod
|
|
248
251
|
);
|
|
249
252
|
|
|
250
253
|
const liveOracleTwap5MIN = calculateLiveOracleTwap(
|
|
251
|
-
|
|
254
|
+
marketStats.historicalOracleData,
|
|
252
255
|
oraclePriceData,
|
|
253
256
|
now,
|
|
254
257
|
FIVE_MINUTE
|
|
@@ -260,14 +263,14 @@ export function calculateLiveOracleStd(
|
|
|
260
263
|
);
|
|
261
264
|
|
|
262
265
|
const oracleStd = priceDeltaVsTwap.add(
|
|
263
|
-
|
|
266
|
+
marketStats.oracleStd.mul(sinceStart).div(sinceStart.add(sinceLastUpdate))
|
|
264
267
|
);
|
|
265
268
|
|
|
266
269
|
return oracleStd;
|
|
267
270
|
}
|
|
268
271
|
|
|
269
272
|
export function getNewOracleConfPct(
|
|
270
|
-
|
|
273
|
+
marketStats: MarketStats,
|
|
271
274
|
oraclePriceData: OraclePriceData,
|
|
272
275
|
reservePrice: BN,
|
|
273
276
|
now: BN
|
|
@@ -276,16 +279,16 @@ export function getNewOracleConfPct(
|
|
|
276
279
|
|
|
277
280
|
const sinceLastUpdate = BN.max(
|
|
278
281
|
ZERO,
|
|
279
|
-
now.sub(
|
|
282
|
+
now.sub(marketStats.historicalOracleData.lastOraclePriceTwapTs)
|
|
280
283
|
);
|
|
281
|
-
let lowerBoundConfPct =
|
|
284
|
+
let lowerBoundConfPct = marketStats.lastOracleConfPct;
|
|
282
285
|
if (sinceLastUpdate.gt(ZERO)) {
|
|
283
286
|
const lowerBoundConfDivisor = BN.max(
|
|
284
287
|
new BN(21).sub(sinceLastUpdate),
|
|
285
288
|
new BN(5)
|
|
286
289
|
);
|
|
287
|
-
lowerBoundConfPct =
|
|
288
|
-
|
|
290
|
+
lowerBoundConfPct = marketStats.lastOracleConfPct.sub(
|
|
291
|
+
marketStats.lastOracleConfPct.div(lowerBoundConfDivisor)
|
|
289
292
|
);
|
|
290
293
|
}
|
|
291
294
|
const confIntervalPct = confInterval
|
package/src/math/orders.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
isVariant,
|
|
5
5
|
PerpMarketAccount,
|
|
6
6
|
AMM,
|
|
7
|
+
MarketStats,
|
|
7
8
|
Order,
|
|
8
9
|
PositionDirection,
|
|
9
10
|
MarketTypeStr,
|
|
@@ -168,11 +169,8 @@ export function getLimitPrice<T extends MarketTypeStr>(
|
|
|
168
169
|
): BN | undefined {
|
|
169
170
|
if (hasAuctionPrice(order, slot)) {
|
|
170
171
|
return getAuctionPrice(order, slot, oraclePriceData.price);
|
|
171
|
-
} else if (order.oraclePriceOffset
|
|
172
|
-
return BN.max(
|
|
173
|
-
oraclePriceData.price.add(new BN(order.oraclePriceOffset)),
|
|
174
|
-
ONE
|
|
175
|
-
);
|
|
172
|
+
} else if (!order.oraclePriceOffset.eq(ZERO)) {
|
|
173
|
+
return BN.max(oraclePriceData.price.add(order.oraclePriceOffset), ONE);
|
|
176
174
|
} else if (order.price.eq(ZERO)) {
|
|
177
175
|
return fallbackPrice;
|
|
178
176
|
} else {
|
|
@@ -183,7 +181,7 @@ export function getLimitPrice<T extends MarketTypeStr>(
|
|
|
183
181
|
export function hasLimitPrice(order: Order, slot: number): boolean {
|
|
184
182
|
return (
|
|
185
183
|
order.price.gt(ZERO) ||
|
|
186
|
-
order.oraclePriceOffset
|
|
184
|
+
!order.oraclePriceOffset.eq(ZERO) ||
|
|
187
185
|
!isAuctionComplete(order, slot)
|
|
188
186
|
);
|
|
189
187
|
}
|
|
@@ -254,11 +252,18 @@ export function calculateBaseAssetAmountForAmmToFulfill(
|
|
|
254
252
|
const limitPrice = getLimitPrice(order, mmOraclePriceData, slot);
|
|
255
253
|
let baseAssetAmount;
|
|
256
254
|
|
|
257
|
-
const updatedAMM = calculateUpdatedAMM(
|
|
255
|
+
const updatedAMM = calculateUpdatedAMM(
|
|
256
|
+
market.amm,
|
|
257
|
+
market.totalExchangeFee,
|
|
258
|
+
mmOraclePriceData
|
|
259
|
+
);
|
|
258
260
|
if (limitPrice !== undefined) {
|
|
259
261
|
baseAssetAmount = calculateBaseAssetAmountToFillUpToLimitPrice(
|
|
260
262
|
order,
|
|
261
263
|
updatedAMM,
|
|
264
|
+
market.marketStats,
|
|
265
|
+
market.orderStepSize,
|
|
266
|
+
market.orderTickSize,
|
|
262
267
|
limitPrice,
|
|
263
268
|
mmOraclePriceData
|
|
264
269
|
);
|
|
@@ -268,6 +273,7 @@ export function calculateBaseAssetAmountForAmmToFulfill(
|
|
|
268
273
|
|
|
269
274
|
const maxBaseAssetAmount = calculateMaxBaseAssetAmountFillable(
|
|
270
275
|
updatedAMM,
|
|
276
|
+
market.orderStepSize,
|
|
271
277
|
order.direction
|
|
272
278
|
);
|
|
273
279
|
|
|
@@ -277,15 +283,19 @@ export function calculateBaseAssetAmountForAmmToFulfill(
|
|
|
277
283
|
export function calculateBaseAssetAmountToFillUpToLimitPrice(
|
|
278
284
|
order: Order,
|
|
279
285
|
amm: AMM,
|
|
286
|
+
marketStats: MarketStats,
|
|
287
|
+
orderStepSize: BN,
|
|
288
|
+
orderTickSize: BN,
|
|
280
289
|
limitPrice: BN,
|
|
281
290
|
mmOraclePriceData: MMOraclePriceData
|
|
282
291
|
): BN {
|
|
283
292
|
const adjustedLimitPrice = isVariant(order.direction, 'long')
|
|
284
|
-
? limitPrice.sub(
|
|
285
|
-
: limitPrice.add(
|
|
293
|
+
? limitPrice.sub(orderTickSize)
|
|
294
|
+
: limitPrice.add(orderTickSize);
|
|
286
295
|
|
|
287
296
|
const [maxAmountToTrade, direction] = calculateMaxBaseAssetAmountToTrade(
|
|
288
297
|
amm,
|
|
298
|
+
marketStats,
|
|
289
299
|
adjustedLimitPrice,
|
|
290
300
|
order.direction,
|
|
291
301
|
mmOraclePriceData
|
|
@@ -293,7 +303,7 @@ export function calculateBaseAssetAmountToFillUpToLimitPrice(
|
|
|
293
303
|
|
|
294
304
|
const baseAssetAmount = standardizeBaseAssetAmount(
|
|
295
305
|
maxAmountToTrade,
|
|
296
|
-
|
|
306
|
+
orderStepSize
|
|
297
307
|
);
|
|
298
308
|
|
|
299
309
|
// Check that directions are the same
|
|
@@ -464,7 +474,7 @@ export function maxSizeForTargetLiabilityWeightBN(
|
|
|
464
474
|
}
|
|
465
475
|
|
|
466
476
|
// cap at max OI
|
|
467
|
-
const maxOpenInterest = market.
|
|
477
|
+
const maxOpenInterest = market.maxOpenInterest;
|
|
468
478
|
if (lo.gt(maxOpenInterest)) {
|
|
469
479
|
return maxOpenInterest;
|
|
470
480
|
}
|
package/src/math/position.ts
CHANGED
|
@@ -53,6 +53,8 @@ export function calculateBaseAssetValue(
|
|
|
53
53
|
const { baseAssetReserve, quoteAssetReserve, sqrtK, newPeg } =
|
|
54
54
|
calculateUpdatedAMMSpreadReserves(
|
|
55
55
|
market.amm,
|
|
56
|
+
market.marketStats,
|
|
57
|
+
market.totalExchangeFee,
|
|
56
58
|
directionToClose,
|
|
57
59
|
mmOraclePriceData,
|
|
58
60
|
latestSlot
|
|
@@ -64,7 +66,11 @@ export function calculateBaseAssetValue(
|
|
|
64
66
|
pegMultiplier: newPeg,
|
|
65
67
|
};
|
|
66
68
|
} else {
|
|
67
|
-
prepegAmm = calculateUpdatedAMM(
|
|
69
|
+
prepegAmm = calculateUpdatedAMM(
|
|
70
|
+
market.amm,
|
|
71
|
+
market.totalExchangeFee,
|
|
72
|
+
mmOraclePriceData
|
|
73
|
+
);
|
|
68
74
|
}
|
|
69
75
|
} else {
|
|
70
76
|
prepegAmm = market.amm;
|
|
@@ -213,9 +219,9 @@ export function calculateUnsettledFundingPnl(
|
|
|
213
219
|
|
|
214
220
|
let ammCumulativeFundingRate: BN;
|
|
215
221
|
if (perpPosition.baseAssetAmount.gt(ZERO)) {
|
|
216
|
-
ammCumulativeFundingRate = market.
|
|
222
|
+
ammCumulativeFundingRate = market.cumulativeFundingRateLong;
|
|
217
223
|
} else {
|
|
218
|
-
ammCumulativeFundingRate = market.
|
|
224
|
+
ammCumulativeFundingRate = market.cumulativeFundingRateShort;
|
|
219
225
|
}
|
|
220
226
|
|
|
221
227
|
const perPositionFundingRate = ammCumulativeFundingRate
|
package/src/math/superStake.ts
CHANGED
|
@@ -43,17 +43,14 @@ export async function fetchBSolMetrics() {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
export async function fetchBSolVelocityEmissions() {
|
|
46
|
-
return await fetch('https://stake.solblaze.org/api/v1/
|
|
46
|
+
return await fetch('https://stake.solblaze.org/api/v1/velocity_emissions');
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
/** @deprecated Use `fetchBSolVelocityEmissions` instead. `fetchBSolDriftEmissions` will be removed in a future major. */
|
|
50
|
-
export const fetchBSolDriftEmissions = fetchBSolVelocityEmissions;
|
|
51
|
-
|
|
52
49
|
export async function findBestSuperStakeIxs({
|
|
53
50
|
marketIndex,
|
|
54
51
|
amount,
|
|
55
52
|
jupiterClient,
|
|
56
|
-
|
|
53
|
+
velocityClient,
|
|
57
54
|
userAccountPublicKey,
|
|
58
55
|
price,
|
|
59
56
|
forceMarinade,
|
|
@@ -63,7 +60,7 @@ export async function findBestSuperStakeIxs({
|
|
|
63
60
|
marketIndex: number;
|
|
64
61
|
amount: BN;
|
|
65
62
|
jupiterClient: JupiterClient;
|
|
66
|
-
|
|
63
|
+
velocityClient: VelocityClient;
|
|
67
64
|
price?: number;
|
|
68
65
|
userAccountPublicKey?: PublicKey;
|
|
69
66
|
forceMarinade?: boolean;
|
|
@@ -79,7 +76,7 @@ export async function findBestSuperStakeIxs({
|
|
|
79
76
|
return findBestMSolSuperStakeIxs({
|
|
80
77
|
amount,
|
|
81
78
|
jupiterClient,
|
|
82
|
-
|
|
79
|
+
velocityClient,
|
|
83
80
|
userAccountPublicKey,
|
|
84
81
|
price,
|
|
85
82
|
forceMarinade,
|
|
@@ -90,7 +87,7 @@ export async function findBestSuperStakeIxs({
|
|
|
90
87
|
return findBestJitoSolSuperStakeIxs({
|
|
91
88
|
amount,
|
|
92
89
|
jupiterClient,
|
|
93
|
-
|
|
90
|
+
velocityClient,
|
|
94
91
|
userAccountPublicKey,
|
|
95
92
|
onlyDirectRoutes,
|
|
96
93
|
jupiterQuote,
|
|
@@ -98,10 +95,10 @@ export async function findBestSuperStakeIxs({
|
|
|
98
95
|
} else if (marketIndex === 8) {
|
|
99
96
|
return findBestLstSuperStakeIxs({
|
|
100
97
|
amount,
|
|
101
|
-
lstMint:
|
|
98
|
+
lstMint: velocityClient.getSpotMarketAccount(8).mint,
|
|
102
99
|
lstMarketIndex: 8,
|
|
103
100
|
jupiterClient,
|
|
104
|
-
|
|
101
|
+
velocityClient,
|
|
105
102
|
userAccountPublicKey,
|
|
106
103
|
onlyDirectRoutes,
|
|
107
104
|
jupiterQuote,
|
|
@@ -114,7 +111,7 @@ export async function findBestSuperStakeIxs({
|
|
|
114
111
|
export async function findBestMSolSuperStakeIxs({
|
|
115
112
|
amount,
|
|
116
113
|
jupiterClient,
|
|
117
|
-
|
|
114
|
+
velocityClient,
|
|
118
115
|
userAccountPublicKey,
|
|
119
116
|
price,
|
|
120
117
|
forceMarinade,
|
|
@@ -123,7 +120,7 @@ export async function findBestMSolSuperStakeIxs({
|
|
|
123
120
|
}: {
|
|
124
121
|
amount: BN;
|
|
125
122
|
jupiterClient: JupiterClient;
|
|
126
|
-
|
|
123
|
+
velocityClient: VelocityClient;
|
|
127
124
|
price?: number;
|
|
128
125
|
userAccountPublicKey?: PublicKey;
|
|
129
126
|
forceMarinade?: boolean;
|
|
@@ -136,12 +133,12 @@ export async function findBestMSolSuperStakeIxs({
|
|
|
136
133
|
price: number;
|
|
137
134
|
}> {
|
|
138
135
|
if (!price) {
|
|
139
|
-
const marinadeProgram = getMarinadeFinanceProgram(
|
|
136
|
+
const marinadeProgram = getMarinadeFinanceProgram(velocityClient.provider);
|
|
140
137
|
price = await getMarinadeMSolPrice(marinadeProgram);
|
|
141
138
|
}
|
|
142
139
|
|
|
143
|
-
const solSpotMarketAccount =
|
|
144
|
-
const mSolSpotMarketAccount =
|
|
140
|
+
const solSpotMarketAccount = velocityClient.getSpotMarketAccount(1);
|
|
141
|
+
const mSolSpotMarketAccount = velocityClient.getSpotMarketAccount(2);
|
|
145
142
|
|
|
146
143
|
let jupiterPrice: number;
|
|
147
144
|
let quote = jupiterQuote;
|
|
@@ -164,7 +161,7 @@ export async function findBestMSolSuperStakeIxs({
|
|
|
164
161
|
}
|
|
165
162
|
|
|
166
163
|
if (!jupiterPrice || price <= jupiterPrice || forceMarinade) {
|
|
167
|
-
const ixs = await
|
|
164
|
+
const ixs = await velocityClient.getStakeForMSOLIx({
|
|
168
165
|
amount,
|
|
169
166
|
userAccountPublicKey,
|
|
170
167
|
});
|
|
@@ -175,7 +172,7 @@ export async function findBestMSolSuperStakeIxs({
|
|
|
175
172
|
price: price,
|
|
176
173
|
};
|
|
177
174
|
} else {
|
|
178
|
-
const { ixs, lookupTables } = await
|
|
175
|
+
const { ixs, lookupTables } = await velocityClient.getJupiterSwapIxV6({
|
|
179
176
|
inMarketIndex: 1,
|
|
180
177
|
outMarketIndex: 2,
|
|
181
178
|
jupiterClient,
|
|
@@ -196,14 +193,14 @@ export async function findBestMSolSuperStakeIxs({
|
|
|
196
193
|
export async function findBestJitoSolSuperStakeIxs({
|
|
197
194
|
amount,
|
|
198
195
|
jupiterClient,
|
|
199
|
-
|
|
196
|
+
velocityClient,
|
|
200
197
|
userAccountPublicKey,
|
|
201
198
|
onlyDirectRoutes,
|
|
202
199
|
jupiterQuote,
|
|
203
200
|
}: {
|
|
204
201
|
amount: BN;
|
|
205
202
|
jupiterClient: JupiterClient;
|
|
206
|
-
|
|
203
|
+
velocityClient: VelocityClient;
|
|
207
204
|
userAccountPublicKey?: PublicKey;
|
|
208
205
|
onlyDirectRoutes?: boolean;
|
|
209
206
|
jupiterQuote?: QuoteResponse;
|
|
@@ -216,10 +213,10 @@ export async function findBestJitoSolSuperStakeIxs({
|
|
|
216
213
|
return await findBestLstSuperStakeIxs({
|
|
217
214
|
amount,
|
|
218
215
|
jupiterClient,
|
|
219
|
-
|
|
216
|
+
velocityClient,
|
|
220
217
|
userAccountPublicKey,
|
|
221
218
|
onlyDirectRoutes,
|
|
222
|
-
lstMint:
|
|
219
|
+
lstMint: velocityClient.getSpotMarketAccount(6).mint,
|
|
223
220
|
lstMarketIndex: 6,
|
|
224
221
|
jupiterQuote,
|
|
225
222
|
});
|
|
@@ -233,7 +230,7 @@ export async function findBestJitoSolSuperStakeIxs({
|
|
|
233
230
|
export async function findBestLstSuperStakeIxs({
|
|
234
231
|
amount,
|
|
235
232
|
jupiterClient,
|
|
236
|
-
|
|
233
|
+
velocityClient,
|
|
237
234
|
userAccountPublicKey,
|
|
238
235
|
onlyDirectRoutes,
|
|
239
236
|
lstMarketIndex,
|
|
@@ -243,7 +240,7 @@ export async function findBestLstSuperStakeIxs({
|
|
|
243
240
|
lstMint: PublicKey;
|
|
244
241
|
lstMarketIndex: number;
|
|
245
242
|
jupiterClient: JupiterClient;
|
|
246
|
-
|
|
243
|
+
velocityClient: VelocityClient;
|
|
247
244
|
userAccountPublicKey?: PublicKey;
|
|
248
245
|
onlyDirectRoutes?: boolean;
|
|
249
246
|
jupiterQuote?: QuoteResponse;
|
|
@@ -252,7 +249,7 @@ export async function findBestLstSuperStakeIxs({
|
|
|
252
249
|
lookupTables: AddressLookupTableAccount[];
|
|
253
250
|
method: 'jupiter' | 'marinade';
|
|
254
251
|
}> {
|
|
255
|
-
const { ixs, lookupTables } = await
|
|
252
|
+
const { ixs, lookupTables } = await velocityClient.getJupiterSwapIxV6({
|
|
256
253
|
inMarketIndex: 1,
|
|
257
254
|
outMarketIndex: lstMarketIndex,
|
|
258
255
|
jupiterClient,
|