@strkfarm/sdk 1.0.44 → 1.0.46
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/index.browser.global.js +130 -88
- package/dist/index.browser.mjs +130 -88
- package/dist/index.d.ts +8 -3
- package/dist/index.js +130 -88
- package/dist/index.mjs +130 -88
- package/package.json +1 -1
- package/src/interfaces/common.ts +1 -0
- package/src/strategies/ekubo-cl-vault.tsx +151 -95
package/dist/index.js
CHANGED
|
@@ -15410,7 +15410,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15410
15410
|
};
|
|
15411
15411
|
}
|
|
15412
15412
|
static div2Power128(num5) {
|
|
15413
|
-
return Number(BigInt(num5.toString()) *
|
|
15413
|
+
return Number(BigInt(num5.toString()) * BigInt(1e18) / BigInt(2 ** 128)) / 1e18;
|
|
15414
15414
|
}
|
|
15415
15415
|
static priceToTick(price, isRoundDown, tickSpacing) {
|
|
15416
15416
|
const value = isRoundDown ? Math.floor(Math.log(price) / Math.log(1.000001)) : Math.ceil(Math.log(price) / Math.log(1.000001));
|
|
@@ -15431,18 +15431,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15431
15431
|
tick_spacing: result.pool_key.tick_spacing.toString(),
|
|
15432
15432
|
extension: result.pool_key.extension.toString()
|
|
15433
15433
|
};
|
|
15434
|
-
const token0Info = await Global.getTokenInfoFromAddr(poolKey.token0);
|
|
15435
|
-
const token1Info = await Global.getTokenInfoFromAddr(poolKey.token1);
|
|
15436
|
-
assert(
|
|
15437
|
-
token0Info.decimals == token1Info.decimals,
|
|
15438
|
-
"Tested only for equal decimals"
|
|
15439
|
-
);
|
|
15440
15434
|
this.poolKey = poolKey;
|
|
15441
15435
|
return poolKey;
|
|
15442
15436
|
}
|
|
15443
15437
|
async getNewBounds() {
|
|
15444
15438
|
const poolKey = await this.getPoolKey();
|
|
15445
15439
|
const currentPrice = await this._getCurrentPrice(poolKey);
|
|
15440
|
+
if (typeof this.metadata.additionalInfo.newBounds === "string") {
|
|
15441
|
+
throw new Error(`New bounds are managed known, to be set manually/externally`);
|
|
15442
|
+
}
|
|
15446
15443
|
const newLower = currentPrice.tick + Number(this.metadata.additionalInfo.newBounds.lower) * Number(poolKey.tick_spacing);
|
|
15447
15444
|
const newUpper = currentPrice.tick + Number(this.metadata.additionalInfo.newBounds.upper) * Number(poolKey.tick_spacing);
|
|
15448
15445
|
return {
|
|
@@ -15457,8 +15454,8 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15457
15454
|
* @param amount1: amount of token1
|
|
15458
15455
|
* @returns {amount0, amount1}
|
|
15459
15456
|
*/
|
|
15460
|
-
async _getExpectedAmountsForLiquidity(
|
|
15461
|
-
assert(
|
|
15457
|
+
async _getExpectedAmountsForLiquidity(inputAmount0, inputAmount1, bounds, justUseInputAmount = true) {
|
|
15458
|
+
assert(inputAmount0.greaterThan(0) || inputAmount1.greaterThan(0), "Amount is 0");
|
|
15462
15459
|
const sampleLiq = 1e20;
|
|
15463
15460
|
const { amount0: sampleAmount0, amount1: sampleAmount1 } = await this.getLiquidityToAmounts(
|
|
15464
15461
|
Web3Number.fromWei(sampleLiq.toString(), 18),
|
|
@@ -15472,39 +15469,37 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15472
15469
|
logger.verbose(
|
|
15473
15470
|
`${_EkuboCLVault.name}: _getExpectedAmountsForLiquidity => price: ${price}`
|
|
15474
15471
|
);
|
|
15475
|
-
if (
|
|
15472
|
+
if (inputAmount1.eq(0) && inputAmount0.greaterThan(0)) {
|
|
15476
15473
|
if (sampleAmount1.eq(0)) {
|
|
15477
15474
|
return {
|
|
15478
|
-
amount0,
|
|
15479
|
-
amount1: Web3Number.fromWei("0",
|
|
15475
|
+
amount0: inputAmount0,
|
|
15476
|
+
amount1: Web3Number.fromWei("0", inputAmount1.decimals),
|
|
15480
15477
|
ratio: Infinity
|
|
15481
15478
|
};
|
|
15482
15479
|
} else if (sampleAmount0.eq(0)) {
|
|
15483
15480
|
return {
|
|
15484
|
-
amount0: Web3Number.fromWei("0",
|
|
15485
|
-
|
|
15481
|
+
amount0: Web3Number.fromWei("0", inputAmount0.decimals),
|
|
15482
|
+
// to ensure decimal consistency, we start with 0
|
|
15483
|
+
amount1: Web3Number.fromWei("0", inputAmount1.decimals).plus(inputAmount0.toString()).multipliedBy(price),
|
|
15486
15484
|
ratio: 0
|
|
15487
15485
|
};
|
|
15488
15486
|
}
|
|
15489
|
-
} else if (
|
|
15487
|
+
} else if (inputAmount0.eq(0) && inputAmount1.greaterThan(0)) {
|
|
15490
15488
|
if (sampleAmount0.eq(0)) {
|
|
15491
15489
|
return {
|
|
15492
|
-
amount0: Web3Number.fromWei("0",
|
|
15493
|
-
amount1,
|
|
15490
|
+
amount0: Web3Number.fromWei("0", inputAmount0.decimals),
|
|
15491
|
+
amount1: inputAmount1,
|
|
15494
15492
|
ratio: 0
|
|
15495
15493
|
};
|
|
15496
15494
|
} else if (sampleAmount1.eq(0)) {
|
|
15497
15495
|
return {
|
|
15498
|
-
|
|
15499
|
-
|
|
15496
|
+
// to ensure decimal consistency, we start with 0
|
|
15497
|
+
amount0: Web3Number.fromWei("0", inputAmount0.decimals).plus(inputAmount1.toString()).dividedBy(price),
|
|
15498
|
+
amount1: Web3Number.fromWei("0", inputAmount1.decimals),
|
|
15500
15499
|
ratio: Infinity
|
|
15501
15500
|
};
|
|
15502
15501
|
}
|
|
15503
15502
|
}
|
|
15504
|
-
assert(
|
|
15505
|
-
sampleAmount0.decimals == sampleAmount1.decimals,
|
|
15506
|
-
"Sample amounts have different decimals"
|
|
15507
|
-
);
|
|
15508
15503
|
const ratioWeb3Number = sampleAmount0.multipliedBy(1e18).dividedBy(sampleAmount1.toString()).dividedBy(1e18);
|
|
15509
15504
|
const ratio = Number(ratioWeb3Number.toFixed(18));
|
|
15510
15505
|
logger.verbose(
|
|
@@ -15512,23 +15507,23 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15512
15507
|
);
|
|
15513
15508
|
if (justUseInputAmount)
|
|
15514
15509
|
return this._solveExpectedAmountsEq(
|
|
15515
|
-
|
|
15516
|
-
|
|
15510
|
+
inputAmount0,
|
|
15511
|
+
inputAmount1,
|
|
15517
15512
|
ratioWeb3Number,
|
|
15518
15513
|
price
|
|
15519
15514
|
);
|
|
15520
|
-
if (
|
|
15521
|
-
const _amount1 =
|
|
15515
|
+
if (inputAmount1.eq(0) && inputAmount0.greaterThan(0)) {
|
|
15516
|
+
const _amount1 = new Web3Number(inputAmount0.toString(), inputAmount1.decimals).dividedBy(ratioWeb3Number);
|
|
15522
15517
|
return {
|
|
15523
|
-
amount0,
|
|
15518
|
+
amount0: inputAmount0,
|
|
15524
15519
|
amount1: _amount1,
|
|
15525
15520
|
ratio
|
|
15526
15521
|
};
|
|
15527
|
-
} else if (
|
|
15528
|
-
const _amount0 =
|
|
15522
|
+
} else if (inputAmount0.eq(0) && inputAmount1.greaterThan(0)) {
|
|
15523
|
+
const _amount0 = new Web3Number(inputAmount1.toString(), inputAmount0.decimals).multipliedBy(ratio);
|
|
15529
15524
|
return {
|
|
15530
15525
|
amount0: _amount0,
|
|
15531
|
-
amount1,
|
|
15526
|
+
amount1: inputAmount1,
|
|
15532
15527
|
ratio
|
|
15533
15528
|
};
|
|
15534
15529
|
} else {
|
|
@@ -15591,7 +15586,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15591
15586
|
}
|
|
15592
15587
|
};
|
|
15593
15588
|
}
|
|
15594
|
-
async getSwapInfoToHandleUnused(considerRebalance = true) {
|
|
15589
|
+
async getSwapInfoToHandleUnused(considerRebalance = true, newBounds = null) {
|
|
15595
15590
|
const poolKey = await this.getPoolKey();
|
|
15596
15591
|
const unusedBalances = await this.unusedBalances(poolKey);
|
|
15597
15592
|
const { amount: token0Bal1, usdValue: token0PriceUsd } = unusedBalances.token0;
|
|
@@ -15614,7 +15609,9 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15614
15609
|
`${_EkuboCLVault.name}: getSwapInfoToHandleUnused => token0Bal: ${token0Bal.toString()}, token1Bal: ${token1Bal.toString()}`
|
|
15615
15610
|
);
|
|
15616
15611
|
let ekuboBounds;
|
|
15617
|
-
if (
|
|
15612
|
+
if (newBounds) {
|
|
15613
|
+
ekuboBounds = newBounds;
|
|
15614
|
+
} else if (considerRebalance) {
|
|
15618
15615
|
ekuboBounds = await this.getNewBounds();
|
|
15619
15616
|
} else {
|
|
15620
15617
|
ekuboBounds = await this.getCurrentBounds();
|
|
@@ -15855,6 +15852,10 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15855
15852
|
return BigInt(Math.floor(Math.sqrt(price) * 10 ** 9)) * BigInt(2 ** 128) / BigInt(1e9);
|
|
15856
15853
|
}
|
|
15857
15854
|
static i129ToNumber(i129) {
|
|
15855
|
+
if (i129.sign == 0 || i129.sign == 1) {
|
|
15856
|
+
return _EkuboCLVault.i129ToNumber({ mag: i129.mag, sign: i129.sign == 1 ? "true" : "false" });
|
|
15857
|
+
}
|
|
15858
|
+
assert(i129.sign.toString() == "false" || i129.sign.toString() == "true", "Invalid sign value");
|
|
15858
15859
|
return i129.mag * (i129.sign.toString() == "false" ? 1n : -1n);
|
|
15859
15860
|
}
|
|
15860
15861
|
static tickToPrice(tick) {
|
|
@@ -16033,7 +16034,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16033
16034
|
subItems: [
|
|
16034
16035
|
{
|
|
16035
16036
|
key: "Range selection",
|
|
16036
|
-
value: `${this.metadata.additionalInfo.newBounds.lower * Number(poolKey.tick_spacing)} to ${this.metadata.additionalInfo.newBounds.upper * Number(poolKey.tick_spacing)} ticks`
|
|
16037
|
+
value: typeof this.metadata.additionalInfo.newBounds == "string" ? this.metadata.additionalInfo.newBounds : `${this.metadata.additionalInfo.newBounds.lower * Number(poolKey.tick_spacing)} to ${this.metadata.additionalInfo.newBounds.upper * Number(poolKey.tick_spacing)} ticks`
|
|
16037
16038
|
}
|
|
16038
16039
|
],
|
|
16039
16040
|
linkedFlows: [linkedFlow],
|
|
@@ -16085,12 +16086,79 @@ var faqs2 = [
|
|
|
16085
16086
|
] })
|
|
16086
16087
|
}
|
|
16087
16088
|
];
|
|
16089
|
+
var xSTRKSTRK = {
|
|
16090
|
+
name: "Ekubo xSTRK/STRK",
|
|
16091
|
+
description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
16092
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "xSTRK/STRK") }),
|
|
16093
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
16094
|
+
"ul",
|
|
16095
|
+
{
|
|
16096
|
+
style: {
|
|
16097
|
+
marginLeft: "20px",
|
|
16098
|
+
listStyle: "circle",
|
|
16099
|
+
fontSize: "12px"
|
|
16100
|
+
},
|
|
16101
|
+
children: [
|
|
16102
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
|
|
16103
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when xSTRK's price drops on DEXes, but things typically bounce back within a few days or a week." })
|
|
16104
|
+
]
|
|
16105
|
+
}
|
|
16106
|
+
)
|
|
16107
|
+
] }),
|
|
16108
|
+
address: ContractAddr.from(
|
|
16109
|
+
"0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
|
|
16110
|
+
),
|
|
16111
|
+
launchBlock: 1209881,
|
|
16112
|
+
type: "Other",
|
|
16113
|
+
// must be same order as poolKey token0 and token1
|
|
16114
|
+
depositTokens: [
|
|
16115
|
+
Global.getDefaultTokens().find((t) => t.symbol === "xSTRK"),
|
|
16116
|
+
Global.getDefaultTokens().find((t) => t.symbol === "STRK")
|
|
16117
|
+
],
|
|
16118
|
+
protocols: [_protocol2],
|
|
16119
|
+
auditUrl: AUDIT_URL2,
|
|
16120
|
+
maxTVL: Web3Number.fromWei("0", 18),
|
|
16121
|
+
risk: {
|
|
16122
|
+
riskFactor: _riskFactor2,
|
|
16123
|
+
netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16124
|
+
notARisks: getNoRiskTags(_riskFactor2)
|
|
16125
|
+
},
|
|
16126
|
+
apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
|
|
16127
|
+
additionalInfo: {
|
|
16128
|
+
newBounds: {
|
|
16129
|
+
lower: -1,
|
|
16130
|
+
upper: 1
|
|
16131
|
+
},
|
|
16132
|
+
lstContract: ContractAddr.from(
|
|
16133
|
+
"0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"
|
|
16134
|
+
),
|
|
16135
|
+
feeBps: 1e3,
|
|
16136
|
+
rebalanceConditions: {
|
|
16137
|
+
customShouldRebalance: async (currentPrice) => true,
|
|
16138
|
+
minWaitHours: 24,
|
|
16139
|
+
direction: "uponly"
|
|
16140
|
+
}
|
|
16141
|
+
},
|
|
16142
|
+
faqs: [
|
|
16143
|
+
...faqs2,
|
|
16144
|
+
{
|
|
16145
|
+
question: "Why might I see a negative APY?",
|
|
16146
|
+
answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
|
|
16147
|
+
}
|
|
16148
|
+
],
|
|
16149
|
+
points: [{
|
|
16150
|
+
multiplier: 1,
|
|
16151
|
+
logo: "https://endur.fi/favicon.ico",
|
|
16152
|
+
toolTip: "This strategy holds xSTRK and STRK tokens. Earn 1x Endur points on your xSTRK portion of Liquidity. STRK portion will earn Endur's DEX Bonus points. Points can be found on endur.fi."
|
|
16153
|
+
}]
|
|
16154
|
+
};
|
|
16088
16155
|
var EkuboCLVaultStrategies = [
|
|
16156
|
+
xSTRKSTRK,
|
|
16089
16157
|
{
|
|
16090
|
-
name: "Ekubo
|
|
16158
|
+
name: "Ekubo USDC/USDT",
|
|
16091
16159
|
description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
16092
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "
|
|
16093
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.
|
|
16160
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
|
|
16161
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
16094
16162
|
"ul",
|
|
16095
16163
|
{
|
|
16096
16164
|
style: {
|
|
@@ -16098,30 +16166,30 @@ var EkuboCLVaultStrategies = [
|
|
|
16098
16166
|
listStyle: "circle",
|
|
16099
16167
|
fontSize: "12px"
|
|
16100
16168
|
},
|
|
16101
|
-
children:
|
|
16102
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." }),
|
|
16103
|
-
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "Sometimes you might see a negative APY \u2014 this is usually not a big deal. It happens when xSTRK's price drops on DEXes, but things typically bounce back within a few days or a week." })
|
|
16104
|
-
]
|
|
16169
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." })
|
|
16105
16170
|
}
|
|
16106
16171
|
)
|
|
16107
16172
|
] }),
|
|
16108
16173
|
address: ContractAddr.from(
|
|
16109
|
-
"
|
|
16174
|
+
"0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
|
|
16110
16175
|
),
|
|
16111
|
-
launchBlock:
|
|
16176
|
+
launchBlock: 1385576,
|
|
16112
16177
|
type: "Other",
|
|
16113
16178
|
// must be same order as poolKey token0 and token1
|
|
16114
16179
|
depositTokens: [
|
|
16115
|
-
Global.getDefaultTokens().find((t) => t.symbol === "
|
|
16116
|
-
Global.getDefaultTokens().find((t) => t.symbol === "
|
|
16180
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
16181
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
16117
16182
|
],
|
|
16118
16183
|
protocols: [_protocol2],
|
|
16119
16184
|
auditUrl: AUDIT_URL2,
|
|
16120
|
-
maxTVL: Web3Number.fromWei("0",
|
|
16185
|
+
maxTVL: Web3Number.fromWei("0", 6),
|
|
16121
16186
|
risk: {
|
|
16122
|
-
riskFactor:
|
|
16123
|
-
netRisk:
|
|
16124
|
-
|
|
16187
|
+
riskFactor: _riskFactorStable,
|
|
16188
|
+
netRisk: _riskFactorStable.reduce(
|
|
16189
|
+
(acc, curr) => acc + curr.value * curr.weight,
|
|
16190
|
+
0
|
|
16191
|
+
) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16192
|
+
notARisks: getNoRiskTags(_riskFactorStable)
|
|
16125
16193
|
},
|
|
16126
16194
|
apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
|
|
16127
16195
|
additionalInfo: {
|
|
@@ -16129,29 +16197,22 @@ var EkuboCLVaultStrategies = [
|
|
|
16129
16197
|
lower: -1,
|
|
16130
16198
|
upper: 1
|
|
16131
16199
|
},
|
|
16132
|
-
|
|
16133
|
-
"0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"
|
|
16134
|
-
),
|
|
16200
|
+
truePrice: 1,
|
|
16135
16201
|
feeBps: 1e3,
|
|
16136
16202
|
rebalanceConditions: {
|
|
16137
|
-
customShouldRebalance: async (currentPrice) =>
|
|
16138
|
-
minWaitHours:
|
|
16139
|
-
direction: "
|
|
16203
|
+
customShouldRebalance: async (currentPrice) => currentPrice > 0.99 && currentPrice < 1.01,
|
|
16204
|
+
minWaitHours: 6,
|
|
16205
|
+
direction: "any"
|
|
16140
16206
|
}
|
|
16141
16207
|
},
|
|
16142
|
-
faqs: [
|
|
16143
|
-
...faqs2,
|
|
16144
|
-
{
|
|
16145
|
-
question: "Why might I see a negative APY?",
|
|
16146
|
-
answer: "A negative APY can occur when xSTRK's price drops on DEXes. This is usually temporary and tends to recover within a few days or a week."
|
|
16147
|
-
}
|
|
16148
|
-
]
|
|
16208
|
+
faqs: [...faqs2]
|
|
16149
16209
|
}
|
|
16150
16210
|
// {
|
|
16151
|
-
//
|
|
16211
|
+
// ...xSTRKSTRK,
|
|
16212
|
+
// name: "Ekubo STRK/USDC",
|
|
16152
16213
|
// description: (
|
|
16153
16214
|
// <div>
|
|
16154
|
-
// <p>{_description.replace("{{POOL_NAME}}", "USDC
|
|
16215
|
+
// <p>{_description.replace("{{POOL_NAME}}", "STRK/USDC")}</p>
|
|
16155
16216
|
// <ul
|
|
16156
16217
|
// style={{
|
|
16157
16218
|
// marginLeft: "20px",
|
|
@@ -16167,44 +16228,25 @@ var EkuboCLVaultStrategies = [
|
|
|
16167
16228
|
// </div>
|
|
16168
16229
|
// ),
|
|
16169
16230
|
// address: ContractAddr.from(
|
|
16170
|
-
// "
|
|
16231
|
+
// "0xb7bd37121041261446d8eedec618955a4490641034942da688e8cbddea7b23"
|
|
16171
16232
|
// ),
|
|
16172
|
-
// launchBlock:
|
|
16173
|
-
// type: "Other",
|
|
16233
|
+
// launchBlock: 1492136,
|
|
16174
16234
|
// // must be same order as poolKey token0 and token1
|
|
16175
16235
|
// depositTokens: [
|
|
16236
|
+
// Global.getDefaultTokens().find((t) => t.symbol === "STRK")!,
|
|
16176
16237
|
// Global.getDefaultTokens().find((t) => t.symbol === "USDC")!,
|
|
16177
|
-
// Global.getDefaultTokens().find((t) => t.symbol === "USDT")!,
|
|
16178
16238
|
// ],
|
|
16179
|
-
// protocols: [_protocol],
|
|
16180
|
-
// auditUrl: AUDIT_URL,
|
|
16181
16239
|
// maxTVL: Web3Number.fromWei("0", 6),
|
|
16182
|
-
// risk: {
|
|
16183
|
-
// riskFactor: _riskFactorStable,
|
|
16184
|
-
// netRisk:
|
|
16185
|
-
// _riskFactorStable.reduce(
|
|
16186
|
-
// (acc, curr) => acc + curr.value * curr.weight,
|
|
16187
|
-
// 0
|
|
16188
|
-
// ) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
|
|
16189
|
-
// notARisks: getNoRiskTags(_riskFactorStable),
|
|
16190
|
-
// },
|
|
16191
|
-
// apyMethodology:
|
|
16192
|
-
// "APY based on 7-day historical performance, including fees and rewards.",
|
|
16193
16240
|
// additionalInfo: {
|
|
16194
|
-
// newBounds:
|
|
16195
|
-
// lower: -1,
|
|
16196
|
-
// upper: 1,
|
|
16197
|
-
// },
|
|
16198
|
-
// truePrice: 1,
|
|
16241
|
+
// newBounds: "Managed by Re7",
|
|
16199
16242
|
// feeBps: 1000,
|
|
16200
16243
|
// rebalanceConditions: {
|
|
16201
16244
|
// customShouldRebalance: async (currentPrice: number) =>
|
|
16202
|
-
//
|
|
16245
|
+
// true,
|
|
16203
16246
|
// minWaitHours: 6,
|
|
16204
16247
|
// direction: "any",
|
|
16205
16248
|
// },
|
|
16206
16249
|
// },
|
|
16207
|
-
// faqs: [...faqs],
|
|
16208
16250
|
// },
|
|
16209
16251
|
];
|
|
16210
16252
|
|