@kamino-finance/klend-sdk 7.2.6-beta.1 → 7.3.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 (226) hide show
  1. package/README.md +1 -0
  2. package/dist/@codegen/klend/accounts/LendingMarket.d.ts +33 -0
  3. package/dist/@codegen/klend/accounts/LendingMarket.d.ts.map +1 -1
  4. package/dist/@codegen/klend/accounts/LendingMarket.js +24 -2
  5. package/dist/@codegen/klend/accounts/LendingMarket.js.map +1 -1
  6. package/dist/@codegen/klend/errors/custom.d.ts +26 -2
  7. package/dist/@codegen/klend/errors/custom.d.ts.map +1 -1
  8. package/dist/@codegen/klend/errors/custom.js +45 -3
  9. package/dist/@codegen/klend/errors/custom.js.map +1 -1
  10. package/dist/@codegen/klend/instructions/index.d.ts +2 -0
  11. package/dist/@codegen/klend/instructions/index.d.ts.map +1 -1
  12. package/dist/@codegen/klend/instructions/index.js +3 -1
  13. package/dist/@codegen/klend/instructions/index.js.map +1 -1
  14. package/dist/@codegen/klend/instructions/initReserve.d.ts +1 -1
  15. package/dist/@codegen/klend/instructions/initReserve.d.ts.map +1 -1
  16. package/dist/@codegen/klend/instructions/initReserve.js +1 -5
  17. package/dist/@codegen/klend/instructions/initReserve.js.map +1 -1
  18. package/dist/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateralV2.js +1 -1
  19. package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.d.ts +13 -0
  20. package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.d.ts.map +1 -0
  21. package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.js +24 -0
  22. package/dist/@codegen/klend/instructions/seedDepositOnInitReserve.js.map +1 -0
  23. package/dist/@codegen/klend/instructions/withdrawObligationCollateral.js +1 -1
  24. package/dist/@codegen/klend/instructions/withdrawObligationCollateralV2.js +1 -1
  25. package/dist/@codegen/klend/types/ReserveConfig.d.ts +58 -24
  26. package/dist/@codegen/klend/types/ReserveConfig.d.ts.map +1 -1
  27. package/dist/@codegen/klend/types/ReserveConfig.js +40 -18
  28. package/dist/@codegen/klend/types/ReserveConfig.js.map +1 -1
  29. package/dist/@codegen/klend/types/ReserveFees.d.ts +8 -8
  30. package/dist/@codegen/klend/types/ReserveFees.d.ts.map +1 -1
  31. package/dist/@codegen/klend/types/ReserveFees.js +8 -8
  32. package/dist/@codegen/klend/types/ReserveFees.js.map +1 -1
  33. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts +46 -7
  34. package/dist/@codegen/klend/types/UpdateConfigMode.d.ts.map +1 -1
  35. package/dist/@codegen/klend/types/UpdateConfigMode.js +85 -12
  36. package/dist/@codegen/klend/types/UpdateConfigMode.js.map +1 -1
  37. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts +26 -0
  38. package/dist/@codegen/klend/types/UpdateLendingMarketMode.d.ts.map +1 -1
  39. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js +49 -1
  40. package/dist/@codegen/klend/types/UpdateLendingMarketMode.js.map +1 -1
  41. package/dist/@codegen/klend/types/index.d.ts +4 -4
  42. package/dist/@codegen/klend/types/index.d.ts.map +1 -1
  43. package/dist/@codegen/klend/types/index.js.map +1 -1
  44. package/dist/@codegen/kvault/accounts/GlobalConfig.d.ts +32 -0
  45. package/dist/@codegen/kvault/accounts/GlobalConfig.d.ts.map +1 -0
  46. package/dist/@codegen/kvault/accounts/GlobalConfig.js +125 -0
  47. package/dist/@codegen/kvault/accounts/GlobalConfig.js.map +1 -0
  48. package/dist/@codegen/kvault/accounts/Reserve.js +1 -1
  49. package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.d.ts +52 -0
  50. package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.d.ts.map +1 -0
  51. package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.js +127 -0
  52. package/dist/@codegen/kvault/accounts/ReserveWhitelistEntry.js.map +1 -0
  53. package/dist/@codegen/kvault/accounts/VaultState.d.ts +18 -0
  54. package/dist/@codegen/kvault/accounts/VaultState.d.ts.map +1 -1
  55. package/dist/@codegen/kvault/accounts/VaultState.js +39 -1
  56. package/dist/@codegen/kvault/accounts/VaultState.js.map +1 -1
  57. package/dist/@codegen/kvault/accounts/index.d.ts +4 -0
  58. package/dist/@codegen/kvault/accounts/index.d.ts.map +1 -1
  59. package/dist/@codegen/kvault/accounts/index.js +5 -1
  60. package/dist/@codegen/kvault/accounts/index.js.map +1 -1
  61. package/dist/@codegen/kvault/errors/custom.d.ts +61 -5
  62. package/dist/@codegen/kvault/errors/custom.d.ts.map +1 -1
  63. package/dist/@codegen/kvault/errors/custom.js +108 -9
  64. package/dist/@codegen/kvault/errors/custom.js.map +1 -1
  65. package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.d.ts +16 -0
  66. package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.d.ts.map +1 -0
  67. package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.js +66 -0
  68. package/dist/@codegen/kvault/instructions/addUpdateWhitelistedReserve.js.map +1 -0
  69. package/dist/@codegen/kvault/instructions/buy.d.ts +24 -0
  70. package/dist/@codegen/kvault/instructions/buy.d.ts.map +1 -0
  71. package/dist/@codegen/kvault/instructions/buy.js +67 -0
  72. package/dist/@codegen/kvault/instructions/buy.js.map +1 -0
  73. package/dist/@codegen/kvault/instructions/index.d.ts +12 -0
  74. package/dist/@codegen/kvault/instructions/index.d.ts.map +1 -1
  75. package/dist/@codegen/kvault/instructions/index.js +13 -1
  76. package/dist/@codegen/kvault/instructions/index.js.map +1 -1
  77. package/dist/@codegen/kvault/instructions/initGlobalConfig.d.ts +11 -0
  78. package/dist/@codegen/kvault/instructions/initGlobalConfig.d.ts.map +1 -0
  79. package/dist/@codegen/kvault/instructions/initGlobalConfig.js +20 -0
  80. package/dist/@codegen/kvault/instructions/initGlobalConfig.js.map +1 -0
  81. package/dist/@codegen/kvault/instructions/invest.d.ts +2 -1
  82. package/dist/@codegen/kvault/instructions/invest.d.ts.map +1 -1
  83. package/dist/@codegen/kvault/instructions/invest.js +5 -0
  84. package/dist/@codegen/kvault/instructions/invest.js.map +1 -1
  85. package/dist/@codegen/kvault/instructions/sell.d.ts +40 -0
  86. package/dist/@codegen/kvault/instructions/sell.d.ts.map +1 -0
  87. package/dist/@codegen/kvault/instructions/sell.js +98 -0
  88. package/dist/@codegen/kvault/instructions/sell.js.map +1 -0
  89. package/dist/@codegen/kvault/instructions/updateGlobalConfig.d.ts +13 -0
  90. package/dist/@codegen/kvault/instructions/updateGlobalConfig.d.ts.map +1 -0
  91. package/dist/@codegen/kvault/instructions/updateGlobalConfig.js +63 -0
  92. package/dist/@codegen/kvault/instructions/updateGlobalConfig.js.map +1 -0
  93. package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.d.ts +8 -0
  94. package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.d.ts.map +1 -0
  95. package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.js +21 -0
  96. package/dist/@codegen/kvault/instructions/updateGlobalConfigAdmin.js.map +1 -0
  97. package/dist/@codegen/kvault/instructions/updateReserveAllocation.d.ts +2 -1
  98. package/dist/@codegen/kvault/instructions/updateReserveAllocation.d.ts.map +1 -1
  99. package/dist/@codegen/kvault/instructions/updateReserveAllocation.js +5 -0
  100. package/dist/@codegen/kvault/instructions/updateReserveAllocation.js.map +1 -1
  101. package/dist/@codegen/kvault/instructions/updateVaultConfig.d.ts +2 -1
  102. package/dist/@codegen/kvault/instructions/updateVaultConfig.d.ts.map +1 -1
  103. package/dist/@codegen/kvault/instructions/updateVaultConfig.js +2 -5
  104. package/dist/@codegen/kvault/instructions/updateVaultConfig.js.map +1 -1
  105. package/dist/@codegen/kvault/instructions/withdraw.d.ts +1 -0
  106. package/dist/@codegen/kvault/instructions/withdraw.d.ts.map +1 -1
  107. package/dist/@codegen/kvault/instructions/withdraw.js +1 -0
  108. package/dist/@codegen/kvault/instructions/withdraw.js.map +1 -1
  109. package/dist/@codegen/kvault/instructions/withdrawFromAvailable.d.ts +1 -0
  110. package/dist/@codegen/kvault/instructions/withdrawFromAvailable.d.ts.map +1 -1
  111. package/dist/@codegen/kvault/instructions/withdrawFromAvailable.js +1 -0
  112. package/dist/@codegen/kvault/instructions/withdrawFromAvailable.js.map +1 -1
  113. package/dist/@codegen/kvault/types/ReserveConfig.d.ts +27 -34
  114. package/dist/@codegen/kvault/types/ReserveConfig.d.ts.map +1 -1
  115. package/dist/@codegen/kvault/types/ReserveConfig.js +20 -17
  116. package/dist/@codegen/kvault/types/ReserveConfig.js.map +1 -1
  117. package/dist/@codegen/kvault/types/ReserveFees.d.ts +8 -8
  118. package/dist/@codegen/kvault/types/ReserveFees.d.ts.map +1 -1
  119. package/dist/@codegen/kvault/types/ReserveFees.js +8 -8
  120. package/dist/@codegen/kvault/types/ReserveFees.js.map +1 -1
  121. package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.d.ts +68 -0
  122. package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.d.ts.map +1 -0
  123. package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.js +162 -0
  124. package/dist/@codegen/kvault/types/UpdateGlobalConfigMode.js.map +1 -0
  125. package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.d.ts +46 -0
  126. package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.d.ts.map +1 -0
  127. package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.js +124 -0
  128. package/dist/@codegen/kvault/types/UpdateReserveWhitelistMode.js.map +1 -0
  129. package/dist/@codegen/kvault/types/VaultConfigField.d.ts +65 -0
  130. package/dist/@codegen/kvault/types/VaultConfigField.d.ts.map +1 -1
  131. package/dist/@codegen/kvault/types/VaultConfigField.js +121 -1
  132. package/dist/@codegen/kvault/types/VaultConfigField.js.map +1 -1
  133. package/dist/@codegen/kvault/types/index.d.ts +10 -2
  134. package/dist/@codegen/kvault/types/index.d.ts.map +1 -1
  135. package/dist/@codegen/kvault/types/index.js +5 -1
  136. package/dist/@codegen/kvault/types/index.js.map +1 -1
  137. package/dist/classes/manager.d.ts +17 -1
  138. package/dist/classes/manager.d.ts.map +1 -1
  139. package/dist/classes/manager.js +22 -0
  140. package/dist/classes/manager.js.map +1 -1
  141. package/dist/classes/market.js +3 -3
  142. package/dist/classes/market.js.map +1 -1
  143. package/dist/classes/reserve.d.ts.map +1 -1
  144. package/dist/classes/reserve.js +7 -4
  145. package/dist/classes/reserve.js.map +1 -1
  146. package/dist/classes/vault.d.ts +29 -5
  147. package/dist/classes/vault.d.ts.map +1 -1
  148. package/dist/classes/vault.js +119 -48
  149. package/dist/classes/vault.js.map +1 -1
  150. package/dist/idl/klend.json +129 -59
  151. package/dist/lib.d.ts +1 -0
  152. package/dist/lib.d.ts.map +1 -1
  153. package/dist/lib.js +4 -2
  154. package/dist/lib.js.map +1 -1
  155. package/dist/manager/client_kamino_manager.js +206 -15
  156. package/dist/manager/client_kamino_manager.js.map +1 -1
  157. package/dist/utils/index.d.ts +1 -0
  158. package/dist/utils/index.d.ts.map +1 -1
  159. package/dist/utils/index.js +1 -0
  160. package/dist/utils/index.js.map +1 -1
  161. package/dist/utils/managerTypes.d.ts +1 -1
  162. package/dist/utils/managerTypes.d.ts.map +1 -1
  163. package/dist/utils/managerTypes.js +5 -3
  164. package/dist/utils/managerTypes.js.map +1 -1
  165. package/dist/utils/parse.d.ts +10 -0
  166. package/dist/utils/parse.d.ts.map +1 -0
  167. package/dist/utils/parse.js +24 -0
  168. package/dist/utils/parse.js.map +1 -0
  169. package/dist/utils/seeds.d.ts +5 -5
  170. package/dist/utils/seeds.d.ts.map +1 -1
  171. package/dist/utils/seeds.js +13 -13
  172. package/dist/utils/seeds.js.map +1 -1
  173. package/dist/utils/vault.d.ts.map +1 -1
  174. package/dist/utils/vault.js +6 -0
  175. package/dist/utils/vault.js.map +1 -1
  176. package/package.json +1 -1
  177. package/src/@codegen/klend/accounts/LendingMarket.ts +46 -2
  178. package/src/@codegen/klend/errors/custom.ts +47 -2
  179. package/src/@codegen/klend/instructions/index.ts +2 -0
  180. package/src/@codegen/klend/instructions/initReserve.ts +2 -6
  181. package/src/@codegen/klend/instructions/liquidateObligationAndRedeemReserveCollateralV2.ts +1 -1
  182. package/src/@codegen/klend/instructions/seedDepositOnInitReserve.ts +50 -0
  183. package/src/@codegen/klend/instructions/withdrawObligationCollateral.ts +1 -1
  184. package/src/@codegen/klend/instructions/withdrawObligationCollateralV2.ts +1 -1
  185. package/src/@codegen/klend/types/ReserveConfig.ts +72 -30
  186. package/src/@codegen/klend/types/ReserveFees.ts +12 -12
  187. package/src/@codegen/klend/types/UpdateConfigMode.ts +103 -13
  188. package/src/@codegen/klend/types/UpdateLendingMarketMode.ts +60 -0
  189. package/src/@codegen/klend/types/index.ts +12 -2
  190. package/src/@codegen/kvault/accounts/GlobalConfig.ts +136 -0
  191. package/src/@codegen/kvault/accounts/Reserve.ts +1 -1
  192. package/src/@codegen/kvault/accounts/ReserveWhitelistEntry.ts +157 -0
  193. package/src/@codegen/kvault/accounts/VaultState.ts +57 -1
  194. package/src/@codegen/kvault/accounts/index.ts +7 -0
  195. package/src/@codegen/kvault/errors/custom.ts +109 -8
  196. package/src/@codegen/kvault/instructions/addUpdateWhitelistedReserve.ts +64 -0
  197. package/src/@codegen/kvault/instructions/buy.ts +74 -0
  198. package/src/@codegen/kvault/instructions/index.ts +18 -0
  199. package/src/@codegen/kvault/instructions/initGlobalConfig.ts +44 -0
  200. package/src/@codegen/kvault/instructions/invest.ts +4 -0
  201. package/src/@codegen/kvault/instructions/sell.ts +122 -0
  202. package/src/@codegen/kvault/instructions/updateGlobalConfig.ts +58 -0
  203. package/src/@codegen/kvault/instructions/updateGlobalConfigAdmin.ts +42 -0
  204. package/src/@codegen/kvault/instructions/updateReserveAllocation.ts +4 -0
  205. package/src/@codegen/kvault/instructions/updateVaultConfig.ts +4 -6
  206. package/src/@codegen/kvault/instructions/withdraw.ts +2 -0
  207. package/src/@codegen/kvault/instructions/withdrawFromAvailable.ts +2 -0
  208. package/src/@codegen/kvault/types/ReserveConfig.ts +34 -37
  209. package/src/@codegen/kvault/types/ReserveFees.ts +12 -12
  210. package/src/@codegen/kvault/types/UpdateGlobalConfigMode.ts +160 -0
  211. package/src/@codegen/kvault/types/UpdateReserveWhitelistMode.ts +117 -0
  212. package/src/@codegen/kvault/types/VaultConfigField.ts +150 -0
  213. package/src/@codegen/kvault/types/index.ts +31 -0
  214. package/src/classes/manager.ts +29 -1
  215. package/src/classes/market.ts +3 -3
  216. package/src/classes/reserve.ts +7 -5
  217. package/src/classes/vault.ts +166 -48
  218. package/src/idl/klend.json +130 -60
  219. package/src/idl/kvault.json +582 -23
  220. package/src/lib.ts +2 -1
  221. package/src/manager/client_kamino_manager.ts +313 -18
  222. package/src/utils/index.ts +2 -1
  223. package/src/utils/managerTypes.ts +6 -4
  224. package/src/utils/parse.ts +18 -0
  225. package/src/utils/seeds.ts +13 -17
  226. package/src/utils/vault.ts +6 -0
