@zofai/zo-sdk 0.1.93 → 0.1.94
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/dist/consts/deployments-slp-mainnet.json +1 -1
- package/dist/consts/deployments-usdz-mainnet.json +1 -1
- package/dist/consts/deployments-zlp-mainnet.json +1 -1
- package/dist/implementations/SLPDataAPI.cjs +212 -47
- package/dist/implementations/SLPDataAPI.cjs.map +1 -1
- package/dist/implementations/SLPDataAPI.d.cts +8 -1
- package/dist/implementations/SLPDataAPI.d.cts.map +1 -1
- package/dist/implementations/SLPDataAPI.d.mts +8 -1
- package/dist/implementations/SLPDataAPI.d.mts.map +1 -1
- package/dist/implementations/SLPDataAPI.mjs +212 -47
- package/dist/implementations/SLPDataAPI.mjs.map +1 -1
- package/dist/implementations/USDZDataAPI.cjs +197 -44
- package/dist/implementations/USDZDataAPI.cjs.map +1 -1
- package/dist/implementations/USDZDataAPI.d.cts +8 -1
- package/dist/implementations/USDZDataAPI.d.cts.map +1 -1
- package/dist/implementations/USDZDataAPI.d.mts +8 -1
- package/dist/implementations/USDZDataAPI.d.mts.map +1 -1
- package/dist/implementations/USDZDataAPI.mjs +197 -44
- package/dist/implementations/USDZDataAPI.mjs.map +1 -1
- package/dist/implementations/ZLPDataAPI.cjs +200 -46
- package/dist/implementations/ZLPDataAPI.cjs.map +1 -1
- package/dist/implementations/ZLPDataAPI.d.cts +8 -1
- package/dist/implementations/ZLPDataAPI.d.cts.map +1 -1
- package/dist/implementations/ZLPDataAPI.d.mts +8 -1
- package/dist/implementations/ZLPDataAPI.d.mts.map +1 -1
- package/dist/implementations/ZLPDataAPI.mjs +200 -46
- package/dist/implementations/ZLPDataAPI.mjs.map +1 -1
- package/dist/interfaces/base.d.cts +22 -0
- package/dist/interfaces/base.d.cts.map +1 -1
- package/dist/interfaces/base.d.mts +22 -0
- package/dist/interfaces/base.d.mts.map +1 -1
- package/dist/interfaces/slp.d.cts +6 -1
- package/dist/interfaces/slp.d.cts.map +1 -1
- package/dist/interfaces/slp.d.mts +6 -1
- package/dist/interfaces/slp.d.mts.map +1 -1
- package/dist/interfaces/usdz.d.cts +6 -1
- package/dist/interfaces/usdz.d.cts.map +1 -1
- package/dist/interfaces/usdz.d.mts +6 -1
- package/dist/interfaces/usdz.d.mts.map +1 -1
- package/dist/interfaces/zlp.d.cts +6 -1
- package/dist/interfaces/zlp.d.cts.map +1 -1
- package/dist/interfaces/zlp.d.mts +6 -1
- package/dist/interfaces/zlp.d.mts.map +1 -1
- package/package.json +1 -1
- package/src/consts/deployments-slp-mainnet.json +1 -1
- package/src/consts/deployments-usdz-mainnet.json +1 -1
- package/src/consts/deployments-zlp-mainnet.json +1 -1
- package/src/implementations/SLPDataAPI.ts +235 -19
- package/src/implementations/USDZDataAPI.ts +221 -16
- package/src/implementations/ZLPDataAPI.ts +222 -17
- package/src/interfaces/base.ts +26 -0
- package/src/interfaces/slp.ts +6 -0
- package/src/interfaces/usdz.ts +6 -0
- package/src/interfaces/zlp.ts +6 -0
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extends base interfaces with USDZ-specific implementations
|
|
4
4
|
*/
|
|
5
5
|
import type { Transaction, TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
6
|
-
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo } from "./base.cjs";
|
|
6
|
+
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo, ISwapFeeBreakdown } from "./base.cjs";
|
|
7
7
|
export interface IUSDZMarketValuationInfo extends IBaseMarketValuationInfo {
|
|
8
8
|
/** Oracle price per vault token at valuation time (e.g. { sui: 1.5, usdc: 1.0 }) */
|
|
9
9
|
vaultPrices?: Record<string, number>;
|
|
@@ -67,6 +67,10 @@ export interface IUSDZOiFundingState {
|
|
|
67
67
|
enabled: boolean;
|
|
68
68
|
last_update: number;
|
|
69
69
|
model: IUSDZOiFundingModel;
|
|
70
|
+
/** OI cap for long side (optional; when set with maxOiShort, uses capped skew formula) */
|
|
71
|
+
maxOiLong?: number;
|
|
72
|
+
/** OI cap for short side (optional; when set with maxOiLong, uses capped skew formula) */
|
|
73
|
+
maxOiShort?: number;
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Price impact configuration for a trading symbol.
|
|
@@ -94,6 +98,7 @@ export interface IUSDZPriceImpactConfig {
|
|
|
94
98
|
export interface IUSDZDataAPI extends IBaseDataAPI {
|
|
95
99
|
getSymbolConfig: (indexToken: string, long: boolean) => Promise<IUSDZSymbolConfig | null>;
|
|
96
100
|
getPriceImpactConfig: (indexToken: string) => Promise<IUSDZPriceImpactConfig | null>;
|
|
101
|
+
calculateSwapFeeBreakdown: (fromToken: string, toToken: string, fromAmount: number) => Promise<ISwapFeeBreakdown>;
|
|
97
102
|
}
|
|
98
103
|
export interface IUSDZAPI extends IBaseAPI {
|
|
99
104
|
depositPtb: (coin: string, coinObjects: string[], amount: number, minAmountOut?: number, referralAddress?: string, sender?: string, tx?: Transaction, sponsoredTx?: boolean, suiCoinObjectsForPythUpdate?: string[]) => Promise<TransactionObjectArgument>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usdz.d.cts","sourceRoot":"","sources":["../../src/interfaces/usdz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,iCAAgC;AAEtF,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"usdz.d.cts","sourceRoot":"","sources":["../../src/interfaces/usdz.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extends base interfaces with USDZ-specific implementations
|
|
4
4
|
*/
|
|
5
5
|
import type { Transaction, TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
6
|
-
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo } from "./base.mjs";
|
|
6
|
+
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo, ISwapFeeBreakdown } from "./base.mjs";
|
|
7
7
|
export interface IUSDZMarketValuationInfo extends IBaseMarketValuationInfo {
|
|
8
8
|
/** Oracle price per vault token at valuation time (e.g. { sui: 1.5, usdc: 1.0 }) */
|
|
9
9
|
vaultPrices?: Record<string, number>;
|
|
@@ -67,6 +67,10 @@ export interface IUSDZOiFundingState {
|
|
|
67
67
|
enabled: boolean;
|
|
68
68
|
last_update: number;
|
|
69
69
|
model: IUSDZOiFundingModel;
|
|
70
|
+
/** OI cap for long side (optional; when set with maxOiShort, uses capped skew formula) */
|
|
71
|
+
maxOiLong?: number;
|
|
72
|
+
/** OI cap for short side (optional; when set with maxOiLong, uses capped skew formula) */
|
|
73
|
+
maxOiShort?: number;
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Price impact configuration for a trading symbol.
|
|
@@ -94,6 +98,7 @@ export interface IUSDZPriceImpactConfig {
|
|
|
94
98
|
export interface IUSDZDataAPI extends IBaseDataAPI {
|
|
95
99
|
getSymbolConfig: (indexToken: string, long: boolean) => Promise<IUSDZSymbolConfig | null>;
|
|
96
100
|
getPriceImpactConfig: (indexToken: string) => Promise<IUSDZPriceImpactConfig | null>;
|
|
101
|
+
calculateSwapFeeBreakdown: (fromToken: string, toToken: string, fromAmount: number) => Promise<ISwapFeeBreakdown>;
|
|
97
102
|
}
|
|
98
103
|
export interface IUSDZAPI extends IBaseAPI {
|
|
99
104
|
depositPtb: (coin: string, coinObjects: string[], amount: number, minAmountOut?: number, referralAddress?: string, sender?: string, tx?: Transaction, sponsoredTx?: boolean, suiCoinObjectsForPythUpdate?: string[]) => Promise<TransactionObjectArgument>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usdz.d.mts","sourceRoot":"","sources":["../../src/interfaces/usdz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,iCAAgC;AAEtF,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"usdz.d.mts","sourceRoot":"","sources":["../../src/interfaces/usdz.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extends base interfaces with ZLP-specific implementations
|
|
4
4
|
*/
|
|
5
5
|
import type { Transaction, TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
6
|
-
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo } from "./base.cjs";
|
|
6
|
+
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo, ISwapFeeBreakdown } from "./base.cjs";
|
|
7
7
|
export interface IZLPMarketValuationInfo extends IBaseMarketValuationInfo {
|
|
8
8
|
/** Oracle price per vault token at valuation time (e.g. { sui: 1.5, usdc: 1.0 }) */
|
|
9
9
|
vaultPrices?: Record<string, number>;
|
|
@@ -67,6 +67,10 @@ export interface IZLPOiFundingState {
|
|
|
67
67
|
enabled: boolean;
|
|
68
68
|
last_update: number;
|
|
69
69
|
model: IZLPOiFundingModel;
|
|
70
|
+
/** OI cap for long side (optional; when set with maxOiShort, uses capped skew formula) */
|
|
71
|
+
maxOiLong?: number;
|
|
72
|
+
/** OI cap for short side (optional; when set with maxOiLong, uses capped skew formula) */
|
|
73
|
+
maxOiShort?: number;
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Price impact configuration for a trading symbol.
|
|
@@ -94,6 +98,7 @@ export interface IZLPPriceImpactConfig {
|
|
|
94
98
|
export interface IZLPDataAPI extends IBaseDataAPI {
|
|
95
99
|
getSymbolConfig: (indexToken: string, long: boolean) => Promise<IZLPSymbolConfig | null>;
|
|
96
100
|
getPriceImpactConfig: (indexToken: string) => Promise<IZLPPriceImpactConfig | null>;
|
|
101
|
+
calculateSwapFeeBreakdown: (fromToken: string, toToken: string, fromAmount: number) => Promise<ISwapFeeBreakdown>;
|
|
97
102
|
}
|
|
98
103
|
export interface IZLPAPI extends IBaseAPI {
|
|
99
104
|
adminIssueLootbox: (coin: string, tiers: number[], beneficiaries: string[], amounts: number[], tx: Transaction) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zlp.d.cts","sourceRoot":"","sources":["../../src/interfaces/zlp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,iCAAgC;AAEtF,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"zlp.d.cts","sourceRoot":"","sources":["../../src/interfaces/zlp.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Extends base interfaces with ZLP-specific implementations
|
|
4
4
|
*/
|
|
5
5
|
import type { Transaction, TransactionObjectArgument } from "@mysten/sui/transactions";
|
|
6
|
-
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo } from "./base.mjs";
|
|
6
|
+
import type { IBaseAPI, IBaseCredential, IBaseDataAPI, IBaseFundingFeeModel, IBaseHistory, IBaseMarketInfo, IBaseMarketValuationInfo, IBaseOrderCapInfo, IBaseOrderInfo, IBasePositionCapInfo, IBasePositionConfig, IBasePositionInfo, IBaseRebaseFeeModel, IBaseReservingFeeModel, IBaseStakePool, IBaseSymbolInfo, IBaseVaultInfo, ISwapFeeBreakdown } from "./base.mjs";
|
|
7
7
|
export interface IZLPMarketValuationInfo extends IBaseMarketValuationInfo {
|
|
8
8
|
/** Oracle price per vault token at valuation time (e.g. { sui: 1.5, usdc: 1.0 }) */
|
|
9
9
|
vaultPrices?: Record<string, number>;
|
|
@@ -67,6 +67,10 @@ export interface IZLPOiFundingState {
|
|
|
67
67
|
enabled: boolean;
|
|
68
68
|
last_update: number;
|
|
69
69
|
model: IZLPOiFundingModel;
|
|
70
|
+
/** OI cap for long side (optional; when set with maxOiShort, uses capped skew formula) */
|
|
71
|
+
maxOiLong?: number;
|
|
72
|
+
/** OI cap for short side (optional; when set with maxOiLong, uses capped skew formula) */
|
|
73
|
+
maxOiShort?: number;
|
|
70
74
|
}
|
|
71
75
|
/**
|
|
72
76
|
* Price impact configuration for a trading symbol.
|
|
@@ -94,6 +98,7 @@ export interface IZLPPriceImpactConfig {
|
|
|
94
98
|
export interface IZLPDataAPI extends IBaseDataAPI {
|
|
95
99
|
getSymbolConfig: (indexToken: string, long: boolean) => Promise<IZLPSymbolConfig | null>;
|
|
96
100
|
getPriceImpactConfig: (indexToken: string) => Promise<IZLPPriceImpactConfig | null>;
|
|
101
|
+
calculateSwapFeeBreakdown: (fromToken: string, toToken: string, fromAmount: number) => Promise<ISwapFeeBreakdown>;
|
|
97
102
|
}
|
|
98
103
|
export interface IZLPAPI extends IBaseAPI {
|
|
99
104
|
adminIssueLootbox: (coin: string, tiers: number[], beneficiaries: string[], amounts: number[], tx: Transaction) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zlp.d.mts","sourceRoot":"","sources":["../../src/interfaces/zlp.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,yBAAyB,EAAE,iCAAgC;AAEtF,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,wBAAwB,EACxB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"zlp.d.mts","sourceRoot":"","sources":["../../src/interfaces/zlp.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"sudo_core": {
|
|
3
3
|
"package": "0xc44d97a4bc4e5a33ca847b72b123172c88a6328196b71414f32c3070233604b2",
|
|
4
|
-
"upgraded_package": "
|
|
4
|
+
"upgraded_package": "0x133f18548e87ae085905f3dd4c9d5be9b9ceb9a9bd2d55f34a0804eb249db1ae",
|
|
5
5
|
"upgrade_cap": "0x2092387c072fe18f91b57b9dde362f758259ee88d993a5faf569b4f2eb288b12",
|
|
6
6
|
"admin_cap": "0x0b4183c84de542c6f9623acd521294ea7e8205a2a7a23f4fac97e964fe4da30e",
|
|
7
7
|
"market": "0x4d753c2c69109cbeb806393956cfeba28d832354a37d59d9a019ee580f82893d",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zo_core": {
|
|
3
3
|
"package": "0x7fd8aba1652c58b6397c799fd375e748e5053145cb7e126d303e0a1545fd1fec",
|
|
4
|
-
"upgraded_package": "
|
|
4
|
+
"upgraded_package": "0x43779d65ae051458c5021f6bfe891a117c49b091132c6f3be2c714b02a4bcb25",
|
|
5
5
|
"upgrade_cap": "0x2f67d379d3b9e256a9c4079de50f4bd336dcbda1bd90d1fcd61a9cc1dc369d69",
|
|
6
6
|
"admin_cap": "0x63af8e78701327be98e0c44967389148c374f4ea7c7cf8acf64957b705ffd02d",
|
|
7
7
|
"market": "0x3310c794d0bbc4b0421d2fedc74fbd5a028b09fe4d396cd5458786f4c52fa636",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"zo_core": {
|
|
3
3
|
"package": "0xf7fade57462e56e2eff1d7adef32e4fd285b21fd81f983f407bb7110ca766cda",
|
|
4
|
-
"upgraded_package": "
|
|
4
|
+
"upgraded_package": "0x420dbbc3b14a2e1645a38b111dc1c381cae43f349ddf800540f8991efbce563d",
|
|
5
5
|
"upgrade_cap": "0xcc96f78abe0b868afaab05954ccc6357afb5d379a21389d6eb88dda8b1f60052",
|
|
6
6
|
"admin_cap": "0xbc10f6481f2b5d6185c73ee680aa90a60fe3854d9f638e00f7e00d3b6a88e2b8",
|
|
7
7
|
"market": "0x35c667bd8c401036103992791a924f31df0d104256a9e2313acee5b1bcf05b7e",
|
|
@@ -37,6 +37,7 @@ import type {
|
|
|
37
37
|
ISLPSymbolConfig,
|
|
38
38
|
ISLPSymbolInfo,
|
|
39
39
|
ISLPVaultInfo,
|
|
40
|
+
ISwapFeeBreakdown,
|
|
40
41
|
} from '../interfaces'
|
|
41
42
|
import { joinSymbol, parseSymbolKey, parseValue, suiSymbolToSymbol } from '../utils'
|
|
42
43
|
|
|
@@ -49,6 +50,20 @@ let aprResponse: GetCumulativeAprResponse = {}
|
|
|
49
50
|
|
|
50
51
|
const SECONDS_PER_EIGHT_HOUR = 8 * 60 * 60 // 28800 seconds
|
|
51
52
|
|
|
53
|
+
interface SwapImpactConfig {
|
|
54
|
+
id: string
|
|
55
|
+
enabled: boolean
|
|
56
|
+
impactMultiplier: number
|
|
57
|
+
maxImpactRate: number
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
interface EmaVolatilityFeeConfig {
|
|
61
|
+
id: string
|
|
62
|
+
enabled: boolean
|
|
63
|
+
multiplier: number
|
|
64
|
+
maxFeeRate: number
|
|
65
|
+
}
|
|
66
|
+
|
|
52
67
|
export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
53
68
|
constructor(
|
|
54
69
|
network: Network,
|
|
@@ -76,7 +91,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
76
91
|
price: number,
|
|
77
92
|
lpSupplyAmount: number,
|
|
78
93
|
timestamp: number,
|
|
79
|
-
|
|
94
|
+
oiState?: ISLPOiFundingState,
|
|
80
95
|
pairedOpeningSize?: number,
|
|
81
96
|
): number {
|
|
82
97
|
const accFundingRate = SLPDataAPI.calcAccFundingFeeRate(
|
|
@@ -86,7 +101,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
86
101
|
lpSupplyAmount,
|
|
87
102
|
timestamp,
|
|
88
103
|
symbol.long,
|
|
89
|
-
|
|
104
|
+
oiState,
|
|
90
105
|
pairedOpeningSize,
|
|
91
106
|
)
|
|
92
107
|
return symbol.unrealisedFundingFeeValue + (accFundingRate - symbol.accFundingRate) * symbol.openingSize
|
|
@@ -230,7 +245,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
230
245
|
price,
|
|
231
246
|
marketInfo.lpSupplyWithDecimals,
|
|
232
247
|
Date.now() / 1000,
|
|
233
|
-
oiState && oiState.enabled ? oiState
|
|
248
|
+
oiState && oiState.enabled ? oiState : undefined,
|
|
234
249
|
pairedInfo.openingSize,
|
|
235
250
|
)
|
|
236
251
|
const symbolValue = fundingFeeDelta + deltaSize
|
|
@@ -485,6 +500,177 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
485
500
|
}
|
|
486
501
|
}
|
|
487
502
|
|
|
503
|
+
public async calculateSwapFeeBreakdown(fromToken: string, toToken: string, fromAmount: number): Promise<ISwapFeeBreakdown> {
|
|
504
|
+
if (!this.consts.sudoCore) {
|
|
505
|
+
throw new Error('Sudo Core configuration not found. Make sure you are using LPToken.SLP')
|
|
506
|
+
}
|
|
507
|
+
|
|
508
|
+
const timestamp = Date.now() / 1000
|
|
509
|
+
|
|
510
|
+
const fromDecimals = this.consts.coins[fromToken]?.decimals
|
|
511
|
+
const toDecimals = this.consts.coins[toToken]?.decimals
|
|
512
|
+
if (fromDecimals === undefined || toDecimals === undefined) {
|
|
513
|
+
throw new Error(`Unknown token decimals for swap: ${fromToken} -> ${toToken}`)
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
const fromFeed = await this.getOraclePrice(fromToken)
|
|
517
|
+
const toFeed = await this.getOraclePrice(toToken)
|
|
518
|
+
const fromPrice = fromFeed.getPriceUnchecked().getPriceAsNumberUnchecked()
|
|
519
|
+
const toPrice = toFeed.getPriceUnchecked().getPriceAsNumberUnchecked()
|
|
520
|
+
|
|
521
|
+
const swapValue = (fromAmount * fromPrice) / (10 ** fromDecimals)
|
|
522
|
+
const totalVaultsValue = await this.#getTotalVaultsValueUsd(timestamp)
|
|
523
|
+
|
|
524
|
+
const rebaseFeeInRate = await this.rebaseFeeRate(fromToken, true, fromAmount)
|
|
525
|
+
const rebaseFeeInValue = swapValue * rebaseFeeInRate
|
|
526
|
+
|
|
527
|
+
const estimatedToAmount = toPrice !== 0
|
|
528
|
+
? (swapValue * (10 ** toDecimals)) / toPrice
|
|
529
|
+
: 0
|
|
530
|
+
const rebaseFeeOutRate = await this.rebaseFeeRate(toToken, false, estimatedToAmount)
|
|
531
|
+
const rebaseFeeOutValue = swapValue * rebaseFeeOutRate
|
|
532
|
+
|
|
533
|
+
const swapImpactCfg = await this.#getSwapImpactConfig()
|
|
534
|
+
const swapImpactFeeValue = swapImpactCfg?.enabled
|
|
535
|
+
? SLPDataAPI.#computeSwapImpactFeeValue(swapValue, totalVaultsValue, swapImpactCfg.impactMultiplier, swapImpactCfg.maxImpactRate)
|
|
536
|
+
: 0
|
|
537
|
+
|
|
538
|
+
const emaCfg = await this.#getEmaVolatilityFeeConfig()
|
|
539
|
+
const emaVolatilityFeeValue = emaCfg?.enabled
|
|
540
|
+
? SLPDataAPI.#computeEmaVolatilityFeeValue(
|
|
541
|
+
swapValue,
|
|
542
|
+
SLPDataAPI.#maxEmaDivergenceRate(fromFeed, toFeed),
|
|
543
|
+
emaCfg.multiplier,
|
|
544
|
+
emaCfg.maxFeeRate,
|
|
545
|
+
)
|
|
546
|
+
: 0
|
|
547
|
+
|
|
548
|
+
const totalFeeValue = rebaseFeeInValue + rebaseFeeOutValue + swapImpactFeeValue + emaVolatilityFeeValue
|
|
549
|
+
const totalFeeRate = swapValue !== 0 ? totalFeeValue / swapValue : 0
|
|
550
|
+
|
|
551
|
+
return {
|
|
552
|
+
swapValue,
|
|
553
|
+
totalVaultsValue,
|
|
554
|
+
rebaseFeeInRate,
|
|
555
|
+
rebaseFeeOutRate,
|
|
556
|
+
rebaseFeeInValue,
|
|
557
|
+
rebaseFeeOutValue,
|
|
558
|
+
swapImpactFeeValue,
|
|
559
|
+
emaVolatilityFeeValue,
|
|
560
|
+
totalFeeValue,
|
|
561
|
+
totalFeeRate,
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
async #getTotalVaultsValueUsd(timestamp: number): Promise<number> {
|
|
566
|
+
if (!this.consts.sudoCore) {
|
|
567
|
+
return 0
|
|
568
|
+
}
|
|
569
|
+
const vaultKeys = Object.keys(this.consts.sudoCore.vaults)
|
|
570
|
+
const vaultValues = await Promise.all(vaultKeys.map(async (vault) => {
|
|
571
|
+
const vaultInfo = await this.getVaultInfo(vault)
|
|
572
|
+
const reservingFeeDelta = SLPDataAPI.calculateVaultReservingFee(vaultInfo, vaultInfo.reservingFeeModel, timestamp)
|
|
573
|
+
const totalVaultAmount = reservingFeeDelta + vaultInfo.liquidity + vaultInfo.reservedAmount
|
|
574
|
+
const oraclePrice = (await this.getOraclePrice(vault)).getPriceUnchecked().getPriceAsNumberUnchecked()
|
|
575
|
+
const { decimals } = this.consts.coins[vault]
|
|
576
|
+
return totalVaultAmount * oraclePrice / (10 ** decimals)
|
|
577
|
+
}))
|
|
578
|
+
return vaultValues.reduce((acc, curr) => acc + curr, 0)
|
|
579
|
+
}
|
|
580
|
+
|
|
581
|
+
async #getSwapImpactConfig(): Promise<SwapImpactConfig | null> {
|
|
582
|
+
if (!this.consts.sudoCore) {
|
|
583
|
+
return null
|
|
584
|
+
}
|
|
585
|
+
const raw = await this.#getMarketDynamicFieldObjectByKeySuffix(this.consts.sudoCore.market, 'SwapImpactConfigKey')
|
|
586
|
+
if (!raw)
|
|
587
|
+
return null
|
|
588
|
+
return SLPDataAPI.#parseSwapImpactConfig(raw)
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
async #getEmaVolatilityFeeConfig(): Promise<EmaVolatilityFeeConfig | null> {
|
|
592
|
+
if (!this.consts.sudoCore) {
|
|
593
|
+
return null
|
|
594
|
+
}
|
|
595
|
+
const raw = await this.#getMarketDynamicFieldObjectByKeySuffix(this.consts.sudoCore.market, 'EmaVolatilityFeeConfigKey')
|
|
596
|
+
if (!raw)
|
|
597
|
+
return null
|
|
598
|
+
return SLPDataAPI.#parseEmaVolatilityFeeConfig(raw)
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
async #getMarketDynamicFieldObjectByKeySuffix(parentId: string, keyTypeSuffix: string): Promise<any | null> {
|
|
602
|
+
let cursor: string | null | undefined
|
|
603
|
+
let hasNextPage = true
|
|
604
|
+
|
|
605
|
+
while (hasNextPage) {
|
|
606
|
+
const page = await this.provider.getDynamicFields({ parentId, cursor })
|
|
607
|
+
for (const field of page.data) {
|
|
608
|
+
const type = (field.name as any)?.type
|
|
609
|
+
if (typeof type === 'string' && type.endsWith(`::${keyTypeSuffix}`)) {
|
|
610
|
+
return await this.provider.getDynamicFieldObject({
|
|
611
|
+
parentId,
|
|
612
|
+
name: field.name as any,
|
|
613
|
+
})
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
hasNextPage = page.hasNextPage
|
|
617
|
+
cursor = page.nextCursor
|
|
618
|
+
}
|
|
619
|
+
return null
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
static #parseSwapImpactConfig(raw: any): SwapImpactConfig {
|
|
623
|
+
const { fields } = raw.data.content
|
|
624
|
+
return {
|
|
625
|
+
id: fields.id.id,
|
|
626
|
+
enabled: fields.enabled,
|
|
627
|
+
impactMultiplier: parseValue(fields.impact_multiplier),
|
|
628
|
+
maxImpactRate: parseValue(fields.max_impact_rate),
|
|
629
|
+
}
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
static #parseEmaVolatilityFeeConfig(raw: any): EmaVolatilityFeeConfig {
|
|
633
|
+
const { fields } = raw.data.content
|
|
634
|
+
return {
|
|
635
|
+
id: fields.id.id,
|
|
636
|
+
enabled: fields.enabled,
|
|
637
|
+
multiplier: parseValue(fields.multiplier),
|
|
638
|
+
maxFeeRate: parseValue(fields.max_fee_rate),
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
static #computeSwapImpactFeeValue(swapValue: number, totalVaultsValue: number, impactMultiplier: number, maxImpactRate: number): number {
|
|
643
|
+
if (swapValue <= 0 || totalVaultsValue <= 0)
|
|
644
|
+
return 0
|
|
645
|
+
const utilization = swapValue / totalVaultsValue
|
|
646
|
+
const rawImpactRate = impactMultiplier * utilization
|
|
647
|
+
const impactRate = Math.min(rawImpactRate, maxImpactRate)
|
|
648
|
+
return swapValue * impactRate
|
|
649
|
+
}
|
|
650
|
+
|
|
651
|
+
static #computeEmaVolatilityFeeValue(swapValue: number, maxDiv: number, multiplier: number, maxFeeRate: number): number {
|
|
652
|
+
if (swapValue <= 0 || maxDiv <= 0)
|
|
653
|
+
return 0
|
|
654
|
+
const rawFeeRate = multiplier * maxDiv
|
|
655
|
+
const feeRate = Math.min(rawFeeRate, maxFeeRate)
|
|
656
|
+
return swapValue * feeRate
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
static #maxEmaDivergenceRate(sourceFeed: any, destFeed: any): number {
|
|
660
|
+
const sourceDiv = SLPDataAPI.#emaDivergenceRate(sourceFeed)
|
|
661
|
+
const destDiv = SLPDataAPI.#emaDivergenceRate(destFeed)
|
|
662
|
+
return Math.max(sourceDiv, destDiv)
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
static #emaDivergenceRate(priceFeed: any): number {
|
|
666
|
+
const price = priceFeed.getPriceUnchecked().getPriceAsNumberUnchecked()
|
|
667
|
+
const ema = priceFeed.getEmaPriceUnchecked().getPriceAsNumberUnchecked()
|
|
668
|
+
const denom = Math.abs(price)
|
|
669
|
+
if (denom === 0)
|
|
670
|
+
return 0
|
|
671
|
+
return Math.abs(price - ema) / denom
|
|
672
|
+
}
|
|
673
|
+
|
|
488
674
|
public async getPositionInfoList(
|
|
489
675
|
positionCapInfoList: ISLPPositionCapInfo[],
|
|
490
676
|
owner: string,
|
|
@@ -717,6 +903,8 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
717
903
|
longSymbol.openingSize,
|
|
718
904
|
shortSymbol.openingSize,
|
|
719
905
|
elapsed,
|
|
906
|
+
oiState.maxOiLong,
|
|
907
|
+
oiState.maxOiShort,
|
|
720
908
|
)
|
|
721
909
|
return long ? deltaRate : -deltaRate
|
|
722
910
|
}
|
|
@@ -1096,7 +1284,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1096
1284
|
price: number,
|
|
1097
1285
|
lpSupplyAmount: number,
|
|
1098
1286
|
timestamp: number,
|
|
1099
|
-
|
|
1287
|
+
oiState?: ISLPOiFundingState,
|
|
1100
1288
|
pairedOpeningSize?: number,
|
|
1101
1289
|
): number {
|
|
1102
1290
|
const accFundingRate = this.calcAccFundingFeeRate(
|
|
@@ -1106,7 +1294,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1106
1294
|
lpSupplyAmount,
|
|
1107
1295
|
timestamp,
|
|
1108
1296
|
position.long,
|
|
1109
|
-
|
|
1297
|
+
oiState,
|
|
1110
1298
|
pairedOpeningSize,
|
|
1111
1299
|
)
|
|
1112
1300
|
return position.fundingFeeValue + (accFundingRate - position.lastFundingRate) * position.positionSize
|
|
@@ -1119,17 +1307,17 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1119
1307
|
lpSupplyAmount: number,
|
|
1120
1308
|
timestamp: number,
|
|
1121
1309
|
isLong: boolean,
|
|
1122
|
-
|
|
1310
|
+
oiState?: ISLPOiFundingState,
|
|
1123
1311
|
pairedOpeningSize?: number,
|
|
1124
1312
|
): number {
|
|
1125
1313
|
if (symbol.lastUpdate > 0) {
|
|
1126
1314
|
const elapsed = timestamp - symbol.lastUpdate
|
|
1127
1315
|
if (elapsed > 0) {
|
|
1128
|
-
// Prefer OI-based delta when OI
|
|
1129
|
-
if (
|
|
1316
|
+
// Prefer OI-based delta when OI state and paired side are available
|
|
1317
|
+
if (oiState?.enabled && oiState.model && typeof pairedOpeningSize === 'number') {
|
|
1130
1318
|
const longSize = isLong ? symbol.openingSize : pairedOpeningSize
|
|
1131
1319
|
const shortSize = isLong ? pairedOpeningSize : symbol.openingSize
|
|
1132
|
-
const deltaRate = SLPDataAPI.calcOiFundingFeeRate(
|
|
1320
|
+
const deltaRate = SLPDataAPI.calcOiFundingFeeRate(oiState.model, longSize, shortSize, elapsed, oiState.maxOiLong, oiState.maxOiShort)
|
|
1133
1321
|
const appliedRate = isLong ? deltaRate : -deltaRate
|
|
1134
1322
|
return symbol.accFundingRate + appliedRate
|
|
1135
1323
|
}
|
|
@@ -1154,16 +1342,42 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1154
1342
|
return pnlPerRate >= 0 ? -secondsRate : secondsRate
|
|
1155
1343
|
}
|
|
1156
1344
|
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1345
|
+
/**
|
|
1346
|
+
* OI funding rate matching Move compute_oi_funding_rate_capped.
|
|
1347
|
+
* When both maxOiLong and maxOiShort are set and > 0, uses normalized skew (oi/cap);
|
|
1348
|
+
* otherwise falls back to (long - short) / total.
|
|
1349
|
+
*/
|
|
1350
|
+
private static calcOiFundingFeeRate(
|
|
1351
|
+
model: ISLPOiFundingModel,
|
|
1352
|
+
oiLong: number,
|
|
1353
|
+
oiShort: number,
|
|
1354
|
+
elapsed: number,
|
|
1355
|
+
maxOiLong?: number,
|
|
1356
|
+
maxOiShort?: number,
|
|
1357
|
+
): number {
|
|
1358
|
+
let skew: number
|
|
1359
|
+
if (maxOiLong && maxOiShort && maxOiLong > 0 && maxOiShort > 0) {
|
|
1360
|
+
const normLong = Math.min(oiLong / maxOiLong, 1)
|
|
1361
|
+
const normShort = Math.min(oiShort / maxOiShort, 1)
|
|
1362
|
+
skew = normLong - normShort
|
|
1363
|
+
}
|
|
1364
|
+
else {
|
|
1365
|
+
const total = oiLong + oiShort
|
|
1366
|
+
if (total === 0)
|
|
1367
|
+
return 0
|
|
1368
|
+
skew = (oiLong - oiShort) / total
|
|
1369
|
+
}
|
|
1160
1370
|
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
const
|
|
1166
|
-
|
|
1371
|
+
if (skew === 0)
|
|
1372
|
+
return 0
|
|
1373
|
+
|
|
1374
|
+
const skewIsPositive = skew > 0
|
|
1375
|
+
const skewAbs = Math.abs(skew)
|
|
1376
|
+
const exponentInt = Math.floor(model.exponent)
|
|
1377
|
+
const skewPow = skewAbs ** exponentInt
|
|
1378
|
+
const dailyRate = Math.min(model.multiplier * skewPow, model.max)
|
|
1379
|
+
const secondsRate = (dailyRate * elapsed) / SECONDS_PER_EIGHT_HOUR
|
|
1380
|
+
return skewIsPositive ? secondsRate : -secondsRate
|
|
1167
1381
|
}
|
|
1168
1382
|
|
|
1169
1383
|
private static calculatePositionReserveFee(position: ISLPPositionInfo, vault: ISLPVaultInfo, model: ISLPReservingFeeModel, timestamp: number): number {
|
|
@@ -1496,6 +1710,8 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1496
1710
|
exponent: parseValue(content.model.fields.exponent),
|
|
1497
1711
|
max: parseValue(content.model.fields.max),
|
|
1498
1712
|
},
|
|
1713
|
+
maxOiLong: content.max_oi_long !== null && content.max_oi_long !== undefined ? parseValue(content.max_oi_long) : undefined,
|
|
1714
|
+
maxOiShort: content.max_oi_short !== null && content.max_oi_short !== undefined ? parseValue(content.max_oi_short) : undefined,
|
|
1499
1715
|
}
|
|
1500
1716
|
}
|
|
1501
1717
|
|
|
@@ -1650,7 +1866,7 @@ export class SLPDataAPI extends BaseDataAPI implements ISLPDataAPI {
|
|
|
1650
1866
|
(await this.getOraclePrice(positionInfo.indexToken)).getPriceUnchecked().getPriceAsNumberUnchecked(),
|
|
1651
1867
|
(await this.getMarketInfo()).lpSupplyWithDecimals,
|
|
1652
1868
|
Date.now() / 1000,
|
|
1653
|
-
oiState && oiState.enabled ? oiState
|
|
1869
|
+
oiState && oiState.enabled ? oiState : undefined,
|
|
1654
1870
|
pairedSymbol.openingSize,
|
|
1655
1871
|
)
|
|
1656
1872
|
}
|