@exponent-labs/exponent-sdk 0.9.0 → 0.9.2

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 (155) hide show
  1. package/build/client/vaults/index.d.ts +2 -0
  2. package/build/client/vaults/index.js +2 -0
  3. package/build/client/vaults/index.js.map +1 -1
  4. package/build/client/vaults/types/index.d.ts +2 -0
  5. package/build/client/vaults/types/index.js +2 -0
  6. package/build/client/vaults/types/index.js.map +1 -1
  7. package/build/client/vaults/types/kaminoFarmEntry.d.ts +15 -0
  8. package/build/client/vaults/types/kaminoFarmEntry.js +17 -0
  9. package/build/client/vaults/types/kaminoFarmEntry.js.map +1 -0
  10. package/build/client/vaults/types/kaminoObligationEntry.d.ts +21 -4
  11. package/build/client/vaults/types/kaminoObligationEntry.js +2 -1
  12. package/build/client/vaults/types/kaminoObligationEntry.js.map +1 -1
  13. package/build/client/vaults/types/positionUpdate.d.ts +9 -0
  14. package/build/client/vaults/types/positionUpdate.js +23 -0
  15. package/build/client/vaults/types/positionUpdate.js.map +1 -1
  16. package/build/client/vaults/types/proposalAction.js +0 -3
  17. package/build/client/vaults/types/proposalAction.js.map +1 -1
  18. package/build/client/vaults/types/reserveFarmMapping.d.ts +19 -0
  19. package/build/client/vaults/types/reserveFarmMapping.js +18 -0
  20. package/build/client/vaults/types/reserveFarmMapping.js.map +1 -0
  21. package/build/client/vaults/types/strategyPosition.d.ts +5 -0
  22. package/build/client/vaults/types/strategyPosition.js +5 -0
  23. package/build/client/vaults/types/strategyPosition.js.map +1 -1
  24. package/build/exponentVaults/aumCalculator.d.ts +25 -4
  25. package/build/exponentVaults/aumCalculator.js +236 -15
  26. package/build/exponentVaults/aumCalculator.js.map +1 -1
  27. package/build/exponentVaults/fetcher.d.ts +52 -0
  28. package/build/exponentVaults/fetcher.js +199 -0
  29. package/build/exponentVaults/fetcher.js.map +1 -0
  30. package/build/exponentVaults/index.d.ts +10 -9
  31. package/build/exponentVaults/index.js +26 -8
  32. package/build/exponentVaults/index.js.map +1 -1
  33. package/build/exponentVaults/kamino-farms.d.ts +144 -0
  34. package/build/exponentVaults/kamino-farms.js +396 -0
  35. package/build/exponentVaults/kamino-farms.js.map +1 -0
  36. package/build/exponentVaults/loopscale/client.d.ts +240 -0
  37. package/build/exponentVaults/loopscale/client.js +590 -0
  38. package/build/exponentVaults/loopscale/client.js.map +1 -0
  39. package/build/exponentVaults/loopscale/client.test.d.ts +1 -0
  40. package/build/exponentVaults/loopscale/client.test.js +183 -0
  41. package/build/exponentVaults/loopscale/client.test.js.map +1 -0
  42. package/build/exponentVaults/loopscale/helpers.d.ts +29 -0
  43. package/build/exponentVaults/loopscale/helpers.js +119 -0
  44. package/build/exponentVaults/loopscale/helpers.js.map +1 -0
  45. package/build/exponentVaults/loopscale/index.d.ts +3 -0
  46. package/build/exponentVaults/loopscale/index.js +12 -0
  47. package/build/exponentVaults/loopscale/index.js.map +1 -0
  48. package/build/exponentVaults/loopscale/prepared-transactions.d.ts +13 -0
  49. package/build/exponentVaults/loopscale/prepared-transactions.js +271 -0
  50. package/build/exponentVaults/loopscale/prepared-transactions.js.map +1 -0
  51. package/build/exponentVaults/loopscale/prepared-transactions.test.d.ts +1 -0
  52. package/build/exponentVaults/loopscale/prepared-transactions.test.js +400 -0
  53. package/build/exponentVaults/loopscale/prepared-transactions.test.js.map +1 -0
  54. package/build/exponentVaults/loopscale/prepared-types.d.ts +62 -0
  55. package/build/exponentVaults/loopscale/prepared-types.js +3 -0
  56. package/build/exponentVaults/loopscale/prepared-types.js.map +1 -0
  57. package/build/exponentVaults/loopscale/response-plan.d.ts +69 -0
  58. package/build/exponentVaults/loopscale/response-plan.js +141 -0
  59. package/build/exponentVaults/loopscale/response-plan.js.map +1 -0
  60. package/build/exponentVaults/loopscale/response-plan.test.d.ts +1 -0
  61. package/build/exponentVaults/loopscale/response-plan.test.js +139 -0
  62. package/build/exponentVaults/loopscale/response-plan.test.js.map +1 -0
  63. package/build/exponentVaults/loopscale/send-plan.d.ts +75 -0
  64. package/build/exponentVaults/loopscale/send-plan.js +235 -0
  65. package/build/exponentVaults/loopscale/send-plan.js.map +1 -0
  66. package/build/exponentVaults/loopscale/types.d.ts +443 -0
  67. package/build/exponentVaults/loopscale/types.js +3 -0
  68. package/build/exponentVaults/loopscale/types.js.map +1 -0
  69. package/build/exponentVaults/loopscale-client.d.ts +113 -524
  70. package/build/exponentVaults/loopscale-client.js +296 -539
  71. package/build/exponentVaults/loopscale-client.js.map +1 -1
  72. package/build/exponentVaults/loopscale-client.test.d.ts +1 -0
  73. package/build/exponentVaults/loopscale-client.test.js +162 -0
  74. package/build/exponentVaults/loopscale-client.test.js.map +1 -0
  75. package/build/exponentVaults/loopscale-client.types.d.ts +425 -0
  76. package/build/exponentVaults/loopscale-client.types.js +3 -0
  77. package/build/exponentVaults/loopscale-client.types.js.map +1 -0
  78. package/build/exponentVaults/loopscale-execution.d.ts +125 -0
  79. package/build/exponentVaults/loopscale-execution.js +341 -0
  80. package/build/exponentVaults/loopscale-execution.js.map +1 -0
  81. package/build/exponentVaults/loopscale-execution.test.d.ts +1 -0
  82. package/build/exponentVaults/loopscale-execution.test.js +139 -0
  83. package/build/exponentVaults/loopscale-execution.test.js.map +1 -0
  84. package/build/exponentVaults/loopscale-vault.d.ts +115 -0
  85. package/build/exponentVaults/loopscale-vault.js +275 -0
  86. package/build/exponentVaults/loopscale-vault.js.map +1 -0
  87. package/build/exponentVaults/loopscale-vault.test.d.ts +1 -0
  88. package/build/exponentVaults/loopscale-vault.test.js +102 -0
  89. package/build/exponentVaults/loopscale-vault.test.js.map +1 -0
  90. package/build/exponentVaults/policyBuilders.d.ts +62 -0
  91. package/build/exponentVaults/policyBuilders.js +119 -2
  92. package/build/exponentVaults/policyBuilders.js.map +1 -1
  93. package/build/exponentVaults/pricePathResolver.d.ts +45 -0
  94. package/build/exponentVaults/pricePathResolver.js +198 -0
  95. package/build/exponentVaults/pricePathResolver.js.map +1 -0
  96. package/build/exponentVaults/pricePathResolver.test.d.ts +1 -0
  97. package/build/exponentVaults/pricePathResolver.test.js +369 -0
  98. package/build/exponentVaults/pricePathResolver.test.js.map +1 -0
  99. package/build/exponentVaults/syncTransaction.js +4 -1
  100. package/build/exponentVaults/syncTransaction.js.map +1 -1
  101. package/build/exponentVaults/titan-quote.js +170 -36
  102. package/build/exponentVaults/titan-quote.js.map +1 -1
  103. package/build/exponentVaults/vault-instruction-types.d.ts +363 -0
  104. package/build/exponentVaults/vault-instruction-types.js +128 -0
  105. package/build/exponentVaults/vault-instruction-types.js.map +1 -0
  106. package/build/exponentVaults/vault-interaction.d.ts +203 -343
  107. package/build/exponentVaults/vault-interaction.js +1894 -426
  108. package/build/exponentVaults/vault-interaction.js.map +1 -1
  109. package/build/exponentVaults/vault-interaction.kamino-vault.test.d.ts +1 -0
  110. package/build/exponentVaults/vault-interaction.kamino-vault.test.js +143 -0
  111. package/build/exponentVaults/vault-interaction.kamino-vault.test.js.map +1 -0
  112. package/build/exponentVaults/vault.d.ts +51 -2
  113. package/build/exponentVaults/vault.js +324 -48
  114. package/build/exponentVaults/vault.js.map +1 -1
  115. package/build/exponentVaults/vaultTransactionBuilder.d.ts +100 -134
  116. package/build/exponentVaults/vaultTransactionBuilder.js +383 -285
  117. package/build/exponentVaults/vaultTransactionBuilder.js.map +1 -1
  118. package/build/exponentVaults/vaultTransactionBuilder.test.d.ts +1 -0
  119. package/build/exponentVaults/vaultTransactionBuilder.test.js +297 -0
  120. package/build/exponentVaults/vaultTransactionBuilder.test.js.map +1 -0
  121. package/build/marketThree.d.ts +6 -2
  122. package/build/marketThree.js +10 -8
  123. package/build/marketThree.js.map +1 -1
  124. package/package.json +34 -32
  125. package/src/client/vaults/index.ts +2 -0
  126. package/src/client/vaults/types/index.ts +2 -0
  127. package/src/client/vaults/types/kaminoFarmEntry.ts +32 -0
  128. package/src/client/vaults/types/kaminoObligationEntry.ts +6 -3
  129. package/src/client/vaults/types/positionUpdate.ts +62 -0
  130. package/src/client/vaults/types/proposalAction.ts +0 -3
  131. package/src/client/vaults/types/reserveFarmMapping.ts +35 -0
  132. package/src/client/vaults/types/strategyPosition.ts +18 -1
  133. package/src/exponentVaults/aumCalculator.ts +353 -16
  134. package/src/exponentVaults/fetcher.ts +257 -0
  135. package/src/exponentVaults/index.ts +65 -40
  136. package/src/exponentVaults/kamino-farms.ts +538 -0
  137. package/src/exponentVaults/loopscale/client.ts +808 -0
  138. package/src/exponentVaults/loopscale/helpers.ts +172 -0
  139. package/src/exponentVaults/loopscale/index.ts +57 -0
  140. package/src/exponentVaults/loopscale/prepared-transactions.ts +435 -0
  141. package/src/exponentVaults/loopscale/prepared-types.ts +73 -0
  142. package/src/exponentVaults/loopscale/types.ts +466 -0
  143. package/src/exponentVaults/policyBuilders.ts +170 -0
  144. package/src/exponentVaults/pricePathResolver.test.ts +466 -0
  145. package/src/exponentVaults/pricePathResolver.ts +273 -0
  146. package/src/exponentVaults/syncTransaction.ts +6 -1
  147. package/src/exponentVaults/titan-quote.ts +231 -45
  148. package/src/exponentVaults/vault-instruction-types.ts +493 -0
  149. package/src/exponentVaults/vault-interaction.kamino-vault.test.ts +149 -0
  150. package/src/exponentVaults/vault-interaction.ts +2818 -799
  151. package/src/exponentVaults/vault.ts +474 -63
  152. package/src/exponentVaults/vaultTransactionBuilder.test.ts +349 -0
  153. package/src/exponentVaults/vaultTransactionBuilder.ts +581 -433
  154. package/src/marketThree.ts +14 -6
  155. package/src/exponentVaults/loopscale-client.ts +0 -1373