@@ -70,7 +70,7 @@ async function main() {
70
70
  throw new Error('If using multisig mode, multisig pubkey is required');
71
71
  }
72
72
  const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
73
- const env = await (0, ManagerEnv_1.initEnv)(ms, staging);
73
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
74
74
  const admin = await env.getSigner();
75
75
  const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
76
76
  const { market: marketKp, ixs: createMarketIxs } = await kaminoManager.createMarketIxs({
@@ -196,6 +196,44 @@ async function main() {
196
196
  const reserveConfigDisplay = parseReserveConfigToFile(reserveState.config);
197
197
  fs.writeFileSync('./configs/' + reserveState.lendingMarket + '/' + reserveName + '.json', JSON.stringify(reserveConfigDisplay, null, 2));
198
198
  });
199
+ commands
200
+ .command('init-kvault-global-config')
201
+ .requiredOption('--mode <string>', 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
202
+ .option(`--staging`, 'If true, will use the staging programs')
203
+ .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
204
+ .option('--signer-path <string>', 'If set, it will use the provided signer')
205
+ .action(async ({ mode, staging, multisig, signerPath }) => {
206
+ if (mode === 'multisig' && !multisig) {
207
+ throw new Error('If using multisig mode, multisig is required');
208
+ }
209
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
210
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms, signerPath);
211
+ const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
212
+ let signer = undefined;
213
+ if (signerPath) {
214
+ signer = await (0, signer_1.parseKeypairFile)(signerPath);
215
+ }
216
+ else {
217
+ const programData = await (0, lib_1.programDataPda)(env.kvaultProgramId);
218
+ const programDataInfo = await env.c.rpc.getAccountInfo(programData).send();
219
+ if (programDataInfo === null) {
220
+ throw new Error('KVault program data not found');
221
+ }
222
+ const programAdmin = programDataInfo.value?.owner.toString();
223
+ if (!programAdmin) {
224
+ throw new Error('Program admin not found');
225
+ }
226
+ signer = (0, signer_1.noopSigner)((0, kit_1.address)(programAdmin));
227
+ }
228
+ const ix = await kaminoManager.initKvaultGlobalConfigIx(signer);
229
+ await (0, processor_1.processTx)(env.c, signer, [
230
+ ix,
231
+ ...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
232
+ priorityFeeMultiplier: 2500,
233
+ }),
234
+ ], mode, []);
235
+ mode === 'execute' && console.log('KVault global config initialized');
236
+ });
199
237
  commands
