@hobba-io/core 0.1.0
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/LICENSE +15 -0
- package/README.md +87 -0
- package/dist/amountUtils.d.ts +15 -0
- package/dist/amountUtils.d.ts.map +1 -0
- package/dist/amountUtils.js +59 -0
- package/dist/amountUtils.js.map +1 -0
- package/dist/constants.d.ts +148 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +231 -0
- package/dist/constants.js.map +1 -0
- package/dist/errors.d.ts +7 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +29 -0
- package/dist/errors.js.map +1 -0
- package/dist/executeAction.d.ts +36 -0
- package/dist/executeAction.d.ts.map +1 -0
- package/dist/executeAction.js +606 -0
- package/dist/executeAction.js.map +1 -0
- package/dist/executeDepositBorrow.d.ts +49 -0
- package/dist/executeDepositBorrow.d.ts.map +1 -0
- package/dist/executeDepositBorrow.js +444 -0
- package/dist/executeDepositBorrow.js.map +1 -0
- package/dist/idl/hobba.json +5072 -0
- package/dist/idl.d.ts +783 -0
- package/dist/idl.d.ts.map +1 -0
- package/dist/idl.js +7 -0
- package/dist/idl.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/juplend/accountResolvers.d.ts +106 -0
- package/dist/juplend/accountResolvers.d.ts.map +1 -0
- package/dist/juplend/accountResolvers.js +148 -0
- package/dist/juplend/accountResolvers.js.map +1 -0
- package/dist/juplend/operateRemaining.d.ts +11 -0
- package/dist/juplend/operateRemaining.d.ts.map +1 -0
- package/dist/juplend/operateRemaining.js +46 -0
- package/dist/juplend/operateRemaining.js.map +1 -0
- package/dist/juplend/positionInit.d.ts +34 -0
- package/dist/juplend/positionInit.d.ts.map +1 -0
- package/dist/juplend/positionInit.js +56 -0
- package/dist/juplend/positionInit.js.map +1 -0
- package/dist/juplend/positionParser.d.ts +8 -0
- package/dist/juplend/positionParser.d.ts.map +1 -0
- package/dist/juplend/positionParser.js +30 -0
- package/dist/juplend/positionParser.js.map +1 -0
- package/dist/juplend/sdkApi.d.ts +39 -0
- package/dist/juplend/sdkApi.d.ts.map +1 -0
- package/dist/juplend/sdkApi.js +68 -0
- package/dist/juplend/sdkApi.js.map +1 -0
- package/dist/juplend/tickMath.d.ts +19 -0
- package/dist/juplend/tickMath.d.ts.map +1 -0
- package/dist/juplend/tickMath.js +91 -0
- package/dist/juplend/tickMath.js.map +1 -0
- package/dist/juplend/tickUtils.d.ts +20 -0
- package/dist/juplend/tickUtils.d.ts.map +1 -0
- package/dist/juplend/tickUtils.js +115 -0
- package/dist/juplend/tickUtils.js.map +1 -0
- package/dist/juplend/vaultConfigParser.d.ts +25 -0
- package/dist/juplend/vaultConfigParser.d.ts.map +1 -0
- package/dist/juplend/vaultConfigParser.js +38 -0
- package/dist/juplend/vaultConfigParser.js.map +1 -0
- package/dist/kamino/accountResolvers.d.ts +110 -0
- package/dist/kamino/accountResolvers.d.ts.map +1 -0
- package/dist/kamino/accountResolvers.js +220 -0
- package/dist/kamino/accountResolvers.js.map +1 -0
- package/dist/kamino/obligationParser.d.ts +13 -0
- package/dist/kamino/obligationParser.d.ts.map +1 -0
- package/dist/kamino/obligationParser.js +92 -0
- package/dist/kamino/obligationParser.js.map +1 -0
- package/dist/kamino/refreshInstructions.d.ts +4 -0
- package/dist/kamino/refreshInstructions.d.ts.map +1 -0
- package/dist/kamino/refreshInstructions.js +32 -0
- package/dist/kamino/refreshInstructions.js.map +1 -0
- package/dist/limits.d.ts +87 -0
- package/dist/limits.d.ts.map +1 -0
- package/dist/limits.js +174 -0
- package/dist/limits.js.map +1 -0
- package/dist/marketConfig.d.ts +35 -0
- package/dist/marketConfig.d.ts.map +1 -0
- package/dist/marketConfig.js +85 -0
- package/dist/marketConfig.js.map +1 -0
- package/dist/oracle/scopePrice.d.ts +7 -0
- package/dist/oracle/scopePrice.d.ts.map +1 -0
- package/dist/oracle/scopePrice.js +31 -0
- package/dist/oracle/scopePrice.js.map +1 -0
- package/dist/pdas.d.ts +33 -0
- package/dist/pdas.d.ts.map +1 -0
- package/dist/pdas.js +116 -0
- package/dist/pdas.js.map +1 -0
- package/dist/position.d.ts +45 -0
- package/dist/position.d.ts.map +1 -0
- package/dist/position.js +68 -0
- package/dist/position.js.map +1 -0
- package/dist/positionMetrics.d.ts +108 -0
- package/dist/positionMetrics.d.ts.map +1 -0
- package/dist/positionMetrics.js +238 -0
- package/dist/positionMetrics.js.map +1 -0
- package/dist/program.d.ts +12 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +24 -0
- package/dist/program.js.map +1 -0
- package/dist/quote.d.ts +90 -0
- package/dist/quote.d.ts.map +1 -0
- package/dist/quote.js +198 -0
- package/dist/quote.js.map +1 -0
- package/dist/rates/borrowRates.d.ts +44 -0
- package/dist/rates/borrowRates.d.ts.map +1 -0
- package/dist/rates/borrowRates.js +229 -0
- package/dist/rates/borrowRates.js.map +1 -0
- package/dist/rates/collateralInfo.d.ts +21 -0
- package/dist/rates/collateralInfo.d.ts.map +1 -0
- package/dist/rates/collateralInfo.js +104 -0
- package/dist/rates/collateralInfo.js.map +1 -0
- package/dist/rates/constants.d.ts +22 -0
- package/dist/rates/constants.d.ts.map +1 -0
- package/dist/rates/constants.js +70 -0
- package/dist/rates/constants.js.map +1 -0
- package/dist/rates/index.d.ts +11 -0
- package/dist/rates/index.d.ts.map +1 -0
- package/dist/rates/index.js +11 -0
- package/dist/rates/index.js.map +1 -0
- package/dist/rates/kaminoApi.d.ts +24 -0
- package/dist/rates/kaminoApi.d.ts.map +1 -0
- package/dist/rates/kaminoApi.js +98 -0
- package/dist/rates/kaminoApi.js.map +1 -0
- package/dist/rates/supplyRates.d.ts +23 -0
- package/dist/rates/supplyRates.d.ts.map +1 -0
- package/dist/rates/supplyRates.js +67 -0
- package/dist/rates/supplyRates.js.map +1 -0
- package/dist/transactionBuilder.d.ts +5 -0
- package/dist/transactionBuilder.d.ts.map +1 -0
- package/dist/transactionBuilder.js +287 -0
- package/dist/transactionBuilder.js.map +1 -0
- package/dist/txHelpers.d.ts +16 -0
- package/dist/txHelpers.d.ts.map +1 -0
- package/dist/txHelpers.js +82 -0
- package/dist/txHelpers.js.map +1 -0
- package/dist/userState.d.ts +21 -0
- package/dist/userState.d.ts.map +1 -0
- package/dist/userState.js +60 -0
- package/dist/userState.js.map +1 -0
- package/dist/vault/vaultAccounts.d.ts +82 -0
- package/dist/vault/vaultAccounts.d.ts.map +1 -0
- package/dist/vault/vaultAccounts.js +275 -0
- package/dist/vault/vaultAccounts.js.map +1 -0
- package/dist/wallet.d.ts +12 -0
- package/dist/wallet.d.ts.map +1 -0
- package/dist/wallet.js +2 -0
- package/dist/wallet.js.map +1 -0
- package/package.json +63 -0
- package/src/amountUtils.ts +69 -0
- package/src/constants.ts +263 -0
- package/src/errors.ts +33 -0
- package/src/executeAction.ts +884 -0
- package/src/executeDepositBorrow.ts +677 -0
- package/src/idl/hobba.json +5072 -0
- package/src/idl.ts +7 -0
- package/src/index.ts +21 -0
- package/src/juplend/accountResolvers.ts +207 -0
- package/src/juplend/operateRemaining.ts +81 -0
- package/src/juplend/positionInit.ts +86 -0
- package/src/juplend/positionParser.ts +41 -0
- package/src/juplend/sdkApi.ts +112 -0
- package/src/juplend/tickMath.ts +82 -0
- package/src/juplend/tickUtils.ts +163 -0
- package/src/juplend/vaultConfigParser.ts +45 -0
- package/src/kamino/accountResolvers.ts +299 -0
- package/src/kamino/obligationParser.ts +123 -0
- package/src/kamino/refreshInstructions.ts +45 -0
- package/src/limits.ts +222 -0
- package/src/marketConfig.ts +139 -0
- package/src/oracle/scopePrice.ts +31 -0
- package/src/pdas.ts +226 -0
- package/src/position.ts +131 -0
- package/src/positionMetrics.ts +387 -0
- package/src/program.ts +30 -0
- package/src/quote.ts +310 -0
- package/src/rates/borrowRates.ts +270 -0
- package/src/rates/collateralInfo.ts +136 -0
- package/src/rates/constants.ts +87 -0
- package/src/rates/index.ts +38 -0
- package/src/rates/kaminoApi.ts +134 -0
- package/src/rates/supplyRates.ts +102 -0
- package/src/transactionBuilder.ts +324 -0
- package/src/txHelpers.ts +107 -0
- package/src/userState.ts +91 -0
- package/src/vault/vaultAccounts.ts +365 -0
- package/src/wallet.ts +12 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { PublicKey, TransactionInstruction, SystemProgram } from "@solana/web3.js";
|
|
2
|
+
import { ATA_PROGRAM_ID } from "../constants";
|
|
3
|
+
export async function fetchOperateContext(params, apiBaseUrl = "") {
|
|
4
|
+
const base = apiBaseUrl.replace(/\/+$/, "");
|
|
5
|
+
const resp = await fetch(`${base}/api/juplend-operate`, {
|
|
6
|
+
method: "POST",
|
|
7
|
+
headers: { "Content-Type": "application/json" },
|
|
8
|
+
body: JSON.stringify(params),
|
|
9
|
+
});
|
|
10
|
+
if (!resp.ok) {
|
|
11
|
+
const errData = await resp.json().catch(() => ({ error: "SDK API failed" }));
|
|
12
|
+
throw new Error(errData.error || `SDK API returned ${resp.status}`);
|
|
13
|
+
}
|
|
14
|
+
return resp.json();
|
|
15
|
+
}
|
|
16
|
+
// Deserialize SDK remaining accounts into AccountMeta[]
|
|
17
|
+
// The API returns 27 fixed entries; caller adds ATA_PROGRAM + SystemProgram, then variable remaining
|
|
18
|
+
export function deserializeRemaining(sdkResp) {
|
|
19
|
+
const fixed = sdkResp.remaining.map((a) => ({
|
|
20
|
+
pubkey: new PublicKey(a.pubkey),
|
|
21
|
+
isSigner: false,
|
|
22
|
+
isWritable: a.writable,
|
|
23
|
+
}));
|
|
24
|
+
fixed.push({ pubkey: ATA_PROGRAM_ID, isSigner: false, isWritable: false });
|
|
25
|
+
fixed.push({ pubkey: SystemProgram.programId, isSigner: false, isWritable: false });
|
|
26
|
+
const variable = sdkResp.variableRemaining.map((a) => ({
|
|
27
|
+
pubkey: new PublicKey(a.pubkey),
|
|
28
|
+
isSigner: false,
|
|
29
|
+
isWritable: a.writable,
|
|
30
|
+
}));
|
|
31
|
+
return [...fixed, ...variable];
|
|
32
|
+
}
|
|
33
|
+
// Known JupLend instruction discriminators that the deployed program supports
|
|
34
|
+
const KNOWN_JUPLEND_DISCS = new Set([
|
|
35
|
+
"160d3e8d4959b21d", // InitTick
|
|
36
|
+
"386e79a998f156b7", // InitTickIdLiquidation
|
|
37
|
+
]);
|
|
38
|
+
const JUPLEND_PROGRAM_STR = "jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi";
|
|
39
|
+
// Deserialize otherIxs (initTick, initBranch, etc.) and replace signerPda with actual payer.
|
|
40
|
+
// Filters out unrecognized JupLend instructions that cause InstructionFallbackNotFound.
|
|
41
|
+
export function deserializeOtherIxs(sdkResp, signerPda, actualPayer) {
|
|
42
|
+
const signerStr = signerPda.toBase58();
|
|
43
|
+
return sdkResp.otherIxs
|
|
44
|
+
.filter((ix) => {
|
|
45
|
+
// Keep non-JupLend instructions as-is
|
|
46
|
+
if (ix.programId !== JUPLEND_PROGRAM_STR)
|
|
47
|
+
return true;
|
|
48
|
+
// Log ALL JupLend instruction discriminators for debugging
|
|
49
|
+
const disc = Buffer.from(ix.data, "base64").subarray(0, 8).toString("hex");
|
|
50
|
+
console.log("[otherIxs] JupLend instruction disc:", disc, KNOWN_JUPLEND_DISCS.has(disc) ? "(known)" : "(UNKNOWN — filtering out)");
|
|
51
|
+
if (!KNOWN_JUPLEND_DISCS.has(disc))
|
|
52
|
+
return false;
|
|
53
|
+
return true;
|
|
54
|
+
})
|
|
55
|
+
.map((ix) => new TransactionInstruction({
|
|
56
|
+
programId: new PublicKey(ix.programId),
|
|
57
|
+
keys: ix.keys.map((k) => {
|
|
58
|
+
const isSigner = k.pubkey === signerStr;
|
|
59
|
+
return {
|
|
60
|
+
pubkey: isSigner ? actualPayer : new PublicKey(k.pubkey),
|
|
61
|
+
isSigner: isSigner ? true : k.isSigner,
|
|
62
|
+
isWritable: k.isWritable,
|
|
63
|
+
};
|
|
64
|
+
}),
|
|
65
|
+
data: Buffer.from(ix.data, "base64"),
|
|
66
|
+
}));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=sdkApi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkApi.js","sourceRoot":"","sources":["../../src/juplend/sdkApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JupLend tick ↔ debt fixed-point math (ported from the JupLend SDK).
|
|
3
|
+
* Pure BN math, browser-safe; shared by /api/juplend-position and any
|
|
4
|
+
* script that needs debt-from-tick without an RPC tick fetch.
|
|
5
|
+
*/
|
|
6
|
+
import BN from "bn.js";
|
|
7
|
+
export declare const JUPLEND_MIN_TICK = -16383;
|
|
8
|
+
export declare const JUPLEND_MAX_TICK_VALUE = 16383;
|
|
9
|
+
/**
|
|
10
|
+
* Tick ratio as an X48 fixed-point BN (scaled by 2^48).
|
|
11
|
+
* debtRaw = ratioX48 * (colRaw + 1) >> 48 + 1
|
|
12
|
+
*/
|
|
13
|
+
export declare function getRatioAtTick(tick: number): BN;
|
|
14
|
+
/**
|
|
15
|
+
* Debt (in borrow shares) implied by a position's tick and collateral shares.
|
|
16
|
+
* Returns 0 at/below MIN_TICK (no debt).
|
|
17
|
+
*/
|
|
18
|
+
export declare function debtFromTick(colRaw: BN, tick: number): BN;
|
|
19
|
+
//# sourceMappingURL=tickMath.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickMath.d.ts","sourceRoot":"","sources":["../../src/juplend/tickMath.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB,eAAO,MAAM,gBAAgB,SAAS,CAAC;AACvC,eAAO,MAAM,sBAAsB,QAAQ,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAyD/C;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE,CAIzD"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JupLend tick ↔ debt fixed-point math (ported from the JupLend SDK).
|
|
3
|
+
* Pure BN math, browser-safe; shared by /api/juplend-position and any
|
|
4
|
+
* script that needs debt-from-tick without an RPC tick fetch.
|
|
5
|
+
*/
|
|
6
|
+
import BN from "bn.js";
|
|
7
|
+
export const JUPLEND_MIN_TICK = -16383;
|
|
8
|
+
export const JUPLEND_MAX_TICK_VALUE = 16383;
|
|
9
|
+
/**
|
|
10
|
+
* Tick ratio as an X48 fixed-point BN (scaled by 2^48).
|
|
11
|
+
* debtRaw = ratioX48 * (colRaw + 1) >> 48 + 1
|
|
12
|
+
*/
|
|
13
|
+
export function getRatioAtTick(tick) {
|
|
14
|
+
if (tick < JUPLEND_MIN_TICK || tick > JUPLEND_MAX_TICK_VALUE) {
|
|
15
|
+
throw new Error(`Tick ${tick} out of range [${JUPLEND_MIN_TICK}, ${JUPLEND_MAX_TICK_VALUE}]`);
|
|
16
|
+
}
|
|
17
|
+
const FACTORS = [
|
|
18
|
+
new BN("18446744073709551616"), // FACTOR00 = 2^64
|
|
19
|
+
new BN("18419115400608638658"),
|
|
20
|
+
new BN("18391528108445969703"),
|
|
21
|
+
new BN("18336477419114433396"),
|
|
22
|
+
new BN("18226869890870665593"),
|
|
23
|
+
new BN("18009616477100071088"),
|
|
24
|
+
new BN("17582847377087825313"),
|
|
25
|
+
new BN("16759408633341240198"),
|
|
26
|
+
new BN("15226414841393184936"),
|
|
27
|
+
new BN("12568272644527235157"),
|
|
28
|
+
new BN("8563108841104354677"),
|
|
29
|
+
new BN("3975055583337633975"),
|
|
30
|
+
new BN("856577552520149366"),
|
|
31
|
+
new BN("39775317560084773"),
|
|
32
|
+
new BN("85764505686420"),
|
|
33
|
+
new BN("398745188"),
|
|
34
|
+
];
|
|
35
|
+
function mulShift64(n0, n1) {
|
|
36
|
+
const product = n0.mul(n1);
|
|
37
|
+
return product.shrn(64);
|
|
38
|
+
}
|
|
39
|
+
const absTick = Math.abs(tick);
|
|
40
|
+
let factor = FACTORS[0];
|
|
41
|
+
if (absTick & 1)
|
|
42
|
+
factor = FACTORS[1];
|
|
43
|
+
if (absTick & 2)
|
|
44
|
+
factor = mulShift64(factor, FACTORS[2]);
|
|
45
|
+
if (absTick & 4)
|
|
46
|
+
factor = mulShift64(factor, FACTORS[3]);
|
|
47
|
+
if (absTick & 8)
|
|
48
|
+
factor = mulShift64(factor, FACTORS[4]);
|
|
49
|
+
if (absTick & 16)
|
|
50
|
+
factor = mulShift64(factor, FACTORS[5]);
|
|
51
|
+
if (absTick & 32)
|
|
52
|
+
factor = mulShift64(factor, FACTORS[6]);
|
|
53
|
+
if (absTick & 64)
|
|
54
|
+
factor = mulShift64(factor, FACTORS[7]);
|
|
55
|
+
if (absTick & 128)
|
|
56
|
+
factor = mulShift64(factor, FACTORS[8]);
|
|
57
|
+
if (absTick & 256)
|
|
58
|
+
factor = mulShift64(factor, FACTORS[9]);
|
|
59
|
+
if (absTick & 512)
|
|
60
|
+
factor = mulShift64(factor, FACTORS[10]);
|
|
61
|
+
if (absTick & 1024)
|
|
62
|
+
factor = mulShift64(factor, FACTORS[11]);
|
|
63
|
+
if (absTick & 2048)
|
|
64
|
+
factor = mulShift64(factor, FACTORS[12]);
|
|
65
|
+
if (absTick & 4096)
|
|
66
|
+
factor = mulShift64(factor, FACTORS[13]);
|
|
67
|
+
if (absTick & 8192)
|
|
68
|
+
factor = mulShift64(factor, FACTORS[14]);
|
|
69
|
+
if (absTick & 16384)
|
|
70
|
+
factor = mulShift64(factor, FACTORS[15]);
|
|
71
|
+
let precision = new BN(0);
|
|
72
|
+
if (tick > 0) {
|
|
73
|
+
const maxU128 = new BN(2).pow(new BN(128)).subn(1);
|
|
74
|
+
factor = maxU128.div(factor);
|
|
75
|
+
if (!factor.mod(new BN(65536)).isZero()) {
|
|
76
|
+
precision = new BN(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return factor.shrn(16).add(precision);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Debt (in borrow shares) implied by a position's tick and collateral shares.
|
|
83
|
+
* Returns 0 at/below MIN_TICK (no debt).
|
|
84
|
+
*/
|
|
85
|
+
export function debtFromTick(colRaw, tick) {
|
|
86
|
+
if (tick <= JUPLEND_MIN_TICK)
|
|
87
|
+
return new BN(0);
|
|
88
|
+
const ratio = getRatioAtTick(tick);
|
|
89
|
+
return ratio.mul(colRaw.addn(1)).shrn(48).addn(1);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=tickMath.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickMath.js","sourceRoot":"","sources":["../../src/juplend/tickMath.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Connection, PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
export declare function buildInitTickIx(vaultId: number, tick: number, payer: PublicKey): TransactionInstruction;
|
|
3
|
+
export declare function buildInitTickIdLiquidationIx(vaultId: number, tick: number, totalIds: number, payer: PublicKey): TransactionInstruction;
|
|
4
|
+
/**
|
|
5
|
+
* Reverse-derive a tick value from its PDA. Searches outward from `startTick`
|
|
6
|
+
* (usually the position's current tick, < 50 iterations) before falling back
|
|
7
|
+
* to the full ±16383 range.
|
|
8
|
+
*/
|
|
9
|
+
export declare function tickValueFromPda(pda: PublicKey, vaultId: number, startTick?: number, maxTick?: number): number | null;
|
|
10
|
+
export interface TickAccounts {
|
|
11
|
+
currentTickPda: PublicKey;
|
|
12
|
+
finalTickPda: PublicKey;
|
|
13
|
+
currentTickIdPda: PublicKey;
|
|
14
|
+
finalTickIdPda: PublicKey;
|
|
15
|
+
initIxs: TransactionInstruction[];
|
|
16
|
+
}
|
|
17
|
+
export declare function resolveTickAccounts(connection: Connection, payer: PublicKey, currentTick: number, finalTick: number, vaultId?: number): Promise<TickAccounts>;
|
|
18
|
+
export declare function parseTickMismatch(errorMsg: string): number | null;
|
|
19
|
+
export declare function isTickError(errorMsg: string): boolean;
|
|
20
|
+
//# sourceMappingURL=tickUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickUtils.d.ts","sourceRoot":"","sources":["../../src/juplend/tickUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EAET,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AAgBzB,wBAAgB,eAAe,CAC7B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,SAAS,GACf,sBAAsB,CAiBxB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,SAAS,GACf,sBAAsB,CAqBxB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAAU,EACrB,OAAO,GAAE,MAAc,GACtB,MAAM,GAAG,IAAI,CAYf;AAED,MAAM,WAAW,YAAY;IAC3B,cAAc,EAAE,SAAS,CAAC;IAC1B,YAAY,EAAE,SAAS,CAAC;IACxB,gBAAgB,EAAE,SAAS,CAAC;IAC5B,cAAc,EAAE,SAAS,CAAC;IAC1B,OAAO,EAAE,sBAAsB,EAAE,CAAC;CACnC;AAGD,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,SAAS,EAChB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,MAAyB,GACjC,OAAO,CAAC,YAAY,CAAC,CA+BvB;AAGD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYrD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { SystemProgram, TransactionInstruction, } from "@solana/web3.js";
|
|
2
|
+
import { JUPLEND_PROGRAM, JUPLEND_VAULT_ID, deriveJuplendVaultConfigPda, } from "../constants";
|
|
3
|
+
import { deriveJuplendTickPda, deriveJuplendTickIdLiquidationPda, } from "../pdas";
|
|
4
|
+
// InitTick discriminator: [22, 13, 62, 141, 73, 89, 178, 29]
|
|
5
|
+
const INIT_TICK_DISC = Buffer.from([22, 13, 62, 141, 73, 89, 178, 29]);
|
|
6
|
+
// InitTickIdLiquidation discriminator: [221, 173, 234, 108, 69, 217, 237, 101]
|
|
7
|
+
const INIT_TICK_ID_LIQ_DISC = Buffer.from([221, 173, 234, 108, 69, 217, 237, 101]);
|
|
8
|
+
export function buildInitTickIx(vaultId, tick, payer) {
|
|
9
|
+
const tickPda = deriveJuplendTickPda(vaultId, tick);
|
|
10
|
+
const vaultConfig = deriveJuplendVaultConfigPda(vaultId);
|
|
11
|
+
const data = Buffer.alloc(14);
|
|
12
|
+
data.set(INIT_TICK_DISC, 0);
|
|
13
|
+
data.writeUInt16LE(vaultId, 8);
|
|
14
|
+
data.writeInt32LE(tick, 10);
|
|
15
|
+
return new TransactionInstruction({
|
|
16
|
+
programId: JUPLEND_PROGRAM,
|
|
17
|
+
keys: [
|
|
18
|
+
{ pubkey: payer, isSigner: true, isWritable: true },
|
|
19
|
+
{ pubkey: vaultConfig, isSigner: false, isWritable: false },
|
|
20
|
+
{ pubkey: tickPda, isSigner: false, isWritable: true },
|
|
21
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
22
|
+
],
|
|
23
|
+
data,
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export function buildInitTickIdLiquidationIx(vaultId, tick, totalIds, payer) {
|
|
27
|
+
const tickPda = deriveJuplendTickPda(vaultId, tick);
|
|
28
|
+
const tickIdPda = deriveJuplendTickIdLiquidationPda(vaultId, tick, totalIds);
|
|
29
|
+
const data = Buffer.alloc(18);
|
|
30
|
+
data.set(INIT_TICK_ID_LIQ_DISC, 0);
|
|
31
|
+
data.writeUInt16LE(vaultId, 8);
|
|
32
|
+
data.writeInt32LE(tick, 10);
|
|
33
|
+
data.writeUInt32LE(totalIds, 14);
|
|
34
|
+
// initTickIdLiquidation: [signer, tickData (existing), tickIdLiquidation (new), systemProgram]
|
|
35
|
+
// Slot 1 is tickData (NOT vaultConfig — initTick is the sibling that uses
|
|
36
|
+
// vaultConfig). Matches the production /api/juplend-operate builder.
|
|
37
|
+
return new TransactionInstruction({
|
|
38
|
+
programId: JUPLEND_PROGRAM,
|
|
39
|
+
keys: [
|
|
40
|
+
{ pubkey: payer, isSigner: true, isWritable: true },
|
|
41
|
+
{ pubkey: tickPda, isSigner: false, isWritable: false },
|
|
42
|
+
{ pubkey: tickIdPda, isSigner: false, isWritable: true },
|
|
43
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false },
|
|
44
|
+
],
|
|
45
|
+
data,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Reverse-derive a tick value from its PDA. Searches outward from `startTick`
|
|
50
|
+
* (usually the position's current tick, < 50 iterations) before falling back
|
|
51
|
+
* to the full ±16383 range.
|
|
52
|
+
*/
|
|
53
|
+
export function tickValueFromPda(pda, vaultId, startTick = 0, maxTick = 16383) {
|
|
54
|
+
for (let delta = 0; delta <= 1000; delta++) {
|
|
55
|
+
for (const tick of delta === 0 ? [startTick] : [startTick + delta, startTick - delta]) {
|
|
56
|
+
if (tick < -maxTick || tick > maxTick)
|
|
57
|
+
continue;
|
|
58
|
+
if (deriveJuplendTickPda(vaultId, tick).equals(pda))
|
|
59
|
+
return tick;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// Fallback: full range (should rarely hit this)
|
|
63
|
+
for (let tick = -maxTick; tick <= maxTick; tick++) {
|
|
64
|
+
if (deriveJuplendTickPda(vaultId, tick).equals(pda))
|
|
65
|
+
return tick;
|
|
66
|
+
}
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
// Derive tick + tickId PDAs for current and final ticks, check existence, return init instructions
|
|
70
|
+
export async function resolveTickAccounts(connection, payer, currentTick, finalTick, vaultId = JUPLEND_VAULT_ID) {
|
|
71
|
+
const currentTickPda = deriveJuplendTickPda(vaultId, currentTick);
|
|
72
|
+
const currentTickIdPda = deriveJuplendTickIdLiquidationPda(vaultId, currentTick);
|
|
73
|
+
const finalTickPda = deriveJuplendTickPda(vaultId, finalTick);
|
|
74
|
+
const finalTickIdPda = deriveJuplendTickIdLiquidationPda(vaultId, finalTick);
|
|
75
|
+
const initIxs = [];
|
|
76
|
+
const checked = new Set();
|
|
77
|
+
for (const { tickPda, tickIdPda, tick } of [
|
|
78
|
+
{ tickPda: currentTickPda, tickIdPda: currentTickIdPda, tick: currentTick },
|
|
79
|
+
{ tickPda: finalTickPda, tickIdPda: finalTickIdPda, tick: finalTick },
|
|
80
|
+
]) {
|
|
81
|
+
const key = tickPda.toBase58();
|
|
82
|
+
if (checked.has(key))
|
|
83
|
+
continue;
|
|
84
|
+
checked.add(key);
|
|
85
|
+
const [tickInfo, tickIdInfo] = await Promise.all([
|
|
86
|
+
connection.getAccountInfo(tickPda).catch(() => null),
|
|
87
|
+
connection.getAccountInfo(tickIdPda).catch(() => null),
|
|
88
|
+
]);
|
|
89
|
+
if (!tickInfo) {
|
|
90
|
+
initIxs.push(buildInitTickIx(vaultId, tick, payer));
|
|
91
|
+
}
|
|
92
|
+
if (!tickIdInfo) {
|
|
93
|
+
initIxs.push(buildInitTickIdLiquidationIx(vaultId, tick, 0, payer));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { currentTickPda, finalTickPda, currentTickIdPda, finalTickIdPda, initIxs };
|
|
97
|
+
}
|
|
98
|
+
// Parse expected tick from VaultTickMismatch error
|
|
99
|
+
export function parseTickMismatch(errorMsg) {
|
|
100
|
+
const match = errorMsg.match(/Tick mismatch: expected (-?\d+) but got (-?\d+)/);
|
|
101
|
+
return match ? parseInt(match[1]) : null;
|
|
102
|
+
}
|
|
103
|
+
export function isTickError(errorMsg) {
|
|
104
|
+
return (errorMsg.includes("VaultTickMismatch") ||
|
|
105
|
+
errorMsg.includes("Tick mismatch") ||
|
|
106
|
+
errorMsg.includes("VaultInvalidTick") ||
|
|
107
|
+
errorMsg.includes("VAULT_INVALID_TICK") ||
|
|
108
|
+
errorMsg.includes("VaultTickHasDebtNotFound") ||
|
|
109
|
+
errorMsg.includes("VAULT_TICK_HAS_DEBT_NOT_FOUND") ||
|
|
110
|
+
errorMsg.includes("0x1792") || // VaultTickMismatch
|
|
111
|
+
errorMsg.includes("0x179a") || // VaultInvalidTick
|
|
112
|
+
errorMsg.includes("0x1791") // VaultTickHasDebtNotFound
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=tickUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tickUtils.js","sourceRoot":"","sources":["../../src/juplend/tickUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JupLend VaultConfig byte-layout knowledge, centralized. Browser-safe.
|
|
3
|
+
* (The LTV/liquidation-threshold fields at the head of the same struct are
|
|
4
|
+
* decoded by rates/borrowRates.getJuplendCollateralLtvInfo.)
|
|
5
|
+
*/
|
|
6
|
+
import { PublicKey } from "@solana/web3.js";
|
|
7
|
+
import BN from "bn.js";
|
|
8
|
+
/**
|
|
9
|
+
* VaultConfig is bytemuck-packed; `oracle` lives 26 bytes after the 8-byte
|
|
10
|
+
* Anchor discriminator (sum of the preceding 9× u16 / i16 fields).
|
|
11
|
+
*/
|
|
12
|
+
export declare const JUPLEND_VAULT_CONFIG_ORACLE_OFFSET: number;
|
|
13
|
+
/** Oracle pubkey configured on a JupLend vault_config account. */
|
|
14
|
+
export declare function parseVaultConfigOracle(vaultConfigData: Buffer): PublicKey;
|
|
15
|
+
/** Supply token decimals per vault (determines exchange rate divisor). */
|
|
16
|
+
export declare const SUPPLY_DECIMALS_BY_VAULT: Record<number, number>;
|
|
17
|
+
/**
|
|
18
|
+
* Convert JupLend shares to native token base units. Exchange prices are
|
|
19
|
+
* scaled by 10^12; the divisor folds in the token-decimal difference vs SOL:
|
|
20
|
+
* SOL (9 decimals): 10^(12 + 0) = 10^12
|
|
21
|
+
* cbBTC (8 decimals): 10^(12 + 1) = 10^13
|
|
22
|
+
* USDC (6 decimals): 10^(12 + 3) = 10^15
|
|
23
|
+
*/
|
|
24
|
+
export declare function sharesToBaseUnits(shares: BN, exchangePrice: BN, tokenDecimals: number): BN;
|
|
25
|
+
//# sourceMappingURL=vaultConfigParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultConfigParser.d.ts","sourceRoot":"","sources":["../../src/juplend/vaultConfigParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB;;;GAGG;AACH,eAAO,MAAM,kCAAkC,QAAY,CAAC;AAE5D,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,eAAe,EAAE,MAAM,GAAG,SAAS,CAUzE;AAED,0EAA0E;AAC1E,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAG3D,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,EAAE,CAI1F"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JupLend VaultConfig byte-layout knowledge, centralized. Browser-safe.
|
|
3
|
+
* (The LTV/liquidation-threshold fields at the head of the same struct are
|
|
4
|
+
* decoded by rates/borrowRates.getJuplendCollateralLtvInfo.)
|
|
5
|
+
*/
|
|
6
|
+
import { PublicKey } from "@solana/web3.js";
|
|
7
|
+
import BN from "bn.js";
|
|
8
|
+
/**
|
|
9
|
+
* VaultConfig is bytemuck-packed; `oracle` lives 26 bytes after the 8-byte
|
|
10
|
+
* Anchor discriminator (sum of the preceding 9× u16 / i16 fields).
|
|
11
|
+
*/
|
|
12
|
+
export const JUPLEND_VAULT_CONFIG_ORACLE_OFFSET = 8 + 2 * 9;
|
|
13
|
+
/** Oracle pubkey configured on a JupLend vault_config account. */
|
|
14
|
+
export function parseVaultConfigOracle(vaultConfigData) {
|
|
15
|
+
if (vaultConfigData.length < JUPLEND_VAULT_CONFIG_ORACLE_OFFSET + 32) {
|
|
16
|
+
throw new Error("vault_config account too short");
|
|
17
|
+
}
|
|
18
|
+
return new PublicKey(vaultConfigData.subarray(JUPLEND_VAULT_CONFIG_ORACLE_OFFSET, JUPLEND_VAULT_CONFIG_ORACLE_OFFSET + 32));
|
|
19
|
+
}
|
|
20
|
+
/** Supply token decimals per vault (determines exchange rate divisor). */
|
|
21
|
+
export const SUPPLY_DECIMALS_BY_VAULT = {
|
|
22
|
+
1: 9, // SOL (wSOL) — 9 decimals
|
|
23
|
+
11: 8, // cbBTC — 8 decimals
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Convert JupLend shares to native token base units. Exchange prices are
|
|
27
|
+
* scaled by 10^12; the divisor folds in the token-decimal difference vs SOL:
|
|
28
|
+
* SOL (9 decimals): 10^(12 + 0) = 10^12
|
|
29
|
+
* cbBTC (8 decimals): 10^(12 + 1) = 10^13
|
|
30
|
+
* USDC (6 decimals): 10^(12 + 3) = 10^15
|
|
31
|
+
*/
|
|
32
|
+
export function sharesToBaseUnits(shares, exchangePrice, tokenDecimals) {
|
|
33
|
+
if (!exchangePrice.gt(new BN(0)))
|
|
34
|
+
return new BN(0);
|
|
35
|
+
const divisor = new BN(10).pow(new BN(12 + (9 - tokenDecimals)));
|
|
36
|
+
return shares.mul(exchangePrice).div(divisor);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=vaultConfigParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vaultConfigParser.js","sourceRoot":"","sources":["../../src/juplend/vaultConfigParser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvB;;;GAGG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5D,kEAAkE;AAClE,MAAM,UAAU,sBAAsB,CAAC,eAAuB;IAC5D,IAAI,eAAe,CAAC,MAAM,GAAG,kCAAkC,GAAG,EAAE,EAAE,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,IAAI,SAAS,CAClB,eAAe,CAAC,QAAQ,CACtB,kCAAkC,EAClC,kCAAkC,GAAG,EAAE,CACxC,CACF,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,CAAC,EAAE,CAAC,EAAG,0BAA0B;IACjC,EAAE,EAAE,CAAC,EAAE,qBAAqB;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAU,EAAE,aAAiB,EAAE,aAAqB;IACpF,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IACjE,OAAO,MAAM,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { PublicKey, AccountMeta } from "@solana/web3.js";
|
|
2
|
+
import { KaminoMarketConfig } from "../marketConfig";
|
|
3
|
+
interface UserPdas {
|
|
4
|
+
userStatePda: PublicKey;
|
|
5
|
+
allowlistEntryPda: PublicKey;
|
|
6
|
+
obligationPda: PublicKey;
|
|
7
|
+
userMetadataPda: PublicKey;
|
|
8
|
+
obligationFarmUserStatePda: PublicKey;
|
|
9
|
+
obligationFarmDebtUserStatePda: PublicKey;
|
|
10
|
+
userCollateralAta: PublicKey;
|
|
11
|
+
userUsdcAta: PublicKey;
|
|
12
|
+
pdaCollateralAta: PublicKey;
|
|
13
|
+
pdaUsdcAta: PublicKey;
|
|
14
|
+
pdaSharesAta: PublicKey;
|
|
15
|
+
}
|
|
16
|
+
export declare function getInitializeUserAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig, origin?: number): {
|
|
17
|
+
owner: PublicKey;
|
|
18
|
+
userState: PublicKey;
|
|
19
|
+
collateralMint: PublicKey;
|
|
20
|
+
systemProgram: PublicKey;
|
|
21
|
+
programConfig: PublicKey;
|
|
22
|
+
allowlistEntry: PublicKey;
|
|
23
|
+
depositConfig: PublicKey;
|
|
24
|
+
userOrigin: PublicKey;
|
|
25
|
+
originConfig: PublicKey;
|
|
26
|
+
};
|
|
27
|
+
export declare function getKaminoInitializeUserLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig): AccountMeta[];
|
|
28
|
+
export declare function getDepositAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig): {
|
|
29
|
+
owner: PublicKey;
|
|
30
|
+
userState: PublicKey;
|
|
31
|
+
userSourceLiquidity: PublicKey;
|
|
32
|
+
pdaSourceLiquidity: PublicKey;
|
|
33
|
+
supplyTokenMint: PublicKey;
|
|
34
|
+
tokenProgram: PublicKey;
|
|
35
|
+
associatedTokenProgram: PublicKey;
|
|
36
|
+
systemProgram: PublicKey;
|
|
37
|
+
programConfig: PublicKey;
|
|
38
|
+
allowlistEntry: PublicKey;
|
|
39
|
+
collateralMint: PublicKey;
|
|
40
|
+
};
|
|
41
|
+
export declare function getKaminoDepositLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig): AccountMeta[];
|
|
42
|
+
export declare function getBorrowAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig, hasVaultShares: boolean, vaultAccounts?: {
|
|
43
|
+
vault: PublicKey;
|
|
44
|
+
sharesMint: PublicKey;
|
|
45
|
+
sharesAta: PublicKey;
|
|
46
|
+
}): {
|
|
47
|
+
owner: PublicKey;
|
|
48
|
+
userState: PublicKey;
|
|
49
|
+
collateralMint: PublicKey;
|
|
50
|
+
pdaUsdcAta: PublicKey;
|
|
51
|
+
userUsdcAta: PublicKey;
|
|
52
|
+
tokenProgram: PublicKey;
|
|
53
|
+
systemProgram: PublicKey;
|
|
54
|
+
vault: PublicKey;
|
|
55
|
+
sharesMint: PublicKey;
|
|
56
|
+
pdaSharesAta: PublicKey;
|
|
57
|
+
sharesTokenProgram: PublicKey;
|
|
58
|
+
usdcMint: PublicKey;
|
|
59
|
+
programConfig: PublicKey;
|
|
60
|
+
allowlistEntry: PublicKey;
|
|
61
|
+
};
|
|
62
|
+
export declare function getKaminoBorrowLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig, hasVaultShares: boolean): AccountMeta[];
|
|
63
|
+
export declare function getRepayAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig): {
|
|
64
|
+
owner: PublicKey;
|
|
65
|
+
userState: PublicKey;
|
|
66
|
+
userUsdcAta: PublicKey;
|
|
67
|
+
pdaUsdcAta: PublicKey;
|
|
68
|
+
tokenProgram: PublicKey;
|
|
69
|
+
programConfig: PublicKey;
|
|
70
|
+
allowlistEntry: PublicKey;
|
|
71
|
+
collateralMint: PublicKey;
|
|
72
|
+
};
|
|
73
|
+
export declare function getKaminoRepayLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig): AccountMeta[];
|
|
74
|
+
export declare function getWithdrawAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig): {
|
|
75
|
+
owner: PublicKey;
|
|
76
|
+
userState: PublicKey;
|
|
77
|
+
pdaDestinationAta: PublicKey;
|
|
78
|
+
userDestinationAta: PublicKey;
|
|
79
|
+
tokenProgram: PublicKey;
|
|
80
|
+
programConfig: PublicKey;
|
|
81
|
+
allowlistEntry: PublicKey;
|
|
82
|
+
collateralMint: PublicKey;
|
|
83
|
+
};
|
|
84
|
+
export declare function getKaminoWithdrawLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig): AccountMeta[];
|
|
85
|
+
export declare function getPrepareWithdrawAccounts(owner: PublicKey, pdas: UserPdas, mc: KaminoMarketConfig, vaultAccounts: {
|
|
86
|
+
vault: PublicKey;
|
|
87
|
+
sharesMint: PublicKey;
|
|
88
|
+
sharesAta: PublicKey;
|
|
89
|
+
}): {
|
|
90
|
+
owner: PublicKey;
|
|
91
|
+
userState: PublicKey;
|
|
92
|
+
collateralMint: PublicKey;
|
|
93
|
+
programConfig: PublicKey;
|
|
94
|
+
allowlistEntry: PublicKey;
|
|
95
|
+
pdaUsdcAta: PublicKey;
|
|
96
|
+
vault: PublicKey;
|
|
97
|
+
sharesMint: PublicKey;
|
|
98
|
+
pdaSharesAta: PublicKey;
|
|
99
|
+
sharesTokenProgram: PublicKey;
|
|
100
|
+
usdcMint: PublicKey;
|
|
101
|
+
tokenProgram: PublicKey;
|
|
102
|
+
};
|
|
103
|
+
export declare function getKaminoPrepareWithdrawLenderAccounts(pdas: UserPdas, mc: KaminoMarketConfig): AccountMeta[];
|
|
104
|
+
export declare function fixFarmWritable(ixKeys: {
|
|
105
|
+
pubkey: PublicKey;
|
|
106
|
+
isSigner: boolean;
|
|
107
|
+
isWritable: boolean;
|
|
108
|
+
}[], farmUserState: PublicKey, farmState: PublicKey | null): void;
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=accountResolvers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountResolvers.d.ts","sourceRoot":"","sources":["../../src/kamino/accountResolvers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAiE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAUxH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAErD,UAAU,QAAQ;IAChB,YAAY,EAAE,SAAS,CAAC;IACxB,iBAAiB,EAAE,SAAS,CAAC;IAC7B,aAAa,EAAE,SAAS,CAAC;IACzB,eAAe,EAAE,SAAS,CAAC;IAC3B,0BAA0B,EAAE,SAAS,CAAC;IACtC,8BAA8B,EAAE,SAAS,CAAC;IAC1C,iBAAiB,EAAE,SAAS,CAAC;IAC7B,WAAW,EAAE,SAAS,CAAC;IACvB,gBAAgB,EAAE,SAAS,CAAC;IAC5B,UAAU,EAAE,SAAS,CAAC;IACtB,YAAY,EAAE,SAAS,CAAC;CACzB;AAID,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB,EAAE,MAAM,GAAE,MAAU;;;;;;;;;;EAgBrH;AAGD,wBAAgB,qCAAqC,CACnD,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,GACrB,WAAW,EAAE,CAUf;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB;;;;;;;;;;;;EAc1F;AAGD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,GACrB,WAAW,EAAE,CAmBf;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,EACtB,cAAc,EAAE,OAAO,EACvB,aAAa,CAAC,EAAE;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;;;;;;;;;;;;;;;EAsBF;AAGD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,EACtB,cAAc,EAAE,OAAO,GACtB,WAAW,EAAE,CAmBf;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB;;;;;;;;;EAWxF;AAGD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,GACrB,WAAW,EAAE,CAef;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,kBAAkB;;;;;;;;;EAW3F;AAGD,wBAAgB,+BAA+B,CAC7C,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,GACrB,WAAW,EAAE,CAmBf;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,EACtB,aAAa,EAAE;IACb,KAAK,EAAE,SAAS,CAAC;IACjB,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB;;;;;;;;;;;;;EAiBF;AAGD,wBAAgB,sCAAsC,CACpD,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,kBAAkB,GACrB,WAAW,EAAE,CAgBf;AAGD,wBAAgB,eAAe,CAC7B,MAAM,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,EAAE,EACvE,aAAa,EAAE,SAAS,EACxB,SAAS,EAAE,SAAS,GAAG,IAAI,QAU5B"}
|