@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.
- package/lib/browser/adminClient.d.ts +24 -4
- package/lib/browser/adminClient.js +62 -12
- package/lib/browser/blockhashSubscriber/BlockhashSubscriber.d.ts +19 -15
- package/lib/browser/blockhashSubscriber/BlockhashSubscriber.js +31 -22
- package/lib/browser/constants/numericConstants.d.ts +2 -0
- package/lib/browser/constants/numericConstants.js +3 -1
- package/lib/browser/core/VelocityCore.d.ts +2 -0
- package/lib/browser/core/VelocityCore.js +1 -0
- package/lib/browser/core/instructions/trigger.d.ts +4 -0
- package/lib/browser/core/instructions/trigger.js +4 -0
- package/lib/browser/idl/velocity.d.ts +223 -33
- package/lib/browser/idl/velocity.json +224 -34
- package/lib/browser/math/amm.d.ts +8 -8
- package/lib/browser/math/funding.d.ts +2 -2
- package/lib/browser/math/liquidation.d.ts +37 -2
- package/lib/browser/math/liquidation.js +44 -3
- package/lib/browser/math/market.d.ts +5 -4
- package/lib/browser/math/market.js +21 -14
- package/lib/browser/math/oracles.d.ts +3 -3
- package/lib/browser/math/orders.d.ts +1 -1
- package/lib/browser/math/spotBalance.d.ts +13 -0
- package/lib/browser/math/spotBalance.js +43 -2
- package/lib/browser/testClient.js +12 -1
- package/lib/browser/tx/txHandler.d.ts +7 -1
- package/lib/browser/tx/txHandler.js +7 -3
- package/lib/browser/types.d.ts +9 -0
- package/lib/browser/user.d.ts +2 -2
- package/lib/browser/userMap/userMap.d.ts +1 -0
- package/lib/browser/userMap/userMap.js +3 -7
- package/lib/browser/velocityClient.d.ts +32 -20
- package/lib/browser/velocityClient.js +48 -23
- package/lib/node/adminClient.d.ts +24 -4
- package/lib/node/adminClient.d.ts.map +1 -1
- package/lib/node/adminClient.js +62 -12
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts +19 -15
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.d.ts.map +1 -1
- package/lib/node/blockhashSubscriber/BlockhashSubscriber.js +31 -22
- package/lib/node/constants/numericConstants.d.ts +2 -0
- package/lib/node/constants/numericConstants.d.ts.map +1 -1
- package/lib/node/constants/numericConstants.js +3 -1
- package/lib/node/core/VelocityCore.d.ts +2 -0
- package/lib/node/core/VelocityCore.d.ts.map +1 -1
- package/lib/node/core/VelocityCore.js +1 -0
- package/lib/node/core/instructions/trigger.d.ts +4 -0
- package/lib/node/core/instructions/trigger.d.ts.map +1 -1
- package/lib/node/core/instructions/trigger.js +4 -0
- package/lib/node/idl/velocity.d.ts +223 -33
- package/lib/node/idl/velocity.d.ts.map +1 -1
- package/lib/node/idl/velocity.json +224 -34
- package/lib/node/math/amm.d.ts +8 -8
- package/lib/node/math/amm.d.ts.map +1 -1
- package/lib/node/math/funding.d.ts +2 -2
- package/lib/node/math/funding.d.ts.map +1 -1
- package/lib/node/math/liquidation.d.ts +37 -2
- package/lib/node/math/liquidation.d.ts.map +1 -1
- package/lib/node/math/liquidation.js +44 -3
- package/lib/node/math/market.d.ts +5 -4
- package/lib/node/math/market.d.ts.map +1 -1
- package/lib/node/math/market.js +21 -14
- package/lib/node/math/oracles.d.ts +3 -3
- package/lib/node/math/oracles.d.ts.map +1 -1
- package/lib/node/math/orders.d.ts +1 -1
- package/lib/node/math/orders.d.ts.map +1 -1
- package/lib/node/math/spotBalance.d.ts +13 -0
- package/lib/node/math/spotBalance.d.ts.map +1 -1
- package/lib/node/math/spotBalance.js +43 -2
- package/lib/node/testClient.d.ts.map +1 -1
- package/lib/node/testClient.js +12 -1
- package/lib/node/tx/txHandler.d.ts +7 -1
- package/lib/node/tx/txHandler.d.ts.map +1 -1
- package/lib/node/tx/txHandler.js +7 -3
- package/lib/node/types.d.ts +9 -0
- package/lib/node/types.d.ts.map +1 -1
- package/lib/node/user.d.ts +2 -2
- package/lib/node/user.d.ts.map +1 -1
- package/lib/node/userMap/userMap.d.ts +1 -0
- package/lib/node/userMap/userMap.d.ts.map +1 -1
- package/lib/node/userMap/userMap.js +3 -7
- package/lib/node/velocityClient.d.ts +32 -20
- package/lib/node/velocityClient.d.ts.map +1 -1
- package/lib/node/velocityClient.js +48 -23
- 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
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* oracle price (tier A/B: 20bps,
|
|
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;
|
|
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"}
|
package/lib/node/math/market.js
CHANGED
|
@@ -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
|
|
248
|
-
*
|
|
249
|
-
*
|
|
250
|
-
* oracle price (tier A/B: 20bps,
|
|
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
|
-
|
|
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
|
-
//
|
|
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
|
|
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(
|
|
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
|
|
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
|
-
|
|
325
|
+
clampDivisor = new anchor_1.BN(500); // oracle / 500 = 20 bps
|
|
319
326
|
}
|
|
320
327
|
else if ((0, types_1.isVariant)(tier, 'c')) {
|
|
321
|
-
|
|
328
|
+
clampDivisor = new anchor_1.BN(100); // oracle / 100 = 100 bps
|
|
322
329
|
}
|
|
323
330
|
else {
|
|
324
|
-
|
|
331
|
+
clampDivisor = new anchor_1.BN(40); // oracle / 40 = 250 bps
|
|
325
332
|
}
|
|
326
|
-
const maxOracleDiff = oraclePrice.div(
|
|
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,
|
|
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":"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,iBAAiB,
|
|
1
|
+
{"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../../src/math/orders.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AAAA,OAAO,EACN,iBAAiB,EACjB,eAAe,EAEf,cAAc,EACd,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAgB1C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
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
|
-
|
|
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;
|
|
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"}
|
package/lib/node/testClient.js
CHANGED
|
@@ -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
|
-
/**
|
|
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":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EACN,yBAAyB,EACzB,8BAA8B,EAC9B,UAAU,EAEV,cAAc,EACd,UAAU,EAGV,MAAM,EACN,4BAA4B,EAC5B,WAAW,EACX,sBAAsB,EAEtB,kBAAkB,EAClB,oBAAoB,EACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAEN,2BAA2B,EAC3B,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,MAAM,UAAU,CAAC;AAqBlB,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAM7C,uGAAuG;AACvG,MAAM,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,sBAAsB,GAAG,sBAAsB,EAAE,CAAC;IAChE,qFAAqF;IACrF,SAAS,EAAE,kBAAkB,CAAC;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,yHAAyH;IACzH,mBAAmB,CAAC,EAAE,UAAU,CAAC;IACjC,mGAAmG;IACnG,iCAAiC,EAAE,MAAM,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC9E,2IAA2I;IAC3I,YAAY,CAAC,EAAE,yBAAyB,EAAE,CAAC;IAC3C,wIAAwI;IACxI,yBAAyB,CAAC,EAAE,OAAO,CAAC;IACpC,yFAAyF;IACzF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,0FAA0F;IAC1F,eAAe,CAAC,EAAE,8BAA8B,CAAC;IACjD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACvC,WAAW,CAAC,EAAE,4BAA4B,CAAC;CAC3C,CAAC;AAEF,mEAAmE;AACnE,MAAM,MAAM,eAAe,GAAG;IAC7B
|
|
1
|
+
{"version":3,"file":"txHandler.d.ts","sourceRoot":"","sources":["../../../src/tx/txHandler.ts"],"names":[],"mappings":"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"}
|
package/lib/node/tx/txHandler.js
CHANGED
|
@@ -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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
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;
|
package/lib/node/types.d.ts
CHANGED
|
@@ -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 = {
|