@strkfarm/sdk 1.0.62 → 1.1.0
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 +8 -2
- package/dist/cli.mjs +9 -3
- package/dist/index.browser.global.js +37782 -36017
- package/dist/index.browser.mjs +241 -92
- package/dist/index.d.ts +23 -4
- package/dist/index.js +247 -92
- package/dist/index.mjs +252 -97
- package/package.json +2 -2
- package/src/interfaces/common.tsx +2 -2
- package/src/modules/erc20.ts +1 -1
- package/src/modules/harvests.ts +6 -4
- package/src/modules/pragma.ts +1 -1
- package/src/modules/pricer.ts +1 -1
- package/src/node/deployer.ts +2 -2
- package/src/strategies/autoCompounderStrk.ts +1 -1
- package/src/strategies/ekubo-cl-vault.tsx +41 -41
- package/src/strategies/sensei.ts +6 -6
- package/src/strategies/universal-adapters/adapter-utils.ts +3 -1
- package/src/strategies/universal-adapters/common-adapter.ts +57 -1
- package/src/strategies/universal-adapters/vesu-adapter.ts +41 -2
- package/src/strategies/universal-strategy.tsx +93 -20
- package/src/strategies/vesu-rebalance.tsx +15 -15
- package/src/utils/store.ts +9 -2
package/dist/index.mjs
CHANGED
|
@@ -417,7 +417,7 @@ var Pricer = class extends PricerBase {
|
|
|
417
417
|
}
|
|
418
418
|
async _getPrice(token, defaultMethod = "all") {
|
|
419
419
|
const methodToUse = this.methodToUse[token.symbol] || defaultMethod;
|
|
420
|
-
logger.
|
|
420
|
+
logger.verbose(`Fetching price of ${token.symbol} using ${methodToUse}`);
|
|
421
421
|
switch (methodToUse) {
|
|
422
422
|
case "Coinbase":
|
|
423
423
|
try {
|
|
@@ -582,7 +582,7 @@ var pragma_abi_default = [
|
|
|
582
582
|
var Pragma = class {
|
|
583
583
|
constructor(provider2) {
|
|
584
584
|
this.contractAddr = "0x023fb3afbff2c0e3399f896dcf7400acf1a161941cfb386e34a123f228c62832";
|
|
585
|
-
this.contract = new Contract(pragma_abi_default, this.contractAddr, provider2);
|
|
585
|
+
this.contract = new Contract({ abi: pragma_abi_default, address: this.contractAddr, providerOrAccount: provider2 });
|
|
586
586
|
}
|
|
587
587
|
async getPrice(tokenAddr) {
|
|
588
588
|
if (!tokenAddr) {
|
|
@@ -1958,7 +1958,7 @@ var ERC20 = class {
|
|
|
1958
1958
|
}
|
|
1959
1959
|
contract(addr) {
|
|
1960
1960
|
const _addr = typeof addr === "string" ? addr : addr.address;
|
|
1961
|
-
return new Contract2(erc20_abi_default, _addr, this.config.provider);
|
|
1961
|
+
return new Contract2({ abi: erc20_abi_default, address: _addr, providerOrAccount: this.config.provider });
|
|
1962
1962
|
}
|
|
1963
1963
|
async balanceOf(token, address, tokenDecimals) {
|
|
1964
1964
|
const contract = this.contract(token);
|
|
@@ -2121,7 +2121,7 @@ var AvnuWrapper = class _AvnuWrapper {
|
|
|
2121
2121
|
};
|
|
2122
2122
|
|
|
2123
2123
|
// src/interfaces/common.tsx
|
|
2124
|
-
import { RpcProvider as RpcProvider2 } from "starknet";
|
|
2124
|
+
import { BlockTag, RpcProvider as RpcProvider2 } from "starknet";
|
|
2125
2125
|
import { Fragment, jsx } from "react/jsx-runtime";
|
|
2126
2126
|
var RiskType = /* @__PURE__ */ ((RiskType2) => {
|
|
2127
2127
|
RiskType2["MARKET_RISK"] = "Market Risk";
|
|
@@ -2147,7 +2147,7 @@ var FlowChartColors = /* @__PURE__ */ ((FlowChartColors2) => {
|
|
|
2147
2147
|
FlowChartColors2["Purple"] = "#6e53dc";
|
|
2148
2148
|
return FlowChartColors2;
|
|
2149
2149
|
})(FlowChartColors || {});
|
|
2150
|
-
function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier =
|
|
2150
|
+
function getMainnetConfig(rpcUrl = "https://starknet-mainnet.public.blastapi.io", blockIdentifier = BlockTag.LATEST) {
|
|
2151
2151
|
return {
|
|
2152
2152
|
provider: new RpcProvider2({
|
|
2153
2153
|
nodeUrl: rpcUrl,
|
|
@@ -2266,7 +2266,7 @@ var AutoCompounderSTRK = class {
|
|
|
2266
2266
|
async init() {
|
|
2267
2267
|
const provider2 = this.config.provider;
|
|
2268
2268
|
const cls = await provider2.getClassAt(this.addr.address);
|
|
2269
|
-
this.contract = new Contract3(cls.abi, this.addr.address, provider2);
|
|
2269
|
+
this.contract = new Contract3({ abi: cls.abi, address: this.addr.address, providerOrAccount: provider2 });
|
|
2270
2270
|
this.initialized = true;
|
|
2271
2271
|
}
|
|
2272
2272
|
async waitForInitilisation() {
|
|
@@ -3847,7 +3847,7 @@ var Harvests = class _Harvests {
|
|
|
3847
3847
|
const unClaimed = [];
|
|
3848
3848
|
const cls = await this.config.provider.getClassAt(rewards[0].rewardsContract.address);
|
|
3849
3849
|
for (let reward of rewards) {
|
|
3850
|
-
const contract = new Contract4(cls.abi, reward.rewardsContract.address, this.config.provider);
|
|
3850
|
+
const contract = new Contract4({ abi: cls.abi, address: reward.rewardsContract.address, providerOrAccount: this.config.provider });
|
|
3851
3851
|
const isClaimed = await contract.call("is_claimed", [reward.claim.id]);
|
|
3852
3852
|
logger.verbose(`${_Harvests.name}: isClaimed: ${isClaimed}`);
|
|
3853
3853
|
if (isClaimed) {
|
|
@@ -3890,13 +3890,14 @@ var EkuboHarvests = class extends Harvests {
|
|
|
3890
3890
|
return rewards.sort((a, b) => b.endDate.getTime() - a.endDate.getTime());
|
|
3891
3891
|
}
|
|
3892
3892
|
};
|
|
3893
|
+
var VESU_REWARDS_CONTRACT = ContractAddr.from("0x0387f3eb1d98632fbe3440a9f1385Aec9d87b6172491d3Dd81f1c35A7c61048F");
|
|
3893
3894
|
var VesuHarvests = class _VesuHarvests extends Harvests {
|
|
3894
3895
|
async getHarvests(addr) {
|
|
3895
3896
|
const result = await fetch(`https://api.vesu.xyz/users/${addr.address}/strk-rewards/calldata`);
|
|
3896
3897
|
const data = await result.json();
|
|
3897
|
-
const rewardsContract =
|
|
3898
|
+
const rewardsContract = VESU_REWARDS_CONTRACT;
|
|
3898
3899
|
const cls = await this.config.provider.getClassAt(rewardsContract.address);
|
|
3899
|
-
const contract = new Contract4(cls.abi, rewardsContract.address, this.config.provider);
|
|
3900
|
+
const contract = new Contract4({ abi: cls.abi, address: rewardsContract.address, providerOrAccount: this.config.provider });
|
|
3900
3901
|
const _claimed_amount = await contract.call("amount_already_claimed", [addr.address]);
|
|
3901
3902
|
const claimed_amount = Web3Number.fromWei(_claimed_amount.toString(), 18);
|
|
3902
3903
|
logger.verbose(`${_VesuHarvests.name}: claimed_amount: ${claimed_amount.toString()}`);
|
|
@@ -9398,11 +9399,11 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
9398
9399
|
);
|
|
9399
9400
|
this.metadata = metadata;
|
|
9400
9401
|
this.address = metadata.address;
|
|
9401
|
-
this.contract = new Contract5(
|
|
9402
|
-
vesu_rebalance_abi_default,
|
|
9403
|
-
this.address.address,
|
|
9404
|
-
this.config.provider
|
|
9405
|
-
);
|
|
9402
|
+
this.contract = new Contract5({
|
|
9403
|
+
abi: vesu_rebalance_abi_default,
|
|
9404
|
+
address: this.address.address,
|
|
9405
|
+
providerOrAccount: this.config.provider
|
|
9406
|
+
});
|
|
9406
9407
|
}
|
|
9407
9408
|
/**
|
|
9408
9409
|
* Creates a deposit call to the strategy contract.
|
|
@@ -9415,11 +9416,11 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
9415
9416
|
amountInfo.tokenInfo.address.eq(this.asset().address),
|
|
9416
9417
|
"Deposit token mismatch"
|
|
9417
9418
|
);
|
|
9418
|
-
const assetContract = new Contract5(
|
|
9419
|
-
vesu_rebalance_abi_default,
|
|
9420
|
-
this.asset().address.address,
|
|
9421
|
-
this.config.provider
|
|
9422
|
-
);
|
|
9419
|
+
const assetContract = new Contract5({
|
|
9420
|
+
abi: vesu_rebalance_abi_default,
|
|
9421
|
+
address: this.asset().address.address,
|
|
9422
|
+
providerOrAccount: this.config.provider
|
|
9423
|
+
});
|
|
9423
9424
|
const call1 = assetContract.populate("approve", [
|
|
9424
9425
|
this.address.address,
|
|
9425
9426
|
uint2563.bnToUint256(amountInfo.amount.toWei())
|
|
@@ -9552,11 +9553,11 @@ var VesuRebalance = class _VesuRebalance extends BaseStrategy {
|
|
|
9552
9553
|
`Asset ${this.asset().address.toString()} not found in pool ${p.pool_id.address.toString()}`
|
|
9553
9554
|
);
|
|
9554
9555
|
}
|
|
9555
|
-
let vTokenContract = new Contract5(
|
|
9556
|
-
vesu_rebalance_abi_default,
|
|
9557
|
-
p.v_token.address,
|
|
9558
|
-
this.config.provider
|
|
9559
|
-
);
|
|
9556
|
+
let vTokenContract = new Contract5({
|
|
9557
|
+
abi: vesu_rebalance_abi_default,
|
|
9558
|
+
address: p.v_token.address,
|
|
9559
|
+
providerOrAccount: this.config.provider
|
|
9560
|
+
});
|
|
9560
9561
|
const bal = await vTokenContract.balanceOf(this.address.address);
|
|
9561
9562
|
const assets = await vTokenContract.convert_to_assets(
|
|
9562
9563
|
uint2563.bnToUint256(bal.toString())
|
|
@@ -15141,32 +15142,32 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15141
15142
|
);
|
|
15142
15143
|
this.metadata = metadata;
|
|
15143
15144
|
this.address = metadata.address;
|
|
15144
|
-
this.contract = new Contract6(
|
|
15145
|
-
cl_vault_abi_default,
|
|
15146
|
-
this.address.address,
|
|
15147
|
-
this.config.provider
|
|
15148
|
-
);
|
|
15145
|
+
this.contract = new Contract6({
|
|
15146
|
+
abi: cl_vault_abi_default,
|
|
15147
|
+
address: this.address.address,
|
|
15148
|
+
providerOrAccount: this.config.provider
|
|
15149
|
+
});
|
|
15149
15150
|
if (this.metadata.additionalInfo.lstContract) {
|
|
15150
|
-
this.lstContract = new Contract6(
|
|
15151
|
-
erc4626_abi_default,
|
|
15152
|
-
this.metadata.additionalInfo.lstContract.address,
|
|
15153
|
-
this.config.provider
|
|
15154
|
-
);
|
|
15151
|
+
this.lstContract = new Contract6({
|
|
15152
|
+
abi: erc4626_abi_default,
|
|
15153
|
+
address: this.metadata.additionalInfo.lstContract.address,
|
|
15154
|
+
providerOrAccount: this.config.provider
|
|
15155
|
+
});
|
|
15155
15156
|
} else {
|
|
15156
15157
|
this.lstContract = null;
|
|
15157
15158
|
}
|
|
15158
15159
|
const EKUBO_POSITION = "0x02e0af29598b407c8716b17f6d2795eca1b471413fa03fb145a5e33722184067";
|
|
15159
|
-
this.ekuboPositionsContract = new Contract6(
|
|
15160
|
-
ekubo_positions_abi_default,
|
|
15161
|
-
EKUBO_POSITION,
|
|
15162
|
-
this.config.provider
|
|
15163
|
-
);
|
|
15160
|
+
this.ekuboPositionsContract = new Contract6({
|
|
15161
|
+
abi: ekubo_positions_abi_default,
|
|
15162
|
+
address: EKUBO_POSITION,
|
|
15163
|
+
providerOrAccount: this.config.provider
|
|
15164
|
+
});
|
|
15164
15165
|
const EKUBO_MATH = "0x04a72e9e166f6c0e9d800af4dc40f6b6fb4404b735d3f528d9250808b2481995";
|
|
15165
|
-
this.ekuboMathContract = new Contract6(
|
|
15166
|
-
ekubo_math_abi_default,
|
|
15167
|
-
EKUBO_MATH,
|
|
15168
|
-
this.config.provider
|
|
15169
|
-
);
|
|
15166
|
+
this.ekuboMathContract = new Contract6({
|
|
15167
|
+
abi: ekubo_math_abi_default,
|
|
15168
|
+
address: EKUBO_MATH,
|
|
15169
|
+
providerOrAccount: this.config.provider
|
|
15170
|
+
});
|
|
15170
15171
|
this.avnu = new AvnuWrapper();
|
|
15171
15172
|
}
|
|
15172
15173
|
async matchInputAmounts(amountInfo) {
|
|
@@ -15214,16 +15215,16 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15214
15215
|
}
|
|
15215
15216
|
async depositCall(amountInfo, receiver) {
|
|
15216
15217
|
const updateAmountInfo = await this.getMinDepositAmounts(amountInfo);
|
|
15217
|
-
const token0Contract = new Contract6(
|
|
15218
|
-
erc4626_abi_default,
|
|
15219
|
-
amountInfo.token0.tokenInfo.address.address,
|
|
15220
|
-
this.config.provider
|
|
15221
|
-
);
|
|
15222
|
-
const token1Contract = new Contract6(
|
|
15223
|
-
erc4626_abi_default,
|
|
15224
|
-
amountInfo.token1.tokenInfo.address.address,
|
|
15225
|
-
this.config.provider
|
|
15226
|
-
);
|
|
15218
|
+
const token0Contract = new Contract6({
|
|
15219
|
+
abi: erc4626_abi_default,
|
|
15220
|
+
address: amountInfo.token0.tokenInfo.address.address,
|
|
15221
|
+
providerOrAccount: this.config.provider
|
|
15222
|
+
});
|
|
15223
|
+
const token1Contract = new Contract6({
|
|
15224
|
+
abi: erc4626_abi_default,
|
|
15225
|
+
address: amountInfo.token1.tokenInfo.address.address,
|
|
15226
|
+
providerOrAccount: this.config.provider
|
|
15227
|
+
});
|
|
15227
15228
|
const call1 = token0Contract.populate("approve", [
|
|
15228
15229
|
this.address.address,
|
|
15229
15230
|
uint2564.bnToUint256(updateAmountInfo.token0.amount.toWei())
|
|
@@ -15282,7 +15283,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15282
15283
|
* Calculates assets before and now in a given token of TVL per share to observe growth
|
|
15283
15284
|
* @returns {Promise<number>} The weighted average APY across all pools
|
|
15284
15285
|
*/
|
|
15285
|
-
async netAPY(blockIdentifier = "
|
|
15286
|
+
async netAPY(blockIdentifier = "pre_confirmed", sinceBlocks = 2e4) {
|
|
15286
15287
|
const tvlNow = await this._getTVL(blockIdentifier);
|
|
15287
15288
|
const supplyNow = await this.totalSupply(blockIdentifier);
|
|
15288
15289
|
const priceNow = await this.getCurrentPrice(blockIdentifier);
|
|
@@ -15341,13 +15342,13 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15341
15342
|
}
|
|
15342
15343
|
return shares;
|
|
15343
15344
|
}
|
|
15344
|
-
async balanceOf(user, blockIdentifier = "
|
|
15345
|
+
async balanceOf(user, blockIdentifier = "pre_confirmed") {
|
|
15345
15346
|
let bal = await this.contract.call("balance_of", [user.address], {
|
|
15346
15347
|
blockIdentifier
|
|
15347
15348
|
});
|
|
15348
15349
|
return Web3Number.fromWei(bal.toString(), 18);
|
|
15349
15350
|
}
|
|
15350
|
-
async getUserTVL(user, blockIdentifier = "
|
|
15351
|
+
async getUserTVL(user, blockIdentifier = "pre_confirmed") {
|
|
15351
15352
|
let bal = await this.balanceOf(user, blockIdentifier);
|
|
15352
15353
|
const assets = await this.contract.call(
|
|
15353
15354
|
"convert_to_assets",
|
|
@@ -15386,7 +15387,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15386
15387
|
}
|
|
15387
15388
|
};
|
|
15388
15389
|
}
|
|
15389
|
-
async _getTVL(blockIdentifier = "
|
|
15390
|
+
async _getTVL(blockIdentifier = "pre_confirmed") {
|
|
15390
15391
|
const result = await this.contract.call("total_liquidity", [], {
|
|
15391
15392
|
blockIdentifier
|
|
15392
15393
|
});
|
|
@@ -15398,7 +15399,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15398
15399
|
);
|
|
15399
15400
|
return { amount0, amount1 };
|
|
15400
15401
|
}
|
|
15401
|
-
async totalSupply(blockIdentifier = "
|
|
15402
|
+
async totalSupply(blockIdentifier = "pre_confirmed") {
|
|
15402
15403
|
const res = await this.contract.call("total_supply", [], {
|
|
15403
15404
|
blockIdentifier
|
|
15404
15405
|
});
|
|
@@ -15414,7 +15415,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15414
15415
|
"Expected token1 in depositTokens[1]"
|
|
15415
15416
|
);
|
|
15416
15417
|
}
|
|
15417
|
-
async getTVL(blockIdentifier = "
|
|
15418
|
+
async getTVL(blockIdentifier = "pre_confirmed") {
|
|
15418
15419
|
const { amount0, amount1 } = await this._getTVL(blockIdentifier);
|
|
15419
15420
|
const poolKey = await this.getPoolKey(blockIdentifier);
|
|
15420
15421
|
this.assertValidDepositTokens(poolKey);
|
|
@@ -15503,11 +15504,11 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15503
15504
|
}
|
|
15504
15505
|
throw new Error("No true price available");
|
|
15505
15506
|
}
|
|
15506
|
-
async getCurrentPrice(blockIdentifier = "
|
|
15507
|
+
async getCurrentPrice(blockIdentifier = "pre_confirmed") {
|
|
15507
15508
|
const poolKey = await this.getPoolKey(blockIdentifier);
|
|
15508
15509
|
return this._getCurrentPrice(poolKey, blockIdentifier);
|
|
15509
15510
|
}
|
|
15510
|
-
async _getCurrentPrice(poolKey, blockIdentifier = "
|
|
15511
|
+
async _getCurrentPrice(poolKey, blockIdentifier = "pre_confirmed") {
|
|
15511
15512
|
const priceInfo = await this.ekuboPositionsContract.call(
|
|
15512
15513
|
"get_pool_price",
|
|
15513
15514
|
[
|
|
@@ -15542,7 +15543,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15542
15543
|
sqrtRatio: priceInfo.sqrt_ratio.toString()
|
|
15543
15544
|
};
|
|
15544
15545
|
}
|
|
15545
|
-
async getCurrentBounds(blockIdentifier = "
|
|
15546
|
+
async getCurrentBounds(blockIdentifier = "pre_confirmed") {
|
|
15546
15547
|
const result = await this.contract.call("get_position_key", [], {
|
|
15547
15548
|
blockIdentifier
|
|
15548
15549
|
});
|
|
@@ -15559,7 +15560,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
15559
15560
|
const tick = Math.floor(value / tickSpacing) * tickSpacing;
|
|
15560
15561
|
return this.tickToi129(tick);
|
|
15561
15562
|
}
|
|
15562
|
-
async getPoolKey(blockIdentifier = "
|
|
15563
|
+
async getPoolKey(blockIdentifier = "pre_confirmed") {
|
|
15563
15564
|
if (this.poolKey) {
|
|
15564
15565
|
return this.poolKey;
|
|
15565
15566
|
}
|
|
@@ -16057,7 +16058,7 @@ var EkuboCLVault = class _EkuboCLVault extends BaseStrategy {
|
|
|
16057
16058
|
static tickToPrice(tick) {
|
|
16058
16059
|
return Math.pow(1.000001, Number(tick));
|
|
16059
16060
|
}
|
|
16060
|
-
async getLiquidityToAmounts(liquidity, bounds, blockIdentifier = "
|
|
16061
|
+
async getLiquidityToAmounts(liquidity, bounds, blockIdentifier = "pre_confirmed", _poolKey = null, _currentPrice = null) {
|
|
16061
16062
|
const currentPrice = _currentPrice || await this.getCurrentPrice(blockIdentifier);
|
|
16062
16063
|
const lowerPrice = _EkuboCLVault.tickToPrice(bounds.lowerTick);
|
|
16063
16064
|
const upperPrice = _EkuboCLVault.tickToPrice(bounds.upperTick);
|
|
@@ -18219,7 +18220,7 @@ var SenseiVault = class extends BaseStrategy {
|
|
|
18219
18220
|
this.address = metadata.address;
|
|
18220
18221
|
this.pricer = pricer;
|
|
18221
18222
|
this.metadata = metadata;
|
|
18222
|
-
this.contract = new Contract7(sensei_abi_default, this.address.address, this.config.provider);
|
|
18223
|
+
this.contract = new Contract7({ abi: sensei_abi_default, address: this.address.address, providerOrAccount: this.config.provider });
|
|
18223
18224
|
if (metadata.depositTokens.length === 0) {
|
|
18224
18225
|
throw new Error("Deposit tokens are not defined in metadata");
|
|
18225
18226
|
}
|
|
@@ -18271,11 +18272,11 @@ var SenseiVault = class extends BaseStrategy {
|
|
|
18271
18272
|
}
|
|
18272
18273
|
}
|
|
18273
18274
|
async depositCall(amountInfo, receiver) {
|
|
18274
|
-
const mainTokenContract = new Contract7(
|
|
18275
|
-
erc20_abi_default,
|
|
18276
|
-
this.metadata.depositTokens[0].address.address,
|
|
18277
|
-
this.config.provider
|
|
18278
|
-
);
|
|
18275
|
+
const mainTokenContract = new Contract7({
|
|
18276
|
+
abi: erc20_abi_default,
|
|
18277
|
+
address: this.metadata.depositTokens[0].address.address,
|
|
18278
|
+
providerOrAccount: this.config.provider
|
|
18279
|
+
});
|
|
18279
18280
|
const call1 = mainTokenContract.populate("approve", [
|
|
18280
18281
|
this.address.address,
|
|
18281
18282
|
uint2565.bnToUint256(amountInfo.amount.toWei())
|
|
@@ -18486,7 +18487,9 @@ var SenseiStrategies = [
|
|
|
18486
18487
|
import { hash, num as num6, shortString } from "starknet";
|
|
18487
18488
|
|
|
18488
18489
|
// src/strategies/universal-adapters/adapter-utils.ts
|
|
18489
|
-
var SIMPLE_SANITIZER = ContractAddr.from("
|
|
18490
|
+
var SIMPLE_SANITIZER = ContractAddr.from("0x5a2e3ceb3da368b983a8717898427ab7b6daf04014b70f321e777f9aad940b4");
|
|
18491
|
+
var PRICE_ROUTER = ContractAddr.from("0x05e83Fa38D791d2dba8E6f487758A9687FfEe191A6Cf8a6c5761ab0a110DB837");
|
|
18492
|
+
var AVNU_MIDDLEWARE = ContractAddr.from("0x4a7972ed3f5d1e74a6d6c4a8f467666953d081c8f2270390cc169d50d17cb0d");
|
|
18490
18493
|
function toBigInt(value) {
|
|
18491
18494
|
if (typeof value === "string") {
|
|
18492
18495
|
return BigInt(value);
|
|
@@ -18519,7 +18522,7 @@ var BaseAdapter = class extends CacheClass {
|
|
|
18519
18522
|
};
|
|
18520
18523
|
|
|
18521
18524
|
// src/strategies/universal-adapters/common-adapter.ts
|
|
18522
|
-
import { hash as hash2, uint256 as uint2566 } from "starknet";
|
|
18525
|
+
import { hash as hash2, num as num7, uint256 as uint2566 } from "starknet";
|
|
18523
18526
|
var CommonAdapter = class extends BaseAdapter {
|
|
18524
18527
|
constructor(config) {
|
|
18525
18528
|
super();
|
|
@@ -18630,10 +18633,70 @@ var CommonAdapter = class extends BaseAdapter {
|
|
|
18630
18633
|
};
|
|
18631
18634
|
};
|
|
18632
18635
|
}
|
|
18636
|
+
getAvnuAdapter(fromToken, toToken, id) {
|
|
18637
|
+
return () => ({
|
|
18638
|
+
leaf: this.constructSimpleLeafData({
|
|
18639
|
+
id,
|
|
18640
|
+
target: AVNU_MIDDLEWARE,
|
|
18641
|
+
method: "multi_route_swap",
|
|
18642
|
+
packedArguments: [
|
|
18643
|
+
fromToken.toBigInt(),
|
|
18644
|
+
toToken.toBigInt(),
|
|
18645
|
+
this.config.vaultAllocator.toBigInt()
|
|
18646
|
+
]
|
|
18647
|
+
}),
|
|
18648
|
+
callConstructor: this.getAvnuCall(fromToken, toToken).bind(this)
|
|
18649
|
+
});
|
|
18650
|
+
}
|
|
18651
|
+
getAvnuCall(fromToken, toToken) {
|
|
18652
|
+
return (params) => {
|
|
18653
|
+
return {
|
|
18654
|
+
sanitizer: SIMPLE_SANITIZER,
|
|
18655
|
+
call: {
|
|
18656
|
+
contractAddress: AVNU_MIDDLEWARE,
|
|
18657
|
+
selector: hash2.getSelectorFromName("multi_route_swap"),
|
|
18658
|
+
calldata: [
|
|
18659
|
+
fromToken.toBigInt(),
|
|
18660
|
+
// sell_token_address
|
|
18661
|
+
toBigInt(params.props.token_from_amount.low.toString()),
|
|
18662
|
+
// sell_token_amount low
|
|
18663
|
+
toBigInt(params.props.token_from_amount.high.toString()),
|
|
18664
|
+
// sell_token_amount high
|
|
18665
|
+
toToken.toBigInt(),
|
|
18666
|
+
// buy_token_address
|
|
18667
|
+
toBigInt(params.props.token_to_amount.low.toString()),
|
|
18668
|
+
// buy_token_amount low
|
|
18669
|
+
toBigInt(params.props.token_to_amount.high.toString()),
|
|
18670
|
+
// buy_token_amount high
|
|
18671
|
+
toBigInt(params.props.token_to_min_amount.low.toString()),
|
|
18672
|
+
// buy_token_min_amount low
|
|
18673
|
+
toBigInt(params.props.token_to_min_amount.high.toString()),
|
|
18674
|
+
// buy_token_min_amount high
|
|
18675
|
+
this.config.vaultAllocator.toBigInt(),
|
|
18676
|
+
// beneficiary
|
|
18677
|
+
toBigInt(0),
|
|
18678
|
+
// integrator_fee_amount_bps
|
|
18679
|
+
this.config.vaultAllocator.toBigInt(),
|
|
18680
|
+
// integrator_fee_recipient
|
|
18681
|
+
// unpack routes
|
|
18682
|
+
BigInt(params.props.routes.length),
|
|
18683
|
+
...params.props.routes.map((r) => [
|
|
18684
|
+
BigInt(num7.hexToDecimalString(r.token_from)),
|
|
18685
|
+
BigInt(num7.hexToDecimalString(r.token_to)),
|
|
18686
|
+
BigInt(num7.hexToDecimalString(r.exchange_address)),
|
|
18687
|
+
BigInt(r.percent),
|
|
18688
|
+
BigInt(r.additional_swap_params.length),
|
|
18689
|
+
...r.additional_swap_params.map((p) => BigInt(num7.hexToDecimalString(p)))
|
|
18690
|
+
]).flat()
|
|
18691
|
+
]
|
|
18692
|
+
}
|
|
18693
|
+
};
|
|
18694
|
+
};
|
|
18695
|
+
}
|
|
18633
18696
|
};
|
|
18634
18697
|
|
|
18635
18698
|
// src/strategies/universal-adapters/vesu-adapter.ts
|
|
18636
|
-
import { CairoCustomEnum as CairoCustomEnum2, Contract as Contract8, hash as hash3, RpcProvider as RpcProvider4, uint256 as uint2567 } from "starknet";
|
|
18699
|
+
import { CairoCustomEnum as CairoCustomEnum2, Contract as Contract8, hash as hash3, num as num8, RpcProvider as RpcProvider4, shortString as shortString3, uint256 as uint2567 } from "starknet";
|
|
18637
18700
|
|
|
18638
18701
|
// src/data/vesu-singleton.abi.json
|
|
18639
18702
|
var vesu_singleton_abi_default = [
|
|
@@ -20943,7 +21006,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
20943
21006
|
}
|
|
20944
21007
|
};
|
|
20945
21008
|
logger.verbose(`VesuAdapter::ConstructingModify::Debt::${JSON.stringify(_debt)}`);
|
|
20946
|
-
const singletonContract = new Contract8(vesu_singleton_abi_default, this.VESU_SINGLETON.toString(), new RpcProvider4({ nodeUrl: "" }));
|
|
21009
|
+
const singletonContract = new Contract8({ abi: vesu_singleton_abi_default, address: this.VESU_SINGLETON.toString(), providerOrAccount: new RpcProvider4({ nodeUrl: "" }) });
|
|
20947
21010
|
const call = singletonContract.populate("modify_position", {
|
|
20948
21011
|
params: {
|
|
20949
21012
|
pool_id: this.config.poolId.toBigInt(),
|
|
@@ -20966,6 +21029,40 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
20966
21029
|
}
|
|
20967
21030
|
};
|
|
20968
21031
|
};
|
|
21032
|
+
this.getDefispringRewardsAdapter = (id) => {
|
|
21033
|
+
return () => {
|
|
21034
|
+
const packedArguments = [];
|
|
21035
|
+
const output = {
|
|
21036
|
+
id: BigInt(num8.getDecimalString(shortString3.encodeShortString(id))),
|
|
21037
|
+
readableId: id,
|
|
21038
|
+
data: [
|
|
21039
|
+
SIMPLE_SANITIZER.toBigInt(),
|
|
21040
|
+
// sanitizer address
|
|
21041
|
+
VESU_REWARDS_CONTRACT.toBigInt(),
|
|
21042
|
+
// contract
|
|
21043
|
+
toBigInt(hash3.getSelectorFromName("claim")),
|
|
21044
|
+
// method name
|
|
21045
|
+
BigInt(packedArguments.length),
|
|
21046
|
+
...packedArguments
|
|
21047
|
+
]
|
|
21048
|
+
};
|
|
21049
|
+
return { leaf: output, callConstructor: this.getDefiSpringClaimCall().bind(this) };
|
|
21050
|
+
};
|
|
21051
|
+
};
|
|
21052
|
+
this.getDefiSpringClaimCall = () => {
|
|
21053
|
+
return (params) => ({
|
|
21054
|
+
sanitizer: SIMPLE_SANITIZER,
|
|
21055
|
+
call: {
|
|
21056
|
+
contractAddress: VESU_REWARDS_CONTRACT,
|
|
21057
|
+
selector: hash3.getSelectorFromName("claim"),
|
|
21058
|
+
calldata: [
|
|
21059
|
+
BigInt(params.amount.toWei()),
|
|
21060
|
+
BigInt(params.proofs.length),
|
|
21061
|
+
...params.proofs.map((proof) => BigInt(num8.hexToDecimalString(proof)))
|
|
21062
|
+
]
|
|
21063
|
+
}
|
|
21064
|
+
});
|
|
21065
|
+
};
|
|
20969
21066
|
this.config = config;
|
|
20970
21067
|
}
|
|
20971
21068
|
static getDefaultModifyPositionCallParams(params) {
|
|
@@ -21007,7 +21104,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
21007
21104
|
throw new Error(`Unknown VesuAmountDenomination: ${denomination}`);
|
|
21008
21105
|
}
|
|
21009
21106
|
getVesuSingletonContract(config) {
|
|
21010
|
-
return new Contract8(vesu_singleton_abi_default, this.VESU_SINGLETON.address, config.provider);
|
|
21107
|
+
return new Contract8({ abi: vesu_singleton_abi_default, address: this.VESU_SINGLETON.address, providerOrAccount: config.provider });
|
|
21011
21108
|
}
|
|
21012
21109
|
async getLTVConfig(config) {
|
|
21013
21110
|
const CACHE_KEY = "ltv_config";
|
|
@@ -23370,16 +23467,16 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
23370
23467
|
);
|
|
23371
23468
|
this.metadata = metadata;
|
|
23372
23469
|
this.address = metadata.address;
|
|
23373
|
-
this.contract = new Contract9(
|
|
23374
|
-
universal_vault_abi_default,
|
|
23375
|
-
this.address.address,
|
|
23376
|
-
this.config.provider
|
|
23377
|
-
);
|
|
23378
|
-
this.managerContract = new Contract9(
|
|
23379
|
-
vault_manager_abi_default,
|
|
23380
|
-
this.metadata.additionalInfo.manager.address,
|
|
23381
|
-
this.config.provider
|
|
23382
|
-
);
|
|
23470
|
+
this.contract = new Contract9({
|
|
23471
|
+
abi: universal_vault_abi_default,
|
|
23472
|
+
address: this.address.address,
|
|
23473
|
+
providerOrAccount: this.config.provider
|
|
23474
|
+
});
|
|
23475
|
+
this.managerContract = new Contract9({
|
|
23476
|
+
abi: vault_manager_abi_default,
|
|
23477
|
+
address: this.metadata.additionalInfo.manager.address,
|
|
23478
|
+
providerOrAccount: this.config.provider
|
|
23479
|
+
});
|
|
23383
23480
|
}
|
|
23384
23481
|
getMerkleTree() {
|
|
23385
23482
|
if (this.merkleTree) return this.merkleTree;
|
|
@@ -23429,11 +23526,11 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
23429
23526
|
amountInfo.tokenInfo.address.eq(this.asset().address),
|
|
23430
23527
|
"Deposit token mismatch"
|
|
23431
23528
|
);
|
|
23432
|
-
const assetContract = new Contract9(
|
|
23433
|
-
universal_vault_abi_default,
|
|
23434
|
-
this.asset().address.address,
|
|
23435
|
-
this.config.provider
|
|
23436
|
-
);
|
|
23529
|
+
const assetContract = new Contract9({
|
|
23530
|
+
abi: universal_vault_abi_default,
|
|
23531
|
+
address: this.asset().address.address,
|
|
23532
|
+
providerOrAccount: this.config.provider
|
|
23533
|
+
});
|
|
23437
23534
|
const call1 = assetContract.populate("approve", [
|
|
23438
23535
|
this.address.address,
|
|
23439
23536
|
uint2568.bnToUint256(amountInfo.amount.toWei())
|
|
@@ -23595,7 +23692,7 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
23595
23692
|
const aumToken = vesuAum.plus(balance.amount);
|
|
23596
23693
|
logger.verbose(`${this.getTag()} Actual AUM: ${aumToken}`);
|
|
23597
23694
|
const netAPY = await this.netAPY();
|
|
23598
|
-
const defispringAPY = netAPY.splits.find((s) => s.id === "defispring")?.apy || 0;
|
|
23695
|
+
const defispringAPY = (netAPY.splits.find((s) => s.id === "defispring")?.apy || 0) * 0.8;
|
|
23599
23696
|
if (!defispringAPY) throw new Error("DefiSpring APY not found");
|
|
23600
23697
|
const timeDiff = Math.round(Date.now() / 1e3) - Number(lastReportTime);
|
|
23601
23698
|
const growthRate = timeDiff * defispringAPY / (365 * 24 * 60 * 60);
|
|
@@ -23838,6 +23935,51 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
23838
23935
|
const manageCall = this.getManageCall(["approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */, "bring_liquidity" /* BRING_LIQUIDITY */], [manageCall1, manageCall2]);
|
|
23839
23936
|
return manageCall;
|
|
23840
23937
|
}
|
|
23938
|
+
async getHarvestCall() {
|
|
23939
|
+
const vesuHarvest = new VesuHarvests(this.config);
|
|
23940
|
+
const harvestInfo = await vesuHarvest.getUnHarvestedRewards(this.metadata.additionalInfo.vaultAllocator);
|
|
23941
|
+
if (harvestInfo.length != 1) {
|
|
23942
|
+
throw new Error(`Expected 1 harvest info, got ${harvestInfo.length}`);
|
|
23943
|
+
}
|
|
23944
|
+
const amount = harvestInfo[0].claim.amount;
|
|
23945
|
+
const actualReward = harvestInfo[0].actualReward;
|
|
23946
|
+
const proofs = harvestInfo[0].proof;
|
|
23947
|
+
if (actualReward.isZero()) {
|
|
23948
|
+
throw new Error(`Expected non-zero actual reward, got ${harvestInfo[0].actualReward}`);
|
|
23949
|
+
}
|
|
23950
|
+
const manage1Info = this.getProofs("defispring_rewards" /* DEFISPRING_REWARDS */);
|
|
23951
|
+
const manageCall1 = manage1Info.callConstructor({
|
|
23952
|
+
amount,
|
|
23953
|
+
proofs
|
|
23954
|
+
});
|
|
23955
|
+
const proofIds = ["defispring_rewards" /* DEFISPRING_REWARDS */];
|
|
23956
|
+
const manageCalls = [manageCall1];
|
|
23957
|
+
const STRK2 = Global.getDefaultTokens().find((t) => t.symbol === "STRK");
|
|
23958
|
+
if (this.asset().symbol != "STRK") {
|
|
23959
|
+
const manage2Info = this.getProofs("approve_swap_token1" /* APPROVE_SWAP_TOKEN1 */);
|
|
23960
|
+
const manageCall2 = manage2Info.callConstructor({
|
|
23961
|
+
amount: actualReward
|
|
23962
|
+
});
|
|
23963
|
+
const avnuModule = new AvnuWrapper();
|
|
23964
|
+
const quote = await avnuModule.getQuotes(
|
|
23965
|
+
STRK2.address.address,
|
|
23966
|
+
this.asset().address.address,
|
|
23967
|
+
actualReward.toWei(),
|
|
23968
|
+
this.address.address
|
|
23969
|
+
);
|
|
23970
|
+
const swapInfo = await avnuModule.getSwapInfo(quote, this.address.address, 0, this.address.address);
|
|
23971
|
+
const manage3Info = this.getProofs("avnu_swap_rewards" /* AVNU_SWAP_REWARDS */);
|
|
23972
|
+
const manageCall3 = manage3Info.callConstructor({
|
|
23973
|
+
props: swapInfo
|
|
23974
|
+
});
|
|
23975
|
+
proofIds.push("approve_swap_token1" /* APPROVE_SWAP_TOKEN1 */);
|
|
23976
|
+
proofIds.push("avnu_swap_rewards" /* AVNU_SWAP_REWARDS */);
|
|
23977
|
+
manageCalls.push(manageCall2);
|
|
23978
|
+
manageCalls.push(manageCall3);
|
|
23979
|
+
}
|
|
23980
|
+
const manageCall = this.getManageCall(proofIds, manageCalls);
|
|
23981
|
+
return { call: manageCall, reward: actualReward, tokenInfo: STRK2 };
|
|
23982
|
+
}
|
|
23841
23983
|
async getRebalanceCall(params) {
|
|
23842
23984
|
let callSet1 = this.getVesuModifyPositionCalls({
|
|
23843
23985
|
isLeg1: true,
|
|
@@ -23874,6 +24016,9 @@ var UNIVERSAL_MANAGE_IDS = /* @__PURE__ */ ((UNIVERSAL_MANAGE_IDS2) => {
|
|
|
23874
24016
|
UNIVERSAL_MANAGE_IDS2["APPROVE_TOKEN2"] = "approve_token2";
|
|
23875
24017
|
UNIVERSAL_MANAGE_IDS2["APPROVE_BRING_LIQUIDITY"] = "approve_bring_liquidity";
|
|
23876
24018
|
UNIVERSAL_MANAGE_IDS2["BRING_LIQUIDITY"] = "bring_liquidity";
|
|
24019
|
+
UNIVERSAL_MANAGE_IDS2["DEFISPRING_REWARDS"] = "defispring_rewards";
|
|
24020
|
+
UNIVERSAL_MANAGE_IDS2["APPROVE_SWAP_TOKEN1"] = "approve_swap_token1";
|
|
24021
|
+
UNIVERSAL_MANAGE_IDS2["AVNU_SWAP_REWARDS"] = "avnu_swap_rewards";
|
|
23877
24022
|
return UNIVERSAL_MANAGE_IDS2;
|
|
23878
24023
|
})(UNIVERSAL_MANAGE_IDS || {});
|
|
23879
24024
|
var UNIVERSAL_ADAPTERS = /* @__PURE__ */ ((UNIVERSAL_ADAPTERS2) => {
|
|
@@ -23923,6 +24068,10 @@ function getLooperSettings(token1Symbol, token2Symbol, vaultSettings, pool1, poo
|
|
|
23923
24068
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(ETHToken.address, vesuAdapterETHUSDC.VESU_SINGLETON, "approve_token2" /* APPROVE_TOKEN2 */).bind(commonAdapter));
|
|
23924
24069
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(USDCToken.address, vaultSettings.vaultAddress, "approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */).bind(commonAdapter));
|
|
23925
24070
|
vaultSettings.leafAdapters.push(commonAdapter.getBringLiquidityAdapter("bring_liquidity" /* BRING_LIQUIDITY */).bind(commonAdapter));
|
|
24071
|
+
vaultSettings.leafAdapters.push(vesuAdapterUSDCETH.getDefispringRewardsAdapter("defispring_rewards" /* DEFISPRING_REWARDS */).bind(vesuAdapterUSDCETH));
|
|
24072
|
+
const STRKToken = Global.getDefaultTokens().find((token) => token.symbol === "STRK");
|
|
24073
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(STRKToken.address, AVNU_MIDDLEWARE, "approve_swap_token1" /* APPROVE_SWAP_TOKEN1 */).bind(commonAdapter));
|
|
24074
|
+
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */).bind(commonAdapter));
|
|
23926
24075
|
return vaultSettings;
|
|
23927
24076
|
}
|
|
23928
24077
|
var _riskFactor4 = [
|
|
@@ -24320,12 +24469,12 @@ var PricerRedis = class extends Pricer {
|
|
|
24320
24469
|
|
|
24321
24470
|
// src/node/deployer.ts
|
|
24322
24471
|
import assert2 from "assert";
|
|
24323
|
-
import { TransactionExecutionStatus, constants as constants3, extractContractHashes, json, num as num10
|
|
24472
|
+
import { Deployer as SnDeployer, TransactionExecutionStatus, constants as constants3, extractContractHashes, json, num as num10 } from "starknet";
|
|
24324
24473
|
import { readFileSync as readFileSync2, existsSync, writeFileSync as writeFileSync2 } from "fs";
|
|
24325
24474
|
|
|
24326
24475
|
// src/utils/store.ts
|
|
24327
24476
|
import fs, { readFileSync, writeFileSync } from "fs";
|
|
24328
|
-
import { Account as Account3
|
|
24477
|
+
import { Account as Account3 } from "starknet";
|
|
24329
24478
|
import * as crypto2 from "crypto";
|
|
24330
24479
|
|
|
24331
24480
|
// src/utils/encrypt.ts
|
|
@@ -24410,7 +24559,7 @@ var Store = class _Store {
|
|
|
24410
24559
|
logger.warn(`This not stored anywhere, please you backup this password for future use`);
|
|
24411
24560
|
logger.warn(`\u26A0\uFE0F=========================================\u26A0\uFE0F`);
|
|
24412
24561
|
}
|
|
24413
|
-
getAccount(accountKey, txVersion
|
|
24562
|
+
getAccount(accountKey, txVersion) {
|
|
24414
24563
|
const accounts = this.loadAccounts();
|
|
24415
24564
|
logger.verbose(`nAccounts loaded for network: ${Object.keys(accounts).length}`);
|
|
24416
24565
|
const data = accounts[accountKey];
|
|
@@ -24419,7 +24568,13 @@ var Store = class _Store {
|
|
|
24419
24568
|
}
|
|
24420
24569
|
logger.verbose(`Account loaded: ${accountKey} from network: ${this.config.network}`);
|
|
24421
24570
|
logger.verbose(`Address: ${data.address}`);
|
|
24422
|
-
const acc = new Account3(
|
|
24571
|
+
const acc = new Account3({
|
|
24572
|
+
provider: this.config.provider,
|
|
24573
|
+
address: data.address,
|
|
24574
|
+
signer: data.pk,
|
|
24575
|
+
cairoVersion: void 0,
|
|
24576
|
+
transactionVersion: txVersion
|
|
24577
|
+
});
|
|
24423
24578
|
return acc;
|
|
24424
24579
|
}
|
|
24425
24580
|
addAccount(accountKey, address, pk) {
|
|
@@ -24578,7 +24733,7 @@ async function prepareMultiDeployContracts(contracts, config, acc) {
|
|
|
24578
24733
|
for (const { contract_name, package_name, constructorData } of contracts) {
|
|
24579
24734
|
const declaredInfo = await myDeclare(contract_name, package_name, config, acc);
|
|
24580
24735
|
const classHash = declaredInfo.class_hash;
|
|
24581
|
-
const { calls, addresses } =
|
|
24736
|
+
const { calls, addresses } = new SnDeployer().buildDeployerCall({
|
|
24582
24737
|
classHash,
|
|
24583
24738
|
constructorCalldata: constructorData
|
|
24584
24739
|
}, acc.address);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strkfarm/sdk",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "1.1.0",
|
|
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",
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
"@types/react": "^19.1.2",
|
|
55
55
|
"axios": "^1.7.2",
|
|
56
56
|
"react": "19.1.0",
|
|
57
|
-
"starknet": "
|
|
57
|
+
"starknet": "8.5.2"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
60
|
"@avnu/avnu-sdk": "3.0.2",
|