@velocity-exchange/sdk 0.4.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/adminClient.d.ts +35 -0
  3. package/lib/browser/adminClient.js +65 -0
  4. package/lib/browser/config.js +6 -7
  5. package/lib/browser/constants/numericConstants.d.ts +1 -1
  6. package/lib/browser/constants/numericConstants.js +1 -1
  7. package/lib/browser/decode/user.js +5 -1
  8. package/lib/browser/idl/velocity.d.ts +146 -3
  9. package/lib/browser/idl/velocity.json +147 -4
  10. package/lib/browser/orderSubscriber/OrderSubscriber.js +3 -0
  11. package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
  12. package/lib/browser/types.d.ts +4 -0
  13. package/lib/browser/user.d.ts +15 -0
  14. package/lib/browser/user.js +37 -1
  15. package/lib/browser/velocityClient.d.ts +46 -10
  16. package/lib/browser/velocityClient.js +107 -35
  17. package/lib/node/adminClient.d.ts +35 -0
  18. package/lib/node/adminClient.d.ts.map +1 -1
  19. package/lib/node/adminClient.js +65 -0
  20. package/lib/node/config.d.ts.map +1 -1
  21. package/lib/node/config.js +6 -7
  22. package/lib/node/constants/numericConstants.d.ts +1 -1
  23. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  24. package/lib/node/constants/numericConstants.js +1 -1
  25. package/lib/node/decode/user.d.ts.map +1 -1
  26. package/lib/node/decode/user.js +5 -1
  27. package/lib/node/idl/velocity.d.ts +146 -3
  28. package/lib/node/idl/velocity.d.ts.map +1 -1
  29. package/lib/node/idl/velocity.json +147 -4
  30. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  31. package/lib/node/orderSubscriber/OrderSubscriber.js +3 -0
  32. package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
  33. package/lib/node/pyth/pythLazerSubscriber.js +37 -27
  34. package/lib/node/types.d.ts +4 -0
  35. package/lib/node/types.d.ts.map +1 -1
  36. package/lib/node/user.d.ts +15 -0
  37. package/lib/node/user.d.ts.map +1 -1
  38. package/lib/node/user.js +37 -1
  39. package/lib/node/velocityClient.d.ts +46 -10
  40. package/lib/node/velocityClient.d.ts.map +1 -1
  41. package/lib/node/velocityClient.js +107 -35
  42. package/package.json +7 -3
  43. package/.prettierignore +0 -1
  44. package/CHANGELOG.md +0 -132
  45. package/build-browser.js +0 -58
  46. package/bunfig.toml +0 -3
  47. package/esbuild-shims.js +0 -12
  48. package/scripts/deposit-isolated-positions.ts +0 -110
  49. package/scripts/find-flagged-users.ts +0 -213
  50. package/scripts/grpc-client-test-comparison.ts +0 -372
  51. package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
  52. package/scripts/postbuild.js +0 -95
  53. package/scripts/single-grpc-client-test.ts +0 -284
  54. package/scripts/withdraw-isolated-positions.ts +0 -174
  55. package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
  56. package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
  57. package/src/accounts/basicUserAccountSubscriber.ts +0 -79
  58. package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
  59. package/src/accounts/bulkAccountLoader.ts +0 -358
  60. package/src/accounts/bulkUserStatsSubscription.ts +0 -40
  61. package/src/accounts/bulkUserSubscription.ts +0 -39
  62. package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
  63. package/src/accounts/fetch.ts +0 -200
  64. package/src/accounts/grpcAccountSubscriber.ts +0 -225
  65. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
  66. package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
  67. package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
  68. package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
  69. package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
  70. package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
  71. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
  72. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
  73. package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
  74. package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
  75. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
  76. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
  77. package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
  78. package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
  79. package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
  80. package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
  81. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
  82. package/src/accounts/testBulkAccountLoader.ts +0 -59
  83. package/src/accounts/types.ts +0 -428
  84. package/src/accounts/utils.ts +0 -90
  85. package/src/accounts/webSocketAccountSubscriber.ts +0 -304
  86. package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
  87. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
  88. package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
  89. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
  90. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
  91. package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
  92. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
  93. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
  94. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
  95. package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
  96. package/src/addresses/marketAddresses.ts +0 -28
  97. package/src/addresses/pda.ts +0 -620
  98. package/src/adminClient.ts +0 -8136
  99. package/src/assert/assert.ts +0 -5
  100. package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
  101. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
  102. package/src/auctionSubscriber/index.ts +0 -9
  103. package/src/auctionSubscriber/types.ts +0 -30
  104. package/src/bankrun/bankrunConnection.ts +0 -630
  105. package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
  106. package/src/blockhashSubscriber/index.ts +0 -6
  107. package/src/blockhashSubscriber/types.ts +0 -13
  108. package/src/clock/clockSubscriber.ts +0 -146
  109. package/src/config.ts +0 -312
  110. package/src/constants/index.ts +0 -9
  111. package/src/constants/numericConstants.ts +0 -194
  112. package/src/constants/perpMarkets.ts +0 -127
  113. package/src/constants/spotMarkets.ts +0 -104
  114. package/src/constants/txConstants.ts +0 -2
  115. package/src/constituentMap/constituentMap.ts +0 -305
  116. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
  117. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
  118. package/src/core/VelocityCore.ts +0 -606
  119. package/src/core/index.ts +0 -12
  120. package/src/core/instructions/deposit.ts +0 -64
  121. package/src/core/instructions/fill.ts +0 -51
  122. package/src/core/instructions/funding.ts +0 -33
  123. package/src/core/instructions/liquidation.ts +0 -55
  124. package/src/core/instructions/orders.ts +0 -84
  125. package/src/core/instructions/perpOrders.ts +0 -312
  126. package/src/core/instructions/settlement.ts +0 -40
  127. package/src/core/instructions/trigger.ts +0 -41
  128. package/src/core/instructions/withdraw.ts +0 -65
  129. package/src/core/remainingAccounts.ts +0 -320
  130. package/src/core/signedMsg.ts +0 -109
  131. package/src/decode/customCoder.ts +0 -148
  132. package/src/decode/user.ts +0 -401
  133. package/src/dlob/DLOB.ts +0 -2793
  134. package/src/dlob/DLOBNode.ts +0 -305
  135. package/src/dlob/DLOBSubscriber.ts +0 -269
  136. package/src/dlob/NodeList.ts +0 -244
  137. package/src/dlob/orderBookLevels.ts +0 -695
  138. package/src/dlob/types.ts +0 -37
  139. package/src/events/eventList.ts +0 -114
  140. package/src/events/eventSubscriber.ts +0 -521
  141. package/src/events/eventsServerLogProvider.ts +0 -189
  142. package/src/events/fetchLogs.ts +0 -219
  143. package/src/events/parse.ts +0 -271
  144. package/src/events/pollingLogProvider.ts +0 -113
  145. package/src/events/sort.ts +0 -51
  146. package/src/events/txEventCache.ts +0 -92
  147. package/src/events/types.ts +0 -337
  148. package/src/events/webSocketLogProvider.ts +0 -152
  149. package/src/factory/bigNum.ts +0 -709
  150. package/src/factory/oracleClient.ts +0 -73
  151. package/src/idl/pyth.json +0 -142
  152. package/src/idl/pyth.ts +0 -97
  153. package/src/idl/pyth_solana_receiver.json +0 -628
  154. package/src/idl/token_faucet.json +0 -229
  155. package/src/idl/token_faucet.ts +0 -197
  156. package/src/idl/velocity.json +0 -23974
  157. package/src/idl/velocity.ts +0 -23980
  158. package/src/index.ts +0 -150
  159. package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
  160. package/src/isomorphic/README.md +0 -19
  161. package/src/isomorphic/anchor.browser.ts +0 -44
  162. package/src/isomorphic/anchor.node.ts +0 -1
  163. package/src/isomorphic/anchor.ts +0 -1
  164. package/src/isomorphic/anchor29.browser.ts +0 -24
  165. package/src/isomorphic/anchor29.node.ts +0 -1
  166. package/src/isomorphic/anchor29.ts +0 -1
  167. package/src/isomorphic/grpc.browser.ts +0 -4
  168. package/src/isomorphic/grpc.node.ts +0 -130
  169. package/src/isomorphic/grpc.ts +0 -1
  170. package/src/jupiter/jupiterClient.ts +0 -502
  171. package/src/keypair.ts +0 -32
  172. package/src/margin/README.md +0 -138
  173. package/src/marginCalculation.ts +0 -407
  174. package/src/marinade/idl/idl.json +0 -1962
  175. package/src/marinade/index.ts +0 -73
  176. package/src/marinade/types.ts +0 -3925
  177. package/src/math/amm.ts +0 -1758
  178. package/src/math/auction.ts +0 -480
  179. package/src/math/bankruptcy.ts +0 -138
  180. package/src/math/builder.ts +0 -130
  181. package/src/math/conversion.ts +0 -45
  182. package/src/math/exchangeStatus.ts +0 -261
  183. package/src/math/funding.ts +0 -498
  184. package/src/math/insurance.ts +0 -171
  185. package/src/math/liquidation.ts +0 -433
  186. package/src/math/margin.ts +0 -327
  187. package/src/math/market.ts +0 -487
  188. package/src/math/oracles.ts +0 -477
  189. package/src/math/orders.ts +0 -500
  190. package/src/math/position.ts +0 -381
  191. package/src/math/repeg.ts +0 -223
  192. package/src/math/spotBalance.ts +0 -996
  193. package/src/math/spotMarket.ts +0 -115
  194. package/src/math/spotPosition.ts +0 -263
  195. package/src/math/state.ts +0 -71
  196. package/src/math/superStake.ts +0 -602
  197. package/src/math/tiers.ts +0 -73
  198. package/src/math/trade.ts +0 -879
  199. package/src/math/utils.ts +0 -183
  200. package/src/memcmp.ts +0 -279
  201. package/src/oracles/oracleClientCache.ts +0 -41
  202. package/src/oracles/oracleId.ts +0 -99
  203. package/src/oracles/prelaunchOracleClient.ts +0 -63
  204. package/src/oracles/pythClient.ts +0 -125
  205. package/src/oracles/pythLazerClient.ts +0 -141
  206. package/src/oracles/quoteAssetOracleClient.ts +0 -43
  207. package/src/oracles/strictOraclePrice.ts +0 -40
  208. package/src/oracles/types.ts +0 -82
  209. package/src/oracles/utils.ts +0 -45
  210. package/src/orderParams.ts +0 -117
  211. package/src/orderSubscriber/OrderSubscriber.ts +0 -378
  212. package/src/orderSubscriber/PollingSubscription.ts +0 -50
  213. package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
  214. package/src/orderSubscriber/grpcSubscription.ts +0 -155
  215. package/src/orderSubscriber/index.ts +0 -7
  216. package/src/orderSubscriber/types.ts +0 -64
  217. package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
  218. package/src/priorityFee/averageStrategy.ts +0 -13
  219. package/src/priorityFee/ewmaStrategy.ts +0 -51
  220. package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
  221. package/src/priorityFee/index.ts +0 -16
  222. package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
  223. package/src/priorityFee/maxStrategy.ts +0 -8
  224. package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
  225. package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
  226. package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
  227. package/src/priorityFee/types.ts +0 -82
  228. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
  229. package/src/pyth/constants.ts +0 -9
  230. package/src/pyth/index.ts +0 -15
  231. package/src/pyth/pythLazerSubscriber.ts +0 -365
  232. package/src/pyth/types.ts +0 -4451
  233. package/src/pyth/utils.ts +0 -13
  234. package/src/slot/SlotSubscriber.ts +0 -126
  235. package/src/slot/SlothashSubscriber.ts +0 -163
  236. package/src/swap/UnifiedSwapClient.ts +0 -315
  237. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
  238. package/src/swift/index.ts +0 -10
  239. package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
  240. package/src/swift/swiftOrderSubscriber.ts +0 -351
  241. package/src/testClient.ts +0 -42
  242. package/src/titan/titanClient.ts +0 -438
  243. package/src/token/index.ts +0 -13
  244. package/src/tokenFaucet.ts +0 -296
  245. package/src/tx/baseTxSender.ts +0 -651
  246. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
  247. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
  248. package/src/tx/blockhashFetcher/types.ts +0 -9
  249. package/src/tx/fastSingleTxSender.ts +0 -200
  250. package/src/tx/forwardOnlyTxSender.ts +0 -193
  251. package/src/tx/priorityFeeCalculator.ts +0 -117
  252. package/src/tx/reportTransactionError.ts +0 -176
  253. package/src/tx/retryTxSender.ts +0 -177
  254. package/src/tx/txHandler.ts +0 -1009
  255. package/src/tx/txParamProcessor.ts +0 -225
  256. package/src/tx/types.ts +0 -117
  257. package/src/tx/utils.ts +0 -133
  258. package/src/tx/whileValidTxSender.ts +0 -377
  259. package/src/types.ts +0 -2575
  260. package/src/user.ts +0 -5316
  261. package/src/userConfig.ts +0 -38
  262. package/src/userMap/PollingSubscription.ts +0 -61
  263. package/src/userMap/WebsocketSubscription.ts +0 -93
  264. package/src/userMap/grpcSubscription.ts +0 -93
  265. package/src/userMap/referrerMap.ts +0 -360
  266. package/src/userMap/revenueShareEscrowMap.ts +0 -342
  267. package/src/userMap/userMap.ts +0 -784
  268. package/src/userMap/userMapConfig.ts +0 -82
  269. package/src/userMap/userStatsMap.ts +0 -393
  270. package/src/userName.ts +0 -37
  271. package/src/userStats.ts +0 -159
  272. package/src/userStatsConfig.ts +0 -35
  273. package/src/util/TransactionConfirmationManager.ts +0 -333
  274. package/src/util/chainClock.ts +0 -65
  275. package/src/util/computeUnits.ts +0 -101
  276. package/src/util/digest.ts +0 -33
  277. package/src/util/ed25519Utils.ts +0 -95
  278. package/src/util/promiseTimeout.ts +0 -23
  279. package/src/velocityClient.ts +0 -14802
  280. package/src/velocityClientConfig.ts +0 -119
  281. package/src/wallet.ts +0 -91
  282. package/tests/VelocityCore/builder_escrow.test.ts +0 -121
  283. package/tests/VelocityCore/decode.test.ts +0 -16
  284. package/tests/VelocityCore/fill_trigger.test.ts +0 -73
  285. package/tests/VelocityCore/instructions.test.ts +0 -46
  286. package/tests/VelocityCore/pdas.test.ts +0 -30
  287. package/tests/VelocityCore/perp_orders.test.ts +0 -205
  288. package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
  289. package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
  290. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
  291. package/tests/amm/test.ts +0 -2402
  292. package/tests/auctions/test.ts +0 -81
  293. package/tests/bn/test.ts +0 -355
  294. package/tests/builder/builderFee.test.ts +0 -42
  295. package/tests/ci/verifyConstants.ts +0 -393
  296. package/tests/decode/test.ts +0 -262
  297. package/tests/decode/userAccountBufferStrings.ts +0 -102
  298. package/tests/dlob/helpers.ts +0 -748
  299. package/tests/dlob/test.ts +0 -6969
  300. package/tests/dlob/tickSizeStandardization.ts +0 -545
  301. package/tests/events/parseLogsForCuUsage.ts +0 -139
  302. package/tests/exchangeStatus/test.ts +0 -45
  303. package/tests/insurance/test.ts +0 -40
  304. package/tests/liquidation/test.ts +0 -125
  305. package/tests/oracles/mmOracleGate.test.ts +0 -379
  306. package/tests/oracles/pythPegSnap.test.ts +0 -76
  307. package/tests/sdkParity/enumParity.test.ts +0 -84
  308. package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
  309. package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
  310. package/tests/spot/test.ts +0 -281
  311. package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
  312. package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
  313. package/tests/tx/priorityFeeCalculator.ts +0 -77
  314. package/tests/tx/priorityFeeStrategy.ts +0 -95
  315. package/tests/user/bankruptcy.ts +0 -165
  316. package/tests/user/feeAndWithdrawLimits.ts +0 -284
  317. package/tests/user/getMarginCalculation.ts +0 -586
  318. package/tests/user/helpers.ts +0 -184
  319. package/tests/user/liquidations.ts +0 -129
  320. package/tests/user/marginCalculations.test.ts +0 -321
  321. package/tests/user/test.ts +0 -833
  322. package/tsconfig.browser.json +0 -18
  323. package/tsconfig.json +0 -36
