@velocity-exchange/sdk 0.4.0 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (325) hide show
  1. package/README.md +3 -3
  2. package/lib/browser/adminClient.d.ts +52 -0
  3. package/lib/browser/adminClient.js +97 -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 +191 -15
  9. package/lib/browser/idl/velocity.json +192 -16
  10. package/lib/browser/orderSubscriber/OrderSubscriber.d.ts +1 -0
  11. package/lib/browser/orderSubscriber/OrderSubscriber.js +10 -4
  12. package/lib/browser/pyth/pythLazerSubscriber.js +37 -27
  13. package/lib/browser/types.d.ts +6 -0
  14. package/lib/browser/user.d.ts +20 -3
  15. package/lib/browser/user.js +52 -4
  16. package/lib/browser/velocityClient.d.ts +46 -10
  17. package/lib/browser/velocityClient.js +107 -35
  18. package/lib/node/adminClient.d.ts +52 -0
  19. package/lib/node/adminClient.d.ts.map +1 -1
  20. package/lib/node/adminClient.js +97 -0
  21. package/lib/node/config.d.ts.map +1 -1
  22. package/lib/node/config.js +6 -7
  23. package/lib/node/constants/numericConstants.d.ts +1 -1
  24. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  25. package/lib/node/constants/numericConstants.js +1 -1
  26. package/lib/node/decode/user.d.ts.map +1 -1
  27. package/lib/node/decode/user.js +5 -1
  28. package/lib/node/idl/velocity.d.ts +191 -15
  29. package/lib/node/idl/velocity.d.ts.map +1 -1
  30. package/lib/node/idl/velocity.json +192 -16
  31. package/lib/node/orderSubscriber/OrderSubscriber.d.ts +1 -0
  32. package/lib/node/orderSubscriber/OrderSubscriber.d.ts.map +1 -1
  33. package/lib/node/orderSubscriber/OrderSubscriber.js +10 -4
  34. package/lib/node/pyth/pythLazerSubscriber.d.ts.map +1 -1
  35. package/lib/node/pyth/pythLazerSubscriber.js +37 -27
  36. package/lib/node/types.d.ts +6 -0
  37. package/lib/node/types.d.ts.map +1 -1
  38. package/lib/node/user.d.ts +20 -3
  39. package/lib/node/user.d.ts.map +1 -1
  40. package/lib/node/user.js +52 -4
  41. package/lib/node/velocityClient.d.ts +46 -10
  42. package/lib/node/velocityClient.d.ts.map +1 -1
  43. package/lib/node/velocityClient.js +107 -35
  44. package/package.json +7 -3
  45. package/.prettierignore +0 -1
  46. package/CHANGELOG.md +0 -132
  47. package/build-browser.js +0 -58
  48. package/bunfig.toml +0 -3
  49. package/esbuild-shims.js +0 -12
  50. package/scripts/deposit-isolated-positions.ts +0 -110
  51. package/scripts/find-flagged-users.ts +0 -213
  52. package/scripts/grpc-client-test-comparison.ts +0 -372
  53. package/scripts/grpc-multiuser-client-test-comparison.ts +0 -158
  54. package/scripts/postbuild.js +0 -95
  55. package/scripts/single-grpc-client-test.ts +0 -284
  56. package/scripts/withdraw-isolated-positions.ts +0 -174
  57. package/src/accounts/README_WebSocketAccountSubscriberV2.md +0 -95
  58. package/src/accounts/README_WebSocketProgramAccountSubscriberV2.md +0 -135
  59. package/src/accounts/basicUserAccountSubscriber.ts +0 -79
  60. package/src/accounts/basicUserStatsAccountSubscriber.ts +0 -87
  61. package/src/accounts/bulkAccountLoader.ts +0 -358
  62. package/src/accounts/bulkUserStatsSubscription.ts +0 -40
  63. package/src/accounts/bulkUserSubscription.ts +0 -39
  64. package/src/accounts/customizedCadenceBulkAccountLoader.ts +0 -250
  65. package/src/accounts/fetch.ts +0 -200
  66. package/src/accounts/grpcAccountSubscriber.ts +0 -225
  67. package/src/accounts/grpcInsuranceFundStakeAccountSubscriber.ts +0 -73
  68. package/src/accounts/grpcMultiAccountSubscriber.ts +0 -566
  69. package/src/accounts/grpcMultiUserAccountSubscriber.ts +0 -328
  70. package/src/accounts/grpcProgramAccountSubscriber.ts +0 -264
  71. package/src/accounts/grpcUserAccountSubscriber.ts +0 -63
  72. package/src/accounts/grpcUserStatsAccountSubscriber.ts +0 -65
  73. package/src/accounts/grpcVelocityClientAccountSubscriber.ts +0 -257
  74. package/src/accounts/grpcVelocityClientAccountSubscriberV2.ts +0 -941
  75. package/src/accounts/laserProgramAccountSubscriber.ts +0 -266
  76. package/src/accounts/oneShotUserAccountSubscriber.ts +0 -88
  77. package/src/accounts/oneShotUserStatsAccountSubscriber.ts +0 -94
  78. package/src/accounts/pollingInsuranceFundStakeAccountSubscriber.ts +0 -223
  79. package/src/accounts/pollingOracleAccountSubscriber.ts +0 -151
  80. package/src/accounts/pollingTokenAccountSubscriber.ts +0 -147
  81. package/src/accounts/pollingUserAccountSubscriber.ts +0 -198
  82. package/src/accounts/pollingUserStatsAccountSubscriber.ts +0 -180
  83. package/src/accounts/pollingVelocityClientAccountSubscriber.ts +0 -774
  84. package/src/accounts/testBulkAccountLoader.ts +0 -59
  85. package/src/accounts/types.ts +0 -428
  86. package/src/accounts/utils.ts +0 -90
  87. package/src/accounts/webSocketAccountSubscriber.ts +0 -304
  88. package/src/accounts/webSocketAccountSubscriberV2.ts +0 -536
  89. package/src/accounts/webSocketInsuranceFundStakeAccountSubscriber.ts +0 -171
  90. package/src/accounts/webSocketProgramAccountSubscriber.ts +0 -244
  91. package/src/accounts/webSocketProgramAccountSubscriberV2.ts +0 -1048
  92. package/src/accounts/webSocketProgramAccountsSubscriberV2.ts +0 -1042
  93. package/src/accounts/webSocketUserAccountSubscriber.ts +0 -139
  94. package/src/accounts/webSocketUserStatsAccountSubsriber.ts +0 -131
  95. package/src/accounts/webSocketVelocityClientAccountSubscriber.ts +0 -865
  96. package/src/accounts/webSocketVelocityClientAccountSubscriberV2.ts +0 -897
  97. package/src/accounts/websocketProgramUserAccountSubscriber.ts +0 -127
  98. package/src/addresses/marketAddresses.ts +0 -28
  99. package/src/addresses/pda.ts +0 -620
  100. package/src/adminClient.ts +0 -8136
  101. package/src/assert/assert.ts +0 -5
  102. package/src/auctionSubscriber/auctionSubscriber.ts +0 -86
  103. package/src/auctionSubscriber/auctionSubscriberGrpc.ts +0 -99
  104. package/src/auctionSubscriber/index.ts +0 -9
  105. package/src/auctionSubscriber/types.ts +0 -30
  106. package/src/bankrun/bankrunConnection.ts +0 -630
  107. package/src/blockhashSubscriber/BlockhashSubscriber.ts +0 -160
  108. package/src/blockhashSubscriber/index.ts +0 -6
  109. package/src/blockhashSubscriber/types.ts +0 -13
  110. package/src/clock/clockSubscriber.ts +0 -146
  111. package/src/config.ts +0 -312
  112. package/src/constants/index.ts +0 -9
  113. package/src/constants/numericConstants.ts +0 -194
  114. package/src/constants/perpMarkets.ts +0 -127
  115. package/src/constants/spotMarkets.ts +0 -104
  116. package/src/constants/txConstants.ts +0 -2
  117. package/src/constituentMap/constituentMap.ts +0 -305
  118. package/src/constituentMap/pollingConstituentAccountSubscriber.ts +0 -99
  119. package/src/constituentMap/webSocketConstituentAccountSubscriber.ts +0 -121
  120. package/src/core/VelocityCore.ts +0 -606
  121. package/src/core/index.ts +0 -12
  122. package/src/core/instructions/deposit.ts +0 -64
  123. package/src/core/instructions/fill.ts +0 -51
  124. package/src/core/instructions/funding.ts +0 -33
  125. package/src/core/instructions/liquidation.ts +0 -55
  126. package/src/core/instructions/orders.ts +0 -84
  127. package/src/core/instructions/perpOrders.ts +0 -312
  128. package/src/core/instructions/settlement.ts +0 -40
  129. package/src/core/instructions/trigger.ts +0 -41
  130. package/src/core/instructions/withdraw.ts +0 -65
  131. package/src/core/remainingAccounts.ts +0 -320
  132. package/src/core/signedMsg.ts +0 -109
  133. package/src/decode/customCoder.ts +0 -148
  134. package/src/decode/user.ts +0 -401
  135. package/src/dlob/DLOB.ts +0 -2793
  136. package/src/dlob/DLOBNode.ts +0 -305
  137. package/src/dlob/DLOBSubscriber.ts +0 -269
  138. package/src/dlob/NodeList.ts +0 -244
  139. package/src/dlob/orderBookLevels.ts +0 -695
  140. package/src/dlob/types.ts +0 -37
  141. package/src/events/eventList.ts +0 -114
  142. package/src/events/eventSubscriber.ts +0 -521
  143. package/src/events/eventsServerLogProvider.ts +0 -189
  144. package/src/events/fetchLogs.ts +0 -219
  145. package/src/events/parse.ts +0 -271
  146. package/src/events/pollingLogProvider.ts +0 -113
  147. package/src/events/sort.ts +0 -51
  148. package/src/events/txEventCache.ts +0 -92
  149. package/src/events/types.ts +0 -337
  150. package/src/events/webSocketLogProvider.ts +0 -152
  151. package/src/factory/bigNum.ts +0 -709
  152. package/src/factory/oracleClient.ts +0 -73
  153. package/src/idl/pyth.json +0 -142
  154. package/src/idl/pyth.ts +0 -97
  155. package/src/idl/pyth_solana_receiver.json +0 -628
  156. package/src/idl/token_faucet.json +0 -229
  157. package/src/idl/token_faucet.ts +0 -197
  158. package/src/idl/velocity.json +0 -23974
  159. package/src/idl/velocity.ts +0 -23980
  160. package/src/index.ts +0 -150
  161. package/src/indicative-quotes/indicativeQuotesSender.ts +0 -233
  162. package/src/isomorphic/README.md +0 -19
  163. package/src/isomorphic/anchor.browser.ts +0 -44
  164. package/src/isomorphic/anchor.node.ts +0 -1
  165. package/src/isomorphic/anchor.ts +0 -1
  166. package/src/isomorphic/anchor29.browser.ts +0 -24
  167. package/src/isomorphic/anchor29.node.ts +0 -1
  168. package/src/isomorphic/anchor29.ts +0 -1
  169. package/src/isomorphic/grpc.browser.ts +0 -4
  170. package/src/isomorphic/grpc.node.ts +0 -130
  171. package/src/isomorphic/grpc.ts +0 -1
  172. package/src/jupiter/jupiterClient.ts +0 -502
  173. package/src/keypair.ts +0 -32
  174. package/src/margin/README.md +0 -138
  175. package/src/marginCalculation.ts +0 -407
  176. package/src/marinade/idl/idl.json +0 -1962
  177. package/src/marinade/index.ts +0 -73
  178. package/src/marinade/types.ts +0 -3925
  179. package/src/math/amm.ts +0 -1758
  180. package/src/math/auction.ts +0 -480
  181. package/src/math/bankruptcy.ts +0 -138
  182. package/src/math/builder.ts +0 -130
  183. package/src/math/conversion.ts +0 -45
  184. package/src/math/exchangeStatus.ts +0 -261
  185. package/src/math/funding.ts +0 -498
  186. package/src/math/insurance.ts +0 -171
  187. package/src/math/liquidation.ts +0 -433
  188. package/src/math/margin.ts +0 -327
  189. package/src/math/market.ts +0 -487
  190. package/src/math/oracles.ts +0 -477
  191. package/src/math/orders.ts +0 -500
  192. package/src/math/position.ts +0 -381
  193. package/src/math/repeg.ts +0 -223
  194. package/src/math/spotBalance.ts +0 -996
  195. package/src/math/spotMarket.ts +0 -115
  196. package/src/math/spotPosition.ts +0 -263
  197. package/src/math/state.ts +0 -71
  198. package/src/math/superStake.ts +0 -602
  199. package/src/math/tiers.ts +0 -73
  200. package/src/math/trade.ts +0 -879
  201. package/src/math/utils.ts +0 -183
  202. package/src/memcmp.ts +0 -279
  203. package/src/oracles/oracleClientCache.ts +0 -41
  204. package/src/oracles/oracleId.ts +0 -99
  205. package/src/oracles/prelaunchOracleClient.ts +0 -63
  206. package/src/oracles/pythClient.ts +0 -125
  207. package/src/oracles/pythLazerClient.ts +0 -141
  208. package/src/oracles/quoteAssetOracleClient.ts +0 -43
  209. package/src/oracles/strictOraclePrice.ts +0 -40
  210. package/src/oracles/types.ts +0 -82
  211. package/src/oracles/utils.ts +0 -45
  212. package/src/orderParams.ts +0 -117
  213. package/src/orderSubscriber/OrderSubscriber.ts +0 -378
  214. package/src/orderSubscriber/PollingSubscription.ts +0 -50
  215. package/src/orderSubscriber/WebsocketSubscription.ts +0 -137
  216. package/src/orderSubscriber/grpcSubscription.ts +0 -155
  217. package/src/orderSubscriber/index.ts +0 -7
  218. package/src/orderSubscriber/types.ts +0 -64
  219. package/src/priorityFee/averageOverSlotsStrategy.ts +0 -17
  220. package/src/priorityFee/averageStrategy.ts +0 -13
  221. package/src/priorityFee/ewmaStrategy.ts +0 -51
  222. package/src/priorityFee/heliusPriorityFeeMethod.ts +0 -68
  223. package/src/priorityFee/index.ts +0 -16
  224. package/src/priorityFee/maxOverSlotsStrategy.ts +0 -18
  225. package/src/priorityFee/maxStrategy.ts +0 -8
  226. package/src/priorityFee/priorityFeeSubscriber.ts +0 -328
  227. package/src/priorityFee/priorityFeeSubscriberMap.ts +0 -134
  228. package/src/priorityFee/solanaPriorityFeeMethod.ts +0 -46
  229. package/src/priorityFee/types.ts +0 -82
  230. package/src/priorityFee/velocityPriorityFeeMethod.ts +0 -53
  231. package/src/pyth/constants.ts +0 -9
  232. package/src/pyth/index.ts +0 -15
  233. package/src/pyth/pythLazerSubscriber.ts +0 -365
  234. package/src/pyth/types.ts +0 -4451
  235. package/src/pyth/utils.ts +0 -13
  236. package/src/slot/SlotSubscriber.ts +0 -126
  237. package/src/slot/SlothashSubscriber.ts +0 -163
  238. package/src/swap/UnifiedSwapClient.ts +0 -315
  239. package/src/swift/grpcSignedMsgUserAccountSubscriber.ts +0 -81
  240. package/src/swift/index.ts +0 -10
  241. package/src/swift/signedMsgUserAccountSubscriber.ts +0 -251
  242. package/src/swift/swiftOrderSubscriber.ts +0 -351
  243. package/src/testClient.ts +0 -42
  244. package/src/titan/titanClient.ts +0 -438
  245. package/src/token/index.ts +0 -13
  246. package/src/tokenFaucet.ts +0 -296
  247. package/src/tx/baseTxSender.ts +0 -651
  248. package/src/tx/blockhashFetcher/baseBlockhashFetcher.ts +0 -31
  249. package/src/tx/blockhashFetcher/cachedBlockhashFetcher.ts +0 -105
  250. package/src/tx/blockhashFetcher/types.ts +0 -9
  251. package/src/tx/fastSingleTxSender.ts +0 -200
  252. package/src/tx/forwardOnlyTxSender.ts +0 -193
  253. package/src/tx/priorityFeeCalculator.ts +0 -117
  254. package/src/tx/reportTransactionError.ts +0 -176
  255. package/src/tx/retryTxSender.ts +0 -177
  256. package/src/tx/txHandler.ts +0 -1009
  257. package/src/tx/txParamProcessor.ts +0 -225
  258. package/src/tx/types.ts +0 -117
  259. package/src/tx/utils.ts +0 -133
  260. package/src/tx/whileValidTxSender.ts +0 -377
  261. package/src/types.ts +0 -2575
  262. package/src/user.ts +0 -5316
  263. package/src/userConfig.ts +0 -38
  264. package/src/userMap/PollingSubscription.ts +0 -61
  265. package/src/userMap/WebsocketSubscription.ts +0 -93
  266. package/src/userMap/grpcSubscription.ts +0 -93
  267. package/src/userMap/referrerMap.ts +0 -360
  268. package/src/userMap/revenueShareEscrowMap.ts +0 -342
  269. package/src/userMap/userMap.ts +0 -784
  270. package/src/userMap/userMapConfig.ts +0 -82
  271. package/src/userMap/userStatsMap.ts +0 -393
  272. package/src/userName.ts +0 -37
  273. package/src/userStats.ts +0 -159
  274. package/src/userStatsConfig.ts +0 -35
  275. package/src/util/TransactionConfirmationManager.ts +0 -333
  276. package/src/util/chainClock.ts +0 -65
  277. package/src/util/computeUnits.ts +0 -101
  278. package/src/util/digest.ts +0 -33
  279. package/src/util/ed25519Utils.ts +0 -95
  280. package/src/util/promiseTimeout.ts +0 -23
  281. package/src/velocityClient.ts +0 -14802
  282. package/src/velocityClientConfig.ts +0 -119
  283. package/src/wallet.ts +0 -91
  284. package/tests/VelocityCore/builder_escrow.test.ts +0 -121
  285. package/tests/VelocityCore/decode.test.ts +0 -16
  286. package/tests/VelocityCore/fill_trigger.test.ts +0 -73
  287. package/tests/VelocityCore/instructions.test.ts +0 -46
  288. package/tests/VelocityCore/pdas.test.ts +0 -30
  289. package/tests/VelocityCore/perp_orders.test.ts +0 -205
  290. package/tests/VelocityCore/remainingAccounts.test.ts +0 -72
  291. package/tests/VelocityCore/settlement_liquidation.test.ts +0 -69
  292. package/tests/accounts/customizedCadenceBulkAccountLoader.test.ts +0 -211
  293. package/tests/amm/test.ts +0 -2402
  294. package/tests/auctions/test.ts +0 -81
  295. package/tests/bn/test.ts +0 -355
  296. package/tests/builder/builderFee.test.ts +0 -42
  297. package/tests/ci/verifyConstants.ts +0 -393
  298. package/tests/decode/test.ts +0 -262
  299. package/tests/decode/userAccountBufferStrings.ts +0 -102
  300. package/tests/dlob/helpers.ts +0 -748
  301. package/tests/dlob/test.ts +0 -6969
  302. package/tests/dlob/tickSizeStandardization.ts +0 -545
  303. package/tests/events/parseLogsForCuUsage.ts +0 -139
  304. package/tests/exchangeStatus/test.ts +0 -45
  305. package/tests/insurance/test.ts +0 -40
  306. package/tests/liquidation/test.ts +0 -125
  307. package/tests/oracles/mmOracleGate.test.ts +0 -379
  308. package/tests/oracles/pythPegSnap.test.ts +0 -76
  309. package/tests/sdkParity/enumParity.test.ts +0 -84
  310. package/tests/sdkParity/marginCategoryFill.test.ts +0 -143
  311. package/tests/sdkParity/memcmpOffsets.test.ts +0 -139
  312. package/tests/spot/test.ts +0 -281
  313. package/tests/tx/TransactionConfirmationManager.test.ts +0 -312
  314. package/tests/tx/cachedBlockhashFetcher.test.ts +0 -96
  315. package/tests/tx/priorityFeeCalculator.ts +0 -77
  316. package/tests/tx/priorityFeeStrategy.ts +0 -95
  317. package/tests/user/bankruptcy.ts +0 -165
  318. package/tests/user/feeAndWithdrawLimits.ts +0 -284
  319. package/tests/user/getMarginCalculation.ts +0 -586
  320. package/tests/user/helpers.ts +0 -184
  321. package/tests/user/liquidations.ts +0 -129
  322. package/tests/user/marginCalculations.test.ts +0 -321
  323. package/tests/user/test.ts +0 -833
  324. package/tsconfig.browser.json +0 -18
  325. package/tsconfig.json +0 -36
