@stake-dao/reader 0.4.34 → 0.4.36
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/ccipGas.js +11 -0
- package/dist/esm/bytecodes/ccipGas.js.map +1 -0
- package/dist/esm/bytecodes/votemarket/batchCampaignsRestrictedVotes.js +2 -2
- package/dist/esm/bytecodes/votemarket/batchCampaignsRestrictedVotes.js.map +1 -1
- package/dist/esm/ccip/fetchCcipFee.js +1 -1
- package/dist/esm/ccip/fetchCcipFee.js.map +1 -1
- package/dist/esm/ccip/fetchCcipGas.js +37 -0
- package/dist/esm/ccip/fetchCcipGas.js.map +1 -0
- package/dist/esm/index.js +1 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lockers/fetch/index.js +18 -41
- package/dist/esm/lockers/fetch/index.js.map +1 -1
- package/dist/esm/lockers/utils/getBribesRewardsData.js +1 -0
- package/dist/esm/lockers/utils/getBribesRewardsData.js.map +1 -1
- package/dist/esm/strategies/pendle/fetch.js +6 -5
- package/dist/esm/strategies/pendle/fetch.js.map +1 -1
- package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
- package/dist/esm/utils.js +17 -2
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/votemarket/fetchCampaigns.js +10 -17
- package/dist/esm/votemarket/fetchCampaigns.js.map +1 -1
- package/dist/types/bytecodes/ccipGas.d.ts +4 -0
- package/dist/types/bytecodes/ccipGas.d.ts.map +1 -0
- package/dist/types/ccip/fetchCcipFee.d.ts +1 -1
- package/dist/types/ccip/fetchCcipGas.d.ts +22 -0
- package/dist/types/ccip/fetchCcipGas.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lockers/fetch/index.d.ts.map +1 -1
- package/dist/types/lockers/utils/getBribesRewardsData.d.ts.map +1 -1
- package/dist/types/strategies/pendle/fetch.d.ts.map +1 -1
- package/dist/types/utils.d.ts +2 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/dist/types/votemarket/fetchCampaigns.d.ts +1 -2
- package/dist/types/votemarket/fetchCampaigns.d.ts.map +1 -1
- package/dist/types/votemarket/types.d.ts +1 -0
- package/dist/types/votemarket/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/bytecodes/ccipGas.ts +14 -0
- package/src/bytecodes/votemarket/batchCampaignsRestrictedVotes.ts +2 -2
- package/src/ccip/fetchCcipFee.ts +2 -2
- package/src/ccip/fetchCcipGas.ts +68 -0
- package/src/index.ts +1 -0
- package/src/lockers/fetch/index.ts +26 -53
- package/src/lockers/utils/getBribesRewardsData.ts +1 -0
- package/src/strategies/pendle/fetch.ts +7 -5
- package/src/utils.ts +22 -2
- package/src/votemarket/fetchCampaigns.ts +10 -18
- package/src/votemarket/types.ts +1 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { type Locker, ONE_YEAR, Zero,
|
|
1
|
+
import { type Locker, ONE_YEAR, RPC, Zero, contract, lockers } from '@stake-dao/constants'
|
|
2
2
|
import { formatUnits, parseAbi, zeroAddress } from 'viem'
|
|
3
|
-
import {
|
|
3
|
+
import { mainnet } from 'viem/chains'
|
|
4
4
|
import lockersMulticallAbi from '../../abis/lockersMulticall.js'
|
|
5
5
|
import { getSdtInflationData } from '../../index.js'
|
|
6
6
|
import type { Price } from '../../prices.js'
|
|
7
7
|
import { handlePromise } from '../../strategies/utils/promise.js'
|
|
8
|
-
import { type Call, type MultiChainCall, equalTlc, multicall, multichainMulticall } from '../../utils.js'
|
|
8
|
+
import { type Call, type MultiChainCall, equalTlc, multicall, multichainMulticall, rpcCall } from '../../utils.js'
|
|
9
9
|
import { extractFees, feeCalls } from '../utils/callsForLockers/feeCalls.js'
|
|
10
10
|
import callsForLockers from '../utils/callsForLockers/index.js'
|
|
11
11
|
import getBribesRewardsData, { type TBribesRewards } from '../utils/getBribesRewardsData.js'
|
|
@@ -73,7 +73,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
73
73
|
lockersFeeCalls.push(...feeCalls(locker.id, locker.modules.accumulator))
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
const [rawLockersData, rawLockersSideChainData, rawLockersRewardsData] = await handlePromise(
|
|
76
|
+
const [rawLockersData, rawLockersSideChainData, rawLockersRewardsData, rawVeSdtTotalSupply] = await handlePromise(
|
|
77
77
|
[
|
|
78
78
|
multicall(provider, lockersCalls.concat(lockersFeeCalls), lockersMulticallAbi),
|
|
79
79
|
multichainMulticall(lockersSideChainsCalls, lockersMulticallAbi),
|
|
@@ -84,6 +84,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
84
84
|
'function reward_data(address) external view returns (address,address,uint256,uint256,uint256,uint256)',
|
|
85
85
|
]),
|
|
86
86
|
),
|
|
87
|
+
rpcCall(RPC[mainnet.id], [{ to: contract('veSdt', mainnet.id), data: '0x18160ddd' }]),
|
|
87
88
|
],
|
|
88
89
|
'lockerMulticalls',
|
|
89
90
|
)
|
|
@@ -91,6 +92,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
91
92
|
const lockersFees = extractFees(chainLockers, rawLockersData)
|
|
92
93
|
|
|
93
94
|
const sdtInflationData = chainId === mainnet.id ? await getSdtInflationData(provider) : undefined
|
|
95
|
+
const veSdtTotalSupply = BigInt(rawVeSdtTotalSupply[0].result)
|
|
94
96
|
|
|
95
97
|
const lockerData = chainLockers.map(async (locker) => {
|
|
96
98
|
const lockerCallsLength = callsForLockers(
|
|
@@ -135,7 +137,7 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
135
137
|
? formatUnits(chunkedRawLockersData[7].result, locker.token.decimals)
|
|
136
138
|
: '0'
|
|
137
139
|
const amountTokenNotLock = formatUnits(chunkedRawLockersData[8].result, locker.token.decimals)
|
|
138
|
-
const veSdtTotalSupply = chainId === mainnet.id ? chunkedRawLockersData[9].result : '0'
|
|
140
|
+
// const veSdtTotalSupply = chainId === mainnet.id ? chunkedRawLockersData[9].result : '0'
|
|
139
141
|
|
|
140
142
|
const voteBooster = parseVoteBoosterData(locker, chunkedRawLockersData)
|
|
141
143
|
const peg = parsePeg(locker, chunkedRawLockersData)
|
|
@@ -209,57 +211,28 @@ export const fetchLockers = async ({ provider, chainId, prices, withAirdropGraph
|
|
|
209
211
|
}
|
|
210
212
|
})
|
|
211
213
|
|
|
212
|
-
let
|
|
213
|
-
let
|
|
214
|
-
let
|
|
214
|
+
let _workingSupply = chainId === mainnet.id ? gaugeWorkingSupply : totalSupplyStaked
|
|
215
|
+
let _veSdtTotalSupply = veSdtTotalSupply
|
|
216
|
+
let _veBalanceOfLocker = veBalanceOfLocker
|
|
215
217
|
|
|
216
|
-
if (
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
if (locker.id === 'fxs') {
|
|
222
|
-
_workingSupply = httpCalls.sdfxsWorkingData.working_supply.toString()
|
|
223
|
-
_veSdtTotalSupply = BigInt(httpCalls.sdfxsWorkingData.veSDT_total_supply)
|
|
224
|
-
_veBalanceOfLocker = (httpCalls.sdfxsWorkingData.veBalance * 4).toString()
|
|
225
|
-
}
|
|
218
|
+
if (locker.id === 'fxs') {
|
|
219
|
+
_workingSupply = httpCalls.sdfxsWorkingData.working_supply.toString()
|
|
220
|
+
_veSdtTotalSupply = BigInt(httpCalls.sdfxsWorkingData.veSDT_total_supply)
|
|
221
|
+
_veBalanceOfLocker = (httpCalls.sdfxsWorkingData.veBalance * 4).toString()
|
|
222
|
+
}
|
|
226
223
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
bribeMinApr = data.bribeMinApr
|
|
237
|
-
bribeMaxApr = data.bribeMaxApr
|
|
238
|
-
bribeRewards = data.bribeRewards
|
|
239
|
-
} else if (locker.id === 'cake') {
|
|
240
|
-
let _veBalanceOfLocker = Number(veBalanceOfLocker)
|
|
241
|
-
|
|
242
|
-
// Add sidechain veBalance
|
|
243
|
-
if (sideChains && sideChains.length > 0) {
|
|
244
|
-
_veBalanceOfLocker +=
|
|
245
|
-
sideChains?.reduce((acc: number, sideChain) => acc + Number(sideChain.veBalanceOfLocker), 0) || 0
|
|
246
|
-
}
|
|
224
|
+
const data = getBribesRewardsData(
|
|
225
|
+
locker,
|
|
226
|
+
httpCalls.bribesData,
|
|
227
|
+
_veSdtTotalSupply,
|
|
228
|
+
totalSupplyStaked,
|
|
229
|
+
_veBalanceOfLocker,
|
|
230
|
+
_workingSupply,
|
|
231
|
+
)
|
|
247
232
|
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
bribeMinApr = apr
|
|
252
|
-
bribeMaxApr = apr
|
|
253
|
-
bribeRewards = {
|
|
254
|
-
bribeMinApr: apr,
|
|
255
|
-
bribeMaxApr: apr,
|
|
256
|
-
bribeAverageApr: apr,
|
|
257
|
-
minBoost: '0',
|
|
258
|
-
maxBoost: '0',
|
|
259
|
-
hideBoostTab: true,
|
|
260
|
-
token: `sd${locker.id}`,
|
|
261
|
-
}
|
|
262
|
-
}
|
|
233
|
+
const bribeMinApr: number = data.bribeMinApr
|
|
234
|
+
const bribeMaxApr: number = data.bribeMaxApr
|
|
235
|
+
const bribeRewards: TBribesRewards | undefined = data.bribeRewards
|
|
263
236
|
|
|
264
237
|
// Total APR
|
|
265
238
|
const minRewardsAprs = rewardsData.reduce((x, y) => x + y.apr, 0) + bribeMinApr
|
|
@@ -27,6 +27,7 @@ const getBribesRewardsData = (
|
|
|
27
27
|
{ id: 'bal', value: bribesData?.[delegationWithId('bal')!] / 100 || 0 },
|
|
28
28
|
{ id: 'fxs', value: bribesData?.[delegationWithId('fxs')!] / 100 || 0 }, // 1 FXS = 4 veFXS
|
|
29
29
|
{ id: 'angle', value: bribesData?.[delegationWithId('angle')!] / 100 || 0 },
|
|
30
|
+
{ id: 'cake', value: bribesData?.[delegationWithId('cake')!] / 100 || 0 },
|
|
30
31
|
{ id: 'pendle', value: bribesData?.[delegationWithId('pendle')!] / 100 || 0 },
|
|
31
32
|
{ id: 'fxn', value: bribesData?.[delegationWithId('fxn')!] / 100 || 0 },
|
|
32
33
|
]
|
|
@@ -180,12 +180,14 @@ export const fetchPendle = async ({ prices, provider, rpc, explorerApiKey, explo
|
|
|
180
180
|
if (pendleStratApiData.underlyingRewardApy > 0) {
|
|
181
181
|
const extraApiData = pendleApiExtraData.find((el) => equalTlc(el.address, s.lpToken.address))
|
|
182
182
|
extraRewards = extraApiData.underlyingRewardApyBreakdown.map((r) => {
|
|
183
|
-
const nonBoostedApr = (r.absoluteApy * (100 - STRAT_FEES)) / 2.5
|
|
183
|
+
// const nonBoostedApr = (r.absoluteApy * (100 - STRAT_FEES)) / 2.5
|
|
184
|
+
const nonBoostedApr =
|
|
185
|
+
r.absoluteApy * 100 * (extraApiData.totalSy / (extraApiData.totalSy + extraApiData.totalPt))
|
|
184
186
|
return {
|
|
185
|
-
address: r.address,
|
|
186
|
-
name: r.name,
|
|
187
|
-
symbol: r.symbol,
|
|
188
|
-
decimals: r.decimals,
|
|
187
|
+
address: r.asset.address,
|
|
188
|
+
name: r.asset.name,
|
|
189
|
+
symbol: r.asset.symbol,
|
|
190
|
+
decimals: r.asset.decimals,
|
|
189
191
|
apy: nonBoostedApr * boost,
|
|
190
192
|
}
|
|
191
193
|
})
|
package/src/utils.ts
CHANGED
|
@@ -140,16 +140,34 @@ export const ethGetTxsReceipts = async (rpc: string, txHashes: string[]) => {
|
|
|
140
140
|
return request
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
+
export const ethEstimateGas = async (rpc: string, from: string, to: string, data: string) => {
|
|
144
|
+
const request = (
|
|
145
|
+
await fetch(rpc, {
|
|
146
|
+
method: 'POST',
|
|
147
|
+
headers: { 'Content-Type': 'application/json' },
|
|
148
|
+
body: JSON.stringify({
|
|
149
|
+
id: 0,
|
|
150
|
+
jsonrpc: '2.0',
|
|
151
|
+
method: 'eth_estimateGas',
|
|
152
|
+
params: [{ from, to, data }],
|
|
153
|
+
}),
|
|
154
|
+
})
|
|
155
|
+
).json()
|
|
156
|
+
|
|
157
|
+
return request
|
|
158
|
+
}
|
|
159
|
+
|
|
143
160
|
export interface BatchJsonRpcArgs {
|
|
144
161
|
rpc: string
|
|
145
162
|
calls: string[]
|
|
146
163
|
outputTypeAbi: any | any[]
|
|
147
164
|
parse?: boolean
|
|
165
|
+
raw?: boolean
|
|
148
166
|
callsKey: string
|
|
149
167
|
}
|
|
150
168
|
|
|
151
169
|
export const batchJsonRpc = async (args: BatchJsonRpcArgs) => {
|
|
152
|
-
const { rpc, calls, outputTypeAbi, parse = true, callsKey } = args
|
|
170
|
+
const { rpc, calls, outputTypeAbi, parse = true, raw = false, callsKey } = args
|
|
153
171
|
|
|
154
172
|
if (calls.length > 0) {
|
|
155
173
|
const rpcRequests = await (
|
|
@@ -173,7 +191,9 @@ export const batchJsonRpc = async (args: BatchJsonRpcArgs) => {
|
|
|
173
191
|
const status = isError ? 'error' : 'fulfilled'
|
|
174
192
|
const value = isError
|
|
175
193
|
? `${callsKey} call index ${index}: code ${res.error.code}\n${res.error.message}`
|
|
176
|
-
:
|
|
194
|
+
: raw
|
|
195
|
+
? [res.result]
|
|
196
|
+
: decodeAbiParameters(parse ? (parseAbiParameters(abi) as any) : abi, res.result)
|
|
177
197
|
|
|
178
198
|
if (isError) {
|
|
179
199
|
console.error(value)
|
|
@@ -25,7 +25,6 @@ export const CLOSE_WINDOW_LENGTH = 4 // weeks
|
|
|
25
25
|
interface FetchCampaignsProps {
|
|
26
26
|
platform: string
|
|
27
27
|
gaugeController: string
|
|
28
|
-
veToken: string
|
|
29
28
|
chainId: number
|
|
30
29
|
rpcs: { [chainId: number]: string }
|
|
31
30
|
etherscanApiKey?: string
|
|
@@ -93,10 +92,16 @@ const updateEpoch = ({
|
|
|
93
92
|
return campaign
|
|
94
93
|
}
|
|
95
94
|
|
|
95
|
+
const formatPeriod = (rawPeriod: any, decimals: number) => ({
|
|
96
|
+
rewardPerPeriod: formatUnits(rawPeriod.rewardPerPeriod, decimals),
|
|
97
|
+
rewardPerVote: formatUnits(rawPeriod.rewardPerVote, decimals),
|
|
98
|
+
leftover: formatUnits(rawPeriod.leftover, decimals),
|
|
99
|
+
updated: rawPeriod.updated,
|
|
100
|
+
})
|
|
101
|
+
|
|
96
102
|
export const fetchCampaigns = async ({
|
|
97
103
|
platform,
|
|
98
104
|
gaugeController,
|
|
99
|
-
veToken,
|
|
100
105
|
chainId,
|
|
101
106
|
rpcs,
|
|
102
107
|
etherscanApiKey,
|
|
@@ -171,7 +176,6 @@ export const fetchCampaigns = async ({
|
|
|
171
176
|
.map((rc) => [rc.campaign.chainId, rc.id, rc.campaign.gauge, rc.addresses])
|
|
172
177
|
const callsRestrictedVotesChunks = chunk(callsRestrictedVotes, CAMPAIGNS_CHUNK_SIZE).map((restrictedVoteChunk) => {
|
|
173
178
|
const inputData = encodeAbiParameters(parseAbiParameters(batchCampaignsRestrictedVotes.inputType[1]!) as any, [
|
|
174
|
-
veToken,
|
|
175
179
|
gaugeController,
|
|
176
180
|
restrictedVoteChunk,
|
|
177
181
|
])
|
|
@@ -333,21 +337,9 @@ export const fetchCampaigns = async ({
|
|
|
333
337
|
addresses: rc.addresses,
|
|
334
338
|
isWhitelist: rc.isWhitelistOnly,
|
|
335
339
|
isBlacklist: !rc.isWhitelistOnly && rc.addresses.length > 0,
|
|
336
|
-
previousPeriod: rawPreviousPeriod
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
rewardPerVote: formatUnits(rawPreviousPeriod.rewardPerVote, decimals),
|
|
340
|
-
leftover: formatUnits(rawPreviousPeriod.leftover, decimals),
|
|
341
|
-
updated: rawPreviousPeriod.updated,
|
|
342
|
-
}
|
|
343
|
-
: undefined,
|
|
344
|
-
currentPeriod: {
|
|
345
|
-
rewardPerPeriod: formatUnits(rawCurrentPeriod.rewardPerPeriod, decimals),
|
|
346
|
-
rewardPerVote: formatUnits(rawCurrentPeriod.rewardPerVote, decimals),
|
|
347
|
-
leftover: formatUnits(rawCurrentPeriod.leftover, decimals),
|
|
348
|
-
updated: rawCurrentPeriod.updated,
|
|
349
|
-
},
|
|
350
|
-
periods: rc.periods,
|
|
340
|
+
previousPeriod: rawPreviousPeriod ? formatPeriod(rawPreviousPeriod, decimals) : undefined,
|
|
341
|
+
currentPeriod: formatPeriod(rawCurrentPeriod, decimals),
|
|
342
|
+
periods: rc.periods.map((rawP) => formatPeriod(rawP, decimals)),
|
|
351
343
|
status: {
|
|
352
344
|
voteOpen: endTimestamp - ONE_WEEK > currentTimestamp,
|
|
353
345
|
voteClosed: currentTimestamp > endTimestamp - ONE_WEEK,
|