@strkfarm/sdk 2.0.0-dev.14 → 2.0.0-dev.15
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 +212 -228
- package/dist/index.browser.mjs +212 -228
- package/dist/index.d.ts +60 -28
- package/dist/index.js +212 -228
- package/dist/index.mjs +212 -228
- package/package.json +1 -1
- package/src/strategies/index.ts +2 -1
- package/src/strategies/universal-adapters/extended-adapter.ts +40 -11
- package/src/strategies/vesu-extended-strategy/services/operationService.ts +23 -13
- package/src/strategies/vesu-extended-strategy/types/transaction-metadata.ts +25 -0
- package/src/strategies/vesu-extended-strategy/vesu-extended-strategy.tsx +203 -235
|
@@ -93981,26 +93981,38 @@ spurious results.`);
|
|
|
93981
93981
|
try {
|
|
93982
93982
|
if (!this.client) {
|
|
93983
93983
|
logger2.error("Client not initialized");
|
|
93984
|
-
return
|
|
93984
|
+
return {
|
|
93985
|
+
status: false,
|
|
93986
|
+
receivedTxnHash: false
|
|
93987
|
+
};
|
|
93985
93988
|
}
|
|
93986
93989
|
if (amount.lessThanOrEqualTo(0)) {
|
|
93987
93990
|
logger2.error(
|
|
93988
93991
|
`Invalid withdrawal amount: ${amount.toNumber()}. Amount must be positive.`
|
|
93989
93992
|
);
|
|
93990
|
-
return
|
|
93993
|
+
return {
|
|
93994
|
+
status: false,
|
|
93995
|
+
receivedTxnHash: false
|
|
93996
|
+
};
|
|
93991
93997
|
}
|
|
93992
93998
|
if (amount.lessThanOrEqualTo(this.minimumExtendedMovementAmount)) {
|
|
93993
93999
|
logger2.warn(
|
|
93994
94000
|
`Withdrawal amount ${amount.toNumber()} is below minimum Extended movement amount ${this.minimumExtendedMovementAmount}. Skipping withdrawal.`
|
|
93995
94001
|
);
|
|
93996
|
-
return
|
|
94002
|
+
return {
|
|
94003
|
+
status: false,
|
|
94004
|
+
receivedTxnHash: false
|
|
94005
|
+
};
|
|
93997
94006
|
}
|
|
93998
94007
|
const holdings = await this.getExtendedDepositAmount();
|
|
93999
94008
|
if (!holdings) {
|
|
94000
94009
|
logger2.error(
|
|
94001
94010
|
"Cannot get holdings - unable to validate withdrawal amount"
|
|
94002
94011
|
);
|
|
94003
|
-
return
|
|
94012
|
+
return {
|
|
94013
|
+
status: false,
|
|
94014
|
+
receivedTxnHash: false
|
|
94015
|
+
};
|
|
94004
94016
|
}
|
|
94005
94017
|
const availableForWithdrawal = parseFloat(
|
|
94006
94018
|
holdings.availableForWithdrawal
|
|
@@ -94009,14 +94021,20 @@ spurious results.`);
|
|
|
94009
94021
|
logger2.error(
|
|
94010
94022
|
`Invalid availableForWithdrawal: ${holdings.availableForWithdrawal}. Expected a finite, non-negative number.`
|
|
94011
94023
|
);
|
|
94012
|
-
return
|
|
94024
|
+
return {
|
|
94025
|
+
status: false,
|
|
94026
|
+
receivedTxnHash: false
|
|
94027
|
+
};
|
|
94013
94028
|
}
|
|
94014
94029
|
const withdrawalAmount = amount.toNumber();
|
|
94015
94030
|
if (withdrawalAmount > availableForWithdrawal) {
|
|
94016
94031
|
logger2.error(
|
|
94017
94032
|
`Withdrawal amount ${withdrawalAmount} exceeds available balance ${availableForWithdrawal}`
|
|
94018
94033
|
);
|
|
94019
|
-
return
|
|
94034
|
+
return {
|
|
94035
|
+
status: false,
|
|
94036
|
+
receivedTxnHash: false
|
|
94037
|
+
};
|
|
94020
94038
|
}
|
|
94021
94039
|
logger2.info(
|
|
94022
94040
|
`Withdrawing ${withdrawalAmount} from Extended. Available balance: ${availableForWithdrawal}`
|
|
@@ -94029,15 +94047,24 @@ spurious results.`);
|
|
|
94029
94047
|
withdrawalRequest.data,
|
|
94030
94048
|
"WITHDRAWAL" /* WITHDRAWAL */
|
|
94031
94049
|
);
|
|
94032
|
-
return
|
|
94050
|
+
return {
|
|
94051
|
+
status: true,
|
|
94052
|
+
receivedTxnHash: withdrawalStatus
|
|
94053
|
+
};
|
|
94033
94054
|
}
|
|
94034
94055
|
logger2.error(
|
|
94035
94056
|
`Withdrawal request failed with status: ${withdrawalRequest.status}`
|
|
94036
94057
|
);
|
|
94037
|
-
return
|
|
94058
|
+
return {
|
|
94059
|
+
status: false,
|
|
94060
|
+
receivedTxnHash: false
|
|
94061
|
+
};
|
|
94038
94062
|
} catch (error2) {
|
|
94039
94063
|
logger2.error(`Error creating Withdraw Call: ${error2}`);
|
|
94040
|
-
return
|
|
94064
|
+
return {
|
|
94065
|
+
status: false,
|
|
94066
|
+
receivedTxnHash: false
|
|
94067
|
+
};
|
|
94041
94068
|
}
|
|
94042
94069
|
}
|
|
94043
94070
|
async getHealthFactor() {
|
|
@@ -98385,10 +98412,16 @@ spurious results.`);
|
|
|
98385
98412
|
proofGroups,
|
|
98386
98413
|
await proofsInfo.callConstructor({ amount })
|
|
98387
98414
|
);
|
|
98388
|
-
return
|
|
98415
|
+
return {
|
|
98416
|
+
calls: [approveCall, transferCall, call],
|
|
98417
|
+
status: true
|
|
98418
|
+
};
|
|
98389
98419
|
} catch (err2) {
|
|
98390
98420
|
logger2.error(`error moving assets to vault allocator: ${err2}`);
|
|
98391
|
-
return
|
|
98421
|
+
return {
|
|
98422
|
+
calls: [],
|
|
98423
|
+
status: false
|
|
98424
|
+
};
|
|
98392
98425
|
}
|
|
98393
98426
|
}
|
|
98394
98427
|
async shouldInvest() {
|
|
@@ -98637,9 +98670,10 @@ spurious results.`);
|
|
|
98637
98670
|
const vesuAmountDifferenceAbs = vesuAmountDifference.abs();
|
|
98638
98671
|
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()}`);
|
|
98639
98672
|
let calls = [];
|
|
98673
|
+
let transactionResults = [];
|
|
98640
98674
|
if (extendedAmount.isNegative() && extendedAmount.abs().greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
98641
98675
|
try {
|
|
98642
|
-
const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
|
|
98676
|
+
const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
|
|
98643
98677
|
{
|
|
98644
98678
|
to: Protocols.VAULT.name,
|
|
98645
98679
|
from: Protocols.EXTENDED.name,
|
|
@@ -98649,17 +98683,25 @@ spurious results.`);
|
|
|
98649
98683
|
vesuAdapter
|
|
98650
98684
|
);
|
|
98651
98685
|
if (extendedStatus) {
|
|
98652
|
-
|
|
98686
|
+
transactionResults.push({
|
|
98687
|
+
status: extendedStatus,
|
|
98688
|
+
calls: extendedCalls,
|
|
98689
|
+
transactionMetadata: {
|
|
98690
|
+
...extendedTransactionMetadata,
|
|
98691
|
+
transactionType: "DEPOSIT"
|
|
98692
|
+
}
|
|
98693
|
+
});
|
|
98653
98694
|
} else {
|
|
98654
|
-
return [];
|
|
98695
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE")];
|
|
98655
98696
|
}
|
|
98656
98697
|
} catch (err2) {
|
|
98657
98698
|
logger2.error(`Failed moving assets to vault: ${err2}`);
|
|
98699
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmount.abs() }, "NONE")];
|
|
98658
98700
|
}
|
|
98659
98701
|
}
|
|
98660
98702
|
if (vesuAmount.isNegative() && vesuAmount.abs().greaterThan(vesuAdapter.minimumVesuMovementAmount)) {
|
|
98661
98703
|
try {
|
|
98662
|
-
const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
|
|
98704
|
+
const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
|
|
98663
98705
|
{
|
|
98664
98706
|
to: Protocols.EXTENDED.name,
|
|
98665
98707
|
from: Protocols.VESU.name,
|
|
@@ -98668,18 +98710,26 @@ spurious results.`);
|
|
|
98668
98710
|
extendedAdapter,
|
|
98669
98711
|
vesuAdapter
|
|
98670
98712
|
);
|
|
98671
|
-
calls.push(...vesuCalls);
|
|
98672
98713
|
if (!vesuStatus) {
|
|
98673
|
-
return [];
|
|
98674
|
-
}
|
|
98714
|
+
return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE")];
|
|
98715
|
+
}
|
|
98716
|
+
transactionResults.push({
|
|
98717
|
+
status: vesuStatus,
|
|
98718
|
+
calls: vesuCalls,
|
|
98719
|
+
transactionMetadata: {
|
|
98720
|
+
...vesuTransactionMetadata,
|
|
98721
|
+
transactionType: "DEPOSIT"
|
|
98722
|
+
}
|
|
98723
|
+
});
|
|
98675
98724
|
} catch (err2) {
|
|
98676
|
-
logger2.error(`Failed moving assets to vault: ${err2}`);
|
|
98725
|
+
logger2.error(`Failed moving assets to extended via vault allocator: ${err2}`);
|
|
98726
|
+
return [this.createTransactionResult([], false, { from: Protocols.VESU.name, to: Protocols.EXTENDED.name, amount: vesuAmount.abs() }, "NONE")];
|
|
98677
98727
|
}
|
|
98678
98728
|
}
|
|
98679
98729
|
if (extendedAmountDifferenceAbs.greaterThan(extendedAdapter.minimumExtendedMovementAmount)) {
|
|
98680
98730
|
if (extendedAmountDifference.greaterThan(0)) {
|
|
98681
98731
|
try {
|
|
98682
|
-
const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
|
|
98732
|
+
const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
|
|
98683
98733
|
{
|
|
98684
98734
|
to: Protocols.EXTENDED.name,
|
|
98685
98735
|
from: Protocols.VAULT.name,
|
|
@@ -98689,18 +98739,22 @@ spurious results.`);
|
|
|
98689
98739
|
vesuAdapter
|
|
98690
98740
|
);
|
|
98691
98741
|
if (extendedStatus) {
|
|
98692
|
-
|
|
98742
|
+
transactionResults.push({
|
|
98743
|
+
status: extendedStatus,
|
|
98744
|
+
calls: extendedCalls,
|
|
98745
|
+
transactionMetadata: extendedTransactionMetadata
|
|
98746
|
+
});
|
|
98693
98747
|
} else {
|
|
98694
98748
|
logger2.error(`Failed to move assets to extended - operation returned false status`);
|
|
98695
|
-
return [];
|
|
98749
|
+
return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE")];
|
|
98696
98750
|
}
|
|
98697
98751
|
} catch (err2) {
|
|
98698
98752
|
logger2.error(`Failed moving assets to extended: ${err2}`);
|
|
98699
|
-
return [];
|
|
98753
|
+
return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.EXTENDED.name, amount: extendedAmountDifference }, "NONE")];
|
|
98700
98754
|
}
|
|
98701
98755
|
} else if (extendedAmountDifference.lessThan(0)) {
|
|
98702
98756
|
try {
|
|
98703
|
-
const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
|
|
98757
|
+
const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
|
|
98704
98758
|
{
|
|
98705
98759
|
to: Protocols.VAULT.name,
|
|
98706
98760
|
from: Protocols.EXTENDED.name,
|
|
@@ -98710,14 +98764,21 @@ spurious results.`);
|
|
|
98710
98764
|
vesuAdapter
|
|
98711
98765
|
);
|
|
98712
98766
|
if (extendedStatus) {
|
|
98713
|
-
|
|
98767
|
+
transactionResults.push({
|
|
98768
|
+
status: extendedStatus,
|
|
98769
|
+
calls: extendedCalls,
|
|
98770
|
+
transactionMetadata: {
|
|
98771
|
+
...extendedTransactionMetadata,
|
|
98772
|
+
transactionType: "DEPOSIT"
|
|
98773
|
+
}
|
|
98774
|
+
});
|
|
98714
98775
|
} else {
|
|
98715
98776
|
logger2.error(`Failed to withdraw from extended - operation returned false status`);
|
|
98716
|
-
return [];
|
|
98777
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE")];
|
|
98717
98778
|
}
|
|
98718
98779
|
} catch (err2) {
|
|
98719
98780
|
logger2.error(`Failed moving assets from extended to vault: ${err2}`);
|
|
98720
|
-
return [];
|
|
98781
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: extendedAmountDifferenceAbs }, "NONE")];
|
|
98721
98782
|
}
|
|
98722
98783
|
}
|
|
98723
98784
|
}
|
|
@@ -98728,7 +98789,7 @@ spurious results.`);
|
|
|
98728
98789
|
);
|
|
98729
98790
|
} else {
|
|
98730
98791
|
try {
|
|
98731
|
-
const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
|
|
98792
|
+
const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
|
|
98732
98793
|
{
|
|
98733
98794
|
to: Protocols.VAULT.name,
|
|
98734
98795
|
from: Protocols.EXTENDED.name,
|
|
@@ -98739,20 +98800,46 @@ spurious results.`);
|
|
|
98739
98800
|
);
|
|
98740
98801
|
if (!vesuStatus) {
|
|
98741
98802
|
logger2.error(`Failed to move assets to vesu - operation returned false status`);
|
|
98742
|
-
return [];
|
|
98803
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE")];
|
|
98743
98804
|
}
|
|
98744
|
-
|
|
98805
|
+
transactionResults.push({
|
|
98806
|
+
status: vesuStatus,
|
|
98807
|
+
calls: vesuCalls,
|
|
98808
|
+
transactionMetadata: {
|
|
98809
|
+
...vesuTransactionMetadata,
|
|
98810
|
+
transactionType: "DEPOSIT"
|
|
98811
|
+
}
|
|
98812
|
+
});
|
|
98745
98813
|
} catch (err2) {
|
|
98746
98814
|
logger2.error(`Failed moving assets to vault: ${err2}`);
|
|
98747
|
-
return [];
|
|
98815
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: vesuAmountDifference }, "NONE")];
|
|
98748
98816
|
}
|
|
98749
98817
|
}
|
|
98750
98818
|
}
|
|
98751
|
-
return
|
|
98819
|
+
return transactionResults;
|
|
98752
98820
|
} catch (err2) {
|
|
98753
98821
|
logger2.error(`Failed moving assets to vesu: ${err2}`);
|
|
98754
|
-
return [];
|
|
98822
|
+
return [this.createTransactionResult([], false, { from: Protocols.EXTENDED.name, to: Protocols.VAULT.name, amount: new Web3Number(0, USDC_TOKEN_DECIMALS) }, "NONE")];
|
|
98823
|
+
}
|
|
98824
|
+
}
|
|
98825
|
+
/**
|
|
98826
|
+
* Helper method to create transaction result with metadata
|
|
98827
|
+
*/
|
|
98828
|
+
createTransactionResult(calls, status, params, transactionType) {
|
|
98829
|
+
if (status) {
|
|
98830
|
+
return {
|
|
98831
|
+
calls,
|
|
98832
|
+
status,
|
|
98833
|
+
transactionMetadata: {
|
|
98834
|
+
protocolFrom: params.from,
|
|
98835
|
+
protocolTo: params.to,
|
|
98836
|
+
transactionType,
|
|
98837
|
+
usdAmount: params.amount.abs().toFixed(),
|
|
98838
|
+
status: "PENDING"
|
|
98839
|
+
}
|
|
98840
|
+
};
|
|
98755
98841
|
}
|
|
98842
|
+
return { calls: [], status: false, transactionMetadata: { protocolFrom: "", protocolTo: "", transactionType: "DEPOSIT", usdAmount: "0", status: "FAILED" } };
|
|
98756
98843
|
}
|
|
98757
98844
|
async moveAssets(params, extendedAdapter, vesuAdapter) {
|
|
98758
98845
|
try {
|
|
@@ -98760,10 +98847,7 @@ spurious results.`);
|
|
|
98760
98847
|
logger2.error(
|
|
98761
98848
|
`Invalid amount for moveAssets: ${params.amount.toNumber()}. Amount must be positive.`
|
|
98762
98849
|
);
|
|
98763
|
-
return
|
|
98764
|
-
calls: [],
|
|
98765
|
-
status: false
|
|
98766
|
-
};
|
|
98850
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98767
98851
|
}
|
|
98768
98852
|
const amountAbs = params.amount.abs();
|
|
98769
98853
|
if (params.from === Protocols.EXTENDED.name || params.to === Protocols.EXTENDED.name) {
|
|
@@ -98771,10 +98855,7 @@ spurious results.`);
|
|
|
98771
98855
|
logger2.warn(
|
|
98772
98856
|
`Amount ${amountAbs.toNumber()} is below minimum Extended movement amount ${extendedAdapter.minimumExtendedMovementAmount}. Skipping operation.`
|
|
98773
98857
|
);
|
|
98774
|
-
return
|
|
98775
|
-
calls: [],
|
|
98776
|
-
status: false
|
|
98777
|
-
};
|
|
98858
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98778
98859
|
}
|
|
98779
98860
|
}
|
|
98780
98861
|
if (params.from === Protocols.VESU.name || params.to === Protocols.VESU.name) {
|
|
@@ -98782,19 +98863,13 @@ spurious results.`);
|
|
|
98782
98863
|
logger2.warn(
|
|
98783
98864
|
`Amount ${amountAbs.toNumber()} is below minimum Vesu movement amount ${vesuAdapter.minimumVesuMovementAmount}. Skipping operation.`
|
|
98784
98865
|
);
|
|
98785
|
-
return
|
|
98786
|
-
calls: [],
|
|
98787
|
-
status: false
|
|
98788
|
-
};
|
|
98866
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98789
98867
|
}
|
|
98790
98868
|
}
|
|
98791
98869
|
const avnuAdapter = await this.getAvnuAdapter();
|
|
98792
98870
|
if (!avnuAdapter) {
|
|
98793
98871
|
logger2.error(`avnu adapter not found: ${avnuAdapter}`);
|
|
98794
|
-
return
|
|
98795
|
-
calls: [],
|
|
98796
|
-
status: false
|
|
98797
|
-
};
|
|
98872
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98798
98873
|
}
|
|
98799
98874
|
logger2.info(`moveAssets params, ${JSON.stringify(params)}`);
|
|
98800
98875
|
const collateralToken = vesuAdapter.config.supportedPositions[0].asset;
|
|
@@ -98813,19 +98888,13 @@ spurious results.`);
|
|
|
98813
98888
|
await proofsInfo.callConstructor({ amount: params.amount })
|
|
98814
98889
|
);
|
|
98815
98890
|
calls.push(call);
|
|
98816
|
-
return
|
|
98817
|
-
calls: [call],
|
|
98818
|
-
status: true
|
|
98819
|
-
};
|
|
98891
|
+
return this.createTransactionResult(calls, true, params, "DEPOSIT");
|
|
98820
98892
|
} else if (params.to === Protocols.VAULT.name && params.from === Protocols.EXTENDED.name) {
|
|
98821
98893
|
const extendedLeverage = calculateExtendedLevergae();
|
|
98822
98894
|
const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
98823
98895
|
if (!extendedHoldings) {
|
|
98824
98896
|
logger2.error(`error getting extended holdings: ${extendedHoldings}`);
|
|
98825
|
-
return
|
|
98826
|
-
calls: [],
|
|
98827
|
-
status: false
|
|
98828
|
-
};
|
|
98897
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98829
98898
|
}
|
|
98830
98899
|
const extendedHoldingAmount = new Web3Number(
|
|
98831
98900
|
extendedHoldings.availableForWithdrawal,
|
|
@@ -98852,36 +98921,36 @@ spurious results.`);
|
|
|
98852
98921
|
const updatedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
98853
98922
|
if (!updatedHoldings || new Web3Number(updatedHoldings.availableForWithdrawal, USDC_TOKEN_DECIMALS).lessThan(params.amount.abs())) {
|
|
98854
98923
|
logger2.error(`Insufficient balance after opening position. Available: ${updatedHoldings?.availableForWithdrawal}, Needed: ${params.amount.abs()}`);
|
|
98855
|
-
return
|
|
98924
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98856
98925
|
}
|
|
98857
98926
|
}
|
|
98858
|
-
const
|
|
98859
|
-
|
|
98927
|
+
const {
|
|
98928
|
+
status: withdrawalFromExtendedStatus,
|
|
98929
|
+
receivedTxnHash: withdrawalFromExtendedTxnHash
|
|
98930
|
+
} = await extendedAdapter.withdrawFromExtended(params.amount);
|
|
98931
|
+
logger2.info(`withdrawalFromExtendedStatus: ${withdrawalFromExtendedStatus}, withdrawalFromExtendedTxnHash: ${withdrawalFromExtendedTxnHash}`);
|
|
98932
|
+
if (withdrawalFromExtendedStatus && withdrawalFromExtendedTxnHash) {
|
|
98860
98933
|
const extendedHoldings2 = await extendedAdapter.getExtendedDepositAmount();
|
|
98861
98934
|
logger2.info(`extendedHoldings after withdrawal ${extendedHoldings2?.availableForWithdrawal}`);
|
|
98862
98935
|
await new Promise((resolve) => setTimeout(resolve, 5e3));
|
|
98863
|
-
const calls = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
|
|
98864
|
-
if (calls.length > 0) {
|
|
98865
|
-
return
|
|
98866
|
-
|
|
98867
|
-
|
|
98868
|
-
};
|
|
98936
|
+
const { calls, status } = await this.moveAssetsToVaultAllocator(params.amount, extendedAdapter);
|
|
98937
|
+
if (calls.length > 0 && status) {
|
|
98938
|
+
return this.createTransactionResult(calls, true, params, "WITHDRAWAL");
|
|
98939
|
+
} else {
|
|
98940
|
+
return this.createTransactionResult([], true, params, "WITHDRAWAL");
|
|
98869
98941
|
}
|
|
98942
|
+
} else if (withdrawalFromExtendedStatus && !withdrawalFromExtendedTxnHash) {
|
|
98943
|
+
logger2.error("withdrawal from extended successful, but funds didn't get transferred to the wallet");
|
|
98944
|
+
return this.createTransactionResult([], true, params, "WITHDRAWAL");
|
|
98870
98945
|
} else {
|
|
98871
98946
|
logger2.error("withdrawal from extended failed");
|
|
98872
|
-
return
|
|
98873
|
-
calls: [],
|
|
98874
|
-
status: false
|
|
98875
|
-
};
|
|
98947
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98876
98948
|
}
|
|
98877
98949
|
} else if (params.to === Protocols.VAULT.name && params.from === Protocols.VESU.name) {
|
|
98878
98950
|
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
|
|
98879
98951
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
98880
98952
|
logger2.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
|
|
98881
|
-
return
|
|
98882
|
-
calls: [],
|
|
98883
|
-
status: false
|
|
98884
|
-
};
|
|
98953
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98885
98954
|
}
|
|
98886
98955
|
const vesuAmountInBTC = new Web3Number(
|
|
98887
98956
|
params.amount.dividedBy(collateralPrice.price).toFixed(WBTC_TOKEN_DECIMALS),
|
|
@@ -98902,18 +98971,12 @@ spurious results.`);
|
|
|
98902
98971
|
await swapProofsInfo.callConstructor({ amount: vesuAmountInBTC })
|
|
98903
98972
|
);
|
|
98904
98973
|
calls.push(swapCall);
|
|
98905
|
-
return
|
|
98906
|
-
calls,
|
|
98907
|
-
status: true
|
|
98908
|
-
};
|
|
98974
|
+
return this.createTransactionResult(calls, true, params, "WITHDRAWAL");
|
|
98909
98975
|
} else if (params.to === Protocols.EXTENDED.name && params.from === Protocols.VESU.name) {
|
|
98910
98976
|
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "close" /* CLOSE */);
|
|
98911
98977
|
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
98912
98978
|
logger2.warn(`price difference between avnu and extended doesn't fit the range for close position, ${avnuAdapter.config.maximumExtendedPriceDifferenceForSwapClosing}`);
|
|
98913
|
-
return
|
|
98914
|
-
calls: [],
|
|
98915
|
-
status: false
|
|
98916
|
-
};
|
|
98979
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98917
98980
|
}
|
|
98918
98981
|
const vesuAmountInBTC = new Web3Number(
|
|
98919
98982
|
params.amount.dividedBy(collateralPrice.price).toNumber(),
|
|
@@ -98944,127 +99007,21 @@ spurious results.`);
|
|
|
98944
99007
|
await proofsInfoDeposit.callConstructor({ amount: params.amount })
|
|
98945
99008
|
);
|
|
98946
99009
|
calls.push(callDeposit);
|
|
98947
|
-
return
|
|
98948
|
-
calls,
|
|
98949
|
-
status: true
|
|
98950
|
-
};
|
|
99010
|
+
return this.createTransactionResult(calls, true, params, "DEPOSIT");
|
|
98951
99011
|
}
|
|
98952
|
-
|
|
98953
|
-
|
|
98954
|
-
status: false
|
|
98955
|
-
};
|
|
99012
|
+
logger2.error(`Unsupported assets movement: ${params.from} to ${params.to}`);
|
|
99013
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98956
99014
|
} catch (err2) {
|
|
98957
99015
|
logger2.error(`error moving assets: ${err2}`);
|
|
98958
|
-
return
|
|
98959
|
-
calls: [],
|
|
98960
|
-
status: false
|
|
98961
|
-
};
|
|
99016
|
+
return this.createTransactionResult([], false, params, "NONE");
|
|
98962
99017
|
}
|
|
98963
99018
|
}
|
|
98964
99019
|
async handleDeposit() {
|
|
98965
99020
|
try {
|
|
98966
|
-
|
|
98967
|
-
const extendedAdapter = await this.getExtendedAdapter();
|
|
98968
|
-
const avnuAdapter = await this.getAvnuAdapter();
|
|
98969
|
-
if (!vesuAdapter || !extendedAdapter || !extendedAdapter.client || !avnuAdapter) {
|
|
98970
|
-
logger2.error(
|
|
98971
|
-
"vesu or extended adapter not found",
|
|
98972
|
-
vesuAdapter,
|
|
98973
|
-
extendedAdapter
|
|
98974
|
-
);
|
|
98975
|
-
return {
|
|
98976
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
98977
|
-
calls: []
|
|
98978
|
-
};
|
|
98979
|
-
}
|
|
98980
|
-
const extendedLeverage = calculateExtendedLevergae();
|
|
98981
|
-
const isPriceDifferenceBetweenAvnuAndExtended = await this.checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, "open" /* OPEN */);
|
|
98982
|
-
if (!isPriceDifferenceBetweenAvnuAndExtended) {
|
|
98983
|
-
logger2.error("price difference between avnu and extended doesn't fit the range");
|
|
98984
|
-
return {
|
|
98985
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
98986
|
-
calls: []
|
|
98987
|
-
};
|
|
98988
|
-
}
|
|
98989
|
-
const position = await extendedAdapter.getAllOpenPositions();
|
|
98990
|
-
if (!position) {
|
|
98991
|
-
logger2.error("error getting extended position", position);
|
|
98992
|
-
return {
|
|
98993
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
98994
|
-
calls: []
|
|
98995
|
-
};
|
|
98996
|
-
}
|
|
98997
|
-
const extendedPositionValue = position.length > 0 ? parseFloat(position[0].value) : 0;
|
|
98998
|
-
const BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE = BUFFER_USDC_IN_WITHDRAWAL;
|
|
98999
|
-
const extendedHoldings = await extendedAdapter.getExtendedDepositAmount();
|
|
99000
|
-
if (!extendedHoldings) {
|
|
99001
|
-
logger2.error(`error getting extended holdings: ${extendedHoldings}`);
|
|
99002
|
-
return {
|
|
99003
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
99004
|
-
calls: []
|
|
99005
|
-
};
|
|
99006
|
-
}
|
|
99007
|
-
const extendedHoldingAmount = new Web3Number(
|
|
99008
|
-
extendedHoldings.availableForWithdrawal,
|
|
99009
|
-
USDC_TOKEN_DECIMALS
|
|
99010
|
-
);
|
|
99011
|
-
const {
|
|
99012
|
-
collateralTokenAmount
|
|
99013
|
-
} = await vesuAdapter.vesuAdapter.getAssetPrices();
|
|
99014
|
-
const { collateralPrice } = await this.getAssetPrices();
|
|
99015
|
-
const { vesuAmountInBTC, extendedAmountInBTC } = calculateVesUPositionSizeGivenExtended(
|
|
99016
|
-
extendedPositionValue,
|
|
99017
|
-
extendedHoldingAmount.minus(BUFFER_AMOUNT_IN_AVAILABLE_FOR_TRADE),
|
|
99018
|
-
collateralTokenAmount,
|
|
99019
|
-
collateralPrice.price
|
|
99020
|
-
);
|
|
99021
|
-
logger2.info(`vesuAmountInBTC ${vesuAmountInBTC}, extendedAmountInBTC ${extendedAmountInBTC}`);
|
|
99022
|
-
let calls = [];
|
|
99023
|
-
if (vesuAmountInBTC.greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
|
|
99024
|
-
const proofsInfo = vesuAdapter.getProofs(true, this.getMerkleTree());
|
|
99025
|
-
const proofGroups = proofsInfo.proofs;
|
|
99026
|
-
const call = this.getManageCall(
|
|
99027
|
-
proofGroups,
|
|
99028
|
-
await proofsInfo.callConstructor({
|
|
99029
|
-
amount: vesuAmountInBTC
|
|
99030
|
-
})
|
|
99031
|
-
);
|
|
99032
|
-
const { amount: wbtcAmountInVaultAllocator } = await this.getUnusedBalanceWBTC();
|
|
99033
|
-
if (wbtcAmountInVaultAllocator.lessThan(vesuAmountInBTC)) {
|
|
99034
|
-
const swapProofsInfo = avnuAdapter.getProofs(true, this.getMerkleTree());
|
|
99035
|
-
const swapProofGroups = swapProofsInfo.proofs;
|
|
99036
|
-
const swapCall = this.getManageCall(
|
|
99037
|
-
swapProofGroups,
|
|
99038
|
-
await swapProofsInfo.callConstructor({
|
|
99039
|
-
amount: vesuAmountInBTC
|
|
99040
|
-
})
|
|
99041
|
-
);
|
|
99042
|
-
calls.push(swapCall);
|
|
99043
|
-
}
|
|
99044
|
-
calls.push(call);
|
|
99045
|
-
}
|
|
99046
|
-
const shortPosition = extendedAmountInBTC.multipliedBy(3).abs().greaterThan(MINIMUM_EXTENDED_POSITION_SIZE) ? await extendedAdapter.createOrder(
|
|
99047
|
-
extendedLeverage.toString(),
|
|
99048
|
-
extendedAmountInBTC.toNumber(),
|
|
99049
|
-
"SELL" /* SELL */
|
|
99050
|
-
) : null;
|
|
99051
|
-
if (!shortPosition && extendedAmountInBTC.multipliedBy(3).abs().greaterThan(MINIMUM_EXTENDED_POSITION_SIZE)) {
|
|
99052
|
-
logger2.error(`error creating short position thus no position to be opened on vesu: ${shortPosition}`);
|
|
99053
|
-
return {
|
|
99054
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
99055
|
-
calls: []
|
|
99056
|
-
};
|
|
99057
|
-
}
|
|
99058
|
-
return {
|
|
99059
|
-
extendedAmountInBTC,
|
|
99060
|
-
calls
|
|
99061
|
-
};
|
|
99021
|
+
return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE");
|
|
99062
99022
|
} catch (err2) {
|
|
99063
99023
|
logger2.error(`error handling deposit: ${err2}`);
|
|
99064
|
-
return {
|
|
99065
|
-
extendedAmountInBTC: new Web3Number(0, 0),
|
|
99066
|
-
calls: []
|
|
99067
|
-
};
|
|
99024
|
+
return this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.VAULT.name, amount: new Web3Number(0, 0) }, "NONE");
|
|
99068
99025
|
}
|
|
99069
99026
|
}
|
|
99070
99027
|
async checkPriceDifferenceBetweenAvnuAndExtended(extendedAdapter, vesuAdapter, avnuAdapter, positionType) {
|
|
@@ -99109,12 +99066,8 @@ spurious results.`);
|
|
|
99109
99066
|
const withdrawCall2 = await this.getBringLiquidityCall({
|
|
99110
99067
|
amount: usdcBalanceVaultAllocator.amount
|
|
99111
99068
|
});
|
|
99112
|
-
logger2.info("withdraw call", withdrawCall2);
|
|
99113
99069
|
calls.push(withdrawCall2);
|
|
99114
|
-
return {
|
|
99115
|
-
calls,
|
|
99116
|
-
status: true
|
|
99117
|
-
};
|
|
99070
|
+
return [this.createTransactionResult(calls, true, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "WITHDRAWAL")];
|
|
99118
99071
|
}
|
|
99119
99072
|
const vesuAdapter = await this.getVesuAdapter();
|
|
99120
99073
|
const extendedAdapter = await this.getExtendedAdapter();
|
|
@@ -99123,11 +99076,9 @@ spurious results.`);
|
|
|
99123
99076
|
logger2.error(
|
|
99124
99077
|
`vesu or extended adapter not found: vesuAdapter=${vesuAdapter}, extendedAdapter=${extendedAdapter}`
|
|
99125
99078
|
);
|
|
99126
|
-
return {
|
|
99127
|
-
calls,
|
|
99128
|
-
status
|
|
99129
|
-
};
|
|
99079
|
+
return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
|
|
99130
99080
|
}
|
|
99081
|
+
let transactionResults = [];
|
|
99131
99082
|
const { collateralTokenAmount } = await vesuAdapter.vesuAdapter.getAssetPrices();
|
|
99132
99083
|
const {
|
|
99133
99084
|
collateralPrice
|
|
@@ -99136,10 +99087,7 @@ spurious results.`);
|
|
|
99136
99087
|
if (!extendedPositon) {
|
|
99137
99088
|
status = false;
|
|
99138
99089
|
logger2.error("error getting extended position", extendedPositon);
|
|
99139
|
-
return {
|
|
99140
|
-
calls,
|
|
99141
|
-
status
|
|
99142
|
-
};
|
|
99090
|
+
return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
|
|
99143
99091
|
}
|
|
99144
99092
|
const amountDistributionForWithdrawal = await calculateAmountDistributionForWithdrawal(
|
|
99145
99093
|
usdcBalanceDifference,
|
|
@@ -99152,14 +99100,11 @@ spurious results.`);
|
|
|
99152
99100
|
logger2.error(
|
|
99153
99101
|
`error calculating amount distribution for withdrawal: ${amountDistributionForWithdrawal}`
|
|
99154
99102
|
);
|
|
99155
|
-
return {
|
|
99156
|
-
calls,
|
|
99157
|
-
status
|
|
99158
|
-
};
|
|
99103
|
+
return [this.createTransactionResult(calls, status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
|
|
99159
99104
|
}
|
|
99160
99105
|
const { vesu_amount, extended_amount } = amountDistributionForWithdrawal;
|
|
99161
99106
|
if (status && vesu_amount.greaterThan(0)) {
|
|
99162
|
-
const { calls: vesuCalls, status: vesuStatus } = await this.moveAssets(
|
|
99107
|
+
const { calls: vesuCalls, status: vesuStatus, transactionMetadata: vesuTransactionMetadata } = await this.moveAssets(
|
|
99163
99108
|
{
|
|
99164
99109
|
amount: vesu_amount,
|
|
99165
99110
|
from: Protocols.VESU.name,
|
|
@@ -99169,10 +99114,14 @@ spurious results.`);
|
|
|
99169
99114
|
vesuAdapter
|
|
99170
99115
|
);
|
|
99171
99116
|
status = vesuStatus;
|
|
99172
|
-
|
|
99117
|
+
transactionResults.push({
|
|
99118
|
+
status: vesuStatus,
|
|
99119
|
+
calls: vesuCalls,
|
|
99120
|
+
transactionMetadata: vesuTransactionMetadata
|
|
99121
|
+
});
|
|
99173
99122
|
}
|
|
99174
99123
|
if (status && extended_amount.greaterThan(0)) {
|
|
99175
|
-
const { calls: extendedCalls, status: extendedStatus } = await this.moveAssets(
|
|
99124
|
+
const { calls: extendedCalls, status: extendedStatus, transactionMetadata: extendedTransactionMetadata } = await this.moveAssets(
|
|
99176
99125
|
{
|
|
99177
99126
|
amount: extended_amount,
|
|
99178
99127
|
from: Protocols.EXTENDED.name,
|
|
@@ -99183,30 +99132,35 @@ spurious results.`);
|
|
|
99183
99132
|
);
|
|
99184
99133
|
status = extendedStatus;
|
|
99185
99134
|
if (status) {
|
|
99186
|
-
|
|
99135
|
+
transactionResults.push({
|
|
99136
|
+
status: extendedStatus,
|
|
99137
|
+
calls: extendedCalls,
|
|
99138
|
+
transactionMetadata: extendedTransactionMetadata
|
|
99139
|
+
});
|
|
99187
99140
|
} else {
|
|
99188
99141
|
logger2.error("error moving assets to vault: extendedStatus: ${extendedStatus}");
|
|
99189
|
-
return {
|
|
99190
|
-
calls: [],
|
|
99191
|
-
status
|
|
99192
|
-
};
|
|
99142
|
+
return [this.createTransactionResult([], status, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
|
|
99193
99143
|
}
|
|
99194
99144
|
}
|
|
99195
99145
|
const withdrawCall = await this.getBringLiquidityCall({
|
|
99196
99146
|
amount
|
|
99197
99147
|
});
|
|
99198
99148
|
logger2.info("withdraw call", withdrawCall);
|
|
99199
|
-
|
|
99200
|
-
|
|
99201
|
-
calls,
|
|
99202
|
-
|
|
99203
|
-
|
|
99149
|
+
transactionResults.push({
|
|
99150
|
+
status,
|
|
99151
|
+
calls: [withdrawCall],
|
|
99152
|
+
transactionMetadata: {
|
|
99153
|
+
protocolFrom: Protocols.VAULT.name,
|
|
99154
|
+
protocolTo: Protocols.NONE.name,
|
|
99155
|
+
transactionType: "WITHDRAWAL",
|
|
99156
|
+
usdAmount: amount.toFixed(),
|
|
99157
|
+
status: "PENDING"
|
|
99158
|
+
}
|
|
99159
|
+
});
|
|
99160
|
+
return transactionResults;
|
|
99204
99161
|
} catch (err2) {
|
|
99205
99162
|
logger2.error(`error handling withdrawal: ${err2}`);
|
|
99206
|
-
return {
|
|
99207
|
-
calls: [],
|
|
99208
|
-
status: false
|
|
99209
|
-
};
|
|
99163
|
+
return [this.createTransactionResult([], false, { from: Protocols.VAULT.name, to: Protocols.NONE.name, amount }, "NONE")];
|
|
99210
99164
|
}
|
|
99211
99165
|
}
|
|
99212
99166
|
async getAUM() {
|
|
@@ -99253,6 +99207,36 @@ spurious results.`);
|
|
|
99253
99207
|
splits: [realAUM, estimatedAUMDelta]
|
|
99254
99208
|
};
|
|
99255
99209
|
}
|
|
99210
|
+
async processTransactionDataFromSDK(txnData) {
|
|
99211
|
+
try {
|
|
99212
|
+
const txnsToBeExecuted = txnData.filter((txn) => {
|
|
99213
|
+
return txn.transactionMetadata.transactionType !== "NONE" && txn.transactionMetadata.protocolFrom !== "" && txn.transactionMetadata.protocolTo !== "";
|
|
99214
|
+
});
|
|
99215
|
+
const callsToBeExecutedFinal = txnsToBeExecuted.flatMap((txn) => txn.calls);
|
|
99216
|
+
const txnMetadata = txnsToBeExecuted.map((txn) => txn.transactionMetadata);
|
|
99217
|
+
return { callsToBeExecutedFinal, txnMetadata };
|
|
99218
|
+
} catch (err2) {
|
|
99219
|
+
logger2.error(`error processing transaction data from SDK: ${err2}`);
|
|
99220
|
+
return null;
|
|
99221
|
+
}
|
|
99222
|
+
}
|
|
99223
|
+
async processTransactionMetadata(txnMetadata, extendedIntentFulfilled) {
|
|
99224
|
+
try {
|
|
99225
|
+
const txnMetadataNew = txnMetadata.map((txn) => {
|
|
99226
|
+
const isExtendedProtocol = txn.protocolFrom === Protocols.EXTENDED.name || txn.protocolTo === Protocols.EXTENDED.name;
|
|
99227
|
+
if (isExtendedProtocol) {
|
|
99228
|
+
txn.status = extendedIntentFulfilled ? "COMPLETED" : "PENDING";
|
|
99229
|
+
} else {
|
|
99230
|
+
txn.status = "COMPLETED";
|
|
99231
|
+
}
|
|
99232
|
+
return txn;
|
|
99233
|
+
});
|
|
99234
|
+
return txnMetadataNew;
|
|
99235
|
+
} catch (err2) {
|
|
99236
|
+
logger2.error(`error processing transaction data from SDK: ${err2}`);
|
|
99237
|
+
return null;
|
|
99238
|
+
}
|
|
99239
|
+
}
|
|
99256
99240
|
};
|
|
99257
99241
|
function getLooperSettings2(lstSymbol, underlyingSymbol, vaultSettings, pool1, extendedBackendUrl, extendedApiKey, vaultIdExtended, minimumExtendedMovementAmount, minimumVesuMovementAmount, minimumExtendedRetriesDelayForOrderStatus, minimumExtendedPriceDifferenceForSwapOpen, maximumExtendedPriceDifferenceForSwapClosing) {
|
|
99258
99242
|
vaultSettings.leafAdapters = [];
|