@stake-dao/reader 0.4.26 → 0.4.27

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 (40) hide show
  1. package/dist/esm/bytecodes/gaugeManager/curveGaugeRewardsData.js +36 -0
  2. package/dist/esm/bytecodes/gaugeManager/curveGaugeRewardsData.js.map +1 -0
  3. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js +2 -2
  4. package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js.map +1 -1
  5. package/dist/esm/bytecodes/votemarket/batchCampaigns.js +1 -1
  6. package/dist/esm/bytecodes/votemarket/batchCampaigns.js.map +1 -1
  7. package/dist/esm/gaugeManager/curve/gmFetchGauge.js +34 -0
  8. package/dist/esm/gaugeManager/curve/gmFetchGauge.js.map +1 -0
  9. package/dist/esm/index.js +7 -0
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Positions.js +24 -5
  12. package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Positions.js.map +1 -1
  13. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  14. package/dist/esm/votemarket/fetchCampaigns.js +24 -6
  15. package/dist/esm/votemarket/fetchCampaigns.js.map +1 -1
  16. package/dist/esm/votemarket/types.js +2 -0
  17. package/dist/esm/votemarket/types.js.map +1 -0
  18. package/dist/types/bytecodes/gaugeManager/curveGaugeRewardsData.d.ts +4 -0
  19. package/dist/types/bytecodes/gaugeManager/curveGaugeRewardsData.d.ts.map +1 -0
  20. package/dist/types/gaugeManager/curve/gmFetchGauge.d.ts +25 -0
  21. package/dist/types/gaugeManager/curve/gmFetchGauge.d.ts.map +1 -0
  22. package/dist/types/index.d.ts +5 -0
  23. package/dist/types/index.d.ts.map +1 -1
  24. package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Positions.d.ts.map +1 -1
  25. package/dist/types/utils.d.ts +1 -1
  26. package/dist/types/utils.d.ts.map +1 -1
  27. package/dist/types/votemarket/fetchCampaigns.d.ts +4 -11
  28. package/dist/types/votemarket/fetchCampaigns.d.ts.map +1 -1
  29. package/dist/types/votemarket/types.d.ts +40 -0
  30. package/dist/types/votemarket/types.d.ts.map +1 -0
  31. package/package.json +1 -1
  32. package/src/bytecodes/gaugeManager/curveGaugeRewardsData.ts +39 -0
  33. package/src/bytecodes/strategies/batches/batchPancakeSwapPositions.ts +2 -2
  34. package/src/bytecodes/votemarket/batchCampaigns.ts +1 -1
  35. package/src/gaugeManager/curve/gmFetchGauge.ts +68 -0
  36. package/src/index.ts +13 -0
  37. package/src/strategies/pancakeswap/fetch/getPancakeV3Positions.ts +33 -8
  38. package/src/utils.ts +1 -1
  39. package/src/votemarket/fetchCampaigns.ts +31 -20
  40. package/src/votemarket/types.ts +39 -0
@@ -1,11 +1,15 @@
1
- import { tokenWithAddress, tokens } from '@stake-dao/constants'
2
- import { chunk, range, remove, uniq } from 'lodash-es'
1
+ import { ONE_WEEK, tokenWithAddress, tokens } from '@stake-dao/constants'
2
+ import { chunk, filter, range, remove, uniq } from 'lodash-es'
3
3
  import { decodeAbiParameters, encodeAbiParameters, formatUnits, parseAbiParameters } from 'viem'
4
4
  import { batchTokenData } from '../bytecodes/index.js'
5
5
  import batchCampaigns from '../bytecodes/votemarket/batchCampaigns.js'
6
+ import { getPrices } from '../prices.js'
6
7
  import { batchJsonRpc, concatBytecode, equalTlc, rpcCall } from '../utils.js'
8
+ import type { Campaign } from './types.js'
7
9
 
8
10
  export const CAMPAIGNS_CHUNK_SIZE = 10
11
+ export const CLAIM_WINDOW_LENGTH = 24 // weeks
12
+ export const CLOSE_WINDOW_LENGTH = 4 // weeks
9
13
 
10
14
  interface FetchCampaignsProps {
11
15
  platform: string
@@ -13,16 +17,7 @@ interface FetchCampaignsProps {
13
17
  rpc: string
14
18
  }
15
19
 
16
- export type Gauge = {
17
- gauge: string
18
- inflationRate: string
19
- relativeWeight: string
20
- futureRelativeWeight: string
21
- }
22
-
23
- export type GaugesData = { totalGaugesWeight: string; gauges: Gauge[] }
24
-
25
- export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsProps): Promise<any> => {
20
+ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsProps): Promise<Campaign[]> => {
26
21
  const nCampaignsRequest = await rpcCall(rpc, [{ to: platform, data: '0x7274e30d' }]) // campaignCount
27
22
  const nCampaigns = Number(
28
23
  decodeAbiParameters([{ type: 'uint256', name: 'campaignCount' }], nCampaignsRequest[0].result),
@@ -47,10 +42,8 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
47
42
  callsKey: `votemarket/fetchCampaigns.ts: rawCampaigns - chainId ${chainId} - rpc ${rpc}`,
48
43
  })
