@stake-dao/reader 0.5.36 → 0.5.38

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 (64) hide show
  1. package/dist/esm/bytecodes/index.js +0 -1
  2. package/dist/esm/bytecodes/index.js.map +1 -1
  3. package/dist/esm/index.js +0 -3
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/lockers/fetch/index.js +3 -5
  6. package/dist/esm/lockers/fetch/index.js.map +1 -1
  7. package/dist/esm/lockers/fetch/static.js +0 -2
  8. package/dist/esm/lockers/fetch/static.js.map +1 -1
  9. package/dist/esm/strategies/utils/boost.js +0 -4
  10. package/dist/esm/strategies/utils/boost.js.map +1 -1
  11. package/dist/esm/utils.js +0 -1
  12. package/dist/esm/utils.js.map +1 -1
  13. package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js +58 -6
  14. package/dist/esm/votemarket/curve/fetchUserVlCvxClaimable.js.map +1 -1
  15. package/dist/esm/votemarket/fetchCampaigns/processRawCampaigns.js +1 -0
  16. package/dist/esm/votemarket/fetchCampaigns/processRawCampaigns.js.map +1 -1
  17. package/dist/types/bytecodes/index.d.ts +0 -1
  18. package/dist/types/bytecodes/index.d.ts.map +1 -1
  19. package/dist/types/index.d.ts +0 -2
  20. package/dist/types/index.d.ts.map +1 -1
  21. package/dist/types/lockers/fetch/index.d.ts +5 -2
  22. package/dist/types/lockers/fetch/index.d.ts.map +1 -1
  23. package/dist/types/lockers/fetch/static.d.ts.map +1 -1
  24. package/dist/types/strategies/utils/boost.d.ts.map +1 -1
  25. package/dist/types/utils.d.ts.map +1 -1
  26. package/dist/types/votemarket/curve/fetchUserVlCvxClaimable.d.ts.map +1 -1
  27. package/dist/types/votemarket/fetchCampaigns/processRawCampaigns.d.ts.map +1 -1
  28. package/dist/types/votemarket/types.d.ts +2 -0
  29. package/dist/types/votemarket/types.d.ts.map +1 -1
  30. package/package.json +2 -2
  31. package/src/bytecodes/index.ts +0 -1
  32. package/src/index.ts +0 -4
  33. package/src/lockers/fetch/index.ts +4 -5
  34. package/src/lockers/fetch/static.ts +0 -2
  35. package/src/strategies/utils/boost.ts +0 -6
  36. package/src/utils.ts +0 -1
  37. package/src/votemarket/curve/fetchUserVlCvxClaimable.ts +67 -6
  38. package/src/votemarket/fetchCampaigns/processRawCampaigns.ts +1 -0
  39. package/src/votemarket/types.ts +2 -0
  40. package/dist/esm/abis/angleVaultsMulticall.js +0 -85
  41. package/dist/esm/abis/angleVaultsMulticall.js.map +0 -1
  42. package/dist/esm/bytecodes/strategies/batches/batchAngleStrats.js +0 -24
  43. package/dist/esm/bytecodes/strategies/batches/batchAngleStrats.js.map +0 -1
  44. package/dist/esm/lockers/fetch/protocols/angle.js +0 -136
  45. package/dist/esm/lockers/fetch/protocols/angle.js.map +0 -1
  46. package/dist/esm/strategies/angle/endpoints.js +0 -3
  47. package/dist/esm/strategies/angle/endpoints.js.map +0 -1
  48. package/dist/esm/strategies/angle/fetch.js +0 -213
  49. package/dist/esm/strategies/angle/fetch.js.map +0 -1
  50. package/dist/types/abis/angleVaultsMulticall.d.ts +0 -42
  51. package/dist/types/abis/angleVaultsMulticall.d.ts.map +0 -1
  52. package/dist/types/bytecodes/strategies/batches/batchAngleStrats.d.ts +0 -4
  53. package/dist/types/bytecodes/strategies/batches/batchAngleStrats.d.ts.map +0 -1
  54. package/dist/types/lockers/fetch/protocols/angle.d.ts +0 -9
  55. package/dist/types/lockers/fetch/protocols/angle.d.ts.map +0 -1
  56. package/dist/types/strategies/angle/endpoints.d.ts +0 -3
  57. package/dist/types/strategies/angle/endpoints.d.ts.map +0 -1
  58. package/dist/types/strategies/angle/fetch.d.ts +0 -22
  59. package/dist/types/strategies/angle/fetch.d.ts.map +0 -1
  60. package/src/abis/angleVaultsMulticall.ts +0 -85
  61. package/src/bytecodes/strategies/batches/batchAngleStrats.ts +0 -26
  62. package/src/lockers/fetch/protocols/angle.ts +0 -157
  63. package/src/strategies/angle/endpoints.ts +0 -2
  64. package/src/strategies/angle/fetch.ts +0 -253
