@haven-fi/solauto-sdk 1.0.582 → 1.0.584
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/constants/solautoConstants.d.ts +1 -0
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/constants/solautoConstants.js +4 -10
- package/dist/generated/accounts/solautoPosition.js +2 -2
- package/dist/generated/errors/solauto.d.ts +14 -2
- package/dist/generated/errors/solauto.d.ts.map +1 -1
- package/dist/generated/errors/solauto.js +27 -5
- package/dist/generated/instructions/claimReferralFees.d.ts +1 -1
- package/dist/generated/instructions/claimReferralFees.d.ts.map +1 -1
- package/dist/generated/instructions/closePosition.d.ts +1 -1
- package/dist/generated/instructions/closePosition.d.ts.map +1 -1
- package/dist/generated/instructions/closePosition.js +2 -2
- package/dist/generated/instructions/marginfiOpenPosition.d.ts +1 -3
- package/dist/generated/instructions/marginfiOpenPosition.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiOpenPosition.js +0 -1
- package/dist/generated/instructions/marginfiRebalance.d.ts +7 -3
- package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiRebalance.js +3 -1
- package/dist/generated/types/index.d.ts +7 -1
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +7 -1
- package/dist/generated/types/positionData.d.ts +2 -2
- package/dist/generated/types/positionData.d.ts.map +1 -1
- package/dist/generated/types/positionData.js +1 -1
- package/dist/generated/types/positionState.d.ts +7 -7
- package/dist/generated/types/positionState.d.ts.map +1 -1
- package/dist/generated/types/positionState.js +3 -3
- package/dist/generated/types/{positionTokenUsage.d.ts → positionTokenState.d.ts} +6 -8
- package/dist/generated/types/positionTokenState.d.ts.map +1 -0
- package/dist/generated/types/{positionTokenUsage.js → positionTokenState.js} +6 -7
- package/dist/generated/types/rebalanceData.d.ts +7 -13
- package/dist/generated/types/rebalanceData.d.ts.map +1 -1
- package/dist/generated/types/rebalanceData.js +3 -6
- package/dist/generated/types/rebalanceDirection.d.ts +3 -2
- package/dist/generated/types/rebalanceDirection.d.ts.map +1 -1
- package/dist/generated/types/rebalanceDirection.js +3 -2
- package/dist/generated/types/rebalanceInstructionData.d.ts +27 -0
- package/dist/generated/types/rebalanceInstructionData.d.ts.map +1 -0
- package/dist/generated/types/rebalanceInstructionData.js +22 -0
- package/dist/generated/types/rebalanceStateValues.d.ts +27 -0
- package/dist/generated/types/rebalanceStateValues.d.ts.map +1 -0
- package/dist/generated/types/rebalanceStateValues.js +22 -0
- package/dist/generated/types/rebalanceStep.d.ts +15 -0
- package/dist/generated/types/rebalanceStep.d.ts.map +1 -0
- package/dist/generated/types/rebalanceStep.js +22 -0
- package/dist/generated/types/solautoRebalanceType.d.ts +4 -5
- package/dist/generated/types/solautoRebalanceType.d.ts.map +1 -1
- package/dist/generated/types/solautoRebalanceType.js +4 -5
- package/dist/generated/types/solautoSettingsParameters.d.ts +2 -15
- package/dist/generated/types/solautoSettingsParameters.d.ts.map +1 -1
- package/dist/generated/types/solautoSettingsParameters.js +1 -5
- package/dist/generated/types/solautoSettingsParametersInp.d.ts +1 -12
- package/dist/generated/types/solautoSettingsParametersInp.d.ts.map +1 -1
- package/dist/generated/types/solautoSettingsParametersInp.js +0 -3
- package/dist/generated/types/swapType.d.ts +15 -0
- package/dist/generated/types/swapType.d.ts.map +1 -0
- package/dist/generated/types/swapType.js +22 -0
- package/dist/generated/types/tokenBalanceChange.d.ts +21 -0
- package/dist/generated/types/tokenBalanceChange.d.ts.map +1 -0
- package/dist/generated/types/tokenBalanceChange.js +19 -0
- package/dist/generated/types/tokenBalanceChangeType.d.ts +18 -0
- package/dist/generated/types/tokenBalanceChangeType.d.ts.map +1 -0
- package/dist/generated/types/tokenBalanceChangeType.js +25 -0
- package/dist/generated/types/updatePositionData.d.ts +2 -2
- package/dist/generated/types/updatePositionData.d.ts.map +1 -1
- package/dist/generated/types/updatePositionData.js +1 -1
- package/dist/index.d.ts +8 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -5
- package/dist/marginfi-sdk/types/interestRateConfig.d.ts +3 -1
- package/dist/marginfi-sdk/types/interestRateConfig.d.ts.map +1 -1
- package/dist/marginfi-sdk/types/interestRateConfig.js +2 -1
- package/dist/services/flashLoans/flProviderAggregator.d.ts +19 -0
- package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -0
- package/dist/services/flashLoans/flProviderAggregator.js +46 -0
- package/dist/services/flashLoans/flProviderBase.d.ts +23 -0
- package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -0
- package/dist/services/flashLoans/flProviderBase.js +37 -0
- package/dist/services/flashLoans/index.d.ts +4 -0
- package/dist/services/flashLoans/index.d.ts.map +1 -0
- package/dist/services/flashLoans/index.js +19 -0
- package/dist/services/flashLoans/marginfiFlProvider.d.ts +25 -0
- package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -0
- package/dist/services/flashLoans/marginfiFlProvider.js +246 -0
- package/dist/services/index.d.ts +6 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +21 -0
- package/dist/services/rebalance/index.d.ts +3 -0
- package/dist/services/rebalance/index.d.ts.map +1 -0
- package/dist/services/rebalance/index.js +18 -0
- package/dist/services/rebalance/rebalanceSwapManager.d.ts +30 -0
- package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -0
- package/dist/services/rebalance/rebalanceSwapManager.js +144 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts +22 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -0
- package/dist/services/rebalance/rebalanceTxBuilder.js +200 -0
- package/dist/services/rebalance/rebalanceValues.d.ts +31 -0
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -0
- package/dist/services/rebalance/rebalanceValues.js +118 -0
- package/dist/services/rebalance/solautoFees.d.ts +13 -0
- package/dist/services/rebalance/solautoFees.d.ts.map +1 -0
- package/dist/services/rebalance/solautoFees.js +54 -0
- package/dist/services/solauto/index.d.ts +5 -0
- package/dist/services/solauto/index.d.ts.map +1 -0
- package/dist/{clients → services/solauto}/referralStateManager.d.ts +4 -5
- package/dist/services/solauto/referralStateManager.d.ts.map +1 -0
- package/dist/{clients → services/solauto}/referralStateManager.js +10 -12
- package/dist/services/solauto/solautoClient.d.ts +59 -0
- package/dist/services/solauto/solautoClient.d.ts.map +1 -0
- package/dist/{clients → services/solauto}/solautoClient.js +78 -109
- package/dist/services/solauto/solautoMarginfiClient.d.ts +34 -0
- package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -0
- package/dist/services/solauto/solautoMarginfiClient.js +322 -0
- package/dist/{clients → services/solauto}/txHandler.d.ts +11 -2
- package/dist/services/solauto/txHandler.d.ts.map +1 -0
- package/dist/services/solauto/txHandler.js +38 -0
- package/dist/services/swap/index.d.ts +2 -0
- package/dist/services/swap/index.d.ts.map +1 -0
- package/dist/{utils/solauto → services/swap}/index.js +1 -2
- package/dist/services/swap/jupSwapManager.d.ts +37 -0
- package/dist/services/swap/jupSwapManager.d.ts.map +1 -0
- package/dist/services/swap/jupSwapManager.js +108 -0
- package/dist/services/transactions/index.d.ts.map +1 -0
- package/dist/{transactions → services/transactions}/transactionUtils.d.ts +3 -5
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -0
- package/dist/{transactions → services/transactions}/transactionUtils.js +29 -137
- package/dist/{transactions → services/transactions}/transactionsManager.d.ts +4 -4
- package/dist/services/transactions/transactionsManager.d.ts.map +1 -0
- package/dist/{transactions → services/transactions}/transactionsManager.js +10 -8
- package/dist/solautoPosition/index.d.ts +4 -0
- package/dist/solautoPosition/index.d.ts.map +1 -0
- package/dist/solautoPosition/index.js +19 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +14 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +73 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts +67 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -0
- package/dist/solautoPosition/solautoPositionEx.js +143 -0
- package/dist/solautoPosition/utils.d.ts +17 -0
- package/dist/solautoPosition/utils.d.ts.map +1 -0
- package/dist/solautoPosition/utils.js +115 -0
- package/dist/types/solauto.d.ts +19 -1
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/utils/generalUtils.d.ts +1 -0
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +9 -1
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/jitoUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.d.ts +3 -28
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/jupiterUtils.js +2 -73
- package/dist/utils/marginfiUtils.d.ts +4 -3
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +47 -18
- package/dist/utils/numberUtils.d.ts +3 -6
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +13 -48
- package/dist/utils/solanaUtils.js +2 -2
- package/dist/utils/{solauto/generalUtils.d.ts → solautoUtils.d.ts} +9 -16
- package/dist/utils/solautoUtils.d.ts.map +1 -0
- package/dist/utils/{solauto/generalUtils.js → solautoUtils.js} +49 -173
- package/local/createTokenAccounts.ts +1 -5
- package/local/logPositions.ts +22 -68
- package/local/shared.ts +29 -24
- package/local/txSandbox.ts +66 -0
- package/local/updateMarginfiLUT.ts +80 -4
- package/package.json +3 -6
- package/src/constants/solautoConstants.ts +4 -9
- package/src/generated/accounts/solautoPosition.ts +2 -2
- package/src/generated/errors/solauto.ts +45 -4
- package/src/generated/instructions/claimReferralFees.ts +1 -1
- package/src/generated/instructions/closePosition.ts +3 -3
- package/src/generated/instructions/marginfiOpenPosition.ts +0 -7
- package/src/generated/instructions/marginfiRebalance.ts +12 -3
- package/src/generated/types/index.ts +7 -1
- package/src/generated/types/positionData.ts +3 -3
- package/src/generated/types/positionState.ts +12 -12
- package/src/generated/types/{positionTokenUsage.ts → positionTokenState.ts} +13 -16
- package/src/generated/types/rebalanceData.ts +16 -27
- package/src/generated/types/rebalanceDirection.ts +1 -0
- package/src/generated/types/rebalanceInstructionData.ts +62 -0
- package/src/generated/types/rebalanceStateValues.ts +59 -0
- package/src/generated/types/rebalanceStep.ts +25 -0
- package/src/generated/types/solautoRebalanceType.ts +0 -1
- package/src/generated/types/solautoSettingsParameters.ts +4 -25
- package/src/generated/types/solautoSettingsParametersInp.ts +2 -24
- package/src/generated/types/swapType.ts +22 -0
- package/src/generated/types/tokenBalanceChange.ts +46 -0
- package/src/generated/types/tokenBalanceChangeType.ts +28 -0
- package/src/generated/types/updatePositionData.ts +3 -3
- package/src/index.ts +8 -8
- package/src/marginfi-sdk/types/interestRateConfig.ts +6 -2
- package/src/services/flashLoans/flProviderAggregator.ts +74 -0
- package/src/services/flashLoans/flProviderBase.ts +88 -0
- package/src/services/flashLoans/index.ts +3 -0
- package/src/services/flashLoans/marginfiFlProvider.ts +392 -0
- package/src/services/index.ts +5 -0
- package/src/services/rebalance/index.ts +2 -0
- package/src/services/rebalance/rebalanceSwapManager.ts +218 -0
- package/src/services/rebalance/rebalanceTxBuilder.ts +330 -0
- package/src/services/rebalance/rebalanceValues.ts +232 -0
- package/src/services/rebalance/solautoFees.ts +61 -0
- package/src/services/solauto/index.ts +4 -0
- package/src/{clients → services/solauto}/referralStateManager.ts +17 -31
- package/src/{clients → services/solauto}/solautoClient.ts +142 -205
- package/src/services/solauto/solautoMarginfiClient.ts +472 -0
- package/src/services/solauto/txHandler.ts +69 -0
- package/src/services/swap/index.ts +1 -0
- package/src/services/swap/jupSwapManager.ts +189 -0
- package/src/{transactions → services/transactions}/transactionUtils.ts +40 -280
- package/src/{transactions → services/transactions}/transactionsManager.ts +15 -10
- package/src/solautoPosition/index.ts +3 -0
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +111 -0
- package/src/solautoPosition/solautoPositionEx.ts +281 -0
- package/src/solautoPosition/utils.ts +188 -0
- package/src/types/solauto.ts +30 -2
- package/src/utils/generalUtils.ts +9 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/jitoUtils.ts +0 -4
- package/src/utils/jupiterUtils.ts +3 -164
- package/src/utils/marginfiUtils.ts +77 -43
- package/src/utils/numberUtils.ts +18 -77
- package/src/utils/solanaUtils.ts +1 -1
- package/src/utils/{solauto/generalUtils.ts → solautoUtils.ts} +67 -288
- package/tests/transactions/shared.ts +135 -0
- package/tests/transactions/solautoMarginfi.ts +8 -198
- package/tests/unit/accounts.ts +3 -10
- package/tests/unit/lookupTables.ts +23 -2
- package/tests/unit/rebalanceCalculations.ts +65 -343
- package/dist/clients/index.d.ts +0 -5
- package/dist/clients/index.d.ts.map +0 -1
- package/dist/clients/referralStateManager.d.ts.map +0 -1
- package/dist/clients/solautoClient.d.ts +0 -71
- package/dist/clients/solautoClient.d.ts.map +0 -1
- package/dist/clients/solautoMarginfiClient.d.ts +0 -51
- package/dist/clients/solautoMarginfiClient.d.ts.map +0 -1
- package/dist/clients/solautoMarginfiClient.js +0 -497
- package/dist/clients/txHandler.d.ts.map +0 -1
- package/dist/clients/txHandler.js +0 -23
- package/dist/generated/types/positionTokenUsage.d.ts.map +0 -1
- package/dist/transactions/index.d.ts.map +0 -1
- package/dist/transactions/transactionUtils.d.ts.map +0 -1
- package/dist/transactions/transactionsManager.d.ts.map +0 -1
- package/dist/utils/solauto/generalUtils.d.ts.map +0 -1
- package/dist/utils/solauto/index.d.ts +0 -3
- package/dist/utils/solauto/index.d.ts.map +0 -1
- package/dist/utils/solauto/rebalanceUtils.d.ts +0 -30
- package/dist/utils/solauto/rebalanceUtils.d.ts.map +0 -1
- package/dist/utils/solauto/rebalanceUtils.js +0 -287
- package/src/clients/index.ts +0 -4
- package/src/clients/solautoMarginfiClient.ts +0 -774
- package/src/clients/txHandler.ts +0 -38
- package/src/utils/solauto/index.ts +0 -2
- package/src/utils/solauto/rebalanceUtils.ts +0 -562
- package/dist/{clients → services/solauto}/index.js +2 -2
- /package/dist/{transactions → services/transactions}/index.d.ts +0 -0
- /package/dist/{transactions → services/transactions}/index.js +0 -0
- /package/src/{transactions → services/transactions}/index.ts +0 -0
@@ -2,30 +2,25 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.rebalanceChoresBefore = rebalanceChoresBefore;
|
4
4
|
exports.getTransactionChores = getTransactionChores;
|
5
|
-
exports.requiresRefreshBeforeRebalance = requiresRefreshBeforeRebalance;
|
6
|
-
exports.buildSolautoRebalanceTransaction = buildSolautoRebalanceTransaction;
|
7
5
|
exports.convertReferralFeesToDestination = convertReferralFeesToDestination;
|
8
6
|
exports.getErrorInfo = getErrorInfo;
|
9
7
|
const umi_1 = require("@metaplex-foundation/umi");
|
10
8
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
11
9
|
const web3_js_1 = require("@solana/web3.js");
|
12
10
|
const spl_token_1 = require("@solana/spl-token");
|
13
|
-
const generated_1 = require("
|
14
|
-
const solanaUtils_1 = require("
|
15
|
-
const
|
16
|
-
const
|
17
|
-
const
|
18
|
-
const
|
19
|
-
const
|
20
|
-
const
|
21
|
-
const
|
22
|
-
const
|
23
|
-
const constants_1 = require("../constants");
|
24
|
-
const utils_1 = require("../utils");
|
25
|
-
const transactions_1 = require("../types/transactions");
|
11
|
+
const generated_1 = require("../../generated");
|
12
|
+
const solanaUtils_1 = require("../../utils/solanaUtils");
|
13
|
+
const generalUtils_1 = require("../../utils/generalUtils");
|
14
|
+
const numberUtils_1 = require("../../utils/numberUtils");
|
15
|
+
const accountUtils_1 = require("../../utils/accountUtils");
|
16
|
+
const marginfi_sdk_1 = require("../../marginfi-sdk");
|
17
|
+
const __1 = require("..");
|
18
|
+
const jupiter_sdk_1 = require("../../jupiter-sdk");
|
19
|
+
const utils_1 = require("../../utils");
|
20
|
+
const transactions_1 = require("../../types/transactions");
|
26
21
|
function getWSolUsage(client, solautoActions, initiatingDcaIn, cancellingDcaIn) {
|
27
|
-
const supplyIsWsol = client.supplyMint.equals(spl_token_1.NATIVE_MINT);
|
28
|
-
const debtIsWsol = client.debtMint.equals(spl_token_1.NATIVE_MINT);
|
22
|
+
const supplyIsWsol = client.solautoPosition.supplyMint().equals(spl_token_1.NATIVE_MINT);
|
23
|
+
const debtIsWsol = client.solautoPosition.debtMint().equals(spl_token_1.NATIVE_MINT);
|
29
24
|
if (!supplyIsWsol && !debtIsWsol) {
|
30
25
|
return undefined;
|
31
26
|
}
|
@@ -61,14 +56,14 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
|
|
61
56
|
chores = chores.add(client.updateReferralStatesIx(undefined, client.authorityLutAddress));
|
62
57
|
}
|
63
58
|
if (client.selfManaged) {
|
64
|
-
if (
|
65
|
-
chores = chores.add(client.openPosition());
|
66
|
-
}
|
67
|
-
else if (client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
|
59
|
+
if ((0, utils_1.isMarginfiClient)(client) &&
|
68
60
|
!(await (0, generalUtils_1.getSolanaAccountCreated)(client.umi, client.marginfiAccountPk))) {
|
69
61
|
chores = chores.add(client.marginfiAccountInitialize(client.marginfiAccount));
|
70
62
|
}
|
71
63
|
// TODO: PF
|
64
|
+
if (!client.solautoPosition.exists()) {
|
65
|
+
chores = chores.add(client.openPositionIx());
|
66
|
+
}
|
72
67
|
}
|
73
68
|
const wSolUsage = getWSolUsage(client, solautoActions, initiatingDcaIn, undefined);
|
74
69
|
if (wSolUsage !== undefined) {
|
@@ -112,8 +107,8 @@ async function transactionChoresBefore(client, accountsGettingCreated, solautoAc
|
|
112
107
|
}
|
113
108
|
if (!(0, generalUtils_1.getSolanaAccountCreated)(client.umi, tokenAccount)) {
|
114
109
|
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), (0, generated_1.isSolautoAction)("Withdraw", solautoAction)
|
115
|
-
? client.supplyMint
|
116
|
-
: client.debtMint));
|
110
|
+
? client.solautoPosition.supplyMint()
|
111
|
+
: client.solautoPosition.debtMint()));
|
117
112
|
accountsGettingCreated.push(tokenAccount.toString());
|
118
113
|
}
|
119
114
|
}
|
@@ -129,8 +124,6 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
|
|
129
124
|
.some((t) => t.keys.some((k) => (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(k.pubkey).equals(key)));
|
130
125
|
const checkReferralSupplyTa = client.referredBySupplyTa() && usesAccount(client.referredBySupplyTa());
|
131
126
|
const checkReferralDebtTa = client.referredByDebtTa() && usesAccount(client.referredByDebtTa());
|
132
|
-
const checkIntermediaryMfiAccount = client.lendingPlatform === generated_1.LendingPlatform.Marginfi &&
|
133
|
-
usesAccount(client.intermediaryMarginfiAccountPk);
|
134
127
|
const checkSignerSupplyTa = usesAccount(client.signerSupplyTa);
|
135
128
|
const checkSignerDebtTa = usesAccount(client.signerDebtTa);
|
136
129
|
const accountsNeeded = [
|
@@ -138,41 +131,31 @@ async function rebalanceChoresBefore(client, tx, accountsGettingCreated) {
|
|
138
131
|
checkReferralSupplyTa ? client.referredBySupplyTa() : web3_js_1.PublicKey.default,
|
139
132
|
],
|
140
133
|
...[checkReferralDebtTa ? client.referredByDebtTa() : web3_js_1.PublicKey.default],
|
141
|
-
...[
|
142
|
-
checkIntermediaryMfiAccount
|
143
|
-
? client.intermediaryMarginfiAccountPk
|
144
|
-
: web3_js_1.PublicKey.default,
|
145
|
-
],
|
146
134
|
...[checkSignerSupplyTa ? client.signerSupplyTa : web3_js_1.PublicKey.default],
|
147
135
|
...[checkSignerDebtTa ? client.signerDebtTa : web3_js_1.PublicKey.default],
|
148
136
|
];
|
149
|
-
const [referredBySupplyTa, referredByDebtTa,
|
137
|
+
const [referredBySupplyTa, referredByDebtTa, signerSupplyTa, signerDebtTa] = await client.umi.rpc.getAccounts(accountsNeeded.map((x) => (0, umi_1.publicKey)(x ?? web3_js_1.PublicKey.default)));
|
150
138
|
let chores = (0, umi_1.transactionBuilder)();
|
151
139
|
if (checkReferralSupplyTa && !(0, generalUtils_1.rpcAccountCreated)(referredBySupplyTa)) {
|
152
140
|
client.log("Creating referred-by supply TA");
|
153
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.supplyMint));
|
141
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.solautoPosition.supplyMint()));
|
154
142
|
}
|
155
143
|
if (checkReferralDebtTa && !(0, generalUtils_1.rpcAccountCreated)(referredByDebtTa)) {
|
156
144
|
client.log("Creating referred-by debt TA");
|
157
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.debtMint));
|
158
|
-
}
|
159
|
-
if (checkIntermediaryMfiAccount &&
|
160
|
-
!(0, generalUtils_1.rpcAccountCreated)(intermediaryMarginfiAccount)) {
|
161
|
-
client.log("Creating intermediary marginfi account");
|
162
|
-
chores = chores.add(client.marginfiAccountInitialize(client.intermediaryMarginfiAccountSigner));
|
145
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, client.referredByState, client.solautoPosition.debtMint()));
|
163
146
|
}
|
164
147
|
if (checkSignerSupplyTa &&
|
165
148
|
!(0, generalUtils_1.rpcAccountCreated)(signerSupplyTa) &&
|
166
149
|
!accountsGettingCreated.includes(signerSupplyTa.publicKey.toString())) {
|
167
150
|
client.log("Creating signer supply token account");
|
168
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.supplyMint));
|
151
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.solautoPosition.supplyMint()));
|
169
152
|
accountsGettingCreated.push(signerSupplyTa.publicKey.toString());
|
170
153
|
}
|
171
154
|
if (checkSignerDebtTa &&
|
172
155
|
!(0, generalUtils_1.rpcAccountCreated)(signerDebtTa) &&
|
173
156
|
!accountsGettingCreated.includes(signerDebtTa.publicKey.toString())) {
|
174
157
|
client.log("Creating signer debt token account");
|
175
|
-
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.debtMint));
|
158
|
+
chores = chores.add((0, solanaUtils_1.createAssociatedTokenAccountUmiIx)(client.signer, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), client.solautoPosition.debtMint()));
|
176
159
|
accountsGettingCreated.push(signerDebtTa.publicKey.toString());
|
177
160
|
}
|
178
161
|
return chores;
|
@@ -192,9 +175,11 @@ function getRebalanceInstructions(umi, tx) {
|
|
192
175
|
try {
|
193
176
|
const serializer = (0, generated_1.getMarginfiRebalanceInstructionDataSerializer)();
|
194
177
|
const discriminator = serializer.serialize({
|
195
|
-
|
196
|
-
rebalanceType: generated_1.SolautoRebalanceType.
|
178
|
+
swapInAmountBaseUnit: 0,
|
179
|
+
rebalanceType: generated_1.SolautoRebalanceType.Regular,
|
180
|
+
swapType: generated_1.SwapType.ExactIn,
|
197
181
|
targetLiqUtilizationRateBps: 0,
|
182
|
+
flashLoanFeeBps: null,
|
198
183
|
})[0];
|
199
184
|
const [data, _] = serializer.deserialize(x.data);
|
200
185
|
if (data.discriminator === discriminator) {
|
@@ -329,106 +314,13 @@ async function getTransactionChores(client, tx) {
|
|
329
314
|
choresAfter = choresAfter.add(transactionChoresAfter(client, solautoActions, client.contextUpdates.cancellingDca));
|
330
315
|
return [choresBefore, choresAfter];
|
331
316
|
}
|
332
|
-
async function requiresRefreshBeforeRebalance(client) {
|
333
|
-
const neverRefreshedBefore = client.solautoPositionData &&
|
334
|
-
client.solautoPositionData.state.supply.amountCanBeUsed.baseUnit ===
|
335
|
-
BigInt(0) &&
|
336
|
-
client.solautoPositionData.state.debt.amountCanBeUsed.baseUnit ===
|
337
|
-
BigInt(0);
|
338
|
-
const aboveMaxLtv = client.solautoPositionState.liqUtilizationRateBps >
|
339
|
-
(0, numberUtils_1.getMaxLiqUtilizationRateBps)(client.solautoPositionState.maxLtvBps, client.solautoPositionState.liqThresholdBps, 0.01);
|
340
|
-
if (aboveMaxLtv || neverRefreshedBefore) {
|
341
|
-
return true;
|
342
|
-
}
|
343
|
-
else if (client.solautoPositionData && !client.selfManaged) {
|
344
|
-
if (client.contextUpdates.supplyAdjustment > BigInt(0) ||
|
345
|
-
client.contextUpdates.debtAdjustment > BigInt(0)) {
|
346
|
-
return false;
|
347
|
-
}
|
348
|
-
const oldStateWithLatestPrices = await (0, generalUtils_2.positionStateWithLatestPrices)(client.solautoPositionData.state, constants_1.PRICES[client.supplyMint.toString()].price, constants_1.PRICES[client.debtMint.toString()].price);
|
349
|
-
const utilizationRateDiff = Math.abs((client.solautoPositionState?.liqUtilizationRateBps ?? 0) -
|
350
|
-
oldStateWithLatestPrices.liqUtilizationRateBps);
|
351
|
-
client.log("Liq utilization rate diff:", utilizationRateDiff);
|
352
|
-
if (client.contextUpdates.supplyAdjustment === BigInt(0) &&
|
353
|
-
client.contextUpdates.debtAdjustment === BigInt(0) &&
|
354
|
-
utilizationRateDiff >= 10) {
|
355
|
-
client.log("Choosing to refresh before rebalance. Utilization rate diff:", utilizationRateDiff);
|
356
|
-
return true;
|
357
|
-
}
|
358
|
-
}
|
359
|
-
// Rebalance ix will already refresh internally if position is self managed, has automation to update, or position state last updated >= 1 day ago
|
360
|
-
client.log("Not refreshing before rebalance");
|
361
|
-
return false;
|
362
|
-
}
|
363
|
-
async function buildSolautoRebalanceTransaction(client, targetLiqUtilizationRateBps, attemptNum) {
|
364
|
-
client.solautoPositionState = await client.getFreshPositionState();
|
365
|
-
const supplyPrice = (0, utils_1.safeGetPrice)(client.supplyMint) ?? 0;
|
366
|
-
const debtPrice = (0, utils_1.safeGetPrice)(client.debtMint) ?? 0;
|
367
|
-
if ((client.solautoPositionState?.supply.amountUsed.baseUnit === BigInt(0) &&
|
368
|
-
client.contextUpdates.supplyAdjustment === BigInt(0)) ||
|
369
|
-
(targetLiqUtilizationRateBps === undefined &&
|
370
|
-
!(0, generalUtils_2.eligibleForRebalance)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice))) {
|
371
|
-
client.log("Not eligible for a rebalance");
|
372
|
-
return undefined;
|
373
|
-
}
|
374
|
-
const values = (0, rebalanceUtils_1.getRebalanceValues)(client.solautoPositionState, client.solautoPositionSettings(), client.solautoPositionActiveDca(), (0, generalUtils_1.currentUnixSeconds)(), supplyPrice, debtPrice, targetLiqUtilizationRateBps);
|
375
|
-
client.log("Rebalance values: ", values);
|
376
|
-
const flRequirements = await (0, rebalanceUtils_1.getFlashLoanRequirements)(client, values, attemptNum);
|
377
|
-
const swapDetails = await (0, rebalanceUtils_1.getJupSwapRebalanceDetails)(client, values, flRequirements, targetLiqUtilizationRateBps, attemptNum);
|
378
|
-
const { jupQuote, lookupTableAddresses, setupInstructions, swapIx } = await (0, jupiterUtils_1.getJupSwapTransaction)(client.signer, swapDetails, attemptNum);
|
379
|
-
const flashLoan = flRequirements
|
380
|
-
? (0, rebalanceUtils_1.getFlashLoanDetails)(client, flRequirements, values, jupQuote)
|
381
|
-
: undefined;
|
382
|
-
let tx = (0, umi_1.transactionBuilder)();
|
383
|
-
if (await requiresRefreshBeforeRebalance(client)) {
|
384
|
-
tx = tx.add(client.refresh());
|
385
|
-
}
|
386
|
-
if (flashLoan) {
|
387
|
-
client.log("Flash loan details: ", flashLoan);
|
388
|
-
const addFirstRebalance = values.amountUsdToDcaIn > 0;
|
389
|
-
const rebalanceThenSwap = values.rebalanceDirection === generated_1.RebalanceDirection.Repay &&
|
390
|
-
flashLoan.useDebtLiquidity;
|
391
|
-
const rebalanceType = addFirstRebalance
|
392
|
-
? generated_1.SolautoRebalanceType.DoubleRebalanceWithFL
|
393
|
-
: rebalanceThenSwap
|
394
|
-
? generated_1.SolautoRebalanceType.FLRebalanceThenSwap
|
395
|
-
: generated_1.SolautoRebalanceType.FLSwapThenRebalance;
|
396
|
-
client.log("Rebalance type:", rebalanceType);
|
397
|
-
const firstRebalance = client.rebalance("A", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps);
|
398
|
-
const lastRebalance = client.rebalance("B", jupQuote, rebalanceType, values, flashLoan, targetLiqUtilizationRateBps);
|
399
|
-
const flashBorrowDest = (0, accountUtils_1.getTokenAccount)(rebalanceThenSwap
|
400
|
-
? client.solautoPosition
|
401
|
-
: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(client.signer.publicKey), rebalanceThenSwap ? swapDetails.outputMint : swapDetails.inputMint);
|
402
|
-
tx = tx.add([
|
403
|
-
setupInstructions,
|
404
|
-
client.flashBorrow(rebalanceType, flashLoan, flashBorrowDest),
|
405
|
-
...(addFirstRebalance ? [firstRebalance] : []),
|
406
|
-
...(rebalanceThenSwap
|
407
|
-
? [lastRebalance, swapIx]
|
408
|
-
: [swapIx, lastRebalance]),
|
409
|
-
client.flashRepay(flashLoan),
|
410
|
-
]);
|
411
|
-
}
|
412
|
-
else {
|
413
|
-
const rebalanceType = generated_1.SolautoRebalanceType.Regular;
|
414
|
-
tx = tx.add([
|
415
|
-
setupInstructions,
|
416
|
-
client.rebalance("A", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
|
417
|
-
swapIx,
|
418
|
-
client.rebalance("B", jupQuote, rebalanceType, values, undefined, targetLiqUtilizationRateBps),
|
419
|
-
]);
|
420
|
-
}
|
421
|
-
return {
|
422
|
-
tx,
|
423
|
-
lookupTableAddresses,
|
424
|
-
};
|
425
|
-
}
|
426
317
|
async function convertReferralFeesToDestination(referralManager, tokenAccount, destinationMint) {
|
427
318
|
const tokenAccountData = await (0, accountUtils_1.getTokenAccountData)(referralManager.umi, tokenAccount);
|
428
319
|
if (!tokenAccountData || tokenAccountData.amount === BigInt(0)) {
|
429
320
|
return undefined;
|
430
321
|
}
|
431
|
-
const
|
322
|
+
const jupSwapManager = new __1.JupSwapManager(referralManager.umi.identity);
|
323
|
+
const { lookupTableAddresses, setupInstructions, swapIx, cleanupIx } = await jupSwapManager.getJupSwapTxData({
|
432
324
|
amount: tokenAccountData.amount,
|
433
325
|
destinationWallet: referralManager.referralState,
|
434
326
|
inputMint: tokenAccountData.mint,
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import { TransactionBuilder } from "@metaplex-foundation/umi";
|
2
|
-
import { SolautoClient } from "../
|
3
|
-
import { ErrorsToThrow } from "
|
4
|
-
import { PriorityFeeSetting, TransactionItemInputs, TransactionRunType } from "
|
5
|
-
import { ReferralStateManager } from "
|
2
|
+
import { SolautoClient } from "../solauto/solautoClient";
|
3
|
+
import { ErrorsToThrow } from "../../utils/generalUtils";
|
4
|
+
import { PriorityFeeSetting, TransactionItemInputs, TransactionRunType } from "../../types";
|
5
|
+
import { ReferralStateManager } from "..";
|
6
6
|
export declare class TransactionTooLargeError extends Error {
|
7
7
|
constructor(message: string);
|
8
8
|
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"transactionsManager.d.ts","sourceRoot":"","sources":["../../../src/services/transactions/transactionsManager.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAMzD,OAAO,EAEL,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAElB,qBAAqB,EACrB,kBAAkB,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAa,MAAM,IAAI,CAAC;AAarD,qBAAa,wBAAyB,SAAQ,KAAK;gBACrC,OAAO,EAAE,MAAM;CAK5B;AAqCD,qBAAa,eAAe;IAOjB,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM;IATtB,oBAAoB,EAAG,MAAM,EAAE,CAAC;IAChC,EAAE,CAAC,EAAE,kBAAkB,CAAC;IACxB,WAAW,EAAE,OAAO,CAAS;IAC7B,SAAS,EAAE,MAAM,CAAK;gBAGb,OAAO,EAAE,CACd,UAAU,EAAE,MAAM,KACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,EACxC,IAAI,CAAC,EAAE,MAAM,YAAA;IAGhB,UAAU;IAKV,OAAO,CAAC,UAAU,EAAE,MAAM;IAOhC,cAAc,IAAI,MAAM,EAAE;CAY3B;AAwGD,oBAAY,iBAAiB;IAC3B,OAAO,YAAY;IACnB,UAAU,eAAe;IACzB,MAAM,WAAW;IACjB,UAAU,eAAe;IACzB,MAAM,WAAW;CAClB;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,EAAE,CAAC;AAEJ,UAAU,WAAW;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,kBAAkB;IAC1B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,aAAa,CAAC;IAdxB,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAAS;IAE3B,kBAAkB,SAAmB;gBAG3B,SAAS,EAAE,aAAa,GAAG,oBAAoB,EAC/C,cAAc,CAAC,GAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,IAAI,aAAA,EAC/D,MAAM,CAAC,EAAE,kBAAkB,YAAA,EAC3B,kBAAkB,GAAE,kBAA2C,EAC/D,UAAU,GAAE,OAAe,EAC3B,aAAa,CAAC,EAAE,aAAa,YAAA,EACrC,WAAW,CAAC,EAAE,WAAW;YAab,uBAAuB;IA0CrC,OAAO,CAAC,YAAY;YA6CN,aAAa;IAoB3B,OAAO,CAAC,4BAA4B;IAgBpC,OAAO,CAAC,mBAAmB;YAoBb,SAAS;IAsBV,UAAU,CACrB,YAAY,EAAE,eAAe,EAAE,GAC9B,OAAO,CAAC,0BAA0B,CAAC;IA0GzB,IAAI,CACf,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,0BAA0B,CAAC;YA8BxB,6BAA6B;YA4I7B,qBAAqB;YAgDrB,eAAe;YA0Df,eAAe;CA4D9B"}
|
@@ -6,15 +6,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.TransactionsManager = exports.TransactionStatus = exports.TransactionItem = exports.TransactionTooLargeError = void 0;
|
7
7
|
const bs58_1 = __importDefault(require("bs58"));
|
8
8
|
const umi_1 = require("@metaplex-foundation/umi");
|
9
|
-
const solanaUtils_1 = require("
|
10
|
-
const generalUtils_1 = require("
|
9
|
+
const solanaUtils_1 = require("../../utils/solanaUtils");
|
10
|
+
const generalUtils_1 = require("../../utils/generalUtils");
|
11
11
|
const transactionUtils_1 = require("./transactionUtils");
|
12
|
-
const types_1 = require("
|
12
|
+
const types_1 = require("../../types");
|
13
13
|
const web3_js_1 = require("@solana/web3.js");
|
14
|
-
const switchboardConstants_1 = require("
|
15
|
-
const utils_1 = require("
|
16
|
-
const jitoUtils_1 = require("
|
17
|
-
const constants_1 = require("
|
14
|
+
const switchboardConstants_1 = require("../../constants/switchboardConstants");
|
15
|
+
const utils_1 = require("../../utils");
|
16
|
+
const jitoUtils_1 = require("../../utils/jitoUtils");
|
17
|
+
const constants_1 = require("../../constants");
|
18
18
|
const CHORES_TX_NAME = "account chores";
|
19
19
|
const MAX_SUPPORTED_ACCOUNT_LOCKS = 64;
|
20
20
|
class TransactionTooLargeError extends Error {
|
@@ -265,8 +265,10 @@ class TransactionsManager {
|
|
265
265
|
});
|
266
266
|
}
|
267
267
|
async updateLut(tx, newLut) {
|
268
|
+
const lutInputs = await (0, solanaUtils_1.getAddressLookupInputs)(this.txHandler.umi, this.txHandler.defaultLookupTables());
|
268
269
|
const updateLutTxName = `${newLut ? "create" : "update"} lookup table`;
|
269
|
-
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(tx, updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum), "skip-simulation"), this.signableRetries, 150, this.errorsToThrow);
|
270
|
+
await (0, generalUtils_1.retryWithExponentialBackoff)(async (attemptNum, prevError) => await this.sendTransaction(tx.setAddressLookupTables(lutInputs), updateLutTxName, attemptNum, this.getUpdatedPriorityFeeSetting(prevError, attemptNum), "skip-simulation"), this.signableRetries, 150, this.errorsToThrow);
|
271
|
+
await this.txHandler.refetchReferralState();
|
270
272
|
}
|
271
273
|
async clientSend(transactions) {
|
272
274
|
const items = [...transactions];
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,SAAS,CAAC"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
+
};
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
+
__exportStar(require("./solautoPositionEx"), exports);
|
18
|
+
__exportStar(require("./marginfiSolautoPositionEx"), exports);
|
19
|
+
__exportStar(require("./utils"), exports);
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
2
|
+
import { SolautoPositionEx } from "./solautoPositionEx";
|
3
|
+
export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
4
|
+
private marginfiAccountData;
|
5
|
+
private supplyBank;
|
6
|
+
private debtBank;
|
7
|
+
lendingPool(): Promise<PublicKey>;
|
8
|
+
maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
9
|
+
supplyLiquidityAvailable(): bigint;
|
10
|
+
supplyLiquidityDepositable(): bigint;
|
11
|
+
debtLiquidityAvailable(): bigint;
|
12
|
+
refreshPositionState(): Promise<void>;
|
13
|
+
}
|
14
|
+
//# sourceMappingURL=marginfiSolautoPositionEx.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"marginfiSolautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/marginfiSolautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAkBxD,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,OAAO,CAAC,mBAAmB,CAAgC;IAC3D,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAExB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAyBxC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAwB3D,wBAAwB,IAAI,MAAM;IAIlC,0BAA0B,IAAI,MAAM;IAIpC,sBAAsB,IAAI,MAAM;IAI1B,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;CAyB5C"}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.MarginfiSolautoPositionEx = void 0;
|
4
|
+
const web3_js_1 = require("@solana/web3.js");
|
5
|
+
const solautoPositionEx_1 = require("./solautoPositionEx");
|
6
|
+
const marginfi_sdk_1 = require("../marginfi-sdk");
|
7
|
+
const umi_1 = require("@metaplex-foundation/umi");
|
8
|
+
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
9
|
+
const utils_1 = require("../utils");
|
10
|
+
const constants_1 = require("../constants");
|
11
|
+
class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
12
|
+
constructor() {
|
13
|
+
super(...arguments);
|
14
|
+
this.marginfiAccountData = null;
|
15
|
+
this.supplyBank = null;
|
16
|
+
this.debtBank = null;
|
17
|
+
}
|
18
|
+
async lendingPool() {
|
19
|
+
if (this.lp) {
|
20
|
+
return this.lp;
|
21
|
+
}
|
22
|
+
if (!this.marginfiAccountData &&
|
23
|
+
this.lpUserAccount &&
|
24
|
+
!this.lpUserAccount.equals(web3_js_1.PublicKey.default)) {
|
25
|
+
this.marginfiAccountData = await (0, marginfi_sdk_1.fetchMarginfiAccount)(this.umi, (0, umi_1.publicKey)(this.lpUserAccount), { commitment: "confirmed" });
|
26
|
+
this.lp = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.marginfiAccountData.group);
|
27
|
+
}
|
28
|
+
if (!this.lp) {
|
29
|
+
this.lp = new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP);
|
30
|
+
}
|
31
|
+
return this.lp;
|
32
|
+
}
|
33
|
+
async maxLtvAndLiqThresholdBps() {
|
34
|
+
if (!this.supplyBank || !this.debtBank) {
|
35
|
+
const group = (await this.lendingPool()).toString();
|
36
|
+
const supplyBank = constants_1.MARGINFI_ACCOUNTS[group][this.supplyMint().toString()].bank;
|
37
|
+
const debtBank = constants_1.MARGINFI_ACCOUNTS[group][this.debtMint().toString()].bank;
|
38
|
+
[this.supplyBank, this.debtBank] = await (0, marginfi_sdk_1.safeFetchAllBank)(this.umi, [
|
39
|
+
(0, umi_1.publicKey)(supplyBank),
|
40
|
+
(0, umi_1.publicKey)(debtBank),
|
41
|
+
]);
|
42
|
+
}
|
43
|
+
const [supplyPrice] = await (0, utils_1.fetchTokenPrices)([this.supplyMint()]);
|
44
|
+
const [maxLtv, liqThreshold] = (0, utils_1.calcMarginfiMaxLtvAndLiqThreshold)(this.supplyBank, this.debtBank, supplyPrice);
|
45
|
+
return [(0, utils_1.toBps)(maxLtv), (0, utils_1.toBps)(liqThreshold)];
|
46
|
+
}
|
47
|
+
supplyLiquidityAvailable() {
|
48
|
+
return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false);
|
49
|
+
}
|
50
|
+
supplyLiquidityDepositable() {
|
51
|
+
return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, true);
|
52
|
+
}
|
53
|
+
debtLiquidityAvailable() {
|
54
|
+
return (0, utils_1.getBankLiquidityAvailableBaseUnit)(this.debtBank, false);
|
55
|
+
}
|
56
|
+
async refreshPositionState() {
|
57
|
+
if (!this.canRefreshPositionState()) {
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
const useDesignatedMint = !this._data.position || !this._data.selfManaged;
|
61
|
+
const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount }, await this.lendingPool(), useDesignatedMint
|
62
|
+
? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint) }
|
63
|
+
: undefined, useDesignatedMint
|
64
|
+
? { mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint) }
|
65
|
+
: undefined, this.contextUpdates);
|
66
|
+
if (resp) {
|
67
|
+
this.supplyBank = resp.supplyBank;
|
68
|
+
this.debtBank = resp.debtBank;
|
69
|
+
this._data.state = resp.state;
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
exports.MarginfiSolautoPositionEx = MarginfiSolautoPositionEx;
|
@@ -0,0 +1,67 @@
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
2
|
+
import { DCASettings, LendingPlatform, PositionState, SolautoPosition, SolautoSettingsParameters } from "../generated";
|
3
|
+
import { Umi } from "@metaplex-foundation/umi";
|
4
|
+
import { ContextUpdates } from "../utils";
|
5
|
+
import { RebalanceAction } from "../types";
|
6
|
+
export interface PositionCustomArgs {
|
7
|
+
lendingPlatform: LendingPlatform;
|
8
|
+
supplyMint?: PublicKey;
|
9
|
+
debtMint?: PublicKey;
|
10
|
+
lendingPool?: PublicKey;
|
11
|
+
lpUserAccount?: PublicKey;
|
12
|
+
}
|
13
|
+
interface SolautoPositionExData extends Partial<SolautoPosition> {
|
14
|
+
state: PositionState;
|
15
|
+
}
|
16
|
+
interface PositionExArgs {
|
17
|
+
umi: Umi;
|
18
|
+
publicKey: PublicKey;
|
19
|
+
data: SolautoPositionExData;
|
20
|
+
customArgs?: PositionCustomArgs;
|
21
|
+
contextUpdates?: ContextUpdates;
|
22
|
+
}
|
23
|
+
export declare abstract class SolautoPositionEx {
|
24
|
+
umi: Umi;
|
25
|
+
publicKey: PublicKey;
|
26
|
+
protected _data: SolautoPositionExData;
|
27
|
+
protected lp?: PublicKey;
|
28
|
+
lpUserAccount?: PublicKey;
|
29
|
+
protected contextUpdates?: ContextUpdates;
|
30
|
+
private readonly firstState;
|
31
|
+
constructor(args: PositionExArgs);
|
32
|
+
abstract lendingPool(): Promise<PublicKey>;
|
33
|
+
exists(): boolean;
|
34
|
+
strategyName(): string;
|
35
|
+
data(): SolautoPositionExData;
|
36
|
+
state(): PositionState;
|
37
|
+
settings(): SolautoSettingsParameters | undefined;
|
38
|
+
dca(): DCASettings | undefined;
|
39
|
+
supplyMint(): PublicKey;
|
40
|
+
debtMint(): PublicKey;
|
41
|
+
boostToBps(): number;
|
42
|
+
boostFromBps(): number;
|
43
|
+
repayToBps(): number;
|
44
|
+
repayFromBps(): number;
|
45
|
+
netWorth(): number;
|
46
|
+
netWorthUsd(): number;
|
47
|
+
totalSupply(): number;
|
48
|
+
supplyUsd(): number;
|
49
|
+
totalDebt(): number;
|
50
|
+
debtUsd(): number;
|
51
|
+
supplyLiquidityUsdDepositable(): number;
|
52
|
+
debtLiquidityUsdAvailable(): number;
|
53
|
+
abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
54
|
+
abstract supplyLiquidityDepositable(): bigint;
|
55
|
+
abstract supplyLiquidityAvailable(): bigint;
|
56
|
+
abstract debtLiquidityAvailable(): bigint;
|
57
|
+
sufficientLiquidityToBoost(): boolean;
|
58
|
+
eligibleForRebalance(bpsDistanceThreshold?: number): RebalanceAction | undefined;
|
59
|
+
eligibleForRefresh(): boolean;
|
60
|
+
protected canRefreshPositionState(): boolean;
|
61
|
+
abstract refreshPositionState(): Promise<void>;
|
62
|
+
utilizationRateBpsDrift(): Promise<number>;
|
63
|
+
updateWithLatestPrices(supplyPrice?: number, debtPrice?: number): Promise<void>;
|
64
|
+
refetchPositionData(): Promise<void>;
|
65
|
+
}
|
66
|
+
export {};
|
67
|
+
//# sourceMappingURL=solautoPositionEx.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,WAAW,EAEX,eAAe,EACf,aAAa,EACb,eAAe,EACf,yBAAyB,EAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAQL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAQ3C,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,eAAe,CAAC;IACjC,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,SAAS,CAAC;IACxB,aAAa,CAAC,EAAE,SAAS,CAAC;CAC3B;AAED,UAAU,qBAAsB,SAAQ,OAAO,CAAC,eAAe,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;CACtB;AAED,UAAU,cAAc;IACtB,GAAG,EAAE,GAAG,CAAC;IACT,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,cAAc,CAAC,EAAE,cAAc,CAAC;CACjC;AAED,8BAAsB,iBAAiB;IAC9B,GAAG,EAAG,GAAG,CAAC;IACV,SAAS,EAAG,SAAS,CAAC;IAC7B,SAAS,CAAC,KAAK,EAAG,qBAAqB,CAAC;IACxC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAa;IAC9B,aAAa,CAAC,EAAE,SAAS,CAAa;IAC7C,SAAS,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IAE1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;gBAEhC,IAAI,EAAE,cAAc;IAgBhC,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC;IAE1C,MAAM;IAIN,YAAY;IAOZ,IAAI,IAAI,qBAAqB;IAI7B,KAAK,IAAI,aAAa;IAItB,QAAQ,IAAI,yBAAyB,GAAG,SAAS;IAIjD,GAAG,IAAI,WAAW,GAAG,SAAS;IAI9B,UAAU,IAAI,SAAS;IAIvB,QAAQ,IAAI,SAAS;IAIrB,UAAU;IAOV,YAAY;IAIZ,UAAU;IAOV,YAAY;IAMZ,QAAQ;IAIR,WAAW;IAIX,WAAW;IAIX,SAAS;IAIT,SAAS;IAIT,OAAO;IAIP,6BAA6B;IAI7B,yBAAyB;IAIzB,QAAQ,CAAC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,QAAQ,CAAC,0BAA0B,IAAI,MAAM;IAC7C,QAAQ,CAAC,wBAAwB,IAAI,MAAM;IAC3C,QAAQ,CAAC,sBAAsB,IAAI,MAAM;IAEzC,0BAA0B;IA0B1B,oBAAoB,CAAC,oBAAoB,SAAI,GAAG,eAAe,GAAG,SAAS;IAqB3E,kBAAkB,IAAI,OAAO;IAS7B,SAAS,CAAC,uBAAuB;IAWjC,QAAQ,CAAC,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IAExC,uBAAuB;IAiBvB,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAQ/D,mBAAmB;CAM1B"}
|
@@ -0,0 +1,143 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SolautoPositionEx = void 0;
|
4
|
+
const generated_1 = require("../generated");
|
5
|
+
const utils_1 = require("../utils");
|
6
|
+
const rebalance_1 = require("../services/rebalance");
|
7
|
+
const constants_1 = require("../constants");
|
8
|
+
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
9
|
+
class SolautoPositionEx {
|
10
|
+
constructor(args) {
|
11
|
+
this.lp = undefined;
|
12
|
+
this.lpUserAccount = undefined;
|
13
|
+
this.umi = args.umi;
|
14
|
+
this.publicKey = args.publicKey;
|
15
|
+
this.contextUpdates = args.contextUpdates;
|
16
|
+
this.lp = args.customArgs?.lendingPool;
|
17
|
+
this.lpUserAccount =
|
18
|
+
args.customArgs?.lpUserAccount ??
|
19
|
+
(args.data.position
|
20
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.position.protocolUserAccount)
|
21
|
+
: undefined);
|
22
|
+
this._data = args.data;
|
23
|
+
this.firstState = { ...args.data.state };
|
24
|
+
}
|
25
|
+
exists() {
|
26
|
+
return this._data.position !== undefined;
|
27
|
+
}
|
28
|
+
strategyName() {
|
29
|
+
return (0, utils_1.solautoStrategyName)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint), (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint));
|
30
|
+
}
|
31
|
+
data() {
|
32
|
+
return this._data;
|
33
|
+
}
|
34
|
+
state() {
|
35
|
+
return this.data().state;
|
36
|
+
}
|
37
|
+
settings() {
|
38
|
+
return this.contextUpdates?.settings ?? this.data().position?.settings;
|
39
|
+
}
|
40
|
+
dca() {
|
41
|
+
return this.contextUpdates?.dca ?? this.data().position?.dca;
|
42
|
+
}
|
43
|
+
supplyMint() {
|
44
|
+
return (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().supply.mint);
|
45
|
+
}
|
46
|
+
debtMint() {
|
47
|
+
return (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state().debt.mint);
|
48
|
+
}
|
49
|
+
boostToBps() {
|
50
|
+
return Math.min(this.settings()?.boostToBps ?? 0, (0, utils_1.maxBoostToBps)(this.state().maxLtvBps, this.state().liqThresholdBps));
|
51
|
+
}
|
52
|
+
boostFromBps() {
|
53
|
+
return this.boostToBps() - (this.settings()?.boostGap ?? 0);
|
54
|
+
}
|
55
|
+
repayToBps() {
|
56
|
+
return Math.min(this.settings()?.repayToBps ?? 0, (0, utils_1.maxRepayToBps)(this.state().maxLtvBps, this.state().liqThresholdBps));
|
57
|
+
}
|
58
|
+
repayFromBps() {
|
59
|
+
return ((this.settings()?.repayToBps ?? 0) + (this.settings()?.repayGap ?? 0));
|
60
|
+
}
|
61
|
+
netWorth() {
|
62
|
+
return (0, utils_1.calcNetWorth)(this.state());
|
63
|
+
}
|
64
|
+
netWorthUsd() {
|
65
|
+
return (0, utils_1.calcNetWorthUsd)(this.state());
|
66
|
+
}
|
67
|
+
totalSupply() {
|
68
|
+
return (0, utils_1.calcTotalSupply)(this.state());
|
69
|
+
}
|
70
|
+
supplyUsd() {
|
71
|
+
return (0, utils_1.calcSupplyUsd)(this.state());
|
72
|
+
}
|
73
|
+
totalDebt() {
|
74
|
+
return (0, utils_1.calcTotalDebt)(this.state());
|
75
|
+
}
|
76
|
+
debtUsd() {
|
77
|
+
return (0, utils_1.calcDebtUsd)(this.state());
|
78
|
+
}
|
79
|
+
supplyLiquidityUsdDepositable() {
|
80
|
+
return (0, utils_1.supplyLiquidityUsdDepositable)(this.state());
|
81
|
+
}
|
82
|
+
debtLiquidityUsdAvailable() {
|
83
|
+
return (0, utils_1.debtLiquidityUsdAvailable)(this.state());
|
84
|
+
}
|
85
|
+
sufficientLiquidityToBoost() {
|
86
|
+
const limitsUpToDate = this.debtLiquidityUsdAvailable() !== 0 ||
|
87
|
+
this.supplyLiquidityUsdDepositable() !== 0;
|
88
|
+
if (limitsUpToDate) {
|
89
|
+
const { debtAdjustmentUsd } = (0, rebalance_1.getDebtAdjustment)(this.state().liqThresholdBps, { supplyUsd: this.supplyUsd(), debtUsd: this.debtUsd() }, { solauto: 50, lpBorrow: 50, flashLoan: 50 }, // TODO: add better fix here instead of magic numbers
|
90
|
+
this.boostToBps());
|
91
|
+
const sufficientLiquidity = this.debtLiquidityUsdAvailable() * 0.95 > debtAdjustmentUsd &&
|
92
|
+
this.supplyLiquidityUsdDepositable() * 0.95 > debtAdjustmentUsd;
|
93
|
+
if (!sufficientLiquidity) {
|
94
|
+
(0, utils_1.consoleLog)("Insufficient liquidity to further boost");
|
95
|
+
}
|
96
|
+
return sufficientLiquidity;
|
97
|
+
}
|
98
|
+
return true;
|
99
|
+
}
|
100
|
+
eligibleForRebalance(bpsDistanceThreshold = 0) {
|
101
|
+
if (!this.settings() || !(0, utils_1.calcSupplyUsd)(this.state())) {
|
102
|
+
return undefined;
|
103
|
+
}
|
104
|
+
if (this.state().liqUtilizationRateBps - this.boostFromBps() <=
|
105
|
+
bpsDistanceThreshold) {
|
106
|
+
const sufficientLiquidity = this.sufficientLiquidityToBoost();
|
107
|
+
return sufficientLiquidity ? "boost" : undefined;
|
108
|
+
}
|
109
|
+
else if (this.repayFromBps() - this.state().liqUtilizationRateBps <=
|
110
|
+
bpsDistanceThreshold) {
|
111
|
+
return "repay";
|
112
|
+
}
|
113
|
+
return undefined;
|
114
|
+
}
|
115
|
+
eligibleForRefresh() {
|
116
|
+
if (this._data.selfManaged)
|
117
|
+
return false;
|
118
|
+
return ((0, utils_1.currentUnixSeconds)() - Number(this.state().lastRefreshed) >
|
119
|
+
60 * 60 * 24 * 7);
|
120
|
+
}
|
121
|
+
canRefreshPositionState() {
|
122
|
+
if (Number(this.state().lastRefreshed) >
|
123
|
+
(0, utils_1.currentUnixSeconds)() - constants_1.MIN_POSITION_STATE_FRESHNESS_SECS &&
|
124
|
+
!this.contextUpdates?.positionUpdates()) {
|
125
|
+
return false;
|
126
|
+
}
|
127
|
+
return true;
|
128
|
+
}
|
129
|
+
async utilizationRateBpsDrift() {
|
130
|
+
const supplyPrice = (0, utils_1.safeGetPrice)(this.state().supply.mint) ?? 0;
|
131
|
+
const debtPrice = (0, utils_1.safeGetPrice)(this.state().debt.mint) ?? 0;
|
132
|
+
const oldState = await (0, utils_1.positionStateWithLatestPrices)(this.firstState, supplyPrice, debtPrice);
|
133
|
+
const newState = await (0, utils_1.positionStateWithLatestPrices)(this.state(), supplyPrice, debtPrice);
|
134
|
+
return newState.liqUtilizationRateBps - oldState.liqUtilizationRateBps;
|
135
|
+
}
|
136
|
+
async updateWithLatestPrices(supplyPrice, debtPrice) {
|
137
|
+
this._data.state = await (0, utils_1.positionStateWithLatestPrices)(this.state(), supplyPrice, debtPrice);
|
138
|
+
}
|
139
|
+
async refetchPositionData() {
|
140
|
+
this._data = await (0, generated_1.fetchSolautoPosition)(this.umi, (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(this.publicKey));
|
141
|
+
}
|
142
|
+
}
|
143
|
+
exports.SolautoPositionEx = SolautoPositionEx;
|