@haven-fi/solauto-sdk 1.0.670 → 1.0.672
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/generated/types/positionData.d.ts +3 -3
- package/dist/generated/types/positionData.d.ts.map +1 -1
- package/dist/generated/types/positionData.js +2 -2
- package/dist/idls/switchboard.json +0 -1949
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +3 -0
- package/dist/services/solauto/solautoClient.d.ts +1 -1
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +2 -25
- package/dist/services/solauto/solautoMarginfiClient.js +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +0 -2
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +3 -17
- package/dist/solautoPosition/positionUtils.d.ts.map +1 -1
- package/dist/solautoPosition/positionUtils.js +6 -1
- package/dist/solautoPosition/solautoPositionEx.d.ts +5 -7
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +8 -11
- package/dist/utils/marginfi/data.d.ts +2 -2
- package/dist/utils/marginfi/data.d.ts.map +1 -1
- package/dist/utils/marginfi/data.js +6 -2
- package/local/txSandbox.ts +67 -12
- package/package.json +1 -1
- package/src/generated/types/positionData.ts +4 -7
- package/src/services/rebalance/rebalanceTxBuilder.ts +4 -0
- package/src/services/solauto/solautoClient.ts +3 -27
- package/src/services/solauto/solautoMarginfiClient.ts +1 -1
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +4 -32
- package/src/solautoPosition/positionUtils.ts +8 -1
- package/src/solautoPosition/solautoPositionEx.ts +14 -18
- package/src/utils/marginfi/data.ts +16 -7
- package/dist/constants/generalConstants.d.ts +0 -7
- package/dist/constants/generalConstants.d.ts.map +0 -1
- package/dist/constants/generalConstants.js +0 -10
- package/dist/constants/index.d.ts +0 -7
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -22
- package/dist/constants/marginfiAccounts.d.ts +0 -17
- package/dist/constants/marginfiAccounts.d.ts.map +0 -1
- package/dist/constants/marginfiAccounts.js +0 -234
- package/dist/constants/pythConstants.d.ts +0 -24
- package/dist/constants/pythConstants.d.ts.map +0 -1
- package/dist/constants/pythConstants.js +0 -52
- package/dist/constants/solautoConstants.d.ts +0 -19
- package/dist/constants/solautoConstants.d.ts.map +0 -1
- package/dist/constants/solautoConstants.js +0 -40
- package/dist/constants/switchboardConstants.d.ts +0 -9
- package/dist/constants/switchboardConstants.d.ts.map +0 -1
- package/dist/constants/switchboardConstants.js +0 -54
- package/dist/constants/tokenConstants.d.ts +0 -40
- package/dist/constants/tokenConstants.d.ts.map +0 -1
- package/dist/constants/tokenConstants.js +0 -174
- package/dist/index.d.ts +0 -12
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -27
- package/dist/utils/index.d.ts +0 -14
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -29
- package/dist/utils/switchboardUtils.d.ts +0 -12
- package/dist/utils/switchboardUtils.d.ts.map +0 -1
- package/dist/utils/switchboardUtils.js +0 -81
@@ -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;AA2BrB,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,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;
|
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;AA2BrB,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,CAAiC;gBAGxC,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,YAAA;IAG9C,OAAO,CAAC,0BAA0B;IAYlC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;YAyCd,qBAAqB;IAwCnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAwBnB,sBAAsB;YAyBtB,mBAAmB;IAmEpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
|
@@ -16,6 +16,9 @@ class RebalanceTxBuilder {
|
|
16
16
|
this.priceType = generated_1.PriceType.Realtime;
|
17
17
|
}
|
18
18
|
shouldProceedWithRebalance() {
|
19
|
+
if (this.client.pos.selfManaged && !this.targetLiqUtilizationRateBps) {
|
20
|
+
throw new Error("A target rate must be provided for self managed position rebalances");
|
21
|
+
}
|
19
22
|
return (this.client.pos.supplyUsd() > 0 &&
|
20
23
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
21
24
|
this.client.pos.eligibleForRebalance()));
|
@@ -11,7 +11,7 @@ export interface SolautoClientArgs extends ReferralStateManagerArgs {
|
|
11
11
|
positionId?: number;
|
12
12
|
supplyMint?: PublicKey;
|
13
13
|
debtMint?: PublicKey;
|
14
|
-
|
14
|
+
lpPoolAccount?: PublicKey;
|
15
15
|
lpUserAccount?: PublicKey;
|
16
16
|
}
|
17
17
|
export declare abstract class SolautoClient extends ReferralStateManager {
|
@@ -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,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,
|
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,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,gCAAgC,EAEhC,sBAAsB,EAGvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAKL,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,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,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,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;IAyExC,kBAAkB,IAAI,SAAS,GAAG,SAAS;IAO3C,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAOnC,kBAAkB,CAAC,OAAO,CAAC,EAAE,OAAO;IAe1C,mBAAmB,IAAI,MAAM,EAAE;IAS/B,gBAAgB,IAAI,SAAS,EAAE;IAezB,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;IAcjC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAE5D,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,kBAAkB;IAqFlE,QAAQ,CAAC,WAAW,CAClB,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,gBAAgB,GACrB,kBAAkB;CACtB"}
|
@@ -22,14 +22,11 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
22
22
|
this.pos = await (0, solautoPosition_1.getOrCreatePositionEx)(this.umi, this.authority, positionId, this.programId, {
|
23
23
|
supplyMint: args.supplyMint,
|
24
24
|
debtMint: args.debtMint,
|
25
|
-
|
25
|
+
lpPoolAccount: args.lpPoolAccount,
|
26
26
|
lpUserAccount: args.lpUserAccount,
|
27
27
|
lendingPlatform: this.lendingPlatform,
|
28
28
|
lpEnv: this.lpEnv,
|
29
29
|
}, this.contextUpdates);
|
30
|
-
if (this.pos.selfManaged) {
|
31
|
-
await this.pos.refreshPositionState();
|
32
|
-
}
|
33
30
|
this.positionSupplyTa = (0, utils_1.getTokenAccount)(this.pos.publicKey, this.pos.supplyMint);
|
34
31
|
this.signerSupplyTa = (0, utils_1.getTokenAccount)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.signer.publicKey), this.pos.supplyMint);
|
35
32
|
this.positionDebtTa = (0, utils_1.getTokenAccount)(this.pos.publicKey, this.pos.debtMint);
|
@@ -46,9 +43,9 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
46
43
|
this.otherSigners.push(...this.flProvider.otherSigners());
|
47
44
|
this.log("Position state: ", this.pos.state);
|
48
45
|
this.log("Position settings: ", this.pos.settings);
|
49
|
-
this.log("Position DCA: ", this.pos.dca);
|
50
46
|
this.log("Supply mint:", this.pos.supplyMint.toString());
|
51
47
|
this.log("Debt mint:", this.pos.debtMint.toString());
|
48
|
+
this.log("LP pool:", this.pos.lpPoolAccount.toString());
|
52
49
|
}
|
53
50
|
referredBySupplyTa() {
|
54
51
|
if (this.referredByState !== undefined) {
|
@@ -72,9 +69,6 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
72
69
|
if (this.contextUpdates.settings) {
|
73
70
|
this.pos.updateSettings(this.contextUpdates.settings);
|
74
71
|
}
|
75
|
-
if (this.contextUpdates.dca) {
|
76
|
-
this.pos.updateDca(this.contextUpdates.dca);
|
77
|
-
}
|
78
72
|
// All other live position updates can be derived by getting a fresh position state, so we don't need to do anything else form contextUpdates
|
79
73
|
}
|
80
74
|
}
|
@@ -241,23 +235,6 @@ class SolautoClient extends referralStateManager_1.ReferralStateManager {
|
|
241
235
|
let dcaMint = undefined;
|
242
236
|
let positionDcaTa = undefined;
|
243
237
|
let signerDcaTa = undefined;
|
244
|
-
const currDca = this.pos.dca;
|
245
|
-
if (currDca.dcaInBaseUnit > 0) {
|
246
|
-
if (currDca.tokenType === generated_1.TokenType.Supply) {
|
247
|
-
dcaMint = (0, umi_1.publicKey)(this.pos.supplyMint);
|
248
|
-
positionDcaTa = (0, umi_1.publicKey)(this.positionSupplyTa);
|
249
|
-
signerDcaTa = (0, umi_1.publicKey)(this.signerSupplyTa);
|
250
|
-
}
|
251
|
-
else {
|
252
|
-
dcaMint = (0, umi_1.publicKey)(this.pos.debtMint);
|
253
|
-
positionDcaTa = (0, umi_1.publicKey)(this.positionDebtTa);
|
254
|
-
signerDcaTa = (0, umi_1.publicKey)(this.signerDebtTa);
|
255
|
-
}
|
256
|
-
this.contextUpdates.new({
|
257
|
-
type: "cancellingDca",
|
258
|
-
value: this.pos.dca.tokenType,
|
259
|
-
});
|
260
|
-
}
|
261
238
|
return (0, generated_1.cancelDCA)(this.umi, {
|
262
239
|
signer: this.signer,
|
263
240
|
solautoPosition: (0, umi_1.publicKey)(this.pos.publicKey),
|
@@ -20,7 +20,7 @@ class SolautoMarginfiClient extends solautoClient_1.SolautoClient {
|
|
20
20
|
async initialize(args) {
|
21
21
|
await super.initialize(args);
|
22
22
|
this.mfiAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv);
|
23
|
-
this.marginfiGroup =
|
23
|
+
this.marginfiGroup = this.pos.lpPoolAccount;
|
24
24
|
if (this.pos.selfManaged) {
|
25
25
|
this.marginfiAccount =
|
26
26
|
args.lpUserAccount ??
|
@@ -4,10 +4,8 @@ import { SolautoPositionEx } from "./solautoPositionEx";
|
|
4
4
|
import { LendingPlatform, PriceType } from "../generated";
|
5
5
|
export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
6
6
|
lendingPlatform: LendingPlatform;
|
7
|
-
private marginfiAccountData;
|
8
7
|
private supplyBank;
|
9
8
|
private debtBank;
|
10
|
-
lendingPool(): Promise<PublicKey>;
|
11
9
|
getBanks(): Promise<Bank[]>;
|
12
10
|
priceOracles(): Promise<PublicKey[]>;
|
13
11
|
maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
@@ -1 +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,
|
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,IAAI,EAAoB,MAAM,iBAAiB,CAAC;AAYzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1D,qBAAa,yBAA0B,SAAQ,iBAAiB;IAC9D,eAAe,kBAA4B;IAE3C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAqB;IAE/B,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAgB3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBjE"}
|
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.MarginfiSolautoPositionEx = void 0;
|
4
4
|
const marginfi_sdk_1 = require("../marginfi-sdk");
|
5
5
|
const umi_1 = require("@metaplex-foundation/umi");
|
6
|
-
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
7
6
|
const utils_1 = require("../utils");
|
8
7
|
const constants_1 = require("../constants");
|
9
8
|
const solautoPositionEx_1 = require("./solautoPositionEx");
|
@@ -12,26 +11,12 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
12
11
|
constructor() {
|
13
12
|
super(...arguments);
|
14
13
|
this.lendingPlatform = generated_1.LendingPlatform.Marginfi;
|
15
|
-
this.marginfiAccountData = null;
|
16
14
|
this.supplyBank = null;
|
17
15
|
this.debtBank = null;
|
18
16
|
}
|
19
|
-
async lendingPool() {
|
20
|
-
if (this.lp) {
|
21
|
-
return this.lp;
|
22
|
-
}
|
23
|
-
if (!this.marginfiAccountData && (0, utils_1.validPubkey)(this.lpUserAccount)) {
|
24
|
-
this.marginfiAccountData = await (0, marginfi_sdk_1.fetchMarginfiAccount)(this.umi, (0, umi_1.publicKey)(this.lpUserAccount), { commitment: "confirmed" });
|
25
|
-
this.lp = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.marginfiAccountData.group);
|
26
|
-
}
|
27
|
-
if (!this.lp) {
|
28
|
-
this.lp = (0, constants_1.getMarginfiAccounts)(this.lpEnv).defaultGroup;
|
29
|
-
}
|
30
|
-
return this.lp;
|
31
|
-
}
|
32
17
|
async getBanks() {
|
33
18
|
if (!this.supplyBank || !this.debtBank) {
|
34
|
-
const group =
|
19
|
+
const group = this.lpPoolAccount.toString();
|
35
20
|
const bankAccounts = (0, constants_1.getMarginfiAccounts)(this.lpEnv).bankAccounts;
|
36
21
|
const supplyBank = bankAccounts[group][this.supplyMint.toString()].bank;
|
37
22
|
const debtBank = bankAccounts[group][this.debtMint.toString()].bank;
|
@@ -62,10 +47,11 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
62
47
|
const useDesignatedMint = !this.exists ||
|
63
48
|
!this.selfManaged ||
|
64
49
|
(this.selfManaged && !(0, utils_1.validPubkey)(this.lpUserAccount));
|
65
|
-
const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount },
|
50
|
+
const resp = await (0, utils_1.getMarginfiAccountPositionState)(this.umi, { pk: this.lpUserAccount }, this._lpPoolAccount, useDesignatedMint ? { mint: this.supplyMint } : undefined, useDesignatedMint ? { mint: this.debtMint } : undefined, this.contextUpdates, priceType);
|
66
51
|
if (resp) {
|
67
52
|
this.supplyBank = resp.supplyBank;
|
68
53
|
this.debtBank = resp.debtBank;
|
54
|
+
this._lpPoolAccount = resp.marginfiGroup;
|
69
55
|
this._data.state = resp.state;
|
70
56
|
}
|
71
57
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,
|
1
|
+
{"version":3,"file":"positionUtils.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/positionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,EAEL,aAAa,EAGb,yBAAyB,EACzB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,cAAc,EASf,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAG7B,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gCAAgC,GACzC,yBAAyB,CAQ3B;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA4B9B;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,SAAS,EACpB,UAAU,CAAC,EAAE,kBAAkB,EAC/B,cAAc,CAAC,EAAE,cAAc,GAC9B,OAAO,CAAC,iBAAiB,CAAC,CA2C5B;AAED,UAAU,UAAU;IAClB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,UAAU,EAClB,IAAI,EAAE,UAAU,EAChB,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,aAAa,CAgEf"}
|
@@ -55,11 +55,16 @@ async function getOrCreatePositionEx(umi, authority, positionId, programId, cust
|
|
55
55
|
customArgs,
|
56
56
|
contextUpdates,
|
57
57
|
};
|
58
|
+
let position;
|
58
59
|
switch (lendingPlatform) {
|
59
60
|
case generated_1.LendingPlatform.Marginfi:
|
60
|
-
|
61
|
+
position = new marginfiSolautoPositionEx_1.MarginfiSolautoPositionEx(args);
|
61
62
|
// TODO: PF
|
62
63
|
}
|
64
|
+
if (position.selfManaged) {
|
65
|
+
await position.refreshPositionState();
|
66
|
+
}
|
67
|
+
return position;
|
63
68
|
}
|
64
69
|
function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
|
65
70
|
const supplyDecimals = (0, utils_1.tokenInfo)(supply.mint).decimals;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Umi } from "@metaplex-foundation/umi";
|
3
|
-
import {
|
3
|
+
import { LendingPlatform, PositionState, PriceType, SolautoPosition, SolautoSettingsParameters } from "../generated";
|
4
4
|
import { ContextUpdates } from "../utils";
|
5
5
|
import { ProgramEnv, RebalanceAction } from "../types";
|
6
6
|
import { TokenInfo } from "../constants";
|
@@ -8,7 +8,7 @@ export interface PositionCustomArgs {
|
|
8
8
|
lendingPlatform: LendingPlatform;
|
9
9
|
supplyMint?: PublicKey;
|
10
10
|
debtMint?: PublicKey;
|
11
|
-
|
11
|
+
lpPoolAccount?: PublicKey;
|
12
12
|
lpUserAccount?: PublicKey;
|
13
13
|
lpEnv?: ProgramEnv;
|
14
14
|
}
|
@@ -32,29 +32,27 @@ export declare abstract class SolautoPositionEx {
|
|
32
32
|
lendingPlatform: LendingPlatform;
|
33
33
|
positionId: number;
|
34
34
|
authority: PublicKey;
|
35
|
-
protected
|
36
|
-
protected lp?: PublicKey;
|
35
|
+
protected _lpPoolAccount?: PublicKey;
|
37
36
|
lpUserAccount?: PublicKey;
|
38
37
|
protected lpEnv: ProgramEnv;
|
39
38
|
private _supplyMint?;
|
40
39
|
private _debtMint?;
|
40
|
+
protected _data: SolautoPositionExData;
|
41
41
|
private readonly firstState;
|
42
42
|
private _supplyPrice?;
|
43
43
|
private _debtPrice?;
|
44
44
|
rebalance: PositionRebalanceHelper;
|
45
45
|
constructor(args: PositionExArgs);
|
46
|
-
abstract lendingPool(): Promise<PublicKey>;
|
47
46
|
get exists(): boolean;
|
48
47
|
get selfManaged(): boolean;
|
49
48
|
get positionType(): import("../generated").PositionType | undefined;
|
50
49
|
get strategyName(): string;
|
50
|
+
get lpPoolAccount(): PublicKey;
|
51
51
|
liqUtilizationRateBps(priceType?: PriceType): number;
|
52
52
|
protected get data(): SolautoPositionExData;
|
53
53
|
get state(): PositionState;
|
54
54
|
get settings(): SolautoSettingsParameters | undefined;
|
55
55
|
updateSettings(settings: SolautoSettingsParameters): void;
|
56
|
-
get dca(): DCASettings | undefined;
|
57
|
-
updateDca(dca: DCASettings): void;
|
58
56
|
get supplyMint(): PublicKey;
|
59
57
|
get supplyMintInfo(): TokenInfo;
|
60
58
|
get debtMint(): PublicKey;
|
@@ -1 +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,EAAE,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAK/C,OAAO,
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
|
@@ -7,7 +7,6 @@ const utils_1 = require("../utils");
|
|
7
7
|
const rebalance_1 = require("../services/rebalance");
|
8
8
|
class SolautoPositionEx {
|
9
9
|
constructor(args) {
|
10
|
-
this.lp = undefined;
|
11
10
|
this.lpUserAccount = undefined;
|
12
11
|
this.umi = args.umi;
|
13
12
|
this.contextUpdates = args.contextUpdates;
|
@@ -16,15 +15,15 @@ class SolautoPositionEx {
|
|
16
15
|
(0, utils_1.getSolautoPositionAccount)(args.authority, args.positionId, args.programId);
|
17
16
|
this.positionId = args.positionId ?? args.data.positionId[0];
|
18
17
|
this.authority = args.authority ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.authority);
|
19
|
-
this.
|
20
|
-
this._debtMint = args.customArgs?.debtMint;
|
21
|
-
this.lp = args.customArgs?.lendingPool;
|
18
|
+
this._lpPoolAccount = args.customArgs?.lpPoolAccount;
|
22
19
|
this.lpUserAccount =
|
23
20
|
args.customArgs?.lpUserAccount ??
|
24
21
|
(args.data.position
|
25
22
|
? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(args.data.position.lpUserAccount)
|
26
23
|
: undefined);
|
27
24
|
this.lpEnv = args.customArgs?.lpEnv ?? "Prod";
|
25
|
+
this._supplyMint = args.customArgs?.supplyMint;
|
26
|
+
this._debtMint = args.customArgs?.debtMint;
|
28
27
|
this._data = args.data;
|
29
28
|
this.firstState = { ...args.data.state };
|
30
29
|
this.rebalance = new PositionRebalanceHelper(this);
|
@@ -41,6 +40,10 @@ class SolautoPositionEx {
|
|
41
40
|
get strategyName() {
|
42
41
|
return (0, utils_1.solautoStrategyName)(this.supplyMint, this.debtMint);
|
43
42
|
}
|
43
|
+
get lpPoolAccount() {
|
44
|
+
return (this._lpPoolAccount ??
|
45
|
+
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.data.position.lpPoolAccount));
|
46
|
+
}
|
44
47
|
liqUtilizationRateBps(priceType) {
|
45
48
|
return (0, utils_1.getLiqUtilzationRateBps)(this.supplyUsd(priceType), this.debtUsd(priceType), this.state.liqThresholdBps);
|
46
49
|
}
|
@@ -56,12 +59,6 @@ class SolautoPositionEx {
|
|
56
59
|
updateSettings(settings) {
|
57
60
|
this.data.position.settings = settings;
|
58
61
|
}
|
59
|
-
get dca() {
|
60
|
-
return this.contextUpdates?.dca ?? this.data.position?.dca;
|
61
|
-
}
|
62
|
-
updateDca(dca) {
|
63
|
-
this.data.position.dca = dca;
|
64
|
-
}
|
65
62
|
get supplyMint() {
|
66
63
|
return this._supplyMint ?? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(this.state.supply.mint);
|
67
64
|
}
|
@@ -241,7 +238,7 @@ class PositionRebalanceHelper {
|
|
241
238
|
return this.validRealtimePricesBoost(debtAdjustmentUsd);
|
242
239
|
}
|
243
240
|
eligibleForRebalance(bpsDistanceThreshold, skipExtraChecks) {
|
244
|
-
if (
|
241
|
+
if (this.pos.selfManaged || !this.pos.supplyUsd()) {
|
245
242
|
return undefined;
|
246
243
|
}
|
247
244
|
const realtimeLiqUtilRateBps = this.pos.liqUtilizationRateBps(generated_1.PriceType.Realtime);
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Umi } from "@metaplex-foundation/umi";
|
3
|
-
import { ProgramEnv } from "../../types";
|
4
3
|
import { PositionState, PriceType } from "../../generated";
|
5
4
|
import { Bank, MarginfiAccount } from "../../marginfi-sdk";
|
6
5
|
import { ContextUpdates } from "../solautoUtils";
|
@@ -30,9 +29,10 @@ type BanksCache = {
|
|
30
29
|
export declare function getMarginfiAccountPositionState(umi: Umi, lpUserAccount: {
|
31
30
|
pk?: PublicKey;
|
32
31
|
data?: MarginfiAccount | null;
|
33
|
-
}, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection,
|
32
|
+
}, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, contextUpdates?: ContextUpdates, priceType?: PriceType): Promise<{
|
34
33
|
supplyBank: Bank | null;
|
35
34
|
debtBank: Bank | null;
|
35
|
+
marginfiGroup: PublicKey;
|
36
36
|
state: PositionState;
|
37
37
|
} | undefined>;
|
38
38
|
export declare function calculateAnnualAPYs(bank: Bank): [number, number];
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../src/utils/marginfi/data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAG1D,OAAO,EAAE,aAAa,EAAsB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO/E,OAAO,EACL,IAAI,EAGJ,eAAe,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAgBjD,wBAAsB,mCAAmC,CACvD,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,CA8C3B;AAED,wBAAsB,mCAAmC,CACvD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,eAAe,EAAE,CAAC,CA6B5B;AAED,wBAAsB,iCAAiC,CACrD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,KAAK,CAAC,EAAE,SAAS,EACjB,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,CAyDA;AAED,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,kBAAkB,EAAE,OAAO,UAqB5B;AA0DD,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;AAwBhE,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,GAAG,EACR,aAAa,EAAE;IAAE,EAAE,CAAC,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,EAChE,aAAa,CAAC,EAAE,SAAS,EACzB,MAAM,CAAC,EAAE,aAAa,EACtB,IAAI,CAAC,EAAE,aAAa,EACpB,cAAc,CAAC,EAAE,cAAc,EAC/B,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CACN;IACE,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IACtB,aAAa,EAAE,SAAS,CAAC;IACzB,KAAK,EAAE,aAAa,CAAC;CACtB,GACD,SAAS,CACZ,CA+KA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
|
@@ -171,7 +171,7 @@ async function getBank(umi, data, marginfiGroup) {
|
|
171
171
|
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)((0, constants_1.getMarginfiAccounts)(undefined, marginfiGroup).bankAccounts[marginfiGroup.toString()][mint].bank), { commitment: "confirmed" })
|
172
172
|
: null;
|
173
173
|
}
|
174
|
-
async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt,
|
174
|
+
async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, contextUpdates, priceType) {
|
175
175
|
let marginfiAccount = lpUserAccount.data ??
|
176
176
|
((0, generalUtils_1.validPubkey)(lpUserAccount.pk)
|
177
177
|
? await (0, marginfi_sdk_1.safeFetchMarginfiAccount)(umi, (0, umi_1.publicKey)(lpUserAccount.pk), {
|
@@ -245,8 +245,11 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
|
|
245
245
|
if (!debtUsage) {
|
246
246
|
debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
|
247
247
|
}
|
248
|
+
if (!marginfiGroup) {
|
249
|
+
marginfiGroup = (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.group);
|
250
|
+
}
|
248
251
|
const supplyPrice = (0, priceUtils_1.safeGetPrice)((0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint));
|
249
|
-
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup
|
252
|
+
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, {
|
250
253
|
mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
|
251
254
|
bank: supplyBank,
|
252
255
|
}, {
|
@@ -258,6 +261,7 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
|
|
258
261
|
return {
|
259
262
|
supplyBank,
|
260
263
|
debtBank,
|
264
|
+
marginfiGroup,
|
261
265
|
state: {
|
262
266
|
liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, liqThresholdBps),
|
263
267
|
netWorth: {
|
package/local/txSandbox.ts
CHANGED
@@ -3,15 +3,21 @@ import { createSignerFromKeypair } from "@metaplex-foundation/umi";
|
|
3
3
|
import { fromWeb3JsKeypair } from "@metaplex-foundation/umi-web3js-adapters";
|
4
4
|
import {
|
5
5
|
consoleLog,
|
6
|
+
getBatches,
|
6
7
|
getClient,
|
8
|
+
getPositionExBulk,
|
7
9
|
getSolanaRpcConnection,
|
10
|
+
getSolautoManagedPositions,
|
8
11
|
LendingPlatform,
|
9
12
|
LOCAL_IRONFORGE_API_URL,
|
13
|
+
PriceType,
|
10
14
|
PriorityFeeSetting,
|
11
15
|
ProgramEnv,
|
12
16
|
rebalance,
|
13
17
|
SOLAUTO_PROD_PROGRAM,
|
14
18
|
SOLAUTO_TEST_PROGRAM,
|
19
|
+
SolautoClient,
|
20
|
+
TransactionItem,
|
15
21
|
TransactionsManager,
|
16
22
|
} from "../src";
|
17
23
|
import { getSecretKey } from "./shared";
|
@@ -20,18 +26,18 @@ const payForTransaction = false;
|
|
20
26
|
const testProgram = false;
|
21
27
|
const lpEnv: ProgramEnv = "Prod";
|
22
28
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
);
|
29
|
+
let [, umi] = getSolanaRpcConnection(
|
30
|
+
LOCAL_IRONFORGE_API_URL,
|
31
|
+
testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
32
|
+
lpEnv
|
33
|
+
);
|
29
34
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
35
|
+
const signer = createSignerFromKeypair(
|
36
|
+
umi,
|
37
|
+
fromWeb3JsKeypair(Keypair.fromSecretKey(getSecretKey()))
|
38
|
+
);
|
34
39
|
|
40
|
+
export async function main() {
|
35
41
|
const client = getClient(LendingPlatform.Marginfi, {
|
36
42
|
signer,
|
37
43
|
showLogs: true,
|
@@ -41,7 +47,7 @@ export async function main() {
|
|
41
47
|
});
|
42
48
|
|
43
49
|
await client.initialize({
|
44
|
-
positionId:
|
50
|
+
positionId: 2,
|
45
51
|
authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
|
46
52
|
// lpUserAccount: new PublicKey(
|
47
53
|
// "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz"
|
@@ -60,8 +66,57 @@ export async function main() {
|
|
60
66
|
{ totalRetries: 5 }
|
61
67
|
);
|
62
68
|
const statuses = await txManager.clientSend(transactionItems);
|
63
|
-
|
64
69
|
consoleLog(statuses);
|
65
70
|
}
|
66
71
|
|
72
|
+
async function refreshAll() {
|
73
|
+
const allPositions = await getSolautoManagedPositions(umi);
|
74
|
+
const positions = await getPositionExBulk(
|
75
|
+
umi,
|
76
|
+
allPositions.map((x) => new PublicKey(x.publicKey!))
|
77
|
+
);
|
78
|
+
|
79
|
+
let client: SolautoClient | undefined;
|
80
|
+
const transactionItems: TransactionItem[] = [];
|
81
|
+
for (const pos of positions) {
|
82
|
+
client = getClient(pos.lendingPlatform, {
|
83
|
+
signer,
|
84
|
+
showLogs: true,
|
85
|
+
rpcUrl: LOCAL_IRONFORGE_API_URL,
|
86
|
+
programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
87
|
+
lpEnv,
|
88
|
+
});
|
89
|
+
|
90
|
+
await client!.initialize({
|
91
|
+
positionId: pos.positionId,
|
92
|
+
authority: pos.authority,
|
93
|
+
});
|
94
|
+
|
95
|
+
const ix = client!.refreshIx(PriceType.Realtime);
|
96
|
+
transactionItems.push(
|
97
|
+
new TransactionItem(
|
98
|
+
async () => ({ tx: ix }),
|
99
|
+
`refresh ${pos.authority} (${pos.positionId})`
|
100
|
+
)
|
101
|
+
);
|
102
|
+
}
|
103
|
+
|
104
|
+
const txBatches = getBatches(transactionItems, 15);
|
105
|
+
|
106
|
+
for (const batch of txBatches) {
|
107
|
+
const txManager = new TransactionsManager(
|
108
|
+
client!,
|
109
|
+
undefined,
|
110
|
+
payForTransaction ? "normal" : "only-simulate",
|
111
|
+
PriorityFeeSetting.High,
|
112
|
+
true,
|
113
|
+
undefined,
|
114
|
+
{ totalRetries: 5 }
|
115
|
+
);
|
116
|
+
const statuses = await txManager.send(batch);
|
117
|
+
consoleLog(statuses);
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
67
121
|
main();
|
122
|
+
// refreshAll();
|
package/package.json
CHANGED
@@ -16,13 +16,10 @@ import {
|
|
16
16
|
u8,
|
17
17
|
} from '@metaplex-foundation/umi/serializers';
|
18
18
|
import {
|
19
|
-
DCASettings,
|
20
|
-
DCASettingsArgs,
|
21
19
|
LendingPlatform,
|
22
20
|
LendingPlatformArgs,
|
23
21
|
SolautoSettingsParameters,
|
24
22
|
SolautoSettingsParametersArgs,
|
25
|
-
getDCASettingsSerializer,
|
26
23
|
getLendingPlatformSerializer,
|
27
24
|
getSolautoSettingsParametersSerializer,
|
28
25
|
} from '.';
|
@@ -34,7 +31,7 @@ export type PositionData = {
|
|
34
31
|
lpSupplyAccount: PublicKey;
|
35
32
|
lpDebtAccount: PublicKey;
|
36
33
|
settings: SolautoSettingsParameters;
|
37
|
-
|
34
|
+
lpPoolAccount: PublicKey;
|
38
35
|
padding: Array<number>;
|
39
36
|
};
|
40
37
|
|
@@ -45,7 +42,7 @@ export type PositionDataArgs = {
|
|
45
42
|
lpSupplyAccount: PublicKey;
|
46
43
|
lpDebtAccount: PublicKey;
|
47
44
|
settings: SolautoSettingsParametersArgs;
|
48
|
-
|
45
|
+
lpPoolAccount: PublicKey;
|
49
46
|
padding: Array<number>;
|
50
47
|
};
|
51
48
|
|
@@ -61,8 +58,8 @@ export function getPositionDataSerializer(): Serializer<
|
|
61
58
|
['lpSupplyAccount', publicKeySerializer()],
|
62
59
|
['lpDebtAccount', publicKeySerializer()],
|
63
60
|
['settings', getSolautoSettingsParametersSerializer()],
|
64
|
-
['
|
65
|
-
['padding', array(u32(), { size:
|
61
|
+
['lpPoolAccount', publicKeySerializer()],
|
62
|
+
['padding', array(u32(), { size: 20 })],
|
66
63
|
],
|
67
64
|
{ description: 'PositionData' }
|
68
65
|
) as Serializer<PositionDataArgs, PositionData>;
|
@@ -46,6 +46,10 @@ export class RebalanceTxBuilder {
|
|
46
46
|
) {}
|
47
47
|
|
48
48
|
private shouldProceedWithRebalance() {
|
49
|
+
if (this.client.pos.selfManaged && !this.targetLiqUtilizationRateBps) {
|
50
|
+
throw new Error("A target rate must be provided for self managed position rebalances");
|
51
|
+
}
|
52
|
+
|
49
53
|
return (
|
50
54
|
this.client.pos.supplyUsd() > 0 &&
|
51
55
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
@@ -44,7 +44,7 @@ export interface SolautoClientArgs extends ReferralStateManagerArgs {
|
|
44
44
|
positionId?: number;
|
45
45
|
supplyMint?: PublicKey;
|
46
46
|
debtMint?: PublicKey;
|
47
|
-
|
47
|
+
lpPoolAccount?: PublicKey;
|
48
48
|
lpUserAccount?: PublicKey;
|
49
49
|
}
|
50
50
|
|
@@ -85,16 +85,13 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
85
85
|
{
|
86
86
|
supplyMint: args.supplyMint,
|
87
87
|
debtMint: args.debtMint,
|
88
|
-
|
88
|
+
lpPoolAccount: args.lpPoolAccount,
|
89
89
|
lpUserAccount: args.lpUserAccount,
|
90
90
|
lendingPlatform: this.lendingPlatform,
|
91
91
|
lpEnv: this.lpEnv,
|
92
92
|
},
|
93
93
|
this.contextUpdates
|
94
94
|
);
|
95
|
-
if (this.pos.selfManaged) {
|
96
|
-
await this.pos.refreshPositionState();
|
97
|
-
}
|
98
95
|
|
99
96
|
this.positionSupplyTa = getTokenAccount(
|
100
97
|
this.pos.publicKey,
|
@@ -144,9 +141,9 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
144
141
|
|
145
142
|
this.log("Position state: ", this.pos.state);
|
146
143
|
this.log("Position settings: ", this.pos.settings);
|
147
|
-
this.log("Position DCA: ", this.pos.dca);
|
148
144
|
this.log("Supply mint:", this.pos.supplyMint.toString());
|
149
145
|
this.log("Debt mint:", this.pos.debtMint.toString());
|
146
|
+
this.log("LP pool:", this.pos.lpPoolAccount.toString());
|
150
147
|
}
|
151
148
|
|
152
149
|
referredBySupplyTa(): PublicKey | undefined {
|
@@ -172,9 +169,6 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
172
169
|
if (this.contextUpdates.settings) {
|
173
170
|
this.pos.updateSettings(this.contextUpdates.settings);
|
174
171
|
}
|
175
|
-
if (this.contextUpdates.dca) {
|
176
|
-
this.pos.updateDca(this.contextUpdates.dca);
|
177
|
-
}
|
178
172
|
// All other live position updates can be derived by getting a fresh position state, so we don't need to do anything else form contextUpdates
|
179
173
|
}
|
180
174
|
}
|
@@ -395,24 +389,6 @@ export abstract class SolautoClient extends ReferralStateManager {
|
|
395
389
|
let positionDcaTa: UmiPublicKey | undefined = undefined;
|
396
390
|
let signerDcaTa: UmiPublicKey | undefined = undefined;
|
397
391
|
|
398
|
-
const currDca = this.pos.dca!;
|
399
|
-
if (currDca.dcaInBaseUnit > 0) {
|
400
|
-
if (currDca.tokenType === TokenType.Supply) {
|
401
|
-
dcaMint = publicKey(this.pos.supplyMint);
|
402
|
-
positionDcaTa = publicKey(this.positionSupplyTa);
|
403
|
-
signerDcaTa = publicKey(this.signerSupplyTa);
|
404
|
-
} else {
|
405
|
-
dcaMint = publicKey(this.pos.debtMint);
|
406
|
-
positionDcaTa = publicKey(this.positionDebtTa);
|
407
|
-
signerDcaTa = publicKey(this.signerDebtTa);
|
408
|
-
}
|
409
|
-
|
410
|
-
this.contextUpdates.new({
|
411
|
-
type: "cancellingDca",
|
412
|
-
value: this.pos.dca!.tokenType,
|
413
|
-
});
|
414
|
-
}
|
415
|
-
|
416
392
|
return cancelDCA(this.umi, {
|
417
393
|
signer: this.signer,
|
418
394
|
solautoPosition: publicKey(this.pos.publicKey),
|