package/README.md CHANGED
@@ -40,7 +40,7 @@ The below is a light overview of using Solana and Velocity's typescript sdk. If
40
40
  # Generate a keypair
41
41
  solana-keygen new
42
42
 
43
- # Get the pubkey for the new wallet (You will need to send USDC to this address to Deposit into Velocity (only on mainnet - devnet has a faucet for USDC))
43
+ # Get the pubkey for the new wallet (You will need to send the quote asset to this address to Deposit into Velocity (only on mainnet - devnet has a faucet for the quote asset))
44
44
  solana address
45
45
 
46
46
  # Put the private key into your .env to be used by your bot
@@ -210,12 +210,12 @@ const main = async () => {
210
210
  provider.wallet.publicKey.toString()
211
211
  );
212
212
 
213
- //// Create a Velocity V1 account by Depositing some USDC ($10,000 in this case)
213
+ //// Create a Velocity V1 account by Depositing some quote asset ($10,000 in this case)
214
214
  const depositAmount = new BN(10000).mul(QUOTE_PRECISION);
215
215
  await velocityClient.initializeUserAccountAndDepositCollateral(
216
216
  depositAmount,
217
217
  await getTokenAddress(
218
- usdcTokenAddress.toString(),
218
+ quoteTokenAddress.toString(),
219
219
  provider.wallet.publicKey.toString()
220
220
  )
221
221
  );
