@velocity-exchange/sdk 0.6.1 → 0.8.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 (82) hide show
  1. package/lib/browser/adminClient.d.ts +24 -4
  2. package/lib/browser/adminClient.js +62 -12
  3. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +19 -15
  4. package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +31 -22
  5. package/lib/browser/constants/numericConstants.d.ts +2 -0
  6. package/lib/browser/constants/numericConstants.js +3 -1
  7. package/lib/browser/core/VelocityCore.d.ts +2 -0
  8. package/lib/browser/core/VelocityCore.js +1 -0
  9. package/lib/browser/core/instructions/trigger.d.ts +4 -0
  10. package/lib/browser/core/instructions/trigger.js +4 -0
  11. package/lib/browser/idl/velocity.d.ts +223 -33
  12. package/lib/browser/idl/velocity.json +224 -34
  13. package/lib/browser/math/amm.d.ts +8 -8
  14. package/lib/browser/math/funding.d.ts +2 -2
  15. package/lib/browser/math/liquidation.d.ts +37 -2
  16. package/lib/browser/math/liquidation.js +44 -3
  17. package/lib/browser/math/market.d.ts +5 -4
  18. package/lib/browser/math/market.js +21 -14
  19. package/lib/browser/math/oracles.d.ts +3 -3
  20. package/lib/browser/math/orders.d.ts +1 -1
  21. package/lib/browser/math/spotBalance.d.ts +13 -0
  22. package/lib/browser/math/spotBalance.js +43 -2
  23. package/lib/browser/testClient.js +12 -1
  24. package/lib/browser/tx/txHandler.d.ts +7 -1
  25. package/lib/browser/tx/txHandler.js +7 -3
  26. package/lib/browser/types.d.ts +9 -0
  27. package/lib/browser/user.d.ts +2 -2
  28. package/lib/browser/userMap/userMap.d.ts +1 -0
  29. package/lib/browser/userMap/userMap.js +3 -7
  30. package/lib/browser/velocityClient.d.ts +32 -20
  31. package/lib/browser/velocityClient.js +48 -23
  32. package/lib/node/adminClient.d.ts +24 -4
  33. package/lib/node/adminClient.d.ts.map +1 -1
  34. package/lib/node/adminClient.js +62 -12
  35. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +19 -15
  36. package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
  37. package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +31 -22
  38. package/lib/node/constants/numericConstants.d.ts +2 -0
  39. package/lib/node/constants/numericConstants.d.ts.map +1 -1
  40. package/lib/node/constants/numericConstants.js +3 -1
  41. package/lib/node/core/VelocityCore.d.ts +2 -0
  42. package/lib/node/core/VelocityCore.d.ts.map +1 -1
  43. package/lib/node/core/VelocityCore.js +1 -0
  44. package/lib/node/core/instructions/trigger.d.ts +4 -0
  45. package/lib/node/core/instructions/trigger.d.ts.map +1 -1
  46. package/lib/node/core/instructions/trigger.js +4 -0
  47. package/lib/node/idl/velocity.d.ts +223 -33
  48. package/lib/node/idl/velocity.d.ts.map +1 -1
  49. package/lib/node/idl/velocity.json +224 -34
  50. package/lib/node/math/amm.d.ts +8 -8
  51. package/lib/node/math/amm.d.ts.map +1 -1
  52. package/lib/node/math/funding.d.ts +2 -2
  53. package/lib/node/math/funding.d.ts.map +1 -1
  54. package/lib/node/math/liquidation.d.ts +37 -2
  55. package/lib/node/math/liquidation.d.ts.map +1 -1
  56. package/lib/node/math/liquidation.js +44 -3
  57. package/lib/node/math/market.d.ts +5 -4
  58. package/lib/node/math/market.d.ts.map +1 -1
  59. package/lib/node/math/market.js +21 -14
  60. package/lib/node/math/oracles.d.ts +3 -3
  61. package/lib/node/math/oracles.d.ts.map +1 -1
  62. package/lib/node/math/orders.d.ts +1 -1
  63. package/lib/node/math/orders.d.ts.map +1 -1
  64. package/lib/node/math/spotBalance.d.ts +13 -0
  65. package/lib/node/math/spotBalance.d.ts.map +1 -1
  66. package/lib/node/math/spotBalance.js +43 -2
  67. package/lib/node/testClient.d.ts.map +1 -1
  68. package/lib/node/testClient.js +12 -1
  69. package/lib/node/tx/txHandler.d.ts +7 -1
  70. package/lib/node/tx/txHandler.d.ts.map +1 -1
  71. package/lib/node/tx/txHandler.js +7 -3
  72. package/lib/node/types.d.ts +9 -0
  73. package/lib/node/types.d.ts.map +1 -1
  74. package/lib/node/user.d.ts +2 -2
  75. package/lib/node/user.d.ts.map +1 -1
  76. package/lib/node/userMap/userMap.d.ts +1 -0
  77. package/lib/node/userMap/userMap.d.ts.map +1 -1
  78. package/lib/node/userMap/userMap.js +3 -7
  79. package/lib/node/velocityClient.d.ts +32 -20
  80. package/lib/node/velocityClient.d.ts.map +1 -1
  81. package/lib/node/velocityClient.js +48 -23
  82. package/package.json +1 -1
