@haven-fi/solauto-sdk 1.0.761 → 1.0.762
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/solautoPosition/positionUtils.js +1 -1
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +0 -2
- package/dist/utils/numberUtils.d.ts +3 -0
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/numberUtils.js +16 -0
- package/local/.env +1 -1
- package/local/txSandbox.ts +55 -66
- package/package.json +1 -1
- package/src/solautoPosition/positionUtils.ts +1 -1
- package/src/utils/generalUtils.ts +0 -7
- package/src/utils/numberUtils.ts +31 -0
@@ -19,7 +19,7 @@ function createSolautoSettings(settings) {
|
|
19
19
|
};
|
20
20
|
}
|
21
21
|
async function getPositionExBulk(umi, publicKeys) {
|
22
|
-
const batches = (0, utils_1.getBatches)(publicKeys,
|
22
|
+
const batches = (0, utils_1.getBatches)(publicKeys, 100);
|
23
23
|
const data = (await Promise.all(batches.map(async (pubkeys) => {
|
24
24
|
return (0, utils_1.retryWithExponentialBackoff)(async () => await (0, generated_1.safeFetchAllSolautoPosition)(umi, pubkeys.map((x) => (0, umi_web3js_adapters_1.fromWeb3JsPublicKey)(x))));
|
25
25
|
}))).flat();
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,GAAG,EACH,SAAS,IAAI,YAAY,EAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAW1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,yBAQ/C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAS1D;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,
|
1
|
+
{"version":3,"file":"generalUtils.d.ts","sourceRoot":"","sources":["../../src/utils/generalUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,eAAe,EAEf,GAAG,EACH,SAAS,IAAI,YAAY,EAC1B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAc,SAAS,EAAE,MAAM,cAAc,CAAC;AAErD,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,UAErD;AAED,wBAAgB,oBAAoB,CAAC,eAAe,EAAE,MAAM,UAE3D;AAED,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAI/C;AAED,wBAAgB,SAAS,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAErD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAW1D;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,yBAQ/C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAMlE;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAO1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,SAAS,GACZ,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAU1E;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAS1D;AAED,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,KAAK,CAAC,CAAC;AAEjE,wBAAgB,2BAA2B,CAAC,CAAC,EAC3C,EAAE,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,EACvD,OAAO,GAAE,MAAU,EACnB,KAAK,GAAE,MAAY,EACnB,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,CAAC,CAAC,CA8BZ;AAED,wBAAgB,WAAW,CAAC,CAAC,SAAS,MAAM,EAC1C,OAAO,EAAE,CAAC,EACV,KAAK,EAAE,MAAM,GACZ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAUxB;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,gBAuBzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,CAU5D;AAED,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,WAErE;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,CAAC,EAAE,GACV,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAInB"}
|
@@ -116,8 +116,6 @@ function retryWithExponentialBackoff(fn, retries = 5, delay = 150, errorsToThrow
|
|
116
116
|
.then(resolve)
|
117
117
|
.catch((error) => {
|
118
118
|
attemptNum++;
|
119
|
-
console.log(error.name, error.message);
|
120
|
-
console.log(errorsToThrow?.length, (errorsToThrow ?? []).some((errorType) => error instanceof errorType));
|
121
119
|
if (errorsToThrow?.length &&
|
122
120
|
errorsToThrow.some((errorType) => error instanceof errorType)) {
|
123
121
|
reject(error);
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { PositionState } from "../generated";
|
3
3
|
import { RoundAction } from "../types";
|
4
|
+
import { StrategyType } from "./stringUtils";
|
4
5
|
export declare function calcNetWorthUsd(state?: PositionState): number;
|
5
6
|
export declare function calcSupplyUsd(state?: PositionState): number;
|
6
7
|
export declare function calcDebtUsd(state?: PositionState): number;
|
@@ -25,4 +26,6 @@ export declare function maxRepayFromBps(maxLtvBps: number, liqThresholdBps: numb
|
|
25
26
|
export declare function maxRepayToBps(maxLtvBps: number, liqThresholdBps: number): number;
|
26
27
|
export declare function maxBoostToBps(maxLtvBps: number, liqThresholdBps: number): number;
|
27
28
|
export declare function realtimeUsdToEmaUsd(realtimeAmountUsd: number, mint: PublicKey): number;
|
29
|
+
export declare function boostSettingToLeverageFactor(supplyMint: PublicKey, debtMint: PublicKey, boostToBps: number, liqThresholdBps: number): number;
|
30
|
+
export declare function getLeverageFactor(strategyType: StrategyType, supplyUsd: number, debtUsd: number): number;
|
28
31
|
//# sourceMappingURL=numberUtils.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,OAAO,EAAE,aAAa,EAAa,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAO5C,OAAO,EAAE,aAAa,EAAa,MAAM,cAAc,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,EAAE,YAAY,EAAgB,MAAM,eAAe,CAAC;AAG3D,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAEpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlD;AAED,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,UAIhD;AAED,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,aAAa,UAKjD;AAED,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,aAAa,UAKpD;AAED,wBAAgB,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,UAKlD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,CAAC,EAAE,aAAa,UAK3D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,CAAC,EAAE,aAAa,UAI9D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,CAAC,EAAE,aAAa,UAK/D;AAED,wBAAgB,6BAA6B,CAAC,KAAK,CAAC,EAAE,aAAa,UAIlE;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,UAEjD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAE/C;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GACtB,MAAM,CAMR;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,GAAE,WAAqB,GACjC,MAAM,CAKR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKpE;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAGR;AAUD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAqBrD;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAejE;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAKR;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UASzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,mBAAmB,CACjC,iBAAiB,EAAE,MAAM,EACzB,IAAI,EAAE,SAAS,UAMhB;AAED,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,EACrB,QAAQ,EAAE,SAAS,EACnB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,UAUxB;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,MAAM,CAOR"}
|
@@ -24,9 +24,13 @@ exports.maxRepayFromBps = maxRepayFromBps;
|
|
24
24
|
exports.maxRepayToBps = maxRepayToBps;
|
25
25
|
exports.maxBoostToBps = maxBoostToBps;
|
26
26
|
exports.realtimeUsdToEmaUsd = realtimeUsdToEmaUsd;
|
27
|
+
exports.boostSettingToLeverageFactor = boostSettingToLeverageFactor;
|
28
|
+
exports.getLeverageFactor = getLeverageFactor;
|
27
29
|
const constants_1 = require("../constants");
|
28
30
|
const generated_1 = require("../generated");
|
29
31
|
const priceUtils_1 = require("./priceUtils");
|
32
|
+
const stringUtils_1 = require("./stringUtils");
|
33
|
+
const services_1 = require("../services");
|
30
34
|
function calcNetWorthUsd(state) {
|
31
35
|
return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
|
32
36
|
}
|
@@ -138,3 +142,15 @@ function realtimeUsdToEmaUsd(realtimeAmountUsd, mint) {
|
|
138
142
|
return ((realtimeAmountUsd / (0, priceUtils_1.safeGetPrice)(mint, generated_1.PriceType.Realtime)) *
|
139
143
|
(0, priceUtils_1.safeGetPrice)(mint, generated_1.PriceType.Ema));
|
140
144
|
}
|
145
|
+
function boostSettingToLeverageFactor(supplyMint, debtMint, boostToBps, liqThresholdBps) {
|
146
|
+
const strategy = (0, stringUtils_1.strategyType)(supplyMint, debtMint);
|
147
|
+
const supplyUsd = 100;
|
148
|
+
const debtUsd = (0, services_1.getDebtAdjustment)(liqThresholdBps, { supplyUsd: 100, debtUsd: 0 }, boostToBps).debtAdjustmentUsd;
|
149
|
+
return getLeverageFactor(strategy, supplyUsd + debtUsd, debtUsd);
|
150
|
+
}
|
151
|
+
function getLeverageFactor(strategyType, supplyUsd, debtUsd) {
|
152
|
+
return ((strategyType === "Long" || strategyType === "Ratio"
|
153
|
+
? supplyUsd
|
154
|
+
: debtUsd) /
|
155
|
+
(supplyUsd - debtUsd));
|
156
|
+
}
|
package/local/.env
CHANGED
@@ -1 +1 @@
|
|
1
|
-
ADDRESS_WHITELIST=5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe,He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz,E5BBsR1sUToPc3jXVwhrK5ttSiy6xhWJDMdQLvkgNppe,DRP5cgM1JpnMySvwg3jqRP2VA2DXSWUjo6VGLkNZ2etb
|
1
|
+
ADDRESS_WHITELIST=5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe,He4ka5Q3N1UvZikZvykdi47xyk5PoVP2tcQL5sVp31Sz,E5BBsR1sUToPc3jXVwhrK5ttSiy6xhWJDMdQLvkgNppe,DRP5cgM1JpnMySvwg3jqRP2VA2DXSWUjo6VGLkNZ2etb,FtwMsLNn4kBy2kpawC4izM8oUPbmfmbjjKNTcTUUDPzN
|
package/local/txSandbox.ts
CHANGED
@@ -7,33 +7,25 @@ import {
|
|
7
7
|
consoleLog,
|
8
8
|
fetchBank,
|
9
9
|
fetchMarginfiAccount,
|
10
|
-
fromBaseUnit,
|
11
|
-
getBankLiquidityAvailableBaseUnit,
|
12
10
|
getBatches,
|
13
11
|
getClient,
|
14
|
-
getMarginfiAccounts,
|
15
12
|
getPositionExBulk,
|
16
13
|
getSolanaRpcConnection,
|
17
14
|
getSolautoManagedPositions,
|
18
|
-
lendingAccountDeposit,
|
19
15
|
LendingPlatform,
|
16
|
+
lendingPoolAccrueBankInterest,
|
20
17
|
LOCAL_IRONFORGE_API_URL,
|
21
18
|
PriceType,
|
22
19
|
PriorityFeeSetting,
|
23
20
|
ProgramEnv,
|
24
21
|
rebalance,
|
25
|
-
SOLAUTO_MANAGER,
|
26
22
|
SOLAUTO_PROD_PROGRAM,
|
27
23
|
SOLAUTO_TEST_PROGRAM,
|
28
24
|
SolautoClient,
|
29
|
-
toBaseUnit,
|
30
25
|
TransactionItem,
|
31
|
-
TransactionsManager,
|
32
|
-
TxHandler,
|
33
|
-
USDC,
|
34
26
|
} from "../src";
|
35
27
|
import { getSecretKey } from "./shared";
|
36
|
-
import {
|
28
|
+
import { fromBaseUnit } from "../dist";
|
37
29
|
|
38
30
|
const payForTransaction = true;
|
39
31
|
const testProgram = false;
|
@@ -51,72 +43,69 @@ const signer = createSignerFromKeypair(
|
|
51
43
|
);
|
52
44
|
|
53
45
|
export async function main() {
|
54
|
-
const
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
console.log(fromBaseUnit(BigInt(Math.round(assets)), 6));
|
71
|
-
console.log(fromBaseUnit(BigInt(Math.round(liabs)), 6));
|
72
|
-
const missingLiquidity = getBankLiquidityAvailableBaseUnit(bank, false);
|
73
|
-
console.log(fromBaseUnit(missingLiquidity, 6));
|
74
|
-
|
75
|
-
const marginfiAccount = await fetchMarginfiAccount(
|
76
|
-
umi,
|
77
|
-
publicKey("Fun9UD87tLCxqxoTvpGYAy6Uwk2eevFGDk1VvxpXbd5x")
|
78
|
-
);
|
79
|
-
const managerAssets =
|
80
|
-
bytesToI80F48(
|
81
|
-
marginfiAccount.lendingAccount.balances[0].assetShares.value
|
82
|
-
) * bytesToI80F48(bank.assetShareValue.value);
|
83
|
-
console.log(fromBaseUnit(BigInt(Math.round(managerAssets)), 6));
|
84
|
-
|
85
|
-
const depositAmt =
|
86
|
-
missingLiquidity * BigInt(-1) + BigInt(toBaseUnit(620 + 20, 6));
|
87
|
-
console.log("Depositing", fromBaseUnit(depositAmt, 6));
|
46
|
+
const client = getClient(LendingPlatform.Marginfi, {
|
47
|
+
signer,
|
48
|
+
showLogs: true,
|
49
|
+
rpcUrl: LOCAL_IRONFORGE_API_URL,
|
50
|
+
programId: testProgram ? SOLAUTO_TEST_PROGRAM : SOLAUTO_PROD_PROGRAM,
|
51
|
+
lpEnv,
|
52
|
+
});
|
53
|
+
|
54
|
+
await client.initializeExistingSolautoPosition({
|
55
|
+
positionId: 1,
|
56
|
+
authority: new PublicKey("5UqsR2PGzbP8pGPbXEeXx86Gjz2N2UFBAuFZUSVydAEe"),
|
57
|
+
// lpUserAccount: new PublicKey(
|
58
|
+
// "GEokw9jqbh6d1xUNA3qaeYFFetbSR5Y1nt7C3chwwgSz"
|
59
|
+
// ),
|
60
|
+
});
|
61
|
+
|
88
62
|
const transactionItems = [
|
89
|
-
new TransactionItem(
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
),
|
96
|
-
marginfiAccount: marginfiAccount.publicKey,
|
97
|
-
marginfiGroup: publicKey(group),
|
98
|
-
bank: bank.publicKey,
|
99
|
-
bankLiquidityVault: publicKey(accounts.liquidityVault),
|
100
|
-
amount: depositAmt,
|
101
|
-
depositUpToLimit: true,
|
102
|
-
}),
|
63
|
+
new TransactionItem(async () => ({
|
64
|
+
tx: lendingPoolAccrueBankInterest(umi, {
|
65
|
+
marginfiGroup: publicKey(
|
66
|
+
"DQ2jqDJw9uzTwttf6h6r217BQ7kws3jZbJXDkfbCJa1q"
|
67
|
+
),
|
68
|
+
bank: publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"),
|
103
69
|
}),
|
104
|
-
|
105
|
-
),
|
70
|
+
})),
|
106
71
|
];
|
107
72
|
|
108
|
-
const txManager = new
|
109
|
-
txHandler:
|
110
|
-
signer,
|
111
|
-
rpcUrl: LOCAL_IRONFORGE_API_URL,
|
112
|
-
showLogs: true,
|
113
|
-
}),
|
73
|
+
const txManager = new ClientTransactionsManager({
|
74
|
+
txHandler: client,
|
114
75
|
txRunType: payForTransaction ? "normal" : "only-simulate",
|
115
76
|
priorityFeeSetting: PriorityFeeSetting.Default,
|
116
77
|
retryConfig: { totalRetries: 2 },
|
117
78
|
});
|
118
79
|
const statuses = await txManager.send(transactionItems);
|
119
80
|
consoleLog(statuses);
|
81
|
+
|
82
|
+
await new Promise((resolve) => setTimeout(resolve, 5000));
|
83
|
+
|
84
|
+
const mfiAccount = await fetchMarginfiAccount(
|
85
|
+
umi,
|
86
|
+
publicKey("Fun9UD87tLCxqxoTvpGYAy6Uwk2eevFGDk1VvxpXbd5x")
|
87
|
+
);
|
88
|
+
const bank = await fetchBank(
|
89
|
+
umi,
|
90
|
+
publicKey("EXrnNVfLagt3j4hCHSD9WqK75o6dkZBtjpnrSrSC78MA"),
|
91
|
+
{ commitment: "confirmed" }
|
92
|
+
);
|
93
|
+
|
94
|
+
console.log(
|
95
|
+
fromBaseUnit(
|
96
|
+
BigInt(
|
97
|
+
Math.round(
|
98
|
+
bytesToI80F48(
|
99
|
+
mfiAccount.lendingAccount.balances[0].assetShares.value
|
100
|
+
) * bytesToI80F48(bank.assetShareValue.value)
|
101
|
+
)
|
102
|
+
),
|
103
|
+
6
|
104
|
+
)
|
105
|
+
);
|
106
|
+
// 1:34pm - $4479.61
|
107
|
+
// 2:51pm - $4513.30
|
108
|
+
// 12:58pm - $4529.16
|
120
109
|
}
|
121
110
|
|
122
111
|
async function refreshAll() {
|
package/package.json
CHANGED
@@ -126,13 +126,6 @@ export function retryWithExponentialBackoff<T>(
|
|
126
126
|
.catch((error: Error) => {
|
127
127
|
attemptNum++;
|
128
128
|
|
129
|
-
console.log(error.name, error.message);
|
130
|
-
console.log(
|
131
|
-
errorsToThrow?.length,
|
132
|
-
(errorsToThrow ?? []).some(
|
133
|
-
(errorType) => error instanceof errorType
|
134
|
-
)
|
135
|
-
);
|
136
129
|
if (
|
137
130
|
errorsToThrow?.length &&
|
138
131
|
errorsToThrow.some((errorType) => error instanceof errorType)
|
package/src/utils/numberUtils.ts
CHANGED
@@ -8,6 +8,8 @@ import {
|
|
8
8
|
import { PositionState, PriceType } from "../generated";
|
9
9
|
import { RoundAction } from "../types";
|
10
10
|
import { safeGetPrice } from "./priceUtils";
|
11
|
+
import { StrategyType, strategyType } from "./stringUtils";
|
12
|
+
import { getDebtAdjustment } from "../services";
|
11
13
|
|
12
14
|
export function calcNetWorthUsd(state?: PositionState) {
|
13
15
|
return fromRoundedUsdValue(state?.netWorth.baseAmountUsdValue ?? BigInt(0));
|
@@ -215,3 +217,32 @@ export function realtimeUsdToEmaUsd(
|
|
215
217
|
safeGetPrice(mint, PriceType.Ema)!
|
216
218
|
);
|
217
219
|
}
|
220
|
+
|
221
|
+
export function boostSettingToLeverageFactor(
|
222
|
+
supplyMint: PublicKey,
|
223
|
+
debtMint: PublicKey,
|
224
|
+
boostToBps: number,
|
225
|
+
liqThresholdBps: number
|
226
|
+
) {
|
227
|
+
const strategy = strategyType(supplyMint, debtMint);
|
228
|
+
const supplyUsd = 100;
|
229
|
+
const debtUsd = getDebtAdjustment(
|
230
|
+
liqThresholdBps,
|
231
|
+
{ supplyUsd: 100, debtUsd: 0 },
|
232
|
+
boostToBps
|
233
|
+
).debtAdjustmentUsd;
|
234
|
+
return getLeverageFactor(strategy, supplyUsd + debtUsd, debtUsd);
|
235
|
+
}
|
236
|
+
|
237
|
+
export function getLeverageFactor(
|
238
|
+
strategyType: StrategyType,
|
239
|
+
supplyUsd: number,
|
240
|
+
debtUsd: number
|
241
|
+
): number {
|
242
|
+
return (
|
243
|
+
(strategyType === "Long" || strategyType === "Ratio"
|
244
|
+
? supplyUsd
|
245
|
+
: debtUsd) /
|
246
|
+
(supplyUsd - debtUsd)
|
247
|
+
);
|
248
|
+
}
|