@gearbox-protocol/sdk 13.3.0-next.3 → 13.3.1

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 (216) hide show
  1. package/dist/cjs/common-utils/charts/credit-manager-payload.js +16 -0
  2. package/dist/cjs/common-utils/charts/credit-manager.js +134 -0
  3. package/dist/cjs/common-utils/charts/credit-session.js +257 -0
  4. package/dist/cjs/common-utils/charts/credit-sessions-payload.js +16 -0
  5. package/dist/cjs/common-utils/charts/graph-payload.js +16 -0
  6. package/dist/cjs/common-utils/charts/index.js +36 -0
  7. package/dist/cjs/common-utils/charts/pool-payload.js +16 -0
  8. package/dist/cjs/common-utils/charts/pool.js +199 -0
  9. package/dist/cjs/common-utils/charts/token-data.js +91 -0
  10. package/dist/cjs/common-utils/index.js +4 -0
  11. package/dist/cjs/common-utils/static/index.js +28 -0
  12. package/dist/cjs/common-utils/static/migration-config.js +16 -0
  13. package/dist/cjs/common-utils/static/pool-config.js +16 -0
  14. package/dist/cjs/common-utils/static/strategy.js +16 -0
  15. package/dist/cjs/common-utils/static/trading-pair.js +16 -0
  16. package/dist/cjs/common-utils/utils/{assetsMath.js → assets-math.js} +13 -13
  17. package/dist/cjs/common-utils/utils/{bigintMath.js → bigint-math.js} +3 -3
  18. package/dist/cjs/common-utils/utils/creditAccount/{calcHealthFactor.js → calc-health-factor.js} +9 -9
  19. package/dist/cjs/common-utils/utils/creditAccount/{calcOverallAPY.js → calc-overall-apy.js} +8 -8
  20. package/dist/cjs/common-utils/utils/creditAccount/{calcQuotaBorrowRate.js → calc-quota-borrow-rate.js} +3 -3
  21. package/dist/cjs/common-utils/utils/creditAccount/{calcRelativeBaseBorrowRate.js → calc-relative-base-borrow-rate.js} +3 -3
  22. package/dist/cjs/common-utils/utils/creditAccount/debt.js +4 -4
  23. package/dist/cjs/common-utils/utils/creditAccount/{getTimeToLiquidation.js → get-time-to-liquidation.js} +3 -3
  24. package/dist/cjs/common-utils/utils/creditAccount/index.js +16 -16
  25. package/dist/cjs/common-utils/utils/creditAccount/{liquidationPrice.js → liquidation-price.js} +3 -3
  26. package/dist/cjs/common-utils/utils/creditAccount/{quotaUtils.js → quota-utils.js} +8 -8
  27. package/dist/cjs/common-utils/utils/creditAccount/sort.js +3 -3
  28. package/dist/cjs/common-utils/utils/index.js +6 -8
  29. package/dist/cjs/common-utils/utils/{priceMath.js → price-math.js} +3 -3
  30. package/dist/cjs/dev/AccountOpener.js +5 -45
  31. package/dist/cjs/plugins/zappers/ZappersPlugin.js +144 -0
  32. package/dist/cjs/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +6 -110
  33. package/dist/cjs/plugins/zappers/index.js +26 -0
  34. package/dist/cjs/plugins/zappers/package.json +1 -0
  35. package/dist/cjs/rewards/apy/index.js +24 -0
  36. package/dist/cjs/rewards/apy/output-details.js +16 -0
  37. package/dist/cjs/rewards/apy/output.js +16 -0
  38. package/dist/cjs/rewards/index.js +24 -0
  39. package/dist/cjs/rewards/package.json +1 -0
  40. package/dist/cjs/rewards/rewards/api.js +226 -0
  41. package/dist/cjs/rewards/rewards/apy.js +177 -0
  42. package/dist/cjs/rewards/rewards/common.js +16 -0
  43. package/dist/cjs/rewards/rewards/extra-apy.js +132 -0
  44. package/dist/cjs/rewards/rewards/index.js +28 -0
  45. package/dist/cjs/rewards/rewards/merkl-api.js +52 -0
  46. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  47. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  48. package/dist/cjs/sdk/base/ChainContractsRegister.js +1 -1
  49. package/dist/cjs/sdk/base/TokensMeta.js +32 -255
  50. package/dist/cjs/sdk/base/index.js +0 -2
  51. package/dist/cjs/sdk/chain/chains.js +1 -2
  52. package/dist/cjs/sdk/constants/index.js +2 -0
  53. package/dist/cjs/sdk/{base/token-types.js → constants/phantom-tokens.js} +3 -9
  54. package/dist/cjs/sdk/market/MarketRegister.js +2 -2
  55. package/dist/cjs/sdk/market/MarketSuite.js +0 -6
  56. package/dist/cjs/sdk/market/index.js +1 -3
  57. package/dist/cjs/sdk/market/pool/PoolSuite.js +0 -3
  58. package/dist/cjs/sdk/market/pool/PoolV310Contract.js +2 -17
  59. package/dist/cjs/sdk/market/pool/index.js +0 -4
  60. package/dist/cjs/sdk/pools/AbstractPoolService.js +137 -0
  61. package/dist/cjs/{abi/iStateSerializer.js → sdk/pools/PoolServiceV310.js} +8 -14
  62. package/dist/cjs/sdk/pools/createPoolService.js +35 -0
  63. package/dist/cjs/sdk/pools/index.js +4 -2
  64. package/dist/cjs/sdk/utils/AddressMap.js +1 -1
  65. package/dist/cjs/sdk/utils/viem/sendRawTx.js +0 -16
  66. package/dist/esm/common-utils/charts/credit-manager.js +115 -0
  67. package/dist/esm/common-utils/charts/credit-session.js +233 -0
  68. package/dist/esm/common-utils/charts/credit-sessions-payload.js +0 -0
  69. package/dist/esm/common-utils/charts/graph-payload.js +0 -0
  70. package/dist/esm/common-utils/charts/index.js +8 -0
  71. package/dist/esm/common-utils/charts/pool-payload.js +0 -0
  72. package/dist/esm/common-utils/charts/pool.js +179 -0
  73. package/dist/esm/common-utils/charts/token-data.js +67 -0
  74. package/dist/esm/common-utils/index.js +2 -0
  75. package/dist/esm/common-utils/static/index.js +4 -0
  76. package/dist/esm/common-utils/static/migration-config.js +0 -0
  77. package/dist/esm/common-utils/static/pool-config.js +0 -0
  78. package/dist/esm/common-utils/static/strategy.js +0 -0
  79. package/dist/esm/common-utils/static/trading-pair.js +0 -0
  80. package/dist/esm/common-utils/utils/{assetsMath.js → assets-math.js} +2 -2
  81. package/dist/esm/common-utils/utils/creditAccount/{calcHealthFactor.js → calc-health-factor.js} +2 -2
  82. package/dist/esm/common-utils/utils/creditAccount/{calcOverallAPY.js → calc-overall-apy.js} +1 -1
  83. package/dist/esm/common-utils/utils/creditAccount/debt.js +2 -2
  84. package/dist/esm/common-utils/utils/creditAccount/index.js +8 -8
  85. package/dist/esm/common-utils/utils/creditAccount/{quotaUtils.js → quota-utils.js} +1 -1
  86. package/dist/esm/common-utils/utils/creditAccount/sort.js +1 -1
  87. package/dist/esm/common-utils/utils/index.js +3 -4
  88. package/dist/esm/dev/AccountOpener.js +6 -47
  89. package/dist/esm/plugins/zappers/ZappersPlugin.js +126 -0
  90. package/dist/esm/{sdk/market/ZapperRegister.js → plugins/zappers/extraZappers.js} +2 -109
  91. package/dist/esm/plugins/zappers/index.js +3 -0
  92. package/dist/esm/plugins/zappers/package.json +1 -0
  93. package/dist/esm/plugins/zappers/types.js +0 -0
  94. package/dist/esm/rewards/apy/index.js +2 -0
  95. package/dist/esm/rewards/apy/output-details.js +0 -0
  96. package/dist/esm/rewards/apy/output.js +0 -0
  97. package/dist/esm/rewards/index.js +2 -0
  98. package/dist/esm/rewards/package.json +1 -0
  99. package/dist/esm/rewards/rewards/api.js +204 -0
  100. package/dist/esm/rewards/rewards/apy.js +160 -0
  101. package/dist/esm/rewards/rewards/common.js +0 -0
  102. package/dist/esm/rewards/rewards/extra-apy.js +101 -0
  103. package/dist/esm/rewards/rewards/index.js +4 -0
  104. package/dist/esm/rewards/rewards/merkl-api.js +18 -0
  105. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +104 -462
  106. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -16
  107. package/dist/esm/sdk/base/ChainContractsRegister.js +1 -1
  108. package/dist/esm/sdk/base/TokensMeta.js +32 -261
  109. package/dist/esm/sdk/base/index.js +0 -1
  110. package/dist/esm/sdk/chain/chains.js +1 -2
  111. package/dist/esm/sdk/constants/index.js +1 -0
  112. package/dist/esm/sdk/{base/token-types.js → constants/phantom-tokens.js} +0 -4
  113. package/dist/esm/sdk/market/MarketRegister.js +2 -2
  114. package/dist/esm/sdk/market/MarketSuite.js +0 -6
  115. package/dist/esm/sdk/market/index.js +0 -1
  116. package/dist/esm/sdk/market/pool/PoolSuite.js +0 -3
  117. package/dist/esm/sdk/market/pool/PoolV310Contract.js +2 -17
  118. package/dist/esm/sdk/market/pool/index.js +0 -2
  119. package/dist/esm/sdk/pools/AbstractPoolService.js +113 -0
  120. package/dist/esm/sdk/pools/PoolServiceV310.js +6 -0
  121. package/dist/esm/sdk/pools/createPoolService.js +11 -0
  122. package/dist/esm/sdk/pools/index.js +2 -1
  123. package/dist/esm/sdk/utils/AddressMap.js +1 -1
  124. package/dist/esm/sdk/utils/viem/sendRawTx.js +1 -19
  125. package/dist/types/common-utils/charts/credit-manager-payload.d.ts +50 -0
  126. package/dist/types/common-utils/charts/credit-manager.d.ts +48 -0
  127. package/dist/types/common-utils/charts/credit-session.d.ts +111 -0
  128. package/dist/types/common-utils/charts/credit-sessions-payload.d.ts +111 -0
  129. package/dist/types/common-utils/charts/graph-payload.d.ts +10 -0
  130. package/dist/types/common-utils/charts/index.d.ts +8 -0
  131. package/dist/types/common-utils/charts/pool-payload.d.ts +111 -0
  132. package/dist/types/common-utils/charts/pool.d.ts +91 -0
  133. package/dist/types/common-utils/charts/token-data.d.ts +20 -0
  134. package/dist/types/common-utils/index.d.ts +2 -0
  135. package/dist/types/common-utils/static/index.d.ts +4 -0
  136. package/dist/types/common-utils/static/migration-config.d.ts +10 -0
  137. package/dist/types/common-utils/static/pool-config.d.ts +11 -0
  138. package/dist/types/common-utils/static/strategy.d.ts +78 -0
  139. package/dist/types/common-utils/static/trading-pair.d.ts +15 -0
  140. package/dist/types/common-utils/utils/creditAccount/index.d.ts +8 -8
  141. package/dist/types/common-utils/utils/index.d.ts +3 -4
  142. package/dist/types/plugins/zappers/ZappersPlugin.d.ts +18 -0
  143. package/dist/types/plugins/zappers/extraZappers.d.ts +6 -0
  144. package/dist/types/plugins/zappers/index.d.ts +3 -0
  145. package/dist/types/plugins/zappers/types.d.ts +12 -0
  146. package/dist/types/rewards/apy/index.d.ts +2 -0
  147. package/dist/types/rewards/apy/output-details.d.ts +96 -0
  148. package/dist/types/rewards/apy/output.d.ts +22 -0
  149. package/dist/types/rewards/index.d.ts +2 -0
  150. package/dist/types/rewards/rewards/api.d.ts +49 -0
  151. package/dist/types/rewards/rewards/apy.d.ts +41 -0
  152. package/dist/types/rewards/rewards/common.d.ts +16 -0
  153. package/dist/types/rewards/rewards/extra-apy.d.ts +30 -0
  154. package/dist/types/rewards/rewards/index.d.ts +4 -0
  155. package/dist/types/rewards/rewards/merkl-api.d.ts +45 -0
  156. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +27 -123
  157. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +1 -1
  158. package/dist/types/sdk/accounts/types.d.ts +8 -108
  159. package/dist/types/sdk/base/TokensMeta.d.ts +18 -34
  160. package/dist/types/sdk/base/index.d.ts +0 -1
  161. package/dist/types/sdk/base/types.d.ts +1 -0
  162. package/dist/types/sdk/chain/chains.d.ts +1 -1
  163. package/dist/types/sdk/constants/index.d.ts +1 -0
  164. package/dist/types/sdk/constants/phantom-tokens.d.ts +2 -0
  165. package/dist/types/sdk/market/MarketRegister.d.ts +2 -2
  166. package/dist/types/sdk/market/MarketSuite.d.ts +0 -3
  167. package/dist/types/sdk/market/index.d.ts +0 -1
  168. package/dist/types/sdk/market/pool/PoolSuite.d.ts +0 -2
  169. package/dist/types/sdk/market/pool/PoolV310Contract.d.ts +2 -6
  170. package/dist/types/sdk/market/pool/index.d.ts +0 -2
  171. package/dist/types/sdk/pools/AbstractPoolService.d.ts +9 -0
  172. package/dist/types/sdk/pools/PoolServiceV310.d.ts +4 -0
  173. package/dist/types/sdk/pools/createPoolService.d.ts +3 -0
  174. package/dist/types/sdk/pools/index.d.ts +2 -1
  175. package/dist/types/sdk/pools/types.d.ts +63 -84
  176. package/dist/types/sdk/utils/AddressMap.d.ts +1 -1
  177. package/dist/types/sdk/utils/viem/sendRawTx.d.ts +1 -5
  178. package/package.json +6 -1
  179. package/dist/cjs/abi/310/iSecuritizeDegenNFT.js +0 -263
  180. package/dist/cjs/abi/310/iSecuritizeKYCFactory.js +0 -278
  181. package/dist/cjs/common-utils/utils/endpoints.js +0 -65
  182. package/dist/cjs/sdk/market/pool/SecuritizeKYCFactory.js +0 -97
  183. package/dist/cjs/sdk/pools/PoolService.js +0 -391
  184. package/dist/esm/abi/310/iSecuritizeDegenNFT.js +0 -239
  185. package/dist/esm/abi/310/iSecuritizeKYCFactory.js +0 -254
  186. package/dist/esm/abi/iStateSerializer.js +0 -12
  187. package/dist/esm/common-utils/utils/endpoints.js +0 -41
  188. package/dist/esm/sdk/market/pool/SecuritizeKYCFactory.js +0 -73
  189. package/dist/esm/sdk/pools/PoolService.js +0 -371
  190. package/dist/types/abi/310/iSecuritizeDegenNFT.d.ts +0 -324
  191. package/dist/types/abi/310/iSecuritizeKYCFactory.d.ts +0 -322
  192. package/dist/types/abi/iStateSerializer.d.ts +0 -11
  193. package/dist/types/common-utils/utils/endpoints.d.ts +0 -27
  194. package/dist/types/sdk/base/token-types.d.ts +0 -33
  195. package/dist/types/sdk/market/ZapperRegister.d.ts +0 -17
  196. package/dist/types/sdk/market/pool/SecuritizeKYCFactory.d.ts +0 -345
  197. package/dist/types/sdk/market/types.d.ts +0 -10
  198. package/dist/types/sdk/pools/PoolService.d.ts +0 -14
  199. /package/dist/cjs/{sdk/market → plugins/zappers}/types.js +0 -0
  200. /package/dist/esm/{sdk/market/types.js → common-utils/charts/credit-manager-payload.js} +0 -0
  201. /package/dist/esm/common-utils/utils/{bigintMath.js → bigint-math.js} +0 -0
  202. /package/dist/esm/common-utils/utils/creditAccount/{calcQuotaBorrowRate.js → calc-quota-borrow-rate.js} +0 -0
  203. /package/dist/esm/common-utils/utils/creditAccount/{calcRelativeBaseBorrowRate.js → calc-relative-base-borrow-rate.js} +0 -0
  204. /package/dist/esm/common-utils/utils/creditAccount/{getTimeToLiquidation.js → get-time-to-liquidation.js} +0 -0
  205. /package/dist/esm/common-utils/utils/creditAccount/{liquidationPrice.js → liquidation-price.js} +0 -0
  206. /package/dist/esm/common-utils/utils/{priceMath.js → price-math.js} +0 -0
  207. /package/dist/types/common-utils/utils/{assetsMath.d.ts → assets-math.d.ts} +0 -0
  208. /package/dist/types/common-utils/utils/{bigintMath.d.ts → bigint-math.d.ts} +0 -0
  209. /package/dist/types/common-utils/utils/creditAccount/{calcHealthFactor.d.ts → calc-health-factor.d.ts} +0 -0
  210. /package/dist/types/common-utils/utils/creditAccount/{calcOverallAPY.d.ts → calc-overall-apy.d.ts} +0 -0
  211. /package/dist/types/common-utils/utils/creditAccount/{calcQuotaBorrowRate.d.ts → calc-quota-borrow-rate.d.ts} +0 -0
  212. /package/dist/types/common-utils/utils/creditAccount/{calcRelativeBaseBorrowRate.d.ts → calc-relative-base-borrow-rate.d.ts} +0 -0
  213. /package/dist/types/common-utils/utils/creditAccount/{getTimeToLiquidation.d.ts → get-time-to-liquidation.d.ts} +0 -0
  214. /package/dist/types/common-utils/utils/creditAccount/{liquidationPrice.d.ts → liquidation-price.d.ts} +0 -0
  215. /package/dist/types/common-utils/utils/creditAccount/{quotaUtils.d.ts → quota-utils.d.ts} +0 -0
  216. /package/dist/types/common-utils/utils/{priceMath.d.ts → price-math.d.ts} +0 -0