200
238
  .command('create-vault')
201
239
  .requiredOption('--mint <string>', 'Vault token mint')
@@ -313,13 +351,29 @@ async function main() {
313
351
  .option(`--staging`, 'If true, will use the staging programs')
314
352
  .option(`--skip-lut-update`, 'If set, it will skip the LUT update')
315
353
  .option(`--lutSigner <string>`, 'If set, it will use the provided signer instead of the default one for the LUT update')
316
- .action(async ({ vault, field, value, mode, staging, skipLutUpdate, lutSigner }) => {
317
- const env = await (0, ManagerEnv_1.initEnv)(staging);
354
+ .option(`--global-admin <string>`, 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode). Required when setting AllowInvestInWhitelistedReservesOnly or AllowAllocationsInWhitelistedReservesOnly to false')
355
+ .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
356
+ .action(async ({ vault, field, value, mode, staging, skipLutUpdate, lutSigner, globalAdmin, multisig }) => {
357
+ if (mode === 'multisig' && !multisig) {
358
+ throw new Error('If using multisig mode, multisig pubkey is required');
359
+ }
360
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
361
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
318
362
  const vaultAddress = (0, kit_1.address)(vault);
319
363
  const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
320
364
  const kaminoVault = new lib_1.KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
321
365
  const vaultState = await kaminoVault.getState();
322
- const signer = await env.getSigner({ vaultState });
366
+ // Use global admin signer if provided, otherwise fall back to vault admin/noop signer depending on mode
367
+ let signer;
368
+ if (mode === 'multisig' && globalAdmin) {
369
+ signer = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
370
+ }
371
+ else if (globalAdmin) {
372
+ signer = await (0, signer_1.parseKeypairFile)(globalAdmin);
373
+ }
374
+ else {
375
+ signer = await env.getSigner({ vaultState });
376
+ }
323
377
  let lutSignerOrUndefined = undefined;
324
378
  if (lutSigner) {
325
379
  lutSignerOrUndefined = await (0, signer_1.parseKeypairFile)(lutSigner);
@@ -335,10 +389,142 @@ async function main() {
335
389
  ], mode, []);
336
390
  mode === 'execute' && console.log('Vault updated');
337
391
  });
392
+ commands
393
+ .command('add-update-whitelisted-reserve')
394
+ .requiredOption('--reserve <string>', 'Reserve address to whitelist')
395
+ .requiredOption('--whitelist-mode <string>', 'Whitelist mode: "Invest" or "AddAllocation"')
396
+ .requiredOption('--value <string>', 'Value: "1" or "true" to add to whitelist, "0" or "false" to remove from whitelist')
397
+ .requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
398
+ .requiredOption('--global-admin <string>', 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode)')
399
+ .option(`--staging`, 'If true, will use the staging programs')
400
+ .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
401
+ .action(async ({ reserve, whitelistMode, value, mode, globalAdmin, staging, multisig }) => {
402
+ if (mode === 'multisig' && !multisig) {
403
+ throw new Error('If using multisig mode, multisig pubkey is required');
404
+ }
405
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
406
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
407
+ const reserveAddress = (0, kit_1.address)(reserve);
408
+ const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
409
+ // Parse the value (1/true = add, 0/false = remove)
410
+ const flagValue = (0, lib_1.parseBooleanFlag)(value);
411
+ // Parse the whitelist mode
412
+ let whitelistModeEnum;
413
+ if (whitelistMode === 'Invest') {
414
+ whitelistModeEnum = new types_2.UpdateReserveWhitelistMode.Invest([flagValue]);
415
+ }
416
+ else if (whitelistMode === 'AddAllocation') {
417
+ whitelistModeEnum = new types_2.UpdateReserveWhitelistMode.AddAllocation([flagValue]);
418
+ }
419
+ else {
420
+ throw new Error(`Invalid whitelist mode '${whitelistMode}'. Expected 'Invest' or 'AddAllocation'.`);
421
+ }
422
+ let globalAdminSigner;
423
+ if (mode === 'multisig') {
424
+ globalAdminSigner = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
425
+ }
426
+ else {
427
+ globalAdminSigner = await (0, signer_1.parseKeypairFile)(globalAdmin);
428
+ }
429
+ const instruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, whitelistModeEnum, globalAdminSigner);
430
+ await (0, processor_1.processTx)(env.c, globalAdminSigner, [
431
+ instruction,
432
+ ...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
433
+ priorityFeeMultiplier: 2500,
434
+ }),
435
+ ], mode, []);
436
+ mode === 'execute' &&
437
+ console.log(`Reserve ${reserveAddress} whitelisted for ${whitelistMode} with value ${flagValue ? 'ALLOW' : 'DENY'}`);
438
+ });
439
+ commands
440
+ .command('backfill-whitelisted-reserves')
441
+ .option('--value <string>', 'Value: "1" or "true" to add to whitelist, "0" or "false" to remove from whitelist', '1')
442
+ .requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
443
+ .requiredOption('--global-admin <string>', 'Global admin signer (keypair path in execute/simulate modes, pubkey in multisig mode)')
444
+ .option(`--markets <string>`, 'Comma-separated list of market addresses. If not provided, all markets will be processed')
445
+ .option(`--staging`, 'If true, will use the staging programs')
446
+ .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
447
+ .action(async ({ value, mode, globalAdmin, markets, staging, multisig }) => {
448
+ if (mode === 'multisig' && !multisig) {
449
+ throw new Error('If using multisig mode, multisig pubkey is required');
450
+ }
451
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
452
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
453
+ const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
454
+ let globalAdminSigner;
455
+ if (mode === 'multisig') {
456
+ globalAdminSigner = (0, signer_1.noopSigner)((0, kit_1.address)(globalAdmin));
457
+ }
458
+ else {
459
+ globalAdminSigner = await (0, signer_1.parseKeypairFile)(globalAdmin);
460
+ }
461
+ // Get markets to process
462
+ let marketsToProcess;
463
+ if (markets) {
464
+ const marketAddresses = markets.split(',').map((m) => (0, kit_1.address)(m.trim()));
465
+ console.log(`Processing ${marketAddresses.length} specified markets...`);
466
+ marketsToProcess = await Promise.all(marketAddresses.map(async (marketAddress) => {
467
+ const market = await lib_1.KaminoMarket.load(env.c.rpc, marketAddress, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId);
468
+ if (!market) {
469
+ throw new Error(`Market ${marketAddress} not found`);
470
+ }
471
+ return market;
472
+ }));
473
+ }
474
+ else {
475
+ console.log('Fetching all markets...');
476
+ marketsToProcess = await kaminoManager.getAllMarkets(env.klendProgramId);
477
+ console.log(`Found ${marketsToProcess.length} markets`);
478
+ }
479
+ // Collect all reserves from all markets
480
+ const allReserves = [];
481
+ for (const market of marketsToProcess) {
482
+ const marketName = (0, lib_1.parseTokenSymbol)(market.state.name);
483
+ const reserveAddresses = Array.from(market.reserves.keys());
484
+ console.log(`Market ${market.getAddress()} (${marketName}): ${reserveAddresses.length} reserves`);
485
+ allReserves.push(...reserveAddresses);
486
+ }
487
+ console.log(`\nTotal reserves to whitelist: ${allReserves.length}`);
488
+ console.log(`Whitelist modes: Invest AND AddAllocation (both will be set)`);
489
+ // Parse the value (1/true = add, 0/false = remove)
490
+ const flagValue = (0, lib_1.parseBooleanFlag)(value);
491
+ console.log(`Action: ${flagValue ? 'ADD to whitelist' : 'REMOVE from whitelist'}`);
492
+ if (mode === 'simulate') {
493
+ console.log('\nSimulation mode - no transactions will be executed');
494
+ }
495
+ // Create whitelist mode enums for both Invest and AddAllocation
496
+ const investModeEnum = new types_2.UpdateReserveWhitelistMode.Invest([flagValue]);
497
+ const addAllocationModeEnum = new types_2.UpdateReserveWhitelistMode.AddAllocation([flagValue]);
498
+ // Process each reserve with both whitelist modes
499
+ let successCount = 0;
500
+ let errorCount = 0;
501
+ for (const reserveAddress of allReserves) {
502
+ try {
503
+ const investInstruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, investModeEnum, globalAdminSigner);
504
+ const addAllocationInstruction = await kaminoManager.addUpdateWhitelistedReserveIx(reserveAddress, addAllocationModeEnum, globalAdminSigner);
505
+ await (0, processor_1.processTx)(env.c, globalAdminSigner, [
506
+ investInstruction,
507
+ addAllocationInstruction,
508
+ ...(0, priorityFee_1.getPriorityFeeAndCuIxs)({
509
+ priorityFeeMultiplier: 2500,
510
+ }),
511
+ ], mode, []);
512
+ successCount++;
513
+ console.log(`✓ [${successCount}/${allReserves.length}] ${reserveAddress} (Invest + AddAllocation)`);
514
+ }
515
+ catch (error) {
516
+ errorCount++;
517
+ console.error(`✗ Failed to whitelist ${reserveAddress}:`, error);
518
+ }
519
+ }
520
+ console.log(`\nBackfill complete!`);
521
+ console.log(`Success: ${successCount} reserves (both modes set)`);
522
+ console.log(`Errors: ${errorCount}`);
523
+ });
338
524
  commands
