@haven-fi/solauto-sdk 1.0.285 → 1.0.286
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/clients/solautoClient.js +4 -4
- package/dist/clients/solautoMarginfiClient.js +1 -1
- package/dist/generated/types/positionData.d.ts +6 -6
- package/dist/generated/types/positionData.d.ts.map +1 -1
- package/dist/generated/types/positionData.js +3 -3
- package/dist/utils/marginfiUtils.d.ts +4 -1
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +1 -1
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +26 -14
- package/package.json +1 -1
- package/src/clients/solautoClient.ts +4 -4
- package/src/clients/solautoMarginfiClient.ts +1 -1
- package/src/generated/types/positionData.ts +9 -9
- package/src/utils/marginfiUtils.ts +6 -2
- package/src/utils/solauto/generalUtils.ts +96 -56
|
@@ -31,15 +31,15 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
|
31
31
|
this.liqThresholdBps = undefined;
|
|
32
32
|
this.supplyMint =
|
|
33
33
|
args.supplyMint ??
|
|
34
|
-
(this.solautoPositionData
|
|
35
|
-
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.
|
|
34
|
+
(this.solautoPositionData && !this.selfManaged
|
|
35
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.state.supply.mint)
|
|
36
36
|
: web3_js_1.PublicKey.default);
|
|
37
37
|
this.positionSupplyTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.supplyMint);
|
|
38
38
|
this.signerSupplyTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.supplyMint);
|
|
39
39
|
this.debtMint =
|
|
40
40
|
args.debtMint ??
|
|
41
|
-
(this.solautoPositionData
|
|
42
|
-
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.
|
|
41
|
+
(this.solautoPositionData && !this.selfManaged
|
|
42
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.state.debt.mint)
|
|
43
43
|
: web3_js_1.PublicKey.default);
|
|
44
44
|
this.positionDebtTa = (0, accountUtils_1.getTokenAccount)(this.solautoPosition, this.debtMint);
|
|
45
45
|
this.signerDebtTa = (0, accountUtils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.debtMint);
|
|
@@ -29,7 +29,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
|
29
29
|
else {
|
|
30
30
|
this.marginfiAccountSeedIdx = (0, generalUtils_1.generateRandomU64)();
|
|
31
31
|
this.marginfiAccount = this.solautoPositionData
|
|
32
|
-
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.position.
|
|
32
|
+
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.solautoPositionData.position.protocolUserAccount)
|
|
33
33
|
: (0, accountUtils_1.getMarginfiAccountPDA)(this.solautoPosition, this.marginfiAccountSeedIdx, this.programId);
|
|
34
34
|
}
|
|
35
35
|
this.marginfiAccountPk =
|
|
@@ -11,9 +11,9 @@ import { DCASettings, DCASettingsArgs, LendingPlatform, LendingPlatformArgs, Sol
|
|
|
11
11
|
export type PositionData = {
|
|
12
12
|
lendingPlatform: LendingPlatform;
|
|
13
13
|
padding1: Array<number>;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
protocolUserAccount: PublicKey;
|
|
15
|
+
protocolSupplyAccount: PublicKey;
|
|
16
|
+
protocolDebtAccount: PublicKey;
|
|
17
17
|
settingParams: SolautoSettingsParameters;
|
|
18
18
|
dca: DCASettings;
|
|
19
19
|
padding: Array<number>;
|
|
@@ -21,9 +21,9 @@ export type PositionData = {
|
|
|
21
21
|
export type PositionDataArgs = {
|
|
22
22
|
lendingPlatform: LendingPlatformArgs;
|
|
23
23
|
padding1: Array<number>;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
protocolUserAccount: PublicKey;
|
|
25
|
+
protocolSupplyAccount: PublicKey;
|
|
26
|
+
protocolDebtAccount: PublicKey;
|
|
27
27
|
settingParams: SolautoSettingsParametersArgs;
|
|
28
28
|
dca: DCASettingsArgs;
|
|
29
29
|
padding: Array<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"positionData.d.ts","sourceRoot":"","sources":["../../../src/generated/types/positionData.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,6BAA6B,EAI9B,MAAM,GAAG,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"positionData.d.ts","sourceRoot":"","sources":["../../../src/generated/types/positionData.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EACL,UAAU,EAMX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,6BAA6B,EAI9B,MAAM,GAAG,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG;IACzB,eAAe,EAAE,eAAe,CAAC;IACjC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,mBAAmB,EAAE,SAAS,CAAC;IAC/B,qBAAqB,EAAE,SAAS,CAAC;IACjC,mBAAmB,EAAE,SAAS,CAAC;IAC/B,aAAa,EAAE,yBAAyB,CAAC;IACzC,GAAG,EAAE,WAAW,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,eAAe,EAAE,mBAAmB,CAAC;IACrC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACxB,mBAAmB,EAAE,SAAS,CAAC;IAC/B,qBAAqB,EAAE,SAAS,CAAC;IACjC,mBAAmB,EAAE,SAAS,CAAC;IAC/B,aAAa,EAAE,6BAA6B,CAAC;IAC7C,GAAG,EAAE,eAAe,CAAC;IACrB,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAgB,yBAAyB,IAAI,UAAU,CACrD,gBAAgB,EAChB,YAAY,CACb,CAcA"}
|
|
@@ -14,9 +14,9 @@ function getPositionDataSerializer() {
|
|
|
14
14
|
return (0, serializers_1.struct)([
|
|
15
15
|
['lendingPlatform', (0, _1.getLendingPlatformSerializer)()],
|
|
16
16
|
['padding1', (0, serializers_1.array)((0, serializers_1.u8)(), { size: 7 })],
|
|
17
|
-
['
|
|
18
|
-
['
|
|
19
|
-
['
|
|
17
|
+
['protocolUserAccount', (0, serializers_1.publicKey)()],
|
|
18
|
+
['protocolSupplyAccount', (0, serializers_1.publicKey)()],
|
|
19
|
+
['protocolDebtAccount', (0, serializers_1.publicKey)()],
|
|
20
20
|
['settingParams', (0, _1.getSolautoSettingsParametersSerializer)()],
|
|
21
21
|
['dca', (0, _1.getDCASettingsSerializer)()],
|
|
22
22
|
['padding', (0, serializers_1.array)((0, serializers_1.u32)(), { size: 4 })],
|
|
@@ -4,7 +4,10 @@ import { Bank, MarginfiAccount } from "../marginfi-sdk";
|
|
|
4
4
|
import { MarginfiAssetAccounts } from "../types/accounts";
|
|
5
5
|
import { PositionState } from "../generated";
|
|
6
6
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
|
7
|
-
|
|
7
|
+
interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
|
|
8
|
+
mint: PublicKey;
|
|
9
|
+
}
|
|
10
|
+
export declare function findMarginfiAccounts(bank: PublicKey): AllMarginfiAssetAccounts;
|
|
8
11
|
export declare function marginfiMaxLtvAndLiqThresholdBps(supplyBank: Bank, debtBank: Bank, supplyPrice: number): [number, number];
|
|
9
12
|
export declare function getMaxLtvAndLiqThreshold(umi: Umi, marginfiGroup: PublicKey, supply: {
|
|
10
13
|
mint: PublicKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAiBzB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,SAAS,GAAG,wBAAwB,CAY9E;AAED,wBAAgB,gCAAgC,CAC9C,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,IAAI,EACd,WAAW,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,CA6BlB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,GAAG,EACR,aAAa,EAAE,SAAS,EACxB,MAAM,EAAE;IACN,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,IAAI,EAAE;IACJ,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACpB,EACD,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwC3B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR;IAAE,eAAe,EAAE,SAAS,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,EAAE,SAAS,CAAA;CAAE,EAAE,CAC/E,CAwDA;AA6DD,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,KAAK,UAAU,GAAG;IAAE,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAAE,CAAC;AAEhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,eAAe,EAAE;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,EAC1D,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,mBAAmB,CAAC,EAAE,mBAAmB,GACxC,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0LpC;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB3B"}
|
|
@@ -21,7 +21,7 @@ function findMarginfiAccounts(bank) {
|
|
|
21
21
|
for (const key in marginfiAccounts_1.MARGINFI_ACCOUNTS[group]) {
|
|
22
22
|
const account = marginfiAccounts_1.MARGINFI_ACCOUNTS[group][key];
|
|
23
23
|
if (account.bank.toString().toLowerCase() === bank.toString().toLowerCase()) {
|
|
24
|
-
return account;
|
|
24
|
+
return { ...account, mint: new web3_js_1.PublicKey(key) };
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -26,7 +26,7 @@ const constants_1 = require("../../constants");
|
|
|
26
26
|
const marginfiUtils_1 = require("../marginfiUtils");
|
|
27
27
|
function createDynamicSolautoProgram(programId) {
|
|
28
28
|
return {
|
|
29
|
-
name:
|
|
29
|
+
name: "solauto",
|
|
30
30
|
publicKey: (0, umi_1.publicKey)(programId),
|
|
31
31
|
getErrorFromCode(code, cause) {
|
|
32
32
|
return (0, generated_1.getSolautoErrorFromCode)(code, this, cause);
|
|
@@ -86,10 +86,12 @@ function eligibleForRebalance(positionState, positionSettings, positionDca, curr
|
|
|
86
86
|
: positionSettings.boostToBps;
|
|
87
87
|
const repayFrom = positionSettings.repayToBps + positionSettings.repayGap;
|
|
88
88
|
const boostFrom = boostToBps - positionSettings.boostGap;
|
|
89
|
-
if (Math.max(0, positionState.liqUtilizationRateBps - boostFrom) <=
|
|
89
|
+
if (Math.max(0, positionState.liqUtilizationRateBps - boostFrom) <=
|
|
90
|
+
bpsDistanceThreshold) {
|
|
90
91
|
return "boost";
|
|
91
92
|
}
|
|
92
|
-
else if (Math.max(0, repayFrom - positionState.liqUtilizationRateBps) <=
|
|
93
|
+
else if (Math.max(0, repayFrom - positionState.liqUtilizationRateBps) <=
|
|
94
|
+
bpsDistanceThreshold) {
|
|
93
95
|
return "repay";
|
|
94
96
|
}
|
|
95
97
|
return undefined;
|
|
@@ -141,14 +143,16 @@ async function getSolautoManagedPositions(umi, authority, positionTypeFilter) {
|
|
|
141
143
|
},
|
|
142
144
|
]
|
|
143
145
|
: []),
|
|
144
|
-
...(positionTypeFilter !== undefined
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
146
|
+
...(positionTypeFilter !== undefined
|
|
147
|
+
? [
|
|
148
|
+
{
|
|
149
|
+
memcmp: {
|
|
150
|
+
bytes: new Uint8Array(positionTypeFilter),
|
|
151
|
+
offset: 3,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
]
|
|
155
|
+
: []),
|
|
152
156
|
],
|
|
153
157
|
});
|
|
154
158
|
return accounts.map((x) => {
|
|
@@ -156,15 +160,23 @@ async function getSolautoManagedPositions(umi, authority, positionTypeFilter) {
|
|
|
156
160
|
...x.data,
|
|
157
161
|
...Array((0, generated_1.getSolautoPositionSize)() - x.data.length).fill(0),
|
|
158
162
|
]));
|
|
163
|
+
let tokens;
|
|
164
|
+
if (position.position.lendingPlatform === generated_1.LendingPlatform.Marginfi) {
|
|
165
|
+
tokens = [
|
|
166
|
+
(0, marginfiUtils_1.findMarginfiAccounts)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(position.position.protocolSupplyAccount)).mint,
|
|
167
|
+
(0, marginfiUtils_1.findMarginfiAccounts)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(position.position.protocolDebtAccount)).mint,
|
|
168
|
+
];
|
|
169
|
+
}
|
|
170
|
+
// TODO: PK
|
|
159
171
|
return {
|
|
160
172
|
publicKey: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(x.publicKey),
|
|
161
173
|
authority: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(position.authority),
|
|
162
174
|
positionId: position.positionId[0],
|
|
163
175
|
lendingPlatform: position.position.lendingPlatform,
|
|
164
176
|
positionType: position.positionType,
|
|
165
|
-
protocolAccount: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(position.position.
|
|
166
|
-
supplyMint:
|
|
167
|
-
debtMint:
|
|
177
|
+
protocolAccount: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(position.position.protocolUserAccount),
|
|
178
|
+
supplyMint: tokens[0],
|
|
179
|
+
debtMint: tokens[1],
|
|
168
180
|
};
|
|
169
181
|
});
|
|
170
182
|
}
|
package/package.json
CHANGED
|
@@ -113,8 +113,8 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
|
113
113
|
|
|
114
114
|
this.supplyMint =
|
|
115
115
|
args.supplyMint ??
|
|
116
|
-
(this.solautoPositionData
|
|
117
|
-
? toWeb3JsPublicKey(this.solautoPositionData!.
|
|
116
|
+
(this.solautoPositionData && !this.selfManaged
|
|
117
|
+
? toWeb3JsPublicKey(this.solautoPositionData!.state.supply.mint)
|
|
118
118
|
: PublicKey.default);
|
|
119
119
|
this.positionSupplyTa = getTokenAccount(
|
|
120
120
|
this.solautoPosition,
|
|
@@ -127,8 +127,8 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
|
127
127
|
|
|
128
128
|
this.debtMint =
|
|
129
129
|
args.debtMint ??
|
|
130
|
-
(this.solautoPositionData
|
|
131
|
-
? toWeb3JsPublicKey(this.solautoPositionData!.
|
|
130
|
+
(this.solautoPositionData && !this.selfManaged
|
|
131
|
+
? toWeb3JsPublicKey(this.solautoPositionData!.state.debt.mint)
|
|
132
132
|
: PublicKey.default);
|
|
133
133
|
this.positionDebtTa = getTokenAccount(this.solautoPosition, this.debtMint);
|
|
134
134
|
this.signerDebtTa = getTokenAccount(
|
|
@@ -104,7 +104,7 @@ export class SolautoMarginfiClient extends SolautoClient {
|
|
|
104
104
|
} else {
|
|
105
105
|
this.marginfiAccountSeedIdx = generateRandomU64();
|
|
106
106
|
this.marginfiAccount = this.solautoPositionData
|
|
107
|
-
? toWeb3JsPublicKey(this.solautoPositionData.position.
|
|
107
|
+
? toWeb3JsPublicKey(this.solautoPositionData.position.protocolUserAccount)
|
|
108
108
|
: getMarginfiAccountPDA(
|
|
109
109
|
this.solautoPosition,
|
|
110
110
|
this.marginfiAccountSeedIdx,
|
|
@@ -30,9 +30,9 @@ import {
|
|
|
30
30
|
export type PositionData = {
|
|
31
31
|
lendingPlatform: LendingPlatform;
|
|
32
32
|
padding1: Array<number>;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
protocolUserAccount: PublicKey;
|
|
34
|
+
protocolSupplyAccount: PublicKey;
|
|
35
|
+
protocolDebtAccount: PublicKey;
|
|
36
36
|
settingParams: SolautoSettingsParameters;
|
|
37
37
|
dca: DCASettings;
|
|
38
38
|
padding: Array<number>;
|
|
@@ -41,9 +41,9 @@ export type PositionData = {
|
|
|
41
41
|
export type PositionDataArgs = {
|
|
42
42
|
lendingPlatform: LendingPlatformArgs;
|
|
43
43
|
padding1: Array<number>;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
44
|
+
protocolUserAccount: PublicKey;
|
|
45
|
+
protocolSupplyAccount: PublicKey;
|
|
46
|
+
protocolDebtAccount: PublicKey;
|
|
47
47
|
settingParams: SolautoSettingsParametersArgs;
|
|
48
48
|
dca: DCASettingsArgs;
|
|
49
49
|
padding: Array<number>;
|
|
@@ -57,9 +57,9 @@ export function getPositionDataSerializer(): Serializer<
|
|
|
57
57
|
[
|
|
58
58
|
['lendingPlatform', getLendingPlatformSerializer()],
|
|
59
59
|
['padding1', array(u8(), { size: 7 })],
|
|
60
|
-
['
|
|
61
|
-
['
|
|
62
|
-
['
|
|
60
|
+
['protocolUserAccount', publicKeySerializer()],
|
|
61
|
+
['protocolSupplyAccount', publicKeySerializer()],
|
|
62
|
+
['protocolDebtAccount', publicKeySerializer()],
|
|
63
63
|
['settingParams', getSolautoSettingsParametersSerializer()],
|
|
64
64
|
['dca', getDCASettingsSerializer()],
|
|
65
65
|
['padding', array(u32(), { size: 4 })],
|
|
@@ -31,14 +31,18 @@ import { USD_DECIMALS } from "../constants/generalAccounts";
|
|
|
31
31
|
import { LivePositionUpdates } from "./solauto/generalUtils";
|
|
32
32
|
import { TOKEN_INFO } from "../constants";
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
|
|
35
|
+
mint: PublicKey;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function findMarginfiAccounts(bank: PublicKey): AllMarginfiAssetAccounts {
|
|
35
39
|
for (const group in MARGINFI_ACCOUNTS) {
|
|
36
40
|
for (const key in MARGINFI_ACCOUNTS[group]) {
|
|
37
41
|
const account = MARGINFI_ACCOUNTS[group][key];
|
|
38
42
|
if (
|
|
39
43
|
account.bank.toString().toLowerCase() === bank.toString().toLowerCase()
|
|
40
44
|
) {
|
|
41
|
-
return account;
|
|
45
|
+
return { ...account, mint: new PublicKey(key) };
|
|
42
46
|
}
|
|
43
47
|
}
|
|
44
48
|
}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
isOption,
|
|
4
|
+
isSome,
|
|
5
|
+
Program,
|
|
6
|
+
publicKey,
|
|
7
|
+
Umi,
|
|
8
|
+
} from "@metaplex-foundation/umi";
|
|
3
9
|
import {
|
|
4
10
|
AutomationSettings,
|
|
5
11
|
DCASettings,
|
|
@@ -29,12 +35,15 @@ import {
|
|
|
29
35
|
TOKEN_INFO,
|
|
30
36
|
USD_DECIMALS,
|
|
31
37
|
} from "../../constants";
|
|
32
|
-
import {
|
|
38
|
+
import {
|
|
39
|
+
findMarginfiAccounts,
|
|
40
|
+
getAllMarginfiAccountsByAuthority,
|
|
41
|
+
} from "../marginfiUtils";
|
|
33
42
|
import { RebalanceAction, SolautoPositionDetails } from "../../types/solauto";
|
|
34
43
|
|
|
35
44
|
export function createDynamicSolautoProgram(programId: PublicKey): Program {
|
|
36
45
|
return {
|
|
37
|
-
name:
|
|
46
|
+
name: "solauto",
|
|
38
47
|
publicKey: publicKey(programId),
|
|
39
48
|
getErrorFromCode(code: number, cause?: Error) {
|
|
40
49
|
return getSolautoErrorFromCode(code, this, cause);
|
|
@@ -149,9 +158,15 @@ export function eligibleForRebalance(
|
|
|
149
158
|
const repayFrom = positionSettings.repayToBps + positionSettings.repayGap;
|
|
150
159
|
const boostFrom = boostToBps - positionSettings.boostGap;
|
|
151
160
|
|
|
152
|
-
if (
|
|
161
|
+
if (
|
|
162
|
+
Math.max(0, positionState.liqUtilizationRateBps - boostFrom) <=
|
|
163
|
+
bpsDistanceThreshold
|
|
164
|
+
) {
|
|
153
165
|
return "boost";
|
|
154
|
-
} else if (
|
|
166
|
+
} else if (
|
|
167
|
+
Math.max(0, repayFrom - positionState.liqUtilizationRateBps) <=
|
|
168
|
+
bpsDistanceThreshold
|
|
169
|
+
) {
|
|
155
170
|
return "repay";
|
|
156
171
|
}
|
|
157
172
|
|
|
@@ -193,42 +208,47 @@ export async function getSolautoManagedPositions(
|
|
|
193
208
|
// supply mint: pubkey
|
|
194
209
|
// debt mint: pubkey
|
|
195
210
|
|
|
196
|
-
const accounts = await umi.rpc.getProgramAccounts(
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
{
|
|
204
|
-
dataSize: getSolautoPositionSize(),
|
|
211
|
+
const accounts = await umi.rpc.getProgramAccounts(
|
|
212
|
+
umi.programs.get("solauto").publicKey,
|
|
213
|
+
{
|
|
214
|
+
commitment: "confirmed",
|
|
215
|
+
dataSlice: {
|
|
216
|
+
offset: 0,
|
|
217
|
+
length: 1 + 1 + 1 + 1 + 4 + 32 + 1 + 7 + 32 + 32 + 32, // bump + position_id + self_managed + position_type + padding (4) + authority (pubkey) + lending_platform + padding (7) + protocol account (pubkey) + supply mint (pubkey) + debt mint (pubkey)
|
|
205
218
|
},
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
offset: 2,
|
|
219
|
+
filters: [
|
|
220
|
+
{
|
|
221
|
+
dataSize: getSolautoPositionSize(),
|
|
210
222
|
},
|
|
211
|
-
},
|
|
212
|
-
...(authority
|
|
213
|
-
? [
|
|
214
|
-
{
|
|
215
|
-
memcmp: {
|
|
216
|
-
bytes: new Uint8Array(authority.toBuffer()),
|
|
217
|
-
offset: 8,
|
|
218
|
-
},
|
|
219
|
-
},
|
|
220
|
-
]
|
|
221
|
-
: []),
|
|
222
|
-
...(positionTypeFilter !== undefined ? [
|
|
223
223
|
{
|
|
224
224
|
memcmp: {
|
|
225
|
-
bytes: new Uint8Array(
|
|
226
|
-
offset:
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
225
|
+
bytes: new Uint8Array([0]),
|
|
226
|
+
offset: 2,
|
|
227
|
+
},
|
|
228
|
+
},
|
|
229
|
+
...(authority
|
|
230
|
+
? [
|
|
231
|
+
{
|
|
232
|
+
memcmp: {
|
|
233
|
+
bytes: new Uint8Array(authority.toBuffer()),
|
|
234
|
+
offset: 8,
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
]
|
|
238
|
+
: []),
|
|
239
|
+
...(positionTypeFilter !== undefined
|
|
240
|
+
? [
|
|
241
|
+
{
|
|
242
|
+
memcmp: {
|
|
243
|
+
bytes: new Uint8Array(positionTypeFilter),
|
|
244
|
+
offset: 3,
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
]
|
|
248
|
+
: []),
|
|
249
|
+
],
|
|
250
|
+
}
|
|
251
|
+
);
|
|
232
252
|
|
|
233
253
|
return accounts.map((x) => {
|
|
234
254
|
const [position, _] = getSolautoPositionAccountDataSerializer().deserialize(
|
|
@@ -237,32 +257,49 @@ export async function getSolautoManagedPositions(
|
|
|
237
257
|
...Array(getSolautoPositionSize() - x.data.length).fill(0),
|
|
238
258
|
])
|
|
239
259
|
);
|
|
260
|
+
|
|
261
|
+
let tokens: [PublicKey, PublicKey] | undefined;
|
|
262
|
+
if (position.position.lendingPlatform === LendingPlatform.Marginfi) {
|
|
263
|
+
tokens = [
|
|
264
|
+
findMarginfiAccounts(
|
|
265
|
+
toWeb3JsPublicKey(position.position.protocolSupplyAccount)
|
|
266
|
+
).mint,
|
|
267
|
+
findMarginfiAccounts(
|
|
268
|
+
toWeb3JsPublicKey(position.position.protocolDebtAccount)
|
|
269
|
+
).mint,
|
|
270
|
+
];
|
|
271
|
+
}
|
|
272
|
+
// TODO: PK
|
|
273
|
+
|
|
240
274
|
return {
|
|
241
275
|
publicKey: toWeb3JsPublicKey(x.publicKey),
|
|
242
276
|
authority: toWeb3JsPublicKey(position.authority),
|
|
243
277
|
positionId: position.positionId[0],
|
|
244
278
|
lendingPlatform: position.position.lendingPlatform,
|
|
245
279
|
positionType: position.positionType,
|
|
246
|
-
protocolAccount: toWeb3JsPublicKey(position.position.
|
|
247
|
-
supplyMint:
|
|
248
|
-
debtMint:
|
|
280
|
+
protocolAccount: toWeb3JsPublicKey(position.position.protocolUserAccount),
|
|
281
|
+
supplyMint: tokens![0],
|
|
282
|
+
debtMint: tokens![1],
|
|
249
283
|
};
|
|
250
284
|
});
|
|
251
285
|
}
|
|
252
286
|
|
|
253
287
|
export async function getAllReferralStates(umi: Umi): Promise<PublicKey[]> {
|
|
254
|
-
const accounts = await umi.rpc.getProgramAccounts(
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
{
|
|
262
|
-
dataSize: getReferralStateSize(),
|
|
288
|
+
const accounts = await umi.rpc.getProgramAccounts(
|
|
289
|
+
umi.programs.get("solauto").publicKey,
|
|
290
|
+
{
|
|
291
|
+
commitment: "confirmed",
|
|
292
|
+
dataSlice: {
|
|
293
|
+
offset: 0,
|
|
294
|
+
length: 0,
|
|
263
295
|
},
|
|
264
|
-
|
|
265
|
-
|
|
296
|
+
filters: [
|
|
297
|
+
{
|
|
298
|
+
dataSize: getReferralStateSize(),
|
|
299
|
+
},
|
|
300
|
+
],
|
|
301
|
+
}
|
|
302
|
+
);
|
|
266
303
|
|
|
267
304
|
return accounts.map((x) => toWeb3JsPublicKey(x.publicKey));
|
|
268
305
|
}
|
|
@@ -277,7 +314,10 @@ export async function getReferralsByUser(
|
|
|
277
314
|
// referred_by_state: Pubkey,
|
|
278
315
|
|
|
279
316
|
const programId = umi.programs.get("solauto").publicKey;
|
|
280
|
-
const userReferralState = getReferralState(
|
|
317
|
+
const userReferralState = getReferralState(
|
|
318
|
+
user,
|
|
319
|
+
toWeb3JsPublicKey(programId)
|
|
320
|
+
);
|
|
281
321
|
const accounts = await umi.rpc.getProgramAccounts(programId, {
|
|
282
322
|
commitment: "confirmed",
|
|
283
323
|
dataSlice: {
|
|
@@ -513,17 +553,17 @@ type PositionAdjustment =
|
|
|
513
553
|
| { type: "debt"; value: bigint }
|
|
514
554
|
| { type: "settings"; value: SolautoSettingsParametersInpArgs }
|
|
515
555
|
| { type: "dca"; value: DCASettingsInpArgs }
|
|
516
|
-
| { type: "dcaInBalance"; value: { amount: bigint; tokenType: TokenType
|
|
517
|
-
| { type: "cancellingDca"; value: TokenType
|
|
556
|
+
| { type: "dcaInBalance"; value: { amount: bigint; tokenType: TokenType } }
|
|
557
|
+
| { type: "cancellingDca"; value: TokenType };
|
|
518
558
|
|
|
519
559
|
export class LivePositionUpdates {
|
|
520
560
|
public supplyAdjustment = BigInt(0);
|
|
521
561
|
public debtAdjustment = BigInt(0);
|
|
522
562
|
public settings: SolautoSettingsParameters | undefined = undefined;
|
|
523
563
|
public activeDca: DCASettings | undefined = undefined;
|
|
524
|
-
public dcaInBalance?: { amount: bigint; tokenType: TokenType
|
|
564
|
+
public dcaInBalance?: { amount: bigint; tokenType: TokenType } = undefined;
|
|
525
565
|
public cancellingDca: TokenType | undefined = undefined;
|
|
526
|
-
|
|
566
|
+
|
|
527
567
|
new(update: PositionAdjustment) {
|
|
528
568
|
if (update.type === "supply") {
|
|
529
569
|
this.supplyAdjustment += update.value;
|