@@ -2462,6 +2462,41 @@ export declare class AdminClient extends VelocityClient {
2462
2462
  * @returns The unsigned `updateSpecialUserStatus` instruction.
2463
2463
  */
2464
2464
  getUpdateSpecialUserStatusIx(userAccountPublicKey: PublicKey, status: number): Promise<TransactionInstruction>;
2465
+ /**
2466
+ * Sets a `User` account's `equityFloor`: the minimum cross-margin total
2467
+ * collateral (QUOTE_PRECISION) the account must keep. Below the floor the
2468
+ * program rejects risk-increasing order placement and fills, withdrawals,
2469
+ * and deposit/position transfers out of the account; reduce-only activity
2470
+ * stays allowed. Requires warm admin (`check_warm`); the account's
2471
+ * authority and delegate cannot change it. Pass `0` to disable.
2472
+ * @param userAccountPublicKey - `User` PDA to update.
2473
+ * @param equityFloor - New floor, QUOTE_PRECISION; `0` disables.
2474
+ * @param txParams - Optional transaction-building overrides.
2475
+ * @returns Transaction signature.
2476
+ */
2477
+ updateUserEquityFloor(userAccountPublicKey: PublicKey, equityFloor: BN, txParams?: TxParams): Promise<TransactionSignature>;
2478
+ /**
2479
+ * Builds the `updateUserEquityFloor` instruction without sending it. See
2480
+ * `updateUserEquityFloor`.
2481
+ * @returns The unsigned `updateUserEquityFloor` instruction.
2482
+ */
2483
+ getUpdateUserEquityFloorIx(userAccountPublicKey: PublicKey, equityFloor: BN): Promise<TransactionInstruction>;
2484
+ /**
2485
+ * Clears the authority-wide equity floor breaker set by the permissionless
2486
+ * `tripEquityFloorBreaker` keeper instruction, unfreezing all of the
2487
+ * authority's subaccounts. Requires warm admin (`check_warm`); intended to
2488
+ * be called after a human has reviewed why the breaker fired.
2489
+ * @param userStatsPublicKey - `UserStats` PDA of the authority to unfreeze.
2490
+ * @param txParams - Optional transaction-building overrides.
2491
+ * @returns Transaction signature.
2492
+ */
2493
+ resetEquityFloorBreaker(userStatsPublicKey: PublicKey, txParams?: TxParams): Promise<TransactionSignature>;
2494
+ /**
2495
+ * Builds the `resetEquityFloorBreaker` instruction without sending it. See
2496
+ * `resetEquityFloorBreaker`.
2497
+ * @returns The unsigned `resetEquityFloorBreaker` instruction.
2498
+ */
2499
+ getResetEquityFloorBreakerIx(userStatsPublicKey: PublicKey): Promise<TransactionInstruction>;
2465
2500
  /**
2466
2501
  * Rotates `state.warmAdmin`, the operational (multisig+timelock) tier that can
2467
2502
  * rotate every hot-role key (`updateHotAdmin`). Cold-only: the `UpdateWarmAdmin`
@@ -4853,6 +4853,71 @@ class AdminClient extends velocityClient_1.VelocityClient {
4853
4853
  },
4854
4854
  });
4855
4855
  }
4856
+ /**
4857
+ * Sets a `User` account's `equityFloor`: the minimum cross-margin total
4858
+ * collateral (QUOTE_PRECISION) the account must keep. Below the floor the
4859
+ * program rejects risk-increasing order placement and fills, withdrawals,
4860
+ * and deposit/position transfers out of the account; reduce-only activity
4861
+ * stays allowed. Requires warm admin (`check_warm`); the account's
4862
+ * authority and delegate cannot change it. Pass `0` to disable.
4863
+ * @param userAccountPublicKey - `User` PDA to update.
4864
+ * @param equityFloor - New floor, QUOTE_PRECISION; `0` disables.
4865
+ * @param txParams - Optional transaction-building overrides.
4866
+ * @returns Transaction signature.
4867
+ */
4868
+ async updateUserEquityFloor(userAccountPublicKey, equityFloor, txParams) {
4869
+ const ix = await this.getUpdateUserEquityFloorIx(userAccountPublicKey, equityFloor);
4870
+ const tx = await this.buildTransaction(ix, txParams);
4871
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
4872
+ return txSig;
4873
+ }
4874
+ /**
4875
+ * Builds the `updateUserEquityFloor` instruction without sending it. See
4876
+ * `updateUserEquityFloor`.
4877
+ * @returns The unsigned `updateUserEquityFloor` instruction.
4878
+ */
4879
+ async getUpdateUserEquityFloorIx(userAccountPublicKey, equityFloor) {
4880
+ return this.program.instruction.updateUserEquityFloor(equityFloor, {
4881
+ accounts: {
4882
+ admin: this.useHotWalletAdmin
4883
+ ? this.wallet.publicKey
4884
+ : this.getStateAccount().coldAdmin,
4885
+ state: await this.getStatePublicKey(),
4886
+ user: userAccountPublicKey,
4887
+ },
4888
+ });
4889
+ }
4890
+ /**
4891
+ * Clears the authority-wide equity floor breaker set by the permissionless
4892
+ * `tripEquityFloorBreaker` keeper instruction, unfreezing all of the
4893
+ * authority's subaccounts. Requires warm admin (`check_warm`); intended to
4894
+ * be called after a human has reviewed why the breaker fired.
4895
+ * @param userStatsPublicKey - `UserStats` PDA of the authority to unfreeze.
4896
+ * @param txParams - Optional transaction-building overrides.
4897
+ * @returns Transaction signature.
4898
+ */
4899
+ async resetEquityFloorBreaker(userStatsPublicKey, txParams) {
4900
+ const ix = await this.getResetEquityFloorBreakerIx(userStatsPublicKey);
4901
+ const tx = await this.buildTransaction(ix, txParams);
4902
+ const { txSig } = await this.sendTransaction(tx, [], this.opts);
4903
+ return txSig;
4904
+ }
4905
+ /**
4906
+ * Builds the `resetEquityFloorBreaker` instruction without sending it. See
4907
+ * `resetEquityFloorBreaker`.
4908
+ * @returns The unsigned `resetEquityFloorBreaker` instruction.
4909
+ */
4910
+ async getResetEquityFloorBreakerIx(userStatsPublicKey) {
4911
+ return this.program.instruction.resetEquityFloorBreaker({
4912
+ accounts: {
4913
+ admin: this.useHotWalletAdmin
4914
+ ? this.wallet.publicKey
4915
+ : this.getStateAccount().coldAdmin,
4916
+ state: await this.getStatePublicKey(),
4917
+ userStats: userStatsPublicKey,
4918
+ },
4919
+ });
4920
+ }
4856
4921
  // ----- Tiered admin authority -----
4857
4922
  //
4858
4923
  // `state.coldAdmin` is the root. `state.warmAdmin` is rotated by cold; each
@@ -31,7 +31,7 @@ exports.configs = {
31
31
  ENV: 'devnet',
32
32
  PYTH_ORACLE_MAPPING_ADDRESS: 'BmA9Z6FjioHJPpjT39QazZyhDRUdZy2ezwx4GiDdE2u2',
33
33
  VELOCITY_PROGRAM_ID: exports.VELOCITY_DEVNET_PROGRAM_ID,
34
- JIT_PROXY_PROGRAM_ID: 'J1TnP8zvVxbtF5KFp5xRmWuvG9McnhzmBd9XGfCyuxFP',
34
+ JIT_PROXY_PROGRAM_ID: 'J1TPRoXCtGuMcWiWFE6RB9eZU8U35PBMETCwNQLCNPhQ',
35
35
  QUOTE_MINT_ADDRESS: 'GqmEqYsy8EyvofDpmtFxK8zhYrgWgNokAtYoduQdL7v6',
36
36
  V2_ALPHA_TICKET_MINT_ADDRESS: 'DeEiGWfCMP9psnLGkxGrBBMEAW5Jv8bBGMN8DCtFRCyB',
37
37
  PERP_MARKETS: perpMarkets_1.DevnetPerpMarkets,
@@ -46,7 +46,7 @@ exports.configs = {
46
46
  ENV: 'mainnet-beta',
47
47
  PYTH_ORACLE_MAPPING_ADDRESS: 'AHtgzX45WTKfkPG53L6WYhGEXwQkN1BVknET3sVsLL8J',
48
48
  VELOCITY_PROGRAM_ID: exports.VELOCITY_PROGRAM_ID,
49
- JIT_PROXY_PROGRAM_ID: 'J1TnP8zvVxbtF5KFp5xRmWuvG9McnhzmBd9XGfCyuxFP',
49
+ JIT_PROXY_PROGRAM_ID: 'J1TPRoXCtGuMcWiWFE6RB9eZU8U35PBMETCwNQLCNPhQ',
50
50
  // Relaunch quote market (spot 0) is USDT — see
51
51
  // deploy-scripts/params/relaunch-spot-markets.json.
52
52
  QUOTE_MINT_ADDRESS: 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB',
@@ -54,11 +54,10 @@ exports.configs = {
54
54
  PERP_MARKETS: perpMarkets_1.MainnetPerpMarkets,
55
55
  SPOT_MARKETS: spotMarkets_1.MainnetSpotMarkets,
56
56
  /** @deprecated use MARKET_LOOKUP_TABLES */
57
- MARKET_LOOKUP_TABLE: 'Fpys8GRa5RBWfyeN7AaDUwFGD1zkDCA4z3t4CJLV8dfL',
58
- MARKET_LOOKUP_TABLES: [
59
- 'Fpys8GRa5RBWfyeN7AaDUwFGD1zkDCA4z3t4CJLV8dfL',
60
- 'EiWSskK5HXnBTptiS5DH6gpAJRVNQ3cAhTKBGaiaysAb',
61
- ],
57
+ MARKET_LOOKUP_TABLE: '4E971nER9Jn4JjT8mKEX1nvkfg8Qycp7zNEcCq2nT8ZY',
58
+ // Relaunch LUT: state, signer, spot markets 0-1 (oracle/mint/vault/IF
59
+ // vault), perp markets 0-3 with oracles, token/ATA/system programs.
60
+ MARKET_LOOKUP_TABLES: ['4E971nER9Jn4JjT8mKEX1nvkfg8Qycp7zNEcCq2nT8ZY'],
62
61
  VELOCITY_ORACLE_RECEIVER_ID: exports.VELOCITY_ORACLE_RECEIVER_ID,
63
62
  SB_ON_DEMAND_PID: exports.SB_ON_DEMAND_MAINNET_PID,
64
63
  },
@@ -106,7 +106,7 @@ export declare const FIVE_MINUTE: BN;
106
106
  export declare const ONE_HOUR: BN;
107
107
  /** 31,536,000 seconds (365 days). */
108
108
  export declare const ONE_YEAR: BN;
109
- /** Market index of the protocol's quote spot market (USDC on mainnet). */
109
+ /** Market index of the protocol's quote spot market (the protocol's quote asset on mainnet). */
110
110
  export declare const QUOTE_SPOT_MARKET_INDEX = 0;
111
111
  /** 1e9 (`LAMPORTS_PER_SOL`); token-mint precision for wrapped SOL spot markets. */
112
112
  export declare const LAMPORTS_PRECISION: BN;
@@ -111,7 +111,7 @@ exports.FIVE_MINUTE = new anchor_1.BN(60 * 5);
111
111
  exports.ONE_HOUR = new anchor_1.BN(60 * 60);
112
112
  /** 31,536,000 seconds (365 days). */
113
113
  exports.ONE_YEAR = new anchor_1.BN(31536000);
114
- /** Market index of the protocol's quote spot market (USDC on mainnet). */
114
+ /** Market index of the protocol's quote spot market (the protocol's quote asset on mainnet). */
115
115
  exports.QUOTE_SPOT_MARKET_INDEX = 0;
116
116
  /** 1e9 (`LAMPORTS_PER_SOL`); token-mint precision for wrapped SOL spot markets. */
117
117
  exports.LAMPORTS_PRECISION = new anchor_1.BN(web3_js_1.LAMPORTS_PER_SOL);
@@ -333,7 +333,10 @@ function decodeUser(buffer) {
333
333
  offset += 1;
334
334
  const specialUserStatus = buffer.readUInt8(offset);
335
335
  offset += 1;
336
- offset += 14; // padding
336
+ offset += 3; // padding
337
+ const equityFloor = readUnsignedBigInt64LE(buffer, offset);
338
+ offset += 8;
339
+ offset += 8; // padding2
337
340
  return {
338
341
  authority,
339
342
  delegate,
@@ -362,6 +365,7 @@ function decodeUser(buffer) {
362
365
  hasOpenAuction,
363
366
  poolId,
364
367
  specialUserStatus,
368
+ equityFloor,
365
369
  };
366
370
  }
367
371
  exports.decodeUser = decodeUser;
@@ -8,7 +8,7 @@ export type Velocity = {
8
8
  "address": "vELoC1audYbSYVRXn1vPaV8Axoa9oU6BYmNGZZBDZ1P";
9
9
  "metadata": {
10
10
  "name": "velocity";
11
- "version": "2.162.0";
11
+ "version": "2.163.0";
12
12
  "spec": "0.1.0";
13
13
  "description": "Created with Anchor";
14
14
  };
@@ -6382,6 +6382,33 @@ export type Velocity = {
6382
6382
  }
6383
6383
  ];
6384
6384
  },
6385
+ {
6386
+ "name": "resetEquityFloorBreaker";
6387
+ "discriminator": [
6388
+ 230,
6389
+ 181,
6390
+ 202,
6391
+ 36,
6392
+ 127,
6393
+ 56,
6394
+ 56,
6395
+ 27
6396
+ ];
6397
+ "accounts": [
6398
+ {
6399
+ "name": "admin";
6400
+ "signer": true;
6401
+ },
6402
+ {
6403
+ "name": "state";
6404
+ },
6405
+ {
6406
+ "name": "userStats";
6407
+ "writable": true;
6408
+ }
6409
+ ];
6410
+ "args": [];
6411
+ },
6385
6412
  {
6386
6413
  "name": "resetPerpMarketAmmOracleTwap";
6387
6414
  "discriminator": [
@@ -7740,6 +7767,10 @@ export type Velocity = {
7740
7767
  {
7741
7768
  "name": "amount";
7742
7769
  "type": "u64";
7770
+ },
7771
+ {
7772
+ "name": "equityFloorDelta";
7773
+ "type": "u64";
7743
7774
  }
7744
7775
  ];
7745
7776
  },
@@ -8222,6 +8253,39 @@ export type Velocity = {
8222
8253
  }
8223
8254
  ];
8224
8255
  },
8256
+ {
8257
+ "name": "tripEquityFloorBreaker";
8258
+ "discriminator": [
8259
+ 133,
8260
+ 184,
8261
+ 25,
8262
+ 80,
8263
+ 193,
8264
+ 52,
8265
+ 162,
8266
+ 249
8267
+ ];
8268
+ "accounts": [
8269
+ {
8270
+ "name": "state";
8271
+ },
8272
+ {
8273
+ "name": "keeper";
8274
+ "docs": [
8275
+ "Any signer may trip the breaker; the proof is the margin calculation."
8276
+ ];
8277
+ "signer": true;
8278
+ },
8279
+ {
8280
+ "name": "user";
8281
+ },
8282
+ {
8283
+ "name": "userStats";
8284
+ "writable": true;
8285
+ }
8286
+ ];
8287
+ "args": [];
8288
+ },
8225
8289
  {
8226
8290
  "name": "updateAdmin";
8227
8291
  "discriminator": [
@@ -9438,6 +9502,9 @@ export type Velocity = {
9438
9502
  {
9439
9503
  "name": "authority";
9440
9504
  "signer": true;
9505
+ "relations": [
9506
+ "keeperStats"
9507
+ ];
9441
9508
  }
9442
9509
  ];
9443
9510
  "args": [];
@@ -12227,6 +12294,38 @@ export type Velocity = {
12227
12294
  }
12228
12295
  ];
12229
12296
  },
12297
+ {
12298
+ "name": "updateUserEquityFloor";
12299
+ "discriminator": [
12300
+ 49,
12301
+ 87,
12302
+ 139,
12303
+ 119,
12304
+ 136,
12305
+ 239,
12306
+ 186,
12307
+ 104
12308
+ ];
12309
+ "accounts": [
12310
+ {
12311
+ "name": "admin";
12312
+ "signer": true;
12313
+ },
12314
+ {
12315
+ "name": "state";
12316
+ },
12317
+ {
12318
+ "name": "user";
12319
+ "writable": true;
12320
+ }
12321
+ ];
12322
+ "args": [
12323
+ {
12324
+ "name": "equityFloor";
12325
+ "type": "u64";
12326
+ }
12327
+ ];
12328
+ },
12230
12329
  {
12231
12330
  "name": "updateUserIdle";
12232
12331
  "discriminator": [
@@ -16017,6 +16116,21 @@ export type Velocity = {
16017
16116
  "code": 6356;
16018
16117
  "name": "invalidNativePerpMarketAccount";
16019
16118
  "msg": "Native dispatch: supplied market account is not a Velocity perp market";
16119
+ },
16120
+ {
16121
+ "code": 6357;
16122
+ "name": "isolatedPositionDisabled";
16123
+ "msg": "Isolated positions are not enabled in this build";
16124
+ },
16125
+ {
16126
+ "code": 6358;
16127
+ "name": "equityBelowFloor";
16128
+ "msg": "Account equity is below the user-set equity floor";
16129
+ },
16130
+ {
16131
+ "code": 6359;
16132
+ "name": "invalidEquityFloorTransfer";
16133
+ "msg": "Invalid equity floor transfer between subaccounts";
16020
16134
  }
16021
16135
  ];
16022
16136
  "types": [
@@ -23721,7 +23835,26 @@ export type Velocity = {
23721
23835
  "type": {
23722
23836
  "array": [
23723
23837
  "u8",
23724
- 14
23838
+ 3
23839
+ ];
23840
+ };
23841
+ },
23842
+ {
23843
+ "name": "equityFloor";
23844
+ "docs": [
23845
+ "Minimum account equity (cross-margin total collateral) required for",
23846
+ "risk-increasing orders, fills, withdrawals and deposit transfers.",
23847
+ "Settable only by the warm/cold admin; 0 disables the check.",
23848
+ "precision: QUOTE_PRECISION"
23849
+ ];
23850
+ "type": "u64";
23851
+ },
23852
+ {
23853
+ "name": "padding2";
23854
+ "type": {
23855
+ "array": [
23856
+ "u8",
23857
+ 8
23725
23858
  ];
23726
23859
  };
23727
23860
  }
@@ -23910,12 +24043,22 @@ export type Velocity = {
23910
24043
  ];
23911
24044
  "type": "u8";
23912
24045
  },
24046
+ {
24047
+ "name": "equityBreakerTripped";
24048
+ "docs": [
24049
+ "Set by the permissionless `trip_equity_floor_breaker` instruction when",
24050
+ "any of the authority's subaccounts falls below its equity floor.",
24051
+ "While set, every subaccount of the authority rejects risk-increasing",
24052
+ "fills, withdrawals and transfers out. Cleared only by the warm admin."
24053
+ ];
24054
+ "type": "u8";
24055
+ },
23913
24056
  {
23914
24057
  "name": "padding";
23915
24058
  "type": {
23916
24059
  "array": [
23917
24060
  "u8",
23918
- 63
24061
+ 62
23919
24062
  ];
23920
24063
  };
23921
24064
  }
@@ -2,7 +2,7 @@
2
2
  "address": "vELoC1audYbSYVRXn1vPaV8Axoa9oU6BYmNGZZBDZ1P",
3
3
  "metadata": {
4
4
  "name": "velocity",
5
- "version": "2.162.0",
5
+ "version": "2.163.0",
6
6
  "spec": "0.1.0",
7
7
  "description": "Created with Anchor"
8
8
  },
@@ -6376,6 +6376,33 @@
6376
6376
  }
6377
6377
  ]
6378
6378
  },
