@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,263 @@
1
+ import { PublicKey } from "@solana/web3.js";
2
+
3
+ // Program IDs
4
+ export const PROGRAM_ID_SURFPOOL = new PublicKey("3X2QyJ4Da5b5VaZ6mMcUgUm4V2t8emLrSeRwM4i2YNYH");
5
+ export const PROGRAM_ID_STAGING = new PublicKey("soBBAHNhFyWF4QBCK9BJLVkX6d6NZt37ozNaPV5aq3H");
6
+ export const PROGRAM_ID_MAINNET = new PublicKey("Hobbakk1LmW2DhE4nAKnCeU1iK7V7pKHTq3ihaE2i8qG");
7
+ export const PROGRAM_ID =
8
+ process.env.NEXT_PUBLIC_MAINNET === "true" ? PROGRAM_ID_MAINNET :
9
+ process.env.NEXT_PUBLIC_STAGING === "true" ? PROGRAM_ID_STAGING :
10
+ PROGRAM_ID_SURFPOOL;
11
+ export const KAMINO_LENDING_PROGRAM_ID = new PublicKey("KLend2g3cP87fffoy8q1mQqGKjrxjC8boSyAYavgmjD");
12
+ export const KVAULT_PROGRAM_ID = new PublicKey("KvauGMspG5k6rtzrqqn7WNn3oZdyKqLKwK2XWQ8FLjd");
13
+ export const FARMS_PROGRAM = new PublicKey("FarmsPZpWu9i7Kky8tPN37rs2TpmMrAZrC7S7vJa91Hr");
14
+ export const JUPLEND_PROGRAM = new PublicKey("jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi");
15
+
16
+ // Perena Vault
17
+ export const PERENA_PROGRAM_ID = new PublicKey("save8RQVPMWNTzU18t3GBvBkN9hT7jsGjiCQ28FpD9H");
18
+ export const STAR_USDC_MINT = new PublicKey("star9agSpjiFe3M49B3RniVU4CMBBEK3Qnaqn3RGiFM");
19
+ export const PERENA_VAULT_STATE = new PublicKey("sM6P4mh53CnG4faN4Fo3seY7wMSAiHdy8o6gKjwQF7A");
20
+ export const PERENA_VAULT_AUTHORITY = new PublicKey("3bZ1qY6wfzyDH7QMPiRKLr6k8p1asdtyjvJyJsJBdv23");
21
+ export const PERENA_POOL_CONFIG = new PublicKey("CmKFP4YJg5QpAryUm9xk5QD611bccYMzZvpvQDJkMwt6");
22
+ export const PERENA_VAULT_USDC_TRANSIT = new PublicKey("HvG7HSrNHVAcjzgwt3UVtnY9srkrY7qnMG4zS1SnPQT2");
23
+ export const PERENA_VAULT_METADATA = new PublicKey("3msJbxNbSeosztbNEB1eFPitMFnP8ogCszegPUswipdL");
24
+ export const PERENA_FEE_COLLECTOR = new PublicKey("6tqLkhbqJSx4KG616VhNCvsaFqcDPok7wdbzU2DmEAub");
25
+ // MarginFi accounts used by Perena
26
+ export const PERENA_MARGINFI_PROGRAM = new PublicKey("MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA");
27
+ export const PERENA_MARGINFI_GROUP = new PublicKey("4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8");
28
+ export const PERENA_MARGINFI_ACCOUNT = new PublicKey("C8JLFVMuSFFFmDX2AEyMmP6zRXtXwJgptHeBUrnj4zLE");
29
+ export const PERENA_MARGINFI_BANK = new PublicKey("2s37akK2eyBbp8DZgCm7RtsaEz8eJP3Nxd4urLHQv7yB");
30
+ export const PERENA_MARGINFI_BANK_AUTHORITY = new PublicKey("3uxNepDbmkDNq6JhRja5Z8QwbTrfmkKP8AKZV5chYDGG");
31
+ export const PERENA_MARGINFI_BANK_LIQUIDITY_VAULT = new PublicKey("7jaiZR5Sk8hdYN9MxTpczTcwbWpb5WEoxSANuUwveuat");
32
+ export const PERENA_MARGINFI_ORACLE = new PublicKey("Dpw1EAVrSB1ibxiDQyTAW6Zip3J4Btk2x4SgApQCeFbX");
33
+
34
+ // Vault provider constants
35
+ export const VAULT_PROVIDER_KVAULT = 0;
36
+ export const VAULT_PROVIDER_PERENA = 1;
37
+
38
+ // Lending provider constants (stored in userState.lendingProvider)
39
+ export const LENDING_PROVIDER_KAMINO: number = 0;
40
+ export const LENDING_PROVIDER_JUPLEND: number = 1;
41
+ // Default for newly-initialized user accounts
42
+ export const DEFAULT_LENDING_PROVIDER: number = LENDING_PROVIDER_JUPLEND;
43
+ export const JUPLEND_LIQUIDITY_PROGRAM = new PublicKey("jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC");
44
+ export const JUPLEND_ORACLE_PROGRAM = new PublicKey("jupnw4B6Eqs7ft6rxpzYLJZYSnrpRgPcr589n5Kv4oc");
45
+ export const ATA_PROGRAM_ID = new PublicKey("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL");
46
+ export const METAPLEX_PROGRAM = new PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
47
+
48
+ // Mints
49
+ export const CBBTC_MINT = new PublicKey("cbbtcf3aa214zXHbiAZQwf4122FBYbraNdFqgw4iMij");
50
+ export const SOL_MINT = new PublicKey("So11111111111111111111111111111111111111112");
51
+ export const USDC_MINT = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
52
+
53
+ // Kamino Lending Markets
54
+ export const MAIN_MARKET = new PublicKey("7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF");
55
+ export const XSTOCKS_MARKET = new PublicKey("5wJeMrUYECGq41fxRESKALVcHnNX26TAWy4W98yULsua");
56
+
57
+ // XStocks Reserve addresses
58
+ export const XSTOCKS_CBBTC_RESERVE = new PublicKey("5AWpVYJvNASoUM8toSDQRcVyA9dvoUuFj5qNx9v32bjj");
59
+ export const XSTOCKS_USDC_RESERVE = new PublicKey("97zoywd8mPZsGTg8q1wdD2Wgkdrs2tqusp1Qqcxbyj7E");
60
+ export const XSTOCKS_CBBTC_LIQUIDITY_SUPPLY = new PublicKey("CVfVcPUCj8KiQ1zDFhSrLBjXC1TKCwisvNLdKSPTCtUc");
61
+ export const XSTOCKS_CBBTC_COLLATERAL_MINT = new PublicKey("5GcFF6eYtTVWHi1oexFB6xt771ZRWP1txeMXKSGtkoPF");
62
+ export const XSTOCKS_CBBTC_COLLATERAL_SUPPLY = new PublicKey("JXDy94Qha1n2NKqNn1nC9QHHatmtbW2mM9VTse7TQut");
63
+ export const XSTOCKS_USDC_LIQUIDITY_SUPPLY = new PublicKey("72Gz8BM8vDr5zdeHmFB5A2ptNZYfVgDuw5LDkNwGDdTA");
64
+ export const XSTOCKS_USDC_FEE_VAULT = new PublicKey("DPHXY8LbH4cPPAgBDNnrU7B2XwmhWcBZ9wTBi3uZpfh4");
65
+ export const XSTOCKS_USDC_RESERVE_FARM_DEBT = new PublicKey("82eHAjSXZEyA3UpBxTjVYXF4QJmAEtLR6kvWXQca7mqd");
66
+
67
+ // cbBTC Reserve (Main Market)
68
+ export const CBBTC_RESERVE = new PublicKey("37Jk2zkz23vkAYBT66HM2gaqJuNg2nYLsCreQAVt5MWK");
69
+ export const CBBTC_LIQUIDITY_SUPPLY = new PublicKey("BcPpdmg4vxXSenvkp12XbVp6XnzwKChnzfNa6cQXLW96");
70
+ export const CBBTC_FEE_VAULT = new PublicKey("7NSusA45pkEApHBVqS5CqnWW9WR98uEUT6d5hDPdgD8A");
71
+ export const CBBTC_COLLATERAL_MINT = new PublicKey("B3ieCZaTUp8qM9zbPqH2WDhzWpwrvHB2Q2aWB25DW97U");
72
+ export const CBBTC_COLLATERAL_SUPPLY = new PublicKey("hY6yiVepYxxv6dpzayYQ9LnhkX7yrFFpep3oxFRKRgi");
73
+ export const CBBTC_RESERVE_FARM_COLLATERAL = new PublicKey("9CinLHLAcMkzs4Ji8pwS2qwyz1LU46A4Ry7BNLGLubxs");
74
+
75
+ // SOL Reserve (Main Market)
76
+ export const SOL_RESERVE = new PublicKey("d4A2prbA2whesmvHaL88BH6Ewn5N4bTSU2Ze8P6Bc4Q");
77
+ export const SOL_LIQUIDITY_SUPPLY = new PublicKey("GafNuUXj9rxGLn4y79dPu6MHSuPWeJR6UtTWuexpGh3U");
78
+ export const SOL_FEE_VAULT = new PublicKey("3JNof8s453bwG5UqiXBLJc77NRQXezYYEBbk3fqnoKph");
79
+ export const SOL_COLLATERAL_MINT = new PublicKey("2UywZrUdyqs5vDchy7fKQJKau2RVyuzBev2XKGPDSiX1");
80
+ export const SOL_COLLATERAL_SUPPLY = new PublicKey("8NXMyRD91p3nof61BTkJvrfpGTASHygz1cUvc3HvwyGS");
81
+ export const SOL_RESERVE_FARM_COLLATERAL = new PublicKey("955xWFhSDcDiUgUr4sBRtCpTLiMd4H5uZLAmgtP3R3sX");
82
+
83
+ // USDC Reserve
84
+ export const USDC_RESERVE = new PublicKey("D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59");
85
+ export const USDC_LIQUIDITY_SUPPLY = new PublicKey("Bgq7trRgVMeq33yt235zM2onQ4bRDBsY5EWiTetF4qw6");
86
+ export const USDC_FEE_VAULT = new PublicKey("BbDUrk1bVtSixgQsPLBJFZEF7mwGstnD5joA1WzYvYFX");
87
+ export const USDC_COLLATERAL_MINT = new PublicKey("B8V6WVjPxW1UGwVDfxH2d2r8SyT4cqn7dQRK6XneVa7D");
88
+ export const USDC_COLLATERAL_SUPPLY = new PublicKey("3DzjXRfxRm6iejfyyMynR4tScddaanrePJ1NJU2XnPPL");
89
+
90
+ // Oracle
91
+ export const SCOPE_PRICES = new PublicKey("3t4JZcueEzTbVP6kLxXrL3VpWx45jDer4eqysweBchNH");
92
+
93
+ // KVault (Allez USDC)
94
+ export const ALLEZ_USDC_VAULT = new PublicKey("A1USdzqDHmw5oz97AkqAGLxEQZfFjASZFuy4T6Qdvnpo");
95
+ export const ALLEZ_USDC_SHARES_MINT = new PublicKey("BDh5h1uqhdL3pdCcTB1AEc2dyRsorDx9fF8Y72H1XZu8");
96
+ export const ALLEZ_USDC_TOKEN_VAULT = new PublicKey("H4GHPfd4vxCEmor13P3HBS1AKawE2Mhv6fyWLaswn8d5");
97
+ export const ALLEZ_USDC_VAULT_AUTHORITY = new PublicKey("GhxheH2FYN9pDvjpAKYgwVmLRGGPsw79v2DSQLQu9o7T");
98
+ export const VAULT_LOOKUP_TABLE = new PublicKey("3hi1c3L11vL446LJotFZNXHp1YZSLQ867SeQJUc9b5t1");
99
+
100
+ // Vault withdraw addresses
101
+ export const CTOKEN_VAULT_MAIN_USDC = new PublicKey("5ADikyCXfgM7A3h2QNJwtaXV1XAMQv6ywHZcAH2fJRrK");
102
+ export const LENDING_MARKET_AUTHORITY_MAIN = new PublicKey("9DrvZvyWh1HuAoZxvYWMvkf2XCzryCpGgHqrMjyDWpmo");
103
+
104
+ // USDC Prime Vault
105
+ export const USDC_PRIME_VAULT = new PublicKey("HDsayqAsDWy3QvANGqh2yNraqcD8Fnjgh73Mhb3WRS5E");
106
+ export const USDC_PRIME_SHARES_MINT = new PublicKey("7D8C5pDFxug58L9zkwK7bCiDg4kD4AygzbcZUmf5usHS");
107
+ export const USDC_PRIME_TOKEN_VAULT = new PublicKey("CKTEDx5z19CntAB9B66AxuS98S1NuCgMvfpsew7TQwi");
108
+ export const USDC_PRIME_VAULT_AUTHORITY = new PublicKey("AyY6VCkHfTWdFs7SqBbu6AnCqLUhgzVHBzW3WcJu5Jc8");
109
+ export const USDC_PRIME_LOOKUP_TABLE = new PublicKey("9p2oT9J6BojHigd3V5qXzrwsQf4dtgMgLxtrzLVR3rwu");
110
+
111
+ // Altcoin Market
112
+ export const ALTCOIN_MARKET = new PublicKey("DxXdAyU3kCjnyggvHmY5nAwg5cRbbmdyX3npfDMjjMek");
113
+ export const ALTCOIN_USDC_RESERVE = new PublicKey("Ga4rZytCpq1unD4DbEJ5bkHeUz9g3oh9AAFEi6vSauXp");
114
+ export const ALTCOIN_CTOKEN_VAULT = new PublicKey("5rGkiF4Jf1rPTJ6nazBgcjewVktXhagwcw5Nux7GccRi");
115
+ export const ALTCOIN_LENDING_MARKET_AUTHORITY = new PublicKey("B9spsrMK6pJicYtukaZzDyzsUQLgc3jbx5gHVwdDxb6y");
116
+ export const ALTCOIN_LIQUIDITY_SUPPLY = new PublicKey("GENey8es3EgGiNTM8H8gzA3vf98haQF8LHiYFyErjgrv");
117
+ export const ALTCOIN_CTOKEN_MINT = new PublicKey("32XLsweyeQwWgLKRVAzS72nxHGU1JmmNQQZ3C3q6fBjJ");
118
+
119
+ // JLP Market
120
+ export const JLP_MARKET = new PublicKey("GMqmFygF5iSm5nkckYU6tieggFcR42SyjkkhK5rswFRs");
121
+ export const JLP_USDC_RESERVE = new PublicKey("9FRZvAsjDJ6WM8BJ2S45h9PoDCLAq8DNY9zZDX7MyGzT");
122
+
123
+ // RockawayRWA Vault
124
+ export const ROCKAWAY_RWA_VAULT = new PublicKey("DWSXb18xZApz29vnQpgR2m6MynCT7PznaXt7Ut7M7KaP");
125
+ export const ROCKAWAY_RWA_SHARES_MINT = new PublicKey("DgHN3q3dSYAchNX7V3D4aYiTWMx8RHTgHbfPiwiqBkE9");
126
+ export const ROCKAWAY_RWA_TOKEN_VAULT = new PublicKey("6ea6GorjfT2SmUH8HSwg4LLae5RCqVVEYzcznBJEge9e");
127
+ export const ROCKAWAY_RWA_VAULT_AUTHORITY = new PublicKey("D6hDbSjooxfjXrfKo7xBKVFeoaJrtnXY75uAbxeFbPgU");
128
+ export const ROCKAWAY_RWA_LOOKUP_TABLE = new PublicKey("GzavHphVhGp9PERAfT3NcQwFesevQD386puHtVtsbq6m");
129
+
130
+ // RWA Market
131
+ export const RWA_MARKET = new PublicKey("9Y7uwXgQ68mGqRtZfuFaP4hc4fxeJ7cE9zTtqTxVhfGU");
132
+ export const RWA_MARKET_AUTHORITY = new PublicKey("CzEcTo66owDYLH1ieFR64u4gV5YT3FSLEg8G61nAvuP1");
133
+ export const RWA_USDC_RESERVE = new PublicKey("6XdN3zXeoYKgfSeZb8h1LpiEkUXRJ3CbimE5FJ35XFBP");
134
+ export const RWA_CTOKEN_VAULT = new PublicKey("5BDugAB1RXHkxFhL1oye4o2zbu8j8uHb3xDrzm4Evvuv");
135
+ export const RWA_LIQUIDITY_SUPPLY = new PublicKey("EetQRys9azm1GsK476sr3R3W2hw79eUbBCmvGt83LoNc");
136
+ export const RWA_COLLATERAL_MINT = new PublicKey("GresxT3Ditj5N9sHi6qTBoy96tctJ4HknUX2tCMiri3M");
137
+
138
+ // JupLend addresses
139
+ export const JUPLEND_VAULT_CONFIG = new PublicKey("2L6xsj9zKbvxALDroGQHmPx2kCw8RqZ8yru4zceUoB6k");
140
+ export const JUPLEND_VAULT_STATE = new PublicKey("HnSMEmypWgJ1a6JNnBycccsBeQQvqNKphgSMquCaFiy9");
141
+ export const JUPLEND_ORACLE = new PublicKey("BU4FbopNHBseTnrck5HyvocWN7PcS9SMhrKTNLagzx3z");
142
+ export const JUPLEND_POOL_PDA = new PublicKey("4Pgx2M7ZsDRvXU4CitoT94EJUohxqSk3eBuLsoz834dm");
143
+ export const JUPLEND_SUPPLY_RESERVES_LIQUIDITY = new PublicKey("DALcPrc81yGgwqaBuuCRXtEU8PHFLv2xEgWyhnfvbVKH");
144
+ export const JUPLEND_BORROW_RESERVES_LIQUIDITY = new PublicKey("94vK29npVbyRHXH63rRcTiSr26SFhrQTzbpNJuhQEDu");
145
+ export const JUPLEND_VAULT_SUPPLY_POSITION = new PublicKey("GzsJrAYkxPbYimVA98yVMRWABrHH8F49MK49KVPzncdR");
146
+ export const JUPLEND_VAULT_BORROW_POSITION = new PublicKey("3NQ98P7E8pUu3YjFymuEZMnQzGdBci6hKYEKcUneskYX");
147
+ export const JUPLEND_SUPPLY_RATE_MODEL = new PublicKey("EqpNebkM6hdhPGQw7wMkC5ctCjja8z7Z7DCt2K1tuMPu");
148
+ export const JUPLEND_BORROW_RATE_MODEL = new PublicKey("5pjzT5dFTsXcwixoab1QDLvZQvpYJxJeBphkyfHGn688");
149
+ export const JUPLEND_VAULT_SUPPLY_TOKEN_ACCOUNT = new PublicKey("E7VPMhsjvVXpGVFMJRJgJjRmc5bhERpRjtYEbmBhWNcF");
150
+ export const JUPLEND_VAULT_BORROW_TOKEN_ACCOUNT = new PublicKey("BmkUoKMFYBxNSzWXyUjyMJjMAaVz4d8ZnxwwmhDCUXFB");
151
+ export const JUPLEND_LIQUIDITY = new PublicKey("7s1da8DduuBFqGra5bJBjpnvL5E9mGzCuMk1Qkh4or2Z");
152
+ export const JUPLEND_ORACLE_SOURCE = new PublicKey("4cSM2e6rvbGQUFiJbqytoVMi5GgghSMr8LwVrT9VPSPo");
153
+ export const JUPLEND_BRANCH = new PublicKey("Ctz7yPaqtvyAu7eHrM9U9AKjNoKuS35nT8smY8FutAMe");
154
+ export const JUPLEND_TICK_0 = new PublicKey("GYA5nRHDMsTuf6sQ1dQYpS9ktoy6UXuuV767spLMT919");
155
+ export const JUPLEND_TICK_1 = new PublicKey("ASTTBXCW2Uqpko4VjZVx2yY917oKA3nim2QnqpzuhYnT");
156
+ export const JUPLEND_NEW_BRANCH = new PublicKey("HgN61oe85k7Yrw93ZA7Bx4GkEhmzv446dD9NV5qx5DWR");
157
+ // Position tick PDAs (from SDK / mainnet — used as defaults for operate remaining accounts)
158
+ export const JUPLEND_POS_TICK_CURRENT = new PublicKey("CUsGshjra7qaj2eCDfWHDgLkXWNQa1P9s9nBMM9sHAkV");
159
+ export const JUPLEND_POS_TICK_FINAL = new PublicKey("EFdXq8G1CgszjZtrcYBDTW6twq8ZbLbusStFruxUBcnP");
160
+ export const JUPLEND_POS_TICK_ID_CURRENT = new PublicKey("CJvFuAcL7CKfPJfJoD2BT9R7CHG3ttTKMzxxyDcUkqWH");
161
+ export const JUPLEND_POS_TICK_ID_FINAL = new PublicKey("5zAx5YDifpHSdK2BguH2hvxUVVzL2qBeFwBSAtxySpF1");
162
+ export const JUPLEND_VAULT_ID = 11;
163
+ export const JUPLEND_SOL_VAULT_ID = 1;
164
+ export const JUPLEND_MAX_TICK = 16383;
165
+
166
+ // Resolve JupLend vault ID from collateral mint
167
+ export function resolveJuplendVaultId(collateralMint: PublicKey): number {
168
+ if (collateralMint.equals(SOL_MINT)) return JUPLEND_SOL_VAULT_ID;
169
+ if (collateralMint.equals(CBBTC_MINT)) return JUPLEND_VAULT_ID;
170
+ throw new Error(`Unsupported JupLend collateral mint: ${collateralMint.toBase58()}`);
171
+ }
172
+
173
+ // Derive JupLend vault config PDA for any vault ID
174
+ export function deriveJuplendVaultConfigPda(vaultId: number): PublicKey {
175
+ const buf = Buffer.alloc(2);
176
+ buf.writeUInt16LE(vaultId);
177
+ return PublicKey.findProgramAddressSync(
178
+ [Buffer.from("vault_config"), buf],
179
+ JUPLEND_PROGRAM
180
+ )[0];
181
+ }
182
+
183
+ // Derive JupLend vault state PDA for any vault ID
184
+ export function deriveJuplendVaultStatePda(vaultId: number): PublicKey {
185
+ const buf = Buffer.alloc(2);
186
+ buf.writeUInt16LE(vaultId);
187
+ return PublicKey.findProgramAddressSync(
188
+ [Buffer.from("vault_state"), buf],
189
+ JUPLEND_PROGRAM
190
+ )[0];
191
+ }
192
+
193
+ // Refresh instruction discriminators
194
+ export const REFRESH_RESERVE_DISCRIMINATOR = Buffer.from([2, 218, 138, 235, 79, 201, 25, 102]);
195
+ export const REFRESH_OBLIGATION_DISCRIMINATOR = Buffer.from([33, 132, 147, 228, 151, 192, 72, 89]);
196
+
197
+ // UserState layout offsets
198
+ // 8 (disc) + 1 (version) + 32 (owner) + 32 (obligation) + 32 (lending_market) + 1 (lending_provider) + 1 (bump)
199
+ export const DEPOSITED_TO_VAULT_OFFSET = 8 + 1 + 32 + 32 + 32 + 1 + 1;
200
+ export const CURRENT_VAULT_OFFSET = DEPOSITED_TO_VAULT_OFFSET + 8;
201
+ export const VAULT_PROVIDER_OFFSET = CURRENT_VAULT_OFFSET + 32;
202
+ export const COLLATERAL_MINT_OFFSET = VAULT_PROVIDER_OFFSET + 1;
203
+
204
+ // Obligation parsing
205
+ export const BORROWS_OFFSET = 1208;
206
+ export const BORROW_ENTRY_SIZE = 200;
207
+ export const BORROWED_AMOUNT_SF_OFFSET = 88;
208
+
209
+ // KVault remaining accounts (reserves + markets) for allez (A1USd…) vault operations.
210
+ // Synced to the live vault_allocation_strategy: 10 active reserves in slot order,
211
+ // followed by their lending markets (deduplicated). Re-derive with
212
+ // scripts/get-vault-reserves.ts if the vault rebalances (adds/removes/reorders
213
+ // reserves), or KVault deposit fails with ReserveAccountAndKeyMismatch (0x1b62).
214
+ export const KVAULT_REMAINING_ACCOUNTS = [
215
+ // Reserves (writable)
216
+ { pubkey: new PublicKey("D6q6wuQSrifJKZYpR1M8R4YawnLDtDsMmWM1NbBmgJ59"), isSigner: false, isWritable: true },
217
+ { pubkey: new PublicKey("Ga4rZytCpq1unD4DbEJ5bkHeUz9g3oh9AAFEi6vSauXp"), isSigner: false, isWritable: true },
218
+ { pubkey: new PublicKey("9FRZvAsjDJ6WM8BJ2S45h9PoDCLAq8DNY9zZDX7MyGzT"), isSigner: false, isWritable: true },
219
+ { pubkey: new PublicKey("8trJaNUfkP9pNgrwzByfsuwVtZ5TmZpq568UkCpjFWbi"), isSigner: false, isWritable: true },
220
+ { pubkey: new PublicKey("8Lvi1DFPoAGPQ25qpRKzzRaSAnWdeVZqt9XmEapm8uLt"), isSigner: false, isWritable: true },
221
+ { pubkey: new PublicKey("Atj6UREVWa7WxbF2EMKNyfmYUY1U1txughe2gjhcPDCo"), isSigner: false, isWritable: true },
222
+ { pubkey: new PublicKey("9GJ9GBRwCp4pHmWrQ43L5xpc9Vykg7jnfwcFGN8FoHYu"), isSigner: false, isWritable: true },
223
+ { pubkey: new PublicKey("DD4RN8t37nmw7EANW37ejdDEuFz9Tmf3TZTN7jxKsE8i"), isSigner: false, isWritable: true },
224
+ { pubkey: new PublicKey("4QKFoFDzNFnvfkzVazABbCEfMwd3y1pZqUVzmpnkCphj"), isSigner: false, isWritable: true },
225
+ { pubkey: new PublicKey("AYL4LMc4ZCVyq3Z7XPJGWDM4H9PiWjqXAAuuHBEGVR2Z"), isSigner: false, isWritable: true },
226
+ // Lending Markets (readonly)
227
+ { pubkey: new PublicKey("7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF"), isSigner: false, isWritable: false },
228
+ { pubkey: new PublicKey("DxXdAyU3kCjnyggvHmY5nAwg5cRbbmdyX3npfDMjjMek"), isSigner: false, isWritable: false },
229
+ { pubkey: new PublicKey("GMqmFygF5iSm5nkckYU6tieggFcR42SyjkkhK5rswFRs"), isSigner: false, isWritable: false },
230
+ { pubkey: new PublicKey("B7a2Dmdnfg8zfZX2814d6Xo6ctxs22jnTuCcjTq5KcPD"), isSigner: false, isWritable: false },
231
+ { pubkey: new PublicKey("47tfyEG9SsdEnUm9cw5kY9BXngQGqu3LBoop9j5uTAv8"), isSigner: false, isWritable: false },
232
+ { pubkey: new PublicKey("6WEGfej9B9wjxRs6t4BYpb9iCXd8CpTpJ8fVSNzHCC5y"), isSigner: false, isWritable: false },
233
+ { pubkey: new PublicKey("CqAoLuqWtavaVE8deBjMKe8ZfSt9ghR6Vb8nfsyabyHA"), isSigner: false, isWritable: false },
234
+ { pubkey: new PublicKey("FteaGMVCLDF4eonrTiQkRQ5kby5ohwCfaMD2mNiPkZL7"), isSigner: false, isWritable: false },
235
+ { pubkey: new PublicKey("52FSGeeokLpgvgAMdqxyt5Hoc2TbUYj5b8yxrEdZ37Vf"), isSigner: false, isWritable: false },
236
+ ];
237
+
238
+ // Prime vault batch accounts (4 reserves + 4 markets, verified from mainnet deposit txns)
239
+ export const PRIME_BATCH_ACCOUNTS = [
240
+ { pubkey: ALTCOIN_USDC_RESERVE, isSigner: false, isWritable: true },
241
+ { pubkey: USDC_RESERVE, isSigner: false, isWritable: true },
242
+ { pubkey: JLP_USDC_RESERVE, isSigner: false, isWritable: true },
243
+ { pubkey: new PublicKey("Atj6UREVWa7WxbF2EMKNyfmYUY1U1txughe2gjhcPDCo"), isSigner: false, isWritable: true },
244
+ { pubkey: ALTCOIN_MARKET, isSigner: false, isWritable: false },
245
+ { pubkey: MAIN_MARKET, isSigner: false, isWritable: false },
246
+ { pubkey: JLP_MARKET, isSigner: false, isWritable: false },
247
+ { pubkey: new PublicKey("6WEGfej9B9wjxRs6t4BYpb9iCXd8CpTpJ8fVSNzHCC5y"), isSigner: false, isWritable: false },
248
+ ];
249
+
250
+ // Rockaway batch accounts — 6 active reserves + 4 unique markets, synced to the
251
+ // live vault_allocation_strategy (re-derive like KVAULT_REMAINING_ACCOUNTS above)
252
+ export const ROCKAWAY_BATCH_ACCOUNTS = [
253
+ { pubkey: RWA_USDC_RESERVE, isSigner: false, isWritable: true },
254
+ { pubkey: new PublicKey("4QKFoFDzNFnvfkzVazABbCEfMwd3y1pZqUVzmpnkCphj"), isSigner: false, isWritable: true },
255
+ { pubkey: new PublicKey("AYL4LMc4ZCVyq3Z7XPJGWDM4H9PiWjqXAAuuHBEGVR2Z"), isSigner: false, isWritable: true },
256
+ { pubkey: new PublicKey("9GJ9GBRwCp4pHmWrQ43L5xpc9Vykg7jnfwcFGN8FoHYu"), isSigner: false, isWritable: true },
257
+ { pubkey: new PublicKey("8Lvi1DFPoAGPQ25qpRKzzRaSAnWdeVZqt9XmEapm8uLt"), isSigner: false, isWritable: true },
258
+ { pubkey: new PublicKey("6kmkjcVrp7RfyRBrfCoKbe6Wss3urVaaB1Lez5kSNHd1"), isSigner: false, isWritable: true },
259
+ { pubkey: RWA_MARKET, isSigner: false, isWritable: false },
260
+ { pubkey: new PublicKey("52FSGeeokLpgvgAMdqxyt5Hoc2TbUYj5b8yxrEdZ37Vf"), isSigner: false, isWritable: false },
261
+ { pubkey: new PublicKey("47tfyEG9SsdEnUm9cw5kY9BXngQGqu3LBoop9j5uTAv8"), isSigner: false, isWritable: false },
262
+ { pubkey: new PublicKey("CqAoLuqWtavaVE8deBjMKe8ZfSt9ghR6Vb8nfsyabyHA"), isSigner: false, isWritable: false },
263
+ ];
package/src/errors.ts ADDED
@@ -0,0 +1,33 @@
1
+ // Shared error classification for Hobba SDK consumers (app, widget, headless).
2
+ // Core's execute flows throw plain Errors with descriptive messages; consumers
3
+ // call `classifyError` to map them onto stable codes for UI copy / telemetry.
4
+
5
+ export type HobbaErrorCode =
6
+ | "WALLET_NOT_CONNECTED"
7
+ | "NOT_ALLOWLISTED"
8
+ | "SIMULATION_FAILED"
9
+ | "SEND_FAILED"
10
+ | "USER_REJECTED"
11
+ | "UNKNOWN";
12
+
13
+ export class HobbaError extends Error {
14
+ code: HobbaErrorCode;
15
+ constructor(code: HobbaErrorCode, message: string, cause?: unknown) {
16
+ super(message);
17
+ this.name = "HobbaError";
18
+ this.code = code;
19
+ (this as any).cause = cause;
20
+ }
21
+ }
22
+
23
+ export function classifyError(e: any): HobbaError {
24
+ if (e instanceof HobbaError) return e;
25
+ const msg: string = e?.message ?? String(e);
26
+ let code: HobbaErrorCode = "UNKNOWN";
27
+ if (/wallet not connected/i.test(msg)) code = "WALLET_NOT_CONNECTED";
28
+ else if (/allowlist/i.test(msg)) code = "NOT_ALLOWLISTED";
29
+ else if (/user rejected|rejected the request|declined/i.test(msg)) code = "USER_REJECTED";
30
+ else if (/simulation failed/i.test(msg)) code = "SIMULATION_FAILED";
31
+ else if (/not confirmed|failed to send|blockhash/i.test(msg)) code = "SEND_FAILED";
32
+ return new HobbaError(code, msg, e);
33
+ }