package/CHANGELOG.md DELETED
@@ -1,132 +0,0 @@
1
- # @velocity-exchange/sdk
2
-
3
- ## 0.4.0
4
-
5
- ### Minor Changes
6
-
7
- - [#197](https://github.com/velocity-exchange/velocity-v1/pull/197) [`900c07d`](https://github.com/velocity-exchange/velocity-v1/commit/900c07d9da7e106c82fbe65b3d92226d090bdee9) Thanks [@jordy25519](https://github.com/jordy25519)! - Attach the taker's `RevenueShareEscrow` on perp fills for referred takers. `getFillPerpOrderIx` gains an optional `takerIsReferred` flag; when set (or when the order carries a builder code) the deterministic escrow PDA is added to the fill. This mirrors the on-chain fill gate, which reads `UserStats.referrerStatus` (the `BuilderReferral` bit), so referred takers' fills no longer revert with `UnableToLoadRevenueShareAccount`. `ReferrerMap` gains `isBuilderReferral(authority)` and `mustGetIsBuilderReferral(authority)`, sourcing the bit from the UserStats fetch it already performs.
8
-
9
- - [#189](https://github.com/velocity-exchange/velocity-v1/pull/189) [`8df28ac`](https://github.com/velocity-exchange/velocity-v1/commit/8df28ac6d113760ae4a8cdff4ad438cb25efce2c) Thanks [@ChesterSim](https://github.com/ChesterSim)! - Program↔SDK parity fixes from the 2026-07-02 audit: renamed deprecated Switchboard
10
- OracleSource keys to match the IDL (fixes a decode crash on affected markets), applied
11
- the $100 initial-margin unrealized-PnL cap, standardized auction/limit prices to order
12
- tick size across the DLOB, isolated-position handling in bankruptcy/liquidation math,
13
- corrected MM-oracle validity gating, referrer_status memcmp offset, PerpOperation and
14
- OrderBitFlag bit values, wired five missing event records into EventSubscriber, fixed
15
- withdraw-limit divisors, multi-pool margin segregation, referee/builder fee estimation,
16
- and added AdminClient.updatePauseAdmin plus admin CLI commands for pause-admin rotation
17
- and fee-pool transfers. Also fixed withdrawFromIsolatedPerpPosition's withdraw-all path:
18
- it substituted the MIN_I64 sentinel into the instruction's unsigned u64 amount (serializing
19
- as 2^63, so full withdrawals always failed on-chain with InsufficientCollateral); it now
20
- clamps the request to the position's deposit plus claimable PnL.
21
-
22
- Follow-up completeness fixes: DLOBSubscriber.getL2/getL3 (and the dlob-server publisher) now
23
- thread orderTickSize so the public book view is tick-standardized like on-chain; added
24
- hasIsolatedMarginBankrupt and wired isolated-only bankruptcy detection into keeper resolution
25
- (isIsolatedPositionBankrupt now guards against non-isolated indices); getMarketFees applies the
26
- referee discount and calculateFeeForQuoteAmount accepts builder params so both public fee-prediction
27
- entry points match on-chain; and isFallbackAvailableLiquiditySource now fully mirrors
28
- amm_fill_gates_ok, adding the market-drawdown and MM-vs-exchange oracle volatility gates.
29
-
30
- Low-risk parity follow-ups: MarginCategory now includes 'Fill' as a single shared type, handled
31
- across perp margin ratio / unrealized-asset-weight and spot asset/liability weights (the
32
- integer-averaged midpoint of initial and maintenance, mirroring get_margin_ratio /
33
- get_asset_weight / get_liability_weight) instead of throwing or returning undefined; the
34
- worst-tier taker-fee estimate in calculateEntriesEffectOnFreeCollateral now ceil-divides to match
35
- calculate_taker_fee; MM-oracle validity is computed with the raw exchange confidence (matching
36
- get_mm_oracle_price_data) while the returned MM price keeps its diff-adjusted confidence; and
37
- corrected the OracleSourceNum doc (it is an SDK-internal oracle-id encoding, not the on-chain
38
- Borsh discriminant).
39
-
40
- Visible/breaking API changes in this release: `OracleSource.SWITCHBOARD` /
41
- `OracleSource.SWITCHBOARD_ON_DEMAND` (and the corresponding `OracleSourceNum` entries) are renamed
42
- to `DEPRECATED_SWITCHBOARD` / `DEPRECATED_SWITCHBOARD_ON_DEMAND` with no aliases kept for the old
43
- names; `ContractType.FUTURE` is renamed to `DEPRECATED_FUTURE`; and `FeatureBitFlags.BUILDER_REFERRAL`
44
- is removed outright, since no such on-chain flag exists. Separately, `getLimitPrice` gained a new
45
- optional trailing `tickSize` parameter — the existing `fallbackPrice` parameter stays in its original
46
- 4th position, so old 4-argument call sites keep working unchanged.
47
-
48
- ### Patch Changes
49
-
50
- - [#199](https://github.com/velocity-exchange/velocity-v1/pull/199) [`dff8a47`](https://github.com/velocity-exchange/velocity-v1/commit/dff8a4754f6b736fed330b2ab4fa5685db4f8159) Thanks [@jordy25519](https://github.com/jordy25519)! - Add BTC-PERP (index 1) and ETH-PERP (index 2) to `DevnetPerpMarkets`, reflecting the two Pyth-Lazer perp markets re-created on devnet. ETH-PERP uses lazer feed 2 (real ETH price feed).
51
-
52
- - [#193](https://github.com/velocity-exchange/velocity-v1/pull/193) [`bafd699`](https://github.com/velocity-exchange/velocity-v1/commit/bafd6990f8322f232d2f0d17042beb0e9c567164) Thanks [@jordy25519](https://github.com/jordy25519)! - Remove the stale `FettyRIP` (marketIndex 2) entry from `DevnetPerpMarkets`. That perp market was deleted on-chain, but the hand-maintained devnet config still listed it, so consumers that enumerate all perp markets (keeper-bots-v2, dlob-server) crashed with `Perp market config for 2 not found` when resolving the nonexistent market. The devnet config now mirrors on-chain state (SOL-PERP at index 0 only).
53
-
54
- ## 0.3.0
55
-
56
- ### Minor Changes
57
-
58
- - [#172](https://github.com/velocity-exchange/velocity-v1/pull/172) [`b7d15b9`](https://github.com/velocity-exchange/velocity-v1/commit/b7d15b970a74d267aeaf20bb644d5344b9aadc61) Thanks [@0xahzam](https://github.com/0xahzam)! - Decouple solvency-repair from the withdraw pause. The `resolve_perp_pnl_deficit`,
59
- `resolve_perp_bankruptcy`, and `resolve_spot_bankruptcy` instructions are now gated by a
60
- new `State.solvencyStatus` bitfield instead of `WithdrawPaused`, so user withdrawals can
61
- be halted while solvency repair keeps running (or repair can be frozen on its own). Adds
62
- the `SolvencyStatus` enum, `StateAccount.solvencyStatus`, a `solvencyRepairPaused()`
63
- helper, `AdminClient.updateSolvencyStatus`, and the `exchange set-solvency-status` admin
64
- CLI command.
65
-
66
- - [#141](https://github.com/velocity-exchange/velocity-v1/pull/141) [`3f148f8`](https://github.com/velocity-exchange/velocity-v1/commit/3f148f8b477e4176e11e0660adb0e67dd5163d3b) Thanks [@ChewingGlass](https://github.com/ChewingGlass)! - Harden the native fast-path admin handlers. The
67
- `update_amm_spread_adjustment_native` instruction now requires the program
68
- `State` account: `getUpdateAmmSpreadAdjustmentNativeIx` is now **async** and
69
- returns a `Promise<TransactionInstruction>` (it derives and appends the state
70
- account), and its compute-unit budget was raised to cover the on-chain account
71
- validation. Direct callers must `await` the builder. Two new program error
72
- codes are surfaced in the IDL: `InvalidNativeStateAccount` (6355) and
73
- `InvalidNativePerpMarketAccount` (6356).
74
-
75
- ### Patch Changes
76
-
77
- - [#173](https://github.com/velocity-exchange/velocity-v1/pull/173) [`2f6c64d`](https://github.com/velocity-exchange/velocity-v1/commit/2f6c64d54f1146d8e7f9ee4ab556929c6bf8b920) Thanks [@ChesterSim](https://github.com/ChesterSim)! - Fix stale `User` account byte offsets in `memcmp` filters and `OrderSubscriber`.
78
-
79
- The Velocity `User` account is 4496 bytes, but the memcmp filters and the
80
- `OrderSubscriber` staleness check still used offsets from the older 4376-byte
81
- layout. As a result `getUserWithOrderFilter()` matched zero accounts, so any
82
- consumer that bulk-loads users-with-orders (e.g. the DLOB server's
83
- `OrderSubscriber.fetch()`) loaded no orders and produced an empty order book
84
- (vAMM-only L2, empty L3). Offsets for `idle`, `hasOpenOrder`, `hasOpenAuction`,
85
- `poolId`, and `lastActiveSlot` are corrected to match the on-chain layout.
86
-
87
- ## 0.2.6
88
-
89
- ### Patch Changes
90
-
91
- - [#156](https://github.com/velocity-exchange/velocity-v1/pull/156) [`d3b58ab`](https://github.com/velocity-exchange/velocity-v1/commit/d3b58ab7e3ad33f0e6634ff87e9b150915b3aa13) Thanks [@ChesterSim](https://github.com/ChesterSim)! - Fix account decoder to pass account names as-is instead of capitalizing them. The
92
- Anchor v1 IDL program constructor already camelCases account names, so the extra
93
- `capitalize()` call was incorrect and caused decoding failures in the gRPC and
94
- WebSocket subscribers.
95
-
96
- ## 0.2.5
97
-
98
- ### Patch Changes
99
-
100
- - [#155](https://github.com/velocity-exchange/velocity-v1/pull/155) [`15073bc`](https://github.com/velocity-exchange/velocity-v1/commit/15073bc0b740b2d1cad471126a00368e72655bd5) Thanks [@ChesterSim](https://github.com/ChesterSim)! - Make the `UserAccountSubscriber` "not subscribed" contract consistent and fix a
101
- misleading error message. `getUserAccountAndSlot()` now throws `NotSubscribedError`
102
- when called before `subscribe()` on the gRPC-multi and WebSocket-program subscribers
103
- too (the WebSocket and polling subscribers already did) — so `User.getUserAccount()`
104
- uniformly throws when not subscribed and returns `undefined` only when subscribed but
105
- the account was not found on chain. `getUserAccountOrThrow()` /
106
- `getUserAccountAndSlotOrThrow()` now throw `User account not found: <pubkey>` (was
107
- `User account not loaded`), since after `subscribe()` resolves a missing account means
108
- "not found", not "still loading".
109
-
110
- ## 0.2.4
111
-
112
- ### Patch Changes
113
-
114
- - [#127](https://github.com/velocity-exchange/velocity-v1/pull/127) [`4f8e7aa`](https://github.com/velocity-exchange/velocity-v1/commit/4f8e7aaef0e35b190fc0b91cd29314d902d1ccab) Thanks [@ChesterSim](https://github.com/ChesterSim)! - reflect Typescript types on IDL changes
115
-
116
- ## 0.2.3
117
-
118
- ### Patch Changes
119
-
120
- - [#100](https://github.com/velocity-exchange/velocity-v1/pull/100) [`ae78769`](https://github.com/velocity-exchange/velocity-v1/commit/ae78769ef58355202c030435c2796ef045fe30a0) Thanks [@ChesterSim](https://github.com/ChesterSim)! - add back ForwardOnlyTxSender and calculateMaxRemainingDeposit
121
-
122
- ## 0.2.2
123
-
124
- ### Patch Changes
125
-
126
- - [#97](https://github.com/velocity-exchange/velocity-v1/pull/97) [`022a949`](https://github.com/velocity-exchange/velocity-v1/commit/022a949cb1802171ca57a61260f86c8908f94f34) Thanks [@ChewingGlass](https://github.com/ChewingGlass)! - Re-export `PriceUpdateAccount` from the package root and declare `@types/node` as a devDependency (fixes the SDK build under isolated installs). Enables downstream apps (dlob-server, keeper-bots-v2) to consume the velocity SDK without reaching into subpaths.
127
-
128
- ## 0.2.1
129
-
130
- ### Patch Changes
131
-
132
- - [`4fd7462`](https://github.com/velocity-exchange/velocity-v1/commit/4fd7462bfa3c55e31e3457b1b65f519cf052a6fa) Thanks [@ChewingGlass](https://github.com/ChewingGlass)! - Testing new changelog based package publishing flow
package/build-browser.js DELETED
@@ -1,58 +0,0 @@
1
- const esbuild = require('esbuild');
2
- const path = require('path');
3
-
4
- async function build() {
5
- try {
6
- await esbuild.build({
7
- entryPoints: ['./lib/browser/index.js'],
8
- bundle: true,
9
- minify: true,
10
- format: 'cjs',
11
- platform: 'browser',
12
- target: ['es2020'],
13
- outfile: './dist/browser.min.js',
14
- external: [
15
- '@solana/web3.js',
16
- '@coral-xyz/anchor',
17
- '@coral-xyz/anchor-30',
18
- ],
19
- define: {
20
- 'process.env.NODE_ENV': '"production"',
21
- 'global': 'globalThis',
22
- },
23
- inject: [path.resolve(__dirname, 'esbuild-shims.js')],
24
- alias: {
25
- // Node polyfills for browser
26
- 'crypto': 'crypto-browserify',
27
- 'stream': 'stream-browserify',
28
- 'path': 'path-browserify',
29
- 'os': 'os-browserify/browser',
30
- 'process': 'process/browser',
31
- 'vm': 'vm-browserify',
32
- },
33
- // Ignore node-only modules
34
- plugins: [{
35
- name: 'ignore-node-modules',
36
- setup(build) {
37
- build.onResolve({ filter: /^(fs|net|dns|tls|http2)$/ }, args => {
38
- return { path: args.path, namespace: 'ignore-ns' };
39
- });
40
- build.onLoad({ filter: /.*/, namespace: 'ignore-ns' }, () => {
41
- return { contents: 'export default {}' };
42
- });
43
- },
44
- }],
45
- loader: {
46
- '.json': 'json',
47
- },
48
- treeShaking: true,
49
- sourcemap: false,
50
- });
51
- console.log('✅ Browser build complete');
52
- } catch (error) {
53
- console.error('❌ Build failed:', error);
54
- process.exit(1);
55
- }
56
- }
57
-
58
- build();
package/bunfig.toml DELETED
@@ -1,3 +0,0 @@
1
- [install]
2
- exact = true
3
- minimumReleaseAge = 604800 # 7 days
package/esbuild-shims.js DELETED
@@ -1,12 +0,0 @@
1
- import { Buffer } from 'buffer';
2
- import process from 'process';
3
-
4
- if (typeof globalThis.Buffer === 'undefined') {
5
- globalThis.Buffer = Buffer;
6
- }
7
-
8
- if (typeof globalThis.process === 'undefined') {
9
- globalThis.process = process;
10
- }
11
-
12
- export { Buffer, process };
@@ -1,110 +0,0 @@
1
- import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
- import dotenv from 'dotenv';
3
- import { AnchorProvider, Idl, Program, ProgramAccount, BN } from '@coral-xyz/anchor';
4
- import velocityIDL from '../src/idl/velocity.json';
5
- import {
6
- VELOCITY_PROGRAM_ID,
7
- PerpMarketAccount,
8
- SpotMarketAccount,
9
- OracleInfo,
10
- Wallet,
11
- numberToSafeBN,
12
- } from '../src';
13
- import { VelocityClient } from '../src/velocityClient';
14
- import { VelocityClientConfig } from '../src/velocityClientConfig';
15
-
16
- async function main() {
17
- dotenv.config({ path: '../' });
18
-
19
- const RPC_ENDPOINT = process.env.RPC_ENDPOINT;
20
- if (!RPC_ENDPOINT) throw new Error('RPC_ENDPOINT env var required');
21
-
22
- let keypair: Keypair;
23
- const pk = process.env.PRIVATE_KEY;
24
- if (pk) {
25
- const secret = Uint8Array.from(JSON.parse(pk));
26
- keypair = Keypair.fromSecretKey(secret);
27
- } else {
28
- keypair = new Keypair();
29
- console.warn('Using ephemeral keypair. Provide PRIVATE_KEY to use a real wallet.');
30
- }
31
- const wallet = new Wallet(keypair);
32
-
33
- const connection = new Connection(RPC_ENDPOINT);
34
- const provider = new AnchorProvider(connection, wallet as any, {
35
- commitment: 'processed',
36
- });
37
- const programId = new PublicKey(VELOCITY_PROGRAM_ID);
38
- const program = new Program(velocityIDL as Idl, programId, provider);
39
-
40
- const allPerpMarketProgramAccounts =
41
- (await program.account.perpMarket.all()) as ProgramAccount<PerpMarketAccount>[];
42
- const perpMarketIndexes = allPerpMarketProgramAccounts.map((val) => val.account.marketIndex);
43
- const allSpotMarketProgramAccounts =
44
- (await program.account.spotMarket.all()) as ProgramAccount<SpotMarketAccount>[];
45
- const spotMarketIndexes = allSpotMarketProgramAccounts.map((val) => val.account.marketIndex);
46
-
47
- const seen = new Set<string>();
48
- const oracleInfos: OracleInfo[] = [];
49
- for (const acct of allPerpMarketProgramAccounts) {
50
- const key = `${acct.account.amm.oracle.toBase58()}-${Object.keys(acct.account.amm.oracleSource)[0]}`;
51
- if (!seen.has(key)) {
52
- seen.add(key);
53
- oracleInfos.push({ publicKey: acct.account.amm.oracle, source: acct.account.amm.oracleSource });
54
- }
55
- }
56
- for (const acct of allSpotMarketProgramAccounts) {
57
- const key = `${acct.account.oracle.toBase58()}-${Object.keys(acct.account.oracleSource)[0]}`;
58
- if (!seen.has(key)) {
59
- seen.add(key);
60
- oracleInfos.push({ publicKey: acct.account.oracle, source: acct.account.oracleSource });
61
- }
62
- }
63
-
64
- const clientConfig: VelocityClientConfig = {
65
- connection,
66
- wallet,
67
- programID: programId,
68
- accountSubscription: { type: 'websocket', commitment: 'processed' },
69
- perpMarketIndexes,
70
- spotMarketIndexes,
71
- oracleInfos,
72
- env: 'devnet',
73
- };
74
- const client = new VelocityClient(clientConfig);
75
- await client.subscribe();
76
-
77
- const candidates = perpMarketIndexes.filter((i) => i >= 0 && i <= 5);
78
- const targetMarketIndex = candidates.length
79
- ? candidates[Math.floor(Math.random() * candidates.length)]
80
- : perpMarketIndexes[0];
81
-
82
- const perpMarketAccount = client.getPerpMarketAccount(targetMarketIndex);
83
- const quoteSpotMarketIndex = perpMarketAccount.quoteSpotMarketIndex;
84
- const spotMarketAccount = client.getSpotMarketAccount(quoteSpotMarketIndex);
85
-
86
- const precision = new BN(10).pow(new BN(spotMarketAccount.decimals));
87
- const amount = numberToSafeBN(0.01, precision);
88
-
89
- const userTokenAccount = await client.getAssociatedTokenAccount(quoteSpotMarketIndex);
90
- const ix = await client.getDepositIntoIsolatedPerpPositionIx(
91
- amount,
92
- targetMarketIndex,
93
- userTokenAccount,
94
- 0
95
- );
96
-
97
- const tx = await client.buildTransaction([ix]);
98
- const { txSig } = await client.sendTransaction(tx);
99
- console.log(`Deposited into isolated perp market ${targetMarketIndex}: ${txSig}`);
100
-
101
- await client.getUser().unsubscribe();
102
- await client.unsubscribe();
103
- }
104
-
105
- main().catch((e) => {
106
- console.error(e);
107
- process.exit(1);
108
- });
109
-
110
-
@@ -1,213 +0,0 @@
1
- import { Connection, Keypair, PublicKey } from '@solana/web3.js';
2
- import dotenv from 'dotenv';
3
- import {
4
- VelocityClient,
5
- VelocityClientConfig,
6
- Wallet,
7
- UserMap,
8
- VELOCITY_PROGRAM_ID,
9
- getMarketsAndOraclesForSubscription,
10
- BulkAccountLoader,
11
- BN,
12
- PerpPosition,
13
- } from '../src';
14
- import { TransactionSignature } from '@solana/web3.js';
15
- import fs from 'fs';
16
- import os from 'os';
17
- import path from 'path';
18
-
19
- async function main() {
20
- dotenv.config({ path: '../' });
21
- // Simple CLI parsing
22
- interface CliOptions {
23
- mode: 'list' | 'one' | 'all';
24
- targetUser?: string;
25
- }
26
-
27
- function parseCliArgs(): CliOptions {
28
- const args = process.argv.slice(2);
29
- let mode: CliOptions['mode'] = 'list';
30
- let targetUser: string | undefined = undefined;
31
- for (let i = 0; i < args.length; i++) {
32
- const arg = args[i];
33
- if (arg === '--mode' && i + 1 < args.length) {
34
- const next = args[i + 1] as CliOptions['mode'];
35
- if (next === 'list' || next === 'one' || next === 'all') {
36
- mode = next;
37
- }
38
- i++;
39
- } else if ((arg === '--user' || arg === '--target') && i + 1 < args.length) {
40
- targetUser = args[i + 1];
41
- i++;
42
- }
43
- }
44
- return { mode, targetUser };
45
- }
46
-
47
- const { mode, targetUser } = parseCliArgs();
48
-
49
- const RPC_ENDPOINT =
50
- process.env.RPC_ENDPOINT ?? 'https://api.mainnet-beta.solana.com';
51
-
52
- const connection = new Connection(RPC_ENDPOINT);
53
- const keypairPath =
54
- process.env.SOLANA_KEYPAIR ??
55
- path.join(os.homedir(), '.config', 'solana', 'id.json');
56
- const secret = JSON.parse(fs.readFileSync(keypairPath, 'utf-8')) as number[];
57
- const wallet = new Wallet(Keypair.fromSecretKey(Uint8Array.from(secret)));
58
-
59
- const { perpMarketIndexes, spotMarketIndexes, oracleInfos } =
60
- getMarketsAndOraclesForSubscription('mainnet-beta');
61
-
62
- const accountLoader = new BulkAccountLoader(connection, 'confirmed', 60_000);
63
-
64
- const clientConfig: VelocityClientConfig = {
65
- connection,
66
- wallet,
67
- programID: new PublicKey(VELOCITY_PROGRAM_ID),
68
- accountSubscription: {
69
- type: 'polling',
70
- accountLoader,
71
- },
72
- perpMarketIndexes,
73
- spotMarketIndexes,
74
- oracleInfos,
75
- env: 'mainnet-beta',
76
- };
77
-
78
- const client = new VelocityClient(clientConfig);
79
- await client.subscribe();
80
-
81
- const userMap = new UserMap({
82
- velocityClient: client,
83
- subscriptionConfig: {
84
- type: 'polling',
85
- frequency: 60_000,
86
- commitment: 'confirmed',
87
- },
88
- includeIdle: false,
89
- syncConfig: { type: 'paginated' },
90
- throwOnFailedSync: false,
91
- });
92
- await userMap.subscribe();
93
-
94
-
95
- const flaggedUsers: Array<{
96
- userPubkey: string;
97
- authority: string;
98
- flags: Array<{ marketIndex: number; flag: number; isolatedPositionScaledBalance: BN }>;
99
- }> = [];
100
-
101
- console.log(`User map size: ${Array.from(userMap.entries()).length}`);
102
-
103
- for (const [userPubkey, user] of userMap.entries()) {
104
- const userAccount = user.getUserAccount();
105
- const flaggedPositions = userAccount.perpPositions
106
- .filter((p) => p.positionFlag >= 1 || p.isolatedPositionScaledBalance.toString() !== '0')
107
- .map((p) => ({ marketIndex: p.marketIndex, flag: p.positionFlag, isolatedPositionScaledBalance: p.isolatedPositionScaledBalance, fullPosition: p }));
108
-
109
- if (flaggedPositions.length > 0) {
110
- if(mode === 'one' && userPubkey === targetUser) {
111
- console.log(`flagged positions on user ${userPubkey}`);
112
- console.log(flaggedPositions.map((p) => `mkt=${p.marketIndex}, flag=${p.flag}, isolatedPositionScaledBalance=${p.isolatedPositionScaledBalance.toString()}, fullPosition=${fullLogPerpPosition(p.fullPosition)}`).join('\n\n; '));
113
- }
114
- flaggedUsers.push({
115
- userPubkey,
116
- authority: userAccount.authority.toBase58(),
117
- flags: flaggedPositions,
118
- });
119
- }
120
- }
121
-
122
- // Mode 1: list flagged users (default)
123
- if (mode === 'list') {
124
- console.log(`Flagged users (positionFlag >= 1 || isolatedPositionScaledBalance > 0): ${flaggedUsers.length}`);
125
- for (const u of flaggedUsers) {
126
- const flagsStr = u.flags
127
- .map((f) => `mkt=${f.marketIndex}, flag=${f.flag}, isolatedPositionScaledBalance=${f.isolatedPositionScaledBalance.toString()}`)
128
- .join('; ');
129
- console.log(
130
- `- authority=${u.authority} userAccount=${u.userPubkey} -> [${flagsStr}]`
131
- );
132
- }
133
- }
134
-
135
- // Helper to invoke updateUserIdle
136
- async function updateUserIdleFor(userAccountPubkeyStr: string): Promise<TransactionSignature | undefined> {
137
- const userObj = userMap.get(userAccountPubkeyStr);
138
- if (!userObj) {
139
- console.warn(`User ${userAccountPubkeyStr} not found in userMap`);
140
- return undefined;
141
- }
142
- try {
143
- const sig = await client.updateUserIdle(
144
- new PublicKey(userAccountPubkeyStr),
145
- userObj.getUserAccount()
146
- );
147
- console.log(`updateUserIdle sent for userAccount=${userAccountPubkeyStr} -> tx=${sig}`);
148
- return sig;
149
- } catch (e) {
150
- console.error(`Failed updateUserIdle for userAccount=${userAccountPubkeyStr}`, e);
151
- return undefined;
152
- }
153
- }
154
-
155
- // Mode 2: updateUserIdle on a single flagged user
156
- if (mode === 'one') {
157
- if (flaggedUsers.length === 0) {
158
- console.log('No flagged users to update.');
159
- } else {
160
- const chosen =
161
- (targetUser && flaggedUsers.find((u) => u.userPubkey === targetUser)) ||
162
- flaggedUsers[0];
163
- console.log(
164
- `Updating single flagged userAccount=${chosen.userPubkey} authority=${chosen.authority}`
165
- );
166
- await updateUserIdleFor(chosen.userPubkey);
167
- }
168
- }
169
-
170
- // Mode 3: updateUserIdle on all flagged users
171
- if (mode === 'all') {
172
- if (flaggedUsers.length === 0) {
173
- console.log('No flagged users to update.');
174
- } else {
175
- console.log(`Updating all ${flaggedUsers.length} flagged users...`);
176
- for (const u of flaggedUsers) {
177
- await updateUserIdleFor(u.userPubkey);
178
- }
179
- console.log('Finished updating all flagged users.');
180
- }
181
- }
182
-
183
- await userMap.unsubscribe();
184
- await client.unsubscribe();
185
- }
186
-
187
- main().catch((e) => {
188
- console.error(e);
189
- process.exit(1);
190
- });
191
-
192
-
193
- function fullLogPerpPosition(position: PerpPosition) {
194
-
195
- return `
196
- [PERP POSITION]
197
- baseAssetAmount=${position.baseAssetAmount.toString()}
198
- quoteAssetAmount=${position.quoteAssetAmount.toString()}
199
- quoteBreakEvenAmount=${position.quoteBreakEvenAmount.toString()}
200
- quoteEntryAmount=${position.quoteEntryAmount.toString()}
201
- openBids=${position.openBids.toString()}
202
- openAsks=${position.openAsks.toString()}
203
- settledPnl=${position.settledPnl.toString()}
204
- remainderBaseAssetAmount=${position.remainderBaseAssetAmount}
205
- maxMarginRatio=${position.maxMarginRatio}
206
- marketIndex=${position.marketIndex}
207
- openOrders=${position.openOrders}
208
- positionFlag=${position.positionFlag}
209
- isolatedPositionScaledBalance=${position.isolatedPositionScaledBalance.toString()}
210
- `;
211
-
212
- }
213
-