@haven-fi/solauto-sdk 1.0.629 → 1.0.631
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/README.md +32 -2
- package/dist/constants/marginfiAccounts.d.ts.map +1 -1
- package/dist/constants/solautoConstants.d.ts +2 -1
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiRebalance.d.ts +5 -3
- package/dist/generated/instructions/marginfiRebalance.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiRebalance.js +2 -1
- package/dist/generated/instructions/marginfiRefreshData.d.ts +7 -2
- package/dist/generated/instructions/marginfiRefreshData.d.ts.map +1 -1
- package/dist/generated/instructions/marginfiRefreshData.js +8 -4
- package/dist/generated/types/index.d.ts +1 -0
- package/dist/generated/types/index.d.ts.map +1 -1
- package/dist/generated/types/index.js +1 -0
- package/dist/generated/types/priceType.d.ts +15 -0
- package/dist/generated/types/priceType.d.ts.map +1 -0
- package/dist/generated/types/priceType.js +22 -0
- package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceSwapManager.js +8 -8
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts +2 -0
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +21 -10
- package/dist/services/rebalance/rebalanceValues.d.ts +2 -2
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceValues.js +17 -17
- package/dist/services/solauto/solautoClient.d.ts +2 -2
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +27 -28
- package/dist/services/solauto/solautoMarginfiClient.d.ts +2 -2
- package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoMarginfiClient.js +12 -10
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/services/transactions/transactionUtils.js +10 -9
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +3 -3
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +9 -9
- package/dist/solautoPosition/solautoPositionEx.d.ts +44 -33
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +112 -90
- package/dist/types/solauto.d.ts +2 -1
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/utils/instructionUtils.js +2 -2
- package/dist/utils/marginfiUtils.d.ts +2 -2
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +5 -5
- package/dist/utils/priceUtils.d.ts +11 -5
- package/dist/utils/priceUtils.d.ts.map +1 -1
- package/dist/utils/priceUtils.js +45 -21
- package/local/logPositions.ts +12 -12
- package/local/shared.ts +1 -1
- package/local/txSandbox.ts +29 -27
- package/local/updateMarginfiLUT.ts +13 -6
- package/package.json +1 -1
- package/src/constants/marginfiAccounts.ts +0 -1
- package/src/constants/solautoConstants.ts +1 -1
- package/src/generated/instructions/marginfiRebalance.ts +9 -3
- package/src/generated/instructions/marginfiRefreshData.ts +27 -7
- package/src/generated/types/index.ts +1 -0
- package/src/generated/types/priceType.ts +22 -0
- package/src/services/rebalance/rebalanceSwapManager.ts +8 -12
- package/src/services/rebalance/rebalanceTxBuilder.ts +41 -11
- package/src/services/rebalance/rebalanceValues.ts +22 -16
- package/src/services/solauto/solautoClient.ts +30 -30
- package/src/services/solauto/solautoMarginfiClient.ts +13 -10
- package/src/services/transactions/transactionUtils.ts +11 -9
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +11 -10
- package/src/solautoPosition/solautoPositionEx.ts +145 -117
- package/src/types/solauto.ts +2 -0
- package/src/utils/instructionUtils.ts +2 -2
- package/src/utils/marginfiUtils.ts +12 -8
- package/src/utils/priceUtils.ts +66 -22
- package/tests/transactions/shared.ts +2 -5
- package/tests/unit/rebalanceCalculations.ts +9 -12
package/README.md
CHANGED
@@ -49,13 +49,13 @@ const transactionItems = [
|
|
49
49
|
client,
|
50
50
|
toBaseUnit(
|
51
51
|
supplyUsdToDeposit / supplyPrice,
|
52
|
-
client.pos.supplyMintInfo
|
52
|
+
client.pos.supplyMintInfo.decimals
|
53
53
|
)
|
54
54
|
),
|
55
55
|
// Borrow debt (USDC) transaction
|
56
56
|
solauto.borrow(
|
57
57
|
client,
|
58
|
-
toBaseUnit(debtUsdToBorrow / debtPrice, client.pos.debtMintInfo
|
58
|
+
toBaseUnit(debtUsdToBorrow / debtPrice, client.pos.debtMintInfo.decimals)
|
59
59
|
),
|
60
60
|
// Rebalance to 0 LTV (repays all debt using collateral)
|
61
61
|
solauto.rebalance(client, 0),
|
@@ -70,3 +70,33 @@ const statuses = await new solauto.TransactionsManager(client).clientSend(
|
|
70
70
|
transactionItems
|
71
71
|
);
|
72
72
|
```
|
73
|
+
|
74
|
+
## Rebalancing an existing position
|
75
|
+
|
76
|
+
```typescript
|
77
|
+
import { PublicKey } from "@solana/web3.js";
|
78
|
+
import * as solauto from "@haven-fi/solauto-sdk";
|
79
|
+
|
80
|
+
// Create new Solauto client
|
81
|
+
const client = solauto.getClient(solauto.LendingPlatform.MARGINFI, {
|
82
|
+
signer: yourSigner,
|
83
|
+
rpcUrl: "[YOUR_RPC_URL]",
|
84
|
+
});
|
85
|
+
|
86
|
+
// Initialize the client
|
87
|
+
await client.initialize({
|
88
|
+
positionId: myPositionId,
|
89
|
+
authority: "[POSITION AUTHORITY]",
|
90
|
+
});
|
91
|
+
|
92
|
+
const transactionItems = [
|
93
|
+
solauto.rebalance(
|
94
|
+
client,
|
95
|
+
undefined // Provide target liquidation utilization rate if you want a specific LTV, otherwise it will rebalance according to position's settings (default)
|
96
|
+
),
|
97
|
+
];
|
98
|
+
|
99
|
+
const statuses = await new solauto.TransactionsManager(client).clientSend(
|
100
|
+
transactionItems
|
101
|
+
);
|
102
|
+
```
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;
|
1
|
+
{"version":3,"file":"marginfiAccounts.d.ts","sourceRoot":"","sources":["../../src/constants/marginfiAccounts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAetC,MAAM,MAAM,uBAAuB,GAAG;IACpC,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,qBAAqB,CAAA;KAAE,CAAC;CAC7D,CAAC;AAgLF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,SAAS,CAAC;IACnB,YAAY,EAAE,SAAS,CAAC;IACxB,WAAW,EAAE,SAAS,CAAC;IACvB,YAAY,EAAE,uBAAuB,CAAC;CACvC;AAED,wBAAgB,mBAAmB,CACjC,UAAU,CAAC,EAAE,UAAU,EACvB,aAAa,CAAC,EAAE,SAAS,GACxB,uBAAuB,CA4BzB;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,WAKrD"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAQzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,
|
1
|
+
{"version":3,"file":"solautoConstants.d.ts","sourceRoot":"","sources":["../../src/constants/solautoConstants.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,SAAS,EACV,MAAM,iBAAiB,CAAC;AAQzB,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,WAEhC,CAAC;AAIF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AACnD,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC,eAAO,MAAM,MAAM,EAAE;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAAO,CAAC;AAEvG,eAAO,MAAM,iBAAiB,UAS7B,CAAC;AAEF,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAC1E,eAAO,MAAM,qBAAqB,UAYR,CAAC"}
|
@@ -7,7 +7,7 @@
|
|
7
7
|
*/
|
8
8
|
import { Context, Option, OptionOrNullable, Pda, PublicKey, Signer, TransactionBuilder } from '@metaplex-foundation/umi';
|
9
9
|
import { Serializer } from '@metaplex-foundation/umi/serializers';
|
10
|
-
import { SolautoRebalanceType, SolautoRebalanceTypeArgs, SwapType, SwapTypeArgs } from '../types';
|
10
|
+
import { PriceType, PriceTypeArgs, SolautoRebalanceType, SolautoRebalanceTypeArgs, SwapType, SwapTypeArgs } from '../types';
|
11
11
|
export type MarginfiRebalanceInstructionAccounts = {
|
12
12
|
signer: Signer;
|
13
13
|
marginfiProgram: PublicKey | Pda;
|
@@ -38,16 +38,18 @@ export type MarginfiRebalanceInstructionAccounts = {
|
|
38
38
|
export type MarginfiRebalanceInstructionData = {
|
39
39
|
discriminator: number;
|
40
40
|
rebalanceType: SolautoRebalanceType;
|
41
|
-
targetLiqUtilizationRateBps: Option<number>;
|
42
41
|
swapInAmountBaseUnit: Option<bigint>;
|
42
|
+
targetLiqUtilizationRateBps: Option<number>;
|
43
43
|
flashLoanFeeBps: Option<number>;
|
44
|
+
priceType: Option<PriceType>;
|
44
45
|
swapType: Option<SwapType>;
|
45
46
|
};
|
46
47
|
export type MarginfiRebalanceInstructionDataArgs = {
|
47
48
|
rebalanceType: SolautoRebalanceTypeArgs;
|
48
|
-
targetLiqUtilizationRateBps: OptionOrNullable<number>;
|
49
49
|
swapInAmountBaseUnit: OptionOrNullable<number | bigint>;
|
50
|
+
targetLiqUtilizationRateBps: OptionOrNullable<number>;
|
50
51
|
flashLoanFeeBps: OptionOrNullable<number>;
|
52
|
+
priceType: OptionOrNullable<PriceTypeArgs>;
|
51
53
|
swapType: OptionOrNullable<SwapTypeArgs>;
|
52
54
|
};
|
53
55
|
export declare function getMarginfiRebalanceInstructionDataSerializer(): Serializer<MarginfiRebalanceInstructionDataArgs, MarginfiRebalanceInstructionData>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiRebalance.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRebalance.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAOX,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,QAAQ,EACR,YAAY,
|
1
|
+
{"version":3,"file":"marginfiRebalance.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRebalance.ts"],"names":[],"mappings":"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"}
|
@@ -17,9 +17,10 @@ function getMarginfiRebalanceInstructionDataSerializer() {
|
|
17
17
|
return (0, serializers_1.mapSerializer)((0, serializers_1.struct)([
|
18
18
|
['discriminator', (0, serializers_1.u8)()],
|
19
19
|
['rebalanceType', (0, types_1.getSolautoRebalanceTypeSerializer)()],
|
20
|
-
['targetLiqUtilizationRateBps', (0, serializers_1.option)((0, serializers_1.u16)())],
|
21
20
|
['swapInAmountBaseUnit', (0, serializers_1.option)((0, serializers_1.u64)())],
|
21
|
+
['targetLiqUtilizationRateBps', (0, serializers_1.option)((0, serializers_1.u16)())],
|
22
22
|
['flashLoanFeeBps', (0, serializers_1.option)((0, serializers_1.u16)())],
|
23
|
+
['priceType', (0, serializers_1.option)((0, types_1.getPriceTypeSerializer)())],
|
23
24
|
['swapType', (0, serializers_1.option)((0, types_1.getSwapTypeSerializer)())],
|
24
25
|
], { description: 'MarginfiRebalanceInstructionData' }), (value) => ({ ...value, discriminator: 9 }));
|
25
26
|
}
|
@@ -7,6 +7,7 @@
|
|
7
7
|
*/
|
8
8
|
import { Context, Pda, PublicKey, Signer, TransactionBuilder } from '@metaplex-foundation/umi';
|
9
9
|
import { Serializer } from '@metaplex-foundation/umi/serializers';
|
10
|
+
import { PriceType, PriceTypeArgs } from '../types';
|
10
11
|
export type MarginfiRefreshDataInstructionAccounts = {
|
11
12
|
signer: Signer;
|
12
13
|
marginfiProgram: PublicKey | Pda;
|
@@ -20,8 +21,12 @@ export type MarginfiRefreshDataInstructionAccounts = {
|
|
20
21
|
};
|
21
22
|
export type MarginfiRefreshDataInstructionData = {
|
22
23
|
discriminator: number;
|
24
|
+
priceType: PriceType;
|
25
|
+
};
|
26
|
+
export type MarginfiRefreshDataInstructionDataArgs = {
|
27
|
+
priceType: PriceTypeArgs;
|
23
28
|
};
|
24
|
-
export type MarginfiRefreshDataInstructionDataArgs = {};
|
25
29
|
export declare function getMarginfiRefreshDataInstructionDataSerializer(): Serializer<MarginfiRefreshDataInstructionDataArgs, MarginfiRefreshDataInstructionData>;
|
26
|
-
export
|
30
|
+
export type MarginfiRefreshDataInstructionArgs = MarginfiRefreshDataInstructionDataArgs;
|
31
|
+
export declare function marginfiRefreshData(context: Pick<Context, 'programs'>, input: MarginfiRefreshDataInstructionAccounts & MarginfiRefreshDataInstructionArgs): TransactionBuilder;
|
27
32
|
//# sourceMappingURL=marginfiRefreshData.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiRefreshData.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRefreshData.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAIX,MAAM,sCAAsC,CAAC;
|
1
|
+
{"version":3,"file":"marginfiRefreshData.d.ts","sourceRoot":"","sources":["../../../src/generated/instructions/marginfiRefreshData.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,OAAO,EACP,GAAG,EACH,SAAS,EACT,MAAM,EACN,kBAAkB,EAEnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,UAAU,EAIX,MAAM,sCAAsC,CAAC;AAM9C,OAAO,EAAE,SAAS,EAAE,aAAa,EAA0B,MAAM,UAAU,CAAC;AAG5E,MAAM,MAAM,sCAAsC,GAAG;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,aAAa,EAAE,SAAS,GAAG,GAAG,CAAC;IAC/B,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,UAAU,EAAE,SAAS,GAAG,GAAG,CAAC;IAC5B,iBAAiB,EAAE,SAAS,GAAG,GAAG,CAAC;IACnC,QAAQ,EAAE,SAAS,GAAG,GAAG,CAAC;IAC1B,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;IACjC,eAAe,EAAE,SAAS,GAAG,GAAG,CAAC;CAClC,CAAC;AAGF,MAAM,MAAM,kCAAkC,GAAG;IAC/C,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sCAAsC,GAAG;IACnD,SAAS,EAAE,aAAa,CAAC;CAC1B,CAAC;AAEF,wBAAgB,+CAA+C,IAAI,UAAU,CAC3E,sCAAsC,EACtC,kCAAkC,CACnC,CAkBA;AAGD,MAAM,MAAM,kCAAkC,GAC5C,sCAAsC,CAAC;AAGzC,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAClC,KAAK,EAAE,sCAAsC,GAC3C,kCAAkC,GACnC,kBAAkB,CAkFpB"}
|
@@ -12,10 +12,12 @@ exports.marginfiRefreshData = marginfiRefreshData;
|
|
12
12
|
const umi_1 = require("@metaplex-foundation/umi");
|
13
13
|
const serializers_1 = require("@metaplex-foundation/umi/serializers");
|
14
14
|
const shared_1 = require("../shared");
|
15
|
+
const types_1 = require("../types");
|
15
16
|
function getMarginfiRefreshDataInstructionDataSerializer() {
|
16
|
-
return (0, serializers_1.mapSerializer)((0, serializers_1.struct)([
|
17
|
-
|
18
|
-
|
17
|
+
return (0, serializers_1.mapSerializer)((0, serializers_1.struct)([
|
18
|
+
['discriminator', (0, serializers_1.u8)()],
|
19
|
+
['priceType', (0, types_1.getPriceTypeSerializer)()],
|
20
|
+
], { description: 'MarginfiRefreshDataInstructionData' }), (value) => ({ ...value, discriminator: 7 }));
|
19
21
|
}
|
20
22
|
// Instruction.
|
21
23
|
function marginfiRefreshData(context, input) {
|
@@ -69,12 +71,14 @@ function marginfiRefreshData(context, input) {
|
|
69
71
|
value: input.solautoPosition ?? null,
|
70
72
|
},
|
71
73
|
};
|
74
|
+
// Arguments.
|
75
|
+
const resolvedArgs = { ...input };
|
72
76
|
// Accounts in order.
|
73
77
|
const orderedAccounts = Object.values(resolvedAccounts).sort((a, b) => a.index - b.index);
|
74
78
|
// Keys and Signers.
|
75
79
|
const [keys, signers] = (0, shared_1.getAccountMetasAndSigners)(orderedAccounts, 'programId', programId);
|
76
80
|
// Data.
|
77
|
-
const data = getMarginfiRefreshDataInstructionDataSerializer().serialize(
|
81
|
+
const data = getMarginfiRefreshDataInstructionDataSerializer().serialize(resolvedArgs);
|
78
82
|
// Bytes Created On Chain.
|
79
83
|
const bytesCreatedOnChain = 0;
|
80
84
|
return (0, umi_1.transactionBuilder)([
|
@@ -15,6 +15,7 @@ export * from './positionData';
|
|
15
15
|
export * from './positionState';
|
16
16
|
export * from './positionTokenState';
|
17
17
|
export * from './positionType';
|
18
|
+
export * from './priceType';
|
18
19
|
export * from './rebalanceData';
|
19
20
|
export * from './rebalanceDirection';
|
20
21
|
export * from './rebalanceInstructionData';
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generated/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/generated/types/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
@@ -31,6 +31,7 @@ __exportStar(require("./positionData"), exports);
|
|
31
31
|
__exportStar(require("./positionState"), exports);
|
32
32
|
__exportStar(require("./positionTokenState"), exports);
|
33
33
|
__exportStar(require("./positionType"), exports);
|
34
|
+
__exportStar(require("./priceType"), exports);
|
34
35
|
__exportStar(require("./rebalanceData"), exports);
|
35
36
|
__exportStar(require("./rebalanceDirection"), exports);
|
36
37
|
__exportStar(require("./rebalanceInstructionData"), exports);
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* This code was AUTOGENERATED using the kinobi library.
|
3
|
+
* Please DO NOT EDIT THIS FILE, instead use visitors
|
4
|
+
* to add features, then rerun kinobi to update it.
|
5
|
+
*
|
6
|
+
* @see https://github.com/metaplex-foundation/kinobi
|
7
|
+
*/
|
8
|
+
import { Serializer } from '@metaplex-foundation/umi/serializers';
|
9
|
+
export declare enum PriceType {
|
10
|
+
Realtime = 0,
|
11
|
+
Ema = 1
|
12
|
+
}
|
13
|
+
export type PriceTypeArgs = PriceType;
|
14
|
+
export declare function getPriceTypeSerializer(): Serializer<PriceTypeArgs, PriceType>;
|
15
|
+
//# sourceMappingURL=priceType.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"priceType.d.ts","sourceRoot":"","sources":["../../../src/generated/types/priceType.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAc,MAAM,sCAAsC,CAAC;AAE9E,oBAAY,SAAS;IACnB,QAAQ,IAAA;IACR,GAAG,IAAA;CACJ;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,CAAC;AAEtC,wBAAgB,sBAAsB,IAAI,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAI7E"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
"use strict";
|
2
|
+
/**
|
3
|
+
* This code was AUTOGENERATED using the kinobi library.
|
4
|
+
* Please DO NOT EDIT THIS FILE, instead use visitors
|
5
|
+
* to add features, then rerun kinobi to update it.
|
6
|
+
*
|
7
|
+
* @see https://github.com/metaplex-foundation/kinobi
|
8
|
+
*/
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
10
|
+
exports.PriceType = void 0;
|
11
|
+
exports.getPriceTypeSerializer = getPriceTypeSerializer;
|
12
|
+
const serializers_1 = require("@metaplex-foundation/umi/serializers");
|
13
|
+
var PriceType;
|
14
|
+
(function (PriceType) {
|
15
|
+
PriceType[PriceType["Realtime"] = 0] = "Realtime";
|
16
|
+
PriceType[PriceType["Ema"] = 1] = "Ema";
|
17
|
+
})(PriceType || (exports.PriceType = PriceType = {}));
|
18
|
+
function getPriceTypeSerializer() {
|
19
|
+
return (0, serializers_1.scalarEnum)(PriceType, {
|
20
|
+
description: 'PriceType',
|
21
|
+
});
|
22
|
+
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceSwapManager.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceSwapManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAkB,UAAU,EAAa,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
1
|
+
{"version":3,"file":"rebalanceSwapManager.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceSwapManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAkB,UAAU,EAAa,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAWpD,qBAAa,oBAAoB;IAQ7B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc,CAAC;IACvB,OAAO,CAAC,2BAA2B,CAAC;IAV/B,UAAU,EAAG,UAAU,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IAE/B,OAAO,CAAC,cAAc,CAAkB;gBAG9B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,eAAe,EACvB,cAAc,CAAC,EAAE,qBAAqB,YAAA,EACtC,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAK9C,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,kCAAkC;YA6B5B,mBAAmB;IAoCjC,OAAO,CAAC,WAAW;IAoBnB,OAAO,CAAC,mBAAmB;IAIrB,aAAa,CAAC,UAAU,EAAE,MAAM;IA+EhC,aAAa;;;;;;CAWpB"}
|
@@ -24,8 +24,8 @@ class RebalanceSwapManager {
|
|
24
24
|
// TODO: add token balance change
|
25
25
|
let debtUsd = this.client.pos.debtUsd();
|
26
26
|
const outputToken = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.isBoost()
|
27
|
-
? this.client.pos.state
|
28
|
-
: this.client.pos.state
|
27
|
+
? this.client.pos.state.supply.mint
|
28
|
+
: this.client.pos.state.debt.mint);
|
29
29
|
const swapOutputUsd = swapOutputAmount
|
30
30
|
? (0, utils_1.fromBaseUnit)(swapOutputAmount, (0, utils_1.tokenInfo)(outputToken).decimals) *
|
31
31
|
((0, utils_1.safeGetPrice)(outputToken) ?? 0)
|
@@ -36,7 +36,7 @@ class RebalanceSwapManager {
|
|
36
36
|
debtUsd = this.isBoost()
|
37
37
|
? debtUsd + this.usdToSwap()
|
38
38
|
: debtUsd - swapOutputUsd;
|
39
|
-
return (0, utils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, this.client.pos.state
|
39
|
+
return (0, utils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, this.client.pos.state.liqThresholdBps ?? 0);
|
40
40
|
}
|
41
41
|
async findSufficientQuote(swapInput, criteria) {
|
42
42
|
let swapQuote;
|
@@ -63,11 +63,11 @@ class RebalanceSwapManager {
|
|
63
63
|
}
|
64
64
|
swapDetails() {
|
65
65
|
const input = this.isBoost()
|
66
|
-
? this.client.pos.state
|
67
|
-
: this.client.pos.state
|
66
|
+
? this.client.pos.state.debt
|
67
|
+
: this.client.pos.state.supply;
|
68
68
|
const output = this.isBoost()
|
69
|
-
? this.client.pos.state
|
70
|
-
: this.client.pos.state
|
69
|
+
? this.client.pos.state.supply
|
70
|
+
: this.client.pos.state.debt;
|
71
71
|
let inputAmount = (0, utils_1.toBaseUnit)(this.usdToSwap() / (0, utils_1.safeGetPrice)(input.mint), input.decimals);
|
72
72
|
return {
|
73
73
|
input,
|
@@ -116,7 +116,7 @@ class RebalanceSwapManager {
|
|
116
116
|
this.swapQuote = await this.findSufficientQuote(swapInput, {
|
117
117
|
minOutputAmount: rebalanceToZero ? outputAmount : undefined,
|
118
118
|
maxLiqUtilizationRateBps: this.values.repayingCloseToMaxLtv
|
119
|
-
?
|
119
|
+
? this.client.pos.maxRepayToBps - 15
|
120
120
|
: undefined,
|
121
121
|
});
|
122
122
|
}
|
@@ -7,6 +7,7 @@ export declare class RebalanceTxBuilder {
|
|
7
7
|
private rebalanceType;
|
8
8
|
private swapManager;
|
9
9
|
private flRequirements?;
|
10
|
+
private priceType;
|
10
11
|
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined);
|
11
12
|
private shouldProceedWithRebalance;
|
12
13
|
private getRebalanceValues;
|
@@ -14,6 +15,7 @@ export declare class RebalanceTxBuilder {
|
|
14
15
|
private flashLoanRequirements;
|
15
16
|
private getFlashLoanDetails;
|
16
17
|
private setRebalanceType;
|
18
|
+
private realtimeUsdToEmaUsd;
|
17
19
|
private setRebalanceDetails;
|
18
20
|
private refreshBeforeRebalance;
|
19
21
|
private assembleTransaction;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;
|
1
|
+
{"version":3,"file":"rebalanceTxBuilder.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceTxBuilder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAGL,qBAAqB,EACtB,MAAM,aAAa,CAAC;AA0BrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IARtC,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,aAAa,CAAwB;IAC7C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,cAAc,CAAC,CAAwB;IAC/C,OAAO,CAAC,SAAS,CAAa;gBAGpB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAQlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAyCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,mBAAmB;YAOb,mBAAmB;YAqCnB,sBAAsB;YAyBtB,mBAAmB;IAkEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAW9C"}
|
@@ -19,8 +19,8 @@ class RebalanceTxBuilder {
|
|
19
19
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
20
20
|
this.client.pos.eligibleForRebalance()));
|
21
21
|
}
|
22
|
-
getRebalanceValues(flFee) {
|
23
|
-
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred(), this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd
|
22
|
+
getRebalanceValues(priceType, flFee) {
|
23
|
+
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, priceType, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred(), this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd), flFee ?? 0);
|
24
24
|
}
|
25
25
|
getFlLiquiditySource(supplyLiquidityAvailable, debtLiquidityAvailable) {
|
26
26
|
const debtAdjustmentUsd = Math.abs(this.values.debtAdjustmentUsd);
|
@@ -30,8 +30,8 @@ class RebalanceTxBuilder {
|
|
30
30
|
((0, utils_1.safeGetPrice)(tokenMint) ?? 0) *
|
31
31
|
0.95);
|
32
32
|
};
|
33
|
-
const insufficientSupplyLiquidity = insufficientLiquidity(debtAdjustmentUsd, supplyLiquidityAvailable, this.client.pos.supplyMint
|
34
|
-
const insufficientDebtLiquidity = insufficientLiquidity(debtAdjustmentUsd, debtLiquidityAvailable, this.client.pos.debtMint
|
33
|
+
const insufficientSupplyLiquidity = insufficientLiquidity(debtAdjustmentUsd, supplyLiquidityAvailable, this.client.pos.supplyMint);
|
34
|
+
const insufficientDebtLiquidity = insufficientLiquidity(debtAdjustmentUsd, debtLiquidityAvailable, this.client.pos.debtMint);
|
35
35
|
let useDebtLiquidity = this.values.rebalanceDirection === generated_1.RebalanceDirection.Boost ||
|
36
36
|
insufficientSupplyLiquidity;
|
37
37
|
if (useDebtLiquidity) {
|
@@ -42,7 +42,7 @@ class RebalanceTxBuilder {
|
|
42
42
|
}
|
43
43
|
}
|
44
44
|
async flashLoanRequirements(attemptNum) {
|
45
|
-
const maxLtvRateBps = (0, utils_1.getMaxLiqUtilizationRateBps)(this.client.pos.state
|
45
|
+
const maxLtvRateBps = (0, utils_1.getMaxLiqUtilizationRateBps)(this.client.pos.state.maxLtvBps, this.client.pos.state.liqThresholdBps, 0.02);
|
46
46
|
if (this.values.intermediaryLiqUtilizationRateBps < maxLtvRateBps) {
|
47
47
|
return undefined;
|
48
48
|
}
|
@@ -75,10 +75,10 @@ class RebalanceTxBuilder {
|
|
75
75
|
const useDebtLiquidity = this.flRequirements.liquiditySource === generated_1.TokenType.Debt;
|
76
76
|
let flashLoanToken = undefined;
|
77
77
|
if (boosting || useDebtLiquidity) {
|
78
|
-
flashLoanToken = this.client.pos.state
|
78
|
+
flashLoanToken = this.client.pos.state.debt;
|
79
79
|
}
|
80
80
|
else {
|
81
|
-
flashLoanToken = this.client.pos.state
|
81
|
+
flashLoanToken = this.client.pos.state.supply;
|
82
82
|
}
|
83
83
|
return {
|
84
84
|
...this.flRequirements,
|
@@ -113,8 +113,18 @@ class RebalanceTxBuilder {
|
|
113
113
|
this.rebalanceType = generated_1.SolautoRebalanceType.Regular;
|
114
114
|
}
|
115
115
|
}
|
116
|
+
realtimeUsdToEmaUsd(realtimeAmountUsd, mint) {
|
117
|
+
return ((realtimeAmountUsd / (0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
|
118
|
+
(0, utils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
|
119
|
+
}
|
116
120
|
async setRebalanceDetails(attemptNum) {
|
117
|
-
this.
|
121
|
+
this.priceType = generated_1.PriceType.Realtime;
|
122
|
+
this.values = this.getRebalanceValues(this.priceType);
|
123
|
+
const postRebalanceEmaUtilRateBps = (0, utils_1.getLiqUtilzationRateBps)(this.realtimeUsdToEmaUsd(this.values.endResult.supplyUsd, this.client.pos.supplyMint), this.realtimeUsdToEmaUsd(this.values.endResult.debtUsd, this.client.pos.debtMint), this.client.pos.state.liqThresholdBps);
|
124
|
+
if (postRebalanceEmaUtilRateBps > this.client.pos.maxBoostToBps) {
|
125
|
+
this.priceType = generated_1.PriceType.Ema;
|
126
|
+
this.values = this.getRebalanceValues(this.priceType);
|
127
|
+
}
|
118
128
|
this.flRequirements = await this.flashLoanRequirements(attemptNum);
|
119
129
|
if (this.flRequirements?.flFeeBps) {
|
120
130
|
this.values = this.getRebalanceValues(this.flRequirements.flFeeBps);
|
@@ -127,7 +137,7 @@ class RebalanceTxBuilder {
|
|
127
137
|
if (this.client.selfManaged ||
|
128
138
|
this.client.contextUpdates.supplyAdjustment > BigInt(0) ||
|
129
139
|
this.client.contextUpdates.debtAdjustment > BigInt(0) ||
|
130
|
-
!this.client.pos.exists
|
140
|
+
!this.client.pos.exists) {
|
131
141
|
return false;
|
132
142
|
}
|
133
143
|
// Rebalance ix will already refresh internally if position is self managed
|
@@ -147,7 +157,7 @@ class RebalanceTxBuilder {
|
|
147
157
|
: undefined;
|
148
158
|
let tx = (0, umi_1.transactionBuilder)();
|
149
159
|
if (await this.refreshBeforeRebalance()) {
|
150
|
-
tx = tx.add(this.client.refreshIx());
|
160
|
+
tx = tx.add(this.client.refreshIx(this.priceType));
|
151
161
|
}
|
152
162
|
const rebalanceDetails = {
|
153
163
|
values: this.values,
|
@@ -155,6 +165,7 @@ class RebalanceTxBuilder {
|
|
155
165
|
flashLoan: flashLoanDetails,
|
156
166
|
swapQuote,
|
157
167
|
targetLiqUtilizationRateBps: this.targetLiqUtilizationRateBps,
|
168
|
+
priceType: this.priceType,
|
158
169
|
};
|
159
170
|
(0, utils_1.consoleLog)("Rebalance details:", rebalanceDetails);
|
160
171
|
const firstRebalance = this.client.rebalanceIx(generated_1.RebalanceStep.PreSwap, rebalanceDetails);
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { RebalanceDirection, TokenBalanceChange } from "../../generated";
|
1
|
+
import { PriceType, RebalanceDirection, TokenBalanceChange } from "../../generated";
|
2
2
|
import { SolautoPositionEx } from "../../solautoPosition";
|
3
3
|
import { SolautoFeesBps } from "./solautoFees";
|
4
4
|
export interface PositionValues {
|
@@ -26,6 +26,6 @@ export interface RebalanceValues extends DebtAdjustment {
|
|
26
26
|
tokenBalanceChange?: TokenBalanceChange;
|
27
27
|
repayingCloseToMaxLtv: boolean;
|
28
28
|
}
|
29
|
-
export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues;
|
29
|
+
export declare function getRebalanceValues(solautoPosition: SolautoPositionEx, priceType: PriceType, targetLiqUtilizationRateBps?: number, solautoFeeBps?: SolautoFeesBps, flFeeBps?: number): RebalanceValues;
|
30
30
|
export {};
|
31
31
|
//# sourceMappingURL=rebalanceValues.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;
|
1
|
+
{"version":3,"file":"rebalanceValues.d.ts","sourceRoot":"","sources":["../../../src/services/rebalance/rebalanceValues.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,cAAc,CAAC;IAC1B,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,yBAAyB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,iCAAiC,EAAE,MAAM,CAAC;CAC3C;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,EACzB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE,gBAAgB,GACtB,yBAAyB,CA8B3B;AAED,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE,MAAM,EACvB,GAAG,EAAE,cAAc,EACnB,2BAA2B,EAAE,MAAM,EACnC,IAAI,CAAC,EAAE,gBAAgB,GACtB,cAAc,CAgChB;AA2ED,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACrD,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,iBAAiB,EAClC,SAAS,EAAE,SAAS,EACpB,2BAA2B,CAAC,EAAE,MAAM,EACpC,aAAa,CAAC,EAAE,cAAc,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CA2CjB"}
|
@@ -51,16 +51,17 @@ function getTokenBalanceChange() {
|
|
51
51
|
// TODO: DCA, limit orders, take profit, stop loss, etc.
|
52
52
|
return undefined;
|
53
53
|
}
|
54
|
-
function getTargetLiqUtilizationRateBps(solautoPosition, targetLiqUtilizationRateBps, tokenBalanceChange) {
|
54
|
+
function getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUtilizationRateBps, tokenBalanceChange) {
|
55
55
|
if (targetLiqUtilizationRateBps !== undefined) {
|
56
56
|
return targetLiqUtilizationRateBps;
|
57
57
|
}
|
58
|
-
|
59
|
-
|
60
|
-
return solautoPosition.settings
|
58
|
+
if (solautoPosition.liqUtilizationRateBps(generated_1.PriceType.Realtime) >=
|
59
|
+
solautoPosition.repayFromBps) {
|
60
|
+
return solautoPosition.settings.repayToBps;
|
61
61
|
}
|
62
|
-
else if (
|
63
|
-
|
62
|
+
else if (solautoPosition.liqUtilizationRateBps(priceType) <=
|
63
|
+
solautoPosition.boostFromBps) {
|
64
|
+
return solautoPosition.settings.boostToBps;
|
64
65
|
}
|
65
66
|
// TODO: DCA, limit orders, take profit, stop loss, etc.
|
66
67
|
// else if (tokenBalanceChange !== null) {
|
@@ -68,9 +69,9 @@ function getTargetLiqUtilizationRateBps(solautoPosition, targetLiqUtilizationRat
|
|
68
69
|
// }
|
69
70
|
throw new Error("Invalid rebalance condition");
|
70
71
|
}
|
71
|
-
function getAdjustedPositionValues(solautoPosition, tokenBalanceChange) {
|
72
|
-
let supplyUsd = solautoPosition.supplyUsd();
|
73
|
-
const debtUsd = solautoPosition.debtUsd();
|
72
|
+
function getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange) {
|
73
|
+
let supplyUsd = solautoPosition.supplyUsd(priceType);
|
74
|
+
const debtUsd = solautoPosition.debtUsd(priceType);
|
74
75
|
if (tokenBalanceChange) {
|
75
76
|
const tb = tokenBalanceChange;
|
76
77
|
switch (tb.changeType) {
|
@@ -92,26 +93,25 @@ function getAdjustedPositionValues(solautoPosition, tokenBalanceChange) {
|
|
92
93
|
};
|
93
94
|
}
|
94
95
|
function getRebalanceDirection(solautoPosition, targetLtvBps) {
|
95
|
-
return solautoPosition.state
|
96
|
+
return solautoPosition.state.liqUtilizationRateBps < targetLtvBps
|
96
97
|
? generated_1.RebalanceDirection.Boost
|
97
98
|
: generated_1.RebalanceDirection.Repay;
|
98
99
|
}
|
99
|
-
function getRebalanceValues(solautoPosition, targetLiqUtilizationRateBps, solautoFeeBps, flFeeBps) {
|
100
|
+
function getRebalanceValues(solautoPosition, priceType, targetLiqUtilizationRateBps, solautoFeeBps, flFeeBps) {
|
100
101
|
const tokenBalanceChange = getTokenBalanceChange();
|
101
|
-
const targetRate = getTargetLiqUtilizationRateBps(solautoPosition, targetLiqUtilizationRateBps, tokenBalanceChange);
|
102
|
+
const targetRate = getTargetLiqUtilizationRateBps(solautoPosition, priceType, targetLiqUtilizationRateBps, tokenBalanceChange);
|
102
103
|
const rebalanceDirection = getRebalanceDirection(solautoPosition, targetRate);
|
103
|
-
const position = getAdjustedPositionValues(solautoPosition, tokenBalanceChange);
|
104
|
+
const position = getAdjustedPositionValues(solautoPosition, priceType, tokenBalanceChange);
|
104
105
|
const fees = {
|
105
106
|
solauto: solautoFeeBps
|
106
107
|
? solautoFeeBps.getSolautoFeesBps(rebalanceDirection).total
|
107
108
|
: 0,
|
108
|
-
lpBorrow: solautoPosition.state
|
109
|
+
lpBorrow: solautoPosition.state.debt.borrowFeeBps,
|
109
110
|
flashLoan: flFeeBps ?? 0,
|
110
111
|
};
|
111
|
-
const debtAdjustment = getDebtAdjustment(solautoPosition.state
|
112
|
+
const debtAdjustment = getDebtAdjustment(solautoPosition.state.liqThresholdBps, position, targetRate, fees);
|
112
113
|
const repayingCloseToMaxLtv = rebalanceDirection === generated_1.RebalanceDirection.Repay &&
|
113
|
-
targetRate >=
|
114
|
-
(0, utils_1.maxRepayToBps)(solautoPosition.state().maxLtvBps, solautoPosition.state().liqThresholdBps);
|
114
|
+
targetRate >= solautoPosition.maxRepayToBps;
|
115
115
|
return {
|
116
116
|
...debtAdjustment,
|
117
117
|
rebalanceDirection,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import "rpc-websockets/dist/lib/client";
|
2
2
|
import { PublicKey } from "@solana/web3.js";
|
3
3
|
import { TransactionBuilder } from "@metaplex-foundation/umi";
|
4
|
-
import { DCASettingsInpArgs, LendingPlatform, RebalanceStep, SolautoActionArgs, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../../generated";
|
4
|
+
import { DCASettingsInpArgs, LendingPlatform, PriceType, RebalanceStep, SolautoActionArgs, SolautoSettingsParametersInpArgs, UpdatePositionDataArgs } from "../../generated";
|
5
5
|
import { ContextUpdates } from "../../utils";
|
6
6
|
import { ProgramEnv, RebalanceDetails } from "../../types";
|
7
7
|
import { ReferralStateManager, ReferralStateManagerArgs } from "./referralStateManager";
|
@@ -53,7 +53,7 @@ export declare abstract class SolautoClient extends ReferralStateManager {
|
|
53
53
|
updatePositionIx(args: UpdatePositionDataArgs): TransactionBuilder;
|
54
54
|
abstract closePositionIx(): TransactionBuilder;
|
55
55
|
cancelDCAIx(): TransactionBuilder;
|
56
|
-
abstract refreshIx(): TransactionBuilder;
|
56
|
+
abstract refreshIx(priceType: PriceType): TransactionBuilder;
|
57
57
|
protocolInteractionIx(args: SolautoActionArgs): TransactionBuilder;
|
58
58
|
abstract rebalanceIx(rebalanceStep: RebalanceStep, data: RebalanceDetails): TransactionBuilder;
|
59
59
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAA6B,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACvE,OAAO,EACL,kBAAkB,EAMnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAML,cAAc,EACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAEL,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,iBAAkB,SAAQ,wBAAwB;IACjE,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,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,8BAAsB,aAAc,SAAQ,oBAAoB;IACvD,eAAe,EAAG,eAAe,CAAC;IAClC,KAAK,EAAG,UAAU,CAAC;IAEnB,SAAS,EAAG,SAAS,CAAC;IAEtB,UAAU,EAAG,MAAM,CAAC;IACpB,WAAW,EAAG,OAAO,CAAC;IACtB,GAAG,EAAG,iBAAiB,CAAC;IAExB,gBAAgB,EAAG,SAAS,CAAC;IAC7B,cAAc,EAAG,SAAS,CAAC;IAE3B,cAAc,EAAG,SAAS,CAAC;IAC3B,YAAY,EAAG,SAAS,CAAC;IAEzB,mBAAmB,EAAG,SAAS,CAAC;IAChC,iBAAiB,EAAG,SAAS,CAAC;IAE9B,mBAAmB,CAAC,EAAE,SAAS,CAAC;IAEhC,UAAU,EAAG,oBAAoB,CAAC;IAClC,cAAc,EAAE,cAAc,CAAwB;IAE7D,OAAO,CAAC,mBAAmB,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAqB;IAExC,UAAU,CAAC,IAAI,EAAE,iBAAiB;IAoFxC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAkB1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAgBzB,iCAAiC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAUzD,iBAAiB,IAAI,OAAO,CAC9B;QACE,EAAE,EAAE,kBAAkB,CAAC;QACvB,GAAG,EAAE,OAAO,CAAC;QACb,aAAa,EAAE,SAAS,EAAE,CAAC;KAC5B,GACD,SAAS,CACZ;IAgEK,cAAc,IAAI,OAAO,CAAC;QAC9B,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IAgBF,cAAc,CACZ,QAAQ,CAAC,EAAE,gCAAgC,EAC3C,GAAG,CAAC,EAAE,kBAAkB,GACvB,kBAAkB;IA0BrB,gBAAgB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB;IAsDlE,QAAQ,CAAC,eAAe,IAAI,kBAAkB;IAE9C,WAAW,IAAI,kBAAkB;IAgCjC,QAAQ,CAAC,SAAS,
|
1
|
+
{"version":3,"file":"solautoClient.d.ts","sourceRoot":"","sources":["../../../src/services/solauto/solautoClient.ts"],"names":[],"mappings":"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"}
|