@velocity-exchange/sdk 0.6.1 → 0.7.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/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/idl/velocity.d.ts +1 -1
- package/lib/browser/idl/velocity.json +1 -1
- package/lib/browser/math/amm.d.ts +8 -8
- package/lib/browser/math/funding.d.ts +2 -2
- 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/testClient.js +12 -1
- package/lib/browser/tx/txHandler.d.ts +7 -1
- package/lib/browser/tx/txHandler.js +7 -3
- 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/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/idl/velocity.d.ts +1 -1
- package/lib/node/idl/velocity.json +1 -1
- 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/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/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/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/package.json +1 -1
|
@@ -3,12 +3,21 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BlockhashSubscriber = void 0;
|
|
4
4
|
const web3_js_1 = require("@solana/web3.js");
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
* A blockhash is valid for signing until 150 blocks after the block it was
|
|
7
|
+
* fetched from, so `getLatestBlockhash`'s `lastValidBlockHeight` is exactly
|
|
8
|
+
* `(block height of that blockhash) + 150`. Subtracting this offset recovers
|
|
9
|
+
* the current block height without a second RPC call.
|
|
10
|
+
*/
|
|
11
|
+
const BLOCKHASH_VALIDITY_BLOCKS = 150;
|
|
12
|
+
/**
|
|
13
|
+
* BlockhashSubscriber — polls `getLatestBlockhashAndContext` on a fixed
|
|
14
|
+
* interval and caches a short history of recent blockhashes, so callers can
|
|
15
|
+
* grab a recent blockhash for transaction building without an RPC round-trip
|
|
16
|
+
* per transaction. The current block height is derived from the same response
|
|
17
|
+
* (`lastValidBlockHeight - 150`), so no paired `getBlockHeight` call is made.
|
|
18
|
+
* Nothing is populated until `subscribe()` (or a manual `updateBlockhash()`)
|
|
19
|
+
* has completed at least once — all getters return `undefined`/empty before
|
|
20
|
+
* then.
|
|
12
21
|
*/
|
|
13
22
|
class BlockhashSubscriber {
|
|
14
23
|
/**
|
|
@@ -34,9 +43,9 @@ class BlockhashSubscriber {
|
|
|
34
43
|
* @returns The block height as of the most recent successful poll, or
|
|
35
44
|
* `undefined` if `subscribe()`/`updateBlockhash()` has not yet completed
|
|
36
45
|
* successfully at least once (including if every poll so far has errored).
|
|
37
|
-
* This value is
|
|
38
|
-
*
|
|
39
|
-
* blockhash slot, only "recent as of the last poll".
|
|
46
|
+
* This value is derived from the latest blockhash fetch
|
|
47
|
+
* (`lastValidBlockHeight - 150`) — it is not guaranteed to be perfectly in
|
|
48
|
+
* sync with the blockhash slot, only "recent as of the last poll".
|
|
40
49
|
*/
|
|
41
50
|
getLatestBlockHeight() {
|
|
42
51
|
return this.latestBlockHeight;
|
|
@@ -69,22 +78,22 @@ class BlockhashSubscriber {
|
|
|
69
78
|
}
|
|
70
79
|
}
|
|
71
80
|
/**
|
|
72
|
-
* Fetches the latest blockhash and
|
|
73
|
-
*
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* `
|
|
81
|
+
* Fetches the latest blockhash and appends it to the cache (skipped if it's
|
|
82
|
+
* identical to the most-recently-cached one), then prunes expired entries.
|
|
83
|
+
* The current block height is derived from the same response
|
|
84
|
+
* (`lastValidBlockHeight - 150`) rather than a paired `getBlockHeight` call.
|
|
85
|
+
* Errors (e.g. RPC failure) are caught and logged, not thrown — on error,
|
|
86
|
+
* `latestBlockHeight` is left at its previous value, but `pruneBlockhashes()`
|
|
87
|
+
* still runs in a `finally` block and may evict entries that expired in the
|
|
88
|
+
* meantime.
|
|
78
89
|
*/
|
|
79
90
|
async updateBlockhash() {
|
|
80
91
|
try {
|
|
81
|
-
const
|
|
82
|
-
this.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
]);
|
|
87
|
-
this.latestBlockHeight = lastConfirmedBlockHeight;
|
|
92
|
+
const resp = await this.connection.getLatestBlockhashAndContext({
|
|
93
|
+
commitment: this.commitment,
|
|
94
|
+
});
|
|
95
|
+
this.latestBlockHeight =
|
|
96
|
+
resp.value.lastValidBlockHeight - BLOCKHASH_VALIDITY_BLOCKS;
|
|
88
97
|
this.latestBlockHeightContext = resp.context;
|
|
89
98
|
// avoid caching duplicate blockhashes
|
|
90
99
|
if (this.blockhashes.length > 0) {
|
|
@@ -102,6 +102,8 @@ export declare const FUNDING_RATE_CLAMP_DENOMINATOR: BN;
|
|
|
102
102
|
export declare const PRICE_TIMES_AMM_TO_QUOTE_PRECISION_RATIO: BN;
|
|
103
103
|
/** 300 seconds. */
|
|
104
104
|
export declare const FIVE_MINUTE: BN;
|
|
105
|
+
/** Max age of the last fill before the trigger price's last-fill leg is treated as absent (oracle price substitutes). */
|
|
106
|
+
export declare const TRIGGER_PRICE_LAST_FILL_MAX_AGE: BN;
|
|
105
107
|
/** 3600 seconds. */
|
|
106
108
|
export declare const ONE_HOUR: BN;
|
|
107
109
|
/** 31,536,000 seconds (365 days). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"numericConstants.d.ts","sourceRoot":"","sources":["../../../src/constants/numericConstants.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"numericConstants.d.ts","sourceRoot":"","sources":["../../../src/constants/numericConstants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MARGIN_PRECISION = exports.AMM_TIMES_PEG_TO_QUOTE_PRECISION_RATIO = exports.PRICE_TO_QUOTE_PRECISION = exports.PRICE_DIV_PEG = exports.AMM_TO_QUOTE_PRECISION_RATIO = exports.BASE_PRECISION_EXP = exports.BASE_PRECISION = exports.AMM_RESERVE_PRECISION = exports.PEG_PRECISION = exports.FUNDING_RATE_BUFFER_PRECISION = exports.FUNDING_RATE_PRECISION = exports.PRICE_PRECISION = exports.QUOTE_PRECISION = exports.LIQUIDATION_FEE_PRECISION = exports.SPOT_MARKET_IMF_PRECISION = exports.SPOT_MARKET_IMF_PRECISION_EXP = exports.SPOT_MARKET_BALANCE_PRECISION = exports.SPOT_MARKET_BALANCE_PRECISION_EXP = exports.SPOT_MARKET_WEIGHT_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION = exports.SPOT_MARKET_UTILIZATION_PRECISION_EXP = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION = exports.SPOT_MARKET_CUMULATIVE_INTEREST_PRECISION_EXP = exports.SPOT_MARKET_RATE_PRECISION = exports.SPOT_MARKET_RATE_PRECISION_EXP = exports.AMM_RESERVE_PRECISION_EXP = exports.PEG_PRECISION_EXP = exports.FUNDING_RATE_PRECISION_EXP = exports.PRICE_PRECISION_EXP = exports.FUNDING_RATE_BUFFER_PRECISION_EXP = exports.QUOTE_PRECISION_EXP = exports.CONCENTRATION_PRECISION = exports.PERCENTAGE_PRECISION = exports.PERCENTAGE_PRECISION_EXP = exports.MAX_LEVERAGE_ORDER_SIZE = exports.MAX_LEVERAGE = exports.TEN_MILLION = exports.BN_MAX = exports.TEN_THOUSAND = exports.TEN = exports.NINE = exports.EIGHT = exports.SEVEN = exports.SIX = exports.FIVE = exports.FOUR = exports.THREE = exports.TWO = exports.ONE = exports.ZERO = void 0;
|
|
4
|
-
exports.MIN_I64 = exports.MAX_I64 = exports.GET_MULTIPLE_ACCOUNTS_CHUNK_SIZE = exports.MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN = exports.DUST_POSITION_SIZE = exports.SLOT_TIME_ESTIMATE_MS = exports.IDLE_TIME_SLOTS = exports.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = exports.OPEN_ORDER_MARGIN_REQUIREMENT = exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.ONE_HOUR = exports.FIVE_MINUTE = exports.PRICE_TIMES_AMM_TO_QUOTE_PRECISION_RATIO = exports.FUNDING_RATE_CLAMP_DENOMINATOR = exports.FUNDING_RATE_OFFSET_PERCENTAGE = exports.FUNDING_RATE_OFFSET_DENOMINATOR = exports.LIQUIDATION_PCT_PRECISION = exports.BID_ASK_SPREAD_PRECISION = exports.BPS_PRECISION = void 0;
|
|
4
|
+
exports.MIN_I64 = exports.MAX_I64 = exports.GET_MULTIPLE_ACCOUNTS_CHUNK_SIZE = exports.MAX_POSITIVE_UPNL_FOR_INITIAL_MARGIN = exports.DUST_POSITION_SIZE = exports.SLOT_TIME_ESTIMATE_MS = exports.IDLE_TIME_SLOTS = exports.ACCOUNT_AGE_DELETION_CUTOFF_SECONDS = exports.DEFAULT_REVENUE_SINCE_LAST_FUNDING_SPREAD_RETREAT = exports.OPEN_ORDER_MARGIN_REQUIREMENT = exports.LAMPORTS_EXP = exports.LAMPORTS_PRECISION = exports.QUOTE_SPOT_MARKET_INDEX = exports.ONE_YEAR = exports.ONE_HOUR = exports.TRIGGER_PRICE_LAST_FILL_MAX_AGE = exports.FIVE_MINUTE = exports.PRICE_TIMES_AMM_TO_QUOTE_PRECISION_RATIO = exports.FUNDING_RATE_CLAMP_DENOMINATOR = exports.FUNDING_RATE_OFFSET_PERCENTAGE = exports.FUNDING_RATE_OFFSET_DENOMINATOR = exports.LIQUIDATION_PCT_PRECISION = exports.BID_ASK_SPREAD_PRECISION = exports.BPS_PRECISION = void 0;
|
|
5
5
|
const web3_js_1 = require("@solana/web3.js");
|
|
6
6
|
const anchor_1 = require("../isomorphic/anchor");
|
|
7
7
|
/** Precision constants used throughout the SDK. Each mirrors an on-chain fixed-point scale — a raw `BN` amount at that precision represents `amount / 10^exponent` in human units (e.g. `PRICE_PRECISION` = 1e6, so a raw price of `1_500_000` is `$1.50`). Values must stay numerically identical to the Rust program's `math::constants` — a mismatch here silently mis-scales every derived SDK computation. */
|
|
@@ -107,6 +107,8 @@ exports.FUNDING_RATE_CLAMP_DENOMINATOR = new anchor_1.BN(2000);
|
|
|
107
107
|
exports.PRICE_TIMES_AMM_TO_QUOTE_PRECISION_RATIO = exports.PRICE_PRECISION.mul(exports.AMM_TO_QUOTE_PRECISION_RATIO);
|
|
108
108
|
/** 300 seconds. */
|
|
109
109
|
exports.FIVE_MINUTE = new anchor_1.BN(60 * 5);
|
|
110
|
+
/** Max age of the last fill before the trigger price's last-fill leg is treated as absent (oracle price substitutes). */
|
|
111
|
+
exports.TRIGGER_PRICE_LAST_FILL_MAX_AGE = exports.FIVE_MINUTE;
|
|
110
112
|
/** 3600 seconds. */
|
|
111
113
|
exports.ONE_HOUR = new anchor_1.BN(60 * 60);
|
|
112
114
|
/** 31,536,000 seconds (365 days). */
|
package/lib/node/math/amm.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export declare function calculatePegFromTargetPrice(targetPrice: BN, baseAssetRe
|
|
|
29
29
|
* available to spend, QUOTE_PRECISION (1e6); `checkLowerBound` tells the caller whether it
|
|
30
30
|
* must still verify the repeg doesn't push `totalFeeMinusDistributions` negative.
|
|
31
31
|
*/
|
|
32
|
-
export declare function calculateOptimalPegAndBudget(amm: AMM, mmOraclePriceData: MMOraclePriceData): [BN, BN, BN, boolean];
|
|
32
|
+
export declare function calculateOptimalPegAndBudget(amm: AMM, mmOraclePriceData: Pick<MMOraclePriceData, 'price'>): [BN, BN, BN, boolean];
|
|
33
33
|
/**
|
|
34
34
|
* Determines the full curve update (repeg cost, K scale factor, new peg) for `amm` against
|
|
35
35
|
* the current oracle price, mirroring the "use full budget peg" fallback path of `adjust_amm`
|
|
@@ -46,7 +46,7 @@ export declare function calculateOptimalPegAndBudget(amm: AMM, mmOraclePriceData
|
|
|
46
46
|
* `calculateUpdatedAMM` whether it must still verify affordability against
|
|
47
47
|
* `totalFeeMinusDistributions`.
|
|
48
48
|
*/
|
|
49
|
-
export declare function calculateNewAmm(amm: AMM, mmOraclePriceData: MMOraclePriceData): [BN, BN, BN, BN, boolean];
|
|
49
|
+
export declare function calculateNewAmm(amm: AMM, mmOraclePriceData: Pick<MMOraclePriceData, 'price'>): [BN, BN, BN, BN, boolean];
|
|
50
50
|
/**
|
|
51
51
|
* Returns a copy of `amm` with its curve (peg, reserves, sqrtK) repegged/updated to the
|
|
52
52
|
* current oracle price, or `amm` unchanged if no update applies. Mirrors the program's
|
|
@@ -63,7 +63,7 @@ export declare function calculateNewAmm(amm: AMM, mmOraclePriceData: MMOraclePri
|
|
|
63
63
|
* @param mmOraclePriceData Current MM oracle price data; omit to skip the update entirely.
|
|
64
64
|
* @returns Updated `AMM` (new object), or the original `amm` reference if no update applies or the affordability gate rejects it.
|
|
65
65
|
*/
|
|
66
|
-
export declare function calculateUpdatedAMM(amm: AMM, mmOraclePriceData?: MMOraclePriceData): AMM;
|
|
66
|
+
export declare function calculateUpdatedAMM(amm: AMM, mmOraclePriceData?: Pick<MMOraclePriceData, 'price'>): AMM;
|
|
67
67
|
/**
|
|
68
68
|
* Repegs `amm` to the current oracle price (`calculateUpdatedAMM`) and returns the
|
|
69
69
|
* one-sided spread reserves (bid reserves for `short`, ask reserves for `long`) plus the
|
|
@@ -76,7 +76,7 @@ export declare function calculateUpdatedAMM(amm: AMM, mmOraclePriceData?: MMOrac
|
|
|
76
76
|
* @param latestSlot Current slot, forwarded for reference-price-offset smoothing.
|
|
77
77
|
* @returns `baseAssetReserve`/`quoteAssetReserve` for the requested side (AMM_RESERVE_PRECISION, 1e9), and the post-update `sqrtK`/`newPeg` (AMM_RESERVE_PRECISION 1e9 / PEG_PRECISION 1e6).
|
|
78
78
|
*/
|
|
79
|
-
export declare function calculateUpdatedAMMSpreadReserves(amm: AMM, marketStats: MarketStats, direction: PositionDirection, mmOraclePriceData?: MMOraclePriceData, latestSlot?: BN): {
|
|
79
|
+
export declare function calculateUpdatedAMMSpreadReserves(amm: AMM, marketStats: MarketStats, direction: PositionDirection, mmOraclePriceData?: Pick<MMOraclePriceData, 'price' | 'confidence'>, latestSlot?: BN): {
|
|
80
80
|
baseAssetReserve: BN;
|
|
81
81
|
quoteAssetReserve: BN;
|
|
82
82
|
sqrtK: BN;
|
|
@@ -92,7 +92,7 @@ export declare function calculateUpdatedAMMSpreadReserves(amm: AMM, marketStats:
|
|
|
92
92
|
* @param latestSlot Current slot, forwarded for reference-price-offset smoothing.
|
|
93
93
|
* @returns `[bidPrice, askPrice]`, both PRICE_PRECISION (1e6).
|
|
94
94
|
*/
|
|
95
|
-
export declare function calculateBidAskPrice(amm: AMM, marketStats: MarketStats, mmOraclePriceData?: MMOraclePriceData, withUpdate?: boolean, latestSlot?: BN): [BN, BN];
|
|
95
|
+
export declare function calculateBidAskPrice(amm: AMM, marketStats: MarketStats, mmOraclePriceData?: Pick<MMOraclePriceData, 'price' | 'confidence'>, withUpdate?: boolean, latestSlot?: BN): [BN, BN];
|
|
96
96
|
/**
|
|
97
97
|
* Computes the constant-product price implied by a pair of AMM reserves and a peg multiplier:
|
|
98
98
|
* `quoteAssetReserves * pegMultiplier / baseAssetReserves`, converted to `PRICE_PRECISION`.
|
|
@@ -338,7 +338,7 @@ export declare function calculateSpreadBN(baseSpread: number, lastOracleReserveP
|
|
|
338
338
|
* @throws if `oraclePriceData` is omitted while `baseSpread` and `curveUpdateIntensity` are both nonzero.
|
|
339
339
|
* @returns `[longSpread, shortSpread]`, both BID_ASK_SPREAD_PRECISION (1e6) fraction-of-price units.
|
|
340
340
|
*/
|
|
341
|
-
export declare function calculateSpread(amm: AMM, marketStats: MarketStats, oraclePriceData?: OraclePriceData, now?: BN, reservePrice?: BN): [number, number];
|
|
341
|
+
export declare function calculateSpread(amm: AMM, marketStats: MarketStats, oraclePriceData?: Pick<OraclePriceData, 'price' | 'confidence'>, now?: BN, reservePrice?: BN): [number, number];
|
|
342
342
|
/**
|
|
343
343
|
* Computes the AMM's one-sided bid and ask reserves — the reserves a long (ask side) or short
|
|
344
344
|
* (bid side) trade would actually execute against — by combining `calculateSpread`'s
|
|
@@ -357,7 +357,7 @@ export declare function calculateSpread(amm: AMM, marketStats: MarketStats, orac
|
|
|
357
357
|
* @param latestSlot Current slot; required for reference-price-offset smoothing to take effect (treated as 0 slots elapsed if omitted).
|
|
358
358
|
* @returns `[bidReserves, askReserves]`, each `{ baseAssetReserve, quoteAssetReserve }` in AMM_RESERVE_PRECISION (1e9).
|
|
359
359
|
*/
|
|
360
|
-
export declare function calculateSpreadReserves(amm: AMM, marketStats: MarketStats, mmOraclePriceData?: MMOraclePriceData, now?: BN, latestSlot?: BN): {
|
|
360
|
+
export declare function calculateSpreadReserves(amm: AMM, marketStats: MarketStats, mmOraclePriceData?: Pick<MMOraclePriceData, 'price' | 'confidence'>, now?: BN, latestSlot?: BN): {
|
|
361
361
|
baseAssetReserve: BN;
|
|
362
362
|
quoteAssetReserve: BN;
|
|
363
363
|
}[];
|
|
@@ -407,7 +407,7 @@ export declare function calculateTerminalPrice(market: PerpMarketAccount): BN;
|
|
|
407
407
|
* @param now Current unix timestamp (seconds), forwarded to `calculateSpreadReserves`.
|
|
408
408
|
* @returns `[baseAssetAmount, direction]`: `baseAssetAmount` is AMM_RESERVE_PRECISION (1e9), zero if the trade size would round to nothing.
|
|
409
409
|
*/
|
|
410
|
-
export declare function calculateMaxBaseAssetAmountToTrade(amm: AMM, marketStats: MarketStats, limit_price: BN, direction: PositionDirection, mmOraclePriceData: MMOraclePriceData, now?: BN): [BN, PositionDirection];
|
|
410
|
+
export declare function calculateMaxBaseAssetAmountToTrade(amm: AMM, marketStats: MarketStats, limit_price: BN, direction: PositionDirection, mmOraclePriceData: Pick<MMOraclePriceData, 'price' | 'confidence'>, now?: BN): [BN, PositionDirection];
|
|
411
411
|
/**
|
|
412
412
|
* Converts a quote-asset AMM reserve amount into the actual quote asset amount swapped
|
|
413
413
|
* (applying the peg multiplier), rounding by 1 in the direction that favors the AMM when
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../../src/math/amm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAkB1C,OAAO,EACN,GAAG,EACH,WAAW,EACX,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EAEjB,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAStE;;;;;;;;GAQG;AACH,wBAAgB,2BAA2B,CAC1C,WAAW,EAAE,EAAE,EACf,gBAAgB,EAAE,EAAE,EACpB,iBAAiB,EAAE,EAAE,GACnB,EAAE,CASJ;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,4BAA4B,CAC3C,GAAG,EAAE,GAAG,EACR,iBAAiB,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"amm.d.ts","sourceRoot":"","sources":["../../../src/math/amm.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ import { MMOraclePriceData, OraclePriceData } from '../oracles/types';
|
|
|
26
26
|
* straight-line interpolation; `lowerboundEst` further scales the spread down by the
|
|
27
27
|
* fraction of the current funding period that has elapsed since the last update.
|
|
28
28
|
*/
|
|
29
|
-
export declare function calculateAllEstimatedFundingRate(market: PerpMarketAccount, mmOraclePriceData?: MMOraclePriceData, oraclePriceData?: OraclePriceData, markPrice?: BN, now?: BN): [BN, BN, BN, BN, BN];
|
|
29
|
+
export declare function calculateAllEstimatedFundingRate(market: PerpMarketAccount, mmOraclePriceData?: Pick<MMOraclePriceData, 'price' | 'confidence'>, oraclePriceData?: Pick<OraclePriceData, 'price'>, markPrice?: BN, now?: BN): [BN, BN, BN, BN, BN];
|
|
30
30
|
/**
|
|
31
31
|
* Calculates estimated funding rates in human-readable form (plain JS `number` percentages,
|
|
32
32
|
* not BN), including a plain-English summary sentence. Values pass through floating-point
|
|
@@ -68,7 +68,7 @@ export declare function calculateLongShortFundingRate(market: PerpMarketAccount,
|
|
|
68
68
|
* @param now Current unix timestamp (seconds); defaults to wall-clock time.
|
|
69
69
|
* @returns `[markTwapLive, oracleTwapLive, longFundingRateEst, shortFundingRateEst]` — TWAPs in PRICE_PRECISION (1e6), rate estimates in the same scale as `calculateAllEstimatedFundingRate`.
|
|
70
70
|
*/
|
|
71
|
-
export declare function calculateLongShortFundingRateAndLiveTwaps(market: PerpMarketAccount, mmOraclePriceData?: MMOraclePriceData, oraclePriceData?: OraclePriceData, markPrice?: BN, now?: BN): [BN, BN, BN, BN];
|
|
71
|
+
export declare function calculateLongShortFundingRateAndLiveTwaps(market: PerpMarketAccount, mmOraclePriceData?: MMOraclePriceData, oraclePriceData?: Pick<OraclePriceData, 'price'>, markPrice?: BN, now?: BN): [BN, BN, BN, BN];
|
|
72
72
|
/**
|
|
73
73
|
* Estimated quote pool available to top up the smaller side's funding payment shortfall:
|
|
74
74
|
* one-third of the AMM's own retained equity (`totalFeeMinusDistributions`), floored at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../../src/math/funding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAY1C,OAAO,EAAE,iBAAiB,EAAa,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAoHtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"funding.d.ts","sourceRoot":"","sources":["../../../src/math/funding.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAY1C,OAAO,EAAE,iBAAiB,EAAa,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAoHtE;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,OAAO,GAAG,YAAY,CAAC,EACnE,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAChD,SAAS,CAAC,EAAE,EAAE,EACd,GAAG,CAAC,EAAE,EAAE,GACN,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CA8ItB;AAiBD;;;;;;;;;;GAUG;AACH,wBAAgB,iCAAiC,CAChD,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,MAAM,EAAE,MAAM,GAAG,MAAM,GACrB;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,2BAA2B,EAAE,MAAM,CAAC;CACpC,CAoDA;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAgB,6BAA6B,CAC5C,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,eAAe,CAAC,EAAE,eAAe,EACjC,SAAS,CAAC,EAAE,EAAE,EACd,GAAG,CAAC,EAAE,EAAE,GACN,CAAC,EAAE,EAAE,EAAE,CAAC,CAgBV;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,yCAAyC,CACxD,MAAM,EAAE,iBAAiB,EACzB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,EAChD,SAAS,CAAC,EAAE,EAAE,EACd,GAAG,CAAC,EAAE,EAAE,GACN,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAiBlB;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,EAAE,CAQlE"}
|
|
@@ -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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"}
|
|
@@ -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/user.d.ts
CHANGED
|
@@ -957,8 +957,8 @@ export declare class User {
|
|
|
957
957
|
getPerpPositionHealth({ marginCategory, perpPosition, oraclePriceData, quoteOraclePriceData, includeOpenOrders, }: {
|
|
958
958
|
marginCategory: MarginCategory;
|
|
959
959
|
perpPosition: PerpPosition;
|
|
960
|
-
oraclePriceData?: OraclePriceData
|
|
961
|
-
quoteOraclePriceData?: OraclePriceData
|
|
960
|
+
oraclePriceData?: Pick<OraclePriceData, 'price'>;
|
|
961
|
+
quoteOraclePriceData?: Pick<OraclePriceData, 'price'>;
|
|
962
962
|
includeOpenOrders?: boolean;
|
|
963
963
|
}): HealthComponent;
|
|
964
964
|
/**
|