@strkfarm/sdk 1.0.15 → 1.0.17
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 +74 -11
- package/dist/cli.mjs +69 -12
- package/dist/index.browser.global.js +9447 -9894
- package/dist/index.browser.mjs +2582 -0
- package/dist/index.d.ts +305 -75
- package/dist/index.js +2143 -246
- package/dist/index.mjs +2135 -250
- package/package.json +15 -9
- package/src/data/vesu-rebalance.abi.json +1473 -0
- package/src/dataTypes/bignumber.ts +4 -2
- package/src/global.ts +13 -1
- package/src/index.ts +4 -1
- package/src/interfaces/common.ts +47 -0
- package/src/modules/index.ts +2 -1
- package/src/modules/pricer-from-api.ts +61 -0
- package/src/modules/pricer.ts +12 -17
- package/src/modules/pricerBase.ts +15 -0
- package/src/modules/zkLend.ts +1 -0
- package/src/node/pricer-redis.ts +1 -0
- package/src/strategies/index.ts +2 -1
- package/src/strategies/vesu-rebalance.ts +466 -0
- package/src/utils/index.ts +7 -4
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_starknet6 = require("starknet");
|
|
33
33
|
var crypto2 = __toESM(require("crypto"));
|
|
34
34
|
|
|
35
35
|
// src/utils/encrypt.ts
|
|
@@ -101,7 +101,14 @@ var FatalError = class extends Error {
|
|
|
101
101
|
this.name = "FatalError";
|
|
102
102
|
}
|
|
103
103
|
};
|
|
104
|
-
var tokens = [
|
|
104
|
+
var tokens = [{
|
|
105
|
+
name: "Starknet",
|
|
106
|
+
symbol: "STRK",
|
|
107
|
+
logo: "https://assets.coingecko.com/coins/images/26433/small/starknet.png",
|
|
108
|
+
address: "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
|
|
109
|
+
decimals: 18,
|
|
110
|
+
coingeckId: "starknet"
|
|
111
|
+
}];
|
|
105
112
|
var Global = class {
|
|
106
113
|
static fatalError(message, err) {
|
|
107
114
|
logger.error(message);
|
|
@@ -114,6 +121,9 @@ var Global = class {
|
|
|
114
121
|
logger.error(`${url}: ${message}`);
|
|
115
122
|
console.error(err);
|
|
116
123
|
}
|
|
124
|
+
static getDefaultTokens() {
|
|
125
|
+
return tokens;
|
|
126
|
+
}
|
|
117
127
|
static async getTokens() {
|
|
118
128
|
if (tokens.length) return tokens;
|
|
119
129
|
const data = await import_axios.default.get("https://starknet.api.avnu.fi/v1/starknet/tokens");
|
|
@@ -127,6 +137,7 @@ var Global = class {
|
|
|
127
137
|
symbol: token.symbol,
|
|
128
138
|
address: token.address,
|
|
129
139
|
decimals: token.decimals,
|
|
140
|
+
logo: token.logoUri,
|
|
130
141
|
coingeckId: token.extensions.coingeckoId
|
|
131
142
|
});
|
|
132
143
|
});
|
|
@@ -155,10 +166,12 @@ var Web3Number = class _Web3Number extends import_bignumber.default {
|
|
|
155
166
|
return this.mul(10 ** this.decimals).toFixed(0);
|
|
156
167
|
}
|
|
157
168
|
multipliedBy(value) {
|
|
158
|
-
|
|
169
|
+
let _value = Number(value).toFixed(6);
|
|
170
|
+
return new _Web3Number(this.mul(_value).toString(), this.decimals);
|
|
159
171
|
}
|
|
160
172
|
dividedBy(value) {
|
|
161
|
-
|
|
173
|
+
let _value = Number(value).toFixed(6);
|
|
174
|
+
return new _Web3Number(this.div(_value).toString(), this.decimals);
|
|
162
175
|
}
|
|
163
176
|
plus(value) {
|
|
164
177
|
return new _Web3Number(this.add(value).toString(), this.decimals);
|
|
@@ -178,9 +191,31 @@ Web3Number.config({ DECIMAL_PLACES: 18 });
|
|
|
178
191
|
|
|
179
192
|
// src/dataTypes/address.ts
|
|
180
193
|
var import_starknet = require("starknet");
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
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";
|
|
211
|
+
}
|
|
212
|
+
const a = import_starknet.num.getHexString(import_starknet.num.getDecimalString(_a.toString()));
|
|
213
|
+
return a;
|
|
214
|
+
}
|
|
215
|
+
static eqString(a, b) {
|
|
216
|
+
return _ContractAddr.standardise(a) === _ContractAddr.standardise(b);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
184
219
|
|
|
185
220
|
// src/modules/pragma.ts
|
|
186
221
|
var import_starknet2 = require("starknet");
|
|
@@ -238,6 +273,7 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
238
273
|
name: pool.token.name,
|
|
239
274
|
symbol: pool.token.symbol,
|
|
240
275
|
address: savedTokenInfo?.address || "",
|
|
276
|
+
logo: "",
|
|
241
277
|
decimals: pool.token.decimals,
|
|
242
278
|
borrowFactor: Web3Number.fromWei(pool.borrow_factor.value, pool.borrow_factor.decimals),
|
|
243
279
|
collareralFactor
|
|
@@ -347,12 +383,39 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
347
383
|
_ZkLend.POOLS_URL = "https://app.zklend.com/api/pools";
|
|
348
384
|
var ZkLend = _ZkLend;
|
|
349
385
|
|
|
386
|
+
// src/modules/pricer-from-api.ts
|
|
387
|
+
var import_axios4 = __toESM(require("axios"));
|
|
388
|
+
|
|
350
389
|
// src/interfaces/common.ts
|
|
351
390
|
var import_starknet3 = require("starknet");
|
|
352
391
|
|
|
353
392
|
// src/strategies/autoCompounderStrk.ts
|
|
354
393
|
var import_starknet4 = require("starknet");
|
|
355
394
|
|
|
395
|
+
// src/strategies/vesu-rebalance.ts
|
|
396
|
+
var import_starknet5 = require("starknet");
|
|
397
|
+
var import_axios5 = __toESM(require("axios"));
|
|
398
|
+
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
|
+
var _protocol = { name: "Vesu", logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png" };
|
|
400
|
+
var _riskFactor = [
|
|
401
|
+
{ type: "SMART_CONTRACT_RISK" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
402
|
+
{ type: "TECHNICAL_RISK" /* TECHNICAL_RISK */, value: 0.5, weight: 25 },
|
|
403
|
+
{ type: "COUNTERPARTY_RISK" /* COUNTERPARTY_RISK */, value: 1, weight: 50 }
|
|
404
|
+
];
|
|
405
|
+
var VesuRebalanceStrategies = [{
|
|
406
|
+
name: "Vesu STRK",
|
|
407
|
+
description: _description.replace("{{TOKEN}}", "STRK"),
|
|
408
|
+
address: ContractAddr.from("0xeeb729d554ae486387147b13a9c8871bc7991d454e8b5ff570d4bf94de71e1"),
|
|
409
|
+
type: "ERC4626",
|
|
410
|
+
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "STRK")],
|
|
411
|
+
protocols: [_protocol],
|
|
412
|
+
maxTVL: Web3Number.fromWei("0", 18),
|
|
413
|
+
risk: {
|
|
414
|
+
riskFactor: _riskFactor,
|
|
415
|
+
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / 100
|
|
416
|
+
}
|
|
417
|
+
}];
|
|
418
|
+
|
|
356
419
|
// src/notifs/telegram.ts
|
|
357
420
|
var import_node_telegram_bot_api = __toESM(require("node-telegram-bot-api"));
|
|
358
421
|
|
|
@@ -392,7 +455,7 @@ var Store = class _Store {
|
|
|
392
455
|
logger.warn(`This not stored anywhere, please you backup this password for future use`);
|
|
393
456
|
logger.warn(`\u26A0\uFE0F=========================================\u26A0\uFE0F`);
|
|
394
457
|
}
|
|
395
|
-
getAccount(accountKey, txVersion =
|
|
458
|
+
getAccount(accountKey, txVersion = import_starknet6.constants.TRANSACTION_VERSION.V2) {
|
|
396
459
|
const accounts = this.loadAccounts();
|
|
397
460
|
logger.verbose(`nAccounts loaded for network: ${Object.keys(accounts).length}`);
|
|
398
461
|
const data = accounts[accountKey];
|
|
@@ -401,7 +464,7 @@ var Store = class _Store {
|
|
|
401
464
|
}
|
|
402
465
|
logger.verbose(`Account loaded: ${accountKey} from network: ${this.config.network}`);
|
|
403
466
|
logger.verbose(`Address: ${data.address}`);
|
|
404
|
-
const acc = new
|
|
467
|
+
const acc = new import_starknet6.Account(this.config.provider, data.address, data.pk, void 0, txVersion);
|
|
405
468
|
return acc;
|
|
406
469
|
}
|
|
407
470
|
addAccount(accountKey, address, pk) {
|
|
@@ -465,11 +528,11 @@ var Store = class _Store {
|
|
|
465
528
|
|
|
466
529
|
// src/cli.ts
|
|
467
530
|
var import_chalk = __toESM(require("chalk"));
|
|
468
|
-
var
|
|
531
|
+
var import_starknet7 = require("starknet");
|
|
469
532
|
var program = new import_commander.Command();
|
|
470
533
|
var getConfig = (network) => {
|
|
471
534
|
return {
|
|
472
|
-
provider: new
|
|
535
|
+
provider: new import_starknet7.RpcProvider({
|
|
473
536
|
nodeUrl: "https://starknet-mainnet.public.blastapi.io"
|
|
474
537
|
}),
|
|
475
538
|
network,
|
package/dist/cli.mjs
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
3
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
4
|
-
}) : x)(function(x) {
|
|
5
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
6
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
7
|
-
});
|
|
8
2
|
|
|
9
3
|
// src/cli.ts
|
|
10
4
|
import { Command } from "commander";
|
|
@@ -84,7 +78,14 @@ var FatalError = class extends Error {
|
|
|
84
78
|
this.name = "FatalError";
|
|
85
79
|
}
|
|
86
80
|
};
|
|
87
|
-
var tokens = [
|
|
81
|
+
var tokens = [{
|
|
82
|
+
name: "Starknet",
|
|
83
|
+
symbol: "STRK",
|
|
84
|
+
logo: "https://assets.coingecko.com/coins/images/26433/small/starknet.png",
|
|
85
|
+
address: "0x4718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
|
|
86
|
+
decimals: 18,
|
|
87
|
+
coingeckId: "starknet"
|
|
88
|
+
}];
|
|
88
89
|
var Global = class {
|
|
89
90
|
static fatalError(message, err) {
|
|
90
91
|
logger.error(message);
|
|
@@ -97,6 +98,9 @@ var Global = class {
|
|
|
97
98
|
logger.error(`${url}: ${message}`);
|
|
98
99
|
console.error(err);
|
|
99
100
|
}
|
|
101
|
+
static getDefaultTokens() {
|
|
102
|
+
return tokens;
|
|
103
|
+
}
|
|
100
104
|
static async getTokens() {
|
|
101
105
|
if (tokens.length) return tokens;
|
|
102
106
|
const data = await axios.get("https://starknet.api.avnu.fi/v1/starknet/tokens");
|
|
@@ -110,6 +114,7 @@ var Global = class {
|
|
|
110
114
|
symbol: token.symbol,
|
|
111
115
|
address: token.address,
|
|
112
116
|
decimals: token.decimals,
|
|
117
|
+
logo: token.logoUri,
|
|
113
118
|
coingeckId: token.extensions.coingeckoId
|
|
114
119
|
});
|
|
115
120
|
});
|
|
@@ -138,10 +143,12 @@ var Web3Number = class _Web3Number extends BigNumber {
|
|
|
138
143
|
return this.mul(10 ** this.decimals).toFixed(0);
|
|
139
144
|
}
|
|
140
145
|
multipliedBy(value) {
|
|
141
|
-
|
|
146
|
+
let _value = Number(value).toFixed(6);
|
|
147
|
+
return new _Web3Number(this.mul(_value).toString(), this.decimals);
|
|
142
148
|
}
|
|
143
149
|
dividedBy(value) {
|
|
144
|
-
|
|
150
|
+
let _value = Number(value).toFixed(6);
|
|
151
|
+
return new _Web3Number(this.div(_value).toString(), this.decimals);
|
|
145
152
|
}
|
|
146
153
|
plus(value) {
|
|
147
154
|
return new _Web3Number(this.add(value).toString(), this.decimals);
|
|
@@ -161,9 +168,31 @@ Web3Number.config({ DECIMAL_PLACES: 18 });
|
|
|
161
168
|
|
|
162
169
|
// src/dataTypes/address.ts
|
|
163
170
|
import { num } from "starknet";
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
171
|
+
var ContractAddr = class _ContractAddr {
|
|
172
|
+
constructor(address) {
|
|
173
|
+
this.address = _ContractAddr.standardise(address);
|
|
174
|
+
}
|
|
175
|
+
static from(address) {
|
|
176
|
+
return new _ContractAddr(address);
|
|
177
|
+
}
|
|
178
|
+
eq(other) {
|
|
179
|
+
return this.address === other.address;
|
|
180
|
+
}
|
|
181
|
+
eqString(other) {
|
|
182
|
+
return this.address === _ContractAddr.standardise(other);
|
|
183
|
+
}
|
|
184
|
+
static standardise(address) {
|
|
185
|
+
let _a = address;
|
|
186
|
+
if (!address) {
|
|
187
|
+
_a = "0";
|
|
188
|
+
}
|
|
189
|
+
const a = num.getHexString(num.getDecimalString(_a.toString()));
|
|
190
|
+
return a;
|
|
191
|
+
}
|
|
192
|
+
static eqString(a, b) {
|
|
193
|
+
return _ContractAddr.standardise(a) === _ContractAddr.standardise(b);
|
|
194
|
+
}
|
|
195
|
+
};
|
|
167
196
|
|
|
168
197
|
// src/modules/pragma.ts
|
|
169
198
|
import { Contract } from "starknet";
|
|
@@ -221,6 +250,7 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
221
250
|
name: pool.token.name,
|
|
222
251
|
symbol: pool.token.symbol,
|
|
223
252
|
address: savedTokenInfo?.address || "",
|
|
253
|
+
logo: "",
|
|
224
254
|
decimals: pool.token.decimals,
|
|
225
255
|
borrowFactor: Web3Number.fromWei(pool.borrow_factor.value, pool.borrow_factor.decimals),
|
|
226
256
|
collareralFactor
|
|
@@ -330,12 +360,39 @@ var _ZkLend = class _ZkLend extends ILending {
|
|
|
330
360
|
_ZkLend.POOLS_URL = "https://app.zklend.com/api/pools";
|
|
331
361
|
var ZkLend = _ZkLend;
|
|
332
362
|
|
|
363
|
+
// src/modules/pricer-from-api.ts
|
|
364
|
+
import axios4 from "axios";
|
|
365
|
+
|
|
333
366
|
// src/interfaces/common.ts
|
|
334
367
|
import { RpcProvider as RpcProvider2 } from "starknet";
|
|
335
368
|
|
|
336
369
|
// src/strategies/autoCompounderStrk.ts
|
|
337
370
|
import { Contract as Contract2, uint256 } from "starknet";
|
|
338
371
|
|
|
372
|
+
// src/strategies/vesu-rebalance.ts
|
|
373
|
+
import { CairoCustomEnum, Contract as Contract3, num as num2, uint256 as uint2562 } from "starknet";
|
|
374
|
+
import axios5 from "axios";
|
|
375
|
+
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.";
|
|
376
|
+
var _protocol = { name: "Vesu", logo: "https://static-assets-8zct.onrender.com/integrations/vesu/logo.png" };
|
|
377
|
+
var _riskFactor = [
|
|
378
|
+
{ type: "SMART_CONTRACT_RISK" /* SMART_CONTRACT_RISK */, value: 0.5, weight: 25 },
|
|
379
|
+
{ type: "TECHNICAL_RISK" /* TECHNICAL_RISK */, value: 0.5, weight: 25 },
|
|
380
|
+
{ type: "COUNTERPARTY_RISK" /* COUNTERPARTY_RISK */, value: 1, weight: 50 }
|
|
381
|
+
];
|
|
382
|
+
var VesuRebalanceStrategies = [{
|
|
383
|
+
name: "Vesu STRK",
|
|
384
|
+
description: _description.replace("{{TOKEN}}", "STRK"),
|
|
385
|
+
address: ContractAddr.from("0xeeb729d554ae486387147b13a9c8871bc7991d454e8b5ff570d4bf94de71e1"),
|
|
386
|
+
type: "ERC4626",
|
|
387
|
+
depositTokens: [Global.getDefaultTokens().find((t) => t.symbol === "STRK")],
|
|
388
|
+
protocols: [_protocol],
|
|
389
|
+
maxTVL: Web3Number.fromWei("0", 18),
|
|
390
|
+
risk: {
|
|
391
|
+
riskFactor: _riskFactor,
|
|
392
|
+
netRisk: _riskFactor.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / 100
|
|
393
|
+
}
|
|
394
|
+
}];
|
|
395
|
+
|
|
339
396
|
// src/notifs/telegram.ts
|
|
340
397
|
import TelegramBot from "node-telegram-bot-api";
|
|
341
398
|
|