@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,220 @@
|
|
|
1
|
+
import { PublicKey, SystemProgram, SYSVAR_INSTRUCTIONS_PUBKEY, SYSVAR_RENT_PUBKEY } from "@solana/web3.js";
|
|
2
|
+
import { TOKEN_PROGRAM_ID, getAssociatedTokenAddressSync } from "@solana/spl-token";
|
|
3
|
+
import { KAMINO_LENDING_PROGRAM_ID, FARMS_PROGRAM, ATA_PROGRAM_ID, USDC_MINT, SCOPE_PRICES, } from "../constants";
|
|
4
|
+
import { deriveDepositConfigPda, deriveOriginConfigPda, deriveProgramConfigPda, deriveUserOriginPda } from "../pdas";
|
|
5
|
+
const [programConfigPda] = deriveProgramConfigPda();
|
|
6
|
+
export function getInitializeUserAccounts(owner, pdas, mc, origin = 0) {
|
|
7
|
+
return {
|
|
8
|
+
owner,
|
|
9
|
+
userState: pdas.userStatePda,
|
|
10
|
+
collateralMint: mc.collateralMint,
|
|
11
|
+
systemProgram: SystemProgram.programId,
|
|
12
|
+
programConfig: programConfigPda,
|
|
13
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
14
|
+
depositConfig: deriveDepositConfigPda(mc.collateralMint)[0],
|
|
15
|
+
// Per-wallet origin registration; created on the wallet's first init,
|
|
16
|
+
// later inits keep the stored origin (the origin arg is then ignored).
|
|
17
|
+
userOrigin: deriveUserOriginPda(owner)[0],
|
|
18
|
+
// Seeded by the `origin` instruction arg — always pass explicitly rather
|
|
19
|
+
// than relying on Anchor's IDL auto-resolution.
|
|
20
|
+
originConfig: deriveOriginConfigPda(origin)[0],
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/// Returns 7 Kamino initialize_user lender accounts as AccountMeta[] for remaining_accounts.
|
|
24
|
+
export function getKaminoInitializeUserLenderAccounts(pdas, mc) {
|
|
25
|
+
return [
|
|
26
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
27
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
28
|
+
{ pubkey: PublicKey.default, isSigner: false, isWritable: false }, // seed1
|
|
29
|
+
{ pubkey: PublicKey.default, isSigner: false, isWritable: false }, // seed2
|
|
30
|
+
{ pubkey: pdas.userMetadataPda, isSigner: false, isWritable: true },
|
|
31
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
32
|
+
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
|
33
|
+
];
|
|
34
|
+
}
|
|
35
|
+
export function getDepositAccounts(owner, pdas, mc) {
|
|
36
|
+
return {
|
|
37
|
+
owner,
|
|
38
|
+
userState: pdas.userStatePda,
|
|
39
|
+
userSourceLiquidity: pdas.userCollateralAta,
|
|
40
|
+
pdaSourceLiquidity: pdas.pdaCollateralAta,
|
|
41
|
+
supplyTokenMint: mc.collateralMint,
|
|
42
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
43
|
+
associatedTokenProgram: ATA_PROGRAM_ID,
|
|
44
|
+
systemProgram: SystemProgram.programId,
|
|
45
|
+
programConfig: programConfigPda,
|
|
46
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
47
|
+
collateralMint: mc.collateralMint,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/// Returns 15 Kamino deposit lender accounts as AccountMeta[] for remaining_accounts.
|
|
51
|
+
export function getKaminoDepositLenderAccounts(pdas, mc) {
|
|
52
|
+
const hasFarms = !!mc.collateralFarmState;
|
|
53
|
+
return [
|
|
54
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
55
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
56
|
+
{ pubkey: mc.marketAuthority, isSigner: false, isWritable: false },
|
|
57
|
+
{ pubkey: mc.collateralReserve, isSigner: false, isWritable: true },
|
|
58
|
+
{ pubkey: mc.collateralLiquiditySupply, isSigner: false, isWritable: true },
|
|
59
|
+
{ pubkey: mc.collateralCTokenMint, isSigner: false, isWritable: true },
|
|
60
|
+
{ pubkey: mc.collateralCTokenSupply, isSigner: false, isWritable: true },
|
|
61
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // placeholder_user_destination_collateral
|
|
62
|
+
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // collateral_token_program
|
|
63
|
+
{ pubkey: pdas.obligationFarmUserStatePda, isSigner: false, isWritable: hasFarms },
|
|
64
|
+
{ pubkey: mc.collateralFarmState ?? KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: hasFarms },
|
|
65
|
+
{ pubkey: FARMS_PROGRAM, isSigner: false, isWritable: false },
|
|
66
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
67
|
+
{ pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
|
|
68
|
+
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
|
69
|
+
];
|
|
70
|
+
}
|
|
71
|
+
export function getBorrowAccounts(owner, pdas, mc, hasVaultShares, vaultAccounts) {
|
|
72
|
+
const va = vaultAccounts;
|
|
73
|
+
// Canonical ATA of the placeholder shares mint (the wallet pubkey), so the
|
|
74
|
+
// program's pda_shares_ata == ATA(user_state, shares_mint) check holds when no vault is used.
|
|
75
|
+
const placeholderSharesAta = getAssociatedTokenAddressSync(owner, pdas.userStatePda, true);
|
|
76
|
+
return {
|
|
77
|
+
owner,
|
|
78
|
+
userState: pdas.userStatePda,
|
|
79
|
+
collateralMint: mc.collateralMint,
|
|
80
|
+
pdaUsdcAta: pdas.pdaUsdcAta,
|
|
81
|
+
userUsdcAta: pdas.userUsdcAta,
|
|
82
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
83
|
+
systemProgram: SystemProgram.programId,
|
|
84
|
+
vault: hasVaultShares && va ? va.vault : owner,
|
|
85
|
+
sharesMint: hasVaultShares && va ? va.sharesMint : owner,
|
|
86
|
+
pdaSharesAta: hasVaultShares && va ? va.sharesAta : placeholderSharesAta,
|
|
87
|
+
sharesTokenProgram: hasVaultShares ? TOKEN_PROGRAM_ID : SystemProgram.programId,
|
|
88
|
+
usdcMint: USDC_MINT,
|
|
89
|
+
programConfig: programConfigPda,
|
|
90
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/// Returns 15 Kamino lender accounts as AccountMeta[] for remaining_accounts.
|
|
94
|
+
export function getKaminoBorrowLenderAccounts(pdas, mc, hasVaultShares) {
|
|
95
|
+
const hasFarms = !!mc.usdcReserveFarmDebt;
|
|
96
|
+
return [
|
|
97
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
98
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
99
|
+
{ pubkey: mc.marketAuthority, isSigner: false, isWritable: false },
|
|
100
|
+
{ pubkey: mc.usdcReserve, isSigner: false, isWritable: true },
|
|
101
|
+
{ pubkey: mc.usdcLiquiditySupply, isSigner: false, isWritable: true },
|
|
102
|
+
{ pubkey: mc.usdcFeeVault, isSigner: false, isWritable: true },
|
|
103
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false }, // referrer_token_state
|
|
104
|
+
{ pubkey: pdas.obligationFarmDebtUserStatePda, isSigner: false, isWritable: hasFarms },
|
|
105
|
+
{ pubkey: mc.usdcReserveFarmDebt ?? KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: hasFarms },
|
|
106
|
+
{ pubkey: FARMS_PROGRAM, isSigner: false, isWritable: false },
|
|
107
|
+
{ pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
|
|
108
|
+
{ pubkey: hasVaultShares ? SCOPE_PRICES : SystemProgram.programId, isSigner: false, isWritable: false },
|
|
109
|
+
{ pubkey: mc.collateralReserve, isSigner: false, isWritable: true },
|
|
110
|
+
{ pubkey: SYSVAR_RENT_PUBKEY, isSigner: false, isWritable: false },
|
|
111
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false }, // kamino_program
|
|
112
|
+
];
|
|
113
|
+
}
|
|
114
|
+
export function getRepayAccounts(owner, pdas, mc) {
|
|
115
|
+
return {
|
|
116
|
+
owner,
|
|
117
|
+
userState: pdas.userStatePda,
|
|
118
|
+
userUsdcAta: pdas.userUsdcAta,
|
|
119
|
+
pdaUsdcAta: pdas.pdaUsdcAta,
|
|
120
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
121
|
+
programConfig: programConfigPda,
|
|
122
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
123
|
+
collateralMint: mc.collateralMint,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/// Returns 11 Kamino repay lender accounts as AccountMeta[] for remaining_accounts.
|
|
127
|
+
export function getKaminoRepayLenderAccounts(pdas, mc) {
|
|
128
|
+
const hasFarms = !!mc.usdcReserveFarmDebt;
|
|
129
|
+
return [
|
|
130
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
131
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
132
|
+
{ pubkey: mc.marketAuthority, isSigner: false, isWritable: false },
|
|
133
|
+
{ pubkey: mc.usdcReserve, isSigner: false, isWritable: true },
|
|
134
|
+
{ pubkey: USDC_MINT, isSigner: false, isWritable: false },
|
|
135
|
+
{ pubkey: mc.usdcLiquiditySupply, isSigner: false, isWritable: true },
|
|
136
|
+
{ pubkey: pdas.obligationFarmDebtUserStatePda, isSigner: false, isWritable: hasFarms },
|
|
137
|
+
{ pubkey: mc.usdcReserveFarmDebt ?? KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: hasFarms },
|
|
138
|
+
{ pubkey: FARMS_PROGRAM, isSigner: false, isWritable: false },
|
|
139
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
140
|
+
{ pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
export function getWithdrawAccounts(owner, pdas, mc) {
|
|
144
|
+
return {
|
|
145
|
+
owner,
|
|
146
|
+
userState: pdas.userStatePda,
|
|
147
|
+
pdaDestinationAta: pdas.pdaCollateralAta,
|
|
148
|
+
userDestinationAta: pdas.userCollateralAta,
|
|
149
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
150
|
+
programConfig: programConfigPda,
|
|
151
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
152
|
+
collateralMint: mc.collateralMint,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/// Returns 15 Kamino withdraw lender accounts as AccountMeta[] for remaining_accounts.
|
|
156
|
+
export function getKaminoWithdrawLenderAccounts(pdas, mc) {
|
|
157
|
+
const hasFarms = !!mc.collateralFarmState;
|
|
158
|
+
return [
|
|
159
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
160
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
161
|
+
{ pubkey: mc.marketAuthority, isSigner: false, isWritable: false },
|
|
162
|
+
{ pubkey: mc.collateralReserve, isSigner: false, isWritable: true },
|
|
163
|
+
{ pubkey: mc.collateralMint, isSigner: false, isWritable: false },
|
|
164
|
+
{ pubkey: mc.collateralCTokenSupply, isSigner: false, isWritable: true },
|
|
165
|
+
{ pubkey: mc.collateralCTokenMint, isSigner: false, isWritable: true },
|
|
166
|
+
{ pubkey: mc.collateralLiquiditySupply, isSigner: false, isWritable: true },
|
|
167
|
+
{ pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // placeholder_user_destination_collateral
|
|
168
|
+
{ pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // collateral_token_program
|
|
169
|
+
{ pubkey: pdas.obligationFarmUserStatePda, isSigner: false, isWritable: hasFarms },
|
|
170
|
+
{ pubkey: mc.collateralFarmState ?? KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: hasFarms },
|
|
171
|
+
{ pubkey: FARMS_PROGRAM, isSigner: false, isWritable: false },
|
|
172
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
173
|
+
{ pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
export function getPrepareWithdrawAccounts(owner, pdas, mc, vaultAccounts) {
|
|
177
|
+
const va = vaultAccounts;
|
|
178
|
+
return {
|
|
179
|
+
owner,
|
|
180
|
+
userState: pdas.userStatePda,
|
|
181
|
+
collateralMint: mc.collateralMint,
|
|
182
|
+
programConfig: programConfigPda,
|
|
183
|
+
allowlistEntry: pdas.allowlistEntryPda,
|
|
184
|
+
pdaUsdcAta: pdas.pdaUsdcAta,
|
|
185
|
+
vault: va.vault,
|
|
186
|
+
sharesMint: va.sharesMint,
|
|
187
|
+
pdaSharesAta: va.sharesAta,
|
|
188
|
+
sharesTokenProgram: TOKEN_PROGRAM_ID,
|
|
189
|
+
usdcMint: USDC_MINT,
|
|
190
|
+
tokenProgram: TOKEN_PROGRAM_ID,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
/// Returns 12 Kamino prepare_withdraw lender accounts as AccountMeta[] for remaining_accounts.
|
|
194
|
+
export function getKaminoPrepareWithdrawLenderAccounts(pdas, mc) {
|
|
195
|
+
const hasFarms = !!mc.usdcReserveFarmDebt;
|
|
196
|
+
return [
|
|
197
|
+
{ pubkey: pdas.obligationPda, isSigner: false, isWritable: true },
|
|
198
|
+
{ pubkey: mc.market, isSigner: false, isWritable: false },
|
|
199
|
+
{ pubkey: mc.marketAuthority, isSigner: false, isWritable: false },
|
|
200
|
+
{ pubkey: mc.usdcReserve, isSigner: false, isWritable: true },
|
|
201
|
+
{ pubkey: mc.usdcLiquiditySupply, isSigner: false, isWritable: true },
|
|
202
|
+
{ pubkey: pdas.obligationFarmDebtUserStatePda, isSigner: false, isWritable: hasFarms },
|
|
203
|
+
{ pubkey: mc.usdcReserveFarmDebt ?? KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: hasFarms },
|
|
204
|
+
{ pubkey: FARMS_PROGRAM, isSigner: false, isWritable: false },
|
|
205
|
+
{ pubkey: SCOPE_PRICES, isSigner: false, isWritable: false },
|
|
206
|
+
{ pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
|
|
207
|
+
{ pubkey: mc.collateralReserve, isSigner: false, isWritable: true },
|
|
208
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false }, // kamino_program
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
// Fix farm accounts to be writable when they are real addresses
|
|
212
|
+
export function fixFarmWritable(ixKeys, farmUserState, farmState) {
|
|
213
|
+
for (const key of ixKeys) {
|
|
214
|
+
if (key.pubkey.equals(farmUserState) ||
|
|
215
|
+
(farmState && key.pubkey.equals(farmState))) {
|
|
216
|
+
key.isWritable = true;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=accountResolvers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accountResolvers.js","sourceRoot":"","sources":["../../src/kamino/accountResolvers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function parseObligationDebt(data: Buffer): number;
|
|
2
|
+
export declare function parseObligationCTokens(data: Buffer): number;
|
|
3
|
+
/**
|
|
4
|
+
* Convert cToken amount to underlying token amount using reserve exchange rate.
|
|
5
|
+
* underlying = cTokens * (available + borrowed_sf / 2^60) / cTokenSupply
|
|
6
|
+
*/
|
|
7
|
+
export declare function cTokensToUnderlying(cTokens: number, reserveData: Buffer): number;
|
|
8
|
+
/**
|
|
9
|
+
* Convert underlying token amount to cToken amount using reserve exchange rate.
|
|
10
|
+
* cTokens = underlying * cTokenSupply / totalLiquidity
|
|
11
|
+
*/
|
|
12
|
+
export declare function underlyingToCTokens(underlying: number, reserveData: Buffer): number;
|
|
13
|
+
//# sourceMappingURL=obligationParser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obligationParser.d.ts","sourceRoot":"","sources":["../../src/kamino/obligationParser.ts"],"names":[],"mappings":"AAaA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAmBxD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB3D;AAWD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyBhF;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAyBnF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { PublicKey } from "@solana/web3.js";
|
|
2
|
+
import BN from "bn.js";
|
|
3
|
+
import { BORROWS_OFFSET, BORROW_ENTRY_SIZE, BORROWED_AMOUNT_SF_OFFSET } from "../constants";
|
|
4
|
+
const FRACTION_SCALE = new BN(2).pow(new BN(60));
|
|
5
|
+
// Deposits in obligation: offset 96, each entry 136 bytes, depositedAmount at +32 (u64 LE)
|
|
6
|
+
// Layout: 8 disc + 8 tag + 16 lastUpdate + 32 lendingMarket + 32 owner = 96
|
|
7
|
+
// Entry: 32 depositReserve + 8 depositedAmount + 16 marketValueSf + 8 borrowedAgainst + 72 padding = 136
|
|
8
|
+
const DEPOSITS_OFFSET = 96;
|
|
9
|
+
const DEPOSIT_ENTRY_SIZE = 136;
|
|
10
|
+
const DEPOSITED_AMOUNT_OFFSET = 32;
|
|
11
|
+
export function parseObligationDebt(data) {
|
|
12
|
+
let totalBorrowed = new BN(0);
|
|
13
|
+
for (let i = 0; i < 5; i++) {
|
|
14
|
+
const entryOffset = BORROWS_OFFSET + i * BORROW_ENTRY_SIZE;
|
|
15
|
+
if (entryOffset + 32 > data.length)
|
|
16
|
+
break;
|
|
17
|
+
const reserveKey = new PublicKey(data.slice(entryOffset, entryOffset + 32));
|
|
18
|
+
if (reserveKey.equals(PublicKey.default))
|
|
19
|
+
continue;
|
|
20
|
+
const sfOffset = entryOffset + BORROWED_AMOUNT_SF_OFFSET;
|
|
21
|
+
if (sfOffset + 16 > data.length)
|
|
22
|
+
continue;
|
|
23
|
+
const borrowedAmountSf = new BN(data.slice(sfOffset, sfOffset + 16), "le");
|
|
24
|
+
const borrowedAmount = borrowedAmountSf.div(FRACTION_SCALE);
|
|
25
|
+
totalBorrowed = totalBorrowed.add(borrowedAmount);
|
|
26
|
+
}
|
|
27
|
+
return totalBorrowed.toNumber();
|
|
28
|
+
}
|
|
29
|
+
export function parseObligationCTokens(data) {
|
|
30
|
+
let totalCTokens = new BN(0);
|
|
31
|
+
for (let i = 0; i < 8; i++) {
|
|
32
|
+
const entryOffset = DEPOSITS_OFFSET + i * DEPOSIT_ENTRY_SIZE;
|
|
33
|
+
if (entryOffset + 32 > data.length)
|
|
34
|
+
break;
|
|
35
|
+
const reserveKey = new PublicKey(data.slice(entryOffset, entryOffset + 32));
|
|
36
|
+
if (reserveKey.equals(PublicKey.default))
|
|
37
|
+
continue;
|
|
38
|
+
const amtOffset = entryOffset + DEPOSITED_AMOUNT_OFFSET;
|
|
39
|
+
if (amtOffset + 8 > data.length)
|
|
40
|
+
continue;
|
|
41
|
+
const depositedAmount = new BN(data.slice(amtOffset, amtOffset + 8), "le");
|
|
42
|
+
totalCTokens = totalCTokens.add(depositedAmount);
|
|
43
|
+
}
|
|
44
|
+
return totalCTokens.toNumber();
|
|
45
|
+
}
|
|
46
|
+
// Reserve layout offsets (traced from klend-sdk borsh struct definitions).
|
|
47
|
+
// 8 disc + 8 version + 16 lastUpdate + 32 lendingMarket + 32 farmCollateral + 32 farmDebt = 128
|
|
48
|
+
// ReserveLiquidity at 128: 32 mint + 32 supplyVault + 32 feeVault = 96 bytes before availableAmount
|
|
49
|
+
const RESERVE_AVAILABLE_AMOUNT_OFFSET = 224; // u64 LE (128 + 96)
|
|
50
|
+
const RESERVE_BORROWED_AMOUNT_SF_OFFSET = 232; // u128 LE (128 + 96 + 8)
|
|
51
|
+
// ReserveCollateral starts at 2560 (128 + 1232 liquidity + 1200 liquidityPadding)
|
|
52
|
+
// mintPubkey: 32 bytes, then mintTotalSupply
|
|
53
|
+
const RESERVE_CTOKENS_TOTAL_SUPPLY_OFFSET = 2592; // u64 LE (2560 + 32)
|
|
54
|
+
/**
|
|
55
|
+
* Convert cToken amount to underlying token amount using reserve exchange rate.
|
|
56
|
+
* underlying = cTokens * (available + borrowed_sf / 2^60) / cTokenSupply
|
|
57
|
+
*/
|
|
58
|
+
export function cTokensToUnderlying(cTokens, reserveData) {
|
|
59
|
+
const availableAmount = new BN(reserveData.slice(RESERVE_AVAILABLE_AMOUNT_OFFSET, RESERVE_AVAILABLE_AMOUNT_OFFSET + 8), "le");
|
|
60
|
+
const borrowedAmountSf = new BN(reserveData.slice(RESERVE_BORROWED_AMOUNT_SF_OFFSET, RESERVE_BORROWED_AMOUNT_SF_OFFSET + 16), "le");
|
|
61
|
+
const cTokenSupply = new BN(reserveData.slice(RESERVE_CTOKENS_TOTAL_SUPPLY_OFFSET, RESERVE_CTOKENS_TOTAL_SUPPLY_OFFSET + 8), "le");
|
|
62
|
+
if (cTokenSupply.isZero())
|
|
63
|
+
return 0;
|
|
64
|
+
// totalLiquidity_sf = available * 2^60 + borrowed_sf
|
|
65
|
+
const totalLiquiditySf = availableAmount.mul(FRACTION_SCALE).add(borrowedAmountSf);
|
|
66
|
+
// underlying_sf = cTokens * totalLiquidity_sf / cTokenSupply
|
|
67
|
+
const cTokensBN = new BN(cTokens);
|
|
68
|
+
const underlyingSf = cTokensBN.mul(totalLiquiditySf).div(cTokenSupply);
|
|
69
|
+
// underlying = underlying_sf / 2^60
|
|
70
|
+
const underlying = underlyingSf.div(FRACTION_SCALE);
|
|
71
|
+
return underlying.toNumber();
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Convert underlying token amount to cToken amount using reserve exchange rate.
|
|
75
|
+
* cTokens = underlying * cTokenSupply / totalLiquidity
|
|
76
|
+
*/
|
|
77
|
+
export function underlyingToCTokens(underlying, reserveData) {
|
|
78
|
+
const availableAmount = new BN(reserveData.slice(RESERVE_AVAILABLE_AMOUNT_OFFSET, RESERVE_AVAILABLE_AMOUNT_OFFSET + 8), "le");
|
|
79
|
+
const borrowedAmountSf = new BN(reserveData.slice(RESERVE_BORROWED_AMOUNT_SF_OFFSET, RESERVE_BORROWED_AMOUNT_SF_OFFSET + 16), "le");
|
|
80
|
+
const cTokenSupply = new BN(reserveData.slice(RESERVE_CTOKENS_TOTAL_SUPPLY_OFFSET, RESERVE_CTOKENS_TOTAL_SUPPLY_OFFSET + 8), "le");
|
|
81
|
+
if (cTokenSupply.isZero())
|
|
82
|
+
return 0;
|
|
83
|
+
// totalLiquidity_sf = available * 2^60 + borrowed_sf
|
|
84
|
+
const totalLiquiditySf = availableAmount.mul(FRACTION_SCALE).add(borrowedAmountSf);
|
|
85
|
+
if (totalLiquiditySf.isZero())
|
|
86
|
+
return 0;
|
|
87
|
+
// cTokens_sf = underlying * cTokenSupply * 2^60 / totalLiquidity_sf
|
|
88
|
+
const underlyingBN = new BN(underlying);
|
|
89
|
+
const cTokensSf = underlyingBN.mul(cTokenSupply).mul(FRACTION_SCALE).div(totalLiquiditySf);
|
|
90
|
+
return cTokensSf.toNumber();
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=obligationParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obligationParser.js","sourceRoot":"","sources":["../../src/kamino/obligationParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,OAAO,CAAC;AACvB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,cAAc,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjD,2FAA2F;AAC3F,4EAA4E;AAC5E,yGAAyG;AACzG,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAC/B,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAEnC,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,IAAI,aAAa,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,cAAc,GAAG,CAAC,GAAG,iBAAiB,CAAC;QAC3D,IAAI,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,MAAM;QAE1C,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnD,MAAM,QAAQ,GAAG,WAAW,GAAG,yBAAyB,CAAC;QACzD,IAAI,QAAQ,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,SAAS;QAE1C,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3E,MAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAC5D,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,aAAa,CAAC,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,IAAI,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,GAAG,kBAAkB,CAAC;QAC7D,IAAI,WAAW,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,MAAM;QAE1C,MAAM,UAAU,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;YAAE,SAAS;QAEnD,MAAM,SAAS,GAAG,WAAW,GAAG,uBAAuB,CAAC;QACxD,IAAI,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM;YAAE,SAAS;QAC1C,MAAM,eAAe,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAC3E,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,EAAE,CAAC;AACjC,CAAC;AAED,2EAA2E;AAC3E,gGAAgG;AAChG,oGAAoG;AACpG,MAAM,+BAA+B,GAAG,GAAG,CAAC,CAAM,qBAAqB;AACvE,MAAM,iCAAiC,GAAG,GAAG,CAAC,CAAI,yBAAyB;AAC3E,kFAAkF;AAClF,6CAA6C;AAC7C,MAAM,mCAAmC,GAAG,IAAI,CAAC,CAAC,sBAAsB;AAExE;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAAe,EAAE,WAAmB;IACtE,MAAM,eAAe,GAAG,IAAI,EAAE,CAC5B,WAAW,CAAC,KAAK,CAAC,+BAA+B,EAAE,+BAA+B,GAAG,CAAC,CAAC,EACvF,IAAI,CACL,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAC7B,WAAW,CAAC,KAAK,CAAC,iCAAiC,EAAE,iCAAiC,GAAG,EAAE,CAAC,EAC5F,IAAI,CACL,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,EAAE,CACzB,WAAW,CAAC,KAAK,CAAC,mCAAmC,EAAE,mCAAmC,GAAG,CAAC,CAAC,EAC/F,IAAI,CACL,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,CAAC;IAEpC,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACnF,6DAA6D;IAC7D,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvE,oCAAoC;IACpC,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAEpD,OAAO,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC/B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB,EAAE,WAAmB;IACzE,MAAM,eAAe,GAAG,IAAI,EAAE,CAC5B,WAAW,CAAC,KAAK,CAAC,+BAA+B,EAAE,+BAA+B,GAAG,CAAC,CAAC,EACvF,IAAI,CACL,CAAC;IACF,MAAM,gBAAgB,GAAG,IAAI,EAAE,CAC7B,WAAW,CAAC,KAAK,CAAC,iCAAiC,EAAE,iCAAiC,GAAG,EAAE,CAAC,EAC5F,IAAI,CACL,CAAC;IACF,MAAM,YAAY,GAAG,IAAI,EAAE,CACzB,WAAW,CAAC,KAAK,CAAC,mCAAmC,EAAE,mCAAmC,GAAG,CAAC,CAAC,EAC/F,IAAI,CACL,CAAC;IAEF,IAAI,YAAY,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,CAAC;IAEpC,qDAAqD;IACrD,MAAM,gBAAgB,GAAG,eAAe,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACnF,IAAI,gBAAgB,CAAC,MAAM,EAAE;QAAE,OAAO,CAAC,CAAC;IAExC,oEAAoE;IACpE,MAAM,YAAY,GAAG,IAAI,EAAE,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAE3F,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { PublicKey, TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
export declare function buildRefreshReserveIx(reserve: PublicKey, lendingMarket: PublicKey, scopePrices: PublicKey): TransactionInstruction;
|
|
3
|
+
export declare function buildRefreshObligationIx(lendingMarket: PublicKey, obligation: PublicKey, reserves?: PublicKey[]): TransactionInstruction;
|
|
4
|
+
//# sourceMappingURL=refreshInstructions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshInstructions.d.ts","sourceRoot":"","sources":["../../src/kamino/refreshInstructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAOpE,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,SAAS,EAClB,aAAa,EAAE,SAAS,EACxB,WAAW,EAAE,SAAS,GACrB,sBAAsB,CAaxB;AAED,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,SAAS,EACrB,QAAQ,GAAE,SAAS,EAAO,GACzB,sBAAsB,CAcxB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { TransactionInstruction } from "@solana/web3.js";
|
|
2
|
+
import { KAMINO_LENDING_PROGRAM_ID, REFRESH_RESERVE_DISCRIMINATOR, REFRESH_OBLIGATION_DISCRIMINATOR, } from "../constants";
|
|
3
|
+
export function buildRefreshReserveIx(reserve, lendingMarket, scopePrices) {
|
|
4
|
+
return new TransactionInstruction({
|
|
5
|
+
programId: KAMINO_LENDING_PROGRAM_ID,
|
|
6
|
+
keys: [
|
|
7
|
+
{ pubkey: reserve, isSigner: false, isWritable: true },
|
|
8
|
+
{ pubkey: lendingMarket, isSigner: false, isWritable: false },
|
|
9
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
10
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
11
|
+
{ pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
|
|
12
|
+
{ pubkey: scopePrices, isSigner: false, isWritable: false },
|
|
13
|
+
],
|
|
14
|
+
data: REFRESH_RESERVE_DISCRIMINATOR,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function buildRefreshObligationIx(lendingMarket, obligation, reserves = []) {
|
|
18
|
+
const keys = [
|
|
19
|
+
{ pubkey: lendingMarket, isSigner: false, isWritable: false },
|
|
20
|
+
{ pubkey: obligation, isSigner: false, isWritable: true },
|
|
21
|
+
];
|
|
22
|
+
// Reserves must be writable for CPI
|
|
23
|
+
for (const reserve of reserves) {
|
|
24
|
+
keys.push({ pubkey: reserve, isSigner: false, isWritable: true });
|
|
25
|
+
}
|
|
26
|
+
return new TransactionInstruction({
|
|
27
|
+
programId: KAMINO_LENDING_PROGRAM_ID,
|
|
28
|
+
keys,
|
|
29
|
+
data: REFRESH_OBLIGATION_DISCRIMINATOR,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=refreshInstructions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refreshInstructions.js","sourceRoot":"","sources":["../../src/kamino/refreshInstructions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EACL,yBAAyB,EACzB,6BAA6B,EAC7B,gCAAgC,GACjC,MAAM,cAAc,CAAC;AAEtB,MAAM,UAAU,qBAAqB,CACnC,OAAkB,EAClB,aAAwB,EACxB,WAAsB;IAEtB,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,yBAAyB;QACpC,IAAI,EAAE;YACJ,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;YACtD,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YAC7D,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzE,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzE,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;YACzE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;SAC5D;QACD,IAAI,EAAE,6BAA6B;KACpC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,aAAwB,EACxB,UAAqB,EACrB,WAAwB,EAAE;IAE1B,MAAM,IAAI,GAAG;QACX,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;KAC1D,CAAC;IACF,oCAAoC;IACpC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,IAAI,sBAAsB,CAAC;QAChC,SAAS,EAAE,yBAAyB;QACpC,IAAI;QACJ,IAAI,EAAE,gCAAgC;KACvC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/limits.d.ts
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { Connection, PublicKey } from "@solana/web3.js";
|
|
2
|
+
import { type Lender } from "./position";
|
|
3
|
+
/** Protocol input rules, shared by the app, the widget and /api/widget/config. */
|
|
4
|
+
export declare const LIMITS_CONFIG: {
|
|
5
|
+
/** Users can borrow up to this % of collateral value. */
|
|
6
|
+
maxUserLtvPct: number;
|
|
7
|
+
/** Minimum deposits in UI units, first-deposit vs top-up. */
|
|
8
|
+
minDepositUi: Record<string, {
|
|
9
|
+
first: number;
|
|
10
|
+
topUp: number;
|
|
11
|
+
}>;
|
|
12
|
+
/** SOL held back from "Max" for rents + fees (lamports). */
|
|
13
|
+
solReserveLamports: {
|
|
14
|
+
first: number;
|
|
15
|
+
topUp: number;
|
|
16
|
+
};
|
|
17
|
+
/** JupLend deposit rounding shave, base units per collateral. */
|
|
18
|
+
juplendDepositBufferBase: Record<string, number>;
|
|
19
|
+
/**
|
|
20
|
+
* JupLend max-repay dust shave, micro-USDC. JupLend's operate rejects a
|
|
21
|
+
* repay that leaves 0 < debt < its min-debt floor (error 6025
|
|
22
|
+
* VAULT_USER_DEBT_TOO_LOW): a 0.002 USDC residual was observed failing on
|
|
23
|
+
* staging while ~0.01 passed, so leave 0.02 to clear the floor plus the
|
|
24
|
+
* interest accrued between quote and execution.
|
|
25
|
+
*/
|
|
26
|
+
juplendRepayShaveMicro: number;
|
|
27
|
+
/**
|
|
28
|
+
* klend balance-for-accrued-debt drift divisor applied to max withdraw
|
|
29
|
+
* (observed refresh-time BFAD drift up to ~0.43% on SOL).
|
|
30
|
+
*/
|
|
31
|
+
kaminoWithdrawDriftFactor: number;
|
|
32
|
+
/**
|
|
33
|
+
* JupLend max-withdraw margin. Hobba's 50% user-LTV cap is client-side
|
|
34
|
+
* policy (JupLend's on-chain ceiling is its 75-80% liquidation LTV), so
|
|
35
|
+
* only a hair of headroom is needed for interest accrued between quote
|
|
36
|
+
* and execution — lands ~49.99% instead of stranding 0.6% of the
|
|
37
|
+
* withdrawable amount like the klend factor would.
|
|
38
|
+
*/
|
|
39
|
+
juplendWithdrawDriftFactor: number;
|
|
40
|
+
/**
|
|
41
|
+
* Collateral reserve for the post-unwind residual on max withdraw when the
|
|
42
|
+
* operator has capital deployed. prepare_withdraw redeems vault shares to
|
|
43
|
+
* repay the operator debt as collateral leaves, but redemption rounding,
|
|
44
|
+
* vault fees and the repay dust leave a small residual — withdrawing ALL
|
|
45
|
+
* collateral against it is infinite LTV and the lender rejects the tx
|
|
46
|
+
* (observed: JupLend 6011 VAULT_POSITION_ABOVE_CF). Reserve enough
|
|
47
|
+
* collateral to hold the residual at ≤ 50% LTV: residual is estimated as
|
|
48
|
+
* max(floorUsd, fracOfOperatorDebt × operator debt).
|
|
49
|
+
*/
|
|
50
|
+
unwindResidualReserve: {
|
|
51
|
+
floorUsd: number;
|
|
52
|
+
fracOfOperatorDebt: number;
|
|
53
|
+
};
|
|
54
|
+
/** Fallback liquidation LTVs (%) when /api/rates is unavailable. */
|
|
55
|
+
fallbackLiquidationLtvPct: Record<Lender, Record<string, number>>;
|
|
56
|
+
};
|
|
57
|
+
export interface HobbaLimits {
|
|
58
|
+
lender: Lender;
|
|
59
|
+
/** micro-USDC — respects the 50% max user LTV. */
|
|
60
|
+
maxBorrowUsdc: string;
|
|
61
|
+
/** collateral base units — keeps LTV ≤ 50%, drift-adjusted. */
|
|
62
|
+
maxWithdraw: string;
|
|
63
|
+
/** micro-USDC — min(wallet USDC, debt), minus the JupLend dust shave. */
|
|
64
|
+
maxRepayUsdc: string;
|
|
65
|
+
/** collateral base units — first-deposit vs top-up aware. */
|
|
66
|
+
minDeposit: string;
|
|
67
|
+
/** lamports held back from Max when depositing SOL. */
|
|
68
|
+
solReserve: string;
|
|
69
|
+
/** JupLend rounding shave in collateral base units; "0" on Kamino. */
|
|
70
|
+
depositBuffer: string;
|
|
71
|
+
maxUserLtvPct: number;
|
|
72
|
+
/** % — per active lender + collateral. */
|
|
73
|
+
liquidationLtvPct: number;
|
|
74
|
+
}
|
|
75
|
+
export interface GetLimitsParams {
|
|
76
|
+
connection: Connection;
|
|
77
|
+
owner: PublicKey;
|
|
78
|
+
collateralMint: PublicKey;
|
|
79
|
+
apiBaseUrl?: string;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Single quote for input bounds so integrator math can't drift from protocol
|
|
83
|
+
* rules (SOL rent reserves, JupLend rounding shaves, klend accrual drift).
|
|
84
|
+
* Mirrors the app's CalculatorSection / ActionModal / max-withdraw logic.
|
|
85
|
+
*/
|
|
86
|
+
export declare function getLimits(params: GetLimitsParams): Promise<HobbaLimits>;
|
|
87
|
+
//# sourceMappingURL=limits.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAIxD,OAAO,EAAe,KAAK,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD,kFAAkF;AAClF,eAAO,MAAM,aAAa;IACxB,yDAAyD;;IAEzD,6DAA6D;kBAIxD,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACrD,4DAA4D;;;;;IAE5D,iEAAiE;8BACP,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAChF;;;;;;OAMG;;IAEH;;;OAGG;;IAEH;;;;;;OAMG;;IAEH;;;;;;;;;OASG;;;;;IAEH,oEAAoE;+BAI/D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,aAAa,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AA4CD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,SAAS,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,WAAW,CAAC,CA0F7E"}
|