@haven-fi/solauto-sdk 1.0.712 → 1.0.714
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/services/rebalance/rebalanceTxBuilder.d.ts +2 -1
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +3 -2
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts +1 -0
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +8 -2
- package/dist/solautoPosition/solautoPositionEx.d.ts +1 -0
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/utils/instructionUtils.d.ts +1 -1
- package/dist/utils/instructionUtils.d.ts.map +1 -1
- package/dist/utils/instructionUtils.js +2 -2
- package/dist/utils/marginfi/data.d.ts +1 -0
- package/dist/utils/marginfi/data.d.ts.map +1 -1
- package/dist/utils/marginfi/data.js +11 -0
- package/local/txSandbox.ts +15 -11
- package/package.json +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +3 -2
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +21 -3
- package/src/solautoPosition/solautoPositionEx.ts +1 -0
- package/src/utils/instructionUtils.ts +4 -2
- package/src/utils/marginfi/data.ts +20 -0
@@ -4,12 +4,13 @@ export declare class RebalanceTxBuilder {
|
|
4
4
|
private client;
|
5
5
|
private targetLiqUtilizationRateBps?;
|
6
6
|
private optimizeSize?;
|
7
|
+
private bpsDistanceFromRebalance?;
|
7
8
|
private values;
|
8
9
|
private rebalanceType;
|
9
10
|
private swapManager;
|
10
11
|
private flRequirements?;
|
11
12
|
private priceType;
|
12
|
-
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined, optimizeSize?: boolean | undefined);
|
13
|
+
constructor(client: SolautoClient, targetLiqUtilizationRateBps?: number | undefined, optimizeSize?: boolean | undefined, bpsDistanceFromRebalance?: number | undefined);
|
13
14
|
private shouldProceedWithRebalance;
|
14
15
|
private getRebalanceValues;
|
15
16
|
private getFlLiquiditySource;
|
@@ -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;AAiCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,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;AAiCrB,qBAAa,kBAAkB;IAQ3B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,2BAA2B,CAAC;IACpC,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,wBAAwB,CAAC;IAVnC,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,EACpC,YAAY,CAAC,EAAE,OAAO,YAAA,EACtB,wBAAwB,CAAC,EAAE,MAAM,YAAA;IAG3C,OAAO,CAAC,0BAA0B;IAclC,OAAO,CAAC,kBAAkB;IAc1B,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,iCAAiC;YAgC3B,qBAAqB;IA0CnC,OAAO,CAAC,mBAAmB;IAwB3B,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,yBAAyB;YAqBnB,mBAAmB;YAyBnB,sBAAsB;YAyBtB,mBAAmB;IAsFpB,gBAAgB,CAC3B,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC;CAe9C"}
|
@@ -10,10 +10,11 @@ const rebalanceValues_1 = require("./rebalanceValues");
|
|
10
10
|
const solautoFees_1 = require("./solautoFees");
|
11
11
|
const rebalanceSwapManager_1 = require("./rebalanceSwapManager");
|
12
12
|
class RebalanceTxBuilder {
|
13
|
-
constructor(client, targetLiqUtilizationRateBps, optimizeSize) {
|
13
|
+
constructor(client, targetLiqUtilizationRateBps, optimizeSize, bpsDistanceFromRebalance) {
|
14
14
|
this.client = client;
|
15
15
|
this.targetLiqUtilizationRateBps = targetLiqUtilizationRateBps;
|
16
16
|
this.optimizeSize = optimizeSize;
|
17
|
+
this.bpsDistanceFromRebalance = bpsDistanceFromRebalance;
|
17
18
|
this.priceType = generated_1.PriceType.Realtime;
|
18
19
|
}
|
19
20
|
shouldProceedWithRebalance() {
|
@@ -22,7 +23,7 @@ class RebalanceTxBuilder {
|
|
22
23
|
}
|
23
24
|
return (this.client.pos.supplyUsd() > 0 &&
|
24
25
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
25
|
-
this.client.pos.eligibleForRebalance()));
|
26
|
+
this.client.pos.eligibleForRebalance(this.bpsDistanceFromRebalance)));
|
26
27
|
}
|
27
28
|
getRebalanceValues() {
|
28
29
|
return (0, rebalanceValues_1.getRebalanceValues)(this.client.pos, this.priceType, this.targetLiqUtilizationRateBps, solautoFees_1.SolautoFeesBps.create(this.client.isReferred, this.targetLiqUtilizationRateBps, this.client.pos.netWorthUsd(this.priceType)), this.flRequirements?.flFeeBps ?? 0);
|
@@ -19,6 +19,7 @@ export declare class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
|
19
19
|
get lpSupplyAccount(): PublicKey;
|
20
20
|
get lpDebtAccount(): PublicKey;
|
21
21
|
get supplyLiquidityAvailable(): number;
|
22
|
+
get supplyLiquidityUsdWithdrawable(): number;
|
22
23
|
refreshPositionState(priceType?: PriceType): Promise<void>;
|
23
24
|
}
|
24
25
|
//# sourceMappingURL=marginfiSolautoPositionEx.d.ts.map
|
@@ -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,EAAE,IAAI,EAA+B,MAAM,iBAAiB,CAAC;
|
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,EAA+B,MAAM,iBAAiB,CAAC;AAgBpE,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;IAC3C,eAAe,YAAiB;IAEzB,UAAU,EAAE,IAAI,GAAG,IAAI,CAAQ;IAC/B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAQ;IAEpC,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAOtD,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAMpD,OAAO,CAAC,eAAe;IAMjB,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAW3B,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASpC,wBAAwB,IAAI,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAa3D,OAAO,CAAC,6BAA6B;IAwBrC,gCAAgC,CAAC,KAAK,EAAE,IAAI,EAAE;IAK9C,4BAA4B,CAAC,KAAK,EAAE,IAAI,EAAE;IAQ1C,IAAI,eAAe,cAElB;IAED,IAAI,aAAa,cAEhB;IAED,IAAI,wBAAwB,IAAI,MAAM,CAKrC;IAED,IAAI,8BAA8B,IAAI,MAAM,CAU3C;IAEK,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CA2BjE"}
|
@@ -17,10 +17,11 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
17
17
|
this.debtBank = null;
|
18
18
|
}
|
19
19
|
supplyPrice(priceType) {
|
20
|
-
return this._supplyPrice ??
|
20
|
+
return (this._supplyPrice ??
|
21
|
+
(0, utils_1.safeGetPrice)(this.supplyMint, priceType, marginfi_sdk_1.PriceBias.Low));
|
21
22
|
}
|
22
23
|
debtPrice(priceType) {
|
23
|
-
return this._debtPrice ?? (0, utils_1.safeGetPrice)(this.debtMint, priceType, marginfi_sdk_1.PriceBias.High);
|
24
|
+
return (this._debtPrice ?? (0, utils_1.safeGetPrice)(this.debtMint, priceType, marginfi_sdk_1.PriceBias.High));
|
24
25
|
}
|
25
26
|
getBankAccounts(mint) {
|
26
27
|
const group = this.lpPoolAccount.toString();
|
@@ -75,6 +76,11 @@ class MarginfiSolautoPositionEx extends solautoPositionEx_1.SolautoPositionEx {
|
|
75
76
|
get supplyLiquidityAvailable() {
|
76
77
|
return (0, utils_1.fromBaseUnit)((0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false), this.supplyMintInfo.decimals);
|
77
78
|
}
|
79
|
+
get supplyLiquidityUsdWithdrawable() {
|
80
|
+
const deposits = (0, utils_1.fromBaseUnit)((0, utils_1.getBankLiquidityUsedBaseUnit)(this.supplyBank, true), this.supplyMintInfo.decimals);
|
81
|
+
const borrows = (0, utils_1.fromBaseUnit)((0, utils_1.getBankLiquidityAvailableBaseUnit)(this.supplyBank, false), this.supplyMintInfo.decimals);
|
82
|
+
return Math.min((deposits - borrows), this.totalSupply) * this.supplyPrice();
|
83
|
+
}
|
78
84
|
async refreshPositionState(priceType) {
|
79
85
|
if (!this.canRefreshPositionState()) {
|
80
86
|
return;
|
@@ -81,6 +81,7 @@ export declare abstract class SolautoPositionEx {
|
|
81
81
|
abstract get lpSupplyAccount(): PublicKey;
|
82
82
|
abstract get lpDebtAccount(): PublicKey;
|
83
83
|
abstract get supplyLiquidityAvailable(): number;
|
84
|
+
abstract get supplyLiquidityUsdWithdrawable(): number;
|
84
85
|
abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
85
86
|
abstract priceOracles(): Promise<PublicKey[]>;
|
86
87
|
get memecoinPosition(): boolean | undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"solautoPositionEx.d.ts","sourceRoot":"","sources":["../../src/solautoPosition/solautoPositionEx.ts"],"names":[],"mappings":"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"}
|
@@ -10,6 +10,6 @@ export declare function deposit(client: SolautoClient, baseUnitAmount: bigint):
|
|
10
10
|
export declare function borrow(client: SolautoClient, baseUnitAmount: bigint): TransactionItem;
|
11
11
|
export declare function withdraw(client: SolautoClient, amount: "All" | bigint): TransactionItem;
|
12
12
|
export declare function repay(client: SolautoClient, amount: "All" | bigint): TransactionItem;
|
13
|
-
export declare function rebalance(client: SolautoClient, targetLiqUtilizationRateBps?: number): TransactionItem;
|
13
|
+
export declare function rebalance(client: SolautoClient, targetLiqUtilizationRateBps?: number, bpsDistanceFromRebalance?: number): TransactionItem;
|
14
14
|
export declare function swapThenDeposit(client: SolautoClient, depositMint: PublicKey, depositAmountBaseUnit: bigint): TransactionItem[];
|
15
15
|
//# sourceMappingURL=instructionUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"instructionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/instructionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,aAAa,EAEb,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,gCAAgC,EAC/C,GAAG,CAAC,EAAE,kBAAkB,mBAQzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,mBAOzD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,EAC5D,GAAG,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,mBAY1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,mBAOrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAUpE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAWnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAerE;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAclE;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,
|
1
|
+
{"version":3,"file":"instructionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/instructionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAsB,MAAM,0BAA0B,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,gCAAgC,EACjC,MAAM,cAAc,CAAC;AACtB,OAAO,EAGL,aAAa,EAEb,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,aAAa,EACrB,aAAa,EAAE,gCAAgC,EAC/C,GAAG,CAAC,EAAE,kBAAkB,mBAQzB;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,mBAOzD;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,gBAAgB,CAAC,gCAAgC,CAAC,EAC5D,GAAG,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,mBAY1C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,mBAOrD;AAED,wBAAgB,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAUpE;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,mBAWnE;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAerE;AAED,wBAAgB,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,GAAG,MAAM,mBAclE;AAED,wBAAgB,SAAS,CACvB,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,wBAAwB,CAAC,EAAE,MAAM,mBAalC;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,EACrB,WAAW,EAAE,SAAS,EACtB,qBAAqB,EAAE,MAAM,qBAyC9B"}
|
@@ -77,8 +77,8 @@ function repay(client, amount) {
|
|
77
77
|
}),
|
78
78
|
}), "repay");
|
79
79
|
}
|
80
|
-
function rebalance(client, targetLiqUtilizationRateBps) {
|
81
|
-
return new services_1.TransactionItem(async (attemptNum, prevError) => await new services_1.RebalanceTxBuilder(client, targetLiqUtilizationRateBps, attemptNum > 2 && prevError instanceof services_1.TransactionTooLargeError).buildRebalanceTx(attemptNum), "rebalance", true);
|
80
|
+
function rebalance(client, targetLiqUtilizationRateBps, bpsDistanceFromRebalance) {
|
81
|
+
return new services_1.TransactionItem(async (attemptNum, prevError) => await new services_1.RebalanceTxBuilder(client, targetLiqUtilizationRateBps, attemptNum > 2 && prevError instanceof services_1.TransactionTooLargeError, bpsDistanceFromRebalance).buildRebalanceTx(attemptNum), "rebalance", true);
|
82
82
|
}
|
83
83
|
function swapThenDeposit(client, depositMint, depositAmountBaseUnit) {
|
84
84
|
return [
|
@@ -17,6 +17,7 @@ export declare function getAllMarginfiAccountsByAuthority(umi: Umi, authority: P
|
|
17
17
|
debtMint?: PublicKey;
|
18
18
|
}[]>;
|
19
19
|
export declare function getBankLiquidityAvailableBaseUnit(bank: Bank | null, availableToDeposit: boolean): bigint;
|
20
|
+
export declare function getBankLiquidityUsedBaseUnit(bank: Bank | null, asset: boolean): bigint;
|
20
21
|
interface BankSelection {
|
21
22
|
mint?: PublicKey;
|
22
23
|
banksCache?: BanksCache;
|
@@ -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;AAE1D,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,CAmLA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
|
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;AAE1D,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;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,KAAK,EAAE,OAAO,UAgBf;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,CAmLA;AA+DD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,oBAU7C;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgBnE"}
|
@@ -4,6 +4,7 @@ exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBp
|
|
4
4
|
exports.getEmptyMarginfiAccountsByAuthority = getEmptyMarginfiAccountsByAuthority;
|
5
5
|
exports.getAllMarginfiAccountsByAuthority = getAllMarginfiAccountsByAuthority;
|
6
6
|
exports.getBankLiquidityAvailableBaseUnit = getBankLiquidityAvailableBaseUnit;
|
7
|
+
exports.getBankLiquidityUsedBaseUnit = getBankLiquidityUsedBaseUnit;
|
7
8
|
exports.getMarginfiAccountPositionState = getMarginfiAccountPositionState;
|
8
9
|
exports.calculateAnnualAPYs = calculateAnnualAPYs;
|
9
10
|
exports.getUpToDateShareValues = getUpToDateShareValues;
|
@@ -127,6 +128,16 @@ function getBankLiquidityAvailableBaseUnit(bank, availableToDeposit) {
|
|
127
128
|
}
|
128
129
|
return BigInt(Math.floor(amountCanBeUsed));
|
129
130
|
}
|
131
|
+
function getBankLiquidityUsedBaseUnit(bank, asset) {
|
132
|
+
let amountUsed = 0;
|
133
|
+
if (bank !== null) {
|
134
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
135
|
+
const totalDeposited = (0, numberUtils_1.bytesToI80F48)(bank.totalAssetShares.value) * assetShareValue;
|
136
|
+
const totalBorrowed = (0, numberUtils_1.bytesToI80F48)(bank.totalLiabilityShares.value) * liabilityShareValue;
|
137
|
+
amountUsed = asset ? totalDeposited : totalBorrowed;
|
138
|
+
}
|
139
|
+
return BigInt(Math.floor(amountUsed));
|
140
|
+
}
|
130
141
|
async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment, priceType) {
|
131
142
|
let amountUsed = 0;
|
132
143
|
let amountCanBeUsed = BigInt(0);
|
package/local/txSandbox.ts
CHANGED
@@ -22,7 +22,7 @@ import {
|
|
22
22
|
} from "../src";
|
23
23
|
import { getSecretKey } from "./shared";
|
24
24
|
|
25
|
-
const payForTransaction =
|
25
|
+
const payForTransaction = true;
|
26
26
|
const testProgram = false;
|
27
27
|
const lpEnv: ProgramEnv = "Prod";
|
28
28
|
|
@@ -48,22 +48,26 @@ export async function main() {
|
|
48
48
|
|
49
49
|
await client.initializeExistingSolautoPosition({
|
50
50
|
positionId: 1,
|
51
|
-
authority: new PublicKey("
|
51
|
+
authority: new PublicKey("7F6v4HWZsyFP6yVFq92HQWygUgoYm5khUX8pXWGLoqUN"),
|
52
52
|
// lpUserAccount: new PublicKey(
|
53
53
|
// "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz"
|
54
54
|
// ),
|
55
55
|
});
|
56
56
|
|
57
|
-
|
57
|
+
await client.pos.refreshPositionState();
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
59
|
+
console.log(client.pos.supplyLiquidityUsdWithdrawable);
|
60
|
+
|
61
|
+
// const transactionItems = [rebalance(client)];
|
62
|
+
|
63
|
+
// const txManager = new ClientTransactionsManager({
|
64
|
+
// txHandler: client,
|
65
|
+
// txRunType: payForTransaction ? "normal" : "only-simulate",
|
66
|
+
// priorityFeeSetting: PriorityFeeSetting.Default,
|
67
|
+
// retryConfig: { totalRetries: 2 },
|
68
|
+
// });
|
69
|
+
// const statuses = await txManager.send(transactionItems);
|
70
|
+
// consoleLog(statuses);
|
67
71
|
}
|
68
72
|
|
69
73
|
async function refreshAll() {
|
package/package.json
CHANGED
@@ -49,7 +49,8 @@ export class RebalanceTxBuilder {
|
|
49
49
|
constructor(
|
50
50
|
private client: SolautoClient,
|
51
51
|
private targetLiqUtilizationRateBps?: number,
|
52
|
-
private optimizeSize?: boolean
|
52
|
+
private optimizeSize?: boolean,
|
53
|
+
private bpsDistanceFromRebalance?: number
|
53
54
|
) {}
|
54
55
|
|
55
56
|
private shouldProceedWithRebalance() {
|
@@ -62,7 +63,7 @@ export class RebalanceTxBuilder {
|
|
62
63
|
return (
|
63
64
|
this.client.pos.supplyUsd() > 0 &&
|
64
65
|
(this.targetLiqUtilizationRateBps !== undefined ||
|
65
|
-
this.client.pos.eligibleForRebalance())
|
66
|
+
this.client.pos.eligibleForRebalance(this.bpsDistanceFromRebalance))
|
66
67
|
);
|
67
68
|
}
|
68
69
|
|
@@ -6,6 +6,7 @@ import {
|
|
6
6
|
fetchTokenPrices,
|
7
7
|
fromBaseUnit,
|
8
8
|
getBankLiquidityAvailableBaseUnit,
|
9
|
+
getBankLiquidityUsedBaseUnit,
|
9
10
|
getMarginfiAccountPositionState,
|
10
11
|
getMarginfiPriceOracle,
|
11
12
|
safeGetPrice,
|
@@ -25,11 +26,16 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
|
25
26
|
public debtBank: Bank | null = null;
|
26
27
|
|
27
28
|
supplyPrice(priceType?: PriceType): number | undefined {
|
28
|
-
return
|
29
|
+
return (
|
30
|
+
this._supplyPrice ??
|
31
|
+
safeGetPrice(this.supplyMint, priceType, PriceBias.Low)
|
32
|
+
);
|
29
33
|
}
|
30
|
-
|
34
|
+
|
31
35
|
debtPrice(priceType?: PriceType): number | undefined {
|
32
|
-
return
|
36
|
+
return (
|
37
|
+
this._debtPrice ?? safeGetPrice(this.debtMint, priceType, PriceBias.High)
|
38
|
+
);
|
33
39
|
}
|
34
40
|
|
35
41
|
private getBankAccounts(mint: PublicKey) {
|
@@ -123,6 +129,18 @@ export class MarginfiSolautoPositionEx extends SolautoPositionEx {
|
|
123
129
|
);
|
124
130
|
}
|
125
131
|
|
132
|
+
get supplyLiquidityUsdWithdrawable(): number {
|
133
|
+
const deposits = fromBaseUnit(
|
134
|
+
getBankLiquidityUsedBaseUnit(this.supplyBank, true),
|
135
|
+
this.supplyMintInfo.decimals
|
136
|
+
);
|
137
|
+
const borrows = fromBaseUnit(
|
138
|
+
getBankLiquidityAvailableBaseUnit(this.supplyBank, false),
|
139
|
+
this.supplyMintInfo.decimals
|
140
|
+
);
|
141
|
+
return Math.min((deposits - borrows), this.totalSupply) * this.supplyPrice()!;
|
142
|
+
}
|
143
|
+
|
126
144
|
async refreshPositionState(priceType?: PriceType): Promise<void> {
|
127
145
|
if (!this.canRefreshPositionState()) {
|
128
146
|
return;
|
@@ -278,6 +278,7 @@ export abstract class SolautoPositionEx {
|
|
278
278
|
abstract get lpSupplyAccount(): PublicKey;
|
279
279
|
abstract get lpDebtAccount(): PublicKey;
|
280
280
|
abstract get supplyLiquidityAvailable(): number;
|
281
|
+
abstract get supplyLiquidityUsdWithdrawable(): number;
|
281
282
|
|
282
283
|
abstract maxLtvAndLiqThresholdBps(): Promise<[number, number]>;
|
283
284
|
abstract priceOracles(): Promise<PublicKey[]>;
|
@@ -122,14 +122,16 @@ export function repay(client: SolautoClient, amount: "All" | bigint) {
|
|
122
122
|
|
123
123
|
export function rebalance(
|
124
124
|
client: SolautoClient,
|
125
|
-
targetLiqUtilizationRateBps?: number
|
125
|
+
targetLiqUtilizationRateBps?: number,
|
126
|
+
bpsDistanceFromRebalance?: number
|
126
127
|
) {
|
127
128
|
return new TransactionItem(
|
128
129
|
async (attemptNum, prevError) =>
|
129
130
|
await new RebalanceTxBuilder(
|
130
131
|
client,
|
131
132
|
targetLiqUtilizationRateBps,
|
132
|
-
attemptNum > 2 && prevError instanceof TransactionTooLargeError
|
133
|
+
attemptNum > 2 && prevError instanceof TransactionTooLargeError,
|
134
|
+
bpsDistanceFromRebalance
|
133
135
|
).buildRebalanceTx(attemptNum),
|
134
136
|
"rebalance",
|
135
137
|
true
|
@@ -218,6 +218,26 @@ export function getBankLiquidityAvailableBaseUnit(
|
|
218
218
|
return BigInt(Math.floor(amountCanBeUsed));
|
219
219
|
}
|
220
220
|
|
221
|
+
export function getBankLiquidityUsedBaseUnit(
|
222
|
+
bank: Bank | null,
|
223
|
+
asset: boolean
|
224
|
+
) {
|
225
|
+
let amountUsed = 0;
|
226
|
+
|
227
|
+
if (bank !== null) {
|
228
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
229
|
+
|
230
|
+
const totalDeposited =
|
231
|
+
bytesToI80F48(bank.totalAssetShares.value) * assetShareValue;
|
232
|
+
const totalBorrowed =
|
233
|
+
bytesToI80F48(bank.totalLiabilityShares.value) * liabilityShareValue;
|
234
|
+
|
235
|
+
amountUsed = asset ? totalDeposited : totalBorrowed;
|
236
|
+
}
|
237
|
+
|
238
|
+
return BigInt(Math.floor(amountUsed));
|
239
|
+
}
|
240
|
+
|
221
241
|
async function getTokenUsage(
|
222
242
|
bank: Bank | null,
|
223
243
|
isAsset: boolean,
|