@strkfarm/sdk 2.0.0-staging.6 → 2.0.0-staging.60
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 +9 -5
- package/dist/cli.mjs +9 -5
- package/dist/index.browser.global.js +2994 -990
- package/dist/index.browser.mjs +2669 -658
- package/dist/index.d.ts +323 -47
- package/dist/index.js +2772 -746
- package/dist/index.mjs +2680 -663
- package/package.json +4 -4
- package/src/data/universal-vault.abi.json +143 -27
- package/src/dataTypes/_bignumber.ts +5 -0
- package/src/dataTypes/bignumber.browser.ts +5 -0
- package/src/dataTypes/bignumber.node.ts +5 -0
- package/src/global.ts +48 -1
- package/src/interfaces/common.tsx +83 -26
- package/src/modules/avnu.ts +1 -1
- package/src/modules/erc20.ts +18 -2
- package/src/modules/index.ts +2 -1
- package/src/strategies/base-strategy.ts +153 -8
- package/src/strategies/constants.ts +2 -2
- package/src/strategies/ekubo-cl-vault.tsx +266 -103
- package/src/strategies/factory.ts +21 -1
- package/src/strategies/index.ts +2 -0
- package/src/strategies/registry.ts +15 -30
- package/src/strategies/sensei.ts +54 -11
- package/src/strategies/types.ts +4 -0
- package/src/strategies/universal-adapters/vesu-adapter.ts +48 -27
- package/src/strategies/universal-lst-muliplier-strategy.tsx +1461 -580
- package/src/strategies/universal-strategy.tsx +144 -77
- package/src/strategies/vesu-rebalance.tsx +27 -12
- package/src/strategies/yoloVault.ts +1063 -0
- package/src/utils/logger.node.ts +11 -4
- package/src/utils/strategy-utils.ts +6 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strkfarm/sdk",
|
|
3
|
-
"version": "2.0.0-staging.
|
|
3
|
+
"version": "2.0.0-staging.60",
|
|
4
4
|
"description": "STRKFarm TS SDK (Meant for our internal use, but feel free to use it)",
|
|
5
5
|
"typings": "dist/index.d.ts",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -25,9 +25,6 @@
|
|
|
25
25
|
"dist",
|
|
26
26
|
"src"
|
|
27
27
|
],
|
|
28
|
-
"publishConfig": {
|
|
29
|
-
"tag": "staging"
|
|
30
|
-
},
|
|
31
28
|
"scripts": {
|
|
32
29
|
"test": "jest",
|
|
33
30
|
"build": "tsup --clean && pnpm run build:esm && npm run build:dts && npm run build:iife && npm run build-cli && pnpm run build:iife-esm",
|
|
@@ -59,6 +56,9 @@
|
|
|
59
56
|
"react": "19.1.2",
|
|
60
57
|
"starknet": "9.2.1"
|
|
61
58
|
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"tag": "staging"
|
|
61
|
+
},
|
|
62
62
|
"dependencies": {
|
|
63
63
|
"@apollo/client": "3.11.8",
|
|
64
64
|
"@avnu/avnu-sdk": "3.0.2",
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
{
|
|
3
3
|
"type": "impl",
|
|
4
4
|
"name": "UpgradeableImpl",
|
|
5
|
-
"interface_name": "
|
|
5
|
+
"interface_name": "openzeppelin_interfaces::upgrades::IUpgradeable"
|
|
6
6
|
},
|
|
7
7
|
{
|
|
8
8
|
"type": "interface",
|
|
9
|
-
"name": "
|
|
9
|
+
"name": "openzeppelin_interfaces::upgrades::IUpgradeable",
|
|
10
10
|
"items": [
|
|
11
11
|
{
|
|
12
12
|
"type": "function",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
{
|
|
26
26
|
"type": "impl",
|
|
27
27
|
"name": "VaultMetadataImpl",
|
|
28
|
-
"interface_name": "
|
|
28
|
+
"interface_name": "openzeppelin_interfaces::token::erc20::IERC20Metadata"
|
|
29
29
|
},
|
|
30
30
|
{
|
|
31
31
|
"type": "struct",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
},
|
|
48
48
|
{
|
|
49
49
|
"type": "interface",
|
|
50
|
-
"name": "
|
|
50
|
+
"name": "openzeppelin_interfaces::token::erc20::IERC20Metadata",
|
|
51
51
|
"items": [
|
|
52
52
|
{
|
|
53
53
|
"type": "function",
|
|
@@ -431,17 +431,95 @@
|
|
|
431
431
|
}
|
|
432
432
|
],
|
|
433
433
|
"state_mutability": "view"
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
"type": "function",
|
|
437
|
+
"name": "due_assets_from_id",
|
|
438
|
+
"inputs": [
|
|
439
|
+
{
|
|
440
|
+
"name": "id",
|
|
441
|
+
"type": "core::integer::u256"
|
|
442
|
+
}
|
|
443
|
+
],
|
|
444
|
+
"outputs": [
|
|
445
|
+
{
|
|
446
|
+
"type": "core::integer::u256"
|
|
447
|
+
}
|
|
448
|
+
],
|
|
449
|
+
"state_mutability": "view"
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
"type": "function",
|
|
453
|
+
"name": "due_assets_from_owner",
|
|
454
|
+
"inputs": [
|
|
455
|
+
{
|
|
456
|
+
"name": "owner",
|
|
457
|
+
"type": "core::starknet::contract_address::ContractAddress"
|
|
458
|
+
}
|
|
459
|
+
],
|
|
460
|
+
"outputs": [
|
|
461
|
+
{
|
|
462
|
+
"type": "core::integer::u256"
|
|
463
|
+
}
|
|
464
|
+
],
|
|
465
|
+
"state_mutability": "view"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"type": "function",
|
|
469
|
+
"name": "set_deposit_limit",
|
|
470
|
+
"inputs": [
|
|
471
|
+
{
|
|
472
|
+
"name": "limit",
|
|
473
|
+
"type": "core::integer::u256"
|
|
474
|
+
}
|
|
475
|
+
],
|
|
476
|
+
"outputs": [],
|
|
477
|
+
"state_mutability": "external"
|
|
478
|
+
},
|
|
479
|
+
{
|
|
480
|
+
"type": "function",
|
|
481
|
+
"name": "set_mint_limit",
|
|
482
|
+
"inputs": [
|
|
483
|
+
{
|
|
484
|
+
"name": "limit",
|
|
485
|
+
"type": "core::integer::u256"
|
|
486
|
+
}
|
|
487
|
+
],
|
|
488
|
+
"outputs": [],
|
|
489
|
+
"state_mutability": "external"
|
|
490
|
+
},
|
|
491
|
+
{
|
|
492
|
+
"type": "function",
|
|
493
|
+
"name": "get_deposit_limit",
|
|
494
|
+
"inputs": [],
|
|
495
|
+
"outputs": [
|
|
496
|
+
{
|
|
497
|
+
"type": "core::integer::u256"
|
|
498
|
+
}
|
|
499
|
+
],
|
|
500
|
+
"state_mutability": "view"
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"type": "function",
|
|
504
|
+
"name": "get_mint_limit",
|
|
505
|
+
"inputs": [],
|
|
506
|
+
"outputs": [
|
|
507
|
+
{
|
|
508
|
+
"type": "core::integer::u256"
|
|
509
|
+
}
|
|
510
|
+
],
|
|
511
|
+
"state_mutability": "view"
|
|
434
512
|
}
|
|
435
513
|
]
|
|
436
514
|
},
|
|
437
515
|
{
|
|
438
516
|
"type": "impl",
|
|
439
517
|
"name": "ERC4626Impl",
|
|
440
|
-
"interface_name": "
|
|
518
|
+
"interface_name": "openzeppelin_interfaces::token::erc4626::IERC4626"
|
|
441
519
|
},
|
|
442
520
|
{
|
|
443
521
|
"type": "interface",
|
|
444
|
-
"name": "
|
|
522
|
+
"name": "openzeppelin_interfaces::token::erc4626::IERC4626",
|
|
445
523
|
"items": [
|
|
446
524
|
{
|
|
447
525
|
"type": "function",
|
|
@@ -718,7 +796,7 @@
|
|
|
718
796
|
{
|
|
719
797
|
"type": "impl",
|
|
720
798
|
"name": "ERC20Impl",
|
|
721
|
-
"interface_name": "
|
|
799
|
+
"interface_name": "openzeppelin_interfaces::token::erc20::IERC20"
|
|
722
800
|
},
|
|
723
801
|
{
|
|
724
802
|
"type": "enum",
|
|
@@ -736,7 +814,7 @@
|
|
|
736
814
|
},
|
|
737
815
|
{
|
|
738
816
|
"type": "interface",
|
|
739
|
-
"name": "
|
|
817
|
+
"name": "openzeppelin_interfaces::token::erc20::IERC20",
|
|
740
818
|
"items": [
|
|
741
819
|
{
|
|
742
820
|
"type": "function",
|
|
@@ -854,11 +932,11 @@
|
|
|
854
932
|
{
|
|
855
933
|
"type": "impl",
|
|
856
934
|
"name": "ERC20CamelOnlyImpl",
|
|
857
|
-
"interface_name": "
|
|
935
|
+
"interface_name": "openzeppelin_interfaces::token::erc20::IERC20CamelOnly"
|
|
858
936
|
},
|
|
859
937
|
{
|
|
860
938
|
"type": "interface",
|
|
861
|
-
"name": "
|
|
939
|
+
"name": "openzeppelin_interfaces::token::erc20::IERC20CamelOnly",
|
|
862
940
|
"items": [
|
|
863
941
|
{
|
|
864
942
|
"type": "function",
|
|
@@ -916,11 +994,11 @@
|
|
|
916
994
|
{
|
|
917
995
|
"type": "impl",
|
|
918
996
|
"name": "AccessControlImpl",
|
|
919
|
-
"interface_name": "
|
|
997
|
+
"interface_name": "openzeppelin_interfaces::access::accesscontrol::IAccessControl"
|
|
920
998
|
},
|
|
921
999
|
{
|
|
922
1000
|
"type": "interface",
|
|
923
|
-
"name": "
|
|
1001
|
+
"name": "openzeppelin_interfaces::access::accesscontrol::IAccessControl",
|
|
924
1002
|
"items": [
|
|
925
1003
|
{
|
|
926
1004
|
"type": "function",
|
|
@@ -1011,11 +1089,11 @@
|
|
|
1011
1089
|
{
|
|
1012
1090
|
"type": "impl",
|
|
1013
1091
|
"name": "PausableImpl",
|
|
1014
|
-
"interface_name": "
|
|
1092
|
+
"interface_name": "openzeppelin_interfaces::security::pausable::IPausable"
|
|
1015
1093
|
},
|
|
1016
1094
|
{
|
|
1017
1095
|
"type": "interface",
|
|
1018
|
-
"name": "
|
|
1096
|
+
"name": "openzeppelin_interfaces::security::pausable::IPausable",
|
|
1019
1097
|
"items": [
|
|
1020
1098
|
{
|
|
1021
1099
|
"type": "function",
|
|
@@ -1139,7 +1217,7 @@
|
|
|
1139
1217
|
},
|
|
1140
1218
|
{
|
|
1141
1219
|
"type": "event",
|
|
1142
|
-
"name": "
|
|
1220
|
+
"name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Deposit",
|
|
1143
1221
|
"kind": "struct",
|
|
1144
1222
|
"members": [
|
|
1145
1223
|
{
|
|
@@ -1166,7 +1244,7 @@
|
|
|
1166
1244
|
},
|
|
1167
1245
|
{
|
|
1168
1246
|
"type": "event",
|
|
1169
|
-
"name": "
|
|
1247
|
+
"name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Withdraw",
|
|
1170
1248
|
"kind": "struct",
|
|
1171
1249
|
"members": [
|
|
1172
1250
|
{
|
|
@@ -1198,17 +1276,17 @@
|
|
|
1198
1276
|
},
|
|
1199
1277
|
{
|
|
1200
1278
|
"type": "event",
|
|
1201
|
-
"name": "
|
|
1279
|
+
"name": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Event",
|
|
1202
1280
|
"kind": "enum",
|
|
1203
1281
|
"variants": [
|
|
1204
1282
|
{
|
|
1205
1283
|
"name": "Deposit",
|
|
1206
|
-
"type": "
|
|
1284
|
+
"type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Deposit",
|
|
1207
1285
|
"kind": "nested"
|
|
1208
1286
|
},
|
|
1209
1287
|
{
|
|
1210
1288
|
"name": "Withdraw",
|
|
1211
|
-
"type": "
|
|
1289
|
+
"type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Withdraw",
|
|
1212
1290
|
"kind": "nested"
|
|
1213
1291
|
}
|
|
1214
1292
|
]
|
|
@@ -1510,6 +1588,38 @@
|
|
|
1510
1588
|
}
|
|
1511
1589
|
]
|
|
1512
1590
|
},
|
|
1591
|
+
{
|
|
1592
|
+
"type": "event",
|
|
1593
|
+
"name": "vault::vault::vault::Vault::BringLiquidity",
|
|
1594
|
+
"kind": "struct",
|
|
1595
|
+
"members": [
|
|
1596
|
+
{
|
|
1597
|
+
"name": "caller",
|
|
1598
|
+
"type": "core::starknet::contract_address::ContractAddress",
|
|
1599
|
+
"kind": "data"
|
|
1600
|
+
},
|
|
1601
|
+
{
|
|
1602
|
+
"name": "amount",
|
|
1603
|
+
"type": "core::integer::u256",
|
|
1604
|
+
"kind": "data"
|
|
1605
|
+
},
|
|
1606
|
+
{
|
|
1607
|
+
"name": "new_buffer",
|
|
1608
|
+
"type": "core::integer::u256",
|
|
1609
|
+
"kind": "data"
|
|
1610
|
+
},
|
|
1611
|
+
{
|
|
1612
|
+
"name": "new_aum",
|
|
1613
|
+
"type": "core::integer::u256",
|
|
1614
|
+
"kind": "data"
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
"name": "epoch",
|
|
1618
|
+
"type": "core::integer::u256",
|
|
1619
|
+
"kind": "data"
|
|
1620
|
+
}
|
|
1621
|
+
]
|
|
1622
|
+
},
|
|
1513
1623
|
{
|
|
1514
1624
|
"type": "event",
|
|
1515
1625
|
"name": "vault::vault::vault::Vault::Event",
|
|
@@ -1518,32 +1628,32 @@
|
|
|
1518
1628
|
{
|
|
1519
1629
|
"name": "ERC20Event",
|
|
1520
1630
|
"type": "openzeppelin_token::erc20::erc20::ERC20Component::Event",
|
|
1521
|
-
"kind": "
|
|
1631
|
+
"kind": "flat"
|
|
1522
1632
|
},
|
|
1523
1633
|
{
|
|
1524
1634
|
"name": "ERC4626Event",
|
|
1525
|
-
"type": "
|
|
1526
|
-
"kind": "
|
|
1635
|
+
"type": "openzeppelin_token::erc20::extensions::erc4626::erc4626::ERC4626Component::Event",
|
|
1636
|
+
"kind": "flat"
|
|
1527
1637
|
},
|
|
1528
1638
|
{
|
|
1529
1639
|
"name": "SRC5Event",
|
|
1530
1640
|
"type": "openzeppelin_introspection::src5::SRC5Component::Event",
|
|
1531
|
-
"kind": "
|
|
1641
|
+
"kind": "flat"
|
|
1532
1642
|
},
|
|
1533
1643
|
{
|
|
1534
1644
|
"name": "AccessControlEvent",
|
|
1535
1645
|
"type": "openzeppelin_access::accesscontrol::accesscontrol::AccessControlComponent::Event",
|
|
1536
|
-
"kind": "
|
|
1646
|
+
"kind": "flat"
|
|
1537
1647
|
},
|
|
1538
1648
|
{
|
|
1539
1649
|
"name": "UpgradeableEvent",
|
|
1540
1650
|
"type": "openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event",
|
|
1541
|
-
"kind": "
|
|
1651
|
+
"kind": "flat"
|
|
1542
1652
|
},
|
|
1543
1653
|
{
|
|
1544
1654
|
"name": "PausableEvent",
|
|
1545
1655
|
"type": "openzeppelin_security::pausable::PausableComponent::Event",
|
|
1546
|
-
"kind": "
|
|
1656
|
+
"kind": "flat"
|
|
1547
1657
|
},
|
|
1548
1658
|
{
|
|
1549
1659
|
"name": "RedeemRequested",
|
|
@@ -1559,7 +1669,13 @@
|
|
|
1559
1669
|
"name": "Report",
|
|
1560
1670
|
"type": "vault::vault::vault::Vault::Report",
|
|
1561
1671
|
"kind": "nested"
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"name": "BringLiquidity",
|
|
1675
|
+
"type": "vault::vault::vault::Vault::BringLiquidity",
|
|
1676
|
+
"kind": "nested"
|
|
1562
1677
|
}
|
|
1563
1678
|
]
|
|
1564
1679
|
}
|
|
1565
|
-
]
|
|
1680
|
+
]
|
|
1681
|
+
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { logger } from "@/utils/logger";
|
|
2
2
|
import BigNumber from "bignumber.js";
|
|
3
|
+
import { uint256 } from "starknet";
|
|
3
4
|
|
|
4
5
|
export class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
|
|
5
6
|
decimals: number;
|
|
@@ -107,6 +108,10 @@ export class _Web3Number<T extends _Web3Number<T>> extends BigNumber {
|
|
|
107
108
|
sign: sign,
|
|
108
109
|
}
|
|
109
110
|
}
|
|
111
|
+
|
|
112
|
+
toUint256() {
|
|
113
|
+
return uint256.bnToUint256(this.toWei());
|
|
114
|
+
}
|
|
110
115
|
}
|
|
111
116
|
|
|
112
117
|
BigNumber.config({ DECIMAL_PLACES: 18, ROUNDING_MODE: BigNumber.ROUND_DOWN });
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Uint256, uint256 } from "starknet";
|
|
1
2
|
import { _Web3Number } from "./_bignumber";
|
|
2
3
|
|
|
3
4
|
export class Web3Number extends _Web3Number<Web3Number> {
|
|
@@ -5,4 +6,8 @@ export class Web3Number extends _Web3Number<Web3Number> {
|
|
|
5
6
|
const bn = (new Web3Number(weiNumber, decimals)).dividedBy(10 ** decimals)
|
|
6
7
|
return new Web3Number(bn.toString(), decimals);
|
|
7
8
|
}
|
|
9
|
+
|
|
10
|
+
static fromUint256(uint256Value: Uint256): Web3Number {
|
|
11
|
+
return this.fromWei(uint256.uint256ToBN(uint256Value).toString(), 18);
|
|
12
|
+
}
|
|
8
13
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import util from 'util';
|
|
2
2
|
import { _Web3Number } from "./_bignumber";
|
|
3
|
+
import { Uint256, uint256 } from 'starknet';
|
|
3
4
|
|
|
4
5
|
export class Web3Number extends _Web3Number<Web3Number> {
|
|
5
6
|
|
|
@@ -8,6 +9,10 @@ export class Web3Number extends _Web3Number<Web3Number> {
|
|
|
8
9
|
return new Web3Number(bn.toString(), decimals);
|
|
9
10
|
}
|
|
10
11
|
|
|
12
|
+
static fromUint256(uint256Value: Uint256): Web3Number {
|
|
13
|
+
return this.fromWei(uint256.uint256ToBN(uint256Value).toString(), 18);
|
|
14
|
+
}
|
|
15
|
+
|
|
11
16
|
[util.inspect.custom](depth: any, opts: any): string {
|
|
12
17
|
return this.toString();
|
|
13
18
|
}
|
package/src/global.ts
CHANGED
|
@@ -165,7 +165,54 @@ const defaultTokens: TokenInfo[] = [{
|
|
|
165
165
|
coingeckId: undefined,
|
|
166
166
|
displayDecimals: 2,
|
|
167
167
|
priceCheckAmount: 100,
|
|
168
|
-
}
|
|
168
|
+
}, {
|
|
169
|
+
name: "fyeWBTC",
|
|
170
|
+
symbol: "fyeWBTC",
|
|
171
|
+
logo: 'https://assets.strkfarm.com/integrations/tokens/wbtc.svg',
|
|
172
|
+
address: ContractAddr.from('0x04dd39de0a588f5e1c7a8377e1bef2c49caaee49a11433429d2c48f587b3a492'),
|
|
173
|
+
decimals: 8,
|
|
174
|
+
coingeckId: undefined,
|
|
175
|
+
displayDecimals: 6,
|
|
176
|
+
priceCheckAmount: 0.001, // 112000 * 0.0001 = $110.2
|
|
177
|
+
}, {
|
|
178
|
+
name: "fyETH",
|
|
179
|
+
symbol: "fyETH",
|
|
180
|
+
logo: 'https://assets.strkfarm.com/integrations/tokens/eth.svg',
|
|
181
|
+
address: ContractAddr.from('0x050707bC3b8730022F10530C2c6f6b9467644129C50C2868Ad0036c5e4E9e616'),
|
|
182
|
+
decimals: 18,
|
|
183
|
+
coingeckId: undefined,
|
|
184
|
+
displayDecimals: 4,
|
|
185
|
+
priceCheckAmount: 0.1,
|
|
186
|
+
}, {
|
|
187
|
+
name: "fyeUSDC",
|
|
188
|
+
symbol: "fyeUSDC",
|
|
189
|
+
logo: 'https://assets.strkfarm.com/integrations/tokens/usdc.svg',
|
|
190
|
+
address: ContractAddr.from('0x07fdcec0cef01294c9c3d52415215949805c77bae8003702a7928fd6d2c36bc1'),
|
|
191
|
+
decimals: 6,
|
|
192
|
+
coingeckId: undefined,
|
|
193
|
+
displayDecimals: 2,
|
|
194
|
+
priceCheckAmount: 100,
|
|
195
|
+
}, {
|
|
196
|
+
name: 'strkBTC',
|
|
197
|
+
symbol: 'strkBTC',
|
|
198
|
+
logo: 'https://assets.troves.fi/integrations/tokens/strkbtc.svg',
|
|
199
|
+
address: ContractAddr.from('0x0787150e306e6eae6e3f79dea881770e8bbff2c1b8eb490f969669ee945b3135'),
|
|
200
|
+
decimals: 8,
|
|
201
|
+
coingeckId: undefined,
|
|
202
|
+
displayDecimals: 6,
|
|
203
|
+
priceCheckAmount: 0.001, // 112000 * 0.0001 = $110.2
|
|
204
|
+
priceProxySymbol: 'WBTC',
|
|
205
|
+
}, {
|
|
206
|
+
name: 'xstrkBTC',
|
|
207
|
+
symbol: 'xstrkBTC',
|
|
208
|
+
logo: 'https://assets.troves.fi/integrations/tokens/xstrkbtc.svg',
|
|
209
|
+
address: ContractAddr.from('0x047751b3532fabca89b0f2e35ca1cb45e5a7b11d5e3d3663dfa1f4406b45fd88'),
|
|
210
|
+
decimals: 8,
|
|
211
|
+
coingeckId: undefined,
|
|
212
|
+
displayDecimals: 6,
|
|
213
|
+
priceCheckAmount: 0.001,
|
|
214
|
+
priceProxySymbol: 'WBTC',
|
|
215
|
+
},]
|
|
169
216
|
const tokens: TokenInfo[] = defaultTokens;
|
|
170
217
|
|
|
171
218
|
/** Contains globally useful functions.
|
|
@@ -55,21 +55,24 @@ export interface IProtocol {
|
|
|
55
55
|
logo: string;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
BTC = "btc",
|
|
62
|
-
META_VAULTS = "meta-vaults",
|
|
58
|
+
export interface ICurator {
|
|
59
|
+
name: string;
|
|
60
|
+
logo: string;
|
|
63
61
|
}
|
|
64
62
|
|
|
65
63
|
export enum StrategyTag {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
64
|
+
META_VAULT = "Meta Vaults",
|
|
65
|
+
LEVERED = "Maxx",
|
|
66
|
+
AUTOMATED_LP = "Ekubo",
|
|
67
|
+
BTC = "BTC"
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export enum VaultType {
|
|
71
|
+
LOOPING = "Looping",
|
|
72
|
+
META_VAULT = "Meta Vault",
|
|
73
|
+
DELTA_NEUTRAL = "Delta Neutral",
|
|
74
|
+
AUTOMATED_LP = "Automated LP",
|
|
75
|
+
TVA = "Troves Value Averaging",
|
|
73
76
|
}
|
|
74
77
|
|
|
75
78
|
// Security metadata enums
|
|
@@ -86,6 +89,7 @@ export enum SourceCodeType {
|
|
|
86
89
|
export enum AccessControlType {
|
|
87
90
|
MULTISIG_ACCOUNT = "Multisig Account",
|
|
88
91
|
STANDARD_ACCOUNT = "Standard Account",
|
|
92
|
+
ROLE_BASED_ACCESS = "Role Based Access",
|
|
89
93
|
}
|
|
90
94
|
|
|
91
95
|
export enum InstantWithdrawalVault {
|
|
@@ -102,7 +106,7 @@ export interface SourceCodeInfo {
|
|
|
102
106
|
export interface AccessControlInfo {
|
|
103
107
|
type: AccessControlType;
|
|
104
108
|
addresses: ContractAddr[];
|
|
105
|
-
timeLock
|
|
109
|
+
timeLock?: string;
|
|
106
110
|
}
|
|
107
111
|
|
|
108
112
|
export interface SecurityMetadata {
|
|
@@ -111,16 +115,13 @@ export interface SecurityMetadata {
|
|
|
111
115
|
accessControl: AccessControlInfo;
|
|
112
116
|
}
|
|
113
117
|
|
|
114
|
-
// Redemption metadata interfaces
|
|
115
|
-
export interface RedemptionExpectedTime {
|
|
116
|
-
upto1M: string;
|
|
117
|
-
upto10M: string;
|
|
118
|
-
above10M: string;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
118
|
export interface RedemptionInfo {
|
|
122
119
|
instantWithdrawalVault: InstantWithdrawalVault;
|
|
123
|
-
|
|
120
|
+
redemptionsInfo: {
|
|
121
|
+
title: string; // e.g. Upto $1M
|
|
122
|
+
description: string; // e.g. "1-2 hours"
|
|
123
|
+
}[],
|
|
124
|
+
alerts: StrategyAlert[];
|
|
124
125
|
}
|
|
125
126
|
|
|
126
127
|
export enum FlowChartColors {
|
|
@@ -138,7 +139,8 @@ export enum StrategyLiveStatus {
|
|
|
138
139
|
ACTIVE = "Active",
|
|
139
140
|
NEW = "New",
|
|
140
141
|
COMING_SOON = "Coming Soon",
|
|
141
|
-
|
|
142
|
+
DEPRECATED = "Deprecated", // active but not recommended
|
|
143
|
+
RETIRED = "Retired", // not active anymore
|
|
142
144
|
HOT = "Hot & New 🔥"
|
|
143
145
|
}
|
|
144
146
|
|
|
@@ -149,7 +151,6 @@ export interface StrategyAlert {
|
|
|
149
151
|
}
|
|
150
152
|
|
|
151
153
|
export interface StrategySettings {
|
|
152
|
-
maxTVL?: Web3Number;
|
|
153
154
|
liveStatus?: StrategyLiveStatus;
|
|
154
155
|
isPaused?: boolean;
|
|
155
156
|
isInMaintenance?: boolean;
|
|
@@ -165,6 +166,13 @@ export interface StrategySettings {
|
|
|
165
166
|
tags?: StrategyTag[];
|
|
166
167
|
}
|
|
167
168
|
|
|
169
|
+
export interface StrategyApyHistoryUIConfig {
|
|
170
|
+
// Defaults to true in UI if omitted.
|
|
171
|
+
showApyHistory?: boolean;
|
|
172
|
+
// Optional message shown when APY history is hidden.
|
|
173
|
+
noApyHistoryMessage?: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
168
176
|
/**
|
|
169
177
|
* @property risk.riskFactor.factor - The risk factors that are considered for the strategy.
|
|
170
178
|
* @property risk.riskFactor.factor - The value of the risk factor from 0 to 10, 0 being the lowest and 10 being the highest.
|
|
@@ -175,9 +183,26 @@ export interface IStrategyMetadata<T> {
|
|
|
175
183
|
id: string;
|
|
176
184
|
name: string;
|
|
177
185
|
description: string | React.ReactNode;
|
|
186
|
+
/**
|
|
187
|
+
* Optional UI sort priority. Higher shows earlier.
|
|
188
|
+
* Intended for pinning flagship parent vaults (e.g. BTC above STRK).
|
|
189
|
+
*/
|
|
190
|
+
priority?: number;
|
|
191
|
+
/**
|
|
192
|
+
* Optional UI config for the variant intro popup (strategy page).
|
|
193
|
+
* Should be identical across strategies that share the same `parentId`.
|
|
194
|
+
*/
|
|
195
|
+
variantIntro?: {
|
|
196
|
+
title: string;
|
|
197
|
+
description: string;
|
|
198
|
+
};
|
|
178
199
|
address: ContractAddr;
|
|
179
200
|
launchBlock: number;
|
|
180
201
|
type: "ERC4626" | "ERC721" | "Other";
|
|
202
|
+
vaultType: {
|
|
203
|
+
type: VaultType;
|
|
204
|
+
description: string;
|
|
205
|
+
};
|
|
181
206
|
depositTokens: TokenInfo[];
|
|
182
207
|
protocols: IProtocol[];
|
|
183
208
|
auditUrl?: string;
|
|
@@ -187,6 +212,7 @@ export interface IStrategyMetadata<T> {
|
|
|
187
212
|
notARisks: RiskType[];
|
|
188
213
|
};
|
|
189
214
|
apyMethodology?: string;
|
|
215
|
+
realizedApyMethodology?: string;
|
|
190
216
|
additionalInfo: T;
|
|
191
217
|
contractDetails: {
|
|
192
218
|
address: ContractAddr;
|
|
@@ -197,13 +223,20 @@ export interface IStrategyMetadata<T> {
|
|
|
197
223
|
points?: {multiplier: number, logo: string, toolTip?: string}[];
|
|
198
224
|
docs?: string;
|
|
199
225
|
investmentSteps: string[];
|
|
200
|
-
curator?:
|
|
226
|
+
curator?: ICurator,
|
|
201
227
|
isPreview?: boolean;
|
|
202
|
-
category: StrategyCategory;
|
|
203
228
|
tags?: StrategyTag[];
|
|
204
229
|
security: SecurityMetadata;
|
|
205
230
|
redemptionInfo: RedemptionInfo;
|
|
231
|
+
usualTimeToEarnings: null | string; // e.g. "2 weeks" // some strats grow like step functions
|
|
232
|
+
usualTimeToEarningsDescription: null | string; // e.g. "LSTs price on DEX goes up roughly every 2 weeks"
|
|
233
|
+
discontinuationInfo?: {
|
|
234
|
+
date?: Date;
|
|
235
|
+
reason?: React.ReactNode | string;
|
|
236
|
+
info?: React.ReactNode | string;
|
|
237
|
+
};
|
|
206
238
|
settings?: StrategySettings;
|
|
239
|
+
apyHistoryUIConfig?: StrategyApyHistoryUIConfig;
|
|
207
240
|
// Legacy field for multi-step strategies (deprecated, use investmentFlows instead)
|
|
208
241
|
actions?: Array<{
|
|
209
242
|
name?: string;
|
|
@@ -216,6 +249,8 @@ export interface IStrategyMetadata<T> {
|
|
|
216
249
|
amount?: string | number;
|
|
217
250
|
isDeposit?: boolean;
|
|
218
251
|
}>;
|
|
252
|
+
parentId?: string;
|
|
253
|
+
parentName?: string;
|
|
219
254
|
}
|
|
220
255
|
|
|
221
256
|
export interface IInvestmentFlow {
|
|
@@ -242,6 +277,23 @@ export function getMainnetConfig(
|
|
|
242
277
|
};
|
|
243
278
|
}
|
|
244
279
|
|
|
280
|
+
export const getStrategyTagDesciption = (tag: StrategyTag): string => {
|
|
281
|
+
switch (tag) {
|
|
282
|
+
case StrategyTag.META_VAULT:
|
|
283
|
+
return "A meta vault is a vault that auto allocates funds to multiple vaults based on optimal yield opportunities";
|
|
284
|
+
case StrategyTag.LEVERED:
|
|
285
|
+
return "Looping vaults on Endur LSTs with leveraged borrowing of STRK or BTC to increase yield (2-4x higher yield than simply staking)";
|
|
286
|
+
case StrategyTag.AUTOMATED_LP:
|
|
287
|
+
return "Automated LP vaults on Ekubo that rebalance position automatically, ensuring you earn fees efficiently";
|
|
288
|
+
case StrategyTag.BTC:
|
|
289
|
+
return "BTC linked vaults";
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export const getAllStrategyTags = (): StrategyTag[] => {
|
|
294
|
+
return Object.values(StrategyTag);
|
|
295
|
+
}
|
|
296
|
+
|
|
245
297
|
export const getRiskExplaination = (riskType: RiskType) => {
|
|
246
298
|
switch (riskType) {
|
|
247
299
|
case RiskType.MARKET_RISK:
|
|
@@ -314,7 +366,7 @@ export function highlightTextWithLinks(
|
|
|
314
366
|
{parts.map((part, i) => {
|
|
315
367
|
const match = highlights.find(m => m.highlight.toLowerCase() === part.toLowerCase());
|
|
316
368
|
return match ? (
|
|
317
|
-
<a key={i} href={match.link} target="_blank" style={{ color: '
|
|
369
|
+
<a key={i} href={match.link} target="_blank" style={{ color: 'white', background: 'rgba(255, 255, 255, 0.04)' }}>
|
|
318
370
|
{part}
|
|
319
371
|
</a>
|
|
320
372
|
) : (
|
|
@@ -375,4 +427,9 @@ export const Protocols = {
|
|
|
375
427
|
VESU: VesuProtocol,
|
|
376
428
|
ENDUR: EndurProtocol,
|
|
377
429
|
EXTENDED: ExtendedProtocol
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
export const UnwrapLabsCurator: ICurator = {
|
|
433
|
+
name: "Unwrap Labs",
|
|
434
|
+
logo: "https://assets.troves.fi/integrations/unwraplabs/white.png"
|
|
378
435
|
}
|
package/src/modules/avnu.ts
CHANGED
|
@@ -37,7 +37,7 @@ export class AvnuWrapper {
|
|
|
37
37
|
excludeSources = ['Haiko(Solvers)']
|
|
38
38
|
): Promise<Quote> {
|
|
39
39
|
const MAX_RETRY = 5;
|
|
40
|
-
|
|
40
|
+
logger.verbose(`${AvnuWrapper.name}: getQuotes => Getting quotes for ${fromToken} -> ${toToken}, amount: ${amountWei}, taker: ${taker}, retry: ${retry}`);
|
|
41
41
|
const params: any = {
|
|
42
42
|
sellTokenAddress: fromToken,
|
|
43
43
|
buyTokenAddress: toToken,
|