@strkfarm/sdk 1.0.18 → 1.0.19
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 +276 -90
- package/dist/cli.mjs +270 -84
- package/dist/index.browser.global.js +28402 -19296
- package/dist/index.browser.mjs +8064 -1366
- package/dist/index.d.ts +201 -24
- package/dist/index.js +7946 -1219
- package/dist/index.mjs +8096 -1377
- package/package.json +3 -1
- package/src/data/cl-vault.abi.json +1434 -0
- package/src/data/ekubo-math.abi.json +333 -0
- package/src/data/ekubo-positions.abi.json +1594 -0
- package/src/data/erc20.abi.json +1122 -0
- package/src/data/erc4626.abi.json +1530 -0
- package/src/dataTypes/_bignumber.ts +53 -0
- package/src/dataTypes/address.ts +4 -0
- package/src/dataTypes/bignumber.browser.ts +8 -0
- package/src/dataTypes/bignumber.node.ts +22 -0
- package/src/dataTypes/bignumber.ts +1 -55
- package/src/dataTypes/index.ts +1 -1
- package/src/global.ts +54 -4
- package/src/interfaces/common.ts +56 -9
- package/src/interfaces/lending.ts +1 -1
- package/src/modules/avnu.ts +93 -0
- package/src/modules/erc20.ts +23 -0
- package/src/modules/index.ts +2 -0
- package/src/modules/pricer.ts +1 -1
- package/src/modules/zkLend.ts +2 -2
- package/src/node/headless.browser.ts +9 -0
- package/src/node/headless.node.ts +36 -0
- package/src/node/headless.ts +1 -0
- package/src/node/index.ts +2 -1
- package/src/strategies/base-strategy.ts +47 -0
- package/src/strategies/ekubo-cl-vault.ts +535 -0
- package/src/strategies/index.ts +2 -1
- package/src/strategies/vesu-rebalance.ts +111 -25
package/dist/cli.js
CHANGED
|
@@ -29,7 +29,7 @@ var import_inquirer = __toESM(require("inquirer"));
|
|
|
29
29
|
|
|
30
30
|
// src/utils/store.ts
|
|
31
31
|
var import_fs = __toESM(require("fs"));
|
|
32
|
-
var
|
|
32
|
+
var import_starknet9 = require("starknet");
|
|
33
33
|
var crypto2 = __toESM(require("crypto"));
|
|
34
34
|
|
|
35
35
|
// src/utils/encrypt.ts
|
|
@@ -86,6 +86,101 @@ var import_axios2 = __toESM(require("axios"));
|
|
|
86
86
|
|
|
87
87
|
// src/global.ts
|
|
88
88
|
var import_axios = __toESM(require("axios"));
|
|
89
|
+
|
|
90
|
+
// src/dataTypes/bignumber.node.ts
|
|
91
|
+
var import_util = __toESM(require("util"));
|
|
92
|
+
|
|
93
|
+
// src/dataTypes/_bignumber.ts
|
|
94
|
+
var import_bignumber = __toESM(require("bignumber.js"));
|
|
95
|
+
var _Web3Number = class extends import_bignumber.default {
|
|
96
|
+
constructor(value, decimals) {
|
|
97
|
+
super(value);
|
|
98
|
+
this.decimals = decimals;
|
|
99
|
+
}
|
|
100
|
+
toWei() {
|
|
101
|
+
return this.mul(10 ** this.decimals).toFixed(0);
|
|
102
|
+
}
|
|
103
|
+
multipliedBy(value) {
|
|
104
|
+
let _value = Number(value).toFixed(13);
|
|
105
|
+
return this.construct(this.mul(_value).toString(), this.decimals);
|
|
106
|
+
}
|
|
107
|
+
dividedBy(value) {
|
|
108
|
+
let _value = Number(value).toFixed(13);
|
|
109
|
+
return this.construct(this.div(_value).toString(), this.decimals);
|
|
110
|
+
}
|
|
111
|
+
plus(value) {
|
|
112
|
+
const _value = Number(value).toFixed(13);
|
|
113
|
+
return this.construct(this.add(_value).toString(), this.decimals);
|
|
114
|
+
}
|
|
115
|
+
minus(n, base) {
|
|
116
|
+
const _value = Number(n).toFixed(13);
|
|
117
|
+
return this.construct(super.minus(_value, base).toString(), this.decimals);
|
|
118
|
+
}
|
|
119
|
+
construct(value, decimals) {
|
|
120
|
+
return new this.constructor(value, decimals);
|
|
121
|
+
}
|
|
122
|
+
toString(base) {
|
|
123
|
+
return super.toString(base);
|
|
124
|
+
}
|
|
125
|
+
toJSON() {
|
|
126
|
+
return this.toString();
|
|
127
|
+
}
|
|
128
|
+
valueOf() {
|
|
129
|
+
return this.toString();
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
import_bignumber.default.config({ DECIMAL_PLACES: 18 });
|
|
133
|
+
_Web3Number.config({ DECIMAL_PLACES: 18 });
|
|
134
|
+
|
|
135
|
+
// src/dataTypes/bignumber.node.ts
|
|
136
|
+
var Web3Number = class _Web3Number2 extends _Web3Number {
|
|
137
|
+
static fromWei(weiNumber, decimals) {
|
|
138
|
+
const bn = new _Web3Number2(weiNumber, decimals).dividedBy(10 ** decimals);
|
|
139
|
+
return new _Web3Number2(bn.toString(), decimals);
|
|
140
|
+
}
|
|
141
|
+
[import_util.default.inspect.custom](depth, opts) {
|
|
142
|
+
return this.toString();
|
|
143
|
+
}
|
|
144
|
+
[Symbol.for("nodejs.util.inspect.custom")](depth, inspectOptions, inspect) {
|
|
145
|
+
return this.toString();
|
|
146
|
+
}
|
|
147
|
+
inspect(depth, opts) {
|
|
148
|
+
return this.toString();
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// src/dataTypes/address.ts
|
|
153
|
+
var import_starknet = require("starknet");
|
|
154
|
+
var ContractAddr = class _ContractAddr {
|
|
155
|
+
constructor(address) {
|
|
156
|
+
this.address = _ContractAddr.standardise(address);
|
|
157
|
+
}
|
|
158
|
+
static from(address) {
|
|
159
|
+
return new _ContractAddr(address);
|
|
160
|
+
}
|
|
161
|
+
eq(other) {
|
|
162
|
+
return this.address === other.address;
|
|
163
|
+
}
|
|
164
|
+
eqString(other) {
|
|
165
|
+
return this.address === _ContractAddr.standardise(other);
|
|
166
|
+
}
|
|
167
|
+
static standardise(address) {
|
|
168
|
+
let _a = address;
|
|
169
|
+
if (!address) {
|
|
170
|
+
_a = "0";
|
|
171
|
+
}
|
|
172
|
+
const a = import_starknet.num.getHexString(import_starknet.num.getDecimalString(_a.toString()));
|
|
173
|
+
return a;
|
|
174
|
+
}
|
|
175
|
+
static eqString(a, b) {
|
|
176
|
+
return _ContractAddr.standardise(a) === _ContractAddr.standardise(b);
|
|
177
|
+
}
|
|
178
|
+
toString() {
|
|
179
|
+
return this.address;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
|
|
183
|
+
// src/global.ts
|
|
89
184
|
var logger = {
|
|
90
185
|
...console,
|
|
91
186
|
verbose(message) {
|
|
@@ -101,15 +196,51 @@ var FatalError = class extends Error {
|
|
|
101
196
|
this.name = "FatalError";
|
|
102
197
|
}
|
|
103
198
|
};
|
|
104
|
-
var
|
|
199
|
+
var defaultTokens = [{
|
|
105
200
|
name: "Starknet",
|
|
106
201
|
symbol: "STRK",
|
|
107
202
|
logo: "https://assets.coingecko.com/coins/images/26433/small/starknet.png",
|
|
108
|
-
address: "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
|
|
203
|
+
address: ContractAddr.from("0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d"),
|
|
109
204
|
decimals: 18,
|
|
110
205
|
coingeckId: "starknet"
|
|
206
|
+
}, {
|
|
207
|
+
name: "xSTRK",
|
|
208
|
+
symbol: "xSTRK",
|
|
209
|
+
logo: "https://dashboard.endur.fi/endur-fi.svg",
|
|
210
|
+
address: ContractAddr.from("0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a"),
|
|
211
|
+
decimals: 18,
|
|
212
|
+
coingeckId: void 0
|
|
213
|
+
}, {
|
|
214
|
+
name: "ETH",
|
|
215
|
+
symbol: "ETH",
|
|
216
|
+
logo: "https://opbnb.bscscan.com/token/images/ether.svg",
|
|
217
|
+
address: ContractAddr.from("0x49d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7"),
|
|
218
|
+
decimals: 18,
|
|
219
|
+
coingeckId: void 0
|
|
220
|
+
}, {
|
|
221
|
+
name: "USDC",
|
|
222
|
+
symbol: "USDC",
|
|
223
|
+
logo: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48/logo.png",
|
|
224
|
+
address: ContractAddr.from("0x53c91253bc9682c04929ca02ed00b3e423f6710d2ee7e0d5ebb06f3ecf368a8"),
|
|
225
|
+
decimals: 6,
|
|
226
|
+
coingeckId: void 0
|
|
227
|
+
}, {
|
|
228
|
+
name: "USDT",
|
|
229
|
+
symbol: "USDT",
|
|
230
|
+
logo: "https://assets.coingecko.com/coins/images/325/small/Tether.png",
|
|
231
|
+
address: ContractAddr.from("0x68f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8"),
|
|
232
|
+
decimals: 6,
|
|
233
|
+
coingeckId: void 0
|
|
234
|
+
}, {
|
|
235
|
+
name: "WBTC",
|
|
236
|
+
symbol: "WBTC",
|
|
237
|
+
logo: "https://raw.githubusercontent.com/trustwallet/assets/master/blockchains/ethereum/assets/0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599/logo.png",
|
|
238
|
+
address: ContractAddr.from("0x3fe2b97c1fd336e750087d68b9b867997fd64a2661ff3ca5a7c771641e8e7ac"),
|
|
239
|
+
decimals: 8,
|
|
240
|
+
coingeckId: void 0
|
|
111
241
|
}];
|
|
112
|
-
var
|
|
242
|
+
var tokens = defaultTokens;
|
|
243
|
+
var Global = class _Global {
|
|
113
244
|
static fatalError(message, err) {
|
|
114
245
|
logger.error(message);
|
|
115
246
|
console.error(message, err);
|
|
@@ -135,7 +266,7 @@ var Global = class {
|
|
|
135
266
|
tokens.push({
|
|
136
267
|
name: token.name,
|
|
137
268
|
symbol: token.symbol,
|
|
138
|
-
address: token.address,
|
|
269
|
+
address: ContractAddr.from(token.address),
|
|
139
270
|
decimals: token.decimals,
|
|
140
271
|
logo: token.logoUri,
|
|
141
272
|
coingeckId: token.extensions.coingeckoId
|
|
@@ -149,71 +280,15 @@ var Global = class {
|
|
|
149
280
|
throw new FatalError(message);
|
|
150
281
|
}
|
|
151
282
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
var import_bignumber = __toESM(require("bignumber.js"));
|
|
156
|
-
var Web3Number = class _Web3Number extends import_bignumber.default {
|
|
157
|
-
constructor(value, decimals) {
|
|
158
|
-
super(value);
|
|
159
|
-
this.decimals = decimals;
|
|
160
|
-
}
|
|
161
|
-
static fromWei(weiNumber, decimals) {
|
|
162
|
-
const bn = new _Web3Number(weiNumber, decimals).dividedBy(10 ** decimals);
|
|
163
|
-
return new _Web3Number(bn.toString(), decimals);
|
|
164
|
-
}
|
|
165
|
-
toWei() {
|
|
166
|
-
return this.mul(10 ** this.decimals).toFixed(0);
|
|
167
|
-
}
|
|
168
|
-
multipliedBy(value) {
|
|
169
|
-
let _value = Number(value).toFixed(6);
|
|
170
|
-
return new _Web3Number(this.mul(_value).toString(), this.decimals);
|
|
171
|
-
}
|
|
172
|
-
dividedBy(value) {
|
|
173
|
-
let _value = Number(value).toFixed(6);
|
|
174
|
-
return new _Web3Number(this.div(_value).toString(), this.decimals);
|
|
175
|
-
}
|
|
176
|
-
plus(value) {
|
|
177
|
-
return new _Web3Number(this.add(value).toString(), this.decimals);
|
|
178
|
-
}
|
|
179
|
-
minus(n, base) {
|
|
180
|
-
return new _Web3Number(super.minus(n, base).toString(), this.decimals);
|
|
181
|
-
}
|
|
182
|
-
toString(base) {
|
|
183
|
-
return super.toString(base);
|
|
184
|
-
}
|
|
185
|
-
// [customInspectSymbol](depth: any, inspectOptions: any, inspect: any) {
|
|
186
|
-
// return this.toString();
|
|
187
|
-
// }
|
|
188
|
-
};
|
|
189
|
-
import_bignumber.default.config({ DECIMAL_PLACES: 18 });
|
|
190
|
-
Web3Number.config({ DECIMAL_PLACES: 18 });
|
|
191
|
-
|
|
192
|
-
// src/dataTypes/address.ts
|
|
193
|
-
var import_starknet = require("starknet");
|
|
194
|
-
var ContractAddr = class _ContractAddr {
|
|
195
|
-
constructor(address) {
|
|
196
|
-
this.address = _ContractAddr.standardise(address);
|
|
197
|
-
}
|
|
198
|
-
static from(address) {
|
|
199
|
-
return new _ContractAddr(address);
|
|
200
|
-
}
|
|
201
|
-
eq(other) {
|
|
202
|
-
return this.address === other.address;
|
|
203
|
-
}
|
|
204
|
-
eqString(other) {
|
|
205
|
-
return this.address === _ContractAddr.standardise(other);
|
|
206
|
-
}
|
|
207
|
-
static standardise(address) {
|
|
208
|
-
let _a = address;
|
|
209
|
-
if (!address) {
|
|
210
|
-
_a = "0";
|
|
283
|
+
static async getTokenInfoFromAddr(addr) {
|
|
284
|
+
if (tokens.length == defaultTokens.length) {
|
|
285
|
+
await _Global.getTokens();
|
|
211
286
|
}
|
|
212
|
-
const
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
return
|
|
287
|
+
const token = tokens.find((token2) => addr.eq(token2.address));
|
|
288
|
+
if (!token) {
|
|
289
|
+
throw new FatalError(`Token not found: ${addr.address}`);
|
|
290
|
+
}
|
|
291
|
+
return token;
|
|
217
292
|
}
|
|
218
293
|
};
|
|
219
294
|
|
|
@@ -223,6 +298,14 @@ var import_starknet2 = require("starknet");
|
|
|
223
298
|
// src/modules/zkLend.ts
|
|
224
299
|
var import_axios3 = __toESM(require("axios"));
|
|
225
300
|
|
|
301
|
+
// src/dataTypes/bignumber.browser.ts
|
|
302
|
+
var Web3Number2 = class _Web3Number2 extends _Web3Number {
|
|
303
|
+
static fromWei(weiNumber, decimals) {
|
|
304
|
+
const bn = new _Web3Number2(weiNumber, decimals).dividedBy(10 ** decimals);
|
|
305
|
+
return new _Web3Number2(bn.toString(), decimals);
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
|
|
226
309
|
// src/interfaces/lending.ts
|
|
227
310
|
var ILending = class {
|
|
228
311
|
constructor(config, metadata) {
|
|
@@ -264,18 +347,18 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
264
347
|
const data = result.data;
|
|
265
348
|
const savedTokens = await Global.getTokens();
|
|
266
349
|
data.forEach((pool) => {
|
|
267
|
-
let collareralFactor = new
|
|
350
|
+
let collareralFactor = new Web3Number2(0, 0);
|
|
268
351
|
if (pool.collateral_factor) {
|
|
269
|
-
collareralFactor =
|
|
352
|
+
collareralFactor = Web3Number2.fromWei(pool.collateral_factor.value, pool.collateral_factor.decimals);
|
|
270
353
|
}
|
|
271
354
|
const savedTokenInfo = savedTokens.find((t) => t.symbol == pool.token.symbol);
|
|
272
355
|
const token = {
|
|
273
356
|
name: pool.token.name,
|
|
274
357
|
symbol: pool.token.symbol,
|
|
275
|
-
address: savedTokenInfo?.address || "",
|
|
358
|
+
address: savedTokenInfo?.address || ContractAddr.from(""),
|
|
276
359
|
logo: "",
|
|
277
360
|
decimals: pool.token.decimals,
|
|
278
|
-
borrowFactor:
|
|
361
|
+
borrowFactor: Web3Number2.fromWei(pool.borrow_factor.value, pool.borrow_factor.decimals),
|
|
279
362
|
collareralFactor
|
|
280
363
|
};
|
|
281
364
|
this.tokens.push(token);
|
|
@@ -296,7 +379,7 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
296
379
|
async get_health_factor_tokenwise(lending_tokens, debt_tokens, user) {
|
|
297
380
|
const positions = await this.getPositions(user);
|
|
298
381
|
logger.verbose(`${this.metadata.name}:: Positions: ${JSON.stringify(positions)}`);
|
|
299
|
-
let effectiveDebt = new
|
|
382
|
+
let effectiveDebt = new Web3Number2(0, 6);
|
|
300
383
|
positions.filter((pos) => {
|
|
301
384
|
return debt_tokens.find((t) => t.symbol === pos.tokenSymbol);
|
|
302
385
|
}).forEach((pos) => {
|
|
@@ -310,7 +393,7 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
310
393
|
if (effectiveDebt.isZero()) {
|
|
311
394
|
return Infinity;
|
|
312
395
|
}
|
|
313
|
-
let effectiveCollateral = new
|
|
396
|
+
let effectiveCollateral = new Web3Number2(0, 6);
|
|
314
397
|
positions.filter((pos) => {
|
|
315
398
|
const exp1 = lending_tokens.find((t) => t.symbol === pos.tokenSymbol);
|
|
316
399
|
const exp2 = pos.marginType === "shared" /* SHARED */;
|
|
@@ -363,8 +446,8 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
363
446
|
if (!token) {
|
|
364
447
|
throw new FatalError(`Token ${pool.token_symbol} not found in ${this.metadata.name}`);
|
|
365
448
|
}
|
|
366
|
-
const debtAmount =
|
|
367
|
-
const supplyAmount =
|
|
449
|
+
const debtAmount = Web3Number2.fromWei(pool.data.debt_amount, token.decimals);
|
|
450
|
+
const supplyAmount = Web3Number2.fromWei(pool.data.supply_amount, token.decimals);
|
|
368
451
|
const price = (await this.pricer.getPrice(token.symbol)).price;
|
|
369
452
|
lendingPosition.push({
|
|
370
453
|
tokenName: token.name,
|
|
@@ -386,33 +469,136 @@ var ZkLend = _ZkLend;
|
|
|
386
469
|
// src/modules/pricer-from-api.ts
|
|
387
470
|
var import_axios4 = __toESM(require("axios"));
|
|
388
471
|
|
|
389
|
-
// src/
|
|
472
|
+
// src/modules/erc20.ts
|
|
390
473
|
var import_starknet3 = require("starknet");
|
|
391
474
|
|
|
392
|
-
// src/
|
|
475
|
+
// src/modules/avnu.ts
|
|
393
476
|
var import_starknet4 = require("starknet");
|
|
477
|
+
var import_avnu_sdk = require("@avnu/avnu-sdk");
|
|
394
478
|
|
|
395
|
-
// src/
|
|
479
|
+
// src/interfaces/common.ts
|
|
396
480
|
var import_starknet5 = require("starknet");
|
|
481
|
+
|
|
482
|
+
// src/strategies/autoCompounderStrk.ts
|
|
483
|
+
var import_starknet6 = require("starknet");
|
|
484
|
+
|
|
485
|
+
// src/strategies/vesu-rebalance.ts
|
|
486
|
+
var import_starknet7 = require("starknet");
|
|
487
|
+
|
|
488
|
+
// src/node/headless.browser.ts
|
|
397
489
|
var import_axios5 = __toESM(require("axios"));
|
|
490
|
+
|
|
491
|
+
// src/strategies/vesu-rebalance.ts
|
|
398
492
|
var _description = "Automatically diversify {{TOKEN}} holdings into different Vesu pools while reducing risk and maximizing yield. Defi spring STRK Rewards are auto-compounded as well.";
|
|
399
493
|
var _protocol = { name: "Vesu", logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png" };
|
|
400
494
|
var _riskFactor = [
|
|
401
|
-
{ type: "
|
|
402
|
-
{ type: "
|
|
403
|
-
{ type: "
|
|
495
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
496
|
+
{ type: "Counterparty Risk" /* COUNTERPARTY_RISK */, value: 1, weight: 50 },
|
|
497
|
+
{ type: "Oracle Risk" /* ORACLE_RISK */, value: 0.5, weight: 25 }
|
|
404
498
|
];
|
|
405
499
|
var VesuRebalanceStrategies = [{
|
|
406
|
-
name: "Vesu STRK",
|
|
500
|
+
name: "Vesu Fusion STRK",
|
|
407
501
|
description: _description.replace("{{TOKEN}}", "STRK"),
|
|
408
|
-
address: ContractAddr.from("
|
|
502
|
+
address: ContractAddr.from("0x778007f8136a5b827325d21613803e796bda4d676fbe1e34aeab0b2a2ec027f"),
|
|
409
503
|
type: "ERC4626",
|
|
410
504
|
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "STRK")],
|
|
411
505
|
protocols: [_protocol],
|
|
412
506
|
maxTVL: Web3Number.fromWei("0", 18),
|
|
413
507
|
risk: {
|
|
414
508
|
riskFactor: _riskFactor,
|
|
415
|
-
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) /
|
|
509
|
+
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0)
|
|
510
|
+
},
|
|
511
|
+
additionalInfo: {
|
|
512
|
+
feeBps: 1e3
|
|
513
|
+
}
|
|
514
|
+
}, {
|
|
515
|
+
name: "Vesu Fusion ETH",
|
|
516
|
+
description: _description.replace("{{TOKEN}}", "ETH"),
|
|
517
|
+
address: ContractAddr.from("0x26ea414fdf74ace1df5bc5ac72cbac670d438ef19b31edf9d59f98718fc0ab2"),
|
|
518
|
+
type: "ERC4626",
|
|
519
|
+
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "ETH")],
|
|
520
|
+
protocols: [_protocol],
|
|
521
|
+
maxTVL: Web3Number.fromWei("0", 18),
|
|
522
|
+
risk: {
|
|
523
|
+
riskFactor: _riskFactor,
|
|
524
|
+
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0)
|
|
525
|
+
},
|
|
526
|
+
additionalInfo: {
|
|
527
|
+
feeBps: 1e3
|
|
528
|
+
}
|
|
529
|
+
}, {
|
|
530
|
+
name: "Vesu Fusion USDC",
|
|
531
|
+
description: _description.replace("{{TOKEN}}", "USDC"),
|
|
532
|
+
address: ContractAddr.from("0x3a69adeb993cddb266962d9c995e3d0641dab627df22b825fa31bda460c3c14"),
|
|
533
|
+
type: "ERC4626",
|
|
534
|
+
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "USDC")],
|
|
535
|
+
protocols: [_protocol],
|
|
536
|
+
maxTVL: Web3Number.fromWei("0", 6),
|
|
537
|
+
risk: {
|
|
538
|
+
riskFactor: _riskFactor,
|
|
539
|
+
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0)
|
|
540
|
+
},
|
|
541
|
+
additionalInfo: {
|
|
542
|
+
feeBps: 1e3
|
|
543
|
+
}
|
|
544
|
+
// }, {
|
|
545
|
+
// name: 'Vesu Fusion USDT',
|
|
546
|
+
// description: _description.replace('{{TOKEN}}', 'USDT'),
|
|
547
|
+
// address: ContractAddr.from('0x778007f8136a5b827325d21613803e796bda4d676fbe1e34aeab0b2a2ec027f'),
|
|
548
|
+
// type: 'ERC4626',
|
|
549
|
+
// depositTokens: [Global.getDefaultTokens().find(t => t.symbol === 'USDT')!],
|
|
550
|
+
// protocols: [_protocol],
|
|
551
|
+
// maxTVL: Web3Number.fromWei('0', 6),
|
|
552
|
+
// risk: {
|
|
553
|
+
// riskFactor: _riskFactor,
|
|
554
|
+
// netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
|
|
555
|
+
// },
|
|
556
|
+
// additionalInfo: {
|
|
557
|
+
// feeBps: 1000,
|
|
558
|
+
// },
|
|
559
|
+
// }, {
|
|
560
|
+
// name: 'Vesu Fusion WBTC',
|
|
561
|
+
// description: _description.replace('{{TOKEN}}', 'WBTC'),
|
|
562
|
+
// address: ContractAddr.from('0x778007f8136a5b827325d21613803e796bda4d676fbe1e34aeab0b2a2ec027f'),
|
|
563
|
+
// type: 'ERC4626',
|
|
564
|
+
// depositTokens: [Global.getDefaultTokens().find(t => t.symbol === 'WBTC')!],
|
|
565
|
+
// protocols: [_protocol],
|
|
566
|
+
// maxTVL: Web3Number.fromWei('0', 8),
|
|
567
|
+
// risk: {
|
|
568
|
+
// riskFactor: _riskFactor,
|
|
569
|
+
// netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor.reduce((acc, curr) => acc + curr.weight, 0),
|
|
570
|
+
// },
|
|
571
|
+
// additionalInfo: {
|
|
572
|
+
// feeBps: 1000,
|
|
573
|
+
// },
|
|
574
|
+
}];
|
|
575
|
+
|
|
576
|
+
// src/strategies/ekubo-cl-vault.ts
|
|
577
|
+
var import_starknet8 = require("starknet");
|
|
578
|
+
var _description2 = "Automatically rebalances liquidity near current price to maximize yield while reducing the necessity to manually rebalance positions frequently. Fees earn and Defi spring rewards are automatically re-invested.";
|
|
579
|
+
var _protocol2 = { name: "Ekubo", logo: "https://app.ekubo.org/favicon.ico" };
|
|
580
|
+
var _riskFactor2 = [
|
|
581
|
+
{ type: "Smart Contract Risk" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
582
|
+
{ type: "Impermanent Loss Risk" /* IMPERMANENT_LOSS */, value: 1, weight: 75 }
|
|
583
|
+
];
|
|
584
|
+
var EkuboCLVaultStrategies = [{
|
|
585
|
+
name: "Ekubo xSTRK/STRK",
|
|
586
|
+
description: _description2,
|
|
587
|
+
address: ContractAddr.from("0x01f083b98674bc21effee29ef443a00c7b9a500fd92cf30341a3da12c73f2324"),
|
|
588
|
+
type: "Other",
|
|
589
|
+
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "STRK"), Global.getDefaultTokens().find((t) => t.symbol === "xSTRK")],
|
|
590
|
+
protocols: [_protocol2],
|
|
591
|
+
maxTVL: Web3Number.fromWei("0", 18),
|
|
592
|
+
risk: {
|
|
593
|
+
riskFactor: _riskFactor2,
|
|
594
|
+
netRisk: _riskFactor2.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor2.reduce((acc, curr) => acc + curr.weight, 0)
|
|
595
|
+
},
|
|
596
|
+
additionalInfo: {
|
|
597
|
+
newBounds: {
|
|
598
|
+
lower: -1,
|
|
599
|
+
upper: 1
|
|
600
|
+
},
|
|
601
|
+
lstContract: ContractAddr.from("0x028d709c875c0ceac3dce7065bec5328186dc89fe254527084d1689910954b0a")
|
|
416
602
|
}
|
|
417
603
|
}];
|
|
418
604
|
|
|
@@ -455,7 +641,7 @@ var Store = class _Store {
|
|
|
455
641
|
logger.warn(`This not stored anywhere, please you backup this password for future use`);
|
|
456
642
|
logger.warn(`\u26A0\uFE0F=========================================\u26A0\uFE0F`);
|
|
457
643
|
}
|
|
458
|
-
getAccount(accountKey, txVersion =
|
|
644
|
+
getAccount(accountKey, txVersion = import_starknet9.constants.TRANSACTION_VERSION.V2) {
|
|
459
645
|
const accounts = this.loadAccounts();
|
|
460
646
|
logger.verbose(`nAccounts loaded for network: ${Object.keys(accounts).length}`);
|
|
461
647
|
const data = accounts[accountKey];
|
|
@@ -464,7 +650,7 @@ var Store = class _Store {
|
|
|
464
650
|
}
|
|
465
651
|
logger.verbose(`Account loaded: ${accountKey} from network: ${this.config.network}`);
|
|
466
652
|
logger.verbose(`Address: ${data.address}`);
|
|
467
|
-
const acc = new
|
|
653
|
+
const acc = new import_starknet9.Account(this.config.provider, data.address, data.pk, void 0, txVersion);
|
|
468
654
|
return acc;
|
|
469
655
|
}
|
|
470
656
|
addAccount(accountKey, address, pk) {
|
|
@@ -528,11 +714,11 @@ var Store = class _Store {
|
|
|
528
714
|
|
|
529
715
|
// src/cli.ts
|
|
530
716
|
var import_chalk = __toESM(require("chalk"));
|
|
531
|
-
var
|
|
717
|
+
var import_starknet10 = require("starknet");
|
|
532
718
|
var program = new import_commander.Command();
|
|
533
719
|
var getConfig = (network) => {
|
|
534
720
|
return {
|
|
535
|
-
provider: new
|
|
721
|
+
provider: new import_starknet10.RpcProvider({
|
|
536
722
|
nodeUrl: "https://starknet-mainnet.public.blastapi.io"
|
|
537
723
|
}),
|
|
538
724
|
network,
|