@@ -1,253 +0,0 @@
1
- import { STRAT_FEES, Zero, angleStrats, contracts } from '@stake-dao/constants'
2
- import { chunk, uniq } from 'lodash-es'
3
- import { encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
4
- import { mainnet } from 'viem/chains'
5
- import multicallAngleVaultsAbi from '../../abis/angleVaultsMulticall.js'
6
- import { batchAngleStrats } from '../../bytecodes/index.js'
7
- import { type Price, getPricesFromLlama } from '../../prices.js'
8
- import { batchJsonRpc, equalTlc, multicall } from '../../utils.js'
9
- import type { RewardsData, SdtApr } from '../types.js'
10
- import { getAprBreakdown } from '../utils/getAprBreakdown.js'
11
- import getTokenTypes from '../utils/getTokenTypes.js'
12
- import { ANGLE_APR_URL, ANGLE_PRICE_URL } from './endpoints.js'
13
-
14
- interface TFetchAngle {
15
- prices: Price[]
16
- provider: any
17
- rpc: string
18
- chainId: number
19
- }
20
-
21
- export const fetchAngle = async ({ prices, provider, rpc, chainId }: TFetchAngle) => {
22
- const stratsDataCalls: { vault: string; token: string; sdtLiquidityGauge: string }[] = []
23
- const balancesCalls: { address: string; name: string }[] = []
24
- const dataCalls: { address: string; name: string }[] = []
25
-
26
- const strats = angleStrats.strats[chainId].filter((s) => s.chainId === chainId)
27
-
28
- const tokensToFetch: any = []
29
-
30
- for (const s of strats) {
31
- tokensToFetch.push(...s.underlyingCoins)
32
- if (s.lpToken.symbol !== 'SLP') {
33
- balancesCalls.push(
34
- ...[
35
- {
36
- address: s.lpToken.address,
37
- name: s.key.includes('gamma') ? 'getTotalAmounts' : 'getUnderlyingBalances',
38
- },
39
- {
40
- address: s.lpToken.address,
41
- name: 'totalSupply',
42
- },
43
- ],
44
- )
45
- }
46
- dataCalls.push(
47
- ...[
48
- { address: s.vault, name: 'totalSupply' },
49
- { address: s.rewards[0].gauge, name: 'totalSupply' },
50
- { address: s.rewards[0].gauge, name: 'working_supply' },
51
- ],
52
- )
53
- }
54
-
55
- const httpCalls = [
56
- // Angle APR
57
- (await fetch(ANGLE_APR_URL)).json(),
58
- // Angle Prices
59
- (await fetch(ANGLE_PRICE_URL)).json(),
60
- // Defillama prices
61
- await getPricesFromLlama(uniq(tokensToFetch), chainId),
62
- ]
63
-
64
- const httpResponses = await Promise.all(httpCalls)
65
-
66
- const rawBalances: any = await multicall(provider, balancesCalls, multicallAngleVaultsAbi)
67
- const rawData: any = await multicall(provider, dataCalls, multicallAngleVaultsAbi)
68
-
69
- const angleAprData = httpResponses[0]
70
- const anglePriceData = httpResponses[1]
71
- const defillamaPrices = httpResponses[2]
72
-
73
- let rawPriceIndex = 0
74
- const stratsWithApy = strats.map((s) => {
75
- const aprData = angleAprData[s.aprApiKey]
76
- let priceData = anglePriceData.find((d) => d.token === s.aprApiKey)
77
-
78
- if (!priceData) {
79
- const token0 = s.underlyingCoins[0]
80
- const token1 = s.underlyingCoins[1]
81
- const token0Price = defillamaPrices.find((p) => p.symbol === token0.symbol)
82
- const token1Price = defillamaPrices.find((p) => p.symbol === token1.symbol)
83
- const token0AmountUsd =
84
- Number(formatUnits(rawBalances[rawPriceIndex].result[0], token0.decimals)) * token0Price.usdPrice
85
- const token1AmountUsd =
86
- Number(formatUnits(rawBalances[rawPriceIndex].result[1], token1.decimals)) * token1Price.usdPrice
87
- const totalLp = Number(formatUnits(rawBalances[rawPriceIndex + 1].result, 18))
88
- const lpPriceInUsd = (token0AmountUsd + token1AmountUsd) / totalLp
89
-
90
- priceData = { rate: lpPriceInUsd }
91
-
92
- rawPriceIndex += 2
93
- }
94
-
95
- let maxApr = 0
96
- let tradingApy = 0
97
-
98
- if (aprData?.details && aprData.value && aprData.address) {
99
- tradingApy = aprData.details.fees ? aprData.details.fees : 0
100
- const aprDetailsKeys = Object.keys(aprData.details)
101
- const indexOfApy = aprDetailsKeys.map((k) => k.includes(s.lpToken.address.toLowerCase())).indexOf(true)
102
- maxApr =
103
- indexOfApy > 0
104
- ? aprData.details[aprDetailsKeys[indexOfApy]!]
105
- : aprData.details.max
106
- ? aprData.details.max
107
- : aprData.value - tradingApy
108
- }
109
-
110
- if (s.key === 'angle-sushi-eura-angle') {
111
- stratsDataCalls.push({
112
- vault: s.vault,
113
- token: s.lpToken.address,
114
- sdtLiquidityGauge: s.gaugeAddress,
115
- })
116
- }
117
-
118
- return {
119
- ...s,
120
- tradingApy,
121
- minApr: (maxApr * ((100 - STRAT_FEES) / 100)) / 2.5,
122
- maxApr: maxApr * ((100 - STRAT_FEES) / 100),
123
- lpPriceInUsd: priceData ? priceData.rate : 1,
124
- }
125
- })
126
-
127
- const inputArgsChunks = chunk(stratsDataCalls, 20)
128
- const angleCalls = inputArgsChunks.map((inputArgs) => {
129
- const inputData = encodeAbiParameters(parseAbiParameters(batchAngleStrats.inputType[chainId]!) as any, [
130
- contracts.sdGaugeController![chainId],
131
- inputArgs,
132
- ])
133
- return batchAngleStrats.bytecode[chainId]!.concat(inputData.slice(2))
134
- })
135
-
136
- const rawAngleData = await batchJsonRpc({
137
- rpc,
138
- calls: angleCalls,
139
- outputTypeAbi: batchAngleStrats.outputTypeHr[chainId],
140
- callsKey: `strategies/angle/fetch.ts: rawAngleData - chainId ${chainId} - rpc ${rpc}`,
141
- })
142
-
143
- let offchainDataIndex = 0
144
- const parsedStrats = stratsWithApy.map((s) => {
145
- let fetchedData: any
146
-
147
- if (s.offchain) {
148
- fetchedData = {
149
- totalSupply: rawData[offchainDataIndex].result,
150
- sdGaugeTotalSupply: rawData[offchainDataIndex + 1].result,
151
- sdWorkingSupply: chainId === mainnet.id ? rawData[offchainDataIndex + 2].result : Zero,
152
- accumulatedFees: Zero,
153
- keeperFee: Zero,
154
- }
155
- } else {
156
- fetchedData = rawAngleData.shift()
157
- }
158
-
159
- offchainDataIndex += 3
160
-
161
- const rewardsData: RewardsData[] = s.rewards.map((r: any) => {
162
- const rewardToken = {
163
- symbol: r.symbol,
164
- name: r.name,
165
- decimals: r.decimals,
166
- address: r.address,
167
- }
168
- const rewardPrice = prices.find((p: any) => equalTlc(p.address, rewardToken.address))
169
-
170
- return {
171
- token: rewardToken,
172
- price: rewardPrice ? rewardPrice.usdPrice : 0,
173
- apr: 0,
174
- streaming: false,
175
- periodFinish: 0,
176
- rate: '0',
177
- lastUpdate: '0',
178
- claimablePendingRewards: '0',
179
- }
180
- })
181
-
182
- const boost = 2.5
183
- const sdtApr: SdtApr = {
184
- sdtUserApr: 0,
185
- sdtFuturUserApr: 0,
186
- sdtMinApr: 0,
187
- sdtFuturMinApr: 0,
188
- sdtMaxApr: 0,
189
- sdtFuturMaxApr: 0,
190
- sdtBoost: 1,
191
- }
192
- const apr = getAprBreakdown(s, rewardsData, boost, sdtApr)
193
-
194
- const totalSupply = formatUnits(fetchedData.totalSupply, 0)
195
- const lpPriceInUsd = s.lpPriceInUsd
196
- const tvl = lpPriceInUsd * Number(formatUnits(BigInt(fetchedData.totalSupply), 18))
197
-
198
- const sdGauge = {
199
- address: s.gaugeAddress,
200
- totalSupply: formatUnits(fetchedData.sdGaugeTotalSupply, 0),
201
- relativeWeight: '0',
202
- weight: '0',
203
- futureWeight: '0',
204
- workingSupply: '0',
205
- }
206
-
207
- return {
208
- key: s.key,
209
- name: s.name,
210
- tokensFilter: getTokenTypes(s),
211
- protocol: s.protocol,
212
- chainId: s.chainId,
213
- vault: s.vault,
214
- lpToken: s.lpToken,
215
- gaugeAddress: s.gaugeAddress,
216
- coins: s.coins,
217
- sdGauge,
218
- lpPriceInUsd,
219
- streaming: rewardsData.some((r) => Number(r.periodFinish) > Math.floor(Date.now() / 1000)),
220
- tvl,
221
- apr: {
222
- boost,
223
- ...apr,
224
- },
225
- rewards: rewardsData,
226
- // Base APR data
227
- tradingApy: s.tradingApy,
228
- minApr: s.minApr,
229
- maxApr: s.maxApr,
230
- // Raw data
231
- totalSupply,
232
- // Gas optimised
233
- vaultFees: {
234
- keeper: Number(fetchedData.keeperFee) / 100,
235
- accumulated: formatUnits(fetchedData.accumulatedFees, 0),
236
- },
237
- }
238
- })
239
-
240
- return {
241
- global: {
242
- fees: {
243
- veSdt: 5,
244
- perf: 2,
245
- accumulator: 8,
246
- claimer: 0.5,
247
- },
248
- },
249
- deployed: parsedStrats,
250
- notDeployed: [],
251
- fetched: true,
252
- }
253
- }