@@ -141,10 +141,11 @@ export declare function calculateNetUserPnlImbalance(perpMarket: PerpMarketAccou
141
141
  /**
142
142
  * Calculates the price used to evaluate trigger (stop/take-profit) orders for a perp market,
143
143
  * mirroring the Rust `get_trigger_price`. When `useMedianPrice` is true, the trigger price is the
144
- * median of three candidates — the last fill price (or oracle price if there's been no fill), the
145
- * oracle price adjusted by the implied funding basis, and the oracle price adjusted by the 5min
146
- * mark/oracle TWAP basis then clamped to within a contract-tier-dependent band around the raw
147
- * oracle price (tier A/B: 20bps, tier C: 100bps, others: 250bps) via `clampTriggerPrice`. This
144
+ * median of three candidates — the last fill price (or oracle price if there's been no fill or the
145
+ * last fill is older than `TRIGGER_PRICE_LAST_FILL_MAX_AGE`), the oracle price adjusted by the
146
+ * implied funding basis, and the oracle price adjusted by the 5min mark/oracle TWAP basis — then
147
+ * clamped to within a contract-tier-dependent band around the raw oracle price (tier A/B: 20bps,
148
+ * tier C: 100bps, others: 250bps) via `clampTriggerPrice`. This
148
149
  * resists a single manipulated print (last fill or a momentary oracle/mark divergence) from
149
150
  * triggering orders it shouldn't. When `useMedianPrice` is false, the raw oracle price is used
150
151
  * directly with no smoothing.
@@ -1 +1 @@
1
- {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../../src/math/market.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EACN,iBAAiB,EAEjB,cAAc,EACd,iBAAiB,EAGjB,MAAM,UAAU,CAAC;AAUlB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AActE;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,GACnC,EAAE,CAOJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,EAAE,GACb,EAAE,CAWJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,EAAE,GACb,EAAE,CAWJ;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,EAAE,EACT,eAAe,EAAE,eAAe,GAC9B,EAAE,CAEJ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,EAAE,EACR,cAAc,EAAE,cAAc,EAC9B,iBAAiB,SAAI,GACnB,MAAM,CAsCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,8BAA8B,CAC7C,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,iBAAiB,EAClC,aAAa,EAAE,EAAE,EACjB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,EAAE,CAoCJ;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAC1C,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,GAC3B,EAAE,CAMJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oCAAoC,CACnD,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,GAC3B,EAAE,CAcJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,EAAE,CAaJ;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAC/C,oBAAoB,UAAO,GACzB,EAAE,CAoBJ;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,EAAE,EACf,GAAG,EAAE,EAAE,EACP,cAAc,EAAE,OAAO,GACrB,EAAE,CA2BJ"}
1
+ {"version":3,"file":"market.d.ts","sourceRoot":"","sources":["../../../src/math/market.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EACN,iBAAiB,EAEjB,cAAc,EACd,iBAAiB,EAGjB,MAAM,UAAU,CAAC;AAUlB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAetE;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,GACnC,EAAE,CAOJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,EAAE,GACb,EAAE,CAWJ;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,UAAU,CAAC,EAAE,EAAE,GACb,EAAE,CAWJ;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,EAAE,EACT,eAAe,EAAE,eAAe,GAC9B,EAAE,CAEJ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,0BAA0B,CACzC,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,EAAE,EACR,cAAc,EAAE,cAAc,EAC9B,iBAAiB,SAAI,GACnB,MAAM,CAsCR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,8BAA8B,CAC7C,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,iBAAiB,EAClC,aAAa,EAAE,EAAE,EACjB,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,EAAE,CAoCJ;AAED;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAC1C,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,GAC3B,EAAE,CAMJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oCAAoC,CACnD,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,GAC3B,EAAE,CAcJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,EAAE,CAaJ;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,4BAA4B,CAC3C,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,iBAAiB,EAC7B,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAC/C,oBAAoB,UAAO,GACzB,EAAE,CAoBJ;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,eAAe,CAC9B,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,EAAE,EACf,GAAG,EAAE,EAAE,EACP,cAAc,EAAE,OAAO,GACrB,EAAE,CAiCJ"}
@@ -244,10 +244,11 @@ exports.calculateNetUserPnlImbalance = calculateNetUserPnlImbalance;
244
244
  /**
245
245
  * Calculates the price used to evaluate trigger (stop/take-profit) orders for a perp market,
246
246
  * mirroring the Rust `get_trigger_price`. When `useMedianPrice` is true, the trigger price is the
247
- * median of three candidates — the last fill price (or oracle price if there's been no fill), the
248
- * oracle price adjusted by the implied funding basis, and the oracle price adjusted by the 5min
249
- * mark/oracle TWAP basis then clamped to within a contract-tier-dependent band around the raw
250
- * oracle price (tier A/B: 20bps, tier C: 100bps, others: 250bps) via `clampTriggerPrice`. This
247
+ * median of three candidates — the last fill price (or oracle price if there's been no fill or the
248
+ * last fill is older than `TRIGGER_PRICE_LAST_FILL_MAX_AGE`), the oracle price adjusted by the
249
+ * implied funding basis, and the oracle price adjusted by the 5min mark/oracle TWAP basis — then
250
+ * clamped to within a contract-tier-dependent band around the raw oracle price (tier A/B: 20bps,
251
+ * tier C: 100bps, others: 250bps) via `clampTriggerPrice`. This
251
252
  * resists a single manipulated print (last fill or a momentary oracle/mark divergence) from
252
253
  * triggering orders it shouldn't. When `useMedianPrice` is false, the raw oracle price is used
253
254
  * directly with no smoothing.
@@ -265,17 +266,23 @@ function getTriggerPrice(market, oraclePrice, now, useMedianPrice) {
265
266
  if (!useMedianPrice) {
266
267
  return oraclePrice.abs();
267
268
  }
269
+ // Leg A: last trade price, only while fresh. `lastTradeTs` is stamped by
270
+ // the same fill path that writes `lastFillPrice`.
268
271
  const lastFillPrice = market.lastFillPrice;
269
- // Calculate 5-minute basis
272
+ const lastFillIsFresh = now
273
+ .sub(market.marketStats.lastTradeTs)
274
+ .lte(numericConstants_1.TRIGGER_PRICE_LAST_FILL_MAX_AGE);
275
+ // Leg C: oracle + (mark_twap_5min - oracle_twap_5min)
270
276
  const markPrice5minTwap = market.marketStats.lastMarkPriceTwap5Min;
271
277
  const lastOraclePriceTwap5min = market.marketStats.historicalOracleData.lastOraclePriceTwap5Min;
272
278
  const basis5min = markPrice5minTwap.sub(lastOraclePriceTwap5min);
273
279
  const oraclePlusBasis5min = oraclePrice.add(basis5min);
274
- // Calculate funding basis
280
+ // Leg B: oracle + decayed funding basis
275
281
  const lastFundingBasis = getLastFundingBasis(market, oraclePrice, now);
276
282
  const oraclePlusFundingBasis = oraclePrice.add(lastFundingBasis);
283
+ // No fill yet or last fill is stale: oracle price stands in for Leg A
277
284
  const prices = [
278
- lastFillPrice.gt(numericConstants_1.ZERO) ? lastFillPrice : oraclePrice,
285
+ lastFillPrice.gt(numericConstants_1.ZERO) && lastFillIsFresh ? lastFillPrice : oraclePrice,
279
286
  oraclePlusFundingBasis,
280
287
  oraclePlusBasis5min,
281
288
  ].sort((a, b) => a.cmp(b));
@@ -294,11 +301,11 @@ function getLastFundingBasis(market, oraclePrice, now) {
294
301
  .div(market.marketStats.lastFundingOracleTwap)
295
302
  .muln(24);
296
303
  const lastFundingRatePreAdj = lastFundingRate.sub(numericConstants_1.FUNDING_RATE_OFFSET_PERCENTAGE);
297
- const timeLeftUntilFundingUpdate = anchor_1.BN.min(anchor_1.BN.max(now.sub(market.lastFundingRateTs), numericConstants_1.ZERO), market.marketStats.fundingPeriod);
304
+ const timeSinceFundingUpdate = anchor_1.BN.min(anchor_1.BN.max(now.sub(market.lastFundingRateTs), numericConstants_1.ZERO), market.marketStats.fundingPeriod);
298
305
  const lastFundingBasis = oraclePrice
299
306
  .mul(lastFundingRatePreAdj)
300
307
  .div(numericConstants_1.PERCENTAGE_PRECISION)
301
- .mul(market.marketStats.fundingPeriod.sub(timeLeftUntilFundingUpdate))
308
+ .mul(market.marketStats.fundingPeriod.sub(timeSinceFundingUpdate))
302
309
  .div(market.marketStats.fundingPeriod)
303
310
  .div(new anchor_1.BN(1000)); // FUNDING_RATE_BUFFER
304
311
  return lastFundingBasis;
@@ -312,17 +319,17 @@ function getLastFundingBasis(market, oraclePrice, now) {
312
319
  * Implements the same logic as the Rust clamp_trigger_price function
313
320
  */
314
321
  function clampTriggerPrice(market, oraclePrice, medianPrice) {
315
- let maxBpsDiff;
322
+ let clampDivisor;
316
323
  const tier = market.contractTier;
317
324
  if ((0, types_1.isVariant)(tier, 'a') || (0, types_1.isVariant)(tier, 'b')) {
318
- maxBpsDiff = new anchor_1.BN(500); // 20 BPS
325
+ clampDivisor = new anchor_1.BN(500); // oracle / 500 = 20 bps
319
326
  }
320
327
  else if ((0, types_1.isVariant)(tier, 'c')) {
321
- maxBpsDiff = new anchor_1.BN(100); // 100 BPS
328
+ clampDivisor = new anchor_1.BN(100); // oracle / 100 = 100 bps
322
329
  }
323
330
  else {
324
- maxBpsDiff = new anchor_1.BN(40); // 250 BPS
331
+ clampDivisor = new anchor_1.BN(40); // oracle / 40 = 250 bps
325
332
  }
326
- const maxOracleDiff = oraclePrice.div(maxBpsDiff);
333
+ const maxOracleDiff = oraclePrice.div(clampDivisor);
327
334
  return anchor_1.BN.min(anchor_1.BN.max(medianPrice, oraclePrice.sub(maxOracleDiff)), oraclePrice.add(maxOracleDiff));
328
335
  }
@@ -88,7 +88,7 @@ export declare function isMarkOracleTooDivergent(priceSpreadPct: BN, oracleGuard
88
88
  * @param period TWAP window length in seconds — pass `FIVE_MINUTE` for the 5-minute TWAP, otherwise the funding period is assumed.
89
89
  * @returns Live-projected oracle TWAP, PRICE_PRECISION (1e6).
90
90
  */
91
- export declare function calculateLiveOracleTwap(histOracleData: HistoricalOracleData, oraclePriceData: OraclePriceData, now: BN, period: BN): BN;
91
+ export declare function calculateLiveOracleTwap(histOracleData: HistoricalOracleData, oraclePriceData: Pick<OraclePriceData, 'price'>, now: BN, period: BN): BN;
92
92
  /**
93
93
  * Live-projected oracle price standard deviation, combining the live oracle price's
94
94
  * deviation from the freshly-projected 1hr and 5min TWAPs with the decayed stored
@@ -98,7 +98,7 @@ export declare function calculateLiveOracleTwap(histOracleData: HistoricalOracle
98
98
  * @param now Current unix timestamp (seconds).
99
99
  * @returns Live oracle price standard deviation, PRICE_PRECISION (1e6).
100
100
  */
101
- export declare function calculateLiveOracleStd(marketStats: MarketStats, oraclePriceData: OraclePriceData, now: BN): BN;
101
+ export declare function calculateLiveOracleStd(marketStats: MarketStats, oraclePriceData: Pick<OraclePriceData, 'price'>, now: BN): BN;
102
102
  /**
103
103
  * Live-projected oracle confidence interval as a fraction of `reservePrice`, floored by a
104
104
  * decaying lower bound derived from the market's last stored confidence (so confidence
@@ -111,7 +111,7 @@ export declare function calculateLiveOracleStd(marketStats: MarketStats, oracleP
111
111
  * @param now Current unix timestamp (seconds).
112
112
  * @returns Oracle confidence as a fraction of price, BID_ASK_SPREAD_PRECISION (1e6).
113
113
  */
114
- export declare function getNewOracleConfPct(marketStats: MarketStats, oraclePriceData: OraclePriceData, reservePrice: BN, now: BN): BN;
114
+ export declare function getNewOracleConfPct(marketStats: MarketStats, oraclePriceData: Pick<OraclePriceData, 'confidence'>, reservePrice: BN, now: BN): BN;
115
115
  /**
116
116
  * Returns the scale factor to convert a price quoted under `firstOracleSource` into the
117
117
  * equivalent price under `secondOracleSource`, for the Pyth Lazer "scaled" variants
@@ -1 +1 @@
1
- {"version":3,"file":"oracles.d.ts","sourceRoot":"","sources":["../../../src/math/oracles.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EAGjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYnD,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,CAUV;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CACjD,MAAM,EAAE,iBAAiB,GACvB,EAAE,CAcJ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,EAAE,EACR,qBAAqB,KAAO,GAC1B,cAAc,CAwEhB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,GACV,OAAO,CAmCT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAWT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACvC,cAAc,EAAE,EAAE,EAClB,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAMT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,oBAAoB,EACpC,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,EAAE,EACP,MAAM,EAAE,EAAE,GACR,EAAE,CA6BJ;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACrC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,GAAG,EAAE,EAAE,GACL,EAAE,CAkCJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,YAAY,EAAE,EAAE,EAChB,GAAG,EAAE,EAAE,GACL,EAAE,CAwBJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC9C,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,GAC9B;IAAE,SAAS,EAAE,EAAE,CAAC;IAAC,WAAW,EAAE,EAAE,CAAA;CAAE,CA+CpC"}
1
+ {"version":3,"file":"oracles.d.ts","sourceRoot":"","sources":["../../../src/math/oracles.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,cAAc,EACd,iBAAiB,EAGjB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAYnD,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAE1C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,GAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,CAUV;AAED;;;;;;;GAOG;AACH,wBAAgB,kCAAkC,CACjD,MAAM,EAAE,iBAAiB,GACvB,EAAE,CAcJ;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAChC,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,EAAE,EACR,qBAAqB,KAAO,GAC1B,cAAc,CAwEhB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,iBAAiB,EACzB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,EAClC,IAAI,EAAE,MAAM,GACV,OAAO,CAmCT;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,eAAe,EAChC,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAWT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACvC,cAAc,EAAE,EAAE,EAClB,gBAAgB,EAAE,gBAAgB,GAChC,OAAO,CAMT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACtC,cAAc,EAAE,oBAAoB,EACpC,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAC/C,GAAG,EAAE,EAAE,EACP,MAAM,EAAE,EAAE,GACR,EAAE,CA6BJ;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CACrC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAC/C,GAAG,EAAE,EAAE,GACL,EAAE,CAkCJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAClC,WAAW,EAAE,WAAW,EACxB,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,YAAY,CAAC,EACpD,YAAY,EAAE,EAAE,EAChB,GAAG,EAAE,EAAE,GACL,EAAE,CAwBJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC9C,iBAAiB,EAAE,YAAY,EAC/B,kBAAkB,EAAE,YAAY,GAC9B;IAAE,SAAS,EAAE,EAAE,CAAC;IAAC,WAAW,EAAE,EAAE,CAAA;CAAE,CA+CpC"}
@@ -89,7 +89,7 @@ export declare function calculateBaseAssetAmountForAmmToFulfill(order: Order, ma
89
89
  * @param mmOraclePriceData Current MM oracle price data.
90
90
  * @returns Fillable base asset amount up to the limit price, BASE_PRECISION (1e9).
91
91
  */
92
- export declare function calculateBaseAssetAmountToFillUpToLimitPrice(order: Order, amm: AMM, marketStats: MarketStats, orderStepSize: BN, orderTickSize: BN, limitPrice: BN, mmOraclePriceData: MMOraclePriceData): BN;
92
+ export declare function calculateBaseAssetAmountToFillUpToLimitPrice(order: Order, amm: AMM, marketStats: MarketStats, orderStepSize: BN, orderTickSize: BN, limitPrice: BN, mmOraclePriceData: Pick<MMOraclePriceData, 'price' | 'confidence'>): BN;
93
93
  /**
94
94
  * True if `order.maxTs` has passed as of `ts`. Never true for trigger orders, non-`open`
95
95
  * orders, or orders with no expiry (`maxTs == 0`).
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/math/orders.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/math/orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,iBAAiB,EACjB,GAAG,EACH,WAAW,EACX,KAAK,EACL,iBAAiB,EACjB,aAAa,EAEb,YAAY,EACZ,MAAM,UAAU,CAAC;AAOlB,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAatE,mYAAmY;AACnY,wBAAgB,0BAA0B,CACzC,eAAe,EAAE,EAAE,EACnB,QAAQ,EAAE,EAAE,GACV,EAAE,CAGJ;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,EAAE,EACT,QAAQ,EAAE,EAAE,EACZ,SAAS,EAAE,iBAAiB,GAC1B,EAAE,CAsBJ;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,aAAa,EACpD,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,CAAC,SAAS,MAAM,GAAG,eAAe,GAAG,iBAAiB,EACvE,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,EAAE,EAClB,QAAQ,GAAE,EAAQ,GAChB,EAAE,GAAG,SAAS,CAgBhB;AAED,mJAAmJ;AACnJ,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMjE;AAED,oGAAoG;AACpG,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAKnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC/B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,YAAY,GACjB,OAAO,CAiBT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,CAAC,EAAE,OAAO,GACrB,OAAO,CAcT;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uCAAuC,CACtD,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,EAAE,MAAM,GACV,EAAE,CAoCJ;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,4CAA4C,CAC3D,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,EAAE,EACjB,aAAa,EAAE,EAAE,EACjB,UAAU,EAAE,EAAE,EACd,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,YAAY,CAAC,GAChE,EAAE,CA8BJ;AAYD;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC7B,KAAK,EAAE,KAAK,EACZ,EAAE,EAAE,MAAM,EACV,aAAa,UAAQ,EACrB,aAAa,SAAK,GAChB,OAAO,CAiBT;AAED,2EAA2E;AAC3E,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEnD;AAED,8DAA8D;AAC9D,wBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAElD;AAED,0HAA0H;AAC1H,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAErD;AAED,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAKjD;AAED,0JAA0J;AAC1J,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMvE;AAED,0HAA0H;AAC1H,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEtD;AAED,iJAAiJ;AACjJ,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAEhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,KAAK,EACZ,uBAAuB,EAAE,EAAE,GACzB,EAAE,CAaJ;AAGD;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,EAAE,EACV,SAAS,EAAE,EAAE,EACb,eAAe,EAAE,EAAE,EACnB,MAAM,EAAE,iBAAiB,GACvB,EAAE,GAAG,IAAI,CAsDX"}
@@ -241,6 +241,19 @@ export declare function calculateWithdrawLimit(spotMarket: SpotMarketAccount, no
241
241
  currentDepositAmount: BN;
242
242
  currentBorrowAmount: BN;
243
243
  };
244
+ /**
245
+ * Mirror of the program's `calculate_max_deposit_token_amount`. Returns the max
246
+ * resulting deposit token amount permitted by the daily deposit cap: growth up
247
+ * to `maxDepositBpsPerDay` above the 24h deposit TWAP, but never below the
248
+ * deposit guard threshold. Returns null when the cap is disabled (pct == 0).
249
+ */
250
+ export declare function calculateMaxDepositTokenAmount(depositTokenTwap: BN, depositGuardThreshold: BN, maxDepositBpsPerDay: number): BN | null;
251
+ /**
252
+ * Mirror of the program's `check_deposit_limits`. Returns true if the market's
253
+ * current deposit level is within the daily deposit cap (always true when the
254
+ * cap is disabled).
255
+ */
256
+ export declare function checkDepositLimits(spotMarket: SpotMarketAccount): boolean;
244
257
  /**
245
258
  * Calculates the margin-weighted value of a spot deposit, mirroring the asset-side of the
246
259
  * program's collateral valuation (`get_strict_token_value` + `get_asset_weight`). Uses the
@@ -1 +1 @@
1
- {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/math/spotBalance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spotBalance.d.ts","sourceRoot":"","sources":["../../../src/math/spotBalance.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSpotLiabilityValue = exports.getSpotAssetValue = exports.calculateWithdrawLimit = exports.calculateTokenUtilizationLimits = exports.calculateInterestAccumulated = exports.calculateBorrowRate = exports.calculateDepositRate = exports.calculateInterestRate = exports.calculateSpotMarketBorrowCapacity = exports.calculateUtilization = exports.calculateLiabilityWeight = exports.calculateScaledInitialAssetWeight = exports.calculateAssetWeight = exports.getTokenValue = exports.getStrictTokenValue = exports.getSignedTokenAmount = exports.getTokenAmount = exports.getBalance = void 0;
3
+ exports.getSpotLiabilityValue = exports.getSpotAssetValue = exports.checkDepositLimits = exports.calculateMaxDepositTokenAmount = exports.calculateWithdrawLimit = exports.calculateTokenUtilizationLimits = exports.calculateInterestAccumulated = exports.calculateBorrowRate = exports.calculateDepositRate = exports.calculateInterestRate = exports.calculateSpotMarketBorrowCapacity = exports.calculateUtilization = exports.calculateLiabilityWeight = exports.calculateScaledInitialAssetWeight = exports.calculateAssetWeight = exports.getTokenValue = exports.getStrictTokenValue = exports.getSignedTokenAmount = exports.getTokenAmount = exports.getBalance = void 0;
4
4
  const types_1 = require("../types");
5
5
  const anchor_1 = require("../isomorphic/anchor");
6
6
  const numericConstants_1 = require("../constants/numericConstants");
@@ -571,7 +571,14 @@ function calculateWithdrawLimit(spotMarket, now) {
571
571
  else {
572
572
  maxBorrowTokensTwap = anchor_1.BN.max(spotMarket.withdrawGuardThreshold, anchor_1.BN.min(anchor_1.BN.max(lesserDepositAmount.div(new anchor_1.BN(2)), borrowTokenTwapLive.add(lesserDepositAmount.div(new anchor_1.BN(3)))), lesserDepositAmount.sub(lesserDepositAmount.div(new anchor_1.BN(20))))); // isolated pools between 50-95% utilization with friction on twap in 33% increments
573
573
  }
574
- const minDepositTokensTwap = depositTokenTwapLive.sub(anchor_1.BN.max(depositTokenTwapLive.div(new anchor_1.BN(4)), anchor_1.BN.min(spotMarket.withdrawGuardThreshold, depositTokenTwapLive)));
574
+ // 0 is treated as the default 25% (2500 bps) so markets created before the
575
+ // field existed keep prior behavior (mirrors calculate_min_deposit_token_amount).
576
+ // withdrawCircuitBreakerBps is in basis points (BPS_PRECISION = 10_000 = 100%).
577
+ const breakerPct = spotMarket.withdrawCircuitBreakerBps === 0
578
+ ? numericConstants_2.BPS_PRECISION.divn(4)
579
+ : new anchor_1.BN(spotMarket.withdrawCircuitBreakerBps);
580
+ const maxDrop = depositTokenTwapLive.mul(breakerPct).div(numericConstants_2.BPS_PRECISION);
581
+ const minDepositTokensTwap = depositTokenTwapLive.sub(anchor_1.BN.max(maxDrop, anchor_1.BN.min(spotMarket.withdrawGuardThreshold, depositTokenTwapLive)));
575
582
  const { minDepositTokensForUtilization, maxBorrowTokensForUtilization } = calculateTokenUtilizationLimits(marketDepositTokenAmount, marketBorrowTokenAmount, spotMarket);
576
583
  const minDepositTokens = anchor_1.BN.max(minDepositTokensForUtilization, minDepositTokensTwap);
577
584
  let maxBorrowTokens = anchor_1.BN.min(maxBorrowTokensForUtilization, maxBorrowTokensTwap);
@@ -599,6 +606,40 @@ function calculateWithdrawLimit(spotMarket, now) {
599
606
  };
600
607
  }
601
608
  exports.calculateWithdrawLimit = calculateWithdrawLimit;
609
+ /**
610
+ * Mirror of the program's `calculate_max_deposit_token_amount`. Returns the max
611
+ * resulting deposit token amount permitted by the daily deposit cap: growth up
612
+ * to `maxDepositBpsPerDay` above the 24h deposit TWAP, but never below the
613
+ * deposit guard threshold. Returns null when the cap is disabled (pct == 0).
614
+ */
615
+ function calculateMaxDepositTokenAmount(depositTokenTwap, depositGuardThreshold, maxDepositBpsPerDay) {
616
+ if (maxDepositBpsPerDay === 0) {
617
+ return null; // disabled
618
+ }
619
+ // maxDepositBpsPerDay is in basis points (BPS_PRECISION = 10_000 = 100%).
620
+ const maxIncrease = depositTokenTwap
621
+ .mul(new anchor_1.BN(maxDepositBpsPerDay))
622
+ .div(numericConstants_2.BPS_PRECISION);
623
+ return anchor_1.BN.max(depositTokenTwap.add(maxIncrease), depositGuardThreshold);
624
+ }
625
+ exports.calculateMaxDepositTokenAmount = calculateMaxDepositTokenAmount;
626
+ /**
627
+ * Mirror of the program's `check_deposit_limits`. Returns true if the market's
628
+ * current deposit level is within the daily deposit cap (always true when the
629
+ * cap is disabled).
630
+ */
631
+ function checkDepositLimits(spotMarket) {
632
+ if (spotMarket.maxDepositBpsPerDay === 0) {
633
+ return true;
634
+ }
635
+ const depositTokenAmount = getTokenAmount(spotMarket.depositBalance, spotMarket, types_1.SpotBalanceType.DEPOSIT);
636
+ const maxDepositToken = calculateMaxDepositTokenAmount(spotMarket.depositTokenTwap, spotMarket.depositGuardThreshold, spotMarket.maxDepositBpsPerDay);
637
+ if (maxDepositToken === null) {
638
+ return true;
639
+ }
640
+ return depositTokenAmount.lte(maxDepositToken);
641
+ }
642
+ exports.checkDepositLimits = checkDepositLimits;
602
643
  /**
603
644
  * Calculates the margin-weighted value of a spot deposit, mirroring the asset-side of the
604
645
  * program's collateral valuation (`get_strict_token_value` + `get_asset_weight`). Uses the
@@ -1 +1 @@
1
- {"version":3,"file":"testClient.d.ts","sourceRoot":"","sources":["../../src/testClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,UAAW,SAAQ,WAAW;gBACvB,MAAM,EAAE,oBAAoB;IAQzC,eAAe,CACpB,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,EACrB,SAAS,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,YAAY,CAAC;CAqBxB"}
1
+ {"version":3,"file":"testClient.d.ts","sourceRoot":"","sources":["../../src/testClient.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,qBAAa,UAAW,SAAQ,WAAW;gBACvB,MAAM,EAAE,oBAAoB;IAoBzC,eAAe,CACpB,EAAE,EAAE,WAAW,EACf,iBAAiB,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,EACjC,IAAI,CAAC,EAAE,cAAc,EACrB,SAAS,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,YAAY,CAAC;CAqBxB"}
@@ -4,11 +4,22 @@ exports.TestClient = void 0;
4
4
  const adminClient_1 = require("./adminClient");
5
5
  class TestClient extends adminClient_1.AdminClient {
6
6
  constructor(config) {
7
- var _a;
7
+ var _a, _b, _c;
8
8
  config.txVersion = 'legacy';
9
9
  if (((_a = config.accountSubscription) === null || _a === void 0 ? void 0 : _a.type) !== 'polling') {
10
10
  throw new Error('Test client must be polling');
11
11
  }
12
+ // Blockhash caching keys its TTL off the wall clock, which is incompatible
13
+ // with bankrun's simulated clock: within a single 2s wall-clock window the
14
+ // bankrun validator advances many slots (and its blockhash), so a cached
15
+ // blockhash goes stale and sequential builds collide into identical
16
+ // transactions ("already processed") or reference an expired blockhash
17
+ // ("Blockhash not found"). There is also no real RPC to save in bankrun.
18
+ // Force fresh fetches unless a test explicitly opts back in.
19
+ config.txHandlerConfig = {
20
+ ...config.txHandlerConfig,
21
+ blockhashCachingEnabled: (_c = (_b = config.txHandlerConfig) === null || _b === void 0 ? void 0 : _b.blockhashCachingEnabled) !== null && _c !== void 0 ? _c : false,
22
+ };
12
23
  super(config);
13
24
  }
14
25
  async sendTransaction(tx, additionalSigners, opts, preSigned) {
@@ -37,7 +37,13 @@ export type TxBuildingProps = {
37
37
  };
38
38
  /** Configuration for `TxHandler`'s blockhash-fetching strategy. */
39
39
  export type TxHandlerConfig = {
40
- /** If `true`, use a `CachedBlockhashFetcher` (reduces RPC calls during bursts of tx construction); otherwise fetch fresh every time via `BaseBlockhashFetcher`. */
40
+ /**
41
+ * Blockhash-fetching strategy. Defaults to `true`: a `CachedBlockhashFetcher`
42
+ * reuses a recent blockhash for `RECENT_BLOCKHASH_STALE_TIME_MS` (2s) to avoid a
43
+ * `getLatestBlockhash` RPC call on every transaction build — this is safe because a
44
+ * blockhash stays valid on-chain far longer than the cache TTL. Set to `false` to
45
+ * force a fresh RPC fetch on every build via `BaseBlockhashFetcher`.
46
+ */
41
47
  blockhashCachingEnabled?: boolean;
42
48
  /** Tuning for `CachedBlockhashFetcher` when `blockhashCachingEnabled` is `true`; each field defaults if omitted (see `BLOCKHASH_FETCH_RETRY_COUNT`/`BLOCKHASH_FETCH_RETRY_SLEEP`/`RECENT_BLOCKHASH_STALE_TIME_MS`). */
43
49
  blockhashCachingConfig?: {
@@ -1 +1 @@
1
- {"version":3,"file":"txHandler.d.ts","sourceRoot":"","sources":["../../../src/tx/txHandler.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"txHandler.d.ts","sourceRoot":"","sources":["../../../src/tx/txHandler.ts"],"names":[],"mappings":"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"}
@@ -64,9 +64,13 @@ class TxHandler {
64
64
  this.confirmationOptions = props.confirmationOptions;
65
65
  this.blockhashCommitment =
66
66
  (_f = (_e = (_c = (_b = props.confirmationOptions) === null || _b === void 0 ? void 0 : _b.preflightCommitment) !== null && _c !== void 0 ? _c : (_d = props === null || props === void 0 ? void 0 : props.connection) === null || _d === void 0 ? void 0 : _d.commitment) !== null && _e !== void 0 ? _e : this.blockhashCommitment) !== null && _f !== void 0 ? _f : 'confirmed';
67
- this.blockHashFetcher = ((_g = props === null || props === void 0 ? void 0 : props.config) === null || _g === void 0 ? void 0 : _g.blockhashCachingEnabled)
68
- ? new cachedBlockhashFetcher_1.CachedBlockhashFetcher(this.connection, this.blockhashCommitment, (_k = (_j = (_h = props === null || props === void 0 ? void 0 : props.config) === null || _h === void 0 ? void 0 : _h.blockhashCachingConfig) === null || _j === void 0 ? void 0 : _j.retryCount) !== null && _k !== void 0 ? _k : BLOCKHASH_FETCH_RETRY_COUNT, (_o = (_m = (_l = props === null || props === void 0 ? void 0 : props.config) === null || _l === void 0 ? void 0 : _l.blockhashCachingConfig) === null || _m === void 0 ? void 0 : _m.retrySleepTimeMs) !== null && _o !== void 0 ? _o : BLOCKHASH_FETCH_RETRY_SLEEP, (_r = (_q = (_p = props === null || props === void 0 ? void 0 : props.config) === null || _p === void 0 ? void 0 : _p.blockhashCachingConfig) === null || _q === void 0 ? void 0 : _q.staleCacheTimeMs) !== null && _r !== void 0 ? _r : RECENT_BLOCKHASH_STALE_TIME_MS)
69
- : new baseBlockhashFetcher_1.BaseBlockhashFetcher(this.connection, this.blockhashCommitment);
67
+ // Cache by default: only opt out when a consumer explicitly disables it. This
68
+ // collapses per-build `getLatestBlockhash` RPC calls (crankers dominate these)
69
+ // into at most one fetch per staleCacheTimeMs window.
70
+ this.blockHashFetcher =
71
+ ((_g = props === null || props === void 0 ? void 0 : props.config) === null || _g === void 0 ? void 0 : _g.blockhashCachingEnabled) === false
72
+ ? new baseBlockhashFetcher_1.BaseBlockhashFetcher(this.connection, this.blockhashCommitment)
73
+ : new cachedBlockhashFetcher_1.CachedBlockhashFetcher(this.connection, this.blockhashCommitment, (_k = (_j = (_h = props === null || props === void 0 ? void 0 : props.config) === null || _h === void 0 ? void 0 : _h.blockhashCachingConfig) === null || _j === void 0 ? void 0 : _j.retryCount) !== null && _k !== void 0 ? _k : BLOCKHASH_FETCH_RETRY_COUNT, (_o = (_m = (_l = props === null || props === void 0 ? void 0 : props.config) === null || _l === void 0 ? void 0 : _l.blockhashCachingConfig) === null || _m === void 0 ? void 0 : _m.retrySleepTimeMs) !== null && _o !== void 0 ? _o : BLOCKHASH_FETCH_RETRY_SLEEP, (_r = (_q = (_p = props === null || props === void 0 ? void 0 : props.config) === null || _p === void 0 ? void 0 : _p.blockhashCachingConfig) === null || _q === void 0 ? void 0 : _q.staleCacheTimeMs) !== null && _r !== void 0 ? _r : RECENT_BLOCKHASH_STALE_TIME_MS);
70
74
  // #Optionals
71
75
  this.returnBlockHeightsWithSignedTxCallbackData =
72
76
  (_t = (_s = props.opts) === null || _s === void 0 ? void 0 : _s.returnBlockHeightsWithSignedTxCallbackData) !== null && _t !== void 0 ? _t : false;
@@ -1207,6 +1207,8 @@ export type PerpMarketAccount = {
1207
1207
  feePoolBufferTarget: BN;
1208
1208
  /** PERCENTAGE_PRECISION (1e6 = 100%); fraction of OI notional (at the oracle TWAP) the sweep leaves behind in `feeLedger.pendingIfFee` as a standing bankruptcy first-loss tranche; 0 disables */
1209
1209
  bankruptcyIfFloorPct: number;
1210
+ /** QUOTE_PRECISION (1e6); aggregate builder/referrer revenue share accrued but not yet paid out of this market's pnl pool. The fee sweep reserves it (like `max(net_user_pnl, 0)` and the floored IF tranche) so a protocol-fee drain can't leave accrued revenue-share claims temporarily unpayable */
1211
+ pendingRevenueShare: BN;
1210
1212
  /** MARGIN_PRECISION (1e4); scales margin ratio up for large positions */
1211
1213
  imfFactor: number;
1212
1214
  /** MARGIN_PRECISION (1e4); discounts positive-unrealized-pnl asset weight for large positions */
@@ -1357,6 +1359,10 @@ export type SpotMarketAccount = {
1357
1359
  protocolLiquidationFee: number;
1358
1360
  /** IF_FACTOR_PRECISION (1e6); protocol's carveout of lending deposit-interest gains */
1359
1361
  protocolFeeFactor: number;
1362
+ /** token mint precision; IF vault balance recorded at the last revenue settle, used as a
1363
+ * donation-proof base for the per-period revenue-settle APR cap (see `settle_revenue_to_insurance_fund`);
1364
+ * `0` = uninitialized (pre-upgrade accounts, seeded on first settle) */
1365
+ ifLastSettleVaultAmount: BN;
1360
1366
  /** token mint decimals; token-mint precision throughout this account is 10^decimals */
1361
1367
  decimals: number;
1362
1368
  /** SPOT_UTILIZATION_PRECISION (1e6) */
@@ -1439,6 +1445,9 @@ export type SpotMarketAccount = {
1439
1445
  poolId: number;
1440
1446
  /** -100 to 100; percentage adjustment applied to the base fee rate */
1441
1447
  feeAdjustment: number;
1448
+ depositGuardThreshold: BN;
1449
+ withdrawCircuitBreakerBps: number;
1450
+ maxDepositBpsPerDay: number;
1442
1451
  };
1443
1452
  /** A scaled token balance inside a market's internal pools (pnl pool, protocol fee pool, revenue pool, spot fee pool, AMM fee pool). Multiply `scaledBalance` (SPOT_BALANCE_PRECISION, 1e9) by the referenced spot market's `cumulativeDepositInterest`/`cumulativeBorrowInterest` to get the token amount. */
1444
1453
  export type PoolBalance = {