@strkfarm/sdk 1.0.38 → 1.0.39
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/cli.js +38 -712
- package/dist/cli.mjs +37 -715
- package/dist/index.browser.global.js +101 -25
- package/dist/index.browser.mjs +101 -25
- package/dist/index.d.ts +19 -50
- package/dist/index.js +129 -23
- package/dist/index.mjs +129 -23
- package/package.json +3 -3
- package/src/dataTypes/_bignumber.ts +49 -47
- package/src/global.ts +1 -33
- package/src/interfaces/common.ts +1 -0
- package/src/interfaces/lending.ts +1 -2
- package/src/modules/avnu.ts +1 -1
- package/src/modules/erc20.ts +6 -0
- package/src/modules/harvests.ts +1 -1
- package/src/modules/pragma.ts +1 -1
- package/src/modules/pricer-from-api.ts +3 -3
- package/src/modules/pricer.ts +2 -1
- package/src/modules/zkLend.ts +2 -1
- package/src/node/pricer-redis.ts +2 -1
- package/src/notifs/telegram.ts +1 -1
- package/src/strategies/ekubo-cl-vault.tsx +91 -19
- package/src/strategies/vesu-rebalance.tsx +6 -1
- package/src/utils/index.ts +2 -0
- package/src/utils/logger.browser.ts +20 -0
- package/src/utils/logger.node.ts +35 -0
- package/src/utils/logger.ts +1 -0
- package/src/utils/store.ts +1 -1
|
@@ -17293,8 +17293,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
17293
17293
|
getMainnetConfig: () => getMainnetConfig,
|
|
17294
17294
|
getNoRiskTags: () => getNoRiskTags,
|
|
17295
17295
|
getRiskColor: () => getRiskColor,
|
|
17296
|
-
getRiskExplaination: () => getRiskExplaination
|
|
17297
|
-
logger: () => logger
|
|
17296
|
+
getRiskExplaination: () => getRiskExplaination
|
|
17298
17297
|
});
|
|
17299
17298
|
|
|
17300
17299
|
// node_modules/.pnpm/axios@1.7.2/node_modules/axios/lib/helpers/bind.js
|
|
@@ -19723,6 +19722,14 @@ var strkfarm_risk_engine = (() => {
|
|
|
19723
19722
|
mergeConfig: mergeConfig2
|
|
19724
19723
|
} = axios_default;
|
|
19725
19724
|
|
|
19725
|
+
// src/utils/logger.browser.ts
|
|
19726
|
+
var logger = {
|
|
19727
|
+
...console,
|
|
19728
|
+
verbose(message) {
|
|
19729
|
+
console.log(`[VERBOSE] ${message}`);
|
|
19730
|
+
}
|
|
19731
|
+
};
|
|
19732
|
+
|
|
19726
19733
|
// src/dataTypes/_bignumber.ts
|
|
19727
19734
|
var import_bignumber = __toESM(require_bignumber());
|
|
19728
19735
|
var _Web3Number = class extends import_bignumber.default {
|
|
@@ -19739,6 +19746,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
19739
19746
|
}
|
|
19740
19747
|
dividedBy(value) {
|
|
19741
19748
|
const _value = this.getStandardString(value);
|
|
19749
|
+
console.log("dividedBy", _value);
|
|
19742
19750
|
return this.construct(this.div(_value).toString(), this.decimals);
|
|
19743
19751
|
}
|
|
19744
19752
|
plus(value) {
|
|
@@ -19752,13 +19760,15 @@ var strkfarm_risk_engine = (() => {
|
|
|
19752
19760
|
construct(value, decimals) {
|
|
19753
19761
|
return new this.constructor(value, decimals);
|
|
19754
19762
|
}
|
|
19755
|
-
toString(
|
|
19756
|
-
return super.
|
|
19763
|
+
toString() {
|
|
19764
|
+
return super.toString();
|
|
19757
19765
|
}
|
|
19758
19766
|
toJSON() {
|
|
19767
|
+
logger.verbose(`converting to json with decimals`);
|
|
19759
19768
|
return this.toString();
|
|
19760
19769
|
}
|
|
19761
19770
|
valueOf() {
|
|
19771
|
+
logger.verbose(`converting to valueOf with decimals`);
|
|
19762
19772
|
return this.toString();
|
|
19763
19773
|
}
|
|
19764
19774
|
maxToFixedDecimals() {
|
|
@@ -36012,12 +36022,6 @@ var strkfarm_risk_engine = (() => {
|
|
|
36012
36022
|
};
|
|
36013
36023
|
|
|
36014
36024
|
// src/global.ts
|
|
36015
|
-
var logger = {
|
|
36016
|
-
...console,
|
|
36017
|
-
verbose(message) {
|
|
36018
|
-
console.log(`[VERBOSE] ${message}`);
|
|
36019
|
-
}
|
|
36020
|
-
};
|
|
36021
36025
|
var FatalError = class extends Error {
|
|
36022
36026
|
constructor(message, err2) {
|
|
36023
36027
|
super(message);
|
|
@@ -36596,7 +36600,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
36596
36600
|
} catch (e) {
|
|
36597
36601
|
logger.warn("getPriceFromMyAPI error", JSON.stringify(e.message || e));
|
|
36598
36602
|
}
|
|
36599
|
-
logger.
|
|
36603
|
+
logger.info("getPrice coinbase", tokenSymbol);
|
|
36600
36604
|
let retry = 0;
|
|
36601
36605
|
const MAX_RETRIES = 5;
|
|
36602
36606
|
for (retry = 1; retry < MAX_RETRIES + 1; retry++) {
|
|
@@ -37774,6 +37778,11 @@ var strkfarm_risk_engine = (() => {
|
|
|
37774
37778
|
const balance = await contract.call("balanceOf", [address.toString()]);
|
|
37775
37779
|
return Web3Number.fromWei(balance.toString(), tokenDecimals);
|
|
37776
37780
|
}
|
|
37781
|
+
async allowance(token, owner, spender, tokenDecimals) {
|
|
37782
|
+
const contract = this.contract(token);
|
|
37783
|
+
const allowance = await contract.call("allowance", [owner.toString(), spender.toString()]);
|
|
37784
|
+
return Web3Number.fromWei(allowance.toString(), tokenDecimals);
|
|
37785
|
+
}
|
|
37777
37786
|
};
|
|
37778
37787
|
|
|
37779
37788
|
// node_modules/.pnpm/ethers@6.13.5/node_modules/ethers/lib.esm/_version.js
|
|
@@ -49609,6 +49618,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
49609
49618
|
address: ContractAddr.from(
|
|
49610
49619
|
"0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
|
|
49611
49620
|
),
|
|
49621
|
+
launchBlock: 0,
|
|
49612
49622
|
type: "ERC4626",
|
|
49613
49623
|
depositTokens: [
|
|
49614
49624
|
Global.getDefaultTokens().find((t) => t.symbol === "STRK")
|
|
@@ -49632,6 +49642,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
49632
49642
|
address: ContractAddr.from(
|
|
49633
49643
|
"0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
|
|
49634
49644
|
),
|
|
49645
|
+
launchBlock: 0,
|
|
49635
49646
|
type: "ERC4626",
|
|
49636
49647
|
auditUrl: AUDIT_URL,
|
|
49637
49648
|
depositTokens: [
|
|
@@ -49655,6 +49666,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
49655
49666
|
address: ContractAddr.from(
|
|
49656
49667
|
"0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
|
|
49657
49668
|
),
|
|
49669
|
+
launchBlock: 0,
|
|
49658
49670
|
type: "ERC4626",
|
|
49659
49671
|
auditUrl: AUDIT_URL,
|
|
49660
49672
|
depositTokens: [
|
|
@@ -49678,6 +49690,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
49678
49690
|
address: ContractAddr.from(
|
|
49679
49691
|
"0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
|
|
49680
49692
|
),
|
|
49693
|
+
launchBlock: 0,
|
|
49681
49694
|
type: "ERC4626",
|
|
49682
49695
|
depositTokens: [
|
|
49683
49696
|
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
@@ -54637,11 +54650,15 @@ var strkfarm_risk_engine = (() => {
|
|
|
54637
54650
|
this.address.address,
|
|
54638
54651
|
this.config.provider
|
|
54639
54652
|
);
|
|
54640
|
-
this.lstContract
|
|
54641
|
-
|
|
54642
|
-
|
|
54643
|
-
|
|
54644
|
-
|
|
54653
|
+
if (this.metadata.additionalInfo.lstContract) {
|
|
54654
|
+
this.lstContract = new Contract(
|
|
54655
|
+
erc4626_abi_default,
|
|
54656
|
+
this.metadata.additionalInfo.lstContract.address,
|
|
54657
|
+
this.config.provider
|
|
54658
|
+
);
|
|
54659
|
+
} else {
|
|
54660
|
+
this.lstContract = null;
|
|
54661
|
+
}
|
|
54645
54662
|
const EKUBO_POSITION = "0x02e0af29598b407c8716b17f6d2795eca1b471413fa03fb145a5e33722184067";
|
|
54646
54663
|
this.ekuboPositionsContract = new Contract(
|
|
54647
54664
|
ekubo_positions_abi_default,
|
|
@@ -54775,7 +54792,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
54775
54792
|
const priceNow = await this.getCurrentPrice(blockIdentifier);
|
|
54776
54793
|
let blockNow = typeof blockIdentifier == "number" ? blockIdentifier : (await this.config.provider.getBlockLatestAccepted()).block_number;
|
|
54777
54794
|
const blockNowTime = typeof blockIdentifier == "number" ? (await this.config.provider.getBlockWithTxs(blockIdentifier)).timestamp : (/* @__PURE__ */ new Date()).getTime() / 1e3;
|
|
54778
|
-
const blockBefore = blockNow - sinceBlocks;
|
|
54795
|
+
const blockBefore = Math.max(blockNow - sinceBlocks, this.metadata.launchBlock);
|
|
54779
54796
|
const adjustedSupplyNow = supplyNow.minus(
|
|
54780
54797
|
await this.getHarvestRewardShares(blockBefore, blockNow)
|
|
54781
54798
|
);
|
|
@@ -54786,9 +54803,9 @@ var strkfarm_risk_engine = (() => {
|
|
|
54786
54803
|
const supplyBefore = await this.totalSupply(blockBefore);
|
|
54787
54804
|
const priceBefore = await this.getCurrentPrice(blockBefore);
|
|
54788
54805
|
const tvlInToken0Now = tvlNow.amount0.multipliedBy(priceNow.price).plus(tvlNow.amount1);
|
|
54789
|
-
const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow);
|
|
54806
|
+
const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow.toString());
|
|
54790
54807
|
const tvlInToken0Bf = tvlBefore.amount0.multipliedBy(priceBefore.price).plus(tvlBefore.amount1);
|
|
54791
|
-
const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore);
|
|
54808
|
+
const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore.toString());
|
|
54792
54809
|
const timeDiffSeconds = blockNowTime - blockBeforeInfo.timestamp;
|
|
54793
54810
|
logger.verbose(`tvlInToken0Now: ${tvlInToken0Now.toString()}`);
|
|
54794
54811
|
logger.verbose(`tvlInToken0Bf: ${tvlInToken0Bf.toString()}`);
|
|
@@ -54826,7 +54843,9 @@ var strkfarm_risk_engine = (() => {
|
|
|
54826
54843
|
return shares;
|
|
54827
54844
|
}
|
|
54828
54845
|
async balanceOf(user, blockIdentifier = "pending") {
|
|
54829
|
-
let bal = await this.contract.call("balance_of", [user.address]
|
|
54846
|
+
let bal = await this.contract.call("balance_of", [user.address], {
|
|
54847
|
+
blockIdentifier
|
|
54848
|
+
});
|
|
54830
54849
|
return Web3Number.fromWei(bal.toString(), 18);
|
|
54831
54850
|
}
|
|
54832
54851
|
async getUserTVL(user, blockIdentifier = "pending") {
|
|
@@ -54974,11 +54993,16 @@ var strkfarm_risk_engine = (() => {
|
|
|
54974
54993
|
return Number(result.salt.toString());
|
|
54975
54994
|
}
|
|
54976
54995
|
async truePrice() {
|
|
54977
|
-
|
|
54978
|
-
|
|
54979
|
-
|
|
54980
|
-
|
|
54981
|
-
|
|
54996
|
+
if (this.metadata.additionalInfo.truePrice) {
|
|
54997
|
+
return this.metadata.additionalInfo.truePrice;
|
|
54998
|
+
} else if (this.lstContract) {
|
|
54999
|
+
const result = await this.lstContract.call("convert_to_assets", [
|
|
55000
|
+
uint256_exports.bnToUint256(BigInt(1e18).toString())
|
|
55001
|
+
]);
|
|
55002
|
+
const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
|
|
55003
|
+
return truePrice;
|
|
55004
|
+
}
|
|
55005
|
+
throw new Error("No true price available");
|
|
54982
55006
|
}
|
|
54983
55007
|
async getCurrentPrice(blockIdentifier = "pending") {
|
|
54984
55008
|
const poolKey = await this.getPoolKey(blockIdentifier);
|
|
@@ -55532,6 +55556,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
55532
55556
|
const swap1Amount = Web3Number.fromWei(
|
|
55533
55557
|
uint256_exports.uint256ToBN(swapInfo1.token_from_amount).toString(),
|
|
55534
55558
|
18
|
|
55559
|
+
// cause its always STRK?
|
|
55535
55560
|
);
|
|
55536
55561
|
const remainingAmount = postFeeAmount.minus(swap1Amount);
|
|
55537
55562
|
const swapInfo2 = {
|
|
@@ -55622,6 +55647,9 @@ var strkfarm_risk_engine = (() => {
|
|
|
55622
55647
|
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
55623
55648
|
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
|
|
55624
55649
|
];
|
|
55650
|
+
var _riskFactorStable = [
|
|
55651
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
|
|
55652
|
+
];
|
|
55625
55653
|
var AUDIT_URL2 = "https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
|
|
55626
55654
|
var faqs2 = [
|
|
55627
55655
|
{
|
|
@@ -55668,6 +55696,7 @@ var strkfarm_risk_engine = (() => {
|
|
|
55668
55696
|
address: ContractAddr.from(
|
|
55669
55697
|
"0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
|
|
55670
55698
|
),
|
|
55699
|
+
launchBlock: 1209881,
|
|
55671
55700
|
type: "Other",
|
|
55672
55701
|
// must be same order as poolKey token0 and token1
|
|
55673
55702
|
depositTokens: [
|
|
@@ -55700,6 +55729,53 @@ var strkfarm_risk_engine = (() => {
|
|
|
55700
55729
|
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."
|
|
55701
55730
|
}
|
|
55702
55731
|
]
|
|
55732
|
+
},
|
|
55733
|
+
{
|
|
55734
|
+
name: "Ekubo USDC/USDT",
|
|
55735
|
+
description: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)("div", { children: [
|
|
55736
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
|
|
55737
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
55738
|
+
"ul",
|
|
55739
|
+
{
|
|
55740
|
+
style: {
|
|
55741
|
+
marginLeft: "20px",
|
|
55742
|
+
listStyle: "circle",
|
|
55743
|
+
fontSize: "12px"
|
|
55744
|
+
},
|
|
55745
|
+
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." })
|
|
55746
|
+
}
|
|
55747
|
+
)
|
|
55748
|
+
] }),
|
|
55749
|
+
address: ContractAddr.from(
|
|
55750
|
+
"0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
|
|
55751
|
+
),
|
|
55752
|
+
launchBlock: 1385576,
|
|
55753
|
+
type: "Other",
|
|
55754
|
+
// must be same order as poolKey token0 and token1
|
|
55755
|
+
depositTokens: [
|
|
55756
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
55757
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
55758
|
+
],
|
|
55759
|
+
protocols: [_protocol2],
|
|
55760
|
+
auditUrl: AUDIT_URL2,
|
|
55761
|
+
maxTVL: Web3Number.fromWei("0", 6),
|
|
55762
|
+
risk: {
|
|
55763
|
+
riskFactor: _riskFactorStable,
|
|
55764
|
+
netRisk: _riskFactorStable.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
|
|
55765
|
+
notARisks: getNoRiskTags(_riskFactorStable)
|
|
55766
|
+
},
|
|
55767
|
+
apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
|
|
55768
|
+
additionalInfo: {
|
|
55769
|
+
newBounds: {
|
|
55770
|
+
lower: -1,
|
|
55771
|
+
upper: 1
|
|
55772
|
+
},
|
|
55773
|
+
truePrice: 1,
|
|
55774
|
+
feeBps: 1e3
|
|
55775
|
+
},
|
|
55776
|
+
faqs: [
|
|
55777
|
+
...faqs2
|
|
55778
|
+
]
|
|
55703
55779
|
}
|
|
55704
55780
|
];
|
|
55705
55781
|
return __toCommonJS(index_browser_exports);
|
package/dist/index.browser.mjs
CHANGED
|
@@ -4,6 +4,14 @@ import axios2 from "axios";
|
|
|
4
4
|
// src/global.ts
|
|
5
5
|
import axios from "axios";
|
|
6
6
|
|
|
7
|
+
// src/utils/logger.browser.ts
|
|
8
|
+
var logger = {
|
|
9
|
+
...console,
|
|
10
|
+
verbose(message) {
|
|
11
|
+
console.log(`[VERBOSE] ${message}`);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
|
|
7
15
|
// src/dataTypes/_bignumber.ts
|
|
8
16
|
import BigNumber from "bignumber.js";
|
|
9
17
|
var _Web3Number = class extends BigNumber {
|
|
@@ -20,6 +28,7 @@ var _Web3Number = class extends BigNumber {
|
|
|
20
28
|
}
|
|
21
29
|
dividedBy(value) {
|
|
22
30
|
const _value = this.getStandardString(value);
|
|
31
|
+
console.log("dividedBy", _value);
|
|
23
32
|
return this.construct(this.div(_value).toString(), this.decimals);
|
|
24
33
|
}
|
|
25
34
|
plus(value) {
|
|
@@ -33,13 +42,15 @@ var _Web3Number = class extends BigNumber {
|
|
|
33
42
|
construct(value, decimals) {
|
|
34
43
|
return new this.constructor(value, decimals);
|
|
35
44
|
}
|
|
36
|
-
toString(
|
|
37
|
-
return super.
|
|
45
|
+
toString() {
|
|
46
|
+
return super.toString();
|
|
38
47
|
}
|
|
39
48
|
toJSON() {
|
|
49
|
+
logger.verbose(`converting to json with decimals`);
|
|
40
50
|
return this.toString();
|
|
41
51
|
}
|
|
42
52
|
valueOf() {
|
|
53
|
+
logger.verbose(`converting to valueOf with decimals`);
|
|
43
54
|
return this.toString();
|
|
44
55
|
}
|
|
45
56
|
maxToFixedDecimals() {
|
|
@@ -95,12 +106,6 @@ var ContractAddr = class _ContractAddr {
|
|
|
95
106
|
};
|
|
96
107
|
|
|
97
108
|
// src/global.ts
|
|
98
|
-
var logger = {
|
|
99
|
-
...console,
|
|
100
|
-
verbose(message) {
|
|
101
|
-
console.log(`[VERBOSE] ${message}`);
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
109
|
var FatalError = class extends Error {
|
|
105
110
|
constructor(message, err) {
|
|
106
111
|
super(message);
|
|
@@ -686,7 +691,7 @@ var PricerFromApi = class extends PricerBase {
|
|
|
686
691
|
} catch (e) {
|
|
687
692
|
logger.warn("getPriceFromMyAPI error", JSON.stringify(e.message || e));
|
|
688
693
|
}
|
|
689
|
-
logger.
|
|
694
|
+
logger.info("getPrice coinbase", tokenSymbol);
|
|
690
695
|
let retry = 0;
|
|
691
696
|
const MAX_RETRIES = 5;
|
|
692
697
|
for (retry = 1; retry < MAX_RETRIES + 1; retry++) {
|
|
@@ -1867,6 +1872,11 @@ var ERC20 = class {
|
|
|
1867
1872
|
const balance = await contract.call("balanceOf", [address.toString()]);
|
|
1868
1873
|
return Web3Number.fromWei(balance.toString(), tokenDecimals);
|
|
1869
1874
|
}
|
|
1875
|
+
async allowance(token, owner, spender, tokenDecimals) {
|
|
1876
|
+
const contract = this.contract(token);
|
|
1877
|
+
const allowance = await contract.call("allowance", [owner.toString(), spender.toString()]);
|
|
1878
|
+
return Web3Number.fromWei(allowance.toString(), tokenDecimals);
|
|
1879
|
+
}
|
|
1870
1880
|
};
|
|
1871
1881
|
|
|
1872
1882
|
// src/modules/avnu.ts
|
|
@@ -13395,6 +13405,7 @@ var VesuRebalanceStrategies = [
|
|
|
13395
13405
|
address: ContractAddr.from(
|
|
13396
13406
|
"0x7fb5bcb8525954a60fde4e8fb8220477696ce7117ef264775a1770e23571929"
|
|
13397
13407
|
),
|
|
13408
|
+
launchBlock: 0,
|
|
13398
13409
|
type: "ERC4626",
|
|
13399
13410
|
depositTokens: [
|
|
13400
13411
|
Global.getDefaultTokens().find((t) => t.symbol === "STRK")
|
|
@@ -13418,6 +13429,7 @@ var VesuRebalanceStrategies = [
|
|
|
13418
13429
|
address: ContractAddr.from(
|
|
13419
13430
|
"0x5eaf5ee75231cecf79921ff8ded4b5ffe96be718bcb3daf206690ad1a9ad0ca"
|
|
13420
13431
|
),
|
|
13432
|
+
launchBlock: 0,
|
|
13421
13433
|
type: "ERC4626",
|
|
13422
13434
|
auditUrl: AUDIT_URL,
|
|
13423
13435
|
depositTokens: [
|
|
@@ -13441,6 +13453,7 @@ var VesuRebalanceStrategies = [
|
|
|
13441
13453
|
address: ContractAddr.from(
|
|
13442
13454
|
"0xa858c97e9454f407d1bd7c57472fc8d8d8449a777c822b41d18e387816f29c"
|
|
13443
13455
|
),
|
|
13456
|
+
launchBlock: 0,
|
|
13444
13457
|
type: "ERC4626",
|
|
13445
13458
|
auditUrl: AUDIT_URL,
|
|
13446
13459
|
depositTokens: [
|
|
@@ -13464,6 +13477,7 @@ var VesuRebalanceStrategies = [
|
|
|
13464
13477
|
address: ContractAddr.from(
|
|
13465
13478
|
"0x115e94e722cfc4c77a2f15c4aefb0928c1c0029e5a57570df24c650cb7cec2c"
|
|
13466
13479
|
),
|
|
13480
|
+
launchBlock: 0,
|
|
13467
13481
|
type: "ERC4626",
|
|
13468
13482
|
depositTokens: [
|
|
13469
13483
|
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
@@ -18430,11 +18444,15 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18430
18444
|
this.address.address,
|
|
18431
18445
|
this.config.provider
|
|
18432
18446
|
);
|
|
18433
|
-
this.lstContract
|
|
18434
|
-
|
|
18435
|
-
|
|
18436
|
-
|
|
18437
|
-
|
|
18447
|
+
if (this.metadata.additionalInfo.lstContract) {
|
|
18448
|
+
this.lstContract = new Contract6(
|
|
18449
|
+
erc4626_abi_default,
|
|
18450
|
+
this.metadata.additionalInfo.lstContract.address,
|
|
18451
|
+
this.config.provider
|
|
18452
|
+
);
|
|
18453
|
+
} else {
|
|
18454
|
+
this.lstContract = null;
|
|
18455
|
+
}
|
|
18438
18456
|
const EKUBO_POSITION = "0x02e0af29598b407c8716b17f6d2795eca1b471413fa03fb145a5e33722184067";
|
|
18439
18457
|
this.ekuboPositionsContract = new Contract6(
|
|
18440
18458
|
ekubo_positions_abi_default,
|
|
@@ -18568,7 +18586,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18568
18586
|
const priceNow = await this.getCurrentPrice(blockIdentifier);
|
|
18569
18587
|
let blockNow = typeof blockIdentifier == "number" ? blockIdentifier : (await this.config.provider.getBlockLatestAccepted()).block_number;
|
|
18570
18588
|
const blockNowTime = typeof blockIdentifier == "number" ? (await this.config.provider.getBlockWithTxs(blockIdentifier)).timestamp : (/* @__PURE__ */ new Date()).getTime() / 1e3;
|
|
18571
|
-
const blockBefore = blockNow - sinceBlocks;
|
|
18589
|
+
const blockBefore = Math.max(blockNow - sinceBlocks, this.metadata.launchBlock);
|
|
18572
18590
|
const adjustedSupplyNow = supplyNow.minus(
|
|
18573
18591
|
await this.getHarvestRewardShares(blockBefore, blockNow)
|
|
18574
18592
|
);
|
|
@@ -18579,9 +18597,9 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18579
18597
|
const supplyBefore = await this.totalSupply(blockBefore);
|
|
18580
18598
|
const priceBefore = await this.getCurrentPrice(blockBefore);
|
|
18581
18599
|
const tvlInToken0Now = tvlNow.amount0.multipliedBy(priceNow.price).plus(tvlNow.amount1);
|
|
18582
|
-
const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow);
|
|
18600
|
+
const tvlPerShareNow = tvlInToken0Now.multipliedBy(1e18).dividedBy(adjustedSupplyNow.toString());
|
|
18583
18601
|
const tvlInToken0Bf = tvlBefore.amount0.multipliedBy(priceBefore.price).plus(tvlBefore.amount1);
|
|
18584
|
-
const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore);
|
|
18602
|
+
const tvlPerShareBf = tvlInToken0Bf.multipliedBy(1e18).dividedBy(supplyBefore.toString());
|
|
18585
18603
|
const timeDiffSeconds = blockNowTime - blockBeforeInfo.timestamp;
|
|
18586
18604
|
logger.verbose(`tvlInToken0Now: ${tvlInToken0Now.toString()}`);
|
|
18587
18605
|
logger.verbose(`tvlInToken0Bf: ${tvlInToken0Bf.toString()}`);
|
|
@@ -18619,7 +18637,9 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18619
18637
|
return shares;
|
|
18620
18638
|
}
|
|
18621
18639
|
async balanceOf(user, blockIdentifier = "pending") {
|
|
18622
|
-
let bal = await this.contract.call("balance_of", [user.address]
|
|
18640
|
+
let bal = await this.contract.call("balance_of", [user.address], {
|
|
18641
|
+
blockIdentifier
|
|
18642
|
+
});
|
|
18623
18643
|
return Web3Number.fromWei(bal.toString(), 18);
|
|
18624
18644
|
}
|
|
18625
18645
|
async getUserTVL(user, blockIdentifier = "pending") {
|
|
@@ -18767,11 +18787,16 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
18767
18787
|
return Number(result.salt.toString());
|
|
18768
18788
|
}
|
|
18769
18789
|
async truePrice() {
|
|
18770
|
-
|
|
18771
|
-
|
|
18772
|
-
|
|
18773
|
-
|
|
18774
|
-
|
|
18790
|
+
if (this.metadata.additionalInfo.truePrice) {
|
|
18791
|
+
return this.metadata.additionalInfo.truePrice;
|
|
18792
|
+
} else if (this.lstContract) {
|
|
18793
|
+
const result = await this.lstContract.call("convert_to_assets", [
|
|
18794
|
+
uint2564.bnToUint256(BigInt(1e18).toString())
|
|
18795
|
+
]);
|
|
18796
|
+
const truePrice = Number(BigInt(result.toString()) * BigInt(1e9) / BigInt(1e18)) / 1e9;
|
|
18797
|
+
return truePrice;
|
|
18798
|
+
}
|
|
18799
|
+
throw new Error("No true price available");
|
|
18775
18800
|
}
|
|
18776
18801
|
async getCurrentPrice(blockIdentifier = "pending") {
|
|
18777
18802
|
const poolKey = await this.getPoolKey(blockIdentifier);
|
|
@@ -19325,6 +19350,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
19325
19350
|
const swap1Amount = Web3Number.fromWei(
|
|
19326
19351
|
uint2564.uint256ToBN(swapInfo1.token_from_amount).toString(),
|
|
19327
19352
|
18
|
|
19353
|
+
// cause its always STRK?
|
|
19328
19354
|
);
|
|
19329
19355
|
const remainingAmount = postFeeAmount.minus(swap1Amount);
|
|
19330
19356
|
const swapInfo2 = {
|
|
@@ -19415,6 +19441,9 @@ var _riskFactor2 = [
|
|
|
19415
19441
|
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
19416
19442
|
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
|
|
19417
19443
|
];
|
|
19444
|
+
var _riskFactorStable = [
|
|
19445
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 }
|
|
19446
|
+
];
|
|
19418
19447
|
var AUDIT_URL2 = "https://assets.strkfarm.com/strkfarm/audit_report_vesu_and_ekubo_strats.pdf";
|
|
19419
19448
|
var faqs2 = [
|
|
19420
19449
|
{
|
|
@@ -19461,6 +19490,7 @@ var EkuboCLVaultStrategies = [
|
|
|
19461
19490
|
address: ContractAddr.from(
|
|
19462
19491
|
"0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"
|
|
19463
19492
|
),
|
|
19493
|
+
launchBlock: 1209881,
|
|
19464
19494
|
type: "Other",
|
|
19465
19495
|
// must be same order as poolKey token0 and token1
|
|
19466
19496
|
depositTokens: [
|
|
@@ -19493,6 +19523,53 @@ var EkuboCLVaultStrategies = [
|
|
|
19493
19523
|
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."
|
|
19494
19524
|
}
|
|
19495
19525
|
]
|
|
19526
|
+
},
|
|
19527
|
+
{
|
|
19528
|
+
name: "Ekubo USDC/USDT",
|
|
19529
|
+
description: /* @__PURE__ */ jsxs2("div", { children: [
|
|
19530
|
+
/* @__PURE__ */ jsx2("p", { children: _description2.replace("{{POOL_NAME}}", "USDC/USDT") }),
|
|
19531
|
+
/* @__PURE__ */ jsx2(
|
|
19532
|
+
"ul",
|
|
19533
|
+
{
|
|
19534
|
+
style: {
|
|
19535
|
+
marginLeft: "20px",
|
|
19536
|
+
listStyle: "circle",
|
|
19537
|
+
fontSize: "12px"
|
|
19538
|
+
},
|
|
19539
|
+
children: /* @__PURE__ */ jsx2("li", { style: { marginTop: "10px" }, children: "During withdrawal, you may receive either or both tokens depending on market conditions and prevailing prices." })
|
|
19540
|
+
}
|
|
19541
|
+
)
|
|
19542
|
+
] }),
|
|
19543
|
+
address: ContractAddr.from(
|
|
19544
|
+
"0xd647ed735f0db52f2a5502b6e06ed21dc4284a43a36af4b60d3c80fbc56c91"
|
|
19545
|
+
),
|
|
19546
|
+
launchBlock: 1385576,
|
|
19547
|
+
type: "Other",
|
|
19548
|
+
// must be same order as poolKey token0 and token1
|
|
19549
|
+
depositTokens: [
|
|
19550
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDC"),
|
|
19551
|
+
Global.getDefaultTokens().find((t) => t.symbol === "USDT")
|
|
19552
|
+
],
|
|
19553
|
+
protocols: [_protocol2],
|
|
19554
|
+
auditUrl: AUDIT_URL2,
|
|
19555
|
+
maxTVL: Web3Number.fromWei("0", 6),
|
|
19556
|
+
risk: {
|
|
19557
|
+
riskFactor: _riskFactorStable,
|
|
19558
|
+
netRisk: _riskFactorStable.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactorStable.reduce((acc, curr) => acc + curr.weight, 0),
|
|
19559
|
+
notARisks: getNoRiskTags(_riskFactorStable)
|
|
19560
|
+
},
|
|
19561
|
+
apyMethodology: "APY based on 7-day historical performance, including fees and rewards.",
|
|
19562
|
+
additionalInfo: {
|
|
19563
|
+
newBounds: {
|
|
19564
|
+
lower: -1,
|
|
19565
|
+
upper: 1
|
|
19566
|
+
},
|
|
19567
|
+
truePrice: 1,
|
|
19568
|
+
feeBps: 1e3
|
|
19569
|
+
},
|
|
19570
|
+
faqs: [
|
|
19571
|
+
...faqs2
|
|
19572
|
+
]
|
|
19496
19573
|
}
|
|
19497
19574
|
];
|
|
19498
19575
|
export {
|
|
@@ -19521,6 +19598,5 @@ export {
|
|
|
19521
19598
|
getMainnetConfig,
|
|
19522
19599
|
getNoRiskTags,
|
|
19523
19600
|
getRiskColor,
|
|
19524
|
-
getRiskExplaination
|
|
19525
|
-
logger
|
|
19601
|
+
getRiskExplaination
|
|
19526
19602
|
};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,6 @@ import * as starknet from 'starknet';
|
|
|
3
3
|
import { RpcProvider, BlockIdentifier, Contract, Uint256, Call, Account } from 'starknet';
|
|
4
4
|
import React from 'react';
|
|
5
5
|
import { Quote } from '@avnu/avnu-sdk';
|
|
6
|
-
import * as util from 'util';
|
|
7
6
|
import TelegramBot from 'node-telegram-bot-api';
|
|
8
7
|
|
|
9
8
|
declare class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
|
|
@@ -15,7 +14,7 @@ declare class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
|
|
|
15
14
|
plus(value: string | number | T): T;
|
|
16
15
|
minus(n: number | string | T, base?: number): T;
|
|
17
16
|
protected construct(value: string | number, decimals: number): T;
|
|
18
|
-
toString(
|
|
17
|
+
toString(): string;
|
|
19
18
|
toJSON(): string;
|
|
20
19
|
valueOf(): string;
|
|
21
20
|
private maxToFixedDecimals;
|
|
@@ -97,6 +96,7 @@ interface IStrategyMetadata<T> {
|
|
|
97
96
|
name: string;
|
|
98
97
|
description: string | React.ReactNode;
|
|
99
98
|
address: ContractAddr;
|
|
99
|
+
launchBlock: number;
|
|
100
100
|
type: "ERC4626" | "ERC721" | "Other";
|
|
101
101
|
depositTokens: TokenInfo[];
|
|
102
102
|
protocols: IProtocol[];
|
|
@@ -265,6 +265,7 @@ declare class ERC20 {
|
|
|
265
265
|
constructor(config: IConfig);
|
|
266
266
|
contract(addr: string | ContractAddr): Contract;
|
|
267
267
|
balanceOf(token: string | ContractAddr, address: string | ContractAddr, tokenDecimals: number): Promise<Web3Number>;
|
|
268
|
+
allowance(token: string | ContractAddr, owner: string | ContractAddr, spender: string | ContractAddr, tokenDecimals: number): Promise<Web3Number>;
|
|
268
269
|
}
|
|
269
270
|
|
|
270
271
|
interface Route {
|
|
@@ -290,52 +291,6 @@ declare class AvnuWrapper {
|
|
|
290
291
|
getSwapInfo(quote: Quote, taker: string, integratorFeeBps: number, integratorFeeRecipient: string, minAmount?: string): Promise<SwapInfo>;
|
|
291
292
|
}
|
|
292
293
|
|
|
293
|
-
declare const logger: {
|
|
294
|
-
verbose(message: string): void;
|
|
295
|
-
assert(condition?: boolean, ...data: any[]): void;
|
|
296
|
-
assert(value: any, message?: string, ...optionalParams: any[]): void;
|
|
297
|
-
clear(): void;
|
|
298
|
-
clear(): void;
|
|
299
|
-
count(label?: string): void;
|
|
300
|
-
count(label?: string): void;
|
|
301
|
-
countReset(label?: string): void;
|
|
302
|
-
countReset(label?: string): void;
|
|
303
|
-
debug(...data: any[]): void;
|
|
304
|
-
debug(message?: any, ...optionalParams: any[]): void;
|
|
305
|
-
dir(item?: any, options?: any): void;
|
|
306
|
-
dir(obj: any, options?: util.InspectOptions): void;
|
|
307
|
-
dirxml(...data: any[]): void;
|
|
308
|
-
dirxml(...data: any[]): void;
|
|
309
|
-
error(...data: any[]): void;
|
|
310
|
-
error(message?: any, ...optionalParams: any[]): void;
|
|
311
|
-
group(...data: any[]): void;
|
|
312
|
-
group(...label: any[]): void;
|
|
313
|
-
groupCollapsed(...data: any[]): void;
|
|
314
|
-
groupCollapsed(...label: any[]): void;
|
|
315
|
-
groupEnd(): void;
|
|
316
|
-
groupEnd(): void;
|
|
317
|
-
info(...data: any[]): void;
|
|
318
|
-
info(message?: any, ...optionalParams: any[]): void;
|
|
319
|
-
log(...data: any[]): void;
|
|
320
|
-
log(message?: any, ...optionalParams: any[]): void;
|
|
321
|
-
table(tabularData?: any, properties?: string[]): void;
|
|
322
|
-
table(tabularData: any, properties?: readonly string[]): void;
|
|
323
|
-
time(label?: string): void;
|
|
324
|
-
time(label?: string): void;
|
|
325
|
-
timeEnd(label?: string): void;
|
|
326
|
-
timeEnd(label?: string): void;
|
|
327
|
-
timeLog(label?: string, ...data: any[]): void;
|
|
328
|
-
timeLog(label?: string, ...data: any[]): void;
|
|
329
|
-
timeStamp(label?: string): void;
|
|
330
|
-
timeStamp(label?: string): void;
|
|
331
|
-
trace(...data: any[]): void;
|
|
332
|
-
trace(message?: any, ...optionalParams: any[]): void;
|
|
333
|
-
warn(...data: any[]): void;
|
|
334
|
-
warn(message?: any, ...optionalParams: any[]): void;
|
|
335
|
-
Console: console.ConsoleConstructor;
|
|
336
|
-
profile(label?: string): void;
|
|
337
|
-
profileEnd(label?: string): void;
|
|
338
|
-
};
|
|
339
294
|
declare class FatalError extends Error {
|
|
340
295
|
constructor(message: string, err?: Error);
|
|
341
296
|
}
|
|
@@ -640,7 +595,8 @@ interface CLVaultStrategySettings {
|
|
|
640
595
|
lower: number;
|
|
641
596
|
upper: number;
|
|
642
597
|
};
|
|
643
|
-
lstContract
|
|
598
|
+
lstContract?: ContractAddr;
|
|
599
|
+
truePrice?: number;
|
|
644
600
|
feeBps: number;
|
|
645
601
|
}
|
|
646
602
|
declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount> {
|
|
@@ -655,7 +611,7 @@ declare class EkuboCLVault extends BaseStrategy<DualTokenInfo, DualActionAmount>
|
|
|
655
611
|
readonly BASE_WEIGHT = 10000;
|
|
656
612
|
readonly ekuboPositionsContract: Contract;
|
|
657
613
|
readonly ekuboMathContract: Contract;
|
|
658
|
-
readonly lstContract: Contract;
|
|
614
|
+
readonly lstContract: Contract | null;
|
|
659
615
|
poolKey: EkuboPoolKey | undefined;
|
|
660
616
|
readonly avnu: AvnuWrapper;
|
|
661
617
|
/**
|
|
@@ -766,6 +722,19 @@ declare class TelegramNotif {
|
|
|
766
722
|
sendMessage(msg: string): void;
|
|
767
723
|
}
|
|
768
724
|
|
|
725
|
+
interface LeveledLogMethod {
|
|
726
|
+
(message: string, ...meta: any[]): void;
|
|
727
|
+
(message: any): void;
|
|
728
|
+
}
|
|
729
|
+
interface MyLogger {
|
|
730
|
+
error: LeveledLogMethod;
|
|
731
|
+
warn: LeveledLogMethod;
|
|
732
|
+
info: LeveledLogMethod;
|
|
733
|
+
verbose: LeveledLogMethod;
|
|
734
|
+
debug: LeveledLogMethod;
|
|
735
|
+
}
|
|
736
|
+
declare const logger: MyLogger;
|
|
737
|
+
|
|
769
738
|
type RequiredFields<T> = {
|
|
770
739
|
[K in keyof T]-?: T[K];
|
|
771
740
|
};
|