@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.
- package/dist/esm/bytecodes/gaugeManager/curveGaugeRewardsData.js +36 -0
- package/dist/esm/bytecodes/gaugeManager/curveGaugeRewardsData.js.map +1 -0
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js +2 -2
- package/dist/esm/bytecodes/strategies/batches/batchPancakeSwapPositions.js.map +1 -1
- package/dist/esm/bytecodes/votemarket/batchCampaigns.js +1 -1
- package/dist/esm/bytecodes/votemarket/batchCampaigns.js.map +1 -1
- package/dist/esm/gaugeManager/curve/gmFetchGauge.js +34 -0
- package/dist/esm/gaugeManager/curve/gmFetchGauge.js.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Positions.js +24 -5
- package/dist/esm/strategies/pancakeswap/fetch/getPancakeV3Positions.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/votemarket/fetchCampaigns.js +24 -6
- package/dist/esm/votemarket/fetchCampaigns.js.map +1 -1
- package/dist/esm/votemarket/types.js +2 -0
- package/dist/esm/votemarket/types.js.map +1 -0
- package/dist/types/bytecodes/gaugeManager/curveGaugeRewardsData.d.ts +4 -0
- package/dist/types/bytecodes/gaugeManager/curveGaugeRewardsData.d.ts.map +1 -0
- package/dist/types/gaugeManager/curve/gmFetchGauge.d.ts +25 -0
- package/dist/types/gaugeManager/curve/gmFetchGauge.d.ts.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/strategies/pancakeswap/fetch/getPancakeV3Positions.d.ts.map +1 -1
- package/dist/types/utils.d.ts +1 -1
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/votemarket/fetchCampaigns.d.ts +4 -11
- package/dist/types/votemarket/fetchCampaigns.d.ts.map +1 -1
- package/dist/types/votemarket/types.d.ts +40 -0
- package/dist/types/votemarket/types.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/bytecodes/gaugeManager/curveGaugeRewardsData.ts +39 -0
- package/src/bytecodes/strategies/batches/batchPancakeSwapPositions.ts +2 -2
- package/src/bytecodes/votemarket/batchCampaigns.ts +1 -1
- package/src/gaugeManager/curve/gmFetchGauge.ts +68 -0
- package/src/index.ts +13 -0
- package/src/strategies/pancakeswap/fetch/getPancakeV3Positions.ts +33 -8
- package/src/utils.ts +1 -1
- package/src/votemarket/fetchCampaigns.ts +31 -20
- 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
|
|
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
|
|
51
|
-
|
|
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
|
|
98
|
-
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
|
+
}
|