@strkfarm/sdk 1.1.28 → 1.1.31
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 +255 -45
- package/dist/index.browser.mjs +255 -45
- package/dist/index.d.ts +32 -4
- package/dist/index.js +263 -51
- package/dist/index.mjs +261 -51
- package/package.json +1 -1
- package/src/strategies/universal-adapters/adapter-utils.ts +2 -0
- package/src/strategies/universal-adapters/common-adapter.ts +6 -6
- package/src/strategies/universal-adapters/vesu-adapter.ts +29 -21
- package/src/strategies/universal-lst-muliplier-strategy.tsx +263 -17
- package/src/strategies/universal-strategy.tsx +13 -2
package/dist/index.mjs
CHANGED
|
@@ -19027,9 +19027,11 @@ import { hash, num as num6, shortString } from "starknet";
|
|
|
19027
19027
|
// src/strategies/universal-adapters/adapter-utils.ts
|
|
19028
19028
|
var SIMPLE_SANITIZER = ContractAddr.from("0x5a2e3ceb3da368b983a8717898427ab7b6daf04014b70f321e777f9aad940b4");
|
|
19029
19029
|
var SIMPLE_SANITIZER_V2 = ContractAddr.from("0x7b6f98311af8aa425278570e62abf523e6462eaa01a38c1feab9b2f416492e2");
|
|
19030
|
+
var VESU_V2_MODIFY_POSITION_SANITIZER = ContractAddr.from("0x04Bf71F2BD9D6F8819057c9dD524F0d5fbc38317C00500d7b9a0FdCf01195066");
|
|
19030
19031
|
var SIMPLE_SANITIZER_VESU_V1_DELEGATIONS = ContractAddr.from("0x5643d54da70a471cd2b6fa37f52ea7a13cc3f3910689a839f8490a663d2208a");
|
|
19031
19032
|
var PRICE_ROUTER = ContractAddr.from("0x05e83Fa38D791d2dba8E6f487758A9687FfEe191A6Cf8a6c5761ab0a110DB837");
|
|
19032
19033
|
var AVNU_MIDDLEWARE = ContractAddr.from("0x4a7972ed3f5d1e74a6d6c4a8f467666953d081c8f2270390cc169d50d17cb0d");
|
|
19034
|
+
var AVNU_EXCHANGE = ContractAddr.from("0x04270219d365d6b017231b52e92b3fb5d7c8378b05e9abc97724537a80e93b0f");
|
|
19033
19035
|
var VESU_SINGLETON = ContractAddr.from("0x000d8d6dfec4d33bfb6895de9f3852143a17c6f92fd2a21da3d6924d34870160");
|
|
19034
19036
|
function toBigInt(value) {
|
|
19035
19037
|
if (typeof value === "string") {
|
|
@@ -19174,11 +19176,11 @@ var CommonAdapter = class extends BaseAdapter {
|
|
|
19174
19176
|
};
|
|
19175
19177
|
};
|
|
19176
19178
|
}
|
|
19177
|
-
getAvnuAdapter(fromToken, toToken, id) {
|
|
19179
|
+
getAvnuAdapter(fromToken, toToken, id, isMiddleware) {
|
|
19178
19180
|
return () => ({
|
|
19179
19181
|
leaf: this.constructSimpleLeafData({
|
|
19180
19182
|
id,
|
|
19181
|
-
target: AVNU_MIDDLEWARE,
|
|
19183
|
+
target: isMiddleware ? AVNU_MIDDLEWARE : AVNU_EXCHANGE,
|
|
19182
19184
|
method: "multi_route_swap",
|
|
19183
19185
|
packedArguments: [
|
|
19184
19186
|
fromToken.toBigInt(),
|
|
@@ -19186,15 +19188,15 @@ var CommonAdapter = class extends BaseAdapter {
|
|
|
19186
19188
|
this.config.vaultAllocator.toBigInt()
|
|
19187
19189
|
]
|
|
19188
19190
|
}),
|
|
19189
|
-
callConstructor: this.getAvnuCall(fromToken, toToken).bind(this)
|
|
19191
|
+
callConstructor: this.getAvnuCall(fromToken, toToken, isMiddleware).bind(this)
|
|
19190
19192
|
});
|
|
19191
19193
|
}
|
|
19192
|
-
getAvnuCall(fromToken, toToken) {
|
|
19194
|
+
getAvnuCall(fromToken, toToken, isMiddleware) {
|
|
19193
19195
|
return (params) => {
|
|
19194
19196
|
return {
|
|
19195
19197
|
sanitizer: SIMPLE_SANITIZER,
|
|
19196
19198
|
call: {
|
|
19197
|
-
contractAddress: AVNU_MIDDLEWARE,
|
|
19199
|
+
contractAddress: isMiddleware ? AVNU_MIDDLEWARE : AVNU_EXCHANGE,
|
|
19198
19200
|
selector: hash2.getSelectorFromName("multi_route_swap"),
|
|
19199
19201
|
calldata: [
|
|
19200
19202
|
fromToken.toBigInt(),
|
|
@@ -23948,24 +23950,30 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
23948
23950
|
this.VESU_MULTIPLY = ContractAddr.from("0x027fef272d0a9a3844767c851a64b36fe4f0115141d81134baade95d2b27b781");
|
|
23949
23951
|
this.getModifyPosition = () => {
|
|
23950
23952
|
const positionData = [0n];
|
|
23951
|
-
const
|
|
23952
|
-
|
|
23953
|
-
// pool id
|
|
23953
|
+
const { addr, isV2 } = getVesuSingletonAddress(this.config.poolId);
|
|
23954
|
+
const commonPackedData = [
|
|
23954
23955
|
toBigInt(this.config.collateral.address.toString()),
|
|
23955
23956
|
// collateral
|
|
23956
23957
|
toBigInt(this.config.debt.address.toString()),
|
|
23957
23958
|
// debt
|
|
23958
|
-
toBigInt(this.config.vaultAllocator.toString())
|
|
23959
|
+
toBigInt(this.config.vaultAllocator.toString())
|
|
23959
23960
|
// vault allocator
|
|
23961
|
+
];
|
|
23962
|
+
const packedArguments = isV2 ? [
|
|
23963
|
+
...commonPackedData
|
|
23964
|
+
] : [
|
|
23965
|
+
toBigInt(this.config.poolId.toString()),
|
|
23966
|
+
// pool id
|
|
23967
|
+
...commonPackedData,
|
|
23960
23968
|
toBigInt(positionData.length),
|
|
23961
23969
|
...positionData
|
|
23962
23970
|
];
|
|
23963
23971
|
const output = this.constructSimpleLeafData({
|
|
23964
23972
|
id: this.config.id,
|
|
23965
|
-
target:
|
|
23973
|
+
target: addr,
|
|
23966
23974
|
method: "modify_position",
|
|
23967
23975
|
packedArguments
|
|
23968
|
-
});
|
|
23976
|
+
}, isV2 ? VESU_V2_MODIFY_POSITION_SANITIZER : SIMPLE_SANITIZER);
|
|
23969
23977
|
return { leaf: output, callConstructor: this.getModifyPositionCall.bind(this) };
|
|
23970
23978
|
};
|
|
23971
23979
|
this.getModifyPositionCall = (params) => {
|
|
@@ -24006,7 +24014,7 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
24006
24014
|
}
|
|
24007
24015
|
});
|
|
24008
24016
|
return {
|
|
24009
|
-
sanitizer: SIMPLE_SANITIZER,
|
|
24017
|
+
sanitizer: isV2 ? VESU_V2_MODIFY_POSITION_SANITIZER : SIMPLE_SANITIZER,
|
|
24010
24018
|
call: {
|
|
24011
24019
|
contractAddress: ContractAddr.from(contract.address),
|
|
24012
24020
|
selector: hash3.getSelectorFromName("modify_position"),
|
|
@@ -24016,25 +24024,27 @@ var VesuAdapter = class _VesuAdapter extends BaseAdapter {
|
|
|
24016
24024
|
}
|
|
24017
24025
|
};
|
|
24018
24026
|
};
|
|
24019
|
-
this.getMultiplyAdapter = () => {
|
|
24020
|
-
|
|
24021
|
-
|
|
24022
|
-
|
|
24023
|
-
|
|
24024
|
-
|
|
24025
|
-
|
|
24026
|
-
|
|
24027
|
-
|
|
24028
|
-
|
|
24029
|
-
|
|
24030
|
-
|
|
24031
|
-
|
|
24032
|
-
|
|
24033
|
-
|
|
24034
|
-
|
|
24035
|
-
|
|
24036
|
-
|
|
24037
|
-
|
|
24027
|
+
this.getMultiplyAdapter = (id) => {
|
|
24028
|
+
return () => {
|
|
24029
|
+
const packedArguments = [
|
|
24030
|
+
toBigInt(this.config.poolId.toString()),
|
|
24031
|
+
// pool id
|
|
24032
|
+
toBigInt(this.config.collateral.address.toString()),
|
|
24033
|
+
// collateral
|
|
24034
|
+
toBigInt(this.config.debt.address.toString()),
|
|
24035
|
+
// debt
|
|
24036
|
+
toBigInt(this.config.vaultAllocator.toString())
|
|
24037
|
+
// vault allocator
|
|
24038
|
+
];
|
|
24039
|
+
const { isV2 } = getVesuSingletonAddress(this.config.poolId);
|
|
24040
|
+
const output = this.constructSimpleLeafData({
|
|
24041
|
+
id,
|
|
24042
|
+
target: isV2 ? this.VESU_MULTIPLY : this.VESU_MULTIPLY_V1,
|
|
24043
|
+
method: "modify_lever",
|
|
24044
|
+
packedArguments
|
|
24045
|
+
}, SIMPLE_SANITIZER_V2);
|
|
24046
|
+
return { leaf: output, callConstructor: this.getMultiplyCall.bind(this) };
|
|
24047
|
+
};
|
|
24038
24048
|
};
|
|
24039
24049
|
this.getMultiplyCall = (params) => {
|
|
24040
24050
|
const isIncrease = params.isIncrease;
|
|
@@ -26726,7 +26736,11 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
26726
26736
|
id: "defispring"
|
|
26727
26737
|
}] };
|
|
26728
26738
|
}
|
|
26739
|
+
const unusedBalanceAPY = await this.getUnusedBalanceAPY();
|
|
26740
|
+
baseAPYs.push(...[unusedBalanceAPY.apy]);
|
|
26741
|
+
rewardAPYs.push(0);
|
|
26729
26742
|
const weights = positions.map((p, index) => p.usdValue * (index % 2 == 0 ? 1 : -1));
|
|
26743
|
+
weights.push(unusedBalanceAPY.weight);
|
|
26730
26744
|
const price = await this.pricer.getPrice(this.metadata.depositTokens[0].symbol);
|
|
26731
26745
|
const prevAUMUSD = prevAUM.multipliedBy(price.price);
|
|
26732
26746
|
const baseAPY = this.computeAPY(baseAPYs, weights, prevAUMUSD);
|
|
@@ -26741,6 +26755,12 @@ var UniversalStrategy = class _UniversalStrategy extends BaseStrategy {
|
|
|
26741
26755
|
id: "defispring"
|
|
26742
26756
|
}] };
|
|
26743
26757
|
}
|
|
26758
|
+
async getUnusedBalanceAPY() {
|
|
26759
|
+
return {
|
|
26760
|
+
apy: 0,
|
|
26761
|
+
weight: 0
|
|
26762
|
+
};
|
|
26763
|
+
}
|
|
26744
26764
|
computeAPY(apys, weights, currentAUM) {
|
|
26745
26765
|
assert(apys.length === weights.length, "APYs and weights length mismatch");
|
|
26746
26766
|
const weightedSum = apys.reduce((acc, apy, i) => acc + apy * weights[i], 0);
|
|
@@ -27235,7 +27255,7 @@ function getLooperSettings(token1Symbol, token2Symbol, vaultSettings, pool1, poo
|
|
|
27235
27255
|
vaultSettings.leafAdapters.push(vesuAdapterUSDCETH.getDefispringRewardsAdapter("defispring_rewards" /* DEFISPRING_REWARDS */).bind(vesuAdapterUSDCETH));
|
|
27236
27256
|
const STRKToken = Global.getDefaultTokens().find((token) => token.symbol === "STRK");
|
|
27237
27257
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(STRKToken.address, AVNU_MIDDLEWARE, "approve_swap_token1" /* APPROVE_SWAP_TOKEN1 */).bind(commonAdapter));
|
|
27238
|
-
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS
|
|
27258
|
+
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, USDCToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */, true).bind(commonAdapter));
|
|
27239
27259
|
return vaultSettings;
|
|
27240
27260
|
}
|
|
27241
27261
|
var _riskFactor3 = [
|
|
@@ -27589,6 +27609,160 @@ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy exten
|
|
|
27589
27609
|
logger.verbose(`${this.getTag()}:: LST Dex Price: ${price}`);
|
|
27590
27610
|
return price;
|
|
27591
27611
|
}
|
|
27612
|
+
async getAvnuSwapMultiplyCall(params) {
|
|
27613
|
+
return this._getAvnuDepositSwapLegCall({
|
|
27614
|
+
...params,
|
|
27615
|
+
minHF: 1.02
|
|
27616
|
+
});
|
|
27617
|
+
}
|
|
27618
|
+
async _getAvnuDepositSwapLegCall(params) {
|
|
27619
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall params: ${JSON.stringify(params)}`);
|
|
27620
|
+
assert(params.isDeposit, "Only deposit is supported in _getAvnuDepositSwapLegCall");
|
|
27621
|
+
const [vesuAdapter1] = this.getVesuAdapters();
|
|
27622
|
+
const legLTV = await vesuAdapter1.getLTVConfig(this.config);
|
|
27623
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall legLTV: ${legLTV}`);
|
|
27624
|
+
const existingPositions = await vesuAdapter1.getPositions(this.config);
|
|
27625
|
+
const collateralisation = await vesuAdapter1.getCollateralization(this.config);
|
|
27626
|
+
const existingCollateralInfo = existingPositions[0];
|
|
27627
|
+
const existingDebtInfo = existingPositions[1];
|
|
27628
|
+
logger.debug(`${this.getTag()}::_getAvnuDepositSwapLegCall existingCollateralInfo: ${JSON.stringify(existingCollateralInfo)},
|
|
27629
|
+
existingDebtInfo: ${JSON.stringify(existingDebtInfo)}, collateralisation: ${JSON.stringify(collateralisation)}`);
|
|
27630
|
+
const collateralPrice = collateralisation[0].usdValue > 0 ? collateralisation[0].usdValue / existingCollateralInfo.amount.toNumber() : 1;
|
|
27631
|
+
const debtPrice = collateralisation[1].usdValue > 0 ? collateralisation[1].usdValue / existingDebtInfo.amount.toNumber() : 1;
|
|
27632
|
+
logger.debug(`${this.getTag()}::_getAvnuDepositSwapLegCall collateralPrice: ${collateralPrice}, debtPrice: ${debtPrice}`);
|
|
27633
|
+
const totalCollateral = existingCollateralInfo.amount.plus(params.leg1DepositAmount);
|
|
27634
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall totalCollateral: ${totalCollateral}`);
|
|
27635
|
+
const totalDebtAmount = totalCollateral.multipliedBy(collateralPrice).multipliedBy(legLTV).dividedBy(debtPrice).dividedBy(params.minHF);
|
|
27636
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall totalDebtAmount: ${totalDebtAmount}`);
|
|
27637
|
+
const debtAmount = totalDebtAmount.minus(existingDebtInfo.amount);
|
|
27638
|
+
if (debtAmount.lt(0)) {
|
|
27639
|
+
const lstDEXPrice = await this.getLSTDexPrice();
|
|
27640
|
+
const debtAmountInLST = debtAmount.abs().dividedBy(lstDEXPrice);
|
|
27641
|
+
const calls = await this.getVesuMultiplyCall({
|
|
27642
|
+
isDeposit: false,
|
|
27643
|
+
leg1DepositAmount: debtAmountInLST
|
|
27644
|
+
});
|
|
27645
|
+
assert(calls.length == 1, "Expected 1 call for unwind");
|
|
27646
|
+
return calls[0];
|
|
27647
|
+
}
|
|
27648
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall debtAmount: ${debtAmount}`);
|
|
27649
|
+
const STEP0 = "approve_token1" /* APPROVE_TOKEN1 */;
|
|
27650
|
+
const manage0Info = this.getProofs(STEP0);
|
|
27651
|
+
const manageCall0 = manage0Info.callConstructor({
|
|
27652
|
+
amount: params.leg1DepositAmount
|
|
27653
|
+
});
|
|
27654
|
+
const STEP1 = "vesu_leg1" /* VESU_LEG1 */;
|
|
27655
|
+
const manage1Info = this.getProofs(STEP1);
|
|
27656
|
+
const manageCall1 = manage1Info.callConstructor(VesuAdapter.getDefaultModifyPositionCallParams({
|
|
27657
|
+
collateralAmount: params.leg1DepositAmount,
|
|
27658
|
+
isAddCollateral: params.isDeposit,
|
|
27659
|
+
debtAmount,
|
|
27660
|
+
isBorrow: params.isDeposit
|
|
27661
|
+
}));
|
|
27662
|
+
const proofIds = [STEP0, STEP1];
|
|
27663
|
+
const manageCalls = [manageCall0, manageCall1];
|
|
27664
|
+
if (debtAmount.gt(0)) {
|
|
27665
|
+
const STEP2 = "avnu_multiply_approve_deposit" /* AVNU_MULTIPLY_APPROVE_DEPOSIT */;
|
|
27666
|
+
const manage2Info = this.getProofs(STEP2);
|
|
27667
|
+
const manageCall2 = manage2Info.callConstructor({
|
|
27668
|
+
amount: debtAmount
|
|
27669
|
+
});
|
|
27670
|
+
const debtTokenInfo = vesuAdapter1.config.debt;
|
|
27671
|
+
const lstTokenInfo = this.asset();
|
|
27672
|
+
const avnuModule = new AvnuWrapper();
|
|
27673
|
+
const quote = await avnuModule.getQuotes(
|
|
27674
|
+
debtTokenInfo.address.address,
|
|
27675
|
+
lstTokenInfo.address.address,
|
|
27676
|
+
debtAmount.toWei(),
|
|
27677
|
+
this.metadata.additionalInfo.vaultAllocator.address
|
|
27678
|
+
);
|
|
27679
|
+
const minAmount = await this._getMinOutputAmountLSTBuy(debtAmount);
|
|
27680
|
+
const minAmountWei = minAmount.toWei();
|
|
27681
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall minAmount: ${minAmount}`);
|
|
27682
|
+
const swapInfo = await avnuModule.getSwapInfo(
|
|
27683
|
+
quote,
|
|
27684
|
+
this.metadata.additionalInfo.vaultAllocator.address,
|
|
27685
|
+
0,
|
|
27686
|
+
this.address.address,
|
|
27687
|
+
minAmountWei
|
|
27688
|
+
);
|
|
27689
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall swapInfo: ${JSON.stringify(swapInfo)}`);
|
|
27690
|
+
const STEP3 = "avnu_multiply_swap_deposit" /* AVNU_MULTIPLY_SWAP_DEPOSIT */;
|
|
27691
|
+
const manage3Info = this.getProofs(STEP3);
|
|
27692
|
+
const manageCall3 = manage3Info.callConstructor({
|
|
27693
|
+
props: swapInfo
|
|
27694
|
+
});
|
|
27695
|
+
proofIds.push(STEP2);
|
|
27696
|
+
proofIds.push(STEP3);
|
|
27697
|
+
manageCalls.push(manageCall2, manageCall3);
|
|
27698
|
+
const newCollateral = minAmount.plus(totalCollateral);
|
|
27699
|
+
const newHF = newCollateral.multipliedBy(collateralPrice).multipliedBy(legLTV).dividedBy(totalDebtAmount).dividedBy(debtPrice).toNumber();
|
|
27700
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall newHF: ${newHF}`);
|
|
27701
|
+
if (newHF > this.metadata.additionalInfo.minHealthFactor && newHF < this.metadata.additionalInfo.targetHealthFactor + 0.05) {
|
|
27702
|
+
logger.verbose(`${this.getTag()}::_getAvnuDepositSwapLegCall newHF is above min and below target + 0.05, adding collateral on vesu`);
|
|
27703
|
+
const STEP4 = "approve_token1" /* APPROVE_TOKEN1 */;
|
|
27704
|
+
const manage4Info = this.getProofs(STEP4);
|
|
27705
|
+
const manageCall4 = manage4Info.callConstructor({
|
|
27706
|
+
amount: minAmount
|
|
27707
|
+
});
|
|
27708
|
+
const STEP5 = "vesu_leg1" /* VESU_LEG1 */;
|
|
27709
|
+
const manage5Info = this.getProofs(STEP5);
|
|
27710
|
+
const manageCall5 = manage5Info.callConstructor(VesuAdapter.getDefaultModifyPositionCallParams({
|
|
27711
|
+
collateralAmount: minAmount,
|
|
27712
|
+
isAddCollateral: true,
|
|
27713
|
+
debtAmount: Web3Number.fromWei("0", this.asset().decimals),
|
|
27714
|
+
isBorrow: params.isDeposit
|
|
27715
|
+
}));
|
|
27716
|
+
proofIds.push(STEP4, STEP5);
|
|
27717
|
+
manageCalls.push(manageCall4, manageCall5);
|
|
27718
|
+
}
|
|
27719
|
+
}
|
|
27720
|
+
const manageCall = this.getManageCall(proofIds, manageCalls);
|
|
27721
|
+
return manageCall;
|
|
27722
|
+
}
|
|
27723
|
+
// todo unwind or not deposit when the yield is bad.
|
|
27724
|
+
async getLSTMultiplierRebalanceCall() {
|
|
27725
|
+
const positions = await this.getVaultPositions();
|
|
27726
|
+
assert(positions.length == 3, "Rebalance call is only supported for 3 positions");
|
|
27727
|
+
const existingCollateralInfo = positions[0];
|
|
27728
|
+
const existingDebtInfo = positions[1];
|
|
27729
|
+
const unusedBalance = positions[2];
|
|
27730
|
+
const [healthFactor] = await this.getVesuHealthFactors();
|
|
27731
|
+
const [vesuAdapter1] = this.getVesuAdapters();
|
|
27732
|
+
const legLTV = await vesuAdapter1.getLTVConfig(this.config);
|
|
27733
|
+
const collateralisation = await vesuAdapter1.getCollateralization(this.config);
|
|
27734
|
+
logger.debug(`${this.getTag()}::getVesuMultiplyCall existingCollateralInfo: ${JSON.stringify(existingCollateralInfo)},
|
|
27735
|
+
existingDebtInfo: ${JSON.stringify(existingDebtInfo)}, collateralisation: ${JSON.stringify(collateralisation)}`);
|
|
27736
|
+
const collateralPrice = collateralisation[0].usdValue > 0 ? collateralisation[0].usdValue / existingCollateralInfo.amount.toNumber() : 1;
|
|
27737
|
+
const debtPrice = collateralisation[1].usdValue > 0 ? collateralisation[1].usdValue / existingDebtInfo.amount.toNumber() : 1;
|
|
27738
|
+
logger.debug(`${this.getTag()}::getVesuMultiplyCall collateralPrice: ${collateralPrice}, debtPrice: ${debtPrice}`);
|
|
27739
|
+
const isHFTooLow = healthFactor < this.metadata.additionalInfo.minHealthFactor;
|
|
27740
|
+
const isHFTooHigh = healthFactor > this.metadata.additionalInfo.targetHealthFactor + 0.05;
|
|
27741
|
+
if (isHFTooLow || isHFTooHigh) {
|
|
27742
|
+
const manageCall = await this._getAvnuDepositSwapLegCall({
|
|
27743
|
+
isDeposit: true,
|
|
27744
|
+
leg1DepositAmount: unusedBalance.amount,
|
|
27745
|
+
minHF: 1.02
|
|
27746
|
+
// todo, shouldnt use this 1.02 HF, if there isn;t more looping left.
|
|
27747
|
+
});
|
|
27748
|
+
return { shouldRebalance: true, manageCall };
|
|
27749
|
+
} else {
|
|
27750
|
+
return { shouldRebalance: false, manageCall: void 0 };
|
|
27751
|
+
}
|
|
27752
|
+
}
|
|
27753
|
+
//
|
|
27754
|
+
async _getMinOutputAmountLSTBuy(amountInUnderlying) {
|
|
27755
|
+
const lstTruePrice = await this.getLSTExchangeRate();
|
|
27756
|
+
const minOutputAmount = amountInUnderlying.dividedBy(lstTruePrice);
|
|
27757
|
+
return minOutputAmount;
|
|
27758
|
+
}
|
|
27759
|
+
async _getMinOutputAmountLSTSell(amountInLST) {
|
|
27760
|
+
const lstTruePrice = await this.getLSTExchangeRate();
|
|
27761
|
+
const minOutputAmount = amountInLST.multipliedBy(lstTruePrice).multipliedBy(0.995);
|
|
27762
|
+
return minOutputAmount;
|
|
27763
|
+
}
|
|
27764
|
+
// todo add a function to findout max borrowable amount without fucking yield
|
|
27765
|
+
// if the current net yield < LST yield, add a function to calculate how much to unwind.
|
|
27592
27766
|
/**
|
|
27593
27767
|
* Uses vesu's multiple call to create leverage on LST
|
|
27594
27768
|
* Deposit amount is in LST
|
|
@@ -27640,12 +27814,40 @@ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy exten
|
|
|
27640
27814
|
async getLSTAPR(_address) {
|
|
27641
27815
|
try {
|
|
27642
27816
|
const vesuAdapter1 = this.getVesuAdapters()[0];
|
|
27643
|
-
|
|
27817
|
+
const apr = await LSTAPRService.getLSTAPR(vesuAdapter1.config.debt.address);
|
|
27818
|
+
if (!apr) {
|
|
27819
|
+
throw new Error("Failed to get LST APR");
|
|
27820
|
+
}
|
|
27821
|
+
return apr;
|
|
27644
27822
|
} catch (error) {
|
|
27645
27823
|
logger.warn(`${this.getTag()}: Failed to get LST APR: ${error}`);
|
|
27646
27824
|
return 0;
|
|
27647
27825
|
}
|
|
27648
27826
|
}
|
|
27827
|
+
// todo undo this
|
|
27828
|
+
async netAPY() {
|
|
27829
|
+
const { net, splits } = await super.netAPY();
|
|
27830
|
+
let _net = net;
|
|
27831
|
+
if (this.asset().symbol == "xWBTC") {
|
|
27832
|
+
const debtToken = this.getVesuAdapters()[0].config.debt;
|
|
27833
|
+
const lstAPY = await this.getLSTAPR(debtToken.address);
|
|
27834
|
+
_net = lstAPY * 5;
|
|
27835
|
+
}
|
|
27836
|
+
return {
|
|
27837
|
+
net: _net,
|
|
27838
|
+
splits
|
|
27839
|
+
};
|
|
27840
|
+
}
|
|
27841
|
+
async getUnusedBalanceAPY() {
|
|
27842
|
+
const unusedBalance = await this.getUnusedBalance();
|
|
27843
|
+
const vesuAdapter = this.getVesuAdapters()[0];
|
|
27844
|
+
const underlying = vesuAdapter.config.debt;
|
|
27845
|
+
const lstAPY = await this.getLSTAPR(underlying.address);
|
|
27846
|
+
return {
|
|
27847
|
+
apy: lstAPY,
|
|
27848
|
+
weight: unusedBalance.usdValue
|
|
27849
|
+
};
|
|
27850
|
+
}
|
|
27649
27851
|
async getLSTExchangeRate() {
|
|
27650
27852
|
const [vesuAdapter1] = this.getVesuAdapters();
|
|
27651
27853
|
const lstTokenInfo = vesuAdapter1.config.collateral;
|
|
@@ -27676,7 +27878,7 @@ var UniversalLstMultiplierStrategy = class _UniversalLstMultiplierStrategy exten
|
|
|
27676
27878
|
const proofsIDs = [];
|
|
27677
27879
|
const manageCalls = [];
|
|
27678
27880
|
if (params.marginAmount.greaterThan(0)) {
|
|
27679
|
-
const STEP1_ID = "
|
|
27881
|
+
const STEP1_ID = "multiple_approve" /* MULTIPLE_APPROVE */;
|
|
27680
27882
|
const manage1Info = this.getProofs(STEP1_ID);
|
|
27681
27883
|
const depositAmount = params.marginAmount;
|
|
27682
27884
|
const manageCall1 = manage1Info.callConstructor({
|
|
@@ -27806,7 +28008,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
|
|
|
27806
28008
|
collateral: lstToken,
|
|
27807
28009
|
debt: underlyingToken,
|
|
27808
28010
|
vaultAllocator: vaultSettings.vaultAllocator,
|
|
27809
|
-
id: "
|
|
28011
|
+
id: "vesu_leg1" /* VESU_LEG1 */
|
|
27810
28012
|
});
|
|
27811
28013
|
const commonAdapter = new CommonAdapter({
|
|
27812
28014
|
manager: vaultSettings.manager,
|
|
@@ -27815,10 +28017,10 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
|
|
|
27815
28017
|
vaultAddress: vaultSettings.vaultAddress,
|
|
27816
28018
|
vaultAllocator: vaultSettings.vaultAllocator
|
|
27817
28019
|
});
|
|
27818
|
-
const { isV2 } = getVesuSingletonAddress(pool1);
|
|
28020
|
+
const { isV2, addr: poolAddr } = getVesuSingletonAddress(pool1);
|
|
27819
28021
|
const VESU_MULTIPLY = isV2 ? vesuAdapterLST.VESU_MULTIPLY : vesuAdapterLST.VESU_MULTIPLY_V1;
|
|
27820
|
-
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(lstToken.address, VESU_MULTIPLY, "
|
|
27821
|
-
vaultSettings.leafAdapters.push(vesuAdapterLST.getMultiplyAdapter.bind(vesuAdapterLST));
|
|
28022
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(lstToken.address, VESU_MULTIPLY, "multiple_approve" /* MULTIPLE_APPROVE */).bind(commonAdapter));
|
|
28023
|
+
vaultSettings.leafAdapters.push(vesuAdapterLST.getMultiplyAdapter("multiply_vesu" /* MULTIPLY_VESU */).bind(vesuAdapterLST));
|
|
27822
28024
|
vaultSettings.leafAdapters.push(vesuAdapterLST.getVesuModifyDelegationAdapter("switch_delegation_on" /* SWITCH_DELEGATION_ON */).bind(vesuAdapterLST));
|
|
27823
28025
|
vaultSettings.leafAdapters.push(vesuAdapterLST.getVesuModifyDelegationAdapter("switch_delegation_off" /* SWITCH_DELEGATION_OFF */).bind(vesuAdapterLST));
|
|
27824
28026
|
vaultSettings.adapters.push(...[{
|
|
@@ -27828,12 +28030,18 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1) {
|
|
|
27828
28030
|
id: "common_adapter" /* COMMON */,
|
|
27829
28031
|
adapter: commonAdapter
|
|
27830
28032
|
}]);
|
|
28033
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(underlyingToken.address, AVNU_EXCHANGE, "avnu_multiply_approve_deposit" /* AVNU_MULTIPLY_APPROVE_DEPOSIT */).bind(commonAdapter));
|
|
28034
|
+
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(underlyingToken.address, lstToken.address, "avnu_multiply_swap_deposit" /* AVNU_MULTIPLY_SWAP_DEPOSIT */, false).bind(commonAdapter));
|
|
28035
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(lstToken.address, AVNU_EXCHANGE, "avnu_multiply_approve_withdraw" /* AVNU_MULTIPLY_APPROVE_WITHDRAW */).bind(commonAdapter));
|
|
28036
|
+
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(lstToken.address, underlyingToken.address, "avnu_multiply_swap_withdraw" /* AVNU_MULTIPLY_SWAP_WITHDRAW */, false).bind(commonAdapter));
|
|
28037
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(lstToken.address, poolAddr, "approve_token1" /* APPROVE_TOKEN1 */).bind(commonAdapter));
|
|
28038
|
+
vaultSettings.leafAdapters.push(vesuAdapterLST.getModifyPosition.bind(vesuAdapterLST));
|
|
27831
28039
|
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(lstToken.address, vaultSettings.vaultAddress, "approve_bring_liquidity" /* APPROVE_BRING_LIQUIDITY */).bind(commonAdapter));
|
|
27832
28040
|
vaultSettings.leafAdapters.push(commonAdapter.getBringLiquidityAdapter("bring_liquidity" /* BRING_LIQUIDITY */).bind(commonAdapter));
|
|
27833
28041
|
vaultSettings.leafAdapters.push(vesuAdapterLST.getDefispringRewardsAdapter("defispring_rewards" /* DEFISPRING_REWARDS */).bind(vesuAdapterLST));
|
|
27834
28042
|
const STRKToken = Global.getDefaultTokens().find((token) => token.symbol === "STRK");
|
|
27835
|
-
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(STRKToken.address,
|
|
27836
|
-
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, lstToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS
|
|
28043
|
+
vaultSettings.leafAdapters.push(commonAdapter.getApproveAdapter(STRKToken.address, AVNU_EXCHANGE, "approve_swap_token1" /* APPROVE_SWAP_TOKEN1 */).bind(commonAdapter));
|
|
28044
|
+
vaultSettings.leafAdapters.push(commonAdapter.getAvnuAdapter(STRKToken.address, lstToken.address, "avnu_swap_rewards" /* AVNU_SWAP_REWARDS */, false).bind(commonAdapter));
|
|
27837
28045
|
return vaultSettings;
|
|
27838
28046
|
}
|
|
27839
28047
|
var AUDIT_URL4 = "https://docs.troves.fi/p/security#starknet-vault-kit";
|
|
@@ -27934,11 +28142,11 @@ var hyperxsBTC = {
|
|
|
27934
28142
|
minHealthFactor: 1.05
|
|
27935
28143
|
};
|
|
27936
28144
|
var hyperxLBTC = {
|
|
27937
|
-
vaultAddress: ContractAddr.from("
|
|
27938
|
-
manager: ContractAddr.from("
|
|
27939
|
-
vaultAllocator: ContractAddr.from("
|
|
27940
|
-
redeemRequestNFT: ContractAddr.from("
|
|
27941
|
-
aumOracle: ContractAddr.from("
|
|
28145
|
+
vaultAddress: ContractAddr.from("0x64cf24d4883fe569926419a0569ab34497c6956a1a308fa883257f7486d7030"),
|
|
28146
|
+
manager: ContractAddr.from("0x203530a4022a99b8f4b406aaf33b0849d43ad7422c1d5cc14ff8c667abec6c0"),
|
|
28147
|
+
vaultAllocator: ContractAddr.from("0x7dbc8ccd4eabce6ea6c19e0e5c9ccca3a93bd510303b9e071cbe25fc508546e"),
|
|
28148
|
+
redeemRequestNFT: ContractAddr.from("0x5ee66a39af9aef3d0d48982b4a63e8bd2a5bad021916bd87fb0eae3a26800b8"),
|
|
28149
|
+
aumOracle: ContractAddr.from("0x23d69e4391fa72d10e625e7575d8bddbb4aff96f04503f83fdde23123bf41d0"),
|
|
27942
28150
|
leafAdapters: [],
|
|
27943
28151
|
adapters: [],
|
|
27944
28152
|
targetHealthFactor: 1.1,
|
|
@@ -28035,7 +28243,7 @@ var PricerLST2 = class extends Pricer {
|
|
|
28035
28243
|
};
|
|
28036
28244
|
|
|
28037
28245
|
// src/modules/lst-apr.ts
|
|
28038
|
-
var
|
|
28246
|
+
var LSTAPRService = class {
|
|
28039
28247
|
// 5 minutes
|
|
28040
28248
|
/**
|
|
28041
28249
|
* Fetches LST stats from Endur API with caching
|
|
@@ -28130,10 +28338,10 @@ var LSTAPRService2 = class {
|
|
|
28130
28338
|
logger.verbose(`LSTAPRService: Cache cleared`);
|
|
28131
28339
|
}
|
|
28132
28340
|
};
|
|
28133
|
-
|
|
28134
|
-
|
|
28135
|
-
|
|
28136
|
-
|
|
28341
|
+
LSTAPRService.ENDUR_API_URL = "https://app.endur.fi/api/lst/stats";
|
|
28342
|
+
LSTAPRService.cache = null;
|
|
28343
|
+
LSTAPRService.cacheTimestamp = 0;
|
|
28344
|
+
LSTAPRService.CACHE_DURATION = 5 * 60 * 1e3;
|
|
28137
28345
|
|
|
28138
28346
|
// src/notifs/telegram.ts
|
|
28139
28347
|
import TelegramBot from "node-telegram-bot-api";
|
|
@@ -28644,6 +28852,7 @@ var Deployer = {
|
|
|
28644
28852
|
var deployer_default = Deployer;
|
|
28645
28853
|
export {
|
|
28646
28854
|
AUMTypes,
|
|
28855
|
+
AVNU_EXCHANGE,
|
|
28647
28856
|
AVNU_MIDDLEWARE,
|
|
28648
28857
|
AutoCompounderSTRK,
|
|
28649
28858
|
AvnuWrapper,
|
|
@@ -28662,7 +28871,7 @@ export {
|
|
|
28662
28871
|
HyperLSTStrategies,
|
|
28663
28872
|
ILending,
|
|
28664
28873
|
Initializable,
|
|
28665
|
-
|
|
28874
|
+
LSTAPRService,
|
|
28666
28875
|
MarginType,
|
|
28667
28876
|
Network,
|
|
28668
28877
|
PRICE_ROUTER,
|
|
@@ -28689,6 +28898,7 @@ export {
|
|
|
28689
28898
|
UniversalStrategies,
|
|
28690
28899
|
UniversalStrategy,
|
|
28691
28900
|
VESU_SINGLETON,
|
|
28901
|
+
VESU_V2_MODIFY_POSITION_SANITIZER,
|
|
28692
28902
|
VesuAdapter,
|
|
28693
28903
|
VesuAmountDenomination,
|
|
28694
28904
|
VesuAmountType,
|
package/package.json
CHANGED
|
@@ -4,9 +4,11 @@ import { ContractAddr } from "@/dataTypes";
|
|
|
4
4
|
export const SIMPLE_SANITIZER = ContractAddr.from('0x5a2e3ceb3da368b983a8717898427ab7b6daf04014b70f321e777f9aad940b4');
|
|
5
5
|
// Without flashloan options
|
|
6
6
|
export const SIMPLE_SANITIZER_V2 = ContractAddr.from('0x7b6f98311af8aa425278570e62abf523e6462eaa01a38c1feab9b2f416492e2');
|
|
7
|
+
export const VESU_V2_MODIFY_POSITION_SANITIZER = ContractAddr.from('0x04Bf71F2BD9D6F8819057c9dD524F0d5fbc38317C00500d7b9a0FdCf01195066');
|
|
7
8
|
export const SIMPLE_SANITIZER_VESU_V1_DELEGATIONS = ContractAddr.from('0x5643d54da70a471cd2b6fa37f52ea7a13cc3f3910689a839f8490a663d2208a');
|
|
8
9
|
export const PRICE_ROUTER = ContractAddr.from('0x05e83Fa38D791d2dba8E6f487758A9687FfEe191A6Cf8a6c5761ab0a110DB837');
|
|
9
10
|
export const AVNU_MIDDLEWARE = ContractAddr.from('0x4a7972ed3f5d1e74a6d6c4a8f467666953d081c8f2270390cc169d50d17cb0d');
|
|
11
|
+
export const AVNU_EXCHANGE = ContractAddr.from('0x04270219d365d6b017231b52e92b3fb5d7c8378b05e9abc97724537a80e93b0f');
|
|
10
12
|
|
|
11
13
|
export const VESU_SINGLETON = ContractAddr.from('0x000d8d6dfec4d33bfb6895de9f3852143a17c6f92fd2a21da3d6924d34870160');
|
|
12
14
|
export function toBigInt(value: string | number): bigint {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ContractAddr, Web3Number } from "@/dataTypes";
|
|
2
2
|
import { LeafData } from "@/utils";
|
|
3
3
|
import { Call, hash, num, shortString, uint256 } from "starknet";
|
|
4
|
-
import { AVNU_MIDDLEWARE, SIMPLE_SANITIZER, toBigInt } from "./adapter-utils";
|
|
4
|
+
import { AVNU_EXCHANGE, AVNU_MIDDLEWARE, SIMPLE_SANITIZER, toBigInt } from "./adapter-utils";
|
|
5
5
|
import { AdapterLeafType, BaseAdapter, GenerateCallFn, LeafAdapterFn, ManageCall } from "./baseAdapter";
|
|
6
6
|
import { SwapInfo } from "@/modules";
|
|
7
7
|
|
|
@@ -129,11 +129,11 @@ export class CommonAdapter extends BaseAdapter {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
getAvnuAdapter(fromToken: ContractAddr, toToken: ContractAddr, id: string): () => AdapterLeafType<AvnuSwapCallParams> {
|
|
132
|
+
getAvnuAdapter(fromToken: ContractAddr, toToken: ContractAddr, id: string, isMiddleware: boolean): () => AdapterLeafType<AvnuSwapCallParams> {
|
|
133
133
|
return () => ({
|
|
134
134
|
leaf: this.constructSimpleLeafData({
|
|
135
135
|
id: id,
|
|
136
|
-
target: AVNU_MIDDLEWARE,
|
|
136
|
+
target: isMiddleware ? AVNU_MIDDLEWARE : AVNU_EXCHANGE,
|
|
137
137
|
method: 'multi_route_swap',
|
|
138
138
|
packedArguments: [
|
|
139
139
|
fromToken.toBigInt(),
|
|
@@ -141,16 +141,16 @@ export class CommonAdapter extends BaseAdapter {
|
|
|
141
141
|
this.config.vaultAllocator.toBigInt(),
|
|
142
142
|
]
|
|
143
143
|
}),
|
|
144
|
-
callConstructor: this.getAvnuCall(fromToken, toToken).bind(this)
|
|
144
|
+
callConstructor: this.getAvnuCall(fromToken, toToken, isMiddleware).bind(this)
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
|
|
148
|
-
getAvnuCall(fromToken: ContractAddr, toToken: ContractAddr): GenerateCallFn<AvnuSwapCallParams> {
|
|
148
|
+
getAvnuCall(fromToken: ContractAddr, toToken: ContractAddr, isMiddleware: boolean): GenerateCallFn<AvnuSwapCallParams> {
|
|
149
149
|
return (params: AvnuSwapCallParams): ManageCall => {
|
|
150
150
|
return {
|
|
151
151
|
sanitizer: SIMPLE_SANITIZER,
|
|
152
152
|
call: {
|
|
153
|
-
contractAddress: AVNU_MIDDLEWARE,
|
|
153
|
+
contractAddress: isMiddleware ? AVNU_MIDDLEWARE : AVNU_EXCHANGE,
|
|
154
154
|
selector: hash.getSelectorFromName('multi_route_swap'),
|
|
155
155
|
calldata: [
|
|
156
156
|
fromToken.toBigInt(), // sell_token_address
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { LeafData, logger } from "@/utils"
|
|
2
2
|
import { CairoCustomEnum, Contract, hash, num, RpcProvider, shortString, uint256, Uint256 } from "starknet";
|
|
3
|
-
import { SIMPLE_SANITIZER, SIMPLE_SANITIZER_V2, SIMPLE_SANITIZER_VESU_V1_DELEGATIONS, toBigInt, VESU_SINGLETON } from "./adapter-utils";
|
|
3
|
+
import { SIMPLE_SANITIZER, SIMPLE_SANITIZER_V2, SIMPLE_SANITIZER_VESU_V1_DELEGATIONS, toBigInt, VESU_SINGLETON, VESU_V2_MODIFY_POSITION_SANITIZER } from "./adapter-utils";
|
|
4
4
|
import { ContractAddr, Web3Number } from "@/dataTypes";
|
|
5
5
|
import { AdapterLeafType, BaseAdapter, GenerateCallFn, LeafAdapterFn, ManageCall } from "./baseAdapter";
|
|
6
6
|
import VesuSingletonAbi from '../../data/vesu-singleton.abi.json';
|
|
@@ -239,20 +239,26 @@ export class VesuAdapter extends BaseAdapter {
|
|
|
239
239
|
|
|
240
240
|
getModifyPosition = (): AdapterLeafType<VesuModifyPositionCallParams> => {
|
|
241
241
|
const positionData: bigint[] = [0n];
|
|
242
|
-
const
|
|
243
|
-
|
|
242
|
+
const { addr, isV2 } = getVesuSingletonAddress(this.config.poolId);
|
|
243
|
+
const commonPackedData: bigint[] = [
|
|
244
244
|
toBigInt(this.config.collateral.address.toString()), // collateral
|
|
245
245
|
toBigInt(this.config.debt.address.toString()), // debt
|
|
246
246
|
toBigInt(this.config.vaultAllocator.toString()), // vault allocator
|
|
247
|
+
];
|
|
248
|
+
const packedArguments: bigint[] = isV2 ? [
|
|
249
|
+
...commonPackedData
|
|
250
|
+
] : [
|
|
251
|
+
toBigInt(this.config.poolId.toString()), // pool id
|
|
252
|
+
...commonPackedData,
|
|
247
253
|
toBigInt(positionData.length),
|
|
248
254
|
...positionData
|
|
249
255
|
];
|
|
250
256
|
const output = this.constructSimpleLeafData({
|
|
251
257
|
id: this.config.id,
|
|
252
|
-
target:
|
|
258
|
+
target: addr,
|
|
253
259
|
method: 'modify_position',
|
|
254
260
|
packedArguments
|
|
255
|
-
});
|
|
261
|
+
}, isV2 ? VESU_V2_MODIFY_POSITION_SANITIZER : SIMPLE_SANITIZER);
|
|
256
262
|
|
|
257
263
|
return { leaf: output, callConstructor: this.getModifyPositionCall.bind(this) };
|
|
258
264
|
}
|
|
@@ -328,7 +334,7 @@ export class VesuAdapter extends BaseAdapter {
|
|
|
328
334
|
}
|
|
329
335
|
});
|
|
330
336
|
return {
|
|
331
|
-
sanitizer: SIMPLE_SANITIZER,
|
|
337
|
+
sanitizer: isV2 ? VESU_V2_MODIFY_POSITION_SANITIZER : SIMPLE_SANITIZER,
|
|
332
338
|
call: {
|
|
333
339
|
contractAddress: ContractAddr.from(contract.address),
|
|
334
340
|
selector: hash.getSelectorFromName('modify_position'),
|
|
@@ -339,22 +345,24 @@ export class VesuAdapter extends BaseAdapter {
|
|
|
339
345
|
}
|
|
340
346
|
}
|
|
341
347
|
|
|
342
|
-
getMultiplyAdapter = ():
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
348
|
+
getMultiplyAdapter = (id: string): LeafAdapterFn<VesuMultiplyCallParams> => {
|
|
349
|
+
return () => {
|
|
350
|
+
const packedArguments: bigint[] = [
|
|
351
|
+
toBigInt(this.config.poolId.toString()), // pool id
|
|
352
|
+
toBigInt(this.config.collateral.address.toString()), // collateral
|
|
353
|
+
toBigInt(this.config.debt.address.toString()), // debt
|
|
354
|
+
toBigInt(this.config.vaultAllocator.toString()), // vault allocator
|
|
355
|
+
];
|
|
356
|
+
const { isV2 } = getVesuSingletonAddress(this.config.poolId);
|
|
357
|
+
const output = this.constructSimpleLeafData({
|
|
358
|
+
id: id,
|
|
359
|
+
target: isV2 ? this.VESU_MULTIPLY : this.VESU_MULTIPLY_V1,
|
|
360
|
+
method: 'modify_lever',
|
|
361
|
+
packedArguments
|
|
362
|
+
}, SIMPLE_SANITIZER_V2);
|
|
356
363
|
|
|
357
|
-
|
|
364
|
+
return { leaf: output, callConstructor: this.getMultiplyCall.bind(this) };
|
|
365
|
+
}
|
|
358
366
|
}
|
|
359
367
|
|
|
360
368
|
getMultiplyCall = (params: VesuMultiplyCallParams): ManageCall => {
|