@@ -0,0 +1,396 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.KAMINO_SCOPE_LAST_UPDATED_SLOT_OFFSET = exports.KAMINO_SCOPE_PRICE_EXP_OFFSET = exports.KAMINO_SCOPE_PRICE_VALUE_OFFSET = exports.KAMINO_SCOPE_DATED_PRICE_SIZE = exports.KAMINO_SCOPE_ORACLE_PRICES_ARRAY_OFFSET = exports.KAMINO_SCOPE_ACCOUNT_DISCRIMINATOR_LEN = exports.KAMINO_FARM_USER_DELEGATEE_OFFSET = exports.KAMINO_FARM_USER_PENDING_WITHDRAWAL_UNSTAKE_SCALED_OFFSET = exports.KAMINO_FARM_USER_PENDING_DEPOSIT_STAKE_SCALED_OFFSET = exports.KAMINO_FARM_USER_ACTIVE_STAKE_SCALED_OFFSET = exports.KAMINO_FARM_USER_LAST_CLAIM_TS_OFFSET = exports.KAMINO_FARM_USER_REWARDS_ISSUED_UNCLAIMED_OFFSET = exports.KAMINO_FARM_USER_REWARDS_TALLY_SCALED_OFFSET = exports.KAMINO_FARM_USER_OWNER_OFFSET = exports.KAMINO_FARM_SCOPE_ORACLE_MAX_AGE_OFFSET = exports.KAMINO_FARM_SCOPE_ORACLE_PRICE_ID_OFFSET = exports.KAMINO_FARM_SCOPE_PRICES_OFFSET = exports.KAMINO_FARM_TOTAL_PENDING_AMOUNT_OFFSET = exports.KAMINO_FARM_TOTAL_PENDING_STAKE_SCALED_OFFSET = exports.KAMINO_FARM_TOTAL_ACTIVE_STAKE_SCALED_OFFSET = exports.KAMINO_FARM_WITHDRAWAL_COOLDOWN_PERIOD_OFFSET = exports.KAMINO_FARM_DEPOSIT_WARMUP_PERIOD_OFFSET = exports.KAMINO_FARM_IS_FARM_DELEGATED_OFFSET = exports.KAMINO_FARM_TIME_UNIT_OFFSET = exports.KAMINO_FARM_DELEGATE_AUTHORITY_OFFSET = exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_BUMP_OFFSET = exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_OFFSET = exports.KAMINO_FARM_FARM_VAULT_OFFSET = exports.KAMINO_FARM_TOTAL_STAKED_AMOUNT_OFFSET = exports.KAMINO_FARM_NUM_REWARD_TOKENS_OFFSET = exports.KAMINO_FARM_REWARDS_PER_SECOND_DECIMALS_OFFSET = exports.KAMINO_FARM_REWARD_TYPE_OFFSET = exports.KAMINO_FARM_REWARD_PER_SHARE_SCALED_OFFSET = exports.KAMINO_FARM_REWARDS_ISSUED_CUMULATIVE_OFFSET = exports.KAMINO_FARM_REWARDS_ISSUED_UNCLAIMED_OFFSET = exports.KAMINO_FARM_LAST_ISSUANCE_TS_OFFSET = exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINT_SIZE = exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINTS = exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_OFFSET = exports.KAMINO_FARM_REWARDS_AVAILABLE_OFFSET = exports.KAMINO_FARM_REWARD_VAULT_OFFSET = exports.KAMINO_FARM_REWARD_TOKEN_PROGRAM_OFFSET = exports.KAMINO_FARM_REWARD_TOKEN_MINT_OFFSET = exports.KAMINO_FARM_REWARD_INFO_SIZE = exports.KAMINO_FARM_REWARD_INFOS_OFFSET = exports.KAMINO_FARM_TOKEN_PROGRAM_OFFSET = exports.KAMINO_FARM_TOKEN_MINT_OFFSET = exports.KAMINO_FARM_GLOBAL_CONFIG_TREASURY_FEE_BPS_OFFSET = exports.KAMINO_FARM_GLOBAL_CONFIG_OFFSET = exports.KAMINO_FARM_ACCOUNT_DISCRIMINATOR_LEN = void 0;
4
+ exports.applyKaminoFarmTreasuryFee = exports.projectKaminoFarmUserRewards = exports.projectKaminoFarmUserReward = exports.projectKaminoFarmGlobalRewards = exports.projectKaminoFarmGlobalReward = exports.calculateKaminoFarmPrincipalAmount = exports.convertKaminoStakeToAmount = exports.getKaminoFarmScopePricesAddress = exports.kaminoFarmUsesScopeOracle = exports.decodeKaminoScopeDatedPrice = exports.decodeKaminoFarmUserState = exports.decodeKaminoFarmState = exports.readU128LE = exports.KaminoFarmRewardType = exports.KaminoFarmTimeUnit = exports.KAMINO_SCOPE_UNIX_TIMESTAMP_OFFSET = void 0;
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const U64_MAX = 18446744073709551615n;
7
+ const DECIMAL_WAD = 1000000000000000000n;
8
+ const BPS_DIV_FACTOR = 10000n;
9
+ const DEFAULT_PUBLIC_KEY = web3_js_1.PublicKey.default;
10
+ exports.KAMINO_FARM_ACCOUNT_DISCRIMINATOR_LEN = 8;
11
+ exports.KAMINO_FARM_GLOBAL_CONFIG_OFFSET = 32;
12
+ exports.KAMINO_FARM_GLOBAL_CONFIG_TREASURY_FEE_BPS_OFFSET = 32;
13
+ exports.KAMINO_FARM_TOKEN_MINT_OFFSET = 64;
14
+ exports.KAMINO_FARM_TOKEN_PROGRAM_OFFSET = 104;
15
+ exports.KAMINO_FARM_REWARD_INFOS_OFFSET = 184;
16
+ exports.KAMINO_FARM_REWARD_INFO_SIZE = 704;
17
+ exports.KAMINO_FARM_REWARD_TOKEN_MINT_OFFSET = 0;
18
+ exports.KAMINO_FARM_REWARD_TOKEN_PROGRAM_OFFSET = 40;
19
+ exports.KAMINO_FARM_REWARD_VAULT_OFFSET = 120;
20
+ exports.KAMINO_FARM_REWARDS_AVAILABLE_OFFSET = 152;
21
+ exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_OFFSET = 160;
22
+ exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINTS = 20;
23
+ exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINT_SIZE = 16;
24
+ exports.KAMINO_FARM_LAST_ISSUANCE_TS_OFFSET = 488;
25
+ exports.KAMINO_FARM_REWARDS_ISSUED_UNCLAIMED_OFFSET = 496;
26
+ exports.KAMINO_FARM_REWARDS_ISSUED_CUMULATIVE_OFFSET = 504;
27
+ exports.KAMINO_FARM_REWARD_PER_SHARE_SCALED_OFFSET = 512;
28
+ exports.KAMINO_FARM_REWARD_TYPE_OFFSET = 536;
29
+ exports.KAMINO_FARM_REWARDS_PER_SECOND_DECIMALS_OFFSET = 537;
30
+ exports.KAMINO_FARM_NUM_REWARD_TOKENS_OFFSET = 7224;
31
+ exports.KAMINO_FARM_TOTAL_STAKED_AMOUNT_OFFSET = 7240;
32
+ exports.KAMINO_FARM_FARM_VAULT_OFFSET = 7248;
33
+ exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_OFFSET = 7280;
34
+ exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_BUMP_OFFSET = 7312;
35
+ exports.KAMINO_FARM_DELEGATE_AUTHORITY_OFFSET = 7320;
36
+ exports.KAMINO_FARM_TIME_UNIT_OFFSET = 7352;
37
+ exports.KAMINO_FARM_IS_FARM_DELEGATED_OFFSET = 7354;
38
+ exports.KAMINO_FARM_DEPOSIT_WARMUP_PERIOD_OFFSET = 7392;
39
+ exports.KAMINO_FARM_WITHDRAWAL_COOLDOWN_PERIOD_OFFSET = 7396;
40
+ exports.KAMINO_FARM_TOTAL_ACTIVE_STAKE_SCALED_OFFSET = 7400;
41
+ exports.KAMINO_FARM_TOTAL_PENDING_STAKE_SCALED_OFFSET = 7416;
42
+ exports.KAMINO_FARM_TOTAL_PENDING_AMOUNT_OFFSET = 7432;
43
+ exports.KAMINO_FARM_SCOPE_PRICES_OFFSET = 7528;
44
+ exports.KAMINO_FARM_SCOPE_ORACLE_PRICE_ID_OFFSET = 7560;
45
+ exports.KAMINO_FARM_SCOPE_ORACLE_MAX_AGE_OFFSET = 7568;
46
+ exports.KAMINO_FARM_USER_OWNER_OFFSET = 40;
47
+ exports.KAMINO_FARM_USER_REWARDS_TALLY_SCALED_OFFSET = 80;
48
+ exports.KAMINO_FARM_USER_REWARDS_ISSUED_UNCLAIMED_OFFSET = 240;
49
+ exports.KAMINO_FARM_USER_LAST_CLAIM_TS_OFFSET = 320;
50
+ exports.KAMINO_FARM_USER_ACTIVE_STAKE_SCALED_OFFSET = 400;
51
+ exports.KAMINO_FARM_USER_PENDING_DEPOSIT_STAKE_SCALED_OFFSET = 416;
52
+ exports.KAMINO_FARM_USER_PENDING_WITHDRAWAL_UNSTAKE_SCALED_OFFSET = 440;
53
+ exports.KAMINO_FARM_USER_DELEGATEE_OFFSET = 472;
54
+ exports.KAMINO_SCOPE_ACCOUNT_DISCRIMINATOR_LEN = 8;
55
+ exports.KAMINO_SCOPE_ORACLE_PRICES_ARRAY_OFFSET = 32;
56
+ exports.KAMINO_SCOPE_DATED_PRICE_SIZE = 56;
57
+ exports.KAMINO_SCOPE_PRICE_VALUE_OFFSET = 0;
58
+ exports.KAMINO_SCOPE_PRICE_EXP_OFFSET = 8;
59
+ exports.KAMINO_SCOPE_LAST_UPDATED_SLOT_OFFSET = 16;
60
+ exports.KAMINO_SCOPE_UNIX_TIMESTAMP_OFFSET = 24;
61
+ var KaminoFarmTimeUnit;
62
+ (function (KaminoFarmTimeUnit) {
63
+ KaminoFarmTimeUnit[KaminoFarmTimeUnit["Seconds"] = 0] = "Seconds";
64
+ KaminoFarmTimeUnit[KaminoFarmTimeUnit["Slots"] = 1] = "Slots";
65
+ })(KaminoFarmTimeUnit || (exports.KaminoFarmTimeUnit = KaminoFarmTimeUnit = {}));
66
+ var KaminoFarmRewardType;
67
+ (function (KaminoFarmRewardType) {
68
+ KaminoFarmRewardType[KaminoFarmRewardType["Proportional"] = 0] = "Proportional";
69
+ KaminoFarmRewardType[KaminoFarmRewardType["Constant"] = 1] = "Constant";
70
+ })(KaminoFarmRewardType || (exports.KaminoFarmRewardType = KaminoFarmRewardType = {}));
71
+ function readPubkey(data, offset) {
72
+ return new web3_js_1.PublicKey(data.subarray(offset, offset + 32));
73
+ }
74
+ function readU64LE(data, offset) {
75
+ return data.readBigUInt64LE(offset);
76
+ }
77
+ function readU128LE(data, offset) {
78
+ return data.readBigUInt64LE(offset) + (data.readBigUInt64LE(offset + 8) << 64n);
79
+ }
80
+ exports.readU128LE = readU128LE;
81
+ function tenPow(exp) {
82
+ const POWERS = [
83
+ 1n,
84
+ 10n,
85
+ 100n,
86
+ 1000n,
87
+ 10000n,
88
+ 100000n,
89
+ 1000000n,
90
+ 10000000n,
91
+ 100000000n,
92
+ 1000000000n,
93
+ 10000000000n,
94
+ 100000000000n,
95
+ 1000000000000n,
96
+ 10000000000000n,
97
+ 100000000000000n,
98
+ 1000000000000000n,
99
+ 10000000000000000n,
100
+ 100000000000000000n,
101
+ 1000000000000000000n,
102
+ 10000000000000000000n,
103
+ ];
104
+ if (exp < 0 || exp >= POWERS.length) {
105
+ throw new Error(`Invalid power-of-ten exponent ${exp}`);
106
+ }
107
+ return POWERS[exp];
108
+ }
109
+ function decodeKaminoFarmState(data) {
110
+ const base = exports.KAMINO_FARM_ACCOUNT_DISCRIMINATOR_LEN;
111
+ const numRewardTokens = Number(readU64LE(data, base + exports.KAMINO_FARM_NUM_REWARD_TOKENS_OFFSET));
112
+ if (numRewardTokens < 0 || numRewardTokens > 10) {
113
+ throw new Error(`Invalid Kamino farm reward count: ${numRewardTokens}`);
114
+ }
115
+ const rewardInfos = [];
116
+ for (let i = 0; i < numRewardTokens; i += 1) {
117
+ const rewardBase = base + exports.KAMINO_FARM_REWARD_INFOS_OFFSET + (i * exports.KAMINO_FARM_REWARD_INFO_SIZE);
118
+ const rewardScheduleCurve = [];
119
+ for (let pointIndex = 0; pointIndex < exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINTS; pointIndex += 1) {
120
+ const pointBase = rewardBase
121
+ + exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_OFFSET
122
+ + (pointIndex * exports.KAMINO_FARM_REWARD_SCHEDULE_CURVE_POINT_SIZE);
123
+ rewardScheduleCurve.push({
124
+ tsStart: readU64LE(data, pointBase),
125
+ rewardPerTimeUnit: readU64LE(data, pointBase + 8),
126
+ });
127
+ }
128
+ rewardInfos.push({
129
+ rewardMint: readPubkey(data, rewardBase + exports.KAMINO_FARM_REWARD_TOKEN_MINT_OFFSET),
130
+ tokenProgram: readPubkey(data, rewardBase + exports.KAMINO_FARM_REWARD_TOKEN_PROGRAM_OFFSET),
131
+ rewardsVault: readPubkey(data, rewardBase + exports.KAMINO_FARM_REWARD_VAULT_OFFSET),
132
+ rewardsAvailable: readU64LE(data, rewardBase + exports.KAMINO_FARM_REWARDS_AVAILABLE_OFFSET),
133
+ rewardScheduleCurve,
134
+ lastIssuanceTs: readU64LE(data, rewardBase + exports.KAMINO_FARM_LAST_ISSUANCE_TS_OFFSET),
135
+ rewardsIssuedUnclaimed: readU64LE(data, rewardBase + exports.KAMINO_FARM_REWARDS_ISSUED_UNCLAIMED_OFFSET),
136
+ rewardsIssuedCumulative: readU64LE(data, rewardBase + exports.KAMINO_FARM_REWARDS_ISSUED_CUMULATIVE_OFFSET),
137
+ rewardPerShareScaled: readU128LE(data, rewardBase + exports.KAMINO_FARM_REWARD_PER_SHARE_SCALED_OFFSET),
138
+ rewardType: data[rewardBase + exports.KAMINO_FARM_REWARD_TYPE_OFFSET],
139
+ rewardsPerSecondDecimals: data[rewardBase + exports.KAMINO_FARM_REWARDS_PER_SECOND_DECIMALS_OFFSET],
140
+ });
141
+ }
142
+ const delegateAuthority = readPubkey(data, base + exports.KAMINO_FARM_DELEGATE_AUTHORITY_OFFSET);
143
+ return {
144
+ globalConfig: readPubkey(data, base + exports.KAMINO_FARM_GLOBAL_CONFIG_OFFSET),
145
+ underlyingMint: readPubkey(data, base + exports.KAMINO_FARM_TOKEN_MINT_OFFSET),
146
+ tokenProgram: readPubkey(data, base + exports.KAMINO_FARM_TOKEN_PROGRAM_OFFSET),
147
+ farmVault: readPubkey(data, base + exports.KAMINO_FARM_FARM_VAULT_OFFSET),
148
+ farmVaultsAuthority: readPubkey(data, base + exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_OFFSET),
149
+ farmVaultsAuthorityBump: readU64LE(data, base + exports.KAMINO_FARM_FARM_VAULTS_AUTHORITY_BUMP_OFFSET),
150
+ delegateAuthority,
151
+ timeUnit: data[base + exports.KAMINO_FARM_TIME_UNIT_OFFSET],
152
+ isDelegated: data[base + exports.KAMINO_FARM_IS_FARM_DELEGATED_OFFSET] !== 0
153
+ || !delegateAuthority.equals(DEFAULT_PUBLIC_KEY),
154
+ depositWarmupPeriod: data.readUInt32LE(base + exports.KAMINO_FARM_DEPOSIT_WARMUP_PERIOD_OFFSET),
155
+ withdrawalCooldownPeriod: data.readUInt32LE(base + exports.KAMINO_FARM_WITHDRAWAL_COOLDOWN_PERIOD_OFFSET),
156
+ totalStakedAmount: readU64LE(data, base + exports.KAMINO_FARM_TOTAL_STAKED_AMOUNT_OFFSET),
157
+ totalActiveStakeScaled: readU128LE(data, base + exports.KAMINO_FARM_TOTAL_ACTIVE_STAKE_SCALED_OFFSET),
158
+ totalPendingStakeScaled: readU128LE(data, base + exports.KAMINO_FARM_TOTAL_PENDING_STAKE_SCALED_OFFSET),
159
+ totalPendingAmount: readU64LE(data, base + exports.KAMINO_FARM_TOTAL_PENDING_AMOUNT_OFFSET),
160
+ numRewardTokens,
161
+ scopePrices: readPubkey(data, base + exports.KAMINO_FARM_SCOPE_PRICES_OFFSET),
162
+ scopeOraclePriceId: readU64LE(data, base + exports.KAMINO_FARM_SCOPE_ORACLE_PRICE_ID_OFFSET),
163
+ scopeOracleMaxAge: readU64LE(data, base + exports.KAMINO_FARM_SCOPE_ORACLE_MAX_AGE_OFFSET),
164
+ rewardInfos,
165
+ };
166
+ }
167
+ exports.decodeKaminoFarmState = decodeKaminoFarmState;
168
+ function decodeKaminoFarmUserState(data) {
169
+ const base = exports.KAMINO_FARM_ACCOUNT_DISCRIMINATOR_LEN;
170
+ const rewardsTallyScaled = [];
171
+ const rewardsIssuedUnclaimed = [];
172
+ const lastClaimTs = [];
173
+ for (let i = 0; i < 10; i += 1) {
174
+ rewardsTallyScaled.push(readU128LE(data, base + exports.KAMINO_FARM_USER_REWARDS_TALLY_SCALED_OFFSET + (i * 16)));
175
+ rewardsIssuedUnclaimed.push(readU64LE(data, base + exports.KAMINO_FARM_USER_REWARDS_ISSUED_UNCLAIMED_OFFSET + (i * 8)));
176
+ lastClaimTs.push(readU64LE(data, base + exports.KAMINO_FARM_USER_LAST_CLAIM_TS_OFFSET + (i * 8)));
177
+ }
178
+ return {
179
+ owner: readPubkey(data, base + exports.KAMINO_FARM_USER_OWNER_OFFSET),
180
+ rewardsTallyScaled,
181
+ rewardsIssuedUnclaimed,
182
+ lastClaimTs,
183
+ activeStakeScaled: readU128LE(data, base + exports.KAMINO_FARM_USER_ACTIVE_STAKE_SCALED_OFFSET),
184
+ pendingDepositStakeScaled: readU128LE(data, base + exports.KAMINO_FARM_USER_PENDING_DEPOSIT_STAKE_SCALED_OFFSET),
185
+ pendingWithdrawalUnstakeScaled: readU128LE(data, base + exports.KAMINO_FARM_USER_PENDING_WITHDRAWAL_UNSTAKE_SCALED_OFFSET),
186
+ delegatee: readPubkey(data, base + exports.KAMINO_FARM_USER_DELEGATEE_OFFSET),
187
+ };
188
+ }
189
+ exports.decodeKaminoFarmUserState = decodeKaminoFarmUserState;
190
+ function decodeKaminoScopeDatedPrice(data, priceId) {
191
+ const priceOffset = exports.KAMINO_SCOPE_ACCOUNT_DISCRIMINATOR_LEN
192
+ + exports.KAMINO_SCOPE_ORACLE_PRICES_ARRAY_OFFSET
193
+ + (Number(priceId) * exports.KAMINO_SCOPE_DATED_PRICE_SIZE);
194
+ return {
195
+ value: readU64LE(data, priceOffset + exports.KAMINO_SCOPE_PRICE_VALUE_OFFSET),
196
+ exp: readU64LE(data, priceOffset + exports.KAMINO_SCOPE_PRICE_EXP_OFFSET),
197
+ lastUpdatedSlot: readU64LE(data, priceOffset + exports.KAMINO_SCOPE_LAST_UPDATED_SLOT_OFFSET),
198
+ unixTimestamp: readU64LE(data, priceOffset + exports.KAMINO_SCOPE_UNIX_TIMESTAMP_OFFSET),
199
+ };
200
+ }
201
+ exports.decodeKaminoScopeDatedPrice = decodeKaminoScopeDatedPrice;
202
+ function kaminoFarmUsesScopeOracle(farm) {
203
+ return farm.scopeOraclePriceId !== U64_MAX;
204
+ }
205
+ exports.kaminoFarmUsesScopeOracle = kaminoFarmUsesScopeOracle;
206
+ function getKaminoFarmScopePricesAddress(farm) {
207
+ if (!kaminoFarmUsesScopeOracle(farm) || farm.scopePrices.equals(DEFAULT_PUBLIC_KEY)) {
208
+ return null;
209
+ }
210
+ return farm.scopePrices;
211
+ }
212
+ exports.getKaminoFarmScopePricesAddress = getKaminoFarmScopePricesAddress;
213
+ function convertKaminoStakeToAmount(stake, totalStake, totalAmount) {
214
+ if (stake === 0n) {
215
+ return 0n;
216
+ }
217
+ if (totalStake === 0n) {
218
+ return totalAmount;
219
+ }
220
+ return (stake * totalAmount) / totalStake;
221
+ }
222
+ exports.convertKaminoStakeToAmount = convertKaminoStakeToAmount;
223
+ function calculateKaminoFarmPrincipalAmount(farm, user) {
224
+ const activeAmount = convertKaminoStakeToAmount(user.activeStakeScaled, farm.totalActiveStakeScaled, farm.totalStakedAmount);
225
+ const pendingStake = user.pendingDepositStakeScaled + user.pendingWithdrawalUnstakeScaled;
226
+ const pendingAmount = convertKaminoStakeToAmount(pendingStake, farm.totalPendingStakeScaled, farm.totalPendingAmount);
227
+ return activeAmount + pendingAmount;
228
+ }
229
+ exports.calculateKaminoFarmPrincipalAmount = calculateKaminoFarmPrincipalAmount;
230
+ function getCurrentFarmTs(farm, params) {
231
+ return farm.timeUnit === KaminoFarmTimeUnit.Slots
232
+ ? params.currentSlot
233
+ : params.currentUnixTimestamp;
234
+ }
235
+ // Read-only mirror of KFarms RewardScheduleCurve::most_recent_curve_starting_point and
236
+ // RewardScheduleCurve::get_cumulative_amount_issued_since_last_ts.
237
+ // Source:
238
+ // https://github.com/Kamino-Finance/kfarms/blob/ae4be1b33808bae692edd9b06aecfac24714b100/programs/kfarms/src/state.rs#L344-L397
239
+ // Differences:
240
+ // - operates on decoded JS views
241
+ // - throws JS errors instead of returning Anchor errors
242
+ function getCumulativeAmountIssuedSinceLastTs(rewardScheduleCurve, lastIssuedTs, currentTs) {
243
+ if (lastIssuedTs > currentTs) {
244
+ throw new Error("Kamino farm reward schedule has lastIssuedTs > currentTs");
245
+ }
246
+ let startIndex = rewardScheduleCurve.length - 1;
247
+ for (let i = 0; i < rewardScheduleCurve.length; i += 1) {
248
+ if (rewardScheduleCurve[i].tsStart > lastIssuedTs) {
249
+ if (i === 0) {
250
+ throw new Error("Kamino farm reward schedule first point starts after lastIssuedTs");
251
+ }
252
+ startIndex = i - 1;
253
+ break;
254
+ }
255
+ }
256
+ let cumulativeAmount = 0n;
257
+ for (let i = startIndex; i < rewardScheduleCurve.length; i += 1) {
258
+ const point = rewardScheduleCurve[i];
259
+ if (point.tsStart >= currentTs) {
260
+ break;
261
+ }
262
+ const startTs = point.tsStart > lastIssuedTs ? point.tsStart : lastIssuedTs;
263
+ const endTs = i < rewardScheduleCurve.length - 1 && rewardScheduleCurve[i + 1].tsStart < currentTs
264
+ ? rewardScheduleCurve[i + 1].tsStart
265
+ : currentTs;
266
+ cumulativeAmount += point.rewardPerTimeUnit * (endTs - startTs);
267
+ }
268
+ return cumulativeAmount;
269
+ }
270
+ function applyKaminoFarmScopePrice(farm, amount, scopePrice, currentTs) {
271
+ if (!kaminoFarmUsesScopeOracle(farm)) {
272
+ return amount;
273
+ }
274
+ if (!scopePrice) {
275
+ throw new Error(`Missing scope prices for Kamino farm ${farm.scopePrices.toBase58()}`);
276
+ }
277
+ if (currentTs < scopePrice.unixTimestamp) {
278
+ throw new Error("Kamino farm scope price timestamp is in the future");
279
+ }
280
+ if (currentTs - scopePrice.unixTimestamp > farm.scopeOracleMaxAge) {
281
+ throw new Error("Kamino farm scope price is too old");
282
+ }
283
+ return (amount * scopePrice.value) / tenPow(Number(scopePrice.exp));
284
+ }
285
+ // Read-only mirror of KFarms refresh_global_reward.
286
+ // Source:
287
+ // https://github.com/Kamino-Finance/kfarms/blob/ae4be1b33808bae692edd9b06aecfac24714b100/programs/kfarms/src/farm_operations.rs#L759-L850
288
+ // Differences:
289
+ // - custody farms only
290
+ // - operates on copied views and returns projected reward info
291
+ function projectKaminoFarmGlobalReward(farm, rewardInfo, scopePrice, params) {
292
+ const currentTs = getCurrentFarmTs(farm, params);
293
+ if (currentTs === rewardInfo.lastIssuanceTs) {
294
+ return rewardInfo;
295
+ }
296
+ if (farm.totalActiveStakeScaled === 0n) {
297
+ return {
298
+ ...rewardInfo,
299
+ lastIssuanceTs: currentTs,
300
+ };
301
+ }
302
+ const cumulativeAmount = getCumulativeAmountIssuedSinceLastTs(rewardInfo.rewardScheduleCurve, rewardInfo.lastIssuanceTs, currentTs);
303
+ const rewardTypeAmount = rewardInfo.rewardType === KaminoFarmRewardType.Constant
304
+ ? cumulativeAmount * farm.totalStakedAmount
305
+ : cumulativeAmount;
306
+ const decimalAdjustedAmount = rewardTypeAmount / tenPow(rewardInfo.rewardsPerSecondDecimals);
307
+ const oracleAdjustedAmount = applyKaminoFarmScopePrice(farm, decimalAdjustedAmount, scopePrice, currentTs);
308
+ if (oracleAdjustedAmount === 0n) {
309
+ return rewardInfo;
310
+ }
311
+ const rewards = oracleAdjustedAmount < rewardInfo.rewardsAvailable
312
+ ? oracleAdjustedAmount
313
+ : rewardInfo.rewardsAvailable;
314
+ const rewardTimesWad = rewards * DECIMAL_WAD;
315
+ const addedRewardPerShareScaled = farm.isDelegated
316
+ ? rewardTimesWad / farm.totalActiveStakeScaled
317
+ : (rewardTimesWad * DECIMAL_WAD) / farm.totalActiveStakeScaled;
318
+ return {
319
+ ...rewardInfo,
320
+ lastIssuanceTs: currentTs,
321
+ rewardsIssuedUnclaimed: rewardInfo.rewardsIssuedUnclaimed + rewards,
322
+ rewardsIssuedCumulative: rewardInfo.rewardsIssuedCumulative + rewards,
323
+ rewardsAvailable: rewardInfo.rewardsAvailable - rewards,
324
+ rewardPerShareScaled: rewardInfo.rewardPerShareScaled + addedRewardPerShareScaled,
325
+ };
326
+ }
327
+ exports.projectKaminoFarmGlobalReward = projectKaminoFarmGlobalReward;
328
+ // Read-only mirror of KFarms refresh_global_rewards.
329
+ // Source:
330
+ // https://github.com/Kamino-Finance/kfarms/blob/ae4be1b33808bae692edd9b06aecfac24714b100/programs/kfarms/src/farm_operations.rs#L852-L862
331
+ // Differences:
332
+ // - operates on copied reward infos
333
+ function projectKaminoFarmGlobalRewards(farm, scopePrice, params) {
334
+ return farm.rewardInfos.map((rewardInfo) => projectKaminoFarmGlobalReward(farm, rewardInfo, scopePrice, params));
335
+ }
336
+ exports.projectKaminoFarmGlobalRewards = projectKaminoFarmGlobalRewards;
337
+ // Read-only mirror of KFarms user_refresh_reward.
338
+ // Source:
339
+ // https://github.com/Kamino-Finance/kfarms/blob/ae4be1b33808bae692edd9b06aecfac24714b100/programs/kfarms/src/farm_operations.rs#L553-L592
340
+ // Differences:
341
+ // - returns projected tally / rewards instead of mutating UserState
342
+ // - clamps small negative valuation deltas to zero instead of throwing so
343
+ // read-only AUM can tolerate post-harvest rounding drift
344
+ function projectKaminoFarmUserReward(farm, user, rewardInfo, rewardIndex) {
345
+ const rewardsTallyScaled = user.rewardsTallyScaled[rewardIndex] ?? 0n;
346
+ const rewardsIssuedUnclaimed = user.rewardsIssuedUnclaimed[rewardIndex] ?? 0n;
347
+ const rewardPerShareTimesStake = rewardInfo.rewardPerShareScaled * user.activeStakeScaled;
348
+ const newRewardTallyScaled = farm.isDelegated
349
+ ? rewardPerShareTimesStake
350
+ : rewardPerShareTimesStake / DECIMAL_WAD;
351
+ if (newRewardTallyScaled < rewardsTallyScaled) {
352
+ return {
353
+ rewardsTallyScaled,
354
+ rewardsIssuedUnclaimed,
355
+ };
356
+ }
357
+ const reward = (newRewardTallyScaled - rewardsTallyScaled) / DECIMAL_WAD;
358
+ return {
359
+ rewardsTallyScaled: rewardsTallyScaled + (reward * DECIMAL_WAD),
360
+ rewardsIssuedUnclaimed: rewardsIssuedUnclaimed + reward,
361
+ };
362
+ }
363
+ exports.projectKaminoFarmUserReward = projectKaminoFarmUserReward;
364
+ // Read-only mirror of KFarms user_refresh_all_rewards.
365
+ // Source:
366
+ // https://github.com/Kamino-Finance/kfarms/blob/ae4be1b33808bae692edd9b06aecfac24714b100/programs/kfarms/src/farm_operations.rs#L595-L605
367
+ // Differences:
368
+ // - returns projected arrays instead of mutating UserState
369
+ function projectKaminoFarmUserRewards(farm, user, projectedRewardInfos) {
370
+ const projectedRewardsTallyScaled = [...user.rewardsTallyScaled];
371
+ const projectedRewardsIssuedUnclaimed = [...user.rewardsIssuedUnclaimed];
372
+ if (user.activeStakeScaled === 0n) {
373
+ return {
374
+ projectedRewardInfos,
375
+ projectedRewardsTallyScaled,
376
+ projectedRewardsIssuedUnclaimed,
377
+ };
378
+ }
379
+ for (let rewardIndex = 0; rewardIndex < farm.numRewardTokens; rewardIndex += 1) {
380
+ const projected = projectKaminoFarmUserReward(farm, user, projectedRewardInfos[rewardIndex], rewardIndex);
381
+ projectedRewardsTallyScaled[rewardIndex] = projected.rewardsTallyScaled;
382
+ projectedRewardsIssuedUnclaimed[rewardIndex] = projected.rewardsIssuedUnclaimed;
383
+ }
384
+ return {
385
+ projectedRewardInfos,
386
+ projectedRewardsTallyScaled,
387
+ projectedRewardsIssuedUnclaimed,
388
+ };
389
+ }
390
+ exports.projectKaminoFarmUserRewards = projectKaminoFarmUserRewards;
391
+ function applyKaminoFarmTreasuryFee(reward, treasuryFeeBps) {
392
+ const rewardTreasury = (reward * treasuryFeeBps) / BPS_DIV_FACTOR;
393
+ return reward - rewardTreasury;
394
+ }
395
+ exports.applyKaminoFarmTreasuryFee = applyKaminoFarmTreasuryFee;
396
+ //# sourceMappingURL=kamino-farms.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kamino-farms.js","sourceRoot":"","sources":["../../src/exponentVaults/kamino-farms.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Loopscale manager flow:
3
+ *
4
+ * 1. Call a raw Loopscale endpoint such as `createStrategy(...)`,
5
+ * `createLoan(...)`, or `borrowPrincipal(...)`.
6
+ * 2. Hand the raw response back to this client.
7
+ * 3. Choose one of two paths:
8
+ * - `prepareVaultTransactions(...)` when you want appendable instruction
9
+ * pieces you can compose with your own transaction building logic.
10
+ * - `buildVaultTransactions(...)` when you want locally signed
11
+ * `VersionedTransaction`s that are ready for optional Loopscale
12
+ * co-signing and then `connection.sendTransaction(...)`.
13
+ * 4. Call `coSign(...)` only on returned transactions where
14
+ * `requiresLoopscaleCoSign === true`.
15
+ *
16
+ * This distinction is intentional:
17
+ *
18
+ * - Wrapped Loopscale sync transactions require Loopscale MPC because they
19
+ * represent Loopscale-authored flows that expect Loopscale's signature.
20
+ * - Setup transactions and other top-level non-Loopscale transactions must
21
+ * stay local. They are constructed by the SDK to make the manager flow
22
+ * complete, but they are not Loopscale-signed transactions and should not
23
+ * be sent to Loopscale's MPC endpoint.
24
+ *
25
+ * In other words, `requiresLoopscaleCoSign` is not a convenience flag. It is
26
+ * the contract that tells the caller which transactions belong to Loopscale's
27
+ * signing domain and which ones do not.
28
+ *
29
+ * Example:
30
+ *
31
+ * ```ts
32
+ * const client = new LoopscaleClient({
33
+ * connection,
34
+ * userWallet: squadsVault,
35
+ * payer: squadsVault,
36
+ * })
37
+ *
38
+ * const response = await client.createStrategy({
39
+ * principalMint,
40
+ * lender: squadsVault,
41
+ * amount: 0,
42
+ * })
43
+ *
44
+ * const builtTransactions = await client.buildVaultTransactions({
45
+ * response,
46
+ * context: {
47
+ * connection,
48
+ * signer: manager.publicKey,
49
+ * signers: [manager],
50
+ * vaultPda: squadsVault,
51
+ * vaultAddress,
52
+ * squadsProgram,
53
+ * },
54
+ * })
55
+ *
56
+ * for (const built of builtTransactions) {
57
+ * const transaction = built.requiresLoopscaleCoSign
58
+ * ? await client.coSign(built.transaction)
59
+ * : built.transaction
60
+ *
61
+ * await connection.sendTransaction(transaction, { skipPreflight: false })
62
+ * }
63
+ * ```
64
+ */
65
+ import { PublicKey, VersionedTransaction } from "@solana/web3.js";
66
+ import type { LoopscaleBorrowPrincipalParams, LoopscaleClientConfig, LoopscaleCloseLoanParams, LoopscaleCloseStrategyParams, LoopscaleCreateLoanParams, LoopscaleCreateLoanResponse, LoopscaleCreateStrategyParams, LoopscaleDepositCollateralParams, LoopscaleDepositStrategyParams, LoopscaleGetStrategiesParams, LoopscaleLoanInfoParams, LoopscaleLoanInfoResponse, LoopscaleLoanTransactionResponse, LoopscaleMaxQuote, LoopscaleMaxQuoteParams, LoopscaleQuote, LoopscaleQuoteParams, LoopscaleRepayLoanSimpleParams, LoopscaleStrategyInfoResponse, LoopscaleTransactionResponse, LoopscaleTransactionsResponse, LoopscaleUpdateStrategyParams, LoopscaleVersionedTransactionBatchResponse, LoopscaleVersionedTransactionResponse, LoopscaleWithdrawCollateralParams, LoopscaleWithdrawStrategyParams } from "./types";
67
+ import type { LoopscaleBuildTransactionsContext, LoopscaleBuiltTransaction, LoopscalePreparedTransaction, LoopscaleVaultPreparationContext } from "./prepared-types";
68
+ import { deserializeLoopscaleTransactionBatchResponse, deserializeLoopscaleTransactionResponse, extractCreatedStrategyAddress, extractCreatedStrategyNonce, getLoopscaleTransactionResponses, identifyLoopscaleInstruction } from "./helpers";
69
+ /**
70
+ * Thin docs-aligned Loopscale client for strategies, loans, and related query endpoints.
71
+ *
72
+ * Transaction methods intentionally return the raw Loopscale response shapes
73
+ * instead of derived sync-action bundles. Use
74
+ * {@link LoopscaleClient.prepareVaultTransactions} when you need appendable
75
+ * transaction pieces, or {@link LoopscaleClient.buildVaultTransactions} when
76
+ * you want locally signed transactions that are ready for optional
77
+ * `client.coSign(...)` and `connection.sendTransaction(...)`.
78
+ *
79
+ * Refinancing and other lock/unlock maintenance flows remain intentionally
80
+ * excluded. The client only covers strategies, loans, and cleanup endpoints
81
+ * that can be represented as raw transaction responses.
82
+ *
83
+ * Typical usage:
84
+ *
85
+ * - Query Loopscale data through the read methods on this client.
86
+ * - Build raw Loopscale transactions through the strategy and loan methods.
87
+ * - Turn raw responses into appendable instruction pieces with
88
+ * {@link LoopscaleClient.prepareVaultTransactions}.
89
+ * - Or compile ready-to-send transactions with
90
+ * {@link LoopscaleClient.buildVaultTransactions}.
91
+ * - Call {@link LoopscaleClient.coSign} only for transactions flagged with
92
+ * `requiresLoopscaleCoSign`.
93
+ */
94
+ export declare class LoopscaleClient {
95
+ private readonly connection;
96
+ private readonly baseUrl;
97
+ private readonly userWallet;
98
+ private readonly payer;
99
+ private readonly debug;
100
+ constructor(config: LoopscaleClientConfig);
101
+ /**
102
+ * Load Loopscale quotes for a principal/collateral pair.
103
+ */
104
+ getQuotes(params: LoopscaleQuoteParams): Promise<LoopscaleQuote[]>;
105
+ /**
106
+ * Load the best quote for one or more specific collateral assets.
107
+ */
108
+ getMaxQuote(params: LoopscaleMaxQuoteParams): Promise<LoopscaleMaxQuote[]>;
109
+ /**
110
+ * Load Loopscale loan positions.
111
+ */
112
+ getLoanInfo(params: LoopscaleLoanInfoParams): Promise<LoopscaleLoanInfoResponse>;
113
+ /**
114
+ * Load Loopscale lending strategies.
115
+ */
116
+ getStrategies(params: LoopscaleGetStrategiesParams): Promise<LoopscaleStrategyInfoResponse>;
117
+ /**
118
+ * Build a raw Loopscale `createStrategy` transaction batch.
119
+ */
120
+ createStrategy(params: LoopscaleCreateStrategyParams): Promise<LoopscaleVersionedTransactionBatchResponse>;
121
+ /**
122
+ * Build a raw Loopscale `depositStrategy` transaction.
123
+ */
124
+ depositStrategy(params: LoopscaleDepositStrategyParams): Promise<LoopscaleVersionedTransactionResponse>;
125
+ /**
126
+ * Build a raw Loopscale `withdrawStrategy` transaction.
127
+ */
128
+ withdrawStrategy(params: LoopscaleWithdrawStrategyParams): Promise<LoopscaleVersionedTransactionResponse>;
129
+ /**
130
+ * Build a raw Loopscale `closeStrategy` transaction.
131
+ */
132
+ closeStrategy(params: LoopscaleCloseStrategyParams): Promise<LoopscaleVersionedTransactionResponse>;
133
+ /**
134
+ * Build raw Loopscale `updateStrategy` transactions.
135
+ */
136
+ updateStrategy(params: LoopscaleUpdateStrategyParams): Promise<LoopscaleVersionedTransactionBatchResponse>;
137
+ /**
138
+ * Build a raw Loopscale `createLoan` transaction.
139
+ */
140
+ createLoan(params: LoopscaleCreateLoanParams): Promise<LoopscaleCreateLoanResponse>;
141
+ /**
142
+ * Build a raw Loopscale `borrowPrincipal` transaction.
143
+ *
144
+ * The published OpenAPI schema currently documents a single serialized
145
+ * transaction response, but live responses can also return a wrapped
146
+ * `transactions` array with `expectedLoanInfo` when Loopscale inserts
147
+ * additional internal maintenance steps.
148
+ */
149
+ borrowPrincipal(params: LoopscaleBorrowPrincipalParams): Promise<LoopscaleLoanTransactionResponse>;
150
+ /**
151
+ * Build a raw Loopscale `depositCollateral` transaction.
152
+ */
153
+ depositCollateral(params: LoopscaleDepositCollateralParams): Promise<LoopscaleVersionedTransactionResponse>;
154
+ /**
155
+ * Build a raw Loopscale `withdrawCollateral` transaction.
156
+ *
157
+ * Full collateral removal can trigger internal loan-maintenance instructions,
158
+ * so callers should accept either a single serialized transaction or a wrapped
159
+ * `transactions` array.
160
+ */
161
+ withdrawCollateral(params: LoopscaleWithdrawCollateralParams): Promise<LoopscaleLoanTransactionResponse>;
162
+ /**
163
+ * Build a raw Loopscale `repay_simple` transaction response.
164
+ */
165
+ repayLoanSimple(params: LoopscaleRepayLoanSimpleParams): Promise<LoopscaleTransactionsResponse>;
166
+ /**
167
+ * Build a raw Loopscale `close_loan` transaction response.
168
+ */
169
+ closeLoan(params: LoopscaleCloseLoanParams): Promise<LoopscaleLoanTransactionResponse>;
170
+ /**
171
+ * Convert a raw Loopscale response into manager-ready vault transaction pieces.
172
+ *
173
+ * This is the lower-level, appendable "lego" API.
174
+ *
175
+ * Each returned entry represents one manager-facing transaction:
176
+ * send `setupInstructions` first when present, then send the main
177
+ * `instructions`. Wrapped sync transactions are already flattened into one
178
+ * instruction list, so callers do not need to manually inspect the raw
179
+ * Loopscale response to figure out which instructions should be wrapped.
180
+ *
181
+ * Use this when you want to compose Loopscale output with your own custom
182
+ * transaction building logic.
183
+ */
184
+ prepareVaultTransactions({ response, context, }: {
185
+ response: LoopscaleTransactionResponse;
186
+ context: LoopscaleVaultPreparationContext;
187
+ }): Promise<LoopscalePreparedTransaction[]>;
188
+ /**
189
+ * Build locally signed transactions from a raw Loopscale response.
190
+ *
191
+ * This is the simplest manager-facing API.
192
+ *
193
+ * The returned transactions are ready for:
194
+ * 1. `await client.coSign(tx)` when `requiresLoopscaleCoSign === true`
195
+ * 2. `connection.sendTransaction(tx)`
196
+ *
197
+ * The co-signing flag is deliberately per-transaction, not global. A single
198
+ * Loopscale response can produce:
199
+ *
200
+ * - local setup transactions that must be sent as-is,
201
+ * - local top-level transactions that do not belong to Loopscale's signing
202
+ * domain,
203
+ * - one wrapped Loopscale sync transaction that does require Loopscale MPC.
204
+ *
205
+ * The client returns all of them in send order and marks only the wrapped
206
+ * Loopscale transaction for MPC co-signing. This is the correct boundary:
207
+ * callers should not guess which transactions need Loopscale's signature.
208
+ *
209
+ * The first signer in `context.signers` must match `context.signer`, since
210
+ * that signer is used as the fee payer for the compiled transactions.
211
+ */
212
+ buildVaultTransactions({ response, context, }: {
213
+ response: LoopscaleTransactionResponse;
214
+ context: LoopscaleBuildTransactionsContext;
215
+ }): Promise<LoopscaleBuiltTransaction[]>;
216
+ /**
217
+ * Co-sign a prepared transaction with Loopscale's back-end signer.
218
+ *
219
+ * This uses Loopscale's public MPC co-signing endpoint. The returned
220
+ * transaction is required to keep the exact same message as the locally
221
+ * signed input, and any local signatures that are missing from the response
222
+ * are copied back onto the returned transaction before it is handed to the
223
+ * caller.
224
+ *
225
+ * Only call this for transactions flagged with
226
+ * `requiresLoopscaleCoSign === true`. Transactions not flagged that way do
227
+ * not belong to Loopscale's signing domain and should be sent directly.
228
+ */
229
+ coSign(transaction: VersionedTransaction): Promise<VersionedTransaction>;
230
+ /**
231
+ * Extract the strategy PDA from a `createStrategy` response using the client's connection.
232
+ */
233
+ extractCreatedStrategyAddress(response: LoopscaleTransactionResponse): Promise<PublicKey>;
234
+ /**
235
+ * Extract the strategy nonce from a `createStrategy` response using the client's connection.
236
+ */
237
+ extractCreatedStrategyNonce(response: LoopscaleTransactionResponse): Promise<PublicKey>;
238
+ private post;
239
+ }
240
+ export { deserializeLoopscaleTransactionBatchResponse, deserializeLoopscaleTransactionResponse, extractCreatedStrategyAddress, extractCreatedStrategyNonce, getLoopscaleTransactionResponses, identifyLoopscaleInstruction, };