@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,275 @@
1
+ import { PublicKey, SystemProgram, SYSVAR_INSTRUCTIONS_PUBKEY } from "@solana/web3.js";
2
+ import { TOKEN_PROGRAM_ID } from "@solana/spl-token";
3
+ import BN from "bn.js";
4
+ import { KAMINO_LENDING_PROGRAM_ID, KVAULT_PROGRAM_ID, ALLEZ_USDC_VAULT, ALLEZ_USDC_TOKEN_VAULT, ALLEZ_USDC_VAULT_AUTHORITY, ALLEZ_USDC_SHARES_MINT, VAULT_LOOKUP_TABLE, USDC_PRIME_VAULT, USDC_PRIME_TOKEN_VAULT, USDC_PRIME_VAULT_AUTHORITY, USDC_PRIME_SHARES_MINT, USDC_PRIME_LOOKUP_TABLE, ROCKAWAY_RWA_VAULT, ROCKAWAY_RWA_TOKEN_VAULT, ROCKAWAY_RWA_VAULT_AUTHORITY, ROCKAWAY_RWA_SHARES_MINT, ROCKAWAY_RWA_LOOKUP_TABLE, KVAULT_REMAINING_ACCOUNTS, PRIME_BATCH_ACCOUNTS, ROCKAWAY_BATCH_ACCOUNTS, PERENA_PROGRAM_ID, PERENA_VAULT_STATE, PERENA_VAULT_AUTHORITY, PERENA_POOL_CONFIG, PERENA_VAULT_USDC_TRANSIT, PERENA_VAULT_METADATA, PERENA_FEE_COLLECTOR, PERENA_MARGINFI_PROGRAM, PERENA_MARGINFI_GROUP, PERENA_MARGINFI_ACCOUNT, PERENA_MARGINFI_BANK, PERENA_MARGINFI_BANK_AUTHORITY, PERENA_MARGINFI_BANK_LIQUIDITY_VAULT, PERENA_MARGINFI_ORACLE, STAR_USDC_MINT, USDC_MINT, VAULT_PROVIDER_KVAULT, VAULT_PROVIDER_PERENA, } from "../constants";
5
+ import { deriveKvaultEventAuthority, deriveMarketAuthority } from "../pdas";
6
+ const [KVAULT_EVENT_AUTHORITY] = deriveKvaultEventAuthority();
7
+ export function vaultProviderToU8(provider) {
8
+ return provider === "kvault" ? VAULT_PROVIDER_KVAULT : VAULT_PROVIDER_PERENA;
9
+ }
10
+ // Derive KVault global config PDA
11
+ const [KVAULT_GLOBAL_CONFIG] = PublicKey.findProgramAddressSync([Buffer.from("global_config")], KVAULT_PROGRAM_ID);
12
+ /**
13
+ * Build KVault deposit vault_remaining:
14
+ * [token_vault, base_vault_authority, event_authority, kamino_program, kvault_program, ...batchAccounts]
15
+ */
16
+ export function getKvaultDepositRemaining(vaultInfo) {
17
+ return [
18
+ { pubkey: vaultInfo.tokenVault, isSigner: false, isWritable: true },
19
+ { pubkey: vaultInfo.authority, isSigner: false, isWritable: false },
20
+ { pubkey: KVAULT_EVENT_AUTHORITY, isSigner: false, isWritable: false },
21
+ { pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
22
+ { pubkey: KVAULT_PROGRAM_ID, isSigner: false, isWritable: false },
23
+ ...vaultInfo.batchAccounts,
24
+ ];
25
+ }
26
+ /**
27
+ * Build KVault withdraw vault_remaining:
28
+ * [kvault_global_config, token_vault, base_vault_authority, event_authority, kamino_program, kvault_program, ...withdrawFixed, ...batchAccounts]
29
+ */
30
+ export function getKvaultWithdrawRemaining(vaultInfo, withdrawFixed) {
31
+ return [
32
+ { pubkey: KVAULT_GLOBAL_CONFIG, isSigner: false, isWritable: false },
33
+ { pubkey: vaultInfo.tokenVault, isSigner: false, isWritable: true },
34
+ { pubkey: vaultInfo.authority, isSigner: false, isWritable: false },
35
+ { pubkey: KVAULT_EVENT_AUTHORITY, isSigner: false, isWritable: false },
36
+ { pubkey: KAMINO_LENDING_PROGRAM_ID, isSigner: false, isWritable: false },
37
+ { pubkey: KVAULT_PROGRAM_ID, isSigner: false, isWritable: false },
38
+ ...withdrawFixed,
39
+ ...vaultInfo.batchAccounts,
40
+ ];
41
+ }
42
+ export function getVaultInfo(vaultType) {
43
+ if (vaultType === "allez") {
44
+ return {
45
+ vault: ALLEZ_USDC_VAULT,
46
+ tokenVault: ALLEZ_USDC_TOKEN_VAULT,
47
+ authority: ALLEZ_USDC_VAULT_AUTHORITY,
48
+ sharesMint: ALLEZ_USDC_SHARES_MINT,
49
+ lookupTable: VAULT_LOOKUP_TABLE,
50
+ provider: "kvault",
51
+ batchAccounts: KVAULT_REMAINING_ACCOUNTS,
52
+ withdrawFixed: [], // resolved dynamically via resolveWithdrawFixed
53
+ };
54
+ }
55
+ else if (vaultType === "prime") {
56
+ return {
57
+ vault: USDC_PRIME_VAULT,
58
+ tokenVault: USDC_PRIME_TOKEN_VAULT,
59
+ authority: USDC_PRIME_VAULT_AUTHORITY,
60
+ sharesMint: USDC_PRIME_SHARES_MINT,
61
+ lookupTable: USDC_PRIME_LOOKUP_TABLE,
62
+ provider: "kvault",
63
+ batchAccounts: PRIME_BATCH_ACCOUNTS,
64
+ withdrawFixed: [], // resolved dynamically via resolveWithdrawFixed
65
+ };
66
+ }
67
+ else if (vaultType === "rockawayRWA") {
68
+ return {
69
+ vault: ROCKAWAY_RWA_VAULT,
70
+ tokenVault: ROCKAWAY_RWA_TOKEN_VAULT,
71
+ authority: ROCKAWAY_RWA_VAULT_AUTHORITY,
72
+ sharesMint: ROCKAWAY_RWA_SHARES_MINT,
73
+ lookupTable: ROCKAWAY_RWA_LOOKUP_TABLE,
74
+ provider: "kvault",
75
+ batchAccounts: ROCKAWAY_BATCH_ACCOUNTS,
76
+ withdrawFixed: [], // resolved dynamically via resolveWithdrawFixed
77
+ };
78
+ }
79
+ else {
80
+ // Perena vault
81
+ return {
82
+ vault: PERENA_VAULT_STATE,
83
+ tokenVault: PERENA_VAULT_USDC_TRANSIT, // analogous to token vault
84
+ authority: PERENA_VAULT_AUTHORITY,
85
+ sharesMint: STAR_USDC_MINT,
86
+ lookupTable: PublicKey.default, // TODO: create Perena lookup table
87
+ provider: "perena",
88
+ batchAccounts: [], // Perena uses fixed accounts via getPerenaDepositAccounts/getPerenaWithdrawAccounts
89
+ withdrawFixed: [], // Perena uses fixed accounts via getPerenaWithdrawAccounts
90
+ };
91
+ }
92
+ }
93
+ // VaultState layout constants
94
+ const ALLOC_STRATEGY_OFFSET = 312;
95
+ const ALLOC_ENTRY_SIZE = 2160;
96
+ const ALLOC_COUNT = 25;
97
+ // ctokenAllocation at: reserve(32) + ctokenVault(32) + targetWeight(8) + tokenAllocCap(8) + ctokenVaultBump(8) + configPadding(127*8) = 1104
98
+ const CTOKEN_ALLOC_OFFSET_IN_ENTRY = 32 + 32 + 8 + 8 + 8 + 127 * 8;
99
+ /**
100
+ * Reads vault state on-chain, finds the allocation with the highest ctokenAllocation,
101
+ * reads that reserve to get lending_market / liquidity.supplyVault / collateral.mintPubkey,
102
+ * and returns the 11-account withdrawFixed array.
103
+ */
104
+ export async function resolveWithdrawFixed(connection, vaultPubkey) {
105
+ const vaultAcct = await connection.getAccountInfo(vaultPubkey);
106
+ if (!vaultAcct)
107
+ throw new Error(`Vault account not found: ${vaultPubkey.toBase58()}`);
108
+ const data = vaultAcct.data;
109
+ let bestReserve = null;
110
+ let bestCtokenVault = null;
111
+ let bestAlloc = new BN(0);
112
+ for (let i = 0; i < ALLOC_COUNT; i++) {
113
+ const entryOffset = ALLOC_STRATEGY_OFFSET + i * ALLOC_ENTRY_SIZE;
114
+ if (entryOffset + ALLOC_ENTRY_SIZE > data.length)
115
+ break;
116
+ const reserve = new PublicKey(data.slice(entryOffset, entryOffset + 32));
117
+ if (reserve.equals(PublicKey.default))
118
+ continue;
119
+ const ctokenVault = new PublicKey(data.slice(entryOffset + 32, entryOffset + 64));
120
+ const ctokenAlloc = new BN(data.slice(entryOffset + CTOKEN_ALLOC_OFFSET_IN_ENTRY, entryOffset + CTOKEN_ALLOC_OFFSET_IN_ENTRY + 8), "le");
121
+ if (ctokenAlloc.gt(bestAlloc)) {
122
+ bestAlloc = ctokenAlloc;
123
+ bestReserve = reserve;
124
+ bestCtokenVault = ctokenVault;
125
+ }
126
+ }
127
+ if (!bestReserve || !bestCtokenVault) {
128
+ throw new Error(`No non-empty allocation in vault ${vaultPubkey.toBase58()}`);
129
+ }
130
+ // Decode reserve to get lending_market, liquidity.supplyVault, collateral.mintPubkey.
131
+ // Manual offset reads (instead of klend-sdk Reserve.decode) so @hobba/core and the
132
+ // widget bundle carry no klend-sdk dependency. Layout traced from the klend borsh
133
+ // struct — same base offsets as kamino/obligationParser.ts:
134
+ // 8 disc + 8 version + 16 lastUpdate = 32 → lendingMarket (32 bytes)
135
+ // ReserveLiquidity at 128: mintPubkey @128, supplyVault @160, feeVault @192
136
+ // ReserveCollateral at 2560: mintPubkey @2560
137
+ const reserveAcct = await connection.getAccountInfo(bestReserve);
138
+ if (!reserveAcct)
139
+ throw new Error(`Reserve not found: ${bestReserve.toBase58()}`);
140
+ const reserveData = reserveAcct.data;
141
+ const lendingMarket = new PublicKey(reserveData.slice(32, 64));
142
+ const liquiditySupply = new PublicKey(reserveData.slice(160, 192));
143
+ const collateralMint = new PublicKey(reserveData.slice(2560, 2592));
144
+ const [lendingMarketAuthority] = deriveMarketAuthority(lendingMarket);
145
+ return [
146
+ { pubkey: vaultPubkey, isSigner: false, isWritable: true },
147
+ { pubkey: bestReserve, isSigner: false, isWritable: true },
148
+ { pubkey: bestCtokenVault, isSigner: false, isWritable: true },
149
+ { pubkey: lendingMarket, isSigner: false, isWritable: false },
150
+ { pubkey: lendingMarketAuthority, isSigner: false, isWritable: false },
151
+ { pubkey: liquiditySupply, isSigner: false, isWritable: true },
152
+ { pubkey: collateralMint, isSigner: false, isWritable: true },
153
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false },
154
+ { pubkey: SYSVAR_INSTRUCTIONS_PUBKEY, isSigner: false, isWritable: false },
155
+ { pubkey: KVAULT_EVENT_AUTHORITY, isSigner: false, isWritable: false },
156
+ { pubkey: KVAULT_PROGRAM_ID, isSigner: false, isWritable: false },
157
+ ];
158
+ }
159
+ export function identifyVaultType(vaultKey) {
160
+ if (vaultKey.equals(ALLEZ_USDC_VAULT))
161
+ return "allez";
162
+ if (vaultKey.equals(USDC_PRIME_VAULT))
163
+ return "prime";
164
+ if (vaultKey.equals(ROCKAWAY_RWA_VAULT))
165
+ return "rockawayRWA";
166
+ if (vaultKey.equals(PERENA_VAULT_STATE))
167
+ return "perena";
168
+ return null;
169
+ }
170
+ export function identifyVaultProvider(vaultKey) {
171
+ if (vaultKey.equals(PERENA_VAULT_STATE))
172
+ return "perena";
173
+ return "kvault";
174
+ }
175
+ /**
176
+ * Build the 16-account list for Perena deposit (mint_w_yielding_gen).
177
+ * These go into remaining_accounts when vault_provider = 1 (Perena).
178
+ * 15 instruction accounts + Perena program for CPI resolution.
179
+ * MarginFi accounts are omitted — Perena's crank will deploy capital later.
180
+ * This matches the Perena frontend behavior and avoids MarginFi ProtocolPaused errors.
181
+ */
182
+ export function getPerenaDepositAccounts(pdaKey, pdaUsdcAta, pdaStarAta) {
183
+ return [
184
+ { pubkey: pdaKey, isSigner: false, isWritable: true }, // 0: user/pda (signer set by CPI)
185
+ { pubkey: PERENA_VAULT_STATE, isSigner: false, isWritable: true }, // 1: vault_state
186
+ { pubkey: PERENA_VAULT_AUTHORITY, isSigner: false, isWritable: true }, // 2: vault_authority PDA
187
+ { pubkey: PERENA_POOL_CONFIG, isSigner: false, isWritable: false }, // 3: pool/config
188
+ { pubkey: USDC_MINT, isSigner: false, isWritable: false }, // 4: USDC mint
189
+ { pubkey: STAR_USDC_MINT, isSigner: false, isWritable: true }, // 5: star* mint
190
+ { pubkey: pdaUsdcAta, isSigner: false, isWritable: true }, // 6: user USDC account
191
+ { pubkey: pdaStarAta, isSigner: false, isWritable: true }, // 7: user star* account
192
+ { pubkey: PERENA_VAULT_USDC_TRANSIT, isSigner: false, isWritable: true }, // 8: vault USDC transit
193
+ { pubkey: PERENA_FEE_COLLECTOR, isSigner: false, isWritable: true }, // 9: team_state (fee collector)
194
+ { pubkey: PERENA_VAULT_METADATA, isSigner: false, isWritable: true }, // 10: perena vault metadata
195
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // 11: system program
196
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 12: token program
197
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 13: token program (duplicate)
198
+ { pubkey: new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"), isSigner: false, isWritable: false }, // 14: ATA program
199
+ { pubkey: PERENA_PROGRAM_ID, isSigner: false, isWritable: false }, // 15: perena program (for CPI resolution)
200
+ ];
201
+ }
202
+ /**
203
+ * Build the 16-account list for Perena withdraw (burn_for_yielding_gen) WITHOUT
204
+ * MarginFi. Use this only as a fallback when MarginFi is paused — otherwise
205
+ * Perena can only pay out from its small USDC transit buffer and will fail
206
+ * with `insufficient funds` when that buffer is drained between crank runs.
207
+ *
208
+ * Prefer `getPerenaWithdrawAccountsWithMarginfi` for normal operation.
209
+ *
210
+ * 15 instruction accounts + Perena program for CPI resolution.
211
+ */
212
+ export function getPerenaWithdrawAccounts(pdaKey, pdaUsdcAta, pdaStarAta) {
213
+ return [
214
+ { pubkey: pdaKey, isSigner: false, isWritable: true }, // 0: user/pda (signer set by CPI)
215
+ { pubkey: PERENA_VAULT_STATE, isSigner: false, isWritable: true }, // 1: vault_state
216
+ { pubkey: PERENA_VAULT_AUTHORITY, isSigner: false, isWritable: true }, // 2: vault_authority PDA
217
+ { pubkey: PERENA_POOL_CONFIG, isSigner: false, isWritable: false }, // 3: pool/config
218
+ { pubkey: USDC_MINT, isSigner: false, isWritable: false }, // 4: USDC mint
219
+ { pubkey: STAR_USDC_MINT, isSigner: false, isWritable: true }, // 5: star* mint (burned)
220
+ { pubkey: pdaUsdcAta, isSigner: false, isWritable: true }, // 6: user USDC account (destination)
221
+ { pubkey: pdaStarAta, isSigner: false, isWritable: true }, // 7: user star* account (burned from)
222
+ { pubkey: PERENA_VAULT_USDC_TRANSIT, isSigner: false, isWritable: true }, // 8: vault USDC transit
223
+ { pubkey: PERENA_FEE_COLLECTOR, isSigner: false, isWritable: true }, // 9: fee collector
224
+ { pubkey: PERENA_VAULT_METADATA, isSigner: false, isWritable: true }, // 10: fee destination secondary
225
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // 11: system program
226
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 12: token program
227
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 13: token program (duplicate)
228
+ { pubkey: new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"), isSigner: false, isWritable: false }, // 14: ATA program
229
+ { pubkey: PERENA_PROGRAM_ID, isSigner: false, isWritable: false }, // 15: perena program (for CPI resolution)
230
+ ];
231
+ }
232
+ /**
233
+ * Build the 24-account list for Perena withdraw (burn_for_yielding_gen) WITH
234
+ * MarginFi. This is the **default** for our flows: when the Perena USDC transit
235
+ * buffer is insufficient to cover the requested amount, Perena uses the
236
+ * MarginFi accounts to pull deployed capital back, so withdrawals don't fail.
237
+ *
238
+ * If MarginFi is paused (Perena's internal ProtocolPaused error), fall back to
239
+ * `getPerenaWithdrawAccounts` and retry after the next crank.
240
+ *
241
+ * 15 instruction accounts + 8 MarginFi (incl. oracle) + Perena program.
242
+ * MarginFi's LendingAccountWithdraw needs 1 oracle per active balance slot in
243
+ * Perena's marginfi account; Perena holds 2 balance slots, both USDC, so we
244
+ * pass the USDC oracle (position 22) and MarginFi reads it twice.
245
+ */
246
+ export function getPerenaWithdrawAccountsWithMarginfi(pdaKey, pdaUsdcAta, pdaStarAta) {
247
+ const ATA_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
248
+ return [
249
+ { pubkey: pdaKey, isSigner: false, isWritable: true }, // 0: user/pda
250
+ { pubkey: PERENA_VAULT_STATE, isSigner: false, isWritable: true }, // 1: vault_state
251
+ { pubkey: PERENA_VAULT_AUTHORITY, isSigner: false, isWritable: true }, // 2: vault_authority
252
+ { pubkey: PERENA_POOL_CONFIG, isSigner: false, isWritable: false }, // 3: pool/config
253
+ { pubkey: USDC_MINT, isSigner: false, isWritable: false }, // 4: USDC mint
254
+ { pubkey: STAR_USDC_MINT, isSigner: false, isWritable: true }, // 5: star* mint (burned)
255
+ { pubkey: pdaUsdcAta, isSigner: false, isWritable: true }, // 6: user USDC dest
256
+ { pubkey: pdaStarAta, isSigner: false, isWritable: true }, // 7: user star* src
257
+ { pubkey: PERENA_VAULT_USDC_TRANSIT, isSigner: false, isWritable: true }, // 8: USDC transit
258
+ { pubkey: PERENA_FEE_COLLECTOR, isSigner: false, isWritable: true }, // 9: fee collector
259
+ { pubkey: PERENA_VAULT_METADATA, isSigner: false, isWritable: true }, // 10: fee secondary
260
+ { pubkey: SystemProgram.programId, isSigner: false, isWritable: false }, // 11: system program
261
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 12: token program
262
+ { pubkey: TOKEN_PROGRAM_ID, isSigner: false, isWritable: false }, // 13: token program (dup)
263
+ { pubkey: ATA_PROGRAM_ID, isSigner: false, isWritable: false }, // 14: ATA program
264
+ { pubkey: PERENA_MARGINFI_PROGRAM, isSigner: false, isWritable: false }, // 15: marginfi program
265
+ { pubkey: PERENA_MARGINFI_GROUP, isSigner: false, isWritable: true }, // 16: marginfi group
266
+ { pubkey: PERENA_MARGINFI_ACCOUNT, isSigner: false, isWritable: true }, // 17: marginfi account
267
+ { pubkey: PERENA_MARGINFI_BANK, isSigner: false, isWritable: true }, // 18: marginfi bank
268
+ { pubkey: PERENA_MARGINFI_BANK_AUTHORITY, isSigner: false, isWritable: false }, // 19: marginfi bank authority
269
+ { pubkey: PERENA_MARGINFI_BANK_LIQUIDITY_VAULT, isSigner: false, isWritable: true }, // 20: marginfi bank liquidity vault
270
+ { pubkey: PERENA_MARGINFI_BANK, isSigner: false, isWritable: true }, // 21: marginfi bank (oracle-paired bank for balance slot 1)
271
+ { pubkey: PERENA_MARGINFI_ORACLE, isSigner: false, isWritable: false }, // 22: marginfi USDC oracle
272
+ { pubkey: PERENA_PROGRAM_ID, isSigner: false, isWritable: false }, // 23: perena program (CPI resolution)
273
+ ];
274
+ }
275
+ //# sourceMappingURL=vaultAccounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaultAccounts.js","sourceRoot":"","sources":["../../src/vault/vaultAccounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { PublicKey, Transaction, VersionedTransaction } from "@solana/web3.js";
2
+ /**
3
+ * Minimal wallet capability the deposit/borrow flow needs: a public key plus the
4
+ * ability to sign a (legacy or versioned) transaction. Both the app's
5
+ * wallet-adapter `WalletContextState` and a raw injected provider (window.solana /
6
+ * window.solflare) structurally satisfy this, so neither consumer needs a cast.
7
+ */
8
+ export interface HobbaSigner {
9
+ publicKey: PublicKey | null;
10
+ signTransaction?: <T extends Transaction | VersionedTransaction>(tx: T) => Promise<T>;
11
+ }
12
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEpF;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,CAAC,CAAC,SAAS,WAAW,GAAG,oBAAoB,EAAE,EAAE,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;CACvF"}
package/dist/wallet.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,63 @@
1
+ {
2
+ "name": "@hobba-io/core",
3
+ "version": "0.1.0",
4
+ "description": "Hobba SDK — shared on-chain logic (deposit/borrow flows, position reads, PDAs, constants, account resolvers) for the Hobba app, the embeddable widget and partner integrations.",
5
+ "type": "module",
6
+ "license": "ISC",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Hobba-io/Hobba.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "sideEffects": false,
13
+ "files": [
14
+ "dist",
15
+ "src"
16
+ ],
17
+ "exports": {
18
+ ".": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "./rates": {
23
+ "types": "./dist/rates/index.d.ts",
24
+ "default": "./dist/rates/index.js"
25
+ },
26
+ "./idl/hobba.json": "./dist/idl/hobba.json",
27
+ "./*": {
28
+ "types": "./dist/*.d.ts",
29
+ "default": "./dist/*.js"
30
+ }
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "scripts": {
36
+ "build": "rm -rf dist && tsc -p tsconfig.build.json && mkdir -p dist/idl && cp src/idl/hobba.json dist/idl/hobba.json",
37
+ "typecheck": "tsc --noEmit",
38
+ "prepublishOnly": "npm run typecheck && npm run build",
39
+ "release:patch": "npm version patch && npm publish"
40
+ },
41
+ "peerDependencies": {
42
+ "@coral-xyz/anchor": "^0.32.1",
43
+ "@kamino-finance/klend-sdk": "^7.3.20",
44
+ "@solana/spl-token": "^0.4.14",
45
+ "@solana/web3.js": "^1.98.4",
46
+ "bn.js": "^5.2.3"
47
+ },
48
+ "peerDependenciesMeta": {
49
+ "@kamino-finance/klend-sdk": {
50
+ "optional": true
51
+ }
52
+ },
53
+ "devDependencies": {
54
+ "@coral-xyz/anchor": "^0.32.1",
55
+ "@kamino-finance/klend-sdk": "^7.3.20",
56
+ "@solana/spl-token": "^0.4.14",
57
+ "@solana/web3.js": "^1.98.4",
58
+ "@types/bn.js": "^5.1.0",
59
+ "bn.js": "^5.2.3",
60
+ "tsx": "^4.23.0",
61
+ "typescript": "^5.7.3"
62
+ }
63
+ }
@@ -0,0 +1,69 @@
1
+ import BN from "bn.js";
2
+ import { PublicKey } from "@solana/web3.js";
3
+ import { SOL_MINT } from "./constants";
4
+
5
+ const CBBTC_DECIMALS = 8;
6
+ const SOL_DECIMALS = 9;
7
+ const USDC_DECIMALS = 6;
8
+
9
+ export function formatCbBtc(lamports: BN | number | string): string {
10
+ const val = typeof lamports === "number" ? lamports : Number(lamports.toString());
11
+ return (val / 10 ** CBBTC_DECIMALS).toFixed(CBBTC_DECIMALS);
12
+ }
13
+
14
+ export function parseCbBtc(display: string): BN {
15
+ const num = parseFloat(display);
16
+ return new BN(Math.round(num * 10 ** CBBTC_DECIMALS));
17
+ }
18
+
19
+ export function formatSolShort(lamports: BN | number | string): string {
20
+ const val = typeof lamports === "number" ? lamports : Number(lamports.toString());
21
+ return (val / 10 ** SOL_DECIMALS).toFixed(4);
22
+ }
23
+
24
+ export function parseSol(display: string): BN {
25
+ const num = parseFloat(display);
26
+ return new BN(Math.round(num * 10 ** SOL_DECIMALS));
27
+ }
28
+
29
+ export function formatUsdc(lamports: BN | number | string): string {
30
+ const val = typeof lamports === "number" ? lamports : Number(lamports.toString());
31
+ return (val / 10 ** USDC_DECIMALS).toFixed(USDC_DECIMALS);
32
+ }
33
+
34
+ export function parseUsdc(display: string): BN {
35
+ const num = parseFloat(display);
36
+ return new BN(Math.round(num * 10 ** USDC_DECIMALS));
37
+ }
38
+
39
+ export function formatUsdcShort(lamports: BN | number | string): string {
40
+ const val = typeof lamports === "number" ? lamports : Number(lamports.toString());
41
+ return (val / 10 ** USDC_DECIMALS).toFixed(2);
42
+ }
43
+
44
+ export function formatCbBtcShort(lamports: BN | number | string): string {
45
+ const val = typeof lamports === "number" ? lamports : Number(lamports.toString());
46
+ return (val / 10 ** CBBTC_DECIMALS).toFixed(6);
47
+ }
48
+
49
+ // --- Generic collateral helpers ---
50
+
51
+ export function collateralLabel(mint: PublicKey): string {
52
+ if (mint.equals(SOL_MINT)) return "SOL";
53
+ return "cbBTC";
54
+ }
55
+
56
+ export function collateralDecimals(mint: PublicKey): number {
57
+ if (mint.equals(SOL_MINT)) return SOL_DECIMALS;
58
+ return CBBTC_DECIMALS;
59
+ }
60
+
61
+ export function formatCollateralShort(lamports: BN | number | string, mint: PublicKey): string {
62
+ if (mint.equals(SOL_MINT)) return formatSolShort(lamports);
63
+ return formatCbBtcShort(lamports);
64
+ }
65
+
66
+ export function parseCollateral(display: string, mint: PublicKey): BN {
67
+ if (mint.equals(SOL_MINT)) return parseSol(display);
68
+ return parseCbBtc(display);
69
+ }