@haven-fi/solauto-sdk 1.0.623 → 1.0.625
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/constants/{generalAccounts.d.ts → generalConstants.d.ts} +3 -1
- package/dist/constants/generalConstants.d.ts.map +1 -0
- package/dist/constants/{generalAccounts.js → generalConstants.js} +4 -1
- package/dist/constants/index.d.ts +6 -5
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -1
- package/dist/constants/marginfiAccounts.d.ts +4 -1
- package/dist/constants/marginfiAccounts.d.ts.map +1 -1
- package/dist/constants/marginfiAccounts.js +7 -5
- package/dist/constants/solautoConstants.d.ts +0 -3
- package/dist/constants/solautoConstants.d.ts.map +1 -1
- package/dist/constants/solautoConstants.js +3 -8
- package/dist/services/flashLoans/flProviderAggregator.d.ts +3 -3
- package/dist/services/flashLoans/flProviderAggregator.d.ts.map +1 -1
- package/dist/services/flashLoans/flProviderAggregator.js +5 -5
- package/dist/services/flashLoans/flProviderBase.d.ts +4 -3
- package/dist/services/flashLoans/flProviderBase.d.ts.map +1 -1
- package/dist/services/flashLoans/flProviderBase.js +3 -2
- package/dist/services/flashLoans/marginfiFlProvider.d.ts +2 -2
- package/dist/services/flashLoans/marginfiFlProvider.d.ts.map +1 -1
- package/dist/services/flashLoans/marginfiFlProvider.js +5 -26
- package/dist/services/rebalance/rebalanceSwapManager.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceSwapManager.js +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.d.ts.map +1 -1
- package/dist/services/rebalance/rebalanceTxBuilder.js +4 -4
- package/dist/services/rebalance/rebalanceValues.d.ts.map +1 -1
- package/dist/services/rebalance/solautoFees.d.ts.map +1 -1
- package/dist/services/rebalance/solautoFees.js +4 -2
- package/dist/services/solauto/solautoClient.d.ts +4 -3
- package/dist/services/solauto/solautoClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoClient.js +21 -24
- package/dist/services/solauto/solautoMarginfiClient.d.ts +3 -4
- package/dist/services/solauto/solautoMarginfiClient.d.ts.map +1 -1
- package/dist/services/solauto/solautoMarginfiClient.js +19 -20
- package/dist/services/solauto/txHandler.d.ts +4 -2
- package/dist/services/solauto/txHandler.d.ts.map +1 -1
- package/dist/services/solauto/txHandler.js +4 -6
- package/dist/services/swap/jupSwapManager.d.ts +1 -1
- package/dist/services/swap/jupSwapManager.d.ts.map +1 -1
- package/dist/services/swap/jupSwapManager.js +7 -10
- package/dist/services/transactions/transactionUtils.d.ts +2 -3
- package/dist/services/transactions/transactionUtils.d.ts.map +1 -1
- package/dist/services/transactions/transactionUtils.js +43 -46
- package/dist/services/transactions/transactionsManager.d.ts +2 -3
- package/dist/services/transactions/transactionsManager.d.ts.map +1 -1
- package/dist/services/transactions/transactionsManager.js +16 -20
- package/dist/solautoPosition/marginfiSolautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/marginfiSolautoPositionEx.js +1 -1
- package/dist/solautoPosition/solautoPositionEx.d.ts +1 -1
- package/dist/solautoPosition/solautoPositionEx.d.ts.map +1 -1
- package/dist/solautoPosition/solautoPositionEx.js +1 -1
- package/dist/solautoPosition/utils.d.ts +2 -2
- package/dist/solautoPosition/utils.d.ts.map +1 -1
- package/dist/solautoPosition/utils.js +2 -2
- package/dist/types/solauto.d.ts +1 -0
- package/dist/types/solauto.d.ts.map +1 -1
- package/dist/utils/generalUtils.d.ts +2 -0
- package/dist/utils/generalUtils.d.ts.map +1 -1
- package/dist/utils/generalUtils.js +9 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/jitoUtils.d.ts.map +1 -1
- package/dist/utils/jitoUtils.js +7 -8
- package/dist/utils/jupiterUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.d.ts +7 -3
- package/dist/utils/marginfiUtils.d.ts.map +1 -1
- package/dist/utils/marginfiUtils.js +50 -19
- package/dist/utils/numberUtils.d.ts.map +1 -1
- package/dist/utils/priceUtils.d.ts.map +1 -1
- package/dist/utils/priceUtils.js +13 -15
- package/dist/utils/solanaUtils.d.ts +3 -5
- package/dist/utils/solanaUtils.d.ts.map +1 -1
- package/dist/utils/solanaUtils.js +7 -15
- package/dist/utils/solautoUtils.d.ts +3 -3
- package/dist/utils/solautoUtils.d.ts.map +1 -1
- package/dist/utils/solautoUtils.js +5 -5
- package/dist/utils/stringUtils.d.ts.map +1 -1
- package/dist/utils/stringUtils.js +3 -3
- package/dist/utils/switchboardUtils.d.ts +1 -1
- package/dist/utils/switchboardUtils.d.ts.map +1 -1
- package/dist/utils/switchboardUtils.js +4 -4
- package/local/createISMAccounts.ts +29 -12
- package/local/createTokenAccounts.ts +12 -11
- package/local/logPositions.ts +5 -5
- package/local/shared.ts +16 -10
- package/local/txSandbox.ts +5 -5
- package/local/updateMarginfiLUT.ts +35 -41
- package/local/updateSolautoLUT.ts +11 -13
- package/package.json +1 -1
- package/src/constants/{generalAccounts.ts → generalConstants.ts} +6 -1
- package/src/constants/index.ts +6 -5
- package/src/constants/marginfiAccounts.ts +15 -6
- package/src/constants/solautoConstants.ts +2 -10
- package/src/services/flashLoans/flProviderAggregator.ts +9 -7
- package/src/services/flashLoans/flProviderBase.ts +5 -4
- package/src/services/flashLoans/marginfiFlProvider.ts +6 -37
- package/src/services/rebalance/rebalanceSwapManager.ts +1 -1
- package/src/services/rebalance/rebalanceTxBuilder.ts +5 -5
- package/src/services/rebalance/rebalanceValues.ts +1 -1
- package/src/services/rebalance/solautoFees.ts +3 -4
- package/src/services/solauto/solautoClient.ts +9 -15
- package/src/services/solauto/solautoMarginfiClient.ts +21 -23
- package/src/services/solauto/txHandler.ts +10 -9
- package/src/services/swap/jupSwapManager.ts +7 -6
- package/src/services/transactions/transactionUtils.ts +17 -18
- package/src/services/transactions/transactionsManager.ts +23 -22
- package/src/solautoPosition/marginfiSolautoPositionEx.ts +1 -2
- package/src/solautoPosition/solautoPositionEx.ts +5 -5
- package/src/solautoPosition/utils.ts +7 -7
- package/src/types/solauto.ts +2 -0
- package/src/utils/generalUtils.ts +9 -1
- package/src/utils/index.ts +1 -0
- package/src/utils/jitoUtils.ts +17 -14
- package/src/utils/jupiterUtils.ts +1 -1
- package/src/utils/marginfiUtils.ts +56 -14
- package/src/utils/numberUtils.ts +0 -1
- package/src/utils/priceUtils.ts +7 -5
- package/src/utils/solanaUtils.ts +24 -32
- package/src/utils/solautoUtils.ts +13 -13
- package/src/utils/stringUtils.ts +3 -3
- package/src/utils/switchboardUtils.ts +4 -4
- package/tests/transactions/shared.ts +9 -14
- package/tests/transactions/solautoMarginfi.ts +13 -3
- package/tests/unit/accounts.ts +14 -17
- package/tests/unit/lookupTables.ts +5 -5
- package/tests/unit/rebalanceCalculations.ts +17 -11
- package/README.md +0 -3
- package/dist/constants/generalAccounts.d.ts.map +0 -1
- package/src/constants/README.md +0 -7
package/dist/utils/jitoUtils.js
CHANGED
@@ -8,16 +8,15 @@ exports.getRequiredSigners = getRequiredSigners;
|
|
8
8
|
exports.sendJitoBundledTransactions = sendJitoBundledTransactions;
|
9
9
|
const web3_js_1 = require("@solana/web3.js");
|
10
10
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
11
|
-
const
|
11
|
+
const constants_1 = require("../constants");
|
12
|
+
const types_1 = require("../types");
|
13
|
+
const types_2 = require("../types");
|
12
14
|
const solanaUtils_1 = require("./solanaUtils");
|
13
15
|
const generalUtils_1 = require("./generalUtils");
|
14
|
-
const types_1 = require("../types");
|
15
16
|
const bs58_1 = __importDefault(require("bs58"));
|
16
|
-
const transactions_1 = require("../types/transactions");
|
17
|
-
const bytes_1 = require("@coral-xyz/anchor/dist/cjs/utils/bytes");
|
18
17
|
function getRandomTipAccount() {
|
19
|
-
const randomInt = Math.floor(Math.random() *
|
20
|
-
return new web3_js_1.PublicKey(
|
18
|
+
const randomInt = Math.floor(Math.random() * constants_1.JITO_TIP_ACCOUNTS.length);
|
19
|
+
return new web3_js_1.PublicKey(constants_1.JITO_TIP_ACCOUNTS[randomInt]);
|
21
20
|
}
|
22
21
|
function getTipInstruction(signer, tipLamports) {
|
23
22
|
return (0, solanaUtils_1.systemTransferUmiIx)(signer, getRandomTipAccount(), BigInt(tipLamports));
|
@@ -70,7 +69,7 @@ async function simulateJitoBundle(umi, txs) {
|
|
70
69
|
if (txFailure) {
|
71
70
|
const info = parseJitoErrorMessage(txFailure[1]);
|
72
71
|
if (info) {
|
73
|
-
throw new
|
72
|
+
throw new types_2.BundleSimulationError(`Failed to simulate transaction: TX: ${failedTxIdx}, IX: ${info.instructionIndex}, Error: ${info.errorCode}`, 400, {
|
74
73
|
transactionIdx: failedTxIdx,
|
75
74
|
instructionIdx: info.instructionIndex,
|
76
75
|
errorCode: info.errorCode,
|
@@ -184,7 +183,7 @@ function getRequiredSigners(message) {
|
|
184
183
|
async function sendJitoBundledTransactions(umi, connection, userSigner, otherSigners, txs, txType, priorityFeeSetting = types_1.PriorityFeeSetting.Min, onAwaitingSign) {
|
185
184
|
if (txs.length === 1) {
|
186
185
|
const resp = await (0, solanaUtils_1.sendSingleOptimizedTransaction)(umi, connection, txs[0], txType, priorityFeeSetting, onAwaitingSign);
|
187
|
-
return resp ? [
|
186
|
+
return resp ? [bs58_1.default.encode(resp)] : undefined;
|
188
187
|
}
|
189
188
|
(0, generalUtils_1.consoleLog)("Sending Jito bundle...");
|
190
189
|
(0, generalUtils_1.consoleLog)("Transactions: ", txs.length);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;
|
1
|
+
{"version":3,"file":"jupiterUtils.d.ts","sourceRoot":"","sources":["../../src/utils/jupiterUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,wBAAgB,eAAe,CAC7B,WAAW,EAAE,WAAW,GACvB,sBAAsB,CAUxB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE;;GA4BvD"}
|
@@ -1,9 +1,13 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
|
-
import { Umi } from "@metaplex-foundation/umi";
|
3
|
-
import {
|
4
|
-
import { MarginfiAssetAccounts } from "../types/accounts";
|
2
|
+
import { Program, Umi } from "@metaplex-foundation/umi";
|
3
|
+
import { ProgramEnv, MarginfiAssetAccounts } from "../types";
|
5
4
|
import { PositionState } from "../generated";
|
5
|
+
import { Bank, MarginfiAccount } from "../marginfi-sdk";
|
6
6
|
import { ContextUpdates } from "./solautoUtils";
|
7
|
+
export declare function getMarginfiProgram(env: ProgramEnv): PublicKey;
|
8
|
+
export declare function isMarginfiProgram(programId: PublicKey): boolean;
|
9
|
+
export declare function createDynamicMarginfiProgram(env?: ProgramEnv): Program;
|
10
|
+
export declare function umiWithMarginfiProgram(umi: Umi, marginfiEnv?: ProgramEnv): Umi;
|
7
11
|
interface AllMarginfiAssetAccounts extends MarginfiAssetAccounts {
|
8
12
|
mint: PublicKey;
|
9
13
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"marginfiUtils.d.ts","sourceRoot":"","sources":["../../src/utils/marginfiUtils.ts"],"names":[],"mappings":"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"}
|
@@ -1,5 +1,9 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getMarginfiProgram = getMarginfiProgram;
|
4
|
+
exports.isMarginfiProgram = isMarginfiProgram;
|
5
|
+
exports.createDynamicMarginfiProgram = createDynamicMarginfiProgram;
|
6
|
+
exports.umiWithMarginfiProgram = umiWithMarginfiProgram;
|
3
7
|
exports.findMarginfiAccounts = findMarginfiAccounts;
|
4
8
|
exports.calcMarginfiMaxLtvAndLiqThresholdBps = calcMarginfiMaxLtvAndLiqThresholdBps;
|
5
9
|
exports.getMarginfiMaxLtvAndLiqThresholdBps = getMarginfiMaxLtvAndLiqThresholdBps;
|
@@ -13,17 +17,44 @@ exports.marginfiAccountEmpty = marginfiAccountEmpty;
|
|
13
17
|
const web3_js_1 = require("@solana/web3.js");
|
14
18
|
const umi_1 = require("@metaplex-foundation/umi");
|
15
19
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
20
|
+
const constants_1 = require("../constants");
|
16
21
|
const marginfi_sdk_1 = require("../marginfi-sdk");
|
22
|
+
const priceUtils_1 = require("./priceUtils");
|
17
23
|
const generalUtils_1 = require("./generalUtils");
|
18
24
|
const numberUtils_1 = require("./numberUtils");
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
25
|
+
function getMarginfiProgram(env) {
|
26
|
+
return env === "Prod" ? constants_1.MARGINFI_PROD_PROGRAM : constants_1.MARGINFI_STAGING_PROGRAM;
|
27
|
+
}
|
28
|
+
function isMarginfiProgram(programId) {
|
29
|
+
return (programId.equals(constants_1.MARGINFI_PROD_PROGRAM) ||
|
30
|
+
programId.equals(constants_1.MARGINFI_STAGING_PROGRAM));
|
31
|
+
}
|
32
|
+
function createDynamicMarginfiProgram(env) {
|
33
|
+
return {
|
34
|
+
name: "marginfi",
|
35
|
+
publicKey: (0, umi_1.publicKey)(getMarginfiProgram(env ?? "Prod")),
|
36
|
+
getErrorFromCode(code, cause) {
|
37
|
+
return (0, marginfi_sdk_1.getMarginfiErrorFromCode)(code, this, cause);
|
38
|
+
},
|
39
|
+
getErrorFromName(name, cause) {
|
40
|
+
return (0, marginfi_sdk_1.getMarginfiErrorFromName)(name, this, cause);
|
41
|
+
},
|
42
|
+
isOnCluster() {
|
43
|
+
return true;
|
44
|
+
},
|
45
|
+
};
|
46
|
+
}
|
47
|
+
function umiWithMarginfiProgram(umi, marginfiEnv) {
|
48
|
+
return umi.use({
|
49
|
+
install(umi) {
|
50
|
+
umi.programs.add(createDynamicMarginfiProgram(marginfiEnv ?? "Prod"), false);
|
51
|
+
},
|
52
|
+
});
|
53
|
+
}
|
23
54
|
function findMarginfiAccounts(bank) {
|
24
|
-
for (const group in
|
25
|
-
for (const key in
|
26
|
-
const account =
|
55
|
+
for (const group in constants_1.MARGINFI_ACCOUNTS) {
|
56
|
+
for (const key in constants_1.MARGINFI_ACCOUNTS[group]) {
|
57
|
+
const account = constants_1.MARGINFI_ACCOUNTS[group][key];
|
27
58
|
if (account.bank.toString().toLowerCase() === bank.toString().toLowerCase()) {
|
28
59
|
return { ...account, mint: new web3_js_1.PublicKey(key) };
|
29
60
|
}
|
@@ -51,11 +82,11 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
|
|
51
82
|
return [0, 0];
|
52
83
|
}
|
53
84
|
if (!supply.bank || supply.bank === null) {
|
54
|
-
supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
85
|
+
supply.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup.toString()][supply.mint.toString()].bank), { commitment: "confirmed" });
|
55
86
|
}
|
56
87
|
if ((!debt.bank || debt.bank === null) &&
|
57
88
|
!debt.mint.equals(web3_js_1.PublicKey.default)) {
|
58
|
-
debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
89
|
+
debt.bank = await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup.toString()][debt.mint.toString()].bank), { commitment: "confirmed" });
|
59
90
|
}
|
60
91
|
if (!supplyPrice) {
|
61
92
|
const [price] = await (0, priceUtils_1.fetchTokenPrices)([
|
@@ -69,7 +100,7 @@ async function getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup, supply, d
|
|
69
100
|
return calcMarginfiMaxLtvAndLiqThresholdBps(supply.bank, debt.bank, supplyPrice);
|
70
101
|
}
|
71
102
|
async function getEmptyMarginfiAccountsByAuthority(umi, authority) {
|
72
|
-
const marginfiAccounts = await umi.rpc.getProgramAccounts(
|
103
|
+
const marginfiAccounts = await umi.rpc.getProgramAccounts(umi.programs.get("marginfi").publicKey, {
|
73
104
|
commitment: "confirmed",
|
74
105
|
filters: [
|
75
106
|
{
|
@@ -95,7 +126,7 @@ async function getEmptyMarginfiAccountsByAuthority(umi, authority) {
|
|
95
126
|
.filter((x) => marginfiAccountEmpty(x));
|
96
127
|
}
|
97
128
|
async function getAllMarginfiAccountsByAuthority(umi, authority, group, compatibleWithSolauto) {
|
98
|
-
const marginfiAccounts = await umi.rpc.getProgramAccounts(
|
129
|
+
const marginfiAccounts = await umi.rpc.getProgramAccounts(umi.programs.get("marginfi").publicKey, {
|
99
130
|
commitment: "confirmed",
|
100
131
|
dataSlice: {
|
101
132
|
offset: 0,
|
@@ -177,16 +208,16 @@ async function getTokenUsage(bank, isAsset, shares, amountUsedAdjustment) {
|
|
177
208
|
baseUnit: BigInt(Math.round(amountUsed)),
|
178
209
|
baseAmountUsdValue: bank
|
179
210
|
? (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(BigInt(Math.round(amountUsed)), bank.mintDecimals) *
|
180
|
-
marketPrice,
|
211
|
+
marketPrice, constants_1.USD_DECIMALS)
|
181
212
|
: BigInt(0),
|
182
213
|
},
|
183
214
|
amountCanBeUsed: {
|
184
215
|
baseUnit: amountCanBeUsed,
|
185
216
|
baseAmountUsdValue: bank
|
186
|
-
? (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(amountCanBeUsed, bank.mintDecimals) * marketPrice,
|
217
|
+
? (0, numberUtils_1.toBaseUnit)((0, numberUtils_1.fromBaseUnit)(amountCanBeUsed, bank.mintDecimals) * marketPrice, constants_1.USD_DECIMALS)
|
187
218
|
: BigInt(0),
|
188
219
|
},
|
189
|
-
baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(marketPrice,
|
220
|
+
baseAmountMarketPriceUsd: (0, numberUtils_1.toBaseUnit)(marketPrice, constants_1.USD_DECIMALS),
|
190
221
|
borrowFeeBps: isAsset ? 0 : (0, numberUtils_1.toBps)(originationFee),
|
191
222
|
padding1: [],
|
192
223
|
padding2: [],
|
@@ -197,7 +228,7 @@ async function getBank(umi, data, marginfiGroup) {
|
|
197
228
|
return data?.banksCache && data.mint && marginfiGroup
|
198
229
|
? data.banksCache[marginfiGroup.toString()][data?.mint?.toString()]
|
199
230
|
: data?.mint && data?.mint !== web3_js_1.PublicKey.default
|
200
|
-
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(
|
231
|
+
? await (0, marginfi_sdk_1.safeFetchBank)(umi, (0, umi_1.publicKey)(constants_1.MARGINFI_ACCOUNTS[marginfiGroup?.toString() ?? ""][data?.mint.toString()].bank), { commitment: "confirmed" })
|
201
232
|
: null;
|
202
233
|
}
|
203
234
|
async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup, supply, debt, contextUpdates) {
|
@@ -275,22 +306,22 @@ async function getMarginfiAccountPositionState(umi, lpUserAccount, marginfiGroup
|
|
275
306
|
debtUsage = await getTokenUsage(debtBank, false, 0, contextUpdates?.debtAdjustment);
|
276
307
|
}
|
277
308
|
const supplyPrice = (0, priceUtils_1.safeGetPrice)(supply.mint);
|
278
|
-
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? new web3_js_1.PublicKey(
|
309
|
+
let [maxLtvBps, liqThresholdBps] = await getMarginfiMaxLtvAndLiqThresholdBps(umi, marginfiGroup ?? new web3_js_1.PublicKey(constants_1.DEFAULT_MARGINFI_GROUP), {
|
279
310
|
mint: (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(supplyBank.mint),
|
280
311
|
bank: supplyBank,
|
281
312
|
}, {
|
282
313
|
mint: debtBank ? (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(debtBank.mint) : web3_js_1.PublicKey.default,
|
283
314
|
bank: debtBank,
|
284
315
|
}, supplyPrice);
|
285
|
-
const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue,
|
286
|
-
const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0),
|
316
|
+
const supplyUsd = (0, numberUtils_1.fromBaseUnit)(supplyUsage.amountUsed.baseAmountUsdValue, constants_1.USD_DECIMALS);
|
317
|
+
const debtUsd = (0, numberUtils_1.fromBaseUnit)(debtUsage?.amountUsed?.baseAmountUsdValue ?? BigInt(0), constants_1.USD_DECIMALS);
|
287
318
|
return {
|
288
319
|
supplyBank,
|
289
320
|
debtBank,
|
290
321
|
state: {
|
291
322
|
liqUtilizationRateBps: (0, numberUtils_1.getLiqUtilzationRateBps)(supplyUsd, debtUsd, liqThresholdBps),
|
292
323
|
netWorth: {
|
293
|
-
baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd,
|
324
|
+
baseAmountUsdValue: (0, numberUtils_1.toBaseUnit)(supplyUsd - debtUsd, constants_1.USD_DECIMALS),
|
294
325
|
baseUnit: (0, numberUtils_1.toBaseUnit)((supplyUsd - debtUsd) / supplyPrice, supplyUsage.decimals),
|
295
326
|
},
|
296
327
|
supply: supplyUsage,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"numberUtils.d.ts","sourceRoot":"","sources":["../../src/utils/numberUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,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,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKlE;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,KAAK,WAAW,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AAC9C,wBAAgB,KAAK,CACnB,KAAK,EAAE,MAAM,EACb,WAAW,GAAE,WAAqB,GACjC,MAAM,CAOR;AAED,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,UAKzE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAKvE"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"priceUtils.d.ts","sourceRoot":"","sources":["../../src/utils/priceUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,SAAS,IAAI,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAgBrE,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAyC5E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,qBAwCrD;AAkBD,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAsDnB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,qBAYzD;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,GAAG,YAAY,GAAG,MAAM,GAAG,SAAS,GAClD,MAAM,GAAG,SAAS,CAKpB"}
|
package/dist/utils/priceUtils.js
CHANGED
@@ -29,21 +29,19 @@ exports.getSwitchboardPrices = getSwitchboardPrices;
|
|
29
29
|
exports.getJupTokenPrices = getJupTokenPrices;
|
30
30
|
exports.safeGetPrice = safeGetPrice;
|
31
31
|
const web3_js_1 = require("@solana/web3.js");
|
32
|
-
const
|
32
|
+
const SwbCommon = __importStar(require("@switchboard-xyz/common"));
|
33
|
+
const constants_1 = require("../constants");
|
33
34
|
const numberUtils_1 = require("./numberUtils");
|
34
|
-
const solautoConstants_1 = require("../constants/solautoConstants");
|
35
|
-
const switchboardConstants_1 = require("../constants/switchboardConstants");
|
36
35
|
const generalUtils_1 = require("./generalUtils");
|
37
|
-
const SwbCommon = __importStar(require("@switchboard-xyz/common"));
|
38
36
|
const jupiterUtils_1 = require("./jupiterUtils");
|
39
37
|
async function fetchTokenPrices(mints) {
|
40
38
|
const currentTime = (0, generalUtils_1.currentUnixSeconds)();
|
41
|
-
if (!mints.some((mint) => !(mint.toString() in
|
42
|
-
currentTime -
|
43
|
-
return mints.map((mint) =>
|
39
|
+
if (!mints.some((mint) => !(mint.toString() in constants_1.PRICES) ||
|
40
|
+
currentTime - constants_1.PRICES[mint.toString()].time > 3)) {
|
41
|
+
return mints.map((mint) => constants_1.PRICES[mint.toString()].price);
|
44
42
|
}
|
45
|
-
const pythMints = mints.filter((x) => x.toString() in
|
46
|
-
const switchboardMints = mints.filter((x) => x.toString() in Object.keys(
|
43
|
+
const pythMints = mints.filter((x) => x.toString() in constants_1.PYTH_PRICE_FEED_IDS);
|
44
|
+
const switchboardMints = mints.filter((x) => x.toString() in Object.keys(constants_1.SWITCHBOARD_PRICE_FEED_IDS));
|
47
45
|
const otherMints = mints.filter((x) => !pythMints.includes(x) && !switchboardMints.includes(x));
|
48
46
|
const [pythData, switchboardData, jupData] = await Promise.all([
|
49
47
|
(0, generalUtils_1.zip)(pythMints, await getPythPrices(pythMints)),
|
@@ -55,7 +53,7 @@ async function fetchTokenPrices(mints) {
|
|
55
53
|
return item ? item[1] : 0;
|
56
54
|
});
|
57
55
|
for (var i = 0; i < mints.length; i++) {
|
58
|
-
|
56
|
+
constants_1.PRICES[mints[i].toString()] = {
|
59
57
|
price: Number(prices[i]),
|
60
58
|
time: (0, generalUtils_1.currentUnixSeconds)(),
|
61
59
|
};
|
@@ -66,7 +64,7 @@ async function getPythPrices(mints) {
|
|
66
64
|
if (mints.length === 0) {
|
67
65
|
return [];
|
68
66
|
}
|
69
|
-
const priceFeedIds = mints.map((mint) =>
|
67
|
+
const priceFeedIds = mints.map((mint) => constants_1.PYTH_PRICE_FEED_IDS[mint.toString()]);
|
70
68
|
const getReq = async () => await fetch(`https://hermes.pyth.network/v2/updates/price/latest?${priceFeedIds.map((x) => `ids%5B%5D=${x}`).join("&")}`);
|
71
69
|
const prices = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => {
|
72
70
|
let resp = await getReq();
|
@@ -109,7 +107,7 @@ async function getSwitchboardPrices(mints) {
|
|
109
107
|
let prices = {};
|
110
108
|
try {
|
111
109
|
prices = await (0, generalUtils_1.retryWithExponentialBackoff)(async () => {
|
112
|
-
const resp = await crossbar.simulateFeeds(mints.map((x) =>
|
110
|
+
const resp = await crossbar.simulateFeeds(mints.map((x) => constants_1.SWITCHBOARD_PRICE_FEED_IDS[x.toString()].feedHash));
|
113
111
|
const prices = resp.flatMap((x) => x.results[0]);
|
114
112
|
if (prices.filter((x) => !x || isNaN(Number(x)) || Number(x) <= 0)
|
115
113
|
.length > 0) {
|
@@ -117,7 +115,7 @@ async function getSwitchboardPrices(mints) {
|
|
117
115
|
}
|
118
116
|
const finalMap = {};
|
119
117
|
for (const item of resp) {
|
120
|
-
for (const [k, v] of Object.entries(
|
118
|
+
for (const [k, v] of Object.entries(constants_1.SWITCHBOARD_PRICE_FEED_IDS)) {
|
121
119
|
if (item.feedHash === v.feedHash) {
|
122
120
|
finalMap[k] = Number(item.results[0]);
|
123
121
|
}
|
@@ -146,8 +144,8 @@ async function getJupTokenPrices(mints) {
|
|
146
144
|
: 0);
|
147
145
|
}
|
148
146
|
function safeGetPrice(mint) {
|
149
|
-
if (mint && mint?.toString() in
|
150
|
-
return
|
147
|
+
if (mint && mint?.toString() in constants_1.PRICES) {
|
148
|
+
return constants_1.PRICES[mint.toString()].price;
|
151
149
|
}
|
152
150
|
return undefined;
|
153
151
|
}
|
@@ -1,9 +1,7 @@
|
|
1
|
-
import { AddressLookupTableInput, Signer, TransactionBuilder, Umi, WrappedInstruction } from "@metaplex-foundation/umi";
|
2
1
|
import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
3
|
-
import {
|
4
|
-
|
5
|
-
export declare function
|
6
|
-
export declare function getSolanaRpcConnection(rpcUrl: string, programId?: PublicKey, wsEndpoint?: string): [Connection, Umi];
|
2
|
+
import { AddressLookupTableInput, Signer, TransactionBuilder, Umi, WrappedInstruction } from "@metaplex-foundation/umi";
|
3
|
+
import { PriorityFeeSetting, ProgramEnv, TransactionRunType } from "../types";
|
4
|
+
export declare function getSolanaRpcConnection(rpcUrl: string, programId?: PublicKey, lpEnv?: ProgramEnv): [Connection, Umi];
|
7
5
|
export declare function getWrappedInstruction(signer: Signer, ix: TransactionInstruction): WrappedInstruction;
|
8
6
|
export declare function setComputeUnitLimitUmiIx(signer: Signer, maxComputeUnits: number): WrappedInstruction;
|
9
7
|
export declare function setComputeUnitPriceUmiIx(signer: Signer, lamports: number): WrappedInstruction;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,
|
1
|
+
{"version":3,"file":"solanaUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solanaUtils.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,UAAU,EACV,SAAS,EAKT,sBAAsB,EAEvB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EACL,uBAAuB,EACvB,MAAM,EACN,kBAAkB,EAClB,GAAG,EACH,kBAAkB,EAGnB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAe9E,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,EACrB,KAAK,CAAC,EAAE,UAAU,GACjB,CAAC,UAAU,EAAE,GAAG,CAAC,CAWnB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,EAAE,EAAE,sBAAsB,GACzB,kBAAkB,CAMpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,MAAM,GACtB,kBAAkB,CAOpB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,CAOpB;AAED,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,GACd,kBAAkB,CAUpB;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,SAAS,EACtB,QAAQ,EAAE,MAAM,GACf,kBAAkB,CASpB;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,SAAS,EACvB,SAAS,EAAE,SAAS,GACnB,kBAAkB,CAKpB;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,GACb,kBAAkB,CAKpB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,SAAS,EAAE,GACtB,OAAO,CAAC,MAAM,EAAE,CAAC,CAcnB;AAED,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,GAAG,EACR,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAmBpC;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBAa1B;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,kBAAkB,EAC/B,gBAAgB,CAAC,EAAE,MAAM,EACzB,gBAAgB,CAAC,EAAE,MAAM,sBA2D1B;AAuBD,wBAAsB,6BAA6B,CACjD,GAAG,EAAE,GAAG,EACR,SAAS,EAAE,SAAS,EACpB,WAAW,GAAE,MAAW,GACvB,OAAO,CAAC,GAAG,CAAC,CAKd;AAED,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,kBAAkB,EACtB,eAAe,EAAE,kBAAkB,EACnC,WAAW,CAAC,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAwC7B;AA+CD,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,GAAG,EACR,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,kBAAkB,EACtB,MAAM,CAAC,EAAE,kBAAkB,EAC3B,eAAe,GAAE,kBAA2C,EAC5D,cAAc,CAAC,EAAE,MAAM,IAAI,GAC1B,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC,CAuEjC"}
|
@@ -3,8 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.buildHeliusApiUrl = buildHeliusApiUrl;
|
7
|
-
exports.buildIronforgeApiUrl = buildIronforgeApiUrl;
|
8
6
|
exports.getSolanaRpcConnection = getSolanaRpcConnection;
|
9
7
|
exports.getWrappedInstruction = getWrappedInstruction;
|
10
8
|
exports.setComputeUnitLimitUmiIx = setComputeUnitLimitUmiIx;
|
@@ -21,31 +19,25 @@ exports.getQnComputeUnitPriceEstimate = getQnComputeUnitPriceEstimate;
|
|
21
19
|
exports.getComputeUnitPriceEstimate = getComputeUnitPriceEstimate;
|
22
20
|
exports.sendSingleOptimizedTransaction = sendSingleOptimizedTransaction;
|
23
21
|
const bs58_1 = __importDefault(require("bs58"));
|
22
|
+
const web3_js_1 = require("@solana/web3.js");
|
23
|
+
const spl_token_1 = require("@solana/spl-token");
|
24
24
|
const umi_1 = require("@metaplex-foundation/umi");
|
25
25
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
26
26
|
const umi_bundle_defaults_1 = require("@metaplex-foundation/umi-bundle-defaults");
|
27
|
-
const
|
28
|
-
const
|
27
|
+
const types_1 = require("../types");
|
28
|
+
const marginfi_sdk_1 = require("../marginfi-sdk");
|
29
29
|
const accountUtils_1 = require("./accountUtils");
|
30
30
|
const generalUtils_1 = require("./generalUtils");
|
31
|
-
const marginfi_sdk_1 = require("../marginfi-sdk");
|
32
|
-
const types_1 = require("../types");
|
33
|
-
const constants_1 = require("../constants");
|
34
31
|
const solautoUtils_1 = require("./solautoUtils");
|
35
|
-
|
36
|
-
|
37
|
-
}
|
38
|
-
function buildIronforgeApiUrl(ironforgeApiKey) {
|
39
|
-
return `https://rpc.ironforge.network/mainnet?apiKey=${ironforgeApiKey}`;
|
40
|
-
}
|
41
|
-
function getSolanaRpcConnection(rpcUrl, programId = constants_1.SOLAUTO_PROD_PROGRAM, wsEndpoint) {
|
32
|
+
const marginfiUtils_1 = require("./marginfiUtils");
|
33
|
+
function getSolanaRpcConnection(rpcUrl, programId, lpEnv) {
|
42
34
|
const connection = new web3_js_1.Connection(rpcUrl, {
|
43
35
|
commitment: "confirmed",
|
44
|
-
wsEndpoint: wsEndpoint,
|
45
36
|
});
|
46
37
|
const umi = (0, umi_bundle_defaults_1.createUmi)(connection).use({
|
47
38
|
install(umi) {
|
48
39
|
umi.programs.add((0, solautoUtils_1.createDynamicSolautoProgram)(programId), false);
|
40
|
+
umi.programs.add((0, marginfiUtils_1.createDynamicMarginfiProgram)(lpEnv), false);
|
49
41
|
},
|
50
42
|
});
|
51
43
|
return [connection, umi];
|
@@ -1,10 +1,10 @@
|
|
1
1
|
import { PublicKey } from "@solana/web3.js";
|
2
2
|
import { Program, Umi } from "@metaplex-foundation/umi";
|
3
|
-
import { AutomationSettings, DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, PositionType, SolautoRebalanceType, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, TokenType } from "../generated";
|
4
|
-
import { SolautoPositionDetails } from "../types/solauto";
|
5
3
|
import { QuoteResponse } from "@jup-ag/api";
|
4
|
+
import { AutomationSettings, DCASettings, DCASettingsInpArgs, LendingPlatform, PositionState, PositionType, SolautoRebalanceType, SolautoSettingsParameters, SolautoSettingsParametersInpArgs, TokenType } from "../generated";
|
5
|
+
import { SolautoPositionDetails } from "../types";
|
6
6
|
import { SolautoClient, SolautoMarginfiClient, TxHandlerProps } from "../services";
|
7
|
-
export declare function createDynamicSolautoProgram(programId
|
7
|
+
export declare function createDynamicSolautoProgram(programId?: PublicKey): Program;
|
8
8
|
export declare function nextAutomationPeriodTimestamp(automation: AutomationSettings): number;
|
9
9
|
export declare function eligibleForNextAutomationPeriod(automation: AutomationSettings, currentUnixTime: number): boolean;
|
10
10
|
export declare function getUpdatedValueFromAutomation(currValue: number, targetValue: number, automation: AutomationSettings, currentUnixTimestamp: number): number;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"solautoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solautoUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAa,GAAG,EAAE,MAAM,0BAA0B,CAAC;
|
1
|
+
{"version":3,"file":"solautoUtils.d.ts","sourceRoot":"","sources":["../../src/utils/solautoUtils.ts"],"names":[],"mappings":"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"}
|
@@ -16,19 +16,19 @@ exports.hasFirstRebalance = hasFirstRebalance;
|
|
16
16
|
exports.hasLastRebalance = hasLastRebalance;
|
17
17
|
const web3_js_1 = require("@solana/web3.js");
|
18
18
|
const umi_1 = require("@metaplex-foundation/umi");
|
19
|
-
const generated_1 = require("../generated");
|
20
|
-
const accountUtils_1 = require("./accountUtils");
|
21
19
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
20
|
+
const generated_1 = require("../generated");
|
22
21
|
const constants_1 = require("../constants");
|
23
|
-
const marginfiUtils_1 = require("./marginfiUtils");
|
24
|
-
const solautoPosition_1 = require("../solautoPosition");
|
25
22
|
const services_1 = require("../services");
|
23
|
+
const solautoPosition_1 = require("../solautoPosition");
|
24
|
+
const accountUtils_1 = require("./accountUtils");
|
26
25
|
const numberUtils_1 = require("./numberUtils");
|
27
26
|
const priceUtils_1 = require("./priceUtils");
|
27
|
+
const marginfiUtils_1 = require("./marginfiUtils");
|
28
28
|
function createDynamicSolautoProgram(programId) {
|
29
29
|
return {
|
30
30
|
name: "solauto",
|
31
|
-
publicKey: (0, umi_1.publicKey)(programId),
|
31
|
+
publicKey: (0, umi_1.publicKey)(programId ?? constants_1.SOLAUTO_PROD_PROGRAM),
|
32
32
|
getErrorFromCode(code, cause) {
|
33
33
|
return (0, generated_1.getSolautoErrorFromCode)(code, this, cause);
|
34
34
|
},
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../src/utils/stringUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../src/utils/stringUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,eAAO,MAAM,aAAa,qCAAsC,CAAC;AACjE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAoB1D,wBAAgB,SAAS,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,SAAS,UAWrE;AAED,wBAAgB,mBAAmB,CACjC,UAAU,CAAC,EAAE,SAAS,EACtB,QAAQ,CAAC,EAAE,SAAS,UAcrB;AAED,wBAAgB,YAAY,CAC1B,UAAU,EAAE,SAAS,EACrB,QAAQ,EAAE,SAAS,GAClB,YAAY,CAWd"}
|
@@ -4,14 +4,14 @@ exports.StrategyTypes = void 0;
|
|
4
4
|
exports.ratioName = ratioName;
|
5
5
|
exports.solautoStrategyName = solautoStrategyName;
|
6
6
|
exports.strategyType = strategyType;
|
7
|
+
const web3_js_1 = require("@solana/web3.js");
|
7
8
|
const spl_token_1 = require("@solana/spl-token");
|
8
9
|
const constants_1 = require("../constants");
|
9
|
-
const web3_js_1 = require("@solana/web3.js");
|
10
10
|
const generalUtils_1 = require("./generalUtils");
|
11
11
|
exports.StrategyTypes = ["Long", "Short", "Ratio"];
|
12
12
|
const MAJORS_PRIO = {
|
13
|
-
[constants_1.WBTC
|
14
|
-
[constants_1.WETH
|
13
|
+
[constants_1.WBTC]: 0,
|
14
|
+
[constants_1.WETH]: 1,
|
15
15
|
[spl_token_1.NATIVE_MINT.toString()]: 2,
|
16
16
|
};
|
17
17
|
function adjustedTicker(mint) {
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { Connection, PublicKey } from "@solana/web3.js";
|
2
|
-
import { TransactionItemInputs } from "../types";
|
3
2
|
import { Signer } from "@metaplex-foundation/umi";
|
4
3
|
import * as OnDemand from "@switchboard-xyz/on-demand";
|
4
|
+
import { TransactionItemInputs } from "../types";
|
5
5
|
export declare function getPullFeed(conn: Connection, mint: PublicKey, wallet?: PublicKey): OnDemand.PullFeed;
|
6
6
|
export declare function buildSwbSubmitResponseTx(conn: Connection, signer: Signer, mint: PublicKey): Promise<TransactionItemInputs | undefined>;
|
7
7
|
export declare function getSwitchboardFeedData(conn: Connection, mints: PublicKey[]): Promise<{
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"switchboardUtils.d.ts","sourceRoot":"","sources":["../../src/utils/switchboardUtils.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"switchboardUtils.d.ts","sourceRoot":"","sources":["../../src/utils/switchboardUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAGV,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,MAAM,EAAsB,MAAM,0BAA0B,CAAC;AAGtE,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAC;AAGvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAIjD,wBAAgB,WAAW,CACzB,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,SAAS,EACf,MAAM,CAAC,EAAE,SAAS,qBAuBnB;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,UAAU,EAChB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAsB5C;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,UAAU,EAChB,KAAK,EAAE,SAAS,EAAE,GACjB,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,CAuB/D"}
|
@@ -29,13 +29,13 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
29
|
exports.getPullFeed = getPullFeed;
|
30
30
|
exports.buildSwbSubmitResponseTx = buildSwbSubmitResponseTx;
|
31
31
|
exports.getSwitchboardFeedData = getSwitchboardFeedData;
|
32
|
-
const anchor_1 = require("@coral-xyz/anchor");
|
33
|
-
const switchboard_json_1 = __importDefault(require("../idls/switchboard.json"));
|
34
32
|
const web3_js_1 = require("@solana/web3.js");
|
35
|
-
const switchboardConstants_1 = require("../constants/switchboardConstants");
|
36
33
|
const umi_1 = require("@metaplex-foundation/umi");
|
37
34
|
const umi_web3js_adapters_1 = require("@metaplex-foundation/umi-web3js-adapters");
|
35
|
+
const anchor_1 = require("@coral-xyz/anchor");
|
38
36
|
const OnDemand = __importStar(require("@switchboard-xyz/on-demand"));
|
37
|
+
const switchboard_json_1 = __importDefault(require("../idls/switchboard.json"));
|
38
|
+
const constants_1 = require("../constants");
|
39
39
|
const generalUtils_1 = require("./generalUtils");
|
40
40
|
const solanaUtils_1 = require("./solanaUtils");
|
41
41
|
function getPullFeed(conn, mint, wallet) {
|
@@ -47,7 +47,7 @@ function getPullFeed(conn, mint, wallet) {
|
|
47
47
|
const provider = new anchor_1.AnchorProvider(conn, dummyWallet, anchor_1.AnchorProvider.defaultOptions());
|
48
48
|
const program = new anchor_1.Program(switchboard_json_1.default, provider);
|
49
49
|
const { PullFeed } = OnDemand;
|
50
|
-
return new PullFeed(program, new web3_js_1.PublicKey(
|
50
|
+
return new PullFeed(program, new web3_js_1.PublicKey(constants_1.SWITCHBOARD_PRICE_FEED_IDS[mint.toString()].feedId));
|
51
51
|
}
|
52
52
|
async function buildSwbSubmitResponseTx(conn, signer, mint) {
|
53
53
|
const feed = getPullFeed(conn, mint, (0, umi_web3js_adapters_1.toWeb3JsPublicKey)(signer.publicKey));
|
@@ -5,18 +5,24 @@ import {
|
|
5
5
|
transactionBuilder,
|
6
6
|
} from "@metaplex-foundation/umi";
|
7
7
|
import {
|
8
|
-
buildHeliusApiUrl,
|
9
8
|
getSolanaRpcConnection,
|
10
9
|
sendSingleOptimizedTransaction,
|
11
|
-
|
12
|
-
|
13
|
-
import {
|
14
|
-
|
10
|
+
getAllMarginfiAccountsByAuthority,
|
11
|
+
} from "../src/utils";
|
12
|
+
import {
|
13
|
+
marginfiAccountInitialize,
|
14
|
+
safeFetchAllMarginfiAccount,
|
15
|
+
} from "../src/marginfi-sdk";
|
16
|
+
import {
|
17
|
+
LOCAL_IRONFORGE_API_URL,
|
18
|
+
MARGINFI_ACCOUNTS,
|
19
|
+
SOLAUTO_MANAGER,
|
20
|
+
} from "../src/constants";
|
15
21
|
import { updateSolautoLut } from "./updateSolautoLUT";
|
16
|
-
import {
|
22
|
+
import { getSecretKey } from "./shared";
|
17
23
|
|
18
24
|
async function createIntermediarySolautoManagerAccounts() {
|
19
|
-
let [connection, umi] = getSolanaRpcConnection(
|
25
|
+
let [connection, umi] = getSolanaRpcConnection(LOCAL_IRONFORGE_API_URL);
|
20
26
|
|
21
27
|
const secretKey = getSecretKey("solauto-manager");
|
22
28
|
const signerKeypair = umi.eddsa.createKeypairFromSecretKey(secretKey);
|
@@ -24,13 +30,24 @@ async function createIntermediarySolautoManagerAccounts() {
|
|
24
30
|
|
25
31
|
umi = umi.use(signerIdentity(signer));
|
26
32
|
|
27
|
-
const accounts = await getAllMarginfiAccountsByAuthority(
|
28
|
-
|
29
|
-
|
33
|
+
const accounts = await getAllMarginfiAccountsByAuthority(
|
34
|
+
umi,
|
35
|
+
SOLAUTO_MANAGER,
|
36
|
+
undefined,
|
37
|
+
false
|
38
|
+
);
|
39
|
+
const data = await safeFetchAllMarginfiAccount(
|
40
|
+
umi,
|
41
|
+
accounts.map((x) => publicKey(x.marginfiAccount))
|
42
|
+
);
|
43
|
+
const existingMarginfiGroups = data.map((x) => x.group.toString());
|
30
44
|
|
31
45
|
for (const group of Object.keys(MARGINFI_ACCOUNTS)) {
|
32
46
|
if (existingMarginfiGroups.includes(group.toString())) {
|
33
|
-
console.log(
|
47
|
+
console.log(
|
48
|
+
"Already have Solauto Manager Marginfi Account for group:",
|
49
|
+
group
|
50
|
+
);
|
34
51
|
continue;
|
35
52
|
}
|
36
53
|
|
@@ -45,7 +62,7 @@ async function createIntermediarySolautoManagerAccounts() {
|
|
45
62
|
authority: signer,
|
46
63
|
feePayer: signer,
|
47
64
|
});
|
48
|
-
|
65
|
+
|
49
66
|
await sendSingleOptimizedTransaction(
|
50
67
|
umi,
|
51
68
|
connection,
|