@stake-dao/reader 0.5.2 → 0.5.4

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 (61) hide show
  1. package/dist/esm/abis/lockersMulticall.js +27 -4
  2. package/dist/esm/abis/lockersMulticall.js.map +1 -1
  3. package/dist/esm/bytecodes/votemarket/batchYbUserVotes.js +39 -0
  4. package/dist/esm/bytecodes/votemarket/batchYbUserVotes.js.map +1 -0
  5. package/dist/esm/bytecodes/votemarket/batchYbVotes.js +13 -0
  6. package/dist/esm/bytecodes/votemarket/batchYbVotes.js.map +1 -0
  7. package/dist/esm/index.js +5 -1
  8. package/dist/esm/index.js.map +1 -1
  9. package/dist/esm/lockers/fetch/parse.js +1 -0
  10. package/dist/esm/lockers/fetch/parse.js.map +1 -1
  11. package/dist/esm/lockers/fetch/protocols/balancer.js +3 -0
  12. package/dist/esm/lockers/fetch/protocols/balancer.js.map +1 -1
  13. package/dist/esm/prices.js +4 -0
  14. package/dist/esm/prices.js.map +1 -1
  15. package/dist/esm/strategies/v2/parse.js +2 -1
  16. package/dist/esm/strategies/v2/parse.js.map +1 -1
  17. package/dist/esm/votemarket/fetchClaimableData.js +1 -1
  18. package/dist/esm/votemarket/fetchEpochVotes.js +13 -4
  19. package/dist/esm/votemarket/fetchEpochVotes.js.map +1 -1
  20. package/dist/esm/votemarket/generateProofs/config.js +6 -0
  21. package/dist/esm/votemarket/generateProofs/config.js.map +1 -1
  22. package/dist/esm/votemarket/generateProofs/getGaugeProof.js +5 -0
  23. package/dist/esm/votemarket/generateProofs/getGaugeProof.js.map +1 -1
  24. package/dist/esm/votemarket/generateProofs/getUserProof.js +13 -2
  25. package/dist/esm/votemarket/generateProofs/getUserProof.js.map +1 -1
  26. package/dist/esm/votemarket/yb/fetchYbUserVotes.js +42 -0
  27. package/dist/esm/votemarket/yb/fetchYbUserVotes.js.map +1 -0
  28. package/dist/types/abis/lockersMulticall.d.ts.map +1 -1
  29. package/dist/types/bytecodes/votemarket/batchYbUserVotes.d.ts +4 -0
  30. package/dist/types/bytecodes/votemarket/batchYbUserVotes.d.ts.map +1 -0
  31. package/dist/types/bytecodes/votemarket/batchYbVotes.d.ts +4 -0
  32. package/dist/types/bytecodes/votemarket/batchYbVotes.d.ts.map +1 -0
  33. package/dist/types/index.d.ts +4 -1
  34. package/dist/types/index.d.ts.map +1 -1
  35. package/dist/types/lockers/fetch/parse.d.ts +1 -0
  36. package/dist/types/lockers/fetch/parse.d.ts.map +1 -1
  37. package/dist/types/lockers/fetch/protocols/balancer.d.ts.map +1 -1
  38. package/dist/types/prices.d.ts.map +1 -1
  39. package/dist/types/strategies/v2/parse.d.ts.map +1 -1
  40. package/dist/types/votemarket/fetchEpochVotes.d.ts.map +1 -1
  41. package/dist/types/votemarket/generateProofs/config.d.ts +6 -0
  42. package/dist/types/votemarket/generateProofs/config.d.ts.map +1 -1
  43. package/dist/types/votemarket/generateProofs/getGaugeProof.d.ts.map +1 -1
  44. package/dist/types/votemarket/generateProofs/getUserProof.d.ts.map +1 -1
  45. package/dist/types/votemarket/yb/fetchYbUserVotes.d.ts +16 -0
  46. package/dist/types/votemarket/yb/fetchYbUserVotes.d.ts.map +1 -0
  47. package/package.json +1 -1
  48. package/src/abis/lockersMulticall.ts +27 -4
  49. package/src/bytecodes/votemarket/batchYbUserVotes.ts +41 -0
  50. package/src/bytecodes/votemarket/batchYbVotes.ts +15 -0
  51. package/src/index.ts +6 -1
  52. package/src/lockers/fetch/parse.ts +2 -0
  53. package/src/lockers/fetch/protocols/balancer.ts +3 -0
  54. package/src/prices.ts +4 -0
  55. package/src/strategies/v2/parse.ts +2 -1
  56. package/src/votemarket/fetchClaimableData.ts +1 -1
  57. package/src/votemarket/fetchEpochVotes.ts +14 -4
  58. package/src/votemarket/generateProofs/config.ts +6 -0
  59. package/src/votemarket/generateProofs/getGaugeProof.ts +8 -0
  60. package/src/votemarket/generateProofs/getUserProof.ts +15 -2
  61. package/src/votemarket/yb/fetchYbUserVotes.ts +61 -0