6379
+ {
6380
+ "name": "reset_equity_floor_breaker",
6381
+ "discriminator": [
6382
+ 230,
6383
+ 181,
6384
+ 202,
6385
+ 36,
6386
+ 127,
6387
+ 56,
6388
+ 56,
6389
+ 27
6390
+ ],
6391
+ "accounts": [
6392
+ {
6393
+ "name": "admin",
6394
+ "signer": true
6395
+ },
6396
+ {
6397
+ "name": "state"
6398
+ },
6399
+ {
6400
+ "name": "user_stats",
6401
+ "writable": true
6402
+ }
6403
+ ],
6404
+ "args": []
6405
+ },
6379
6406
  {
6380
6407
  "name": "reset_perp_market_amm_oracle_twap",
6381
6408
  "discriminator": [
@@ -7734,6 +7761,10 @@
7734
7761
  {
7735
7762
  "name": "amount",
7736
7763
  "type": "u64"
7764
+ },
7765
+ {
7766
+ "name": "equity_floor_delta",
7767
+ "type": "u64"
7737
7768
  }
7738
7769
  ]
7739
7770
  },
@@ -8216,6 +8247,39 @@
8216
8247
  }
8217
8248
  ]
8218
8249
  },
8250
+ {
8251
+ "name": "trip_equity_floor_breaker",
8252
+ "discriminator": [
8253
+ 133,
8254
+ 184,
8255
+ 25,
8256
+ 80,
8257
+ 193,
8258
+ 52,
8259
+ 162,
8260
+ 249
8261
+ ],
8262
+ "accounts": [
8263
+ {
8264
+ "name": "state"
8265
+ },
8266
+ {
8267
+ "name": "keeper",
8268
+ "docs": [
8269
+ "Any signer may trip the breaker; the proof is the margin calculation."
8270
+ ],
8271
+ "signer": true
8272
+ },
8273
+ {
8274
+ "name": "user"
8275
+ },
8276
+ {
8277
+ "name": "user_stats",
8278
+ "writable": true
8279
+ }
8280
+ ],
8281
+ "args": []
8282
+ },
8219
8283
  {
8220
8284
  "name": "update_admin",
8221
8285
  "discriminator": [
@@ -9431,7 +9495,10 @@
9431
9495
  },
9432
9496
  {
9433
9497
  "name": "authority",
9434
- "signer": true
9498
+ "signer": true,
9499
+ "relations": [
9500
+ "keeper_stats"
9501
+ ]
9435
9502
  }
9436
9503
  ],