339
525
  .command('update-vault-mgmt-fee')
340
526
  .requiredOption('--vault <string>', 'Vault address')
341
- .requiredOption('--fee-bps <string>', 'Pubkey of the new admin')
527
+ .requiredOption('--fee-bps <string>', 'Management fee to set (in basis points)')
342
528
  .requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
343
529
  .option(`--staging`, 'If true, will use the staging programs')
344
530
  .action(async ({ vault, feeBps, mode, staging }) => {
@@ -367,7 +553,11 @@ async function main() {
367
553
  .option(`--multisig <string>`, 'If using multisig mode this is required, otherwise will be ignored')
368
554
  .option(`--signer <string>`, 'If set, it will use the provided signer instead of the default one')
369
555
  .action(async ({ lut, addresses, mode, staging, multisig, signer }) => {
370
- const env = await (0, ManagerEnv_1.initEnv)(multisig, staging);
556
+ if (mode === 'multisig' && !multisig) {
557
+ throw new Error('If using multisig mode, multisig is required');
558
+ }
559
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
560
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
371
561
  const lutAddress = (0, kit_1.address)(lut);
372
562
  let txSigner = await env.getSigner();
373
563
  // if the signer is provided (path to a keypair) we use it, otherwise we use the default one
@@ -375,9 +565,6 @@ async function main() {
375
565
  txSigner = await (0, signer_1.parseKeypairFile)(signer);
376
566
  }
377
567
  const addressesArr = addresses.split(' ').map((a) => (0, kit_1.address)(a));
378
- if (mode === 'multisig' && !multisig) {
379
- throw new Error('If using multisig mode, multisig is required');
380
- }
381
568
  const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
382
569
  const instructions = await kaminoManager.insertIntoLutIxs(txSigner, lutAddress, addressesArr);
383
570
  await (0, processor_1.processTx)(env.c, txSigner, [
@@ -443,7 +630,7 @@ async function main() {
443
630
  commands
444
631
  .command('update-vault-perf-fee')
445
632
  .requiredOption('--vault <string>', 'Vault address')
446
- .requiredOption('--fee-bps <string>', 'Pubkey of the new admin')
633
+ .requiredOption('--fee-bps <string>', 'Performance fee to set (in basis points)')
447
634
  .requiredOption(`--mode <string>`, 'simulate|multisig|execute - simulate - to print txn simulation and to get tx simulation link in explorer, execute - execute tx, multisig - to get bs58 tx for multisig usage')
448
635
  .option(`--staging`, 'If true, will use the staging programs')
449
636
  .action(async ({ vault, feeBps, mode, staging }) => {
@@ -683,7 +870,8 @@ async function main() {
683
870
  if (mode === 'multisig' && !multisig) {
684
871
  throw new Error('If using multisig mode, multisig is required');
685
872
  }
686
- const env = await (0, ManagerEnv_1.initEnv)(staging, multisig);
873
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
874
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
687
875
  const vaultAddress = (0, kit_1.address)(vault);
688
876
  const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
689
877
  const kaminoVault = new lib_1.KaminoVault(env.c.rpc, vaultAddress, undefined, env.kvaultProgramId);
@@ -710,7 +898,8 @@ async function main() {
710
898
  if (mode === 'multisig' && !multisig) {
711
899
  throw new Error('If using multisig mode, multisig is required');
712
900
  }
713
- const env = await (0, ManagerEnv_1.initEnv)(multisig, staging);
901
+ const ms = multisig ? (0, kit_1.address)(multisig) : undefined;
902
+ const env = await (0, ManagerEnv_1.initEnv)(staging, ms);
714
903
  const signer = await env.getSigner();
715
904
  const vaultAddress = (0, kit_1.address)(vault);
716
905
  const kaminoManager = new lib_1.KaminoManager(env.c.rpc, lib_1.DEFAULT_RECENT_SLOT_DURATION_MS, env.klendProgramId, env.kvaultProgramId);
@@ -1327,7 +1516,7 @@ function parseReserveConfigFromFile(reserveConfigFromFile) {
1327
1516
  maxLiquidationBonusBps: reserveConfigFromFile.maxLiquidationBonusBps,
1328
1517
  badDebtLiquidationBonusBps: reserveConfigFromFile.badDebtLiquidationBonusBps,
1329
1518
  fees: {
1330
- borrowFeeSf: fraction_1.Fraction.fromDecimal(new decimal_js_1.default(reserveConfigFromFile.fees.borrowFee)).valueSf,
1519
+ originationFeeSf: fraction_1.Fraction.fromDecimal(new decimal_js_1.default(reserveConfigFromFile.fees.borrowFee)).valueSf,
1331
1520
  flashLoanFeeSf: fraction_1.Fraction.fromDecimal(new decimal_js_1.default(reserveConfigFromFile.fees.flashLoanFee)).valueSf,
1332
1521
  padding: Array(8).fill(0),
1333
1522
  },
@@ -1373,7 +1562,9 @@ function parseReserveConfigFromFile(reserveConfigFromFile) {
1373
1562
  borrowLimitAgainstThisCollateralInElevationGroup: parseReserveBorrowLimitAgainstCollInEmode(reserveConfigFromFile),
1374
1563
  deleveragingBonusIncreaseBpsPerDay: new bn_js_1.default(reserveConfigFromFile.deleveragingBonusIncreaseBpsPerDay),
1375
1564
  reserved1: Array(1).fill(0),
1376
- reserved2: Array(9).fill(0),
1565
+ minDeleveragingBonusBps: 0,
1566
+ proposerAuthorityLocked: 0,
1567
+ blockCtokenUsage: 0,
1377
1568
  };
1378
1569
  return new types_1.ReserveConfig(reserveConfigFields);
1379
1570
  }
@@ -1432,7 +1623,7 @@ function parseReserveConfigToFile(reserveConfig) {
1432
1623
  maxLiquidationBonusBps: reserveConfig.maxLiquidationBonusBps,
1433
1624
  badDebtLiquidationBonusBps: reserveConfig.badDebtLiquidationBonusBps,
1434
1625
  fees: {
1435
- borrowFee: new fraction_1.Fraction(reserveConfig.fees.borrowFeeSf).toDecimal().toString(),
1626
+ borrowFee: new fraction_1.Fraction(reserveConfig.fees.originationFeeSf).toDecimal().toString(),
1436
1627
  flashLoanFee: new fraction_1.Fraction(reserveConfig.fees.flashLoanFeeSf).toDecimal().toString(),
1437
1628
  padding: Array(8).fill(0),
1438
1629
  },