@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.
Files changed (190) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +87 -0
  3. package/dist/amountUtils.d.ts +15 -0
  4. package/dist/amountUtils.d.ts.map +1 -0
  5. package/dist/amountUtils.js +59 -0
  6. package/dist/amountUtils.js.map +1 -0
  7. package/dist/constants.d.ts +148 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +231 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/errors.d.ts +7 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +29 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/executeAction.d.ts +36 -0
  16. package/dist/executeAction.d.ts.map +1 -0
  17. package/dist/executeAction.js +606 -0
  18. package/dist/executeAction.js.map +1 -0
  19. package/dist/executeDepositBorrow.d.ts +49 -0
  20. package/dist/executeDepositBorrow.d.ts.map +1 -0
  21. package/dist/executeDepositBorrow.js +444 -0
  22. package/dist/executeDepositBorrow.js.map +1 -0
  23. package/dist/idl/hobba.json +5072 -0
  24. package/dist/idl.d.ts +783 -0
  25. package/dist/idl.d.ts.map +1 -0
  26. package/dist/idl.js +7 -0
  27. package/dist/idl.js.map +1 -0
  28. package/dist/index.d.ts +17 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +22 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/juplend/accountResolvers.d.ts +106 -0
  33. package/dist/juplend/accountResolvers.d.ts.map +1 -0
  34. package/dist/juplend/accountResolvers.js +148 -0
  35. package/dist/juplend/accountResolvers.js.map +1 -0
  36. package/dist/juplend/operateRemaining.d.ts +11 -0
  37. package/dist/juplend/operateRemaining.d.ts.map +1 -0
  38. package/dist/juplend/operateRemaining.js +46 -0
  39. package/dist/juplend/operateRemaining.js.map +1 -0
  40. package/dist/juplend/positionInit.d.ts +34 -0
  41. package/dist/juplend/positionInit.d.ts.map +1 -0
  42. package/dist/juplend/positionInit.js +56 -0
  43. package/dist/juplend/positionInit.js.map +1 -0
  44. package/dist/juplend/positionParser.d.ts +8 -0
  45. package/dist/juplend/positionParser.d.ts.map +1 -0
  46. package/dist/juplend/positionParser.js +30 -0
  47. package/dist/juplend/positionParser.js.map +1 -0
  48. package/dist/juplend/sdkApi.d.ts +39 -0
  49. package/dist/juplend/sdkApi.d.ts.map +1 -0
  50. package/dist/juplend/sdkApi.js +68 -0
  51. package/dist/juplend/sdkApi.js.map +1 -0
  52. package/dist/juplend/tickMath.d.ts +19 -0
  53. package/dist/juplend/tickMath.d.ts.map +1 -0
  54. package/dist/juplend/tickMath.js +91 -0
  55. package/dist/juplend/tickMath.js.map +1 -0
  56. package/dist/juplend/tickUtils.d.ts +20 -0
  57. package/dist/juplend/tickUtils.d.ts.map +1 -0
  58. package/dist/juplend/tickUtils.js +115 -0
  59. package/dist/juplend/tickUtils.js.map +1 -0
  60. package/dist/juplend/vaultConfigParser.d.ts +25 -0
  61. package/dist/juplend/vaultConfigParser.d.ts.map +1 -0
  62. package/dist/juplend/vaultConfigParser.js +38 -0
  63. package/dist/juplend/vaultConfigParser.js.map +1 -0
  64. package/dist/kamino/accountResolvers.d.ts +110 -0
  65. package/dist/kamino/accountResolvers.d.ts.map +1 -0
  66. package/dist/kamino/accountResolvers.js +220 -0
  67. package/dist/kamino/accountResolvers.js.map +1 -0
  68. package/dist/kamino/obligationParser.d.ts +13 -0
  69. package/dist/kamino/obligationParser.d.ts.map +1 -0
  70. package/dist/kamino/obligationParser.js +92 -0
  71. package/dist/kamino/obligationParser.js.map +1 -0
  72. package/dist/kamino/refreshInstructions.d.ts +4 -0
  73. package/dist/kamino/refreshInstructions.d.ts.map +1 -0
  74. package/dist/kamino/refreshInstructions.js +32 -0
  75. package/dist/kamino/refreshInstructions.js.map +1 -0
  76. package/dist/limits.d.ts +87 -0
  77. package/dist/limits.d.ts.map +1 -0
  78. package/dist/limits.js +174 -0
  79. package/dist/limits.js.map +1 -0
  80. package/dist/marketConfig.d.ts +35 -0
  81. package/dist/marketConfig.d.ts.map +1 -0
  82. package/dist/marketConfig.js +85 -0
  83. package/dist/marketConfig.js.map +1 -0
  84. package/dist/oracle/scopePrice.d.ts +7 -0
  85. package/dist/oracle/scopePrice.d.ts.map +1 -0
  86. package/dist/oracle/scopePrice.js +31 -0
  87. package/dist/oracle/scopePrice.js.map +1 -0
  88. package/dist/pdas.d.ts +33 -0
  89. package/dist/pdas.d.ts.map +1 -0
  90. package/dist/pdas.js +116 -0
  91. package/dist/pdas.js.map +1 -0
  92. package/dist/position.d.ts +45 -0
  93. package/dist/position.d.ts.map +1 -0
  94. package/dist/position.js +68 -0
  95. package/dist/position.js.map +1 -0
  96. package/dist/positionMetrics.d.ts +108 -0
  97. package/dist/positionMetrics.d.ts.map +1 -0
  98. package/dist/positionMetrics.js +238 -0
  99. package/dist/positionMetrics.js.map +1 -0
  100. package/dist/program.d.ts +12 -0
  101. package/dist/program.d.ts.map +1 -0
  102. package/dist/program.js +24 -0
  103. package/dist/program.js.map +1 -0
  104. package/dist/quote.d.ts +90 -0
  105. package/dist/quote.d.ts.map +1 -0
  106. package/dist/quote.js +198 -0
  107. package/dist/quote.js.map +1 -0
  108. package/dist/rates/borrowRates.d.ts +44 -0
  109. package/dist/rates/borrowRates.d.ts.map +1 -0
  110. package/dist/rates/borrowRates.js +229 -0
  111. package/dist/rates/borrowRates.js.map +1 -0
  112. package/dist/rates/collateralInfo.d.ts +21 -0
  113. package/dist/rates/collateralInfo.d.ts.map +1 -0
  114. package/dist/rates/collateralInfo.js +104 -0
  115. package/dist/rates/collateralInfo.js.map +1 -0
  116. package/dist/rates/constants.d.ts +22 -0
  117. package/dist/rates/constants.d.ts.map +1 -0
  118. package/dist/rates/constants.js +70 -0
  119. package/dist/rates/constants.js.map +1 -0
  120. package/dist/rates/index.d.ts +11 -0
  121. package/dist/rates/index.d.ts.map +1 -0
  122. package/dist/rates/index.js +11 -0
  123. package/dist/rates/index.js.map +1 -0
  124. package/dist/rates/kaminoApi.d.ts +24 -0
  125. package/dist/rates/kaminoApi.d.ts.map +1 -0
  126. package/dist/rates/kaminoApi.js +98 -0
  127. package/dist/rates/kaminoApi.js.map +1 -0
  128. package/dist/rates/supplyRates.d.ts +23 -0
  129. package/dist/rates/supplyRates.d.ts.map +1 -0
  130. package/dist/rates/supplyRates.js +67 -0
  131. package/dist/rates/supplyRates.js.map +1 -0
  132. package/dist/transactionBuilder.d.ts +5 -0
  133. package/dist/transactionBuilder.d.ts.map +1 -0
  134. package/dist/transactionBuilder.js +287 -0
  135. package/dist/transactionBuilder.js.map +1 -0
  136. package/dist/txHelpers.d.ts +16 -0
  137. package/dist/txHelpers.d.ts.map +1 -0
  138. package/dist/txHelpers.js +82 -0
  139. package/dist/txHelpers.js.map +1 -0
  140. package/dist/userState.d.ts +21 -0
  141. package/dist/userState.d.ts.map +1 -0
  142. package/dist/userState.js +60 -0
  143. package/dist/userState.js.map +1 -0
  144. package/dist/vault/vaultAccounts.d.ts +82 -0
  145. package/dist/vault/vaultAccounts.d.ts.map +1 -0
  146. package/dist/vault/vaultAccounts.js +275 -0
  147. package/dist/vault/vaultAccounts.js.map +1 -0
  148. package/dist/wallet.d.ts +12 -0
  149. package/dist/wallet.d.ts.map +1 -0
  150. package/dist/wallet.js +2 -0
  151. package/dist/wallet.js.map +1 -0
  152. package/package.json +63 -0
  153. package/src/amountUtils.ts +69 -0
  154. package/src/constants.ts +263 -0
  155. package/src/errors.ts +33 -0
  156. package/src/executeAction.ts +884 -0
  157. package/src/executeDepositBorrow.ts +677 -0
  158. package/src/idl/hobba.json +5072 -0
  159. package/src/idl.ts +7 -0
  160. package/src/index.ts +21 -0
  161. package/src/juplend/accountResolvers.ts +207 -0
  162. package/src/juplend/operateRemaining.ts +81 -0
  163. package/src/juplend/positionInit.ts +86 -0
  164. package/src/juplend/positionParser.ts +41 -0
  165. package/src/juplend/sdkApi.ts +112 -0
  166. package/src/juplend/tickMath.ts +82 -0
  167. package/src/juplend/tickUtils.ts +163 -0
  168. package/src/juplend/vaultConfigParser.ts +45 -0
  169. package/src/kamino/accountResolvers.ts +299 -0
  170. package/src/kamino/obligationParser.ts +123 -0
  171. package/src/kamino/refreshInstructions.ts +45 -0
  172. package/src/limits.ts +222 -0
  173. package/src/marketConfig.ts +139 -0
  174. package/src/oracle/scopePrice.ts +31 -0
  175. package/src/pdas.ts +226 -0
  176. package/src/position.ts +131 -0
  177. package/src/positionMetrics.ts +387 -0
  178. package/src/program.ts +30 -0
  179. package/src/quote.ts +310 -0
  180. package/src/rates/borrowRates.ts +270 -0
  181. package/src/rates/collateralInfo.ts +136 -0
  182. package/src/rates/constants.ts +87 -0
  183. package/src/rates/index.ts +38 -0
  184. package/src/rates/kaminoApi.ts +134 -0
  185. package/src/rates/supplyRates.ts +102 -0
  186. package/src/transactionBuilder.ts +324 -0
  187. package/src/txHelpers.ts +107 -0
  188. package/src/userState.ts +91 -0
  189. package/src/vault/vaultAccounts.ts +365 -0
  190. 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":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,0BAA0B,EAAE,kBAAkB,EAAe,MAAM,iBAAiB,CAAC;AACxH,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,cAAc,EACd,SAAS,EACT,YAAY,GACb,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAiBrH,MAAM,CAAC,gBAAgB,CAAC,GAAG,sBAAsB,EAAE,CAAC;AAEpD,MAAM,UAAU,yBAAyB,CAAC,KAAgB,EAAE,IAAc,EAAE,EAAsB,EAAE,SAAiB,CAAC;IACpH,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,aAAa,EAAE,aAAa,CAAC,SAAS;QACtC,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;QACtC,aAAa,EAAE,sBAAsB,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAC3D,sEAAsE;QACtE,uEAAuE;QACvE,UAAU,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,yEAAyE;QACzE,gDAAgD;QAChD,YAAY,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,qCAAqC,CACnD,IAAc,EACd,EAAsB;IAEtB,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ;QAC3E,EAAE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,QAAQ;QAC3E,EAAE,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzE,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAgB,EAAE,IAAc,EAAE,EAAsB;IACzF,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,mBAAmB,EAAE,IAAI,CAAC,iBAAiB;QAC3C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;QACzC,eAAe,EAAE,EAAE,CAAC,cAAc;QAClC,YAAY,EAAE,gBAAgB;QAC9B,sBAAsB,EAAE,cAAc;QACtC,aAAa,EAAE,aAAa,CAAC,SAAS;QACtC,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;QACtC,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,8BAA8B,CAC5C,IAAc,EACd,EAAsB;IAEtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;IAC1C,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,EAAE,CAAC,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3E,EAAE,MAAM,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACtE,EAAE,MAAM,EAAE,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACxE,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,0CAA0C;QACnH,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,2BAA2B;QAC7F,EAAE,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClF,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,IAAI,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzE,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC1E,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;KACnE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,KAAgB,EAChB,IAAc,EACd,EAAsB,EACtB,cAAuB,EACvB,aAIC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC;IACzB,2EAA2E;IAC3E,8FAA8F;IAC9F,MAAM,oBAAoB,GAAG,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC3F,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,aAAa,CAAC,SAAS;QACtC,KAAK,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QAC9C,UAAU,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;QACxD,YAAY,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,oBAAoB;QACxE,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS;QAC/E,QAAQ,EAAE,SAAS;QACnB,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;KACvC,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,6BAA6B,CAC3C,IAAc,EACd,EAAsB,EACtB,cAAuB;IAEvB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;IAC1C,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7D,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACrE,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC9D,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,uBAAuB;QAClG,EAAE,MAAM,EAAE,IAAI,CAAC,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtF,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,IAAI,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC1E,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACvG,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,kBAAkB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,iBAAiB;KAC7F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgB,EAAE,IAAc,EAAE,EAAsB;IACvF,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;QACtC,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,4BAA4B,CAC1C,IAAc,EACd,EAAsB;IAEtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;IAC1C,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7D,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACrE,EAAE,MAAM,EAAE,IAAI,CAAC,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtF,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,IAAI,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzE,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAgB,EAAE,IAAc,EAAE,EAAsB;IAC1F,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,iBAAiB,EAAE,IAAI,CAAC,gBAAgB;QACxC,kBAAkB,EAAE,IAAI,CAAC,iBAAiB;QAC1C,YAAY,EAAE,gBAAgB;QAC9B,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;QACtC,cAAc,EAAE,EAAE,CAAC,cAAc;KAClC,CAAC;AACJ,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,+BAA+B,CAC7C,IAAc,EACd,EAAsB;IAEtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;IAC1C,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,EAAE,CAAC,cAAc,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,sBAAsB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACxE,EAAE,MAAM,EAAE,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACtE,EAAE,MAAM,EAAE,EAAE,CAAC,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC3E,EAAE,MAAM,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,0CAA0C;QACnH,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,2BAA2B;QAC7F,EAAE,MAAM,EAAE,IAAI,CAAC,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QAClF,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,IAAI,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzE,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;KAC3E,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,KAAgB,EAChB,IAAc,EACd,EAAsB,EACtB,aAIC;IAED,MAAM,EAAE,GAAG,aAAa,CAAC;IACzB,OAAO;QACL,KAAK;QACL,SAAS,EAAE,IAAI,CAAC,YAAY;QAC5B,cAAc,EAAE,EAAE,CAAC,cAAc;QACjC,aAAa,EAAE,gBAAgB;QAC/B,cAAc,EAAE,IAAI,CAAC,iBAAiB;QACtC,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,UAAU,EAAE,EAAE,CAAC,UAAU;QACzB,YAAY,EAAE,EAAE,CAAC,SAAS;QAC1B,kBAAkB,EAAE,gBAAgB;QACpC,QAAQ,EAAE,SAAS;QACnB,YAAY,EAAE,gBAAgB;KAC/B,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,sCAAsC,CACpD,IAAc,EACd,EAAsB;IAEtB,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC;IAC1C,OAAO;QACL,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACjE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QACzD,EAAE,MAAM,EAAE,EAAE,CAAC,eAAe,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClE,EAAE,MAAM,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QAC7D,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACrE,EAAE,MAAM,EAAE,IAAI,CAAC,8BAA8B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtF,EAAE,MAAM,EAAE,EAAE,CAAC,mBAAmB,IAAI,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE;QACtG,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC7D,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC5D,EAAE,MAAM,EAAE,0BAA0B,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAC1E,EAAE,MAAM,EAAE,EAAE,CAAC,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE;QACnE,EAAE,MAAM,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,iBAAiB;KAC7F,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,eAAe,CAC7B,MAAuE,EACvE,aAAwB,EACxB,SAA2B;IAE3B,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,IACE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;YAChC,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAC3C,CAAC;YACD,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -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":"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"}
@@ -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"}
@@ -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"}