9437
9504
  "args": []
@@ -12221,6 +12288,38 @@
12221
12288
  }
12222
12289
  ]
12223
12290
  },
12291
+ {
12292
+ "name": "update_user_equity_floor",
12293
+ "discriminator": [
12294
+ 49,
12295
+ 87,
12296
+ 139,
12297
+ 119,
12298
+ 136,
12299
+ 239,
12300
+ 186,
12301
+ 104
12302
+ ],
12303
+ "accounts": [
12304
+ {
12305
+ "name": "admin",
12306
+ "signer": true
12307
+ },
12308
+ {
12309
+ "name": "state"
12310
+ },
12311
+ {
12312
+ "name": "user",
12313
+ "writable": true
12314
+ }
12315
+ ],
12316
+ "args": [
12317
+ {
12318
+ "name": "equity_floor",
12319
+ "type": "u64"
12320
+ }
12321
+ ]
12322
+ },
12224
12323
  {
12225
12324
  "name": "update_user_idle",
12226
12325
  "discriminator": [
@@ -16011,6 +16110,21 @@
16011
16110
  "code": 6356,
16012
16111
  "name": "InvalidNativePerpMarketAccount",
16013
16112
  "msg": "Native dispatch: supplied market account is not a Velocity perp market"
16113
+ },
16114
+ {
16115
+ "code": 6357,
16116
+ "name": "IsolatedPositionDisabled",
16117
+ "msg": "Isolated positions are not enabled in this build"
16118
+ },
16119
+ {
16120
+ "code": 6358,
16121
+ "name": "EquityBelowFloor",
16122
+ "msg": "Account equity is below the user-set equity floor"
16123
+ },
16124
+ {
16125
+ "code": 6359,
16126
+ "name": "InvalidEquityFloorTransfer",
16127
+ "msg": "Invalid equity floor transfer between subaccounts"
16014
16128
  }
16015
16129
  ],
