@strkfarm/sdk 2.0.0-dev.21 → 2.0.0-dev.22
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 +29 -25
- package/dist/index.browser.mjs +29 -25
- package/dist/index.d.ts +9 -0
- package/dist/index.js +29 -25
- package/dist/index.mjs +29 -25
- package/package.json +1 -1
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +61 -28
|
@@ -98553,7 +98553,7 @@ spurious results.`);
|
|
|
98553
98553
|
};
|
|
98554
98554
|
}
|
|
98555
98555
|
}
|
|
98556
|
-
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.
|
|
98556
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
98557
98557
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
98558
98558
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
98559
98559
|
logger2.error(
|
|
@@ -98689,17 +98689,17 @@ spurious results.`);
|
|
|
98689
98689
|
return [];
|
|
98690
98690
|
}
|
|
98691
98691
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
98692
|
-
const
|
|
98693
|
-
extendedHoldings.
|
|
98692
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
98693
|
+
extendedHoldings.availableForTrade
|
|
98694
98694
|
);
|
|
98695
|
-
logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${
|
|
98695
|
+
logger2.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
98696
98696
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
98697
98697
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
98698
98698
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
98699
98699
|
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
|
|
98700
98700
|
}
|
|
98701
98701
|
const extendedTargetAmount = extendedAmount.abs();
|
|
98702
|
-
let projectedExtendedBalance =
|
|
98702
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
98703
98703
|
if (extendedAmount.isNegative()) {
|
|
98704
98704
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
98705
98705
|
}
|
|
@@ -98715,7 +98715,6 @@ spurious results.`);
|
|
|
98715
98715
|
let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
|
|
98716
98716
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
98717
98717
|
logger2.info(`${_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()}`);
|
|
98718
|
-
let calls = [];
|
|
98719
98718
|
let transactionResults = [];
|
|
98720
98719
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
98721
98720
|
try {
|
|
@@ -98893,6 +98892,15 @@ spurious results.`);
|
|
|
98893
98892
|
}
|
|
98894
98893
|
return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
|
|
98895
98894
|
}
|
|
98895
|
+
/**
|
|
98896
|
+
* This method is used to move assets between protocols
|
|
98897
|
+
* @param params - The parameters for the move assets operation
|
|
98898
|
+
* @param extendedAdapter - The extended adapter
|
|
98899
|
+
* @param vesuAdapter - The vesu adapter
|
|
98900
|
+
* @returns The transaction result
|
|
98901
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
98902
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
98903
|
+
*/
|
|
98896
98904
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
98897
98905
|
try {
|
|
98898
98906
|
if (params.amount.lessThanOrEqualTo(0)) {
|
|
@@ -98901,23 +98909,6 @@ spurious results.`);
|
|
|
98901
98909
|
);
|
|
98902
98910
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
98903
98911
|
}
|
|
98904
|
-
const amountAbs = params.amount.abs();
|
|
98905
|
-
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
98906
|
-
if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
98907
|
-
logger2.warn(
|
|
98908
|
-
`Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
98909
|
-
);
|
|
98910
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
98911
|
-
}
|
|
98912
|
-
}
|
|
98913
|
-
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
98914
|
-
if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
|
|
98915
|
-
logger2.warn(
|
|
98916
|
-
`Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
98917
|
-
);
|
|
98918
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
98919
|
-
}
|
|
98920
|
-
}
|
|
98921
98912
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
98922
98913
|
if (!avnuAdapter) {
|
|
98923
98914
|
logger2.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
@@ -98954,9 +98945,22 @@ spurious results.`);
|
|
|
98954
98945
|
);
|
|
98955
98946
|
logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
|
|
98956
98947
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
98957
|
-
const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
|
|
98948
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
|
|
98958
98949
|
logger2.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
|
|
98959
|
-
|
|
98950
|
+
let priceOfBTC;
|
|
98951
|
+
const {
|
|
98952
|
+
ask,
|
|
98953
|
+
bid,
|
|
98954
|
+
status
|
|
98955
|
+
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
98956
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
98957
|
+
if (status) {
|
|
98958
|
+
priceOfBTC = price;
|
|
98959
|
+
} else {
|
|
98960
|
+
logger2.error(`error fetching order book btc usdc: ${status}`);
|
|
98961
|
+
priceOfBTC = collateralPrice.price;
|
|
98962
|
+
}
|
|
98963
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
98960
98964
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
98961
98965
|
extendedLeverage.toString(),
|
|
98962
98966
|
btcAmount.toNumber(),
|
package/dist/index.browser.mjs
CHANGED
|
@@ -34517,7 +34517,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34517
34517
|
};
|
|
34518
34518
|
}
|
|
34519
34519
|
}
|
|
34520
|
-
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.
|
|
34520
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34521
34521
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34522
34522
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34523
34523
|
logger.error(
|
|
@@ -34653,17 +34653,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34653
34653
|
return [];
|
|
34654
34654
|
}
|
|
34655
34655
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34656
|
-
const
|
|
34657
|
-
extendedHoldings.
|
|
34656
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
34657
|
+
extendedHoldings.availableForTrade
|
|
34658
34658
|
);
|
|
34659
|
-
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${
|
|
34659
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
34660
34660
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34661
34661
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34662
34662
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34663
34663
|
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
|
|
34664
34664
|
}
|
|
34665
34665
|
const extendedTargetAmount = extendedAmount.abs();
|
|
34666
|
-
let projectedExtendedBalance =
|
|
34666
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
34667
34667
|
if (extendedAmount.isNegative()) {
|
|
34668
34668
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
34669
34669
|
}
|
|
@@ -34679,7 +34679,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34679
34679
|
let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
|
|
34680
34680
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
34681
34681
|
logger.info(`${_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()}`);
|
|
34682
|
-
let calls = [];
|
|
34683
34682
|
let transactionResults = [];
|
|
34684
34683
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34685
34684
|
try {
|
|
@@ -34857,6 +34856,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34857
34856
|
}
|
|
34858
34857
|
return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
|
|
34859
34858
|
}
|
|
34859
|
+
/**
|
|
34860
|
+
* This method is used to move assets between protocols
|
|
34861
|
+
* @param params - The parameters for the move assets operation
|
|
34862
|
+
* @param extendedAdapter - The extended adapter
|
|
34863
|
+
* @param vesuAdapter - The vesu adapter
|
|
34864
|
+
* @returns The transaction result
|
|
34865
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
34866
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
34867
|
+
*/
|
|
34860
34868
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
34861
34869
|
try {
|
|
34862
34870
|
if (params.amount.lessThanOrEqualTo(0)) {
|
|
@@ -34865,23 +34873,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34865
34873
|
);
|
|
34866
34874
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34867
34875
|
}
|
|
34868
|
-
const amountAbs = params.amount.abs();
|
|
34869
|
-
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
34870
|
-
if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34871
|
-
logger.warn(
|
|
34872
|
-
`Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
34873
|
-
);
|
|
34874
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34875
|
-
}
|
|
34876
|
-
}
|
|
34877
|
-
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
34878
|
-
if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
|
|
34879
|
-
logger.warn(
|
|
34880
|
-
`Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
34881
|
-
);
|
|
34882
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34883
|
-
}
|
|
34884
|
-
}
|
|
34885
34876
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
34886
34877
|
if (!avnuAdapter) {
|
|
34887
34878
|
logger.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
@@ -34918,9 +34909,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34918
34909
|
);
|
|
34919
34910
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
|
|
34920
34911
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
34921
|
-
const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
|
|
34912
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
|
|
34922
34913
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
|
|
34923
|
-
|
|
34914
|
+
let priceOfBTC;
|
|
34915
|
+
const {
|
|
34916
|
+
ask,
|
|
34917
|
+
bid,
|
|
34918
|
+
status
|
|
34919
|
+
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
34920
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
34921
|
+
if (status) {
|
|
34922
|
+
priceOfBTC = price;
|
|
34923
|
+
} else {
|
|
34924
|
+
logger.error(`error fetching order book btc usdc: ${status}`);
|
|
34925
|
+
priceOfBTC = collateralPrice.price;
|
|
34926
|
+
}
|
|
34927
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
34924
34928
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
34925
34929
|
extendedLeverage.toString(),
|
|
34926
34930
|
btcAmount.toNumber(),
|
package/dist/index.d.ts
CHANGED
|
@@ -2287,6 +2287,15 @@ declare class VesuExtendedMultiplierStrategy<S extends VesuExtendedStrategySetti
|
|
|
2287
2287
|
* Helper method to create transaction result with metadata
|
|
2288
2288
|
*/
|
|
2289
2289
|
private createTransactionResult;
|
|
2290
|
+
/**
|
|
2291
|
+
* This method is used to move assets between protocols
|
|
2292
|
+
* @param params - The parameters for the move assets operation
|
|
2293
|
+
* @param extendedAdapter - The extended adapter
|
|
2294
|
+
* @param vesuAdapter - The vesu adapter
|
|
2295
|
+
* @returns The transaction result
|
|
2296
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
2297
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
2298
|
+
*/
|
|
2290
2299
|
moveAssets(params: {
|
|
2291
2300
|
amount: Web3Number;
|
|
2292
2301
|
from: string;
|
package/dist/index.js
CHANGED
|
@@ -34674,7 +34674,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34674
34674
|
};
|
|
34675
34675
|
}
|
|
34676
34676
|
}
|
|
34677
|
-
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.
|
|
34677
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34678
34678
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34679
34679
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34680
34680
|
logger.error(
|
|
@@ -34810,17 +34810,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34810
34810
|
return [];
|
|
34811
34811
|
}
|
|
34812
34812
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34813
|
-
const
|
|
34814
|
-
extendedHoldings.
|
|
34813
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
34814
|
+
extendedHoldings.availableForTrade
|
|
34815
34815
|
);
|
|
34816
|
-
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${
|
|
34816
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
34817
34817
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34818
34818
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34819
34819
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34820
34820
|
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
|
|
34821
34821
|
}
|
|
34822
34822
|
const extendedTargetAmount = extendedAmount.abs();
|
|
34823
|
-
let projectedExtendedBalance =
|
|
34823
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
34824
34824
|
if (extendedAmount.isNegative()) {
|
|
34825
34825
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
34826
34826
|
}
|
|
@@ -34836,7 +34836,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34836
34836
|
let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
|
|
34837
34837
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
34838
34838
|
logger.info(`${_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()}`);
|
|
34839
|
-
let calls = [];
|
|
34840
34839
|
let transactionResults = [];
|
|
34841
34840
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34842
34841
|
try {
|
|
@@ -35014,6 +35013,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35014
35013
|
}
|
|
35015
35014
|
return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
|
|
35016
35015
|
}
|
|
35016
|
+
/**
|
|
35017
|
+
* This method is used to move assets between protocols
|
|
35018
|
+
* @param params - The parameters for the move assets operation
|
|
35019
|
+
* @param extendedAdapter - The extended adapter
|
|
35020
|
+
* @param vesuAdapter - The vesu adapter
|
|
35021
|
+
* @returns The transaction result
|
|
35022
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
35023
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
35024
|
+
*/
|
|
35017
35025
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
35018
35026
|
try {
|
|
35019
35027
|
if (params.amount.lessThanOrEqualTo(0)) {
|
|
@@ -35022,23 +35030,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35022
35030
|
);
|
|
35023
35031
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
35024
35032
|
}
|
|
35025
|
-
const amountAbs = params.amount.abs();
|
|
35026
|
-
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
35027
|
-
if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
35028
|
-
logger.warn(
|
|
35029
|
-
`Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
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
|
-
}
|
|
35041
|
-
}
|
|
35042
35033
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
35043
35034
|
if (!avnuAdapter) {
|
|
35044
35035
|
logger.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
@@ -35075,9 +35066,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
35075
35066
|
);
|
|
35076
35067
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
|
|
35077
35068
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
35078
|
-
const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
|
|
35069
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
|
|
35079
35070
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
|
|
35080
|
-
|
|
35071
|
+
let priceOfBTC;
|
|
35072
|
+
const {
|
|
35073
|
+
ask,
|
|
35074
|
+
bid,
|
|
35075
|
+
status
|
|
35076
|
+
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
35077
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
35078
|
+
if (status) {
|
|
35079
|
+
priceOfBTC = price;
|
|
35080
|
+
} else {
|
|
35081
|
+
logger.error(`error fetching order book btc usdc: ${status}`);
|
|
35082
|
+
priceOfBTC = collateralPrice.price;
|
|
35083
|
+
}
|
|
35084
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
35081
35085
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
35082
35086
|
extendedLeverage.toString(),
|
|
35083
35087
|
btcAmount.toNumber(),
|
package/dist/index.mjs
CHANGED
|
@@ -34528,7 +34528,7 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34528
34528
|
};
|
|
34529
34529
|
}
|
|
34530
34530
|
}
|
|
34531
|
-
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.
|
|
34531
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
34532
34532
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
34533
34533
|
if (!Number.isFinite(amountToInvestNumber)) {
|
|
34534
34534
|
logger.error(
|
|
@@ -34664,17 +34664,17 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34664
34664
|
return [];
|
|
34665
34665
|
}
|
|
34666
34666
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
34667
|
-
const
|
|
34668
|
-
extendedHoldings.
|
|
34667
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
34668
|
+
extendedHoldings.availableForTrade
|
|
34669
34669
|
);
|
|
34670
|
-
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${
|
|
34670
|
+
logger.info(`${_VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
34671
34671
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34672
34672
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
34673
34673
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34674
34674
|
totalExtendedWithdrawal = totalExtendedWithdrawal.plus(extendedAmount.abs());
|
|
34675
34675
|
}
|
|
34676
34676
|
const extendedTargetAmount = extendedAmount.abs();
|
|
34677
|
-
let projectedExtendedBalance =
|
|
34677
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
34678
34678
|
if (extendedAmount.isNegative()) {
|
|
34679
34679
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
34680
34680
|
}
|
|
@@ -34690,7 +34690,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34690
34690
|
let vesuAmountDifference = vesuTargetAmount.minus(projectedWalletBalance);
|
|
34691
34691
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
34692
34692
|
logger.info(`${_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()}`);
|
|
34693
|
-
let calls = [];
|
|
34694
34693
|
let transactionResults = [];
|
|
34695
34694
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34696
34695
|
try {
|
|
@@ -34868,6 +34867,15 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34868
34867
|
}
|
|
34869
34868
|
return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED", cycleType } };
|
|
34870
34869
|
}
|
|
34870
|
+
/**
|
|
34871
|
+
* This method is used to move assets between protocols
|
|
34872
|
+
* @param params - The parameters for the move assets operation
|
|
34873
|
+
* @param extendedAdapter - The extended adapter
|
|
34874
|
+
* @param vesuAdapter - The vesu adapter
|
|
34875
|
+
* @returns The transaction result
|
|
34876
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
34877
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
34878
|
+
*/
|
|
34871
34879
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
34872
34880
|
try {
|
|
34873
34881
|
if (params.amount.lessThanOrEqualTo(0)) {
|
|
@@ -34876,23 +34884,6 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34876
34884
|
);
|
|
34877
34885
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34878
34886
|
}
|
|
34879
|
-
const amountAbs = params.amount.abs();
|
|
34880
|
-
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
34881
|
-
if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
34882
|
-
logger.warn(
|
|
34883
|
-
`Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
34884
|
-
);
|
|
34885
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34886
|
-
}
|
|
34887
|
-
}
|
|
34888
|
-
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
34889
|
-
if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
|
|
34890
|
-
logger.warn(
|
|
34891
|
-
`Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
34892
|
-
);
|
|
34893
|
-
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
34894
|
-
}
|
|
34895
|
-
}
|
|
34896
34887
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
34897
34888
|
if (!avnuAdapter) {
|
|
34898
34889
|
logger.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
@@ -34929,9 +34920,22 @@ var VesuExtendedMultiplierStrategy = class _VesuExtendedMultiplierStrategy exten
|
|
|
34929
34920
|
);
|
|
34930
34921
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
|
|
34931
34922
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
34932
|
-
const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
|
|
34923
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
|
|
34933
34924
|
logger.info(`${_VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
|
|
34934
|
-
|
|
34925
|
+
let priceOfBTC;
|
|
34926
|
+
const {
|
|
34927
|
+
ask,
|
|
34928
|
+
bid,
|
|
34929
|
+
status
|
|
34930
|
+
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
34931
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
34932
|
+
if (status) {
|
|
34933
|
+
priceOfBTC = price;
|
|
34934
|
+
} else {
|
|
34935
|
+
logger.error(`error fetching order book btc usdc: ${status}`);
|
|
34936
|
+
priceOfBTC = collateralPrice.price;
|
|
34937
|
+
}
|
|
34938
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
34935
34939
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
34936
34940
|
extendedLeverage.toString(),
|
|
34937
34941
|
btcAmount.toNumber(),
|
package/package.json
CHANGED
|
@@ -335,7 +335,7 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
/** The LIMIT_BALANCE is the bffer amount to keep in the investing Cycle */
|
|
338
|
-
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.
|
|
338
|
+
const amountToInvest = new Web3Number(balance.usdValue, USDC_TOKEN_DECIMALS).plus(usdcBalanceOnExtended?.availableForTrade ?? 0).multipliedBy(1 - LIMIT_BALANCE);
|
|
339
339
|
|
|
340
340
|
|
|
341
341
|
const amountToInvestNumber = amountToInvest.toNumber();
|
|
@@ -488,11 +488,14 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
488
488
|
return [];
|
|
489
489
|
}
|
|
490
490
|
const usdcAmountInWallet = (await this.getUnusedBalance()).amount;
|
|
491
|
-
|
|
492
|
-
|
|
491
|
+
/**
|
|
492
|
+
* Trade is the correct metric, since we can close position for some vesu amount, otherwise underutilisation of funds will be a huge issue
|
|
493
|
+
*/
|
|
494
|
+
const usdcAmountOnExtendedAvailableForTrade = parseFloat(
|
|
495
|
+
extendedHoldings.availableForTrade
|
|
493
496
|
);
|
|
494
497
|
|
|
495
|
-
logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${
|
|
498
|
+
logger.info(`${VesuExtendedMultiplierStrategy.name}::shouldMoveAssets calculating movements - Extended current: ${usdcAmountOnExtendedAvailableForTrade}, Wallet: ${usdcAmountInWallet.toNumber()}, Target Extended: ${extendedAmount.toNumber()}, Target Vesu: ${vesuAmount.toNumber()}`);
|
|
496
499
|
|
|
497
500
|
let totalExtendedWithdrawal = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
498
501
|
let totalExtendedDeposit = new Web3Number(0, USDC_TOKEN_DECIMALS);
|
|
@@ -505,7 +508,7 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
505
508
|
// If extendedAmount was negative, we've already accounted for that withdrawal
|
|
506
509
|
// So we calculate based on what Extended will be after that withdrawal
|
|
507
510
|
const extendedTargetAmount = extendedAmount.abs(); // Use absolute value as target
|
|
508
|
-
let projectedExtendedBalance =
|
|
511
|
+
let projectedExtendedBalance = usdcAmountOnExtendedAvailableForTrade;
|
|
509
512
|
|
|
510
513
|
if (extendedAmount.isNegative()) {
|
|
511
514
|
projectedExtendedBalance = projectedExtendedBalance - extendedAmount.abs().toNumber();
|
|
@@ -530,7 +533,6 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
530
533
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
531
534
|
|
|
532
535
|
logger.info(`${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()}`);
|
|
533
|
-
let calls: Call[] = [];
|
|
534
536
|
let transactionResults: TransactionResult[] = [];
|
|
535
537
|
|
|
536
538
|
// Handle negative extendedAmount (initial withdrawal needed)
|
|
@@ -690,7 +692,6 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
690
692
|
}
|
|
691
693
|
}
|
|
692
694
|
}
|
|
693
|
-
|
|
694
695
|
return transactionResults;
|
|
695
696
|
} catch (err) {
|
|
696
697
|
logger.error(`Failed moving assets to vesu: ${err}`);
|
|
@@ -725,6 +726,15 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
725
726
|
return { calls: [], status: false, transactionMetadata: { protocolFrom: '', protocolTo: '', transactionType: 'DEPOSIT', usdAmount: '0', status: 'FAILED', cycleType: cycleType } };
|
|
726
727
|
}
|
|
727
728
|
|
|
729
|
+
/**
|
|
730
|
+
* This method is used to move assets between protocols
|
|
731
|
+
* @param params - The parameters for the move assets operation
|
|
732
|
+
* @param extendedAdapter - The extended adapter
|
|
733
|
+
* @param vesuAdapter - The vesu adapter
|
|
734
|
+
* @returns The transaction result
|
|
735
|
+
* If Extended amount is greater than amount of withdrawal from extended, then we need to open a long position
|
|
736
|
+
* so that the amount of withdrawal from extended is fullfilled
|
|
737
|
+
*/
|
|
728
738
|
async moveAssets(
|
|
729
739
|
params: {
|
|
730
740
|
amount: Web3Number;
|
|
@@ -745,23 +755,23 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
745
755
|
}
|
|
746
756
|
|
|
747
757
|
// Check minimum movement amounts before starting operations
|
|
748
|
-
const amountAbs = params.amount.abs();
|
|
749
|
-
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
}
|
|
757
|
-
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
}
|
|
758
|
+
// const amountAbs = params.amount.abs();
|
|
759
|
+
// if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
760
|
+
// if (amountAbs.lessThanOrEqualTo(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
761
|
+
// logger.warn(
|
|
762
|
+
// `Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
763
|
+
// );
|
|
764
|
+
// return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
765
|
+
// }
|
|
766
|
+
// }
|
|
767
|
+
// if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
768
|
+
// if (amountAbs.lessThanOrEqualTo(vesuAdapter.minimumVesuMovementAmount)) {
|
|
769
|
+
// logger.warn(
|
|
770
|
+
// `Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
771
|
+
// );
|
|
772
|
+
// return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
773
|
+
// }
|
|
774
|
+
// }
|
|
765
775
|
|
|
766
776
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
767
777
|
if (!avnuAdapter) {
|
|
@@ -787,7 +797,8 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
787
797
|
);
|
|
788
798
|
calls.push(call);
|
|
789
799
|
return this.createTransactionResult(calls, true, params, "DEPOSIT", params.cycleType);
|
|
790
|
-
}
|
|
800
|
+
}
|
|
801
|
+
else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
|
|
791
802
|
const extendedLeverage = calculateExtendedLevergae();
|
|
792
803
|
const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
793
804
|
if (!extendedHoldings) {
|
|
@@ -800,9 +811,26 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
800
811
|
);
|
|
801
812
|
logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets extendedHoldingAmount: ${extendedHoldingAmount.toNumber()}`);
|
|
802
813
|
if (params.amount.abs().greaterThan(extendedHoldingAmount)) {
|
|
803
|
-
const leftAmountAfterWithdrawalAmountInAccount = params.amount.abs().minus(extendedHoldingAmount);
|
|
814
|
+
const leftAmountAfterWithdrawalAmountInAccount = new Web3Number(Math.ceil(params.amount.abs().minus(extendedHoldingAmount).toNumber()), USDC_TOKEN_DECIMALS);
|
|
804
815
|
logger.info(`${VesuExtendedMultiplierStrategy.name}::moveAssets leftAmountAfterWithdrawalAmountInAccount: ${leftAmountAfterWithdrawalAmountInAccount.toNumber()}`);
|
|
805
|
-
|
|
816
|
+
let priceOfBTC;
|
|
817
|
+
const {
|
|
818
|
+
ask,
|
|
819
|
+
bid,
|
|
820
|
+
status
|
|
821
|
+
} = await extendedAdapter.fetchOrderBookBTCUSDC();
|
|
822
|
+
const price = ask.plus(bid).dividedBy(2);
|
|
823
|
+
if (status) {
|
|
824
|
+
priceOfBTC = price;
|
|
825
|
+
} else {
|
|
826
|
+
logger.error(`error fetching order book btc usdc: ${status}`);
|
|
827
|
+
priceOfBTC = collateralPrice.price;
|
|
828
|
+
}
|
|
829
|
+
const btcAmount = leftAmountAfterWithdrawalAmountInAccount.dividedBy(priceOfBTC);
|
|
830
|
+
/**
|
|
831
|
+
* If amount for withdrawal is greater than the amount in extended available for withdrawal,
|
|
832
|
+
* then we need to open a long position depending on the difference between the two
|
|
833
|
+
*/
|
|
806
834
|
const openLongPosition = btcAmount.multipliedBy(3).greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
807
835
|
extendedLeverage.toString(),
|
|
808
836
|
btcAmount.toNumber(),
|
|
@@ -856,6 +884,7 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
856
884
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
857
885
|
}
|
|
858
886
|
} else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
|
|
887
|
+
|
|
859
888
|
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, PositionTypeAvnuExtended.CLOSE);
|
|
860
889
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
861
890
|
logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
|
|
@@ -882,7 +911,10 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
882
911
|
);
|
|
883
912
|
calls.push(swapCall);
|
|
884
913
|
return this.createTransactionResult(calls, true, params, "WITHDRAWAL", params.cycleType);
|
|
885
|
-
|
|
914
|
+
|
|
915
|
+
}
|
|
916
|
+
else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
|
|
917
|
+
|
|
886
918
|
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, PositionTypeAvnuExtended.CLOSE);
|
|
887
919
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
888
920
|
logger.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
|
|
@@ -922,6 +954,7 @@ export class VesuExtendedMultiplierStrategy<
|
|
|
922
954
|
}
|
|
923
955
|
logger.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
|
|
924
956
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|
|
957
|
+
|
|
925
958
|
} catch (err) {
|
|
926
959
|
logger.error(`error moving assets: ${err}`);
|
|
927
960
|
return this.createTransactionResult([], false, params, "NONE", params.cycleType);
|