@strkfarm/sdk 2.0.0-dev.21 → 2.0.0-dev.23
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 +887 -262
- package/dist/index.browser.mjs +813 -188
- package/dist/index.d.ts +24 -2
- package/dist/index.js +814 -188
- package/dist/index.mjs +813 -188
- package/package.json +1 -1
- package/src/strategies/universal-adapters/avnu-adapter.ts +2 -1
- package/src/strategies/vesu-extended-strategy/services/operationService.ts +1 -0
- package/src/strategies/vesu-extended-strategy/utils/helper.ts +32 -2
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +1144 -337
package/dist/index.js
CHANGED
|
@@ -124,6 +124,7 @@ __export(index_exports, {
|
|
|
124
124
|
calculateBTCPriceDelta: () => calculateBTCPriceDelta,
|
|
125
125
|
calculateDebtAmount: () => calculateDebtAmount,
|
|
126
126
|
calculateDebtReductionAmountForWithdrawal: () => calculateDebtReductionAmountForWithdrawal,
|
|
127
|
+
calculateDeltaDebtAmount: () => calculateDeltaDebtAmount,
|
|
127
128
|
calculateExposureDelta: () => calculateExposureDelta,
|
|
128
129
|
calculateExtendedLevergae: () => calculateExtendedLevergae,
|
|
129
130
|
calculateVesUPositionSizeGivenExtended: () => calculateVesUPositionSizeGivenExtended,
|
|
@@ -28368,14 +28369,14 @@ var calculateExposureDelta = (exposure_extended, exposure_vesu) => {
|
|
|
28368
28369
|
var calculateBTCPriceDelta = (btcPrice, lastBtcPrice) => {
|
|
28369
28370
|
return (btcPrice - lastBtcPrice) / lastBtcPrice * 100;
|
|
28370
28371
|
};
|
|
28371
|
-
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice) => {
|
|
28372
|
+
var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHoldingAmount, collateralAmount, collateralPrice, vesuDebtAmountToBeRepaid) => {
|
|
28372
28373
|
const extendedLeverage = calculateExtendedLevergae();
|
|
28373
28374
|
const vesuLeverage = calculateVesuLeverage();
|
|
28374
28375
|
const extendedAmount = extendedHoldingAmount;
|
|
28375
28376
|
const extendedAmountInBTC = extendedAmount.dividedBy(collateralPrice);
|
|
28376
28377
|
const numerator1 = extendedAmount.multipliedBy(extendedLeverage).plus(extendedPositonValue);
|
|
28377
28378
|
const numerator2 = collateralAmount.multipliedBy(collateralPrice).multipliedBy(-1);
|
|
28378
|
-
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage);
|
|
28379
|
+
const vesuAmountInUsd = numerator1.plus(numerator2).dividedBy(vesuLeverage).plus(vesuDebtAmountToBeRepaid);
|
|
28379
28380
|
const vesuAmountInBTC = vesuAmountInUsd.dividedBy(collateralPrice).toFixed(WBTC_TOKEN_DECIMALS);
|
|
28380
28381
|
return {
|
|
28381
28382
|
vesuAmountInUsd: vesuAmountInUsd.toFixed(2),
|
|
@@ -28383,6 +28384,17 @@ var calculateVesUPositionSizeGivenExtended = (extendedPositonValue, extendedHold
|
|
|
28383
28384
|
extendedAmountInBTC
|
|
28384
28385
|
};
|
|
28385
28386
|
};
|
|
28387
|
+
var calculateDeltaDebtAmount = (maxLtv = MAX_LTV_BTC_USDC, existingVesuCollateral, existingVesuDebt, collateralPrice, debtPrice, targetHf = TARGET_HF) => {
|
|
28388
|
+
try {
|
|
28389
|
+
const term1 = existingVesuCollateral.multipliedBy(collateralPrice).multipliedBy(maxLtv).dividedBy(targetHf);
|
|
28390
|
+
const term2 = existingVesuDebt.multipliedBy(debtPrice).multipliedBy(targetHf).multipliedBy(-1);
|
|
28391
|
+
const debtAmountToBeRepaid = term1.plus(term2).dividedBy(targetHf);
|
|
28392
|
+
return debtAmountToBeRepaid;
|
|
28393
|
+
} catch (err) {
|
|
28394
|
+
logger.error(`error calculating delta position: ${err}`);
|
|
28395
|
+
return null;
|
|
28396
|
+
}
|
|
28397
|
+
};
|
|
28386
28398
|
|
|
28387
28399
|
// src/utils/health-factor-math.ts
|
|
28388
28400
|
var HealthFactorMath = class {
|
|
@@ -30805,6 +30817,8 @@ var AvnuAdapter = class _AvnuAdapter extends BaseAdapter {
|
|
|
30805
30817
|
quote,
|
|
30806
30818
|
vaultAllocator.address
|
|
30807
30819
|
);
|
|
30820
|
+
const dataObject = quote;
|
|
30821
|
+
logger.info(`${_AvnuAdapter.name}::getQuotesAvnu finalAmountOfWbtcOut : ${dataObject.avnuFees} ${parseInt(dataObject.buyAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)} ${parseInt(dataObject.sellAmount.toString(), 16)}`);
|
|
30808
30822
|
const swapCallData = getCalldata[0];
|
|
30809
30823
|
const amount = import_starknet23.uint256.bnToUint256(quote.sellAmountInUsd * 10 ** 7);
|
|
30810
30824
|
return [
|
|
@@ -34551,11 +34565,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34551
34565
|
WALLET_ADDRESS,
|
|
34552
34566
|
usdceToken.decimals
|
|
34553
34567
|
);
|
|
34554
|
-
logger.info(
|
|
34568
|
+
logger.info(
|
|
34569
|
+
`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator walletBalance: ${walletBalance}`
|
|
34570
|
+
);
|
|
34555
34571
|
const amountToBeTransferred = amount.minimum(walletBalance);
|
|
34556
|
-
logger.info(
|
|
34572
|
+
logger.info(
|
|
34573
|
+
`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred: ${amountToBeTransferred.toNumber()}`
|
|
34574
|
+
);
|
|
34557
34575
|
if (amountToBeTransferred.lessThan(0)) {
|
|
34558
|
-
logger.error(
|
|
34576
|
+
logger.error(
|
|
34577
|
+
`${_VesuExtendedMultiplierStrategy.name}::moveAssetsToVaultAllocator amountToBeTransferred is less than 0: ${amountToBeTransferred.toNumber()}`
|
|
34578
|
+
);
|
|
34559
34579
|
return {
|
|
34560
34580
|
calls: [],
|
|
34561
34581
|
status: false
|
|
@@ -34593,10 +34613,14 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34593
34613
|
}
|
|
34594
34614
|
async shouldInvest() {
|
|
34595
34615
|
try {
|
|
34596
|
-
logger.info(
|
|
34616
|
+
logger.info(
|
|
34617
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest starting`
|
|
34618
|
+
);
|
|
34597
34619
|
const vesuAdapter = await this.getVesuAdapter();
|
|
34598
34620
|
const extendedAdapter = await this.getExtendedAdapter();
|
|
34599
|
-
logger.info(
|
|
34621
|
+
logger.info(
|
|
34622
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest adapters fetched: vesuAdapter=${!!vesuAdapter}, extendedAdapter=${!!extendedAdapter}, extendedAdapter.client=${!!extendedAdapter?.client}`
|
|
34623
|
+
);
|
|
34600
34624
|
if (!vesuAdapter) {
|
|
34601
34625
|
logger.error(
|
|
34602
34626
|
`Vesu adapter not configured in metadata. This is a configuration issue, not a temporary failure.`
|
|
@@ -34608,7 +34632,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34608
34632
|
extendedLeverage: 0,
|
|
34609
34633
|
collateralPrice: 0,
|
|
34610
34634
|
debtPrice: 0,
|
|
34611
|
-
vesuLeverage: 0
|
|
34635
|
+
vesuLeverage: 0,
|
|
34636
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34612
34637
|
};
|
|
34613
34638
|
}
|
|
34614
34639
|
if (!extendedAdapter) {
|
|
@@ -34622,7 +34647,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34622
34647
|
extendedLeverage: 0,
|
|
34623
34648
|
collateralPrice: 0,
|
|
34624
34649
|
debtPrice: 0,
|
|
34625
|
-
vesuLeverage: 0
|
|
34650
|
+
vesuLeverage: 0,
|
|
34651
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34626
34652
|
};
|
|
34627
34653
|
}
|
|
34628
34654
|
if (!extendedAdapter.client) {
|
|
@@ -34636,10 +34662,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34636
34662
|
extendedLeverage: 0,
|
|
34637
34663
|
collateralPrice: 0,
|
|
34638
34664
|
debtPrice: 0,
|
|
34639
|
-
vesuLeverage: 0
|
|
34665
|
+
vesuLeverage: 0,
|
|
34666
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34640
34667
|
};
|
|
34641
34668
|
}
|
|
34642
|
-
logger.info(
|
|
34669
|
+
logger.info(
|
|
34670
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest calling getUnusedBalance`
|
|
34671
|
+
);
|
|
34643
34672
|
const balance = await this.getUnusedBalance();
|
|
34644
34673
|
if (!Number.isFinite(balance.usdValue) || balance.usdValue < 0) {
|
|
34645
34674
|
logger.error(
|
|
@@ -34652,13 +34681,18 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34652
34681
|
extendedLeverage: 0,
|
|
34653
34682
|
collateralPrice: 0,
|
|
34654
34683
|
debtPrice: 0,
|
|
34655
|
-
vesuLeverage: 0
|
|
34684
|
+
vesuLeverage: 0,
|
|
34685
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34656
34686
|
};
|
|
34657
34687
|
}
|
|
34658
|
-
logger.info(
|
|
34688
|
+
logger.info(
|
|
34689
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest balance: ${balance.usdValue}`
|
|
34690
|
+
);
|
|
34659
34691
|
const usdcBalanceOnExtended = await extendedAdapter.getExtendedDepositAmount();
|
|
34660
34692
|
if (usdcBalanceOnExtended) {
|
|
34661
|
-
const availableForWithdrawal = parseFloat(
|
|
34693
|
+
const availableForWithdrawal = parseFloat(
|
|
34694
|
+
usdcBalanceOnExtended.availableForWithdrawal
|
|
34695
|
+
);
|
|
34662
34696
|
if (!Number.isFinite(availableForWithdrawal) || availableForWithdrawal < 0) {
|
|
34663
34697
|
logger.error(
|
|
34664
34698
|
`Invalid usdcBalanceOnExtended.availableForWithdrawal: ${usdcBalanceOnExtended.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
@@ -34670,11 +34704,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34670
34704
|
extendedLeverage: 0,
|
|
34671
34705
|
collateralPrice: 0,
|
|
34672
34706
|
debtPrice: 0,
|
|
34673
|
-
vesuLeverage: 0
|
|
34707
|
+
vesuLeverage: 0,
|
|
34708
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34674
34709
|
};
|
|
34675
34710
|
}
|
|
34676
34711
|
}
|
|
34677
|
-
const amountToInvest = new Web3Number(
|
|
34712
|
+
const amountToInvest = new Web3Number(
|
|
34713
|
+
balance.usdValue,
|
|
34714
|
+
USDC_TOKEN_DECIMALS
|
|
34715
|
+
).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34678
34716
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34679
34717
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34680
34718
|
logger.error(
|
|
@@ -34687,10 +34725,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34687
34725
|
extendedLeverage: 0,
|
|
34688
34726
|
collateralPrice: 0,
|
|
34689
34727
|
debtPrice: 0,
|
|
34690
|
-
vesuLeverage: 0
|
|
34728
|
+
vesuLeverage: 0,
|
|
34729
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34691
34730
|
};
|
|
34692
34731
|
}
|
|
34693
|
-
logger.info(
|
|
34732
|
+
logger.info(
|
|
34733
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest amountToInvest: ${amountToInvestNumber}`
|
|
34734
|
+
);
|
|
34694
34735
|
if (amountToInvest.lessThan(LIMIT_BALANCE_VALUE)) {
|
|
34695
34736
|
return {
|
|
34696
34737
|
shouldInvest: false,
|
|
@@ -34699,7 +34740,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34699
34740
|
extendedLeverage: 0,
|
|
34700
34741
|
collateralPrice: 0,
|
|
34701
34742
|
debtPrice: 0,
|
|
34702
|
-
vesuLeverage: 0
|
|
34743
|
+
vesuLeverage: 0,
|
|
34744
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34703
34745
|
};
|
|
34704
34746
|
}
|
|
34705
34747
|
const extendedPositon = await extendedAdapter.getAllOpenPositions();
|
|
@@ -34712,14 +34754,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34712
34754
|
extendedLeverage: 0,
|
|
34713
34755
|
collateralPrice: 0,
|
|
34714
34756
|
debtPrice: 0,
|
|
34715
|
-
vesuLeverage: 0
|
|
34757
|
+
vesuLeverage: 0,
|
|
34758
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34716
34759
|
};
|
|
34717
34760
|
}
|
|
34718
|
-
const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
|
|
34719
|
-
const {
|
|
34720
|
-
collateralPrice,
|
|
34721
|
-
debtPrice
|
|
34722
|
-
} = await this.getAssetPrices();
|
|
34761
|
+
const { collateralTokenAmount, debtTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
|
|
34762
|
+
const { collateralPrice, debtPrice } = await this.getAssetPrices();
|
|
34723
34763
|
if (!Number.isFinite(collateralPrice.price) || collateralPrice.price <= 0) {
|
|
34724
34764
|
logger.error(
|
|
34725
34765
|
`Invalid collateralPrice: ${collateralPrice.price}. Expected a finite, positive number.`
|
|
@@ -34731,7 +34771,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34731
34771
|
extendedLeverage: 0,
|
|
34732
34772
|
collateralPrice: 0,
|
|
34733
34773
|
debtPrice: 0,
|
|
34734
|
-
vesuLeverage: 0
|
|
34774
|
+
vesuLeverage: 0,
|
|
34775
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34735
34776
|
};
|
|
34736
34777
|
}
|
|
34737
34778
|
if (!Number.isFinite(debtPrice.price) || debtPrice.price <= 0) {
|
|
@@ -34745,11 +34786,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34745
34786
|
extendedLeverage: 0,
|
|
34746
34787
|
collateralPrice: 0,
|
|
34747
34788
|
debtPrice: 0,
|
|
34748
|
-
vesuLeverage: 0
|
|
34789
|
+
vesuLeverage: 0,
|
|
34790
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34749
34791
|
};
|
|
34750
34792
|
}
|
|
34793
|
+
const debtAmountToBeRepaid = calculateDeltaDebtAmount(
|
|
34794
|
+
MAX_LTV_BTC_USDC,
|
|
34795
|
+
collateralTokenAmount,
|
|
34796
|
+
debtTokenAmount,
|
|
34797
|
+
collateralPrice.price,
|
|
34798
|
+
debtPrice.price,
|
|
34799
|
+
this.metadata.additionalInfo.targetHealthFactor
|
|
34800
|
+
);
|
|
34801
|
+
if (!debtAmountToBeRepaid) {
|
|
34802
|
+
logger.error("error calculating debt amount to be repaid");
|
|
34803
|
+
return {
|
|
34804
|
+
shouldInvest: false,
|
|
34805
|
+
vesuAmount: new Web3Number(0, 0),
|
|
34806
|
+
extendedAmount: new Web3Number(0, 0),
|
|
34807
|
+
extendedLeverage: 0,
|
|
34808
|
+
collateralPrice: 0,
|
|
34809
|
+
debtPrice: 0,
|
|
34810
|
+
vesuLeverage: 0,
|
|
34811
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34812
|
+
};
|
|
34813
|
+
}
|
|
34814
|
+
const amountToInvestAfterRepayingDebt = amountToInvest.minus(debtAmountToBeRepaid);
|
|
34751
34815
|
const { vesu_amount, extended_amount, extended_leverage, vesu_leverage } = await calculateAmountDistribution(
|
|
34752
|
-
|
|
34816
|
+
amountToInvestAfterRepayingDebt.toNumber(),
|
|
34753
34817
|
extendedAdapter.client,
|
|
34754
34818
|
extendedAdapter.config.extendedMarketName,
|
|
34755
34819
|
collateralPrice.price,
|
|
@@ -34768,10 +34832,13 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34768
34832
|
extendedLeverage: 0,
|
|
34769
34833
|
collateralPrice: 0,
|
|
34770
34834
|
debtPrice: 0,
|
|
34771
|
-
vesuLeverage: 0
|
|
34835
|
+
vesuLeverage: 0,
|
|
34836
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34772
34837
|
};
|
|
34773
34838
|
}
|
|
34774
|
-
logger.info(
|
|
34839
|
+
logger.info(
|
|
34840
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldInvest vesu_amount: ${vesu_amount.toNumber()}, extended_amount: ${extended_amount.toNumber()}`
|
|
34841
|
+
);
|
|
34775
34842
|
return {
|
|
34776
34843
|
shouldInvest: true,
|
|
34777
34844
|
vesuAmount: vesu_amount,
|
|
@@ -34779,7 +34846,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34779
34846
|
extendedLeverage: extended_leverage,
|
|
34780
34847
|
vesuLeverage: vesu_leverage,
|
|
34781
34848
|
collateralPrice: collateralPrice.price,
|
|
34782
|
-
debtPrice: debtPrice.price
|
|
34849
|
+
debtPrice: debtPrice.price,
|
|
34850
|
+
debtAmountToBeRepaid
|
|
34783
34851
|
};
|
|
34784
34852
|
} catch (err) {
|
|
34785
34853
|
logger.error(`error deciding invest: ${err}`);
|
|
@@ -34790,7 +34858,8 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34790
34858
|
extendedLeverage: 0,
|
|
34791
34859
|
collateralPrice: 0,
|
|
34792
34860
|
debtPrice: 0,
|
|
34793
|
-
vesuLeverage: 0
|
|
34861
|
+
vesuLeverage: 0,
|
|
34862
|
+
debtAmountToBeRepaid: new Web3Number(0, 0)
|
|
34794
34863
|
};
|
|
34795
34864
|
}
|
|
34796
34865
|
}
|
|
@@ -34810,37 +34879,52 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34810
34879
|
return [];
|
|
34811
34880
|
}
|
|
34812
34881
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34813
|
-
const
|
|
34814
|
-
extendedHoldings.
|
|
34882
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
34883
|
+
extendedHoldings.availableForTrade
|
|
34884
|
+
);
|
|
34885
|
+
logger.info(
|
|
34886
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`
|
|
34815
34887
|
);
|
|
34816
|
-
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForWithdrawal}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
34817
34888
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34818
34889
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34819
34890
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34820
|
-
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
|
|
34891
|
+
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
|
|
34892
|
+
extendedAmount.abs()
|
|
34893
|
+
);
|
|
34821
34894
|
}
|
|
34822
34895
|
const extendedTargetAmount = extendedAmount.abs();
|
|
34823
|
-
let projectedExtendedBalance =
|
|
34896
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
34824
34897
|
if (extendedAmount.isNegative()) {
|
|
34825
34898
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
34826
34899
|
}
|
|
34827
|
-
const extendedAmountDifference = extendedTargetAmount.minus(
|
|
34900
|
+
const extendedAmountDifference = extendedTargetAmount.minus(
|
|
34901
|
+
projectedExtendedBalance
|
|
34902
|
+
);
|
|
34828
34903
|
const extendedAmountDifferenceAbs = extendedAmountDifference.abs();
|
|
34829
34904
|
if (extendedAmountDifference.lessThan(0)) {
|
|
34830
|
-
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
|
|
34905
|
+
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(
|
|
34906
|
+
extendedAmountDifferenceAbs
|
|
34907
|
+
);
|
|
34831
34908
|
} else if (extendedAmountDifference.greaterThan(0)) {
|
|
34832
|
-
totalExtendedDeposit = totalExtendedDeposit.plus(
|
|
34909
|
+
totalExtendedDeposit = totalExtendedDeposit.plus(
|
|
34910
|
+
extendedAmountDifference
|
|
34911
|
+
);
|
|
34833
34912
|
}
|
|
34834
34913
|
const vesuTargetAmount = vesuAmount.abs();
|
|
34835
34914
|
const projectedWalletBalance = usdcAmountInWallet.plus(totalExtendedWithdrawal).minus(totalExtendedDeposit);
|
|
34836
34915
|
let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
|
|
34837
34916
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
34838
|
-
logger.info(
|
|
34839
|
-
|
|
34917
|
+
logger.info(
|
|
34918
|
+
`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculated movements - Extended withdrawal: ${totalExtendedWithdrawal.toNumber()}, Extended deposit: ${totalExtendedDeposit.toNumber()}, Extended diff: ${extendedAmountDifference.toNumber()}, Projected wallet: ${projectedWalletBalance.toNumber()}, Vesu diff: ${vesuAmountDifference.toNumber()}`
|
|
34919
|
+
);
|
|
34840
34920
|
let transactionResults = [];
|
|
34841
34921
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34842
34922
|
try {
|
|
34843
|
-
const {
|
|
34923
|
+
const {
|
|
34924
|
+
calls: extendedCalls,
|
|
34925
|
+
status: extendedStatus,
|
|
34926
|
+
transactionMetadata: extendedTransactionMetadata
|
|
34927
|
+
} = await this.moveAssets(
|
|
34844
34928
|
{
|
|
34845
34929
|
to: Protocols.VAULT.name,
|
|
34846
34930
|
from: Protocols.EXTENDED.name,
|
|
@@ -34860,16 +34944,44 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34860
34944
|
}
|
|
34861
34945
|
});
|
|
34862
34946
|
} else {
|
|
34863
|
-
return [
|
|
34947
|
+
return [
|
|
34948
|
+
this.createTransactionResult(
|
|
34949
|
+
[],
|
|
34950
|
+
false,
|
|
34951
|
+
{
|
|
34952
|
+
from: Protocols.EXTENDED.name,
|
|
34953
|
+
to: Protocols.VAULT.name,
|
|
34954
|
+
amount: extendedAmount.abs()
|
|
34955
|
+
},
|
|
34956
|
+
"NONE",
|
|
34957
|
+
"INVESTMENT" /* INVESTMENT */
|
|
34958
|
+
)
|
|
34959
|
+
];
|
|
34864
34960
|
}
|
|
34865
34961
|
} catch (err) {
|
|
34866
34962
|
logger.error(`Failed moving assets to vault: ${err}`);
|
|
34867
|
-
return [
|
|
34963
|
+
return [
|
|
34964
|
+
this.createTransactionResult(
|
|
34965
|
+
[],
|
|
34966
|
+
false,
|
|
34967
|
+
{
|
|
34968
|
+
from: Protocols.EXTENDED.name,
|
|
34969
|
+
to: Protocols.VAULT.name,
|
|
34970
|
+
amount: extendedAmount.abs()
|
|
34971
|
+
},
|
|
34972
|
+
"NONE",
|
|
34973
|
+
"INVESTMENT" /* INVESTMENT */
|
|
34974
|
+
)
|
|
34975
|
+
];
|
|
34868
34976
|
}
|
|
34869
34977
|
}
|
|
34870
34978
|
if (vesuAmount.isNegative() && vesuAmount.abs().greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
|
|
34871
34979
|
try {
|
|
34872
|
-
const {
|
|
34980
|
+
const {
|
|
34981
|
+
calls: vesuCalls,
|
|
34982
|
+
status: vesuStatus,
|
|
34983
|
+
transactionMetadata: vesuTransactionMetadata
|
|
34984
|
+
} = await this.moveAssets(
|
|
34873
34985
|
{
|
|
34874
34986
|
to: Protocols.EXTENDED.name,
|
|
34875
34987
|
from: Protocols.VESU.name,
|
|
@@ -34880,7 +34992,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34880
34992
|
vesuAdapter
|
|
34881
34993
|
);
|
|
34882
34994
|
if (!vesuStatus) {
|
|
34883
|
-
return [
|
|
34995
|
+
return [
|
|
34996
|
+
this.createTransactionResult(
|
|
34997
|
+
[],
|
|
34998
|
+
false,
|
|
34999
|
+
{
|
|
35000
|
+
from: Protocols.VESU.name,
|
|
35001
|
+
to: Protocols.EXTENDED.name,
|
|
35002
|
+
amount: vesuAmount.abs()
|
|
35003
|
+
},
|
|
35004
|
+
"NONE",
|
|
35005
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35006
|
+
)
|
|
35007
|
+
];
|
|
34884
35008
|
}
|
|
34885
35009
|
transactionResults.push({
|
|
34886
35010
|
status: vesuStatus,
|
|
@@ -34891,14 +35015,34 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34891
35015
|
}
|
|
34892
35016
|
});
|
|
34893
35017
|
} catch (err) {
|
|
34894
|
-
logger.error(
|
|
34895
|
-
|
|
35018
|
+
logger.error(
|
|
35019
|
+
`Failed moving assets to extended via vault allocator: ${err}`
|
|
35020
|
+
);
|
|
35021
|
+
return [
|
|
35022
|
+
this.createTransactionResult(
|
|
35023
|
+
[],
|
|
35024
|
+
false,
|
|
35025
|
+
{
|
|
35026
|
+
from: Protocols.VESU.name,
|
|
35027
|
+
to: Protocols.EXTENDED.name,
|
|
35028
|
+
amount: vesuAmount.abs()
|
|
35029
|
+
},
|
|
35030
|
+
"NONE",
|
|
35031
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35032
|
+
)
|
|
35033
|
+
];
|
|
34896
35034
|
}
|
|
34897
35035
|
}
|
|
34898
|
-
if (extendedAmountDifferenceAbs.greaterThan(
|
|
35036
|
+
if (extendedAmountDifferenceAbs.greaterThan(
|
|
35037
|
+
extendedAdapter.minimumExtendedMovementAmount
|
|
35038
|
+
)) {
|
|
34899
35039
|
if (extendedAmountDifference.greaterThan(0)) {
|
|
34900
35040
|
try {
|
|
34901
|
-
const {
|
|
35041
|
+
const {
|
|
35042
|
+
calls: extendedCalls,
|
|
35043
|
+
status: extendedStatus,
|
|
35044
|
+
transactionMetadata: extendedTransactionMetadata
|
|
35045
|
+
} = await this.moveAssets(
|
|
34902
35046
|
{
|
|
34903
35047
|
to: Protocols.EXTENDED.name,
|
|
34904
35048
|
from: Protocols.VAULT.name,
|
|
@@ -34915,16 +35059,46 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34915
35059
|
transactionMetadata: extendedTransactionMetadata
|
|
34916
35060
|
});
|
|
34917
35061
|
} else {
|
|
34918
|
-
logger.error(
|
|
34919
|
-
|
|
35062
|
+
logger.error(
|
|
35063
|
+
`Failed to move assets to extended - operation returned false status`
|
|
35064
|
+
);
|
|
35065
|
+
return [
|
|
35066
|
+
this.createTransactionResult(
|
|
35067
|
+
[],
|
|
35068
|
+
false,
|
|
35069
|
+
{
|
|
35070
|
+
from: Protocols.VAULT.name,
|
|
35071
|
+
to: Protocols.EXTENDED.name,
|
|
35072
|
+
amount: extendedAmountDifference
|
|
35073
|
+
},
|
|
35074
|
+
"NONE",
|
|
35075
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35076
|
+
)
|
|
35077
|
+
];
|
|
34920
35078
|
}
|
|
34921
35079
|
} catch (err) {
|
|
34922
35080
|
logger.error(`Failed moving assets to extended: ${err}`);
|
|
34923
|
-
return [
|
|
35081
|
+
return [
|
|
35082
|
+
this.createTransactionResult(
|
|
35083
|
+
[],
|
|
35084
|
+
false,
|
|
35085
|
+
{
|
|
35086
|
+
from: Protocols.VAULT.name,
|
|
35087
|
+
to: Protocols.EXTENDED.name,
|
|
35088
|
+
amount: extendedAmountDifference
|
|
35089
|
+
},
|
|
35090
|
+
"NONE",
|
|
35091
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35092
|
+
)
|
|
35093
|
+
];
|
|
34924
35094
|
}
|
|
34925
35095
|
} else if (extendedAmountDifference.lessThan(0)) {
|
|
34926
35096
|
try {
|
|
34927
|
-
const {
|
|
35097
|
+
const {
|
|
35098
|
+
calls: extendedCalls,
|
|
35099
|
+
status: extendedStatus,
|
|
35100
|
+
transactionMetadata: extendedTransactionMetadata
|
|
35101
|
+
} = await this.moveAssets(
|
|
34928
35102
|
{
|
|
34929
35103
|
to: Protocols.VAULT.name,
|
|
34930
35104
|
from: Protocols.EXTENDED.name,
|
|
@@ -34944,23 +35118,55 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34944
35118
|
}
|
|
34945
35119
|
});
|
|
34946
35120
|
} else {
|
|
34947
|
-
logger.error(
|
|
34948
|
-
|
|
35121
|
+
logger.error(
|
|
35122
|
+
`Failed to withdraw from extended - operation returned false status`
|
|
35123
|
+
);
|
|
35124
|
+
return [
|
|
35125
|
+
this.createTransactionResult(
|
|
35126
|
+
[],
|
|
35127
|
+
false,
|
|
35128
|
+
{
|
|
35129
|
+
from: Protocols.EXTENDED.name,
|
|
35130
|
+
to: Protocols.VAULT.name,
|
|
35131
|
+
amount: extendedAmountDifferenceAbs
|
|
35132
|
+
},
|
|
35133
|
+
"NONE",
|
|
35134
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35135
|
+
)
|
|
35136
|
+
];
|
|
34949
35137
|
}
|
|
34950
35138
|
} catch (err) {
|
|
34951
35139
|
logger.error(`Failed moving assets from extended to vault: ${err}`);
|
|
34952
|
-
return [
|
|
35140
|
+
return [
|
|
35141
|
+
this.createTransactionResult(
|
|
35142
|
+
[],
|
|
35143
|
+
false,
|
|
35144
|
+
{
|
|
35145
|
+
from: Protocols.EXTENDED.name,
|
|
35146
|
+
to: Protocols.VAULT.name,
|
|
35147
|
+
amount: extendedAmountDifferenceAbs
|
|
35148
|
+
},
|
|
35149
|
+
"NONE",
|
|
35150
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35151
|
+
)
|
|
35152
|
+
];
|
|
34953
35153
|
}
|
|
34954
35154
|
}
|
|
34955
35155
|
}
|
|
34956
|
-
if (vesuAmountDifferenceAbs.greaterThan(
|
|
35156
|
+
if (vesuAmountDifferenceAbs.greaterThan(
|
|
35157
|
+
vesuAdapter.minimumVesuMovementAmount
|
|
35158
|
+
)) {
|
|
34957
35159
|
if (vesuAmountDifference.lessThanOrEqualTo(0)) {
|
|
34958
35160
|
logger.warn(
|
|
34959
35161
|
`Vesu amount difference is negative or zero: ${vesuAmountDifference.toNumber()}. Skipping operation.`
|
|
34960
35162
|
);
|
|
34961
35163
|
} else {
|
|
34962
35164
|
try {
|
|
34963
|
-
const {
|
|
35165
|
+
const {
|
|
35166
|
+
calls: vesuCalls,
|
|
35167
|
+
status: vesuStatus,
|
|
35168
|
+
transactionMetadata: vesuTransactionMetadata
|
|
35169
|
+
} = await this.moveAssets(
|
|
34964
35170
|
{
|
|
34965
35171
|
to: Protocols.VAULT.name,
|
|
34966
35172
|
from: Protocols.EXTENDED.name,
|
|
@@ -34971,8 +35177,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34971
35177
|
vesuAdapter
|
|
34972
35178
|
);
|
|
34973
35179
|
if (!vesuStatus) {
|
|
34974
|
-
logger.error(
|
|
34975
|
-
|
|
35180
|
+
logger.error(
|
|
35181
|
+
`Failed to move assets to vesu - operation returned false status`
|
|
35182
|
+
);
|
|
35183
|
+
return [
|
|
35184
|
+
this.createTransactionResult(
|
|
35185
|
+
[],
|
|
35186
|
+
false,
|
|
35187
|
+
{
|
|
35188
|
+
from: Protocols.EXTENDED.name,
|
|
35189
|
+
to: Protocols.VAULT.name,
|
|
35190
|
+
amount: vesuAmountDifference
|
|
35191
|
+
},
|
|
35192
|
+
"NONE",
|
|
35193
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35194
|
+
)
|
|
35195
|
+
];
|
|
34976
35196
|
}
|
|
34977
35197
|
transactionResults.push({
|
|
34978
35198
|
status: vesuStatus,
|
|
@@ -34984,14 +35204,38 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34984
35204
|
});
|
|
34985
35205
|
} catch (err) {
|
|
34986
35206
|
logger.error(`Failed moving assets to vault: ${err}`);
|
|
34987
|
-
return [
|
|
35207
|
+
return [
|
|
35208
|
+
this.createTransactionResult(
|
|
35209
|
+
[],
|
|
35210
|
+
false,
|
|
35211
|
+
{
|
|
35212
|
+
from: Protocols.EXTENDED.name,
|
|
35213
|
+
to: Protocols.VAULT.name,
|
|
35214
|
+
amount: vesuAmountDifference
|
|
35215
|
+
},
|
|
35216
|
+
"NONE",
|
|
35217
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35218
|
+
)
|
|
35219
|
+
];
|
|
34988
35220
|
}
|
|
34989
35221
|
}
|
|
34990
35222
|
}
|
|
34991
35223
|
return transactionResults;
|
|
34992
35224
|
} catch (err) {
|
|
34993
35225
|
logger.error(`Failed moving assets to vesu: ${err}`);
|
|
34994
|
-
return [
|
|
35226
|
+
return [
|
|
35227
|
+
this.createTransactionResult(
|
|
35228
|
+
[],
|
|
35229
|
+
false,
|
|
35230
|
+
{
|
|
35231
|
+
from: Protocols.EXTENDED.name,
|
|
35232
|
+
to: Protocols.VAULT.name,
|
|
35233
|
+
amount: new Web3Number(0, USDC_TOKEN_DECIMALS)
|
|
35234
|
+
},
|
|
35235
|
+
"NONE",
|
|
35236
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35237
|
+
)
|
|
35238
|
+
];
|
|
34995
35239
|
}
|
|
34996
35240
|
}
|
|
34997
35241
|
/**
|
|
@@ -35012,43 +35256,56 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35012
35256
|
}
|
|
35013
35257
|
};
|
|
35014
35258
|
}
|
|
35015
|
-
return {
|
|
35259
|
+
return {
|
|
35260
|
+
calls: [],
|
|
35261
|
+
status: false,
|
|
35262
|
+
transactionMetadata: {
|
|
35263
|
+
protocolFrom: "",
|
|
35264
|
+
protocolTo: "",
|
|
35265
|
+
transactionType: "DEPOSIT",
|
|
35266
|
+
usdAmount: "0",
|
|
35267
|
+
status: "FAILED",
|
|
35268
|
+
cycleType
|
|
35269
|
+
}
|
|
35270
|
+
};
|
|
35016
35271
|
}
|
|
35272
|
+
/**
|
|
35273
|
+
* This method is used to move assets between protocols
|
|
35274
|
+
* @param params - The parameters for the move assets operation
|
|
35275
|
+
* @param extendedAdapter - The extended adapter
|
|
35276
|
+
* @param vesuAdapter - The vesu adapter
|
|
35277
|
+
* @returns The transaction result
|
|
35278
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
35279
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
35280
|
+
*/
|
|
35017
35281
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
35018
35282
|
try {
|
|
35019
35283
|
if (params.amount.lessThanOrEqualTo(0)) {
|
|
35020
35284
|
logger.error(
|
|
35021
35285
|
`Invalid amount for moveAssets: ${params.amount.toNumber()}. Amount must be positive.`
|
|
35022
35286
|
);
|
|
35023
|
-
return this.createTransactionResult(
|
|
35024
|
-
|
|
35025
|
-
|
|
35026
|
-
|
|
35027
|
-
|
|
35028
|
-
|
|
35029
|
-
|
|
35030
|
-
);
|
|
35031
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
35032
|
-
}
|
|
35033
|
-
}
|
|
35034
|
-
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
35035
|
-
if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
|
|
35036
|
-
logger.warn(
|
|
35037
|
-
`Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
35038
|
-
);
|
|
35039
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
35040
|
-
}
|
|
35287
|
+
return this.createTransactionResult(
|
|
35288
|
+
[],
|
|
35289
|
+
false,
|
|
35290
|
+
params,
|
|
35291
|
+
"NONE",
|
|
35292
|
+
params.cycleType
|
|
35293
|
+
);
|
|
35041
35294
|
}
|
|
35042
35295
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
35043
35296
|
if (!avnuAdapter) {
|
|
35044
35297
|
logger.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
35045
|
-
return this.createTransactionResult(
|
|
35298
|
+
return this.createTransactionResult(
|
|
35299
|
+
[],
|
|
35300
|
+
false,
|
|
35301
|
+
params,
|
|
35302
|
+
"NONE",
|
|
35303
|
+
params.cycleType
|
|
35304
|
+
);
|
|
35046
35305
|
}
|
|
35047
35306
|
logger.info(`moveAssets params, ${JSON.stringify(params)}`);
|
|
35048
35307
|
const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
|
|
35049
|
-
const {
|
|
35050
|
-
collateralPrice
|
|
35051
|
-
} = await this.getAssetPrices();
|
|
35308
|
+
const { collateralPrice } = await this.getAssetPrices();
|
|
35052
35309
|
if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VAULT.name) {
|
|
35053
35310
|
const proofsInfo = extendedAdapter.getProofs(
|
|
35054
35311
|
true,
|
|
@@ -35061,23 +35318,53 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35061
35318
|
await proofsInfo.callConstructor({ amount: params.amount })
|
|
35062
35319
|
);
|
|
35063
35320
|
calls.push(call);
|
|
35064
|
-
return this.createTransactionResult(
|
|
35321
|
+
return this.createTransactionResult(
|
|
35322
|
+
calls,
|
|
35323
|
+
true,
|
|
35324
|
+
params,
|
|
35325
|
+
"DEPOSIT",
|
|
35326
|
+
params.cycleType
|
|
35327
|
+
);
|
|
35065
35328
|
} else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
|
|
35066
35329
|
const extendedLeverage = calculateExtendedLevergae();
|
|
35067
35330
|
const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
35068
35331
|
if (!extendedHoldings) {
|
|
35069
35332
|
logger.error(`error getting extended holdings: ${extendedHoldings}`);
|
|
35070
|
-
return this.createTransactionResult(
|
|
35333
|
+
return this.createTransactionResult(
|
|
35334
|
+
[],
|
|
35335
|
+
false,
|
|
35336
|
+
params,
|
|
35337
|
+
"NONE",
|
|
35338
|
+
params.cycleType
|
|
35339
|
+
);
|
|
35071
35340
|
}
|
|
35072
35341
|
const extendedHoldingAmount = new Web3Number(
|
|
35073
35342
|
extendedHoldings.availableForWithdrawal,
|
|
35074
35343
|
USDC_TOKEN_DECIMALS
|
|
35075
35344
|
);
|
|
35076
|
-
logger.info(
|
|
35345
|
+
logger.info(
|
|
35346
|
+
`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`
|
|
35347
|
+
);
|
|
35077
35348
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
35078
|
-
const leftAmountAfterWithdrawalAmountInAccount =
|
|
35079
|
-
|
|
35080
|
-
|
|
35349
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(
|
|
35350
|
+
Math.ceil(
|
|
35351
|
+
params.amount.abs().minus(extendedHoldingAmount).toNumber()
|
|
35352
|
+
),
|
|
35353
|
+
USDC_TOKEN_DECIMALS
|
|
35354
|
+
);
|
|
35355
|
+
logger.info(
|
|
35356
|
+
`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`
|
|
35357
|
+
);
|
|
35358
|
+
let priceOfBTC;
|
|
35359
|
+
const { ask, bid, status } = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
35360
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
35361
|
+
if (status) {
|
|
35362
|
+
priceOfBTC = price;
|
|
35363
|
+
} else {
|
|
35364
|
+
logger.error(`error fetching order book btc usdc: ${status}`);
|
|
35365
|
+
priceOfBTC = collateralPrice.price;
|
|
35366
|
+
}
|
|
35367
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
35081
35368
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
35082
35369
|
extendedLeverage.toString(),
|
|
35083
35370
|
btcAmount.toNumber(),
|
|
@@ -35092,38 +35379,95 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35092
35379
|
logger.error(`error opening long position: ${openLongPosition}`);
|
|
35093
35380
|
}
|
|
35094
35381
|
const updatedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
35095
|
-
if (!updatedHoldings || new Web3Number(
|
|
35096
|
-
|
|
35097
|
-
|
|
35382
|
+
if (!updatedHoldings || new Web3Number(
|
|
35383
|
+
updatedHoldings.availableForWithdrawal,
|
|
35384
|
+
USDC_TOKEN_DECIMALS
|
|
35385
|
+
).lessThan(params.amount.abs())) {
|
|
35386
|
+
logger.error(
|
|
35387
|
+
`Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`
|
|
35388
|
+
);
|
|
35389
|
+
return this.createTransactionResult(
|
|
35390
|
+
[],
|
|
35391
|
+
false,
|
|
35392
|
+
params,
|
|
35393
|
+
"NONE",
|
|
35394
|
+
params.cycleType
|
|
35395
|
+
);
|
|
35098
35396
|
}
|
|
35099
35397
|
}
|
|
35100
35398
|
const {
|
|
35101
35399
|
status: withdrawalFromExtendedStatus,
|
|
35102
35400
|
receivedTxnHash: withdrawalFromExtendedTxnHash
|
|
35103
35401
|
} = await extendedAdapter.withdrawFromExtended(params.amount);
|
|
35104
|
-
logger.info(
|
|
35402
|
+
logger.info(
|
|
35403
|
+
`withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`
|
|
35404
|
+
);
|
|
35105
35405
|
if (withdrawalFromExtendedStatus && withdrawalFromExtendedTxnHash) {
|
|
35106
35406
|
const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
|
|
35107
|
-
logger.info(
|
|
35407
|
+
logger.info(
|
|
35408
|
+
`extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`
|
|
35409
|
+
);
|
|
35108
35410
|
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
35109
|
-
const { calls, status } = await this.moveAssetsToVaultAllocator(
|
|
35411
|
+
const { calls, status } = await this.moveAssetsToVaultAllocator(
|
|
35412
|
+
params.amount,
|
|
35413
|
+
extendedAdapter
|
|
35414
|
+
);
|
|
35110
35415
|
if (calls.length > 0 && status) {
|
|
35111
|
-
return this.createTransactionResult(
|
|
35416
|
+
return this.createTransactionResult(
|
|
35417
|
+
calls,
|
|
35418
|
+
true,
|
|
35419
|
+
params,
|
|
35420
|
+
"WITHDRAWAL",
|
|
35421
|
+
params.cycleType
|
|
35422
|
+
);
|
|
35112
35423
|
} else {
|
|
35113
|
-
return this.createTransactionResult(
|
|
35424
|
+
return this.createTransactionResult(
|
|
35425
|
+
[],
|
|
35426
|
+
true,
|
|
35427
|
+
params,
|
|
35428
|
+
"WITHDRAWAL",
|
|
35429
|
+
params.cycleType
|
|
35430
|
+
);
|
|
35114
35431
|
}
|
|
35115
35432
|
} else if (withdrawalFromExtendedStatus && !withdrawalFromExtendedTxnHash) {
|
|
35116
|
-
logger.error(
|
|
35117
|
-
|
|
35433
|
+
logger.error(
|
|
35434
|
+
"withdrawal from extended successful, but funds didn't get transferred to the wallet"
|
|
35435
|
+
);
|
|
35436
|
+
return this.createTransactionResult(
|
|
35437
|
+
[],
|
|
35438
|
+
true,
|
|
35439
|
+
params,
|
|
35440
|
+
"WITHDRAWAL",
|
|
35441
|
+
params.cycleType
|
|
35442
|
+
);
|
|
35118
35443
|
} else {
|
|
35119
35444
|
logger.error("withdrawal from extended failed");
|
|
35120
|
-
return this.createTransactionResult(
|
|
35445
|
+
return this.createTransactionResult(
|
|
35446
|
+
[],
|
|
35447
|
+
false,
|
|
35448
|
+
params,
|
|
35449
|
+
"NONE",
|
|
35450
|
+
params.cycleType
|
|
35451
|
+
);
|
|
35121
35452
|
}
|
|
35122
35453
|
} else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
|
|
35123
|
-
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
|
|
35454
|
+
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
|
|
35455
|
+
extendedAdapter,
|
|
35456
|
+
vesuAdapter,
|
|
35457
|
+
avnuAdapter,
|
|
35458
|
+
"close" /* CLOSE */
|
|
35459
|
+
);
|
|
35124
35460
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
35125
|
-
logger.warn(
|
|
35126
|
-
|
|
35461
|
+
logger.warn(
|
|
35462
|
+
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35463
|
+
);
|
|
35464
|
+
return this.createTransactionResult(
|
|
35465
|
+
[],
|
|
35466
|
+
false,
|
|
35467
|
+
params,
|
|
35468
|
+
"NONE",
|
|
35469
|
+
params.cycleType
|
|
35470
|
+
);
|
|
35127
35471
|
}
|
|
35128
35472
|
const vesuAmountInBTC = new Web3Number(
|
|
35129
35473
|
params.amount.dividedBy(collateralPrice.price).toFixed(WBTC_TOKEN_DECIMALS),
|
|
@@ -35137,19 +35481,41 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35137
35481
|
await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
|
|
35138
35482
|
);
|
|
35139
35483
|
calls.push(call);
|
|
35140
|
-
const swapProofsInfo = avnuAdapter.getProofs(
|
|
35484
|
+
const swapProofsInfo = avnuAdapter.getProofs(
|
|
35485
|
+
false,
|
|
35486
|
+
this.getMerkleTree()
|
|
35487
|
+
);
|
|
35141
35488
|
const swapProofGroups = swapProofsInfo.proofs;
|
|
35142
35489
|
const swapCall = this.getManageCall(
|
|
35143
35490
|
swapProofGroups,
|
|
35144
35491
|
await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
|
|
35145
35492
|
);
|
|
35146
35493
|
calls.push(swapCall);
|
|
35147
|
-
return this.createTransactionResult(
|
|
35494
|
+
return this.createTransactionResult(
|
|
35495
|
+
calls,
|
|
35496
|
+
true,
|
|
35497
|
+
params,
|
|
35498
|
+
"WITHDRAWAL",
|
|
35499
|
+
params.cycleType
|
|
35500
|
+
);
|
|
35148
35501
|
} else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
|
|
35149
|
-
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
|
|
35502
|
+
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(
|
|
35503
|
+
extendedAdapter,
|
|
35504
|
+
vesuAdapter,
|
|
35505
|
+
avnuAdapter,
|
|
35506
|
+
"close" /* CLOSE */
|
|
35507
|
+
);
|
|
35150
35508
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
35151
|
-
logger.warn(
|
|
35152
|
-
|
|
35509
|
+
logger.warn(
|
|
35510
|
+
`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35511
|
+
);
|
|
35512
|
+
return this.createTransactionResult(
|
|
35513
|
+
[],
|
|
35514
|
+
false,
|
|
35515
|
+
params,
|
|
35516
|
+
"NONE",
|
|
35517
|
+
params.cycleType
|
|
35518
|
+
);
|
|
35153
35519
|
}
|
|
35154
35520
|
const vesuAmountInBTC = new Web3Number(
|
|
35155
35521
|
params.amount.dividedBy(collateralPrice.price).toNumber(),
|
|
@@ -35163,7 +35529,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35163
35529
|
await proofsInfo.callConstructor({ amount: vesuAmountInBTC })
|
|
35164
35530
|
);
|
|
35165
35531
|
calls.push(call);
|
|
35166
|
-
const swapProofsInfo = avnuAdapter.getProofs(
|
|
35532
|
+
const swapProofsInfo = avnuAdapter.getProofs(
|
|
35533
|
+
false,
|
|
35534
|
+
this.getMerkleTree()
|
|
35535
|
+
);
|
|
35167
35536
|
const swapProofGroups = swapProofsInfo.proofs;
|
|
35168
35537
|
const swapCall = this.getManageCall(
|
|
35169
35538
|
swapProofGroups,
|
|
@@ -35180,21 +35549,61 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35180
35549
|
await proofsInfoDeposit.callConstructor({ amount: params.amount })
|
|
35181
35550
|
);
|
|
35182
35551
|
calls.push(callDeposit);
|
|
35183
|
-
return this.createTransactionResult(
|
|
35552
|
+
return this.createTransactionResult(
|
|
35553
|
+
calls,
|
|
35554
|
+
true,
|
|
35555
|
+
params,
|
|
35556
|
+
"DEPOSIT",
|
|
35557
|
+
params.cycleType
|
|
35558
|
+
);
|
|
35184
35559
|
}
|
|
35185
|
-
logger.error(
|
|
35186
|
-
|
|
35560
|
+
logger.error(
|
|
35561
|
+
`Unsupported assets movement: ${params.from} to ${params.to}`
|
|
35562
|
+
);
|
|
35563
|
+
return this.createTransactionResult(
|
|
35564
|
+
[],
|
|
35565
|
+
false,
|
|
35566
|
+
params,
|
|
35567
|
+
"NONE",
|
|
35568
|
+
params.cycleType
|
|
35569
|
+
);
|
|
35187
35570
|
} catch (err) {
|
|
35188
35571
|
logger.error(`error moving assets: ${err}`);
|
|
35189
|
-
return this.createTransactionResult(
|
|
35572
|
+
return this.createTransactionResult(
|
|
35573
|
+
[],
|
|
35574
|
+
false,
|
|
35575
|
+
params,
|
|
35576
|
+
"NONE",
|
|
35577
|
+
params.cycleType
|
|
35578
|
+
);
|
|
35190
35579
|
}
|
|
35191
35580
|
}
|
|
35192
35581
|
async handleDeposit() {
|
|
35193
35582
|
try {
|
|
35194
|
-
return this.createTransactionResult(
|
|
35583
|
+
return this.createTransactionResult(
|
|
35584
|
+
[],
|
|
35585
|
+
false,
|
|
35586
|
+
{
|
|
35587
|
+
from: Protocols.VAULT.name,
|
|
35588
|
+
to: Protocols.VAULT.name,
|
|
35589
|
+
amount: new Web3Number(0, 0)
|
|
35590
|
+
},
|
|
35591
|
+
"NONE",
|
|
35592
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35593
|
+
);
|
|
35195
35594
|
} catch (err) {
|
|
35196
35595
|
logger.error(`error handling deposit: ${err}`);
|
|
35197
|
-
return this.createTransactionResult(
|
|
35596
|
+
return this.createTransactionResult(
|
|
35597
|
+
[],
|
|
35598
|
+
false,
|
|
35599
|
+
{
|
|
35600
|
+
from: Protocols.VAULT.name,
|
|
35601
|
+
to: Protocols.VAULT.name,
|
|
35602
|
+
amount: new Web3Number(0, 0)
|
|
35603
|
+
},
|
|
35604
|
+
"NONE",
|
|
35605
|
+
"INVESTMENT" /* INVESTMENT */
|
|
35606
|
+
);
|
|
35198
35607
|
}
|
|
35199
35608
|
}
|
|
35200
35609
|
/**
|
|
@@ -35206,32 +35615,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35206
35615
|
* @returns true if the price difference is within the acceptable range, false otherwise
|
|
35207
35616
|
*/
|
|
35208
35617
|
async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, positionType) {
|
|
35209
|
-
const {
|
|
35210
|
-
ask,
|
|
35211
|
-
bid
|
|
35212
|
-
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
35618
|
+
const { ask, bid } = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
35213
35619
|
const price = ask.plus(bid).dividedBy(2);
|
|
35214
35620
|
const btcToken = vesuAdapter.config.supportedPositions[0].asset;
|
|
35215
|
-
const btcPriceAvnu = await avnuAdapter.getPriceOfToken(
|
|
35621
|
+
const btcPriceAvnu = await avnuAdapter.getPriceOfToken(
|
|
35622
|
+
btcToken.address.toString()
|
|
35623
|
+
);
|
|
35216
35624
|
if (!btcPriceAvnu) {
|
|
35217
35625
|
logger.error(`error getting btc price avnu: ${btcPriceAvnu}`);
|
|
35218
35626
|
return false;
|
|
35219
35627
|
}
|
|
35220
35628
|
logger.info(`price: ${price}`);
|
|
35221
35629
|
logger.info(`btcPriceAvnu: ${btcPriceAvnu}`);
|
|
35222
|
-
const priceDifference = new Web3Number(
|
|
35630
|
+
const priceDifference = new Web3Number(
|
|
35631
|
+
price.minus(btcPriceAvnu).toFixed(2),
|
|
35632
|
+
0
|
|
35633
|
+
);
|
|
35223
35634
|
logger.info(`priceDifference: ${priceDifference}`);
|
|
35224
35635
|
if (priceDifference.isNegative()) {
|
|
35225
35636
|
return false;
|
|
35226
35637
|
}
|
|
35227
35638
|
if (positionType === "open" /* OPEN */) {
|
|
35228
|
-
logger.info(
|
|
35229
|
-
|
|
35639
|
+
logger.info(
|
|
35640
|
+
`price difference between avnu and extended for open position: ${priceDifference.toNumber()}, minimumExtendedPriceDifferenceForSwapOpen: ${avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen}`
|
|
35641
|
+
);
|
|
35642
|
+
const result = priceDifference.greaterThanOrEqualTo(
|
|
35643
|
+
avnuAdapter.config.minimumExtendedPriceDifferenceForSwapOpen
|
|
35644
|
+
);
|
|
35230
35645
|
logger.info(`result: ${result}`);
|
|
35231
35646
|
return result;
|
|
35232
35647
|
} else {
|
|
35233
|
-
logger.info(
|
|
35234
|
-
|
|
35648
|
+
logger.info(
|
|
35649
|
+
`price difference between avnu and extended for close position: ${priceDifference.toNumber()}, maximumExtendedPriceDifferenceForSwapClosing: ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`
|
|
35650
|
+
);
|
|
35651
|
+
const result = priceDifference.lessThanOrEqualTo(
|
|
35652
|
+
avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing
|
|
35653
|
+
);
|
|
35235
35654
|
logger.info(`result: ${result}`);
|
|
35236
35655
|
return result;
|
|
35237
35656
|
}
|
|
@@ -35253,7 +35672,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35253
35672
|
amount: usdcBalanceVaultAllocator.amount
|
|
35254
35673
|
});
|
|
35255
35674
|
calls.push(withdrawCall2);
|
|
35256
|
-
return [
|
|
35675
|
+
return [
|
|
35676
|
+
this.createTransactionResult(
|
|
35677
|
+
calls,
|
|
35678
|
+
true,
|
|
35679
|
+
{
|
|
35680
|
+
from: Protocols.VAULT.name,
|
|
35681
|
+
to: Protocols.NONE.name,
|
|
35682
|
+
amount
|
|
35683
|
+
},
|
|
35684
|
+
"WITHDRAWAL",
|
|
35685
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35686
|
+
)
|
|
35687
|
+
];
|
|
35257
35688
|
}
|
|
35258
35689
|
const vesuAdapter = await this.getVesuAdapter();
|
|
35259
35690
|
const extendedAdapter = await this.getExtendedAdapter();
|
|
@@ -35262,18 +35693,40 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35262
35693
|
logger.error(
|
|
35263
35694
|
`vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
|
|
35264
35695
|
);
|
|
35265
|
-
return [
|
|
35696
|
+
return [
|
|
35697
|
+
this.createTransactionResult(
|
|
35698
|
+
calls,
|
|
35699
|
+
status,
|
|
35700
|
+
{
|
|
35701
|
+
from: Protocols.VAULT.name,
|
|
35702
|
+
to: Protocols.NONE.name,
|
|
35703
|
+
amount
|
|
35704
|
+
},
|
|
35705
|
+
"NONE",
|
|
35706
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35707
|
+
)
|
|
35708
|
+
];
|
|
35266
35709
|
}
|
|
35267
35710
|
let transactionResults = [];
|
|
35268
35711
|
const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
|
|
35269
|
-
const {
|
|
35270
|
-
collateralPrice
|
|
35271
|
-
} = await this.getAssetPrices();
|
|
35712
|
+
const { collateralPrice } = await this.getAssetPrices();
|
|
35272
35713
|
const extendedPositon = await extendedAdapter.getAllOpenPositions();
|
|
35273
35714
|
if (!extendedPositon) {
|
|
35274
35715
|
status = false;
|
|
35275
35716
|
logger.error("error getting extended position", extendedPositon);
|
|
35276
|
-
return [
|
|
35717
|
+
return [
|
|
35718
|
+
this.createTransactionResult(
|
|
35719
|
+
calls,
|
|
35720
|
+
status,
|
|
35721
|
+
{
|
|
35722
|
+
from: Protocols.VAULT.name,
|
|
35723
|
+
to: Protocols.NONE.name,
|
|
35724
|
+
amount
|
|
35725
|
+
},
|
|
35726
|
+
"NONE",
|
|
35727
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35728
|
+
)
|
|
35729
|
+
];
|
|
35277
35730
|
}
|
|
35278
35731
|
const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
|
|
35279
35732
|
usdcBalanceDifference,
|
|
@@ -35286,11 +35739,27 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35286
35739
|
logger.error(
|
|
35287
35740
|
`error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
|
|
35288
35741
|
);
|
|
35289
|
-
return [
|
|
35742
|
+
return [
|
|
35743
|
+
this.createTransactionResult(
|
|
35744
|
+
calls,
|
|
35745
|
+
status,
|
|
35746
|
+
{
|
|
35747
|
+
from: Protocols.VAULT.name,
|
|
35748
|
+
to: Protocols.NONE.name,
|
|
35749
|
+
amount
|
|
35750
|
+
},
|
|
35751
|
+
"NONE",
|
|
35752
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35753
|
+
)
|
|
35754
|
+
];
|
|
35290
35755
|
}
|
|
35291
35756
|
const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
|
|
35292
35757
|
if (status && vesu_amount.greaterThan(0)) {
|
|
35293
|
-
const {
|
|
35758
|
+
const {
|
|
35759
|
+
calls: vesuCalls,
|
|
35760
|
+
status: vesuStatus,
|
|
35761
|
+
transactionMetadata: vesuTransactionMetadata
|
|
35762
|
+
} = await this.moveAssets(
|
|
35294
35763
|
{
|
|
35295
35764
|
amount: vesu_amount,
|
|
35296
35765
|
from: Protocols.VESU.name,
|
|
@@ -35308,7 +35777,11 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35308
35777
|
});
|
|
35309
35778
|
}
|
|
35310
35779
|
if (status && extended_amount.greaterThan(0)) {
|
|
35311
|
-
const {
|
|
35780
|
+
const {
|
|
35781
|
+
calls: extendedCalls,
|
|
35782
|
+
status: extendedStatus,
|
|
35783
|
+
transactionMetadata: extendedTransactionMetadata
|
|
35784
|
+
} = await this.moveAssets(
|
|
35312
35785
|
{
|
|
35313
35786
|
amount: extended_amount,
|
|
35314
35787
|
from: Protocols.EXTENDED.name,
|
|
@@ -35326,8 +35799,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35326
35799
|
transactionMetadata: extendedTransactionMetadata
|
|
35327
35800
|
});
|
|
35328
35801
|
} else {
|
|
35329
|
-
logger.error(
|
|
35330
|
-
|
|
35802
|
+
logger.error(
|
|
35803
|
+
"error moving assets to vault: extendedStatus: ${extendedStatus}"
|
|
35804
|
+
);
|
|
35805
|
+
return [
|
|
35806
|
+
this.createTransactionResult(
|
|
35807
|
+
[],
|
|
35808
|
+
status,
|
|
35809
|
+
{
|
|
35810
|
+
from: Protocols.VAULT.name,
|
|
35811
|
+
to: Protocols.NONE.name,
|
|
35812
|
+
amount
|
|
35813
|
+
},
|
|
35814
|
+
"NONE",
|
|
35815
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35816
|
+
)
|
|
35817
|
+
];
|
|
35331
35818
|
}
|
|
35332
35819
|
}
|
|
35333
35820
|
const withdrawCall = await this.getBringLiquidityCall({
|
|
@@ -35349,7 +35836,19 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35349
35836
|
return transactionResults;
|
|
35350
35837
|
} catch (err) {
|
|
35351
35838
|
logger.error(`error handling withdrawal: ${err}`);
|
|
35352
|
-
return [
|
|
35839
|
+
return [
|
|
35840
|
+
this.createTransactionResult(
|
|
35841
|
+
[],
|
|
35842
|
+
false,
|
|
35843
|
+
{
|
|
35844
|
+
from: Protocols.VAULT.name,
|
|
35845
|
+
to: Protocols.NONE.name,
|
|
35846
|
+
amount
|
|
35847
|
+
},
|
|
35848
|
+
"NONE",
|
|
35849
|
+
"WITHDRAWAL" /* WITHDRAWAL */
|
|
35850
|
+
)
|
|
35851
|
+
];
|
|
35353
35852
|
}
|
|
35354
35853
|
}
|
|
35355
35854
|
async getAUM() {
|
|
@@ -35401,8 +35900,12 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35401
35900
|
const txnsToBeExecuted = txnData.filter((txn) => {
|
|
35402
35901
|
return txn.transactionMetadata.transactionType !== "NONE" && txn.transactionMetadata.protocolFrom !== "" && txn.transactionMetadata.protocolTo !== "";
|
|
35403
35902
|
});
|
|
35404
|
-
const callsToBeExecutedFinal = txnsToBeExecuted.flatMap(
|
|
35405
|
-
|
|
35903
|
+
const callsToBeExecutedFinal = txnsToBeExecuted.flatMap(
|
|
35904
|
+
(txn) => txn.calls
|
|
35905
|
+
);
|
|
35906
|
+
const txnMetadata = txnsToBeExecuted.map(
|
|
35907
|
+
(txn) => txn.transactionMetadata
|
|
35908
|
+
);
|
|
35406
35909
|
return { callsToBeExecutedFinal, txnMetadata };
|
|
35407
35910
|
} catch (err) {
|
|
35408
35911
|
logger.error(`error processing transaction data from SDK: ${err}`);
|
|
@@ -35432,23 +35935,42 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35432
35935
|
if (!vesuAdapter || !extendedAdapter) {
|
|
35433
35936
|
return new Web3Number(0, 0);
|
|
35434
35937
|
}
|
|
35435
|
-
const extendedFundingRate = new Web3Number(
|
|
35938
|
+
const extendedFundingRate = new Web3Number(
|
|
35939
|
+
(await extendedAdapter.getNetAPY()).toFixed(4),
|
|
35940
|
+
0
|
|
35941
|
+
);
|
|
35436
35942
|
const extendedPositions = await extendedAdapter.getAllOpenPositions();
|
|
35437
35943
|
if (!extendedPositions || extendedPositions.length === 0) {
|
|
35438
35944
|
logger.info(`no extended positions found`);
|
|
35439
35945
|
return new Web3Number(0, 0);
|
|
35440
35946
|
}
|
|
35441
|
-
const extendePositionSizeUSD = new Web3Number(
|
|
35947
|
+
const extendePositionSizeUSD = new Web3Number(
|
|
35948
|
+
extendedPositions[0].value || 0,
|
|
35949
|
+
0
|
|
35950
|
+
);
|
|
35442
35951
|
const vesuPositions = await vesuAdapter.getPositions();
|
|
35443
35952
|
const vesuSupplyApy = vesuPositions[0].apy.apy;
|
|
35444
|
-
const vesuCollateralSizeUSD = new Web3Number(
|
|
35445
|
-
|
|
35953
|
+
const vesuCollateralSizeUSD = new Web3Number(
|
|
35954
|
+
vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
|
|
35955
|
+
USDC_TOKEN_DECIMALS
|
|
35956
|
+
);
|
|
35957
|
+
const vesuDebtSizeUSD = new Web3Number(
|
|
35958
|
+
vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
|
|
35959
|
+
USDC_TOKEN_DECIMALS
|
|
35960
|
+
);
|
|
35446
35961
|
const num1 = extendePositionSizeUSD.multipliedBy(extendedFundingRate);
|
|
35447
35962
|
const num22 = vesuCollateralSizeUSD.multipliedBy(vesuSupplyApy);
|
|
35448
35963
|
const num32 = vesuDebtSizeUSD.abs();
|
|
35449
35964
|
const maxBorrowApy = num1.plus(num22).minus(0.1).dividedBy(num32);
|
|
35450
|
-
const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(
|
|
35451
|
-
|
|
35965
|
+
const vesuMaxBorrowableAmount = await vesuAdapter.vesuAdapter.getMaxBorrowableByInterestRate(
|
|
35966
|
+
this.config,
|
|
35967
|
+
vesuAdapter.config.debt,
|
|
35968
|
+
maxBorrowApy.toNumber()
|
|
35969
|
+
);
|
|
35970
|
+
return new Web3Number(
|
|
35971
|
+
vesuMaxBorrowableAmount.toFixed(USDC_TOKEN_DECIMALS),
|
|
35972
|
+
USDC_TOKEN_DECIMALS
|
|
35973
|
+
);
|
|
35452
35974
|
}
|
|
35453
35975
|
async getVesuHealthFactors() {
|
|
35454
35976
|
const vesuAdapter = await this.getVesuAdapter();
|
|
@@ -35457,18 +35979,33 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35457
35979
|
return [0, 0];
|
|
35458
35980
|
}
|
|
35459
35981
|
const vesuPositions = await vesuAdapter.getPositions();
|
|
35460
|
-
const vesuCollateralSizeUSD = new Web3Number(
|
|
35461
|
-
|
|
35982
|
+
const vesuCollateralSizeUSD = new Web3Number(
|
|
35983
|
+
vesuPositions[0].usdValue.toFixed(USDC_TOKEN_DECIMALS),
|
|
35984
|
+
0
|
|
35985
|
+
);
|
|
35986
|
+
const vesuDebtSizeUSD = new Web3Number(
|
|
35987
|
+
vesuPositions[1].usdValue.toFixed(USDC_TOKEN_DECIMALS),
|
|
35988
|
+
0
|
|
35989
|
+
);
|
|
35462
35990
|
const actualLtv = vesuDebtSizeUSD.dividedBy(vesuCollateralSizeUSD).abs();
|
|
35463
35991
|
logger.info(`actualLtv: ${actualLtv.toNumber()}`);
|
|
35464
|
-
const maxLtv = new Web3Number(
|
|
35465
|
-
|
|
35992
|
+
const maxLtv = new Web3Number(
|
|
35993
|
+
await vesuAdapter.vesuAdapter.getLTVConfig(this.config),
|
|
35994
|
+
4
|
|
35995
|
+
);
|
|
35996
|
+
const healthFactor = new Web3Number(
|
|
35997
|
+
maxLtv.dividedBy(actualLtv).toFixed(4),
|
|
35998
|
+
4
|
|
35999
|
+
);
|
|
35466
36000
|
logger.info(`healthFactor: ${healthFactor.toNumber()}`);
|
|
35467
36001
|
const extendedBalance = await extendedAdapter.getExtendedDepositAmount();
|
|
35468
36002
|
if (!extendedBalance) {
|
|
35469
36003
|
return [0, 0];
|
|
35470
36004
|
}
|
|
35471
|
-
const extendedLeverage = new Web3Number(
|
|
36005
|
+
const extendedLeverage = new Web3Number(
|
|
36006
|
+
(Number(extendedBalance.marginRatio) * 100).toFixed(4),
|
|
36007
|
+
4
|
|
36008
|
+
);
|
|
35472
36009
|
logger.info(`extendedLeverage: ${extendedLeverage.toNumber()}`);
|
|
35473
36010
|
return [healthFactor.toNumber(), extendedLeverage.toNumber()];
|
|
35474
36011
|
}
|
|
@@ -35489,12 +36026,16 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35489
36026
|
splits: []
|
|
35490
36027
|
};
|
|
35491
36028
|
}
|
|
35492
|
-
let vesuPositions = allPositions.filter(
|
|
36029
|
+
let vesuPositions = allPositions.filter(
|
|
36030
|
+
(item) => item.protocol === Protocols.VESU
|
|
36031
|
+
);
|
|
35493
36032
|
vesuPositions.map((item) => {
|
|
35494
36033
|
item.apy.apy = item.apy.apy * 0.1;
|
|
35495
36034
|
});
|
|
35496
36035
|
const extendedPositions = await extendedAdapter.getAllOpenPositions();
|
|
35497
|
-
const usdcToken = Global.getDefaultTokens().find(
|
|
36036
|
+
const usdcToken = Global.getDefaultTokens().find(
|
|
36037
|
+
(token) => token.symbol === "USDC"
|
|
36038
|
+
);
|
|
35498
36039
|
if (!extendedPositions || !usdcToken) {
|
|
35499
36040
|
return {
|
|
35500
36041
|
net: 0,
|
|
@@ -35507,7 +36048,10 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35507
36048
|
const totalHoldingsUSDValue = allPositions.reduce((acc, curr) => acc + curr.usdValue, 0) + Number(extendedEquity);
|
|
35508
36049
|
console.log(totalHoldingsUSDValue);
|
|
35509
36050
|
const extendedPositionSizeMultipliedByApy = Number(extendedPosition.value) * extendedApy;
|
|
35510
|
-
let weightedAPYs = allPositions.reduce(
|
|
36051
|
+
let weightedAPYs = allPositions.reduce(
|
|
36052
|
+
(acc, curr) => acc + curr.apy.apy * curr.usdValue,
|
|
36053
|
+
0
|
|
36054
|
+
) + extendedPositionSizeMultipliedByApy;
|
|
35511
36055
|
console.log(weightedAPYs);
|
|
35512
36056
|
const netAPY = weightedAPYs / totalHoldingsUSDValue;
|
|
35513
36057
|
console.log(netAPY);
|
|
@@ -35521,13 +36065,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35521
36065
|
});
|
|
35522
36066
|
return {
|
|
35523
36067
|
net: netAPY,
|
|
35524
|
-
splits: allPositions.map((p) => ({
|
|
36068
|
+
splits: allPositions.map((p) => ({
|
|
36069
|
+
apy: p.apy.apy,
|
|
36070
|
+
id: p.remarks ?? ""
|
|
36071
|
+
}))
|
|
35525
36072
|
};
|
|
35526
36073
|
}
|
|
35527
36074
|
async getWalletHoldings() {
|
|
35528
|
-
const usdceToken = Global.getDefaultTokens().find(
|
|
35529
|
-
|
|
35530
|
-
|
|
36075
|
+
const usdceToken = Global.getDefaultTokens().find(
|
|
36076
|
+
(token) => token.symbol === "USDCe"
|
|
36077
|
+
);
|
|
36078
|
+
const wbtcToken = Global.getDefaultTokens().find(
|
|
36079
|
+
(token) => token.symbol === "WBTC"
|
|
36080
|
+
);
|
|
36081
|
+
const usdcToken = Global.getDefaultTokens().find(
|
|
36082
|
+
(token) => token.symbol === "USDC"
|
|
36083
|
+
);
|
|
35531
36084
|
if (!usdceToken || !wbtcToken || !usdcToken) {
|
|
35532
36085
|
return [];
|
|
35533
36086
|
}
|
|
@@ -35601,9 +36154,7 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
|
|
|
35601
36154
|
});
|
|
35602
36155
|
const extendedAdapter = new ExtendedAdapter({
|
|
35603
36156
|
...baseAdapterConfig,
|
|
35604
|
-
supportedPositions: [
|
|
35605
|
-
{ asset: usdcToken, isDebt: true }
|
|
35606
|
-
],
|
|
36157
|
+
supportedPositions: [{ asset: usdcToken, isDebt: true }],
|
|
35607
36158
|
vaultIdExtended,
|
|
35608
36159
|
extendedContract: EXTENDED_CONTRACT,
|
|
35609
36160
|
extendedBackendWriteUrl,
|
|
@@ -35660,11 +36211,11 @@ function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, e
|
|
|
35660
36211
|
asset: wbtcToken.address
|
|
35661
36212
|
});
|
|
35662
36213
|
vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getDepositLeaf());
|
|
36214
|
+
vaultSettings.leafAdapters.push(() => vesuMultiplyAdapter.getWithdrawLeaf());
|
|
36215
|
+
vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
|
|
35663
36216
|
vaultSettings.leafAdapters.push(
|
|
35664
|
-
() =>
|
|
36217
|
+
() => extendedAdapter.getSwapFromLegacyLeaf()
|
|
35665
36218
|
);
|
|
35666
|
-
vaultSettings.leafAdapters.push(() => extendedAdapter.getDepositLeaf());
|
|
35667
|
-
vaultSettings.leafAdapters.push(() => extendedAdapter.getSwapFromLegacyLeaf());
|
|
35668
36219
|
vaultSettings.leafAdapters.push(() => avnuAdapter.getDepositLeaf());
|
|
35669
36220
|
vaultSettings.leafAdapters.push(() => avnuAdapter.getWithdrawLeaf());
|
|
35670
36221
|
vaultSettings.leafAdapters.push(
|
|
@@ -35709,29 +36260,70 @@ function VaultDescription2(lstSymbol, underlyingSymbol) {
|
|
|
35709
36260
|
" to create leverage. Depositors receive vault shares that represent a proportional claim on the underlying assets and accrued yield."
|
|
35710
36261
|
] }),
|
|
35711
36262
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "14px", lineHeight: "1.5", marginBottom: "16px" }, children: [
|
|
35712
|
-
"This vault uses Vesu for lending and borrowing. The oracle used by this pool is a
|
|
35713
|
-
|
|
36263
|
+
"This vault uses Vesu for lending and borrowing. The oracle used by this pool is a",
|
|
36264
|
+
" ",
|
|
36265
|
+
highlightTextWithLinks("conversion rate oracle", [
|
|
36266
|
+
{
|
|
36267
|
+
highlight: "conversion rate oracle",
|
|
36268
|
+
link: "https://docs.pragma.build/starknet/development#conversion-rate"
|
|
36269
|
+
}
|
|
36270
|
+
]),
|
|
35714
36271
|
" ",
|
|
35715
36272
|
"which is resilient to liquidity issues and price volatility, hence reducing the risk of liquidation. However, overtime, if left un-monitored, debt can increase enough to trigger a liquidation. But no worries, our continuous monitoring systems look for situations with reduced health factor and balance collateral/debt to bring it back to safe levels. With Troves, you can have a peaceful sleep."
|
|
35716
36273
|
] }),
|
|
35717
|
-
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
35718
|
-
|
|
35719
|
-
|
|
35720
|
-
|
|
35721
|
-
|
|
35722
|
-
|
|
35723
|
-
|
|
35724
|
-
|
|
35725
|
-
|
|
35726
|
-
|
|
36274
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
36275
|
+
"div",
|
|
36276
|
+
{
|
|
36277
|
+
style: {
|
|
36278
|
+
backgroundColor: "#222",
|
|
36279
|
+
padding: "10px",
|
|
36280
|
+
borderRadius: "8px",
|
|
36281
|
+
marginBottom: "20px",
|
|
36282
|
+
border: "1px solid #444"
|
|
36283
|
+
},
|
|
36284
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
|
|
36285
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Withdrawals:" }),
|
|
36286
|
+
" Requests can take up to",
|
|
36287
|
+
" ",
|
|
36288
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "1-2 hours" }),
|
|
36289
|
+
" to process as the vault unwinds and settles routing."
|
|
36290
|
+
] })
|
|
36291
|
+
}
|
|
36292
|
+
),
|
|
36293
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
36294
|
+
"div",
|
|
36295
|
+
{
|
|
36296
|
+
style: {
|
|
36297
|
+
backgroundColor: "#222",
|
|
36298
|
+
padding: "10px",
|
|
36299
|
+
borderRadius: "8px",
|
|
36300
|
+
marginBottom: "20px",
|
|
36301
|
+
border: "1px solid #444"
|
|
36302
|
+
},
|
|
36303
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("p", { style: { fontSize: "13px", color: "#ccc" }, children: [
|
|
36304
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("strong", { children: "Debt limits:" }),
|
|
36305
|
+
" Pools on Vesu have debt caps that are gradually increased over time. Until caps are raised, deposited Tokens remain in the vault, generating a shared net return for all depositors. There is no additional fee taken by Troves on Yield token's APY, its only on added gain."
|
|
36306
|
+
] })
|
|
36307
|
+
}
|
|
36308
|
+
)
|
|
35727
36309
|
] });
|
|
35728
36310
|
}
|
|
35729
36311
|
var re7UsdcPrimeDevansh = {
|
|
35730
|
-
vaultAddress: ContractAddr.from(
|
|
35731
|
-
|
|
35732
|
-
|
|
35733
|
-
|
|
35734
|
-
|
|
36312
|
+
vaultAddress: ContractAddr.from(
|
|
36313
|
+
"0x058905be22d6a81792df79425dc9641cf3e1b77f36748631b7d7e5d713a32b55"
|
|
36314
|
+
),
|
|
36315
|
+
manager: ContractAddr.from(
|
|
36316
|
+
"0x02648d703783feb2d967cf0520314cb5aa800d69a9426f3e3b317395af44de16"
|
|
36317
|
+
),
|
|
36318
|
+
vaultAllocator: ContractAddr.from(
|
|
36319
|
+
"0x07d533c838eab6a4d854dd3aea96a55993fccd35821921970d00bde946b63b6f"
|
|
36320
|
+
),
|
|
36321
|
+
redeemRequestNFT: ContractAddr.from(
|
|
36322
|
+
"0x01ef91f08fb99729c00f82fc6e0ece37917bcc43952596c19996259dc8adbbba"
|
|
36323
|
+
),
|
|
36324
|
+
aumOracle: ContractAddr.from(
|
|
36325
|
+
"0x030b6acfec162f5d6e72b8a4d2798aedce78fb39de78a8f549f7cd277ae8bc8d"
|
|
36326
|
+
),
|
|
35735
36327
|
leafAdapters: [],
|
|
35736
36328
|
adapters: [],
|
|
35737
36329
|
targetHealthFactor: 1.4,
|
|
@@ -35743,13 +36335,29 @@ var re7UsdcPrimeDevansh = {
|
|
|
35743
36335
|
"0.001",
|
|
35744
36336
|
Global.getDefaultTokens().find((token) => token.symbol === "WBTC").decimals
|
|
35745
36337
|
),
|
|
35746
|
-
borrowable_assets: [
|
|
36338
|
+
borrowable_assets: [
|
|
36339
|
+
Global.getDefaultTokens().find((token) => token.symbol === "WBTC")
|
|
36340
|
+
],
|
|
35747
36341
|
minimumWBTCDifferenceForAvnuSwap: MINIMUM_WBTC_DIFFERENCE_FOR_AVNU_SWAP,
|
|
35748
36342
|
walletAddress: WALLET_ADDRESS
|
|
35749
36343
|
};
|
|
35750
36344
|
var VesuExtendedTestStrategies = (extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) => {
|
|
35751
36345
|
return [
|
|
35752
|
-
getStrategySettingsVesuExtended(
|
|
36346
|
+
getStrategySettingsVesuExtended(
|
|
36347
|
+
"WBTC",
|
|
36348
|
+
"USDC",
|
|
36349
|
+
re7UsdcPrimeDevansh,
|
|
36350
|
+
false,
|
|
36351
|
+
false,
|
|
36352
|
+
extendedBackendReadUrl,
|
|
36353
|
+
extendedBackendWriteUrl,
|
|
36354
|
+
vaultIdExtended,
|
|
36355
|
+
minimumExtendedMovementAmount,
|
|
36356
|
+
minimumVesuMovementAmount,
|
|
36357
|
+
minimumExtendedRetriesDelayForOrderStatus,
|
|
36358
|
+
minimumExtendedPriceDifferenceForSwapOpen,
|
|
36359
|
+
maximumExtendedPriceDifferenceForSwapClosing
|
|
36360
|
+
)
|
|
35753
36361
|
];
|
|
35754
36362
|
};
|
|
35755
36363
|
function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses, isPreview = false, isLST, extendedBackendReadUrl, extendedBackendWriteUrl, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) {
|
|
@@ -35759,8 +36367,25 @@ function getStrategySettingsVesuExtended(lstSymbol, underlyingSymbol, addresses,
|
|
|
35759
36367
|
address: addresses.vaultAddress,
|
|
35760
36368
|
launchBlock: 0,
|
|
35761
36369
|
type: "Other",
|
|
35762
|
-
depositTokens: [
|
|
35763
|
-
|
|
36370
|
+
depositTokens: [
|
|
36371
|
+
Global.getDefaultTokens().find(
|
|
36372
|
+
(token) => token.symbol === underlyingSymbol
|
|
36373
|
+
)
|
|
36374
|
+
],
|
|
36375
|
+
additionalInfo: getLooperSettings2(
|
|
36376
|
+
lstSymbol,
|
|
36377
|
+
underlyingSymbol,
|
|
36378
|
+
addresses,
|
|
36379
|
+
VesuPools.Re7USDCPrime,
|
|
36380
|
+
extendedBackendReadUrl,
|
|
36381
|
+
extendedBackendWriteUrl,
|
|
36382
|
+
vaultIdExtended,
|
|
36383
|
+
minimumExtendedMovementAmount,
|
|
36384
|
+
minimumVesuMovementAmount,
|
|
36385
|
+
minimumExtendedRetriesDelayForOrderStatus,
|
|
36386
|
+
minimumExtendedPriceDifferenceForSwapOpen,
|
|
36387
|
+
maximumExtendedPriceDifferenceForSwapClosing
|
|
36388
|
+
),
|
|
35764
36389
|
risk: {
|
|
35765
36390
|
riskFactor: _riskFactor3,
|
|
35766
36391
|
netRisk: _riskFactor3.reduce((acc, curr) => acc + curr.value * curr.weight, 0) / _riskFactor3.reduce((acc, curr) => acc + curr.weight, 0),
|
|
@@ -40085,6 +40710,7 @@ var deployer_default = Deployer;
|
|
|
40085
40710
|
calculateBTCPriceDelta,
|
|
40086
40711
|
calculateDebtAmount,
|
|
40087
40712
|
calculateDebtReductionAmountForWithdrawal,
|
|
40713
|
+
calculateDeltaDebtAmount,
|
|
40088
40714
|
calculateExposureDelta,
|
|
40089
40715
|
calculateExtendedLevergae,
|
|
40090
40716
|
calculateVesUPositionSizeGivenExtended,
|