16016
16130
  "types": [
@@ -23715,7 +23829,26 @@
23715
23829
  "type": {
23716
23830
  "array": [
23717
23831
  "u8",
23718
- 14
23832
+ 3
23833
+ ]
23834
+ }
23835
+ },
23836
+ {
23837
+ "name": "equity_floor",
23838
+ "docs": [
23839
+ "Minimum account equity (cross-margin total collateral) required for",
23840
+ "risk-increasing orders, fills, withdrawals and deposit transfers.",
23841
+ "Settable only by the warm/cold admin; 0 disables the check.",
23842
+ "precision: QUOTE_PRECISION"
23843
+ ],
23844
+ "type": "u64"
23845
+ },
23846
+ {
23847
+ "name": "padding2",
23848
+ "type": {
23849
+ "array": [
23850
+ "u8",
23851
+ 8
23719
23852
  ]
23720
23853
  }
23721
23854
  }
@@ -23904,12 +24037,22 @@
23904
24037
  ],
23905
24038
  "type": "u8"
23906
24039
  },
24040
+ {
24041
+ "name": "equity_breaker_tripped",
24042
+ "docs": [
24043
+ "Set by the permissionless `trip_equity_floor_breaker` instruction when",
24044
+ "any of the authority's subaccounts falls below its equity floor.",
24045
+ "While set, every subaccount of the authority rejects risk-increasing",
24046
+ "fills, withdrawals and transfers out. Cleared only by the warm admin."
24047
+ ],
24048
+ "type": "u8"
24049
+ },
23907
24050
  {
23908
24051
  "name": "padding",
23909
24052
  "type": {
23910
24053
  "array": [
23911
24054
  "u8",
23912
- 63
24055
+ 62
23913
24056
  ]
23914
24057
  }
23915
24058
  }
@@ -124,6 +124,9 @@ class OrderSubscriber {
124
124
  await this.velocityClient.connection._rpcRequest('getProgramAccounts', rpcRequestArgs);
125
125
  const rpcResponseAndContext = rpcJSONResponse.result;
126
126
  const slot = rpcResponseAndContext.context.slot;
127
+ if (!this.mostRecentSlot || slot > this.mostRecentSlot) {
128
+ this.mostRecentSlot = slot;
129
+ }
127
130
  for (const programAccount of rpcResponseAndContext.value) {
128
131
  const key = programAccount.pubkey.toString();
129
132
  this.tryUpdateUserAccount(key, 'raw', programAccount.account.data, slot);