@suilend/sdk 13.5.0-next.g96be2bf → 13.5.0-next.gb1383fa
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/package.json +1 -1
- package/utils/simulate.d.ts +1 -0
- package/utils/simulate.js +21 -6
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@suilend/sdk","version":"13.5.0-next.
|
|
1
|
+
{"name":"@suilend/sdk","version":"13.5.0-next.gb1383fa","private":false,"description":"A TypeScript SDK for interacting with the Suilend program","author":"Suilend","license":"MIT","main":"./index.js","exports":{".":"./index.js","./client":"./client.js","./mmt":"./mmt.js","./strategies":"./strategies.js","./api/events":"./api/events.js","./api":"./api/index.js","./lib/constants":"./lib/constants.js","./lib":"./lib/index.js","./lib/initialize":"./lib/initialize.js","./lib/liquidityMining":"./lib/liquidityMining.js","./lib/proCompatible":"./lib/proCompatible.js","./lib/pyth":"./lib/pyth.js","./lib/strategyOwnerCap":"./lib/strategyOwnerCap.js","./lib/transactions":"./lib/transactions.js","./lib/types":"./lib/types.js","./margin":"./margin/index.js","./parsers/apiReserveAssetDataEvent":"./parsers/apiReserveAssetDataEvent.js","./parsers":"./parsers/index.js","./parsers/lendingMarket":"./parsers/lendingMarket.js","./parsers/obligation":"./parsers/obligation.js","./parsers/rateLimiter":"./parsers/rateLimiter.js","./parsers/reserve":"./parsers/reserve.js","./swap":"./swap/index.js","./swap/quote":"./swap/quote.js","./swap/transaction":"./swap/transaction.js","./utils/events":"./utils/events.js","./utils/feedId":"./utils/feedId.js","./utils":"./utils/index.js","./utils/interpolate":"./utils/interpolate.js","./utils/obligation":"./utils/obligation.js","./utils/priceGuard":"./utils/priceGuard.js","./utils/simulate":"./utils/simulate.js","./_generated/_envs":"./_generated/_envs/index.js","./_generated/_envs/mainnet":"./_generated/_envs/mainnet.js","./_generated/_framework/env":"./_generated/_framework/env.js","./_generated/_framework/reified":"./_generated/_framework/reified.js","./_generated/_framework/util":"./_generated/_framework/util.js","./_generated/_framework/vector":"./_generated/_framework/vector.js","./_generated/suilend":"./_generated/suilend/index.js","./margin/margin/admin_cap":"./margin/margin/admin_cap.js","./margin/margin/market":"./margin/margin/market.js","./margin/margin/permissions":"./margin/margin/permissions.js","./margin/margin/position":"./margin/margin/position.js","./margin/margin/router":"./margin/margin/router.js","./margin/margin/version":"./margin/margin/version.js","./margin/utils":"./margin/utils/index.js","./_generated/suilend/cell/structs":"./_generated/suilend/cell/structs.js","./_generated/suilend/decimal/structs":"./_generated/suilend/decimal/structs.js","./_generated/suilend/lending-market/functions":"./_generated/suilend/lending-market/functions.js","./_generated/suilend/lending-market/structs":"./_generated/suilend/lending-market/structs.js","./_generated/suilend/lending-market-registry/functions":"./_generated/suilend/lending-market-registry/functions.js","./_generated/suilend/liquidity-mining/structs":"./_generated/suilend/liquidity-mining/structs.js","./_generated/suilend/obligation/structs":"./_generated/suilend/obligation/structs.js","./_generated/suilend/rate-limiter/functions":"./_generated/suilend/rate-limiter/functions.js","./_generated/suilend/rate-limiter/structs":"./_generated/suilend/rate-limiter/structs.js","./_generated/suilend/reserve/structs":"./_generated/suilend/reserve/structs.js","./_generated/suilend/reserve-config/functions":"./_generated/suilend/reserve-config/functions.js","./_generated/suilend/reserve-config/structs":"./_generated/suilend/reserve-config/structs.js","./_generated/_dependencies/pyth-2/price-identifier/structs":"./_generated/_dependencies/pyth-2/price-identifier/structs.js","./_generated/_dependencies/std/ascii/structs":"./_generated/_dependencies/std/ascii/structs.js","./_generated/_dependencies/std/option/structs":"./_generated/_dependencies/std/option/structs.js","./_generated/_dependencies/std/type-name/structs":"./_generated/_dependencies/std/type-name/structs.js","./_generated/_dependencies/sui/bag/structs":"./_generated/_dependencies/sui/bag/structs.js","./_generated/_dependencies/sui/balance/structs":"./_generated/_dependencies/sui/balance/structs.js","./_generated/_dependencies/sui/object/structs":"./_generated/_dependencies/sui/object/structs.js","./_generated/_dependencies/sui/object-table/structs":"./_generated/_dependencies/sui/object-table/structs.js","./margin/margin/deps/std/type_name":"./margin/margin/deps/std/type_name.js","./margin/margin/deps/sui/vec_set":"./margin/margin/deps/sui/vec_set.js","./margin/margin/deps/suilend/lending_market":"./margin/margin/deps/suilend/lending_market.js"},"types":"./index.d.ts","scripts":{"codegen":"node ./codegen.js","codegen:install":"node ./install-codegen.js","build":"rm -rf ./dist && tsc && node ./fix-esm-imports.js","typecheck":"tsc --noEmit && tsc --noEmit -p tsconfig.test.json","test":"vitest run","lint:ci":"yarn run typecheck","prettier":"prettier --write src/ tests/","release":"yarn run build && node ./release.js && cd ./dist && npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/fireflyprotocol/lending-mono.git","directory":"ts/sdks/sdk"},"dependencies":{"@bluefin-exchange/bluefin7k-aggregator-sdk":"7.7.0","@cetusprotocol/aggregator-sdk":"1.7.3","@flowx-finance/sdk":"2.1.0","@pythnetwork/hermes-client":"3.1.0","@pythnetwork/pyth-sui-js":"4.0.0","@suilend/springsui-sdk":"4.1.0","bignumber.js":"11.1.5","bn.js":"5.2.5","crypto-js":"4.2.0","lodash":"4.18.1","p-limit":"7.3.3","uuid":"14.0.2"},"devDependencies":{"@mysten/bcs":"2.1.2","@mysten/sui":"2.35.0","@suilend/sui-core":"2.2.0","@tsconfig/recommended":"1.0.13","@types/bn.js":"5.2.0","@types/lodash":"4.17.25","@types/node":"26.6.4","fast-check":"4.10.2","prettier":"3.9.9","ts-node":"10.9.2","typescript":"6.0.3","vite":"8.3.2","vitest":"5.0.3"},"peerDependencies":{"@mysten/bcs":"^2.1.1","@mysten/sui":">=2.31.3 <3","@suilend/sui-core":"^2.0.1"},"type":"module"}
|
package/utils/simulate.d.ts
CHANGED
|
@@ -39,6 +39,7 @@ export interface FeedPrice {
|
|
|
39
39
|
conf?: number;
|
|
40
40
|
}
|
|
41
41
|
export declare const feedConfidenceOf: (reserve: Reserve<string>) => BigNumber | undefined;
|
|
42
|
+
export declare const withUnclampedPrices: (reserve: Reserve<string>, price: Decimal, smoothedPrice: Decimal) => Reserve<string>;
|
|
42
43
|
/**
|
|
43
44
|
* A source of latest prices. Structural on purpose: any object with this method
|
|
44
45
|
* qualifies, so a caller can inject its own client (authenticated, failover,
|
package/utils/simulate.js
CHANGED
|
@@ -120,6 +120,19 @@ export const updatePoolRewardsManager = (manager, nowMs) => {
|
|
|
120
120
|
return updatedManager;
|
|
121
121
|
};
|
|
122
122
|
export const feedConfidenceOf = (reserve) => reserve.feedConfidence;
|
|
123
|
+
export const withUnclampedPrices = (reserve, price, smoothedPrice) => Object.assign(Object.create(Object.getPrototypeOf(reserve)), reserve, {
|
|
124
|
+
unclampedPrices: { price, smoothedPrice },
|
|
125
|
+
});
|
|
126
|
+
/** Mirrors reserve.move's `price_range`. */
|
|
127
|
+
const priceRange = (reserve) => {
|
|
128
|
+
const unclamped = reserve.unclampedPrices;
|
|
129
|
+
const prices = [
|
|
130
|
+
reserve.price,
|
|
131
|
+
reserve.smoothedPrice,
|
|
132
|
+
...(unclamped ? [unclamped.price, unclamped.smoothedPrice] : []),
|
|
133
|
+
].map(decimalToBigNumber);
|
|
134
|
+
return { low: BigNumber.min(...prices), high: BigNumber.max(...prices) };
|
|
135
|
+
};
|
|
123
136
|
// Re-exported, not redefined: it was part of this module's public surface before
|
|
124
137
|
// it moved to ./feedId, and every consumer that normalizes a feed id to compare
|
|
125
138
|
// it against `unpricedCoinTypes` imports it from here.
|
|
@@ -161,6 +174,7 @@ const withFeedPrice = (reserve, priceFeed) => {
|
|
|
161
174
|
newReserve.priceLastUpdateTimestampS = BigInt(priceFeed.publishTimeS);
|
|
162
175
|
newReserve.feedConfidence =
|
|
163
176
|
priceFeed.conf === undefined ? undefined : new BigNumber(priceFeed.conf);
|
|
177
|
+
newReserve.unclampedPrices = undefined;
|
|
164
178
|
return newReserve;
|
|
165
179
|
};
|
|
166
180
|
export const reservePriceFeedIds = (reserves) => Array.from(new Set(reserves.map(reserveFeedId)));
|
|
@@ -416,9 +430,11 @@ confidenceByCoinType) {
|
|
|
416
430
|
.multipliedBy(decimalToBigNumber(reserve.price))
|
|
417
431
|
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|
|
418
432
|
const confidence = resolveConfidence(normalizedConfidence?.get(normalizeStructTag(unrefreshedBorrow.coinType)), reserve);
|
|
433
|
+
const { low, high } = priceRange(reserve);
|
|
419
434
|
const upperBoundPrice = confidence !== undefined
|
|
420
|
-
? applyConfidenceMargin(
|
|
421
|
-
|
|
435
|
+
? applyConfidenceMargin(low, high, confidence.conf, confidence.kBps)
|
|
436
|
+
.upperBound
|
|
437
|
+
: high;
|
|
422
438
|
// `exactBorrowedAmount` (this borrow's own amount), not
|
|
423
439
|
// `reserve.borrowedAmount`: the reserve field is the whole reserve's
|
|
424
440
|
// debt, so using it would scale every borrower's upper bound by total
|
|
@@ -500,11 +516,10 @@ export const getCTokenMarketValueLowerBound = (reserve, depositedCTokenAmount,
|
|
|
500
516
|
// min(price, smoothedPrice) lower bound.
|
|
501
517
|
conf, kBps) => {
|
|
502
518
|
const liquidityAmount = depositedCTokenAmount.multipliedBy(cTokenRatio(reserve));
|
|
503
|
-
const
|
|
504
|
-
const smoothedPrice = reserve.smoothedPrice;
|
|
519
|
+
const { low, high } = priceRange(reserve);
|
|
505
520
|
const lowerBoundPrice = conf !== undefined && kBps !== undefined
|
|
506
|
-
? applyConfidenceMargin(
|
|
507
|
-
:
|
|
521
|
+
? applyConfidenceMargin(low, high, conf, kBps).lowerBound
|
|
522
|
+
: low;
|
|
508
523
|
return lowerBoundPrice
|
|
509
524
|
.multipliedBy(liquidityAmount)
|
|
510
525
|
.dividedBy(new BigNumber(10 ** reserve.mintDecimals));
|