@@ -1,110 +1,4 @@
1
- import { peripheryCompressorAbi } from "../../abi/compressors/peripheryCompressor.js";
2
- import { SDKConstruct } from "../base/index.js";
3
- import {
4
- AP_PERIPHERY_COMPRESSOR,
5
- VERSION_RANGE_310
6
- } from "../constants/index.js";
7
- import { AddressMap, hexEq } from "../utils/index.js";
8
- class ZapperRegister extends SDKConstruct {
9
- /**
10
- * Mapping pool.address -> ZapperData[]
11
- * Needs to be loaded explicitly using loadZappers method
12
- */
13
- #zappers;
14
- /**
15
- * Load zappers for all pools using periphery compressor, adds hardcoded zappers
16
- */
17
- async loadZappers(force) {
18
- if (!force && this.#zappers) {
19
- return;
20
- }
21
- const [pcAddr] = this.sdk.addressProvider.mustGetLatest(
22
- AP_PERIPHERY_COMPRESSOR,
23
- VERSION_RANGE_310
24
- );
25
- this.logger?.debug(`loading zappers with periphery compressor ${pcAddr}`);
26
- const markets = this.sdk.marketRegister.markets;
27
- const resp = await this.client.multicall({
28
- contracts: markets.map(
29
- (m) => ({
30
- abi: peripheryCompressorAbi,
31
- address: pcAddr,
32
- functionName: "getZappers",
33
- args: [m.configurator.address, m.pool.pool.address]
34
- })
35
- ),
36
- allowFailure: true,
37
- batchSize: 0
38
- });
39
- this.#zappers = new AddressMap(void 0, "zappers");
40
- for (let i = 0; i < resp.length; i++) {
41
- const { status, result, error } = resp[i];
42
- const marketConfigurator = markets[i].configurator.address;
43
- const pool = markets[i].pool.pool.address;
44
- if (status === "success") {
45
- for (const z of result) {
46
- this.#addZapper({ ...z, pool, type: "base" });
47
- }
48
- } else {
49
- this.logger?.error(
50
- `failed to load zapper for market configurator ${this.labelAddress(
51
- marketConfigurator
52
- )} and pool ${this.labelAddress(pool)}: ${error}`
53
- );
54
- }
55
- }
56
- for (const z of KYC_ZAPPERS[this.networkType] ?? []) {
57
- this.#addZapper({ ...z, type: "kyc" });
58
- }
59
- for (const z of MIGRATION_ZAPPERS[this.networkType] ?? []) {
60
- this.#addZapper({ ...z, type: "migration" });
61
- }
62
- }
63
- #addZapper(z) {
64
- if (BROKEN_ZAPPERS.has(z.baseParams.addr)) {
65
- return;
66
- }
67
- const existing = this.zappers.get(z.pool);
68
- if (existing) {
69
- const hasZapper = existing.some(
70
- (zz) => hexEq(zz.baseParams.addr, z.baseParams.addr)
71
- );
72
- if (!hasZapper) {
73
- existing.push(z);
74
- }
75
- } else {
76
- this.zappers.upsert(z.pool, [z]);
77
- }
78
- const zappersTokens = [z.tokenIn, z.tokenOut];
79
- for (const t of zappersTokens) {
80
- this.sdk.tokensMeta.upsert(t.addr, t);
81
- this.sdk.setAddressLabel(t.addr, t.symbol);
82
- }
83
- }
84
- get zappers() {
85
- if (!this.#zappers) {
86
- throw new Error("zappers not loaded, call loadZappers first");
87
- }
88
- return this.#zappers;
89
- }
90
- poolZappers(pool) {
91
- return this.zappers.get(pool) ?? [];
92
- }
93
- /**
94
- * Can return multiple zappers if there are multiple zappers for the same tokenIn and tokenOut
95
- */
96
- getZapper(pool, tokenIn, tokenOut) {
97
- const zappers = this.zappers.get(pool)?.filter(
98
- (z) => hexEq(z.tokenIn.addr, tokenIn) && hexEq(z.tokenOut.addr, tokenOut)
99
- );
100
- return zappers;
101
- }
102
- }
103
- const BROKEN_ZAPPERS = new AddressMap(
104
- [["0x90D66b03EC4D462e42e3c7741049FB46a4a03B69", true]],
105
- "brokenZappers"
106
- );
107
- const MIGRATION_ZAPPERS = {
1
+ const extraZappers = {
108
2
  Mainnet: [
109
3
  {
110
4
  baseParams: {
@@ -213,7 +107,6 @@ const MIGRATION_ZAPPERS = {
213
107
  }
214
108
  ]
215
109
  };
216
- const KYC_ZAPPERS = {};
217
110
  export {
218
- ZapperRegister
111
+ extraZappers
219
112
  };
@@ -0,0 +1,3 @@
1
+ export * from "./extraZappers.js";
2
+ export * from "./types.js";
3
+ export * from "./ZappersPlugin.js";
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
File without changes
@@ -0,0 +1,2 @@
1
+ export * from "./output.js";
2
+ export * from "./output-details.js";
File without changes
File without changes
@@ -0,0 +1,2 @@
1
+ export * from "./apy/index.js";
2
+ export * from "./rewards/index.js";
@@ -0,0 +1 @@
1
+ {"type": "module","sideEffects":false}
@@ -0,0 +1,204 @@
1
+ import { getAddress, getContract } from "viem";
2
+ import { iFarmingPoolAbi } from "../../abi/iFarmingPool.js";
3
+ import { BigIntMath } from "../../common-utils/index.js";
4
+ import { chains, toBigInt } from "../../sdk/index.js";
5
+ import {
6
+ MerkleXYZApi
7
+ } from "./merkl-api.js";
8
+ class GearboxRewardsApi {
9
+ constructor() {
10
+ }
11
+ static async getLmRewardsV3({
12
+ pools,
13
+ tokensList,
14
+ provider,
15
+ account,
16
+ reportError
17
+ }) {
18
+ const poolByStakedDiesel = Object.values(pools).reduce((acc, p) => {
19
+ p.stakedDieselToken.forEach((t) => {
20
+ if (t) acc[t] = p.address;
21
+ });
22
+ p.stakedDieselToken_old.forEach((t) => {
23
+ if (t) acc[t] = p.address;
24
+ });
25
+ return acc;
26
+ }, {});
27
+ const stakedDieselTokens = Object.keys(poolByStakedDiesel);
28
+ const farmInfoCalls = stakedDieselTokens.map((address) => ({
29
+ address,
30
+ abi: iFarmingPoolAbi,
31
+ functionName: "farmInfo",
32
+ args: []
33
+ }));
34
+ const rewardTokenCalls = stakedDieselTokens.map((address) => ({
35
+ address,
36
+ abi: POOL_REWARDS_ABI,
37
+ functionName: "rewardsToken",
38
+ args: []
39
+ }));
40
+ const farmedCalls = stakedDieselTokens.map((address) => ({
41
+ address,
42
+ abi: iFarmingPoolAbi,
43
+ functionName: "farmed",
44
+ args: [account]
45
+ }));
46
+ const [response] = await Promise.allSettled([
47
+ provider.multicall({
48
+ allowFailure: false,
49
+ contracts: [...farmInfoCalls, ...rewardTokenCalls, ...farmedCalls],
50
+ batchSize: 0
51
+ })
52
+ ]);
53
+ const safeResponse = GearboxRewardsApi.extractFulfilled(response, reportError, "v3Rewards") || [];
54
+ const farmInfoCallsEnd = farmInfoCalls.length;
55
+ const farmInfo = safeResponse.slice(
56
+ 0,
57
+ farmInfoCallsEnd
58
+ );
59
+ const rewardTokenCallsEnd = farmInfoCallsEnd + rewardTokenCalls.length;
60
+ const rewardTokens = safeResponse.slice(
61
+ farmInfoCallsEnd,
62
+ rewardTokenCallsEnd
63
+ );
64
+ const farmedCallsEnd = rewardTokenCallsEnd + farmedCalls.length;
65
+ const farmedList = safeResponse.slice(
66
+ rewardTokenCallsEnd,
67
+ farmedCallsEnd
68
+ );
69
+ const gearboxLmRewards = stakedDieselTokens.map(
70
+ (address, i) => {
71
+ const pool = poolByStakedDiesel[address];
72
+ const info = farmInfo[i];
73
+ const rewardToken = rewardTokens[i]?.toLowerCase();
74
+ const farmed = farmedList[i];
75
+ if (!pool || !info || !rewardToken) return void 0;
76
+ return {
77
+ pool,
78
+ poolToken: address,
79
+ rewardToken,
80
+ rewardTokenDecimals: tokensList[rewardToken]?.decimals || 18,
81
+ rewardTokenSymbol: tokensList[rewardToken]?.symbol || "unknown",
82
+ amount: farmed ?? 0n,
83
+ type: "stakedV3"
84
+ };
85
+ }
86
+ );
87
+ const { zero, nonZero } = gearboxLmRewards.reduce(
88
+ (acc, r) => {
89
+ if (r && r.amount > 0n) {
90
+ acc.nonZero.push(r);
91
+ } else if (r) {
92
+ acc.zero.push(r);
93
+ }
94
+ return acc;
95
+ },
96
+ { nonZero: [], zero: [] }
97
+ );
98
+ return [...nonZero, zero];
99
+ }
100
+ static async getLmRewardsMerkle({
101
+ pools,
102
+ account,
103
+ network,
104
+ reportError
105
+ }) {
106
+ const [merkleXYZLMResponse] = await Promise.allSettled([
107
+ MerkleXYZApi.fetchWithFallback(
108
+ MerkleXYZApi.getUserRewardsUrl({
109
+ params: {
110
+ chainId: chains[network].id,
111
+ user: getAddress(account)
112
+ }
113
+ })
114
+ )
115
+ ]);
116
+ const merkleXYZLm = GearboxRewardsApi.extractFulfilled(
117
+ merkleXYZLMResponse,
118
+ reportError,
119
+ "merkleXYZLm"
120
+ )?.data;
121
+ const poolByItsToken = Object.values(pools).reduce((acc, p) => {
122
+ p.stakedDieselToken.forEach((t) => {
123
+ if (t) acc[t] = p.address;
124
+ });
125
+ p.stakedDieselToken_old.forEach((t) => {
126
+ if (t) acc[t] = p.address;
127
+ });
128
+ acc[p.dieselToken] = p.address;
129
+ return acc;
130
+ }, {});
131
+ const extraRewards = (merkleXYZLm || []).reduce((acc, chainRewards) => {
132
+ chainRewards.rewards.forEach((reward) => {
133
+ const rewardToken = reward.token.address.toLowerCase();
134
+ reward.breakdowns.forEach((reason) => {
135
+ const poolToken = ((reason.reason || "").split("_").find((part) => part.startsWith("0x")) || "").toLowerCase();
136
+ const pool = poolByItsToken[poolToken];
137
+ const total = toBigInt(reason.amount || 0);
138
+ const claimed = toBigInt(reason.claimed || 0);
139
+ const claimable = BigIntMath.max(total - claimed, 0n);
140
+ const key = [pool, poolToken, rewardToken].join("_");
141
+ if (pool && claimable > 0n) {
142
+ const prevAmount = acc[key]?.amount || 0n;
143
+ acc[key] = {
144
+ pool,
145
+ poolToken,
146
+ rewardToken,
147
+ rewardTokenSymbol: reward.token.symbol,
148
+ rewardTokenDecimals: reward.token.decimals || 18,
149
+ amount: prevAmount + claimable,
150
+ type: "extraMerkle"
151
+ };
152
+ }
153
+ });
154
+ });
155
+ return acc;
156
+ }, {});
157
+ return Object.values(extraRewards);
158
+ }
159
+ static extractFulfilled(r, reportError, description) {
160
+ if (r.status === "fulfilled") {
161
+ return r.value;
162
+ } else {
163
+ if (reportError) {
164
+ reportError(r.reason, description);
165
+ } else {
166
+ console.error(r.reason);
167
+ }
168
+ return void 0;
169
+ }
170
+ }
171
+ static async claimLmRewardsV3({
172
+ reward,
173
+ signer,
174
+ account
175
+ }) {
176
+ const pool = getContract({
177
+ address: reward.poolToken,
178
+ abi: iFarmingPoolAbi,
179
+ client: signer
180
+ });
181
+ return pool.write.claim({
182
+ account,
183
+ chain: signer.chain
184
+ });
185
+ }
186
+ }
187
+ const POOL_REWARDS_ABI = [
188
+ {
189
+ inputs: [],
190
+ name: "rewardsToken",
191
+ outputs: [
192
+ {
193
+ internalType: "contract IERC20",
194
+ name: "",
195
+ type: "address"
196
+ }
197
+ ],
198
+ stateMutability: "view",
199
+ type: "function"
200
+ }
201
+ ];
202
+ export {
203
+ GearboxRewardsApi
204
+ };
@@ -0,0 +1,160 @@
1
+ import { PriceUtils } from "../../common-utils/index.js";
2
+ import {
3
+ PERCENTAGE_DECIMALS,
4
+ PERCENTAGE_FACTOR,
5
+ RAY,
6
+ SECONDS_PER_YEAR,
7
+ toBigInt,
8
+ WAD
9
+ } from "../../sdk/index.js";
10
+ const PERCENTAGE_FACTOR_1KK = PERCENTAGE_DECIMALS * PERCENTAGE_FACTOR;
11
+ const ONE = PERCENTAGE_FACTOR_1KK * 10n;
12
+ class GearboxRewardsApy {
13
+ constructor() {
14
+ }
15
+ static getPoolExtraAPY_V3({
16
+ rewardPoolsInfo,
17
+ stakedDieselToken,
18
+ ...restProps
19
+ }) {
20
+ const { version } = restProps.pool;
21
+ const isV3 = version >= 300 && version < 400;
22
+ if (!isV3 || !stakedDieselToken) return [];
23
+ const info = rewardPoolsInfo[stakedDieselToken];
24
+ if (!info) return [];
25
+ const extra = (Array.isArray(info) ? info : [info]).map(
26
+ (inf) => GearboxRewardsApy.getPoolSingleExtraLmAPY_V3({
27
+ ...restProps,
28
+ stakedDieselToken,
29
+ rewardPoolsInfo: inf
30
+ })
31
+ );
32
+ return extra;
33
+ }
34
+ static getPoolSingleExtraLmAPY_V3({
35
+ stakedDieselToken,
36
+ pool,
37
+ prices,
38
+ rewardPoolsInfo,
39
+ rewardPoolsSupply,
40
+ tokensList,
41
+ currentTimestamp
42
+ }) {
43
+ const { underlyingToken, dieselRateRay } = pool;
44
+ const safeSupply = rewardPoolsSupply[stakedDieselToken] ?? 0n;
45
+ const { decimals: underlyingDecimals = 18 } = tokensList[underlyingToken] || {};
46
+ const underlyingPrice = prices[underlyingToken] ?? 0n;
47
+ const dieselPrice = underlyingPrice * dieselRateRay / RAY;
48
+ const rewardAddress = rewardPoolsInfo?.token || "";
49
+ const { decimals: rewardDecimals = 18 } = tokensList[rewardAddress] || {};
50
+ const rewardPrice = prices[rewardAddress] ?? 0n;
51
+ const r = GearboxRewardsApy.calculateAPY_V3({
52
+ currentTimestamp,
53
+ info: rewardPoolsInfo,
54
+ supply: {
55
+ amount: safeSupply,
56
+ decimals: underlyingDecimals,
57
+ price: dieselPrice
58
+ },
59
+ reward: {
60
+ price: rewardPrice,
61
+ decimals: rewardDecimals
62
+ }
63
+ }) / Number(PERCENTAGE_FACTOR);
64
+ return {
65
+ token: stakedDieselToken,
66
+ balance: null,
67
+ apy: r,
68
+ rewardToken: rewardAddress,
69
+ rewardTokenSymbol: rewardPoolsInfo.symbol
70
+ };
71
+ }
72
+ static calculateAPY_V3({
73
+ info,
74
+ supply,
75
+ reward,
76
+ currentTimestamp
77
+ }) {
78
+ const finished = info.finished <= currentTimestamp;
79
+ if (finished) return 0;
80
+ if (supply.amount <= 0n) return 0;
81
+ if (supply.price === 0n || reward.price === 0n) return 0;
82
+ if (info.duration === 0n) return 0;
83
+ const supplyMoney = PriceUtils.calcTotalPrice(
84
+ supply.price,
85
+ supply.amount,
86
+ supply.decimals
87
+ );
88
+ const rewardMoney = PriceUtils.calcTotalPrice(
89
+ reward.price,
90
+ info.reward,
91
+ reward.decimals
92
+ );
93
+ const durationRatio = toBigInt(SECONDS_PER_YEAR) * WAD / info.duration;
94
+ const apyBn = rewardMoney * ONE / supplyMoney * durationRatio / WAD;
95
+ return Math.round(Number(apyBn) / 10);
96
+ }
97
+ static getCAExtraAPY_V3({
98
+ rewardInfo,
99
+ assets,
100
+ ...restProps
101
+ }) {
102
+ const extra = assets.reduce(
103
+ (acc, asset) => {
104
+ const { token } = asset;
105
+ const info = rewardInfo[token || ""];
106
+ if (!info || info.length === 0) return acc;
107
+ const extra2 = info.map(
108
+ (inf) => GearboxRewardsApy.getCASingleExtraAPY_V3({
109
+ ...restProps,
110
+ asset,
111
+ rewardInfo: inf
112
+ })
113
+ );
114
+ acc.push(...extra2);
115
+ return acc;
116
+ },
117
+ []
118
+ );
119
+ return extra;
120
+ }
121
+ static getCASingleExtraAPY_V3({
122
+ asset,
123
+ prices,
124
+ rewardInfo,
125
+ supply,
126
+ tokensList,
127
+ currentTimestamp
128
+ }) {
129
+ const { token, balance } = asset;
130
+ const safeSupply = supply[token] ?? 0n;
131
+ const { decimals: tokenDecimals = 18 } = tokensList[token] || {};
132
+ const tokenPrice = prices[token] ?? 0n;
133
+ const rewardAddress = rewardInfo?.token || "";
134
+ const { decimals: rewardDecimals = 18 } = tokensList[rewardAddress] || {};
135
+ const rewardPrice = prices[rewardAddress] ?? 0n;
136
+ const r = GearboxRewardsApy.calculateAPY_V3({
137
+ currentTimestamp,
138
+ info: rewardInfo,
139
+ supply: {
140
+ amount: typeof safeSupply === "bigint" ? safeSupply : safeSupply.balance,
141
+ decimals: tokenDecimals,
142
+ price: tokenPrice
143
+ },
144
+ reward: {
145
+ price: rewardPrice,
146
+ decimals: rewardDecimals
147
+ }
148
+ }) / Number(PERCENTAGE_FACTOR);
149
+ return {
150
+ token,
151
+ balance,
152
+ apy: r,
153
+ rewardToken: rewardAddress,
154
+ rewardTokenSymbol: rewardInfo.symbol
155
+ };
156
+ }
157
+ }
158
+ export {
159
+ GearboxRewardsApy
160
+ };
File without changes
@@ -0,0 +1,101 @@
1
+ import axios from "axios";
2
+ import { BigIntMath } from "../../common-utils/index.js";
3
+ import {
4
+ chains,
5
+ PERCENTAGE_FACTOR,
6
+ toBN
7
+ } from "../../sdk/index.js";
8
+ function getKeyForPoolPointsInfo(i) {
9
+ return [
10
+ i.pool,
11
+ i.token,
12
+ i.symbol,
13
+ i.duration,
14
+ i.name,
15
+ i.type,
16
+ i.estimation,
17
+ i.condition
18
+ ].join("-");
19
+ }
20
+ class GearboxRewardsExtraApy {
21
+ constructor() {
22
+ }
23
+ static async getTotalTokensOnProtocol({
24
+ tokensToCheck,
25
+ tokensList,
26
+ network
27
+ }) {
28
+ const list = [...new Set(tokensToCheck)];
29
+ const res = await Promise.allSettled(
30
+ list.map(
31
+ (t) => GearboxRewardsExtraApy.getTokenTotal(t, network, tokensList)
32
+ )
33
+ );
34
+ return res.map((r, i) => [
35
+ list[i],
36
+ r
37
+ ]);
38
+ }
39
+ static async getTokenTotal(token, network, tokensList) {
40
+ const chainId = chains[network]?.id;
41
+ const url = `https://charts-server.fly.dev/api/getBalanceAt?asset=${token}&chainId=${chainId}`;
42
+ const result = await axios.get(url);
43
+ const balance = result.data.result.reduce(
44
+ (sum, r) => r.effective_balance + sum,
45
+ 0
46
+ );
47
+ const { decimals = 18 } = tokensList[token] || {};
48
+ return { token, balance: toBN(String(balance), decimals) };
49
+ }
50
+ static getPointsByPool({
51
+ poolRewards,
52
+ totalTokenBalances,
53
+ pools,
54
+ tokensList
55
+ }) {
56
+ const r = pools.reduce((acc, p) => {
57
+ const pointsInfo = poolRewards[p.address] || [];
58
+ const poolPointsList = pointsInfo.reduce(
59
+ (acc2, pointsInfo2) => {
60
+ const { address: tokenAddress } = tokensList[pointsInfo2.token] || {};
61
+ const tokenBalance = totalTokenBalances[tokenAddress || ""];
62
+ const points = GearboxRewardsExtraApy.getPoolTokenPoints(
63
+ tokenBalance,
64
+ p,
65
+ tokensList,
66
+ pointsInfo2
67
+ );
68
+ if (points !== null) {
69
+ acc2.push({
70
+ key: getKeyForPoolPointsInfo(pointsInfo2),
71
+ info: pointsInfo2,
72
+ points
73
+ });
74
+ }
75
+ return acc2;
76
+ },
77
+ []
78
+ );
79
+ acc[p.address] = poolPointsList;
80
+ return acc;
81
+ }, {});
82
+ return r;
83
+ }
84
+ static getPoolTokenPoints(tokenBalanceInPool, pool, tokensList, pointsInfo) {
85
+ if (pool.expectedLiquidity <= 0) return 0n;
86
+ if (pointsInfo.estimation === "relative" && !tokenBalanceInPool)
87
+ return null;
88
+ const { decimals = 18 } = tokensList[pointsInfo.token] || {};
89
+ const targetFactor = 10n ** BigInt(decimals);
90
+ const defaultPoints = pointsInfo.amount * targetFactor / PERCENTAGE_FACTOR;
91
+ if (pointsInfo.estimation === "absolute") return defaultPoints;
92
+ const { decimals: underlyingDecimals = 18 } = tokensList[pool.underlyingToken] || {};
93
+ const underlyingFactor = 10n ** BigInt(underlyingDecimals);
94
+ const points = (tokenBalanceInPool?.balance || 0n) * defaultPoints / (pool.expectedLiquidity * targetFactor / underlyingFactor);
95
+ return BigIntMath.min(points, defaultPoints);
96
+ }
97
+ }
98
+ export {
99
+ GearboxRewardsExtraApy,
100
+ getKeyForPoolPointsInfo
101
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./api.js";
2
+ export * from "./apy.js";
3
+ export * from "./extra-apy.js";
4
+ export * from "./merkl-api.js";
@@ -0,0 +1,18 @@
1
+ import axios from "axios";
2
+ class MerkleXYZApi {
3
+ constructor() {
4
+ }
5
+ static defaultDomain = "https://api.merkl.xyz";
6
+ static angleDomain = "https://api-merkl.angle.money";
7
+ static fetchWithFallback = async (getUrl) => {
8
+ try {
9
+ return await axios.get(getUrl(MerkleXYZApi.defaultDomain));
10
+ } catch {
11
+ return await axios.get(getUrl(MerkleXYZApi.angleDomain));
12
+ }
13
+ };
14
+ static getUserRewardsUrl = (options) => (domain) => `${domain}/v4/users/${options.params.user}/rewards?chainId=${options.params.chainId}`;
15
+ }
16
+ export {
17
+ MerkleXYZApi
18
+ };