@haven-fi/solauto-sdk 1.0.304 → 1.0.306
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/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/transactions/transactionUtils.js +1 -1
- package/dist/utils/marginfiUtils.d.ts +2 -1
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +17 -10
- package/dist/utils/solauto/generalUtils.d.ts +2 -1
- package/dist/utils/solauto/generalUtils.d.ts.map +1 -1
- package/dist/utils/solauto/generalUtils.js +5 -5
- package/package.json +1 -1
- package/src/transactions/transactionUtils.ts +0 -1
- package/src/utils/marginfiUtils.ts +23 -15
- package/src/utils/solauto/generalUtils.ts +9 -5
- package/tests/transactions/solautoMarginfi.ts +11 -11
- package/tests/unit/rebalanceCalculations.ts +0 -1
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAmBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAoCzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA2LjD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoH7B;AA2LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,
|
1
|
+
{"version":3,"file":"transactionUtils.d.ts","sourceRoot":"","sources":["../../src/transactions/transactionUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,kBAAkB,EAClB,GAAG,EAGJ,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,SAAS,EAA8B,MAAM,iBAAiB,CAAC;AAmBxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAoCzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAOlD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AA2LjD,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,EACtB,sBAAsB,EAAE,MAAM,EAAE,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAoH7B;AA2LD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,aAAa,EACrB,EAAE,EAAE,kBAAkB,GACrB,OAAO,CAAC,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC,CA0BnD;AAED,wBAAsB,8BAA8B,CAAC,MAAM,EAAE,aAAa,oBA2CzE;AAED,wBAAsB,gCAAgC,CACpD,MAAM,EAAE,aAAa,EACrB,2BAA2B,CAAC,EAAE,MAAM,EACpC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsH5C;AAED,wBAAsB,gCAAgC,CACpD,eAAe,EAAE,oBAAoB,EACrC,YAAY,EAAE,SAAS,EACvB,eAAe,EAAE,SAAS,GACzB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsC5C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,GAAG;;;;EA0DxE"}
|
@@ -338,7 +338,7 @@ async function requiresRefreshBeforeRebalance(client) {
|
|
338
338
|
client.livePositionUpdates.debtAdjustment > BigInt(0)) {
|
339
339
|
return false;
|
340
340
|
}
|
341
|
-
const oldStateWithLatestPrices = await (0, generalUtils_2.positionStateWithLatestPrices)(client.
|
341
|
+
const oldStateWithLatestPrices = await (0, generalUtils_2.positionStateWithLatestPrices)(client.solautoPositionData.state, constants_1.PRICES[client.supplyMint.toString()].price, constants_1.PRICES[client.debtMint.toString()].price);
|
342
342
|
const utilizationRateDiff = Math.abs((client.solautoPositionState?.liqUtilizationRateBps ?? 0) -
|
343
343
|
oldStateWithLatestPrices.liqUtilizationRateBps);
|
344
344
|
client.log("Liq utilization rate diff:", utilizationRateDiff);
|
@@ -21,6 +21,7 @@ export declare function getAllMarginfiAccountsByAuthority(conn: Connection, umi:
|
|
21
21
|
supplyMint?: PublicKey;
|
22
22
|
debtMint?: PublicKey;
|
23
23
|
}[]>;
|
24
|
+
export declare function getAmountAvailableFromBank(bank: Bank | null, isAsset: boolean): number;
|
24
25
|
interface BankSelection {
|
25
26
|
mint?: PublicKey;
|
26
27
|
banksCache?: BanksCache;
|
@@ -35,6 +36,6 @@ export declare function getMarginfiAccountPositionState(umi: Umi, protocolAccoun
|
|
35
36
|
data?: MarginfiAccount;
|
36
37
|
}, marginfiGroup?: PublicKey, supply?: BankSelection, debt?: BankSelection, livePositionUpdates?: LivePositionUpdates): Promise<PositionState | undefined>;
|
37
38
|
export declare function calculateAnnualAPYs(bank: Bank): [number, number];
|
38
|
-
export declare function getUpToDateShareValues(bank: Bank):
|
39
|
+
export declare function getUpToDateShareValues(bank: Bank): [number, number];
|
39
40
|
export {};
|
40
41
|
//# sourceMappingURL=marginfiUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,yBAAyB,CACvC,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,IAAI,EAAE,UAAU,EAChB,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,CAuDA;
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,IAAI,EAGJ,eAAe,EAGhB,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAI7D,UAAU,wBAAyB,SAAQ,qBAAqB;IAC9D,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GACd,wBAAwB,CAY1B;AAED,wBAAgB,yBAAyB,CACvC,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,IAAI,EAAE,UAAU,EAChB,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,CAuDA;AAED,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,GAAG,IAAI,EACjB,OAAO,EAAE,OAAO,UAejB;AAsDD,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,CAiLpC;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.findMarginfiAccounts = findMarginfiAccounts;
|
|
4
4
|
exports.calcMaxLtvAndLiqThreshold = calcMaxLtvAndLiqThreshold;
|
5
5
|
exports.getMaxLtvAndLiqThreshold = getMaxLtvAndLiqThreshold;
|
6
6
|
exports.getAllMarginfiAccountsByAuthority = getAllMarginfiAccountsByAuthority;
|
7
|
+
exports.getAmountAvailableFromBank = getAmountAvailableFromBank;
|
7
8
|
exports.getMarginfiAccountPositionState = getMarginfiAccountPositionState;
|
8
9
|
exports.calculateAnnualAPYs = calculateAnnualAPYs;
|
9
10
|
exports.getUpToDateShareValues = getUpToDateShareValues;
|
@@ -107,23 +108,29 @@ async function getAllMarginfiAccountsByAuthority(conn, umi, authority, compatibl
|
|
107
108
|
}));
|
108
109
|
}
|
109
110
|
}
|
110
|
-
|
111
|
-
let amountUsed = 0;
|
111
|
+
function getAmountAvailableFromBank(bank, isAsset) {
|
112
112
|
let amountCanBeUsed = 0;
|
113
|
-
let marketPrice = 0;
|
114
113
|
if (bank !== null) {
|
115
|
-
[
|
116
|
-
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.mint),
|
117
|
-
]);
|
118
|
-
const [assetShareValue, liabilityShareValue] = await getUpToDateShareValues(bank);
|
119
|
-
const shareValue = isAsset ? assetShareValue : liabilityShareValue;
|
120
|
-
amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
|
114
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
121
115
|
const totalDeposited = (0, numberUtils_1.bytesToI80F48)(bank.totalAssetShares.value) * assetShareValue;
|
122
116
|
amountCanBeUsed = isAsset
|
123
117
|
? Number(bank.config.depositLimit) - totalDeposited
|
124
118
|
: totalDeposited -
|
125
119
|
(0, numberUtils_1.bytesToI80F48)(bank.totalLiabilityShares.value) * liabilityShareValue;
|
126
120
|
}
|
121
|
+
return amountCanBeUsed;
|
122
|
+
}
|
123
|
+
async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
|
124
|
+
let amountUsed = 0;
|
125
|
+
let amountCanBeUsed = 0;
|
126
|
+
let marketPrice = 0;
|
127
|
+
if (bank !== null) {
|
128
|
+
[marketPrice] = await (0, priceUtils_1.fetchTokenPrices)([(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(bank.mint)]);
|
129
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
130
|
+
const shareValue = isAsset ? assetShareValue : liabilityShareValue;
|
131
|
+
amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
|
132
|
+
amountCanBeUsed = getAmountAvailableFromBank(bank, isAsset);
|
133
|
+
}
|
127
134
|
return {
|
128
135
|
mint: bank?.mint ?? (0, umi_1.publicKey)(web3_js_1.PublicKey.default),
|
129
136
|
decimals: bank?.mintDecimals ?? 0,
|
@@ -281,7 +288,7 @@ function calculateAnnualAPYs(bank) {
|
|
281
288
|
const utilizationRatio = totalLiabilities / totalAssets;
|
282
289
|
return calcInterestRate(bank, utilizationRatio);
|
283
290
|
}
|
284
|
-
|
291
|
+
function getUpToDateShareValues(bank) {
|
285
292
|
let timeDelta = (0, generalUtils_1.currentUnixSeconds)() - Number(bank.lastUpdate);
|
286
293
|
const [lendingApr, borrowingApr] = calculateAnnualAPYs(bank);
|
287
294
|
return [
|
@@ -13,11 +13,12 @@ export declare function getSolautoManagedPositions(umi: Umi, authority?: PublicK
|
|
13
13
|
export declare function getAllReferralStates(umi: Umi): Promise<PublicKey[]>;
|
14
14
|
export declare function getReferralsByUser(umi: Umi, user: PublicKey): Promise<PublicKey[]>;
|
15
15
|
export declare function getAllPositionsByAuthority(conn: Connection, umi: Umi, user: PublicKey, positionTypeFilter?: PositionType): Promise<SolautoPositionDetails[]>;
|
16
|
-
export declare function positionStateWithLatestPrices(
|
16
|
+
export declare function positionStateWithLatestPrices(state: PositionState, supplyPrice?: number, debtPrice?: number): Promise<PositionState>;
|
17
17
|
interface AssetProps {
|
18
18
|
mint: PublicKey;
|
19
19
|
price?: number;
|
20
20
|
amountUsed?: number;
|
21
|
+
amountCanBeUsed?: number;
|
21
22
|
}
|
22
23
|
export declare function createFakePositionState(supply: AssetProps, debt: AssetProps, maxLtvBps: number, liqThresholdBps: number): PositionState;
|
23
24
|
export declare function createSolautoSettings(settings: SolautoSettingsParametersInpArgs): SolautoSettingsParameters;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAGL,OAAO,EAEP,GAAG,EACJ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,kBAAkB,EAElB,aAAa,EACb,YAAY,EACZ,yBAAyB,EACzB,gCAAgC,EAChC,SAAS,EAMV,MAAM,iBAAiB,CAAC;AAkBzB,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG9E,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAczE;AAgBD,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,kBAAkB,GAC7B,MAAM,CAKR;AAED,wBAAgB,+BAA+B,CAC7C,UAAU,EAAE,kBAAkB,EAC9B,eAAe,EAAE,MAAM,GACtB,OAAO,CAET;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,kBAAkB,EAC9B,oBAAoB,EAAE,MAAM,UAY7B;AAED,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,yBAAyB,EACnC,eAAe,EAAE,MAAM,GACtB,yBAAyB,CAgB3B;AAED,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,yBAAyB,GAAG,SAAS,EACvD,WAAW,EAAE,WAAW,GAAG,SAAS,EACpC,eAAe,EAAE,MAAM,EACvB,oBAAoB,SAAI,GACvB,eAAe,GAAG,SAAS,CA2C7B;AAED,wBAAgB,kBAAkB,CAChC,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,yBAAyB,EAC3C,eAAe,EAAE,MAAM,GACtB,OAAO,CAYT;AAED,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,SAAS,EACrB,kBAAkB,CAAC,EAAE,YAAY,GAChC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAuFnC;AAED,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkBzE;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,SAAS,EAAE,CAAC,CA+BtB;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,GAAG,EACR,IAAI,EAAE,SAAS,EACf,kBAAkB,CAAC,EAAE,YAAY,GAChC,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA6CnC;AAED,wBAAsB,6BAA6B,CACjD,
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/solauto/generalUtils.ts"],"names":[],"mappings":"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"}
|
@@ -257,7 +257,7 @@ async function getAllPositionsByAuthority(conn, umi, user, positionTypeFilter) {
|
|
257
257
|
]);
|
258
258
|
return solautoCompatiblePositions.flat();
|
259
259
|
}
|
260
|
-
async function positionStateWithLatestPrices(
|
260
|
+
async function positionStateWithLatestPrices(state, supplyPrice, debtPrice) {
|
261
261
|
if (!supplyPrice || !debtPrice) {
|
262
262
|
[supplyPrice, debtPrice] = await (0, priceUtils_1.fetchTokenPrices)([
|
263
263
|
(0, umi_web3js_adapters_1.toWeb3JsPublicKey)(state.supply.mint),
|
@@ -304,8 +304,8 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
|
|
304
304
|
baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd, constants_1.USD_DECIMALS),
|
305
305
|
},
|
306
306
|
amountCanBeUsed: {
|
307
|
-
baseUnit: (0, numberUtils_1.toBaseUnit)(
|
308
|
-
baseAmountUsdValue: BigInt(Math.round(
|
307
|
+
baseUnit: (0, numberUtils_1.toBaseUnit)(supply.amountCanBeUsed ?? 0, supplyDecimals),
|
308
|
+
baseAmountUsdValue: BigInt(Math.round((supply.amountUsed ?? 0) * (supply.price ?? 0))),
|
309
309
|
},
|
310
310
|
baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(supply.price ?? 0, constants_1.USD_DECIMALS),
|
311
311
|
borrowFeeBps: 0,
|
@@ -322,8 +322,8 @@ function createFakePositionState(supply, debt, maxLtvBps, liqThresholdBps) {
|
|
322
322
|
baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(debtUsd, constants_1.USD_DECIMALS),
|
323
323
|
},
|
324
324
|
amountCanBeUsed: {
|
325
|
-
baseUnit: (0, numberUtils_1.toBaseUnit)(
|
326
|
-
baseAmountUsdValue: BigInt(Math.round(
|
325
|
+
baseUnit: (0, numberUtils_1.toBaseUnit)(debt.amountCanBeUsed ?? 0, debtDecimals),
|
326
|
+
baseAmountUsdValue: BigInt(Math.round((debt.amountCanBeUsed ?? 0) * (debt.price ?? 0))),
|
327
327
|
},
|
328
328
|
baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(debt.price ?? 0, constants_1.USD_DECIMALS),
|
329
329
|
borrowFeeBps: 0,
|
package/package.json
CHANGED
@@ -614,7 +614,6 @@ export async function requiresRefreshBeforeRebalance(client: SolautoClient) {
|
|
614
614
|
}
|
615
615
|
|
616
616
|
const oldStateWithLatestPrices = await positionStateWithLatestPrices(
|
617
|
-
client.connection,
|
618
617
|
client.solautoPositionData.state,
|
619
618
|
PRICES[client.supplyMint.toString()].price,
|
620
619
|
PRICES[client.debtMint.toString()].price
|
@@ -201,6 +201,25 @@ export async function getAllMarginfiAccountsByAuthority(
|
|
201
201
|
}
|
202
202
|
}
|
203
203
|
|
204
|
+
export function getAmountAvailableFromBank(
|
205
|
+
bank: Bank | null,
|
206
|
+
isAsset: boolean
|
207
|
+
) {
|
208
|
+
let amountCanBeUsed = 0;
|
209
|
+
|
210
|
+
if (bank !== null) {
|
211
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
212
|
+
const totalDeposited =
|
213
|
+
bytesToI80F48(bank.totalAssetShares.value) * assetShareValue;
|
214
|
+
amountCanBeUsed = isAsset
|
215
|
+
? Number(bank.config.depositLimit) - totalDeposited
|
216
|
+
: totalDeposited -
|
217
|
+
bytesToI80F48(bank.totalLiabilityShares.value) * liabilityShareValue;
|
218
|
+
}
|
219
|
+
|
220
|
+
return amountCanBeUsed;
|
221
|
+
}
|
222
|
+
|
204
223
|
async function getTokenUsage(
|
205
224
|
bank: Bank | null,
|
206
225
|
isAsset: boolean,
|
@@ -212,20 +231,11 @@ async function getTokenUsage(
|
|
212
231
|
let marketPrice = 0;
|
213
232
|
|
214
233
|
if (bank !== null) {
|
215
|
-
[marketPrice] = await fetchTokenPrices([
|
216
|
-
|
217
|
-
]);
|
218
|
-
const [assetShareValue, liabilityShareValue] =
|
219
|
-
await getUpToDateShareValues(bank);
|
234
|
+
[marketPrice] = await fetchTokenPrices([toWeb3JsPublicKey(bank.mint)]);
|
235
|
+
const [assetShareValue, liabilityShareValue] = getUpToDateShareValues(bank);
|
220
236
|
const shareValue = isAsset ? assetShareValue : liabilityShareValue;
|
221
237
|
amountUsed = shares * shareValue + Number(amountUsedAdjustment ?? 0);
|
222
|
-
|
223
|
-
const totalDeposited =
|
224
|
-
bytesToI80F48(bank.totalAssetShares.value) * assetShareValue;
|
225
|
-
amountCanBeUsed = isAsset
|
226
|
-
? Number(bank.config.depositLimit) - totalDeposited
|
227
|
-
: totalDeposited -
|
228
|
-
bytesToI80F48(bank.totalLiabilityShares.value) * liabilityShareValue;
|
238
|
+
amountCanBeUsed = getAmountAvailableFromBank(bank, isAsset);
|
229
239
|
}
|
230
240
|
|
231
241
|
return {
|
@@ -528,9 +538,7 @@ export function calculateAnnualAPYs(bank: Bank) {
|
|
528
538
|
return calcInterestRate(bank, utilizationRatio);
|
529
539
|
}
|
530
540
|
|
531
|
-
export
|
532
|
-
bank: Bank
|
533
|
-
): Promise<[number, number]> {
|
541
|
+
export function getUpToDateShareValues(bank: Bank): [number, number] {
|
534
542
|
let timeDelta = currentUnixSeconds() - Number(bank.lastUpdate);
|
535
543
|
const [lendingApr, borrowingApr] = calculateAnnualAPYs(bank);
|
536
544
|
|
@@ -398,7 +398,6 @@ export async function getAllPositionsByAuthority(
|
|
398
398
|
}
|
399
399
|
|
400
400
|
export async function positionStateWithLatestPrices(
|
401
|
-
conn: Connection,
|
402
401
|
state: PositionState,
|
403
402
|
supplyPrice?: number,
|
404
403
|
debtPrice?: number
|
@@ -451,6 +450,7 @@ interface AssetProps {
|
|
451
450
|
mint: PublicKey;
|
452
451
|
price?: number;
|
453
452
|
amountUsed?: number;
|
453
|
+
amountCanBeUsed?: number;
|
454
454
|
}
|
455
455
|
|
456
456
|
export function createFakePositionState(
|
@@ -477,8 +477,10 @@ export function createFakePositionState(
|
|
477
477
|
baseAmountUsdValue: toBaseUnit(supplyUsd, USD_DECIMALS),
|
478
478
|
},
|
479
479
|
amountCanBeUsed: {
|
480
|
-
baseUnit: toBaseUnit(
|
481
|
-
baseAmountUsdValue: BigInt(
|
480
|
+
baseUnit: toBaseUnit(supply.amountCanBeUsed ?? 0, supplyDecimals),
|
481
|
+
baseAmountUsdValue: BigInt(
|
482
|
+
Math.round((supply.amountUsed ?? 0) * (supply.price ?? 0))
|
483
|
+
),
|
482
484
|
},
|
483
485
|
baseAmountMarketPriceUsd: toBaseUnit(supply.price ?? 0, USD_DECIMALS),
|
484
486
|
borrowFeeBps: 0,
|
@@ -495,8 +497,10 @@ export function createFakePositionState(
|
|
495
497
|
baseAmountUsdValue: toBaseUnit(debtUsd, USD_DECIMALS),
|
496
498
|
},
|
497
499
|
amountCanBeUsed: {
|
498
|
-
baseUnit: toBaseUnit(
|
499
|
-
baseAmountUsdValue: BigInt(
|
500
|
+
baseUnit: toBaseUnit(debt.amountCanBeUsed ?? 0, debtDecimals),
|
501
|
+
baseAmountUsdValue: BigInt(
|
502
|
+
Math.round((debt.amountCanBeUsed ?? 0) * (debt.price ?? 0))
|
503
|
+
),
|
500
504
|
},
|
501
505
|
baseAmountMarketPriceUsd: toBaseUnit(debt.price ?? 0, USD_DECIMALS),
|
502
506
|
borrowFeeBps: 0,
|
@@ -3,6 +3,7 @@ import { none, publicKey, some } from "@metaplex-foundation/umi";
|
|
3
3
|
import { setupTest } from "../shared";
|
4
4
|
import { SolautoMarginfiClient } from "../../src/clients/solautoMarginfiClient";
|
5
5
|
import {
|
6
|
+
safeFetchSolautoPosition,
|
6
7
|
solautoAction,
|
7
8
|
SolautoSettingsParametersInpArgs,
|
8
9
|
} from "../../src/generated";
|
@@ -26,7 +27,7 @@ import {
|
|
26
27
|
SOLAUTO_TEST_PROGRAM,
|
27
28
|
USDC,
|
28
29
|
} from "../../src/constants";
|
29
|
-
import { buildHeliusApiUrl } from "../../src/utils";
|
30
|
+
import { buildHeliusApiUrl, getSolautoManagedPositions, positionStateWithLatestPrices } from "../../src/utils";
|
30
31
|
import { PriorityFeeSetting } from "../../src/types";
|
31
32
|
|
32
33
|
describe("Solauto Marginfi tests", async () => {
|
@@ -40,8 +41,8 @@ describe("Solauto Marginfi tests", async () => {
|
|
40
41
|
it("open - deposit - borrow - rebalance to 0 - withdraw - close", async () => {
|
41
42
|
const client = new SolautoMarginfiClient(
|
42
43
|
buildHeliusApiUrl(process.env.HELIUS_API_KEY!),
|
43
|
-
true
|
44
|
-
testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM
|
44
|
+
true
|
45
|
+
// testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM
|
45
46
|
);
|
46
47
|
|
47
48
|
const supply = NATIVE_MINT;
|
@@ -76,7 +77,6 @@ describe("Solauto Marginfi tests", async () => {
|
|
76
77
|
automation: none(),
|
77
78
|
targetBoostToBps: none(),
|
78
79
|
};
|
79
|
-
console.log(settingParams);
|
80
80
|
|
81
81
|
// if (client.solautoPositionData === null) {
|
82
82
|
// transactionItems.push(
|
@@ -156,13 +156,13 @@ describe("Solauto Marginfi tests", async () => {
|
|
156
156
|
// )
|
157
157
|
// );
|
158
158
|
|
159
|
-
const statuses = await new TransactionsManager(
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
).clientSend(transactionItems);
|
159
|
+
// const statuses = await new TransactionsManager(
|
160
|
+
// client,
|
161
|
+
// undefined,
|
162
|
+
// !payForTransactions ? "only-simulate" : "normal",
|
163
|
+
// PriorityFeeSetting.Low
|
164
|
+
// ).clientSend(transactionItems);
|
165
165
|
|
166
|
-
console.log(statuses);
|
166
|
+
// console.log(statuses);
|
167
167
|
});
|
168
168
|
});
|