49
44
 
50
- const tokensToFetch: string[] = remove(
51
- uniq(rawCampaigns.map((rc) => rc.campaign.rewardToken)),
52
- (t) => !tokenWithAddress(t, chainId),
53
- )
45
+ const campaignsTokens: string[] = uniq(rawCampaigns.map((rc) => rc.campaign.rewardToken))
46
+ const tokensToFetch: string[] = remove(campaignsTokens, (t) => !tokenWithAddress(t, chainId))
54
47
 
55
48
  let rawTokensData: any[] = []
56
49
  if (tokensToFetch.length > 0) {
@@ -69,8 +62,8 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
69
62
  })
70
63
  }
71
64
 
72
- const fetchedTokens = [
73
- ...tokens,
65
+ const fetchedTokens: any = [
66
+ ...filter(tokens, (t) => campaignsTokens.find((ct) => equalTlc(ct, t.address))),
74
67
  ...rawTokensData.map((t) => ({
75
68
  name: t.name,
76
69
  symbol: t.symbol,
@@ -80,22 +73,32 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
80
73
  })),
81
74
  ]
82
75
 
76
+ const prices = await getPrices(fetchedTokens as any, chainId)
77
+
78
+ const currentTimestamp = Math.floor(Date.now() / 1000)
79
+
83
80
  const campaigns = rawCampaigns.map((rc) => {
84
81
  const rewardToken = fetchedTokens.find((t) => equalTlc(t.address, rc.campaign.rewardToken) && t.chainId === chainId)
85
82
  const decimals = rewardToken ? rewardToken.decimals : 18
86
83
 
84
+ const rewardTokenPrice = prices.find((p) => equalTlc(rc.campaign.rewardToken, p.address))?.usdPrice || 0
85
+
86
+ const startTimestamp = Number(rc.campaign.startTimestamp)
87
+ const endTimestamp = Number(rc.campaign.endTimestamp)
88
+
87
89
  return {
88
90
  id: Number(rc.id),
89
91
  chainId: Number(rc.campaign.chainId),
90
92
  gauge: rc.campaign.gauge,
91
93
  manager: rc.campaign.manager,
92
94
  rewardToken,
95
+ rewardTokenPrice,
93
96
  numberOfPeriods: Number(rc.campaign.numberOfPeriods),
94
97
  maxRewardPerVote: formatUnits(rc.campaign.maxRewardPerVote, decimals),
95
98
  totalRewardAmount: formatUnits(rc.campaign.totalRewardAmount, decimals),
96
99
  totalDistributed: formatUnits(rc.campaign.totalDistributed, decimals),
97
- startTimestamp: Number(rc.campaign.startTimestamp),
98
- endTimestamp: Number(rc.campaign.endTimestamp),
100
+ startTimestamp,
101
+ endTimestamp,
99
102
  hook: rc.campaign.hook,
100
103
  isKilled: rc.isKilled,
101
104
  addresses: rc.addresses,
@@ -107,7 +110,15 @@ export const fetchCampaigns = async ({ platform, chainId, rpc }: FetchCampaignsP
107
110
  leftover: formatUnits(rc.currentPeriod.leftover, decimals),
108
111
  updated: rc.currentPeriod.updated,
109
112
  },
113
+ totalPeriods: (endTimestamp - startTimestamp) / ONE_WEEK,
110
114
  periodLeft: Number(rc.periodLeft),
115
+ status: {
116
+ voteOpen: endTimestamp - ONE_WEEK > currentTimestamp,
117
+ voteClosed: currentTimestamp > endTimestamp - ONE_WEEK,
118
+ claimOpen: currentTimestamp > startTimestamp,
119
+ claimClosed: currentTimestamp > endTimestamp + CLAIM_WINDOW_LENGTH * ONE_WEEK,
120
+ expired: currentTimestamp > endTimestamp + (CLAIM_WINDOW_LENGTH + CLOSE_WINDOW_LENGTH) * ONE_WEEK,
121
+ },
111
122
  }
112
123
  })
113
124
 
@@ -0,0 +1,39 @@
1
+ export type Campaign = {
2
+ id: number
3
+ chainId: number
4
+ gauge: string
5
+ manager: string
6
+ rewardToken: {
7
+ name: string
8
+ symbol: string
9
+ address: string
10
+ decimals: number
11
+ chainId: number
12
+ }
13
+ numberOfPeriods: number
14
+ maxRewardPerVote: string
15
+ totalRewardAmount: string
16
+ totalDistributed: string
17
+ startTimestamp: number
18
+ endTimestamp: number
19
+ hook: string
20
+ isKilled: boolean
21
+ addresses: string[]
22
+ isWhitelist: boolean
23
+ isBlacklist: boolean
24
+ currentPeriod: {
25
+ rewardPerPeriod: string
26
+ rewardPerVote: string
27
+ leftover: string
28
+ updated: boolean
29
+ }
30
+ totalPeriods: number
31
+ periodLeft: number
32
+ status: {
33
+ voteOpen: boolean
34
+ voteClosed: boolean
35
+ claimOpen: boolean
36
+ claimClosed: boolean
37
+ expired: boolean
38
+ }
39
+ }