@@ -0,0 +1,61 @@
1
+ import { contracts } from '@stake-dao/constants'
2
+ import { encodeAbiParameters, formatUnits, parseAbiParameters, zeroAddress } from 'viem'
3
+ import { mainnet } from 'viem/chains'
4
+ import batchYbUserVotes from '../../bytecodes/votemarket/batchYbUserVotes.js'
5
+ import { concatBytecode } from '../../index.js'
6
+ import { batchJsonRpc, equalTlc } from '../../utils.js'
7
+
8
+ export type Vote = {
9
+ gauge: string
10
+ slope: string
11
+ relativeWeight: number
12
+ weight: number
13
+ start: number
14
+ end: number
15
+ }
16
+
17
+ export type GaugesUserData = { veBalance: string; unusedVeBalance: string; unusedRelativeWeight: number; votes: Vote[] }
18
+
19
+ export const fetchYbUserVotes = async (rpc: string, user: string): Promise<GaugesUserData> => {
20
+ const calls = [
21
+ concatBytecode(
22
+ batchYbUserVotes.bytecode[mainnet.id]!,
23
+ encodeAbiParameters(parseAbiParameters(batchYbUserVotes.inputType[mainnet.id]!) as any, [
24
+ user,
25
+ contracts.ybGaugeController![1]!,
26
+ contracts.veYB![1]!,
27
+ ]),
28
+ ),
29
+ ]
30
+
31
+ const rawVotes = await batchJsonRpc({
32
+ rpc,
33
+ calls,
34
+ outputTypeAbi: batchYbUserVotes.outputType![mainnet.id],
35
+ parse: false,
36
+ callsKey: `votemarket/yb/fetchYbUserVotes.ts: rawGauges - chainId ${mainnet.id} - rpc ${rpc}`,
37
+ })
38
+
39
+ const veBalance = rawVotes[0].veBalance
40
+
41
+ const votes = rawVotes[0].votes
42
+ .filter((rv) => !equalTlc(rv.gauge, zeroAddress))
43
+ .map((v) => ({
44
+ gauge: v.gauge,
45
+ slope: formatUnits(v.slope, 0),
46
+ relativeWeight: Number(v.power) / 100,
47
+ weight: formatUnits((veBalance * BigInt(v.power)) / BigInt(10000), 18),
48
+ start: Number(v.start),
49
+ end: Number(v.end),
50
+ }))
51
+
52
+ const unusedRelativeWeight = 10000 - votes.reduce((total, x) => total + x.relativeWeight * 100, 0)
53
+ const unusedVeBalance = (veBalance * BigInt(unusedRelativeWeight)) / BigInt(10000)
54
+
55
+ return {
56
+ veBalance: formatUnits(veBalance, 18),
57
+ unusedVeBalance: formatUnits(unusedVeBalance, 18),
58
+ unusedRelativeWeight: unusedRelativeWeight / 100,
59
+ votes,
60
+ }
61
+ }