@strkfarm/sdk 2.0.0-dev.9 → 2.0.0-staging.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.global.js +111371 -93151
- package/dist/index.browser.mjs +27815 -32690
- package/dist/index.d.ts +1095 -2011
- package/dist/index.js +27425 -32309
- package/dist/index.mjs +27590 -32452
- package/package.json +6 -5
- package/src/data/ekubo-price-fethcer.abi.json +265 -0
- package/src/data/universal-vault.abi.json +20 -135
- package/src/dataTypes/address.ts +0 -7
- package/src/dataTypes/index.ts +3 -2
- package/src/dataTypes/mynumber.ts +141 -0
- package/src/global.ts +296 -288
- package/src/index.browser.ts +6 -5
- package/src/interfaces/common.tsx +324 -184
- package/src/modules/apollo-client-config.ts +28 -0
- package/src/modules/avnu.ts +4 -17
- package/src/modules/ekubo-pricer.ts +79 -0
- package/src/modules/ekubo-quoter.ts +11 -88
- package/src/modules/erc20.ts +21 -67
- package/src/modules/harvests.ts +26 -15
- package/src/modules/index.ts +11 -13
- package/src/modules/lst-apr.ts +0 -36
- package/src/modules/pragma.ts +23 -8
- package/src/modules/pricer-from-api.ts +150 -14
- package/src/modules/pricer.ts +2 -1
- package/src/modules/pricerBase.ts +2 -1
- package/src/node/deployer.ts +36 -1
- package/src/node/pricer-redis.ts +2 -1
- package/src/strategies/autoCompounderStrk.ts +1 -1
- package/src/strategies/base-strategy.ts +5 -22
- package/src/strategies/ekubo-cl-vault.tsx +2904 -2175
- package/src/strategies/factory.ts +165 -0
- package/src/strategies/index.ts +10 -11
- package/src/strategies/registry.ts +268 -0
- package/src/strategies/sensei.ts +416 -292
- package/src/strategies/universal-adapters/adapter-utils.ts +1 -5
- package/src/strategies/universal-adapters/baseAdapter.ts +153 -181
- package/src/strategies/universal-adapters/common-adapter.ts +77 -98
- package/src/strategies/universal-adapters/index.ts +1 -5
- package/src/strategies/universal-adapters/vesu-adapter.ts +218 -220
- package/src/strategies/universal-adapters/vesu-supply-only-adapter.ts +51 -58
- package/src/strategies/universal-lst-muliplier-strategy.tsx +1952 -992
- package/src/strategies/universal-strategy.tsx +1713 -1150
- package/src/strategies/vesu-rebalance.tsx +1189 -986
- package/src/utils/health-factor-math.ts +5 -11
- package/src/utils/index.ts +8 -9
- package/src/utils/strategy-utils.ts +57 -0
- package/src/data/extended-deposit.abi.json +0 -3613
- package/src/modules/ExtendedWrapperSDk/index.ts +0 -62
- package/src/modules/ExtendedWrapperSDk/types.ts +0 -311
- package/src/modules/ExtendedWrapperSDk/wrapper.ts +0 -395
- package/src/modules/midas.ts +0 -159
- package/src/modules/token-market-data.ts +0 -202
- package/src/strategies/svk-strategy.ts +0 -247
- package/src/strategies/universal-adapters/adapter-optimizer.ts +0 -65
- package/src/strategies/universal-adapters/avnu-adapter.ts +0 -413
- package/src/strategies/universal-adapters/extended-adapter.ts +0 -972
- package/src/strategies/universal-adapters/unused-balance-adapter.ts +0 -109
- package/src/strategies/universal-adapters/vesu-multiply-adapter.ts +0 -1306
- package/src/strategies/vesu-extended-strategy/services/operationService.ts +0 -34
- package/src/strategies/vesu-extended-strategy/utils/config.runtime.ts +0 -77
- package/src/strategies/vesu-extended-strategy/utils/constants.ts +0 -49
- package/src/strategies/vesu-extended-strategy/utils/helper.ts +0 -370
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +0 -1379
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
import { ContractAddr, Web3Number } from "@/dataTypes";
|
|
2
|
-
import { IConfig,
|
|
2
|
+
import { IConfig, TokenInfo } from "@/interfaces";
|
|
3
3
|
import { PricerBase } from "@/modules/pricerBase";
|
|
4
|
-
import { BaseAdapter, BaseAdapterConfig, SupportedPosition, PositionInfo, PositionAPY, APYType, ManageCall, AdapterLeafType, GenerateCallFn
|
|
4
|
+
import { BaseAdapter, BaseAdapterConfig, SupportedPosition, PositionInfo, PositionAPY, APYType, ManageCall, AdapterLeafType, GenerateCallFn } from "./baseAdapter";
|
|
5
5
|
import { SIMPLE_SANITIZER, toBigInt } from "./adapter-utils";
|
|
6
6
|
import { hash, uint256, Contract } from "starknet";
|
|
7
7
|
import { VesuAdapter } from "./vesu-adapter";
|
|
8
8
|
import { logger } from "@/utils";
|
|
9
|
-
import ERC4626Abi from "@/data/erc4626.abi.json";
|
|
10
|
-
import { TokenMarketData } from "@/modules";
|
|
11
9
|
|
|
12
10
|
export interface VesuSupplyOnlyAdapterConfig extends BaseAdapterConfig {
|
|
13
11
|
vTokenContract: ContractAddr;
|
|
14
12
|
}
|
|
15
13
|
|
|
14
|
+
export interface DepositParams {
|
|
15
|
+
amount: Web3Number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface WithdrawParams {
|
|
19
|
+
amount: Web3Number;
|
|
20
|
+
}
|
|
16
21
|
|
|
17
|
-
export class VesuSupplyOnlyAdapter extends BaseAdapter<
|
|
22
|
+
export class VesuSupplyOnlyAdapter extends BaseAdapter<any, any> {
|
|
18
23
|
readonly config: VesuSupplyOnlyAdapterConfig;
|
|
19
|
-
readonly tokenMarketData: TokenMarketData;
|
|
20
24
|
|
|
21
25
|
constructor(config: VesuSupplyOnlyAdapterConfig) {
|
|
22
|
-
super(config
|
|
26
|
+
super(config);
|
|
23
27
|
this.config = config;
|
|
24
|
-
this.tokenMarketData = new TokenMarketData(this.config.pricer, this.config.networkConfig);
|
|
25
28
|
}
|
|
26
29
|
|
|
27
30
|
protected async getAPY(supportedPosition: SupportedPosition): Promise<PositionAPY> {
|
|
@@ -68,14 +71,14 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
68
71
|
const supplyApy = Number(assetStats.supplyApy?.value || 0) / 1e18;
|
|
69
72
|
|
|
70
73
|
// Get LST APR if applicable (for LST tokens)
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
74
|
+
let lstAPY = 0;
|
|
75
|
+
if (baseToken.symbol === 'STRK' || baseToken.symbol === 'ETH') {
|
|
76
|
+
// This would need to be implemented based on your LST APR service
|
|
77
|
+
// For now, using a placeholder
|
|
78
|
+
lstAPY = 0;
|
|
79
|
+
}
|
|
75
80
|
|
|
76
|
-
|
|
77
|
-
// bcz, without rewards, no point in simply depositing LST in vesu
|
|
78
|
-
const totalAPY = rewardAPY > 0 ? rewardAPY + supplyApy + lstAPY : supplyApy;
|
|
81
|
+
const totalAPY = supplyApy + lstAPY;
|
|
79
82
|
|
|
80
83
|
const result = {
|
|
81
84
|
apy: totalAPY,
|
|
@@ -86,13 +89,16 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
86
89
|
return result;
|
|
87
90
|
} catch (error) {
|
|
88
91
|
logger.error(`VesuSupplyOnlyAdapter: Error getting APY for ${supportedPosition.asset.symbol}:`, error);
|
|
89
|
-
|
|
92
|
+
return {
|
|
93
|
+
apy: 0,
|
|
94
|
+
type: APYType.BASE
|
|
95
|
+
};
|
|
90
96
|
}
|
|
91
97
|
}
|
|
92
98
|
|
|
93
|
-
protected async getPosition(supportedPosition: SupportedPosition): Promise<
|
|
99
|
+
protected async getPosition(supportedPosition: SupportedPosition): Promise<Web3Number> {
|
|
94
100
|
const CACHE_KEY = `position_${this.config.vTokenContract.address}`;
|
|
95
|
-
const cacheData = this.getCache<
|
|
101
|
+
const cacheData = this.getCache<Web3Number>(CACHE_KEY);
|
|
96
102
|
if (cacheData) {
|
|
97
103
|
return cacheData;
|
|
98
104
|
}
|
|
@@ -100,78 +106,69 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
100
106
|
try {
|
|
101
107
|
// Create contract instance for the vToken
|
|
102
108
|
const vTokenContract = new Contract({
|
|
103
|
-
abi:
|
|
109
|
+
abi: [], // We only need basic ERC20 methods
|
|
104
110
|
address: this.config.vTokenContract.address,
|
|
105
111
|
providerOrAccount: this.config.networkConfig.provider
|
|
106
112
|
});
|
|
107
113
|
|
|
108
114
|
// Get the vault allocator's balance (shares) in the vToken contract
|
|
109
|
-
const shares = await vTokenContract.
|
|
115
|
+
const shares = await vTokenContract.balanceOf(this.config.vaultAllocator.address);
|
|
110
116
|
|
|
111
117
|
// Convert shares to assets using convert_to_assets
|
|
112
118
|
const assets = await vTokenContract.convert_to_assets(
|
|
113
119
|
uint256.bnToUint256(shares)
|
|
114
120
|
);
|
|
115
121
|
|
|
116
|
-
const result =
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
),
|
|
121
|
-
remarks: "Vesu Earn"
|
|
122
|
-
};
|
|
122
|
+
const result = Web3Number.fromWei(
|
|
123
|
+
assets.toString(),
|
|
124
|
+
supportedPosition.asset.decimals
|
|
125
|
+
);
|
|
123
126
|
|
|
124
127
|
this.setCache(CACHE_KEY, result, 60000); // Cache for 1 minute
|
|
125
128
|
return result;
|
|
126
129
|
} catch (error) {
|
|
127
130
|
logger.error(`VesuSupplyOnlyAdapter: Error getting position for ${supportedPosition.asset.symbol}:`, error);
|
|
128
|
-
|
|
131
|
+
return new Web3Number('0', supportedPosition.asset.decimals);
|
|
129
132
|
}
|
|
130
133
|
}
|
|
131
134
|
|
|
132
|
-
async maxDeposit(amount?: Web3Number): Promise<PositionInfo> {
|
|
135
|
+
protected async maxDeposit(amount?: Web3Number): Promise<PositionInfo[]> {
|
|
133
136
|
const baseToken = this.config.baseToken;
|
|
134
137
|
// todo for assets with some borrowing on Vesu, the yield wont
|
|
135
138
|
// remain same as supply increases. So need to account for that.
|
|
136
139
|
|
|
137
140
|
if (!amount) {
|
|
138
141
|
// Return infinity for max deposit when no amount specified
|
|
139
|
-
return {
|
|
140
|
-
tokenInfo: baseToken,
|
|
142
|
+
return [{
|
|
141
143
|
amount: new Web3Number('999999999999999999999999999', baseToken.decimals),
|
|
142
144
|
usdValue: 999999999999999999999999999,
|
|
143
145
|
remarks: "Max deposit (infinity)",
|
|
144
|
-
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
145
|
-
|
|
146
|
-
};
|
|
146
|
+
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
147
|
+
}];
|
|
147
148
|
}
|
|
148
149
|
|
|
149
150
|
// Return position info based on input amount
|
|
150
151
|
const usdValue = await this.getUSDValue(baseToken, amount);
|
|
151
|
-
return {
|
|
152
|
-
tokenInfo: baseToken,
|
|
152
|
+
return [{
|
|
153
153
|
amount,
|
|
154
154
|
usdValue,
|
|
155
155
|
remarks: "Deposit amount",
|
|
156
|
-
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
157
|
-
|
|
158
|
-
};
|
|
156
|
+
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
157
|
+
}];
|
|
159
158
|
}
|
|
160
159
|
|
|
161
|
-
async maxWithdraw(): Promise<PositionInfo> {
|
|
160
|
+
protected async maxWithdraw(): Promise<PositionInfo[]> {
|
|
162
161
|
const baseToken = this.config.baseToken;
|
|
163
162
|
const currentPosition = await this.getPosition({ asset: baseToken, isDebt: false });
|
|
164
163
|
|
|
165
164
|
// Return the current position as max withdraw
|
|
166
|
-
const usdValue = await this.getUSDValue(baseToken, currentPosition
|
|
167
|
-
return {
|
|
168
|
-
|
|
169
|
-
amount: currentPosition.amount,
|
|
165
|
+
const usdValue = await this.getUSDValue(baseToken, currentPosition);
|
|
166
|
+
return [{
|
|
167
|
+
amount: currentPosition,
|
|
170
168
|
usdValue,
|
|
171
169
|
remarks: "Max withdraw",
|
|
172
|
-
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
173
|
-
|
|
174
|
-
};
|
|
170
|
+
apy: await this.getAPY({ asset: baseToken, isDebt: false })
|
|
171
|
+
}];
|
|
175
172
|
}
|
|
176
173
|
|
|
177
174
|
protected _getDepositLeaf(): {
|
|
@@ -193,7 +190,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
193
190
|
vTokenContract.toBigInt(), // spender
|
|
194
191
|
],
|
|
195
192
|
sanitizer: SIMPLE_SANITIZER,
|
|
196
|
-
id: `
|
|
193
|
+
id: `approve_deposit_vtoken_${this.config.vTokenContract.address}`
|
|
197
194
|
},
|
|
198
195
|
// Deposit step
|
|
199
196
|
{
|
|
@@ -203,7 +200,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
203
200
|
this.config.vaultAllocator.toBigInt(),
|
|
204
201
|
],
|
|
205
202
|
sanitizer: SIMPLE_SANITIZER,
|
|
206
|
-
id: `deposit_vtoken_${this.config.vTokenContract.
|
|
203
|
+
id: `deposit_vtoken_${this.config.vTokenContract.address}`
|
|
207
204
|
}
|
|
208
205
|
];
|
|
209
206
|
}
|
|
@@ -227,7 +224,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
227
224
|
this.config.vaultAllocator.toBigInt(),
|
|
228
225
|
],
|
|
229
226
|
sanitizer: SIMPLE_SANITIZER,
|
|
230
|
-
id: `withdraw_vtoken_${this.config.vTokenContract.
|
|
227
|
+
id: `withdraw_vtoken_${this.config.vTokenContract.address}`
|
|
231
228
|
}
|
|
232
229
|
];
|
|
233
230
|
}
|
|
@@ -244,7 +241,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
244
241
|
}, sanitizer);
|
|
245
242
|
return leaf;
|
|
246
243
|
});
|
|
247
|
-
return { leaves, callConstructor: this.
|
|
244
|
+
return { leaves, callConstructor: this.createDepositCall.bind(this) as unknown as GenerateCallFn<DepositParams> };
|
|
248
245
|
}
|
|
249
246
|
|
|
250
247
|
getWithdrawAdapter(): AdapterLeafType<WithdrawParams> {
|
|
@@ -259,10 +256,10 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
259
256
|
}, sanitizer);
|
|
260
257
|
return leaf;
|
|
261
258
|
});
|
|
262
|
-
return { leaves, callConstructor: this.
|
|
259
|
+
return { leaves, callConstructor: this.createWithdrawCall.bind(this) as unknown as GenerateCallFn<WithdrawParams> };
|
|
263
260
|
}
|
|
264
261
|
|
|
265
|
-
|
|
262
|
+
private createDepositCall(params: DepositParams): ManageCall[] {
|
|
266
263
|
const baseToken = this.config.baseToken;
|
|
267
264
|
const vTokenContract = this.config.vTokenContract;
|
|
268
265
|
|
|
@@ -299,7 +296,7 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
299
296
|
];
|
|
300
297
|
}
|
|
301
298
|
|
|
302
|
-
|
|
299
|
+
private createWithdrawCall(params: WithdrawParams): ManageCall[] {
|
|
303
300
|
const vTokenContract = this.config.vTokenContract;
|
|
304
301
|
|
|
305
302
|
const amount = params.amount;
|
|
@@ -322,8 +319,4 @@ export class VesuSupplyOnlyAdapter extends BaseAdapter<DepositParams, WithdrawPa
|
|
|
322
319
|
}
|
|
323
320
|
];
|
|
324
321
|
}
|
|
325
|
-
|
|
326
|
-
getHealthFactor(): Promise<number> {
|
|
327
|
-
return Promise.resolve(10);
|
|
328
|
-
}
|
|
329
322
|
}
|