@stake-dao/reader 0.1.0 → 0.1.2

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 (210) hide show
  1. package/dist/esm/batches/buildYearnStrats.js +39 -0
  2. package/dist/esm/batches/buildYearnStrats.js.map +1 -0
  3. package/dist/esm/batches/curveStrats.js +4 -6
  4. package/dist/esm/batches/curveStrats.js.map +1 -1
  5. package/dist/esm/batches/fetchYearnGauges.js +76 -0
  6. package/dist/esm/batches/fetchYearnGauges.js.map +1 -0
  7. package/dist/esm/batches/index.js +2 -0
  8. package/dist/esm/batches/index.js.map +1 -1
  9. package/dist/esm/index.js +2 -0
  10. package/dist/esm/index.js.map +1 -1
  11. package/dist/esm/lockers/abis/MulticallLockers.json +591 -0
  12. package/dist/esm/lockers/fetch/index.js +306 -0
  13. package/dist/esm/lockers/fetch/index.js.map +1 -0
  14. package/dist/esm/lockers/utils/cakeLockerAirdrop.js +46 -0
  15. package/dist/esm/lockers/utils/cakeLockerAirdrop.js.map +1 -0
  16. package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js +20 -0
  17. package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js.map +1 -0
  18. package/dist/esm/lockers/utils/callsForLockers/feeCalls.js +94 -0
  19. package/dist/esm/lockers/utils/callsForLockers/feeCalls.js.map +1 -0
  20. package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js +6 -0
  21. package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js.map +1 -0
  22. package/dist/esm/lockers/utils/callsForLockers/gaugeControllerCalls.js +8 -0
  23. package/dist/esm/lockers/utils/callsForLockers/gaugeControllerCalls.js.map +1 -0
  24. package/dist/esm/lockers/utils/callsForLockers/index.js +29 -0
  25. package/dist/esm/lockers/utils/callsForLockers/index.js.map +1 -0
  26. package/dist/esm/lockers/utils/callsForLockers/pegCalls.js +38 -0
  27. package/dist/esm/lockers/utils/callsForLockers/pegCalls.js.map +1 -0
  28. package/dist/esm/lockers/utils/callsForLockers/veCalls.js +26 -0
  29. package/dist/esm/lockers/utils/callsForLockers/veCalls.js.map +1 -0
  30. package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js +14 -0
  31. package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js.map +1 -0
  32. package/dist/esm/lockers/utils/endpoints.js +23 -0
  33. package/dist/esm/lockers/utils/endpoints.js.map +1 -0
  34. package/dist/esm/lockers/utils/getBribesRewardsData.js +46 -0
  35. package/dist/esm/lockers/utils/getBribesRewardsData.js.map +1 -0
  36. package/dist/esm/lockers/utils/getCherriesLeaderBoard.js +22 -0
  37. package/dist/esm/lockers/utils/getCherriesLeaderBoard.js.map +1 -0
  38. package/dist/esm/lockers/utils/getFees.js +30 -0
  39. package/dist/esm/lockers/utils/getFees.js.map +1 -0
  40. package/dist/esm/lockers/utils/getHttpCalls.js +44 -0
  41. package/dist/esm/lockers/utils/getHttpCalls.js.map +1 -0
  42. package/dist/esm/lockers/utils/getSdtInflationData.js +38 -0
  43. package/dist/esm/lockers/utils/getSdtInflationData.js.map +1 -0
  44. package/dist/esm/lockers/utils/index.js +157 -0
  45. package/dist/esm/lockers/utils/index.js.map +1 -0
  46. package/dist/esm/lockers/utils/substractFees.js +22 -0
  47. package/dist/esm/lockers/utils/substractFees.js.map +1 -0
  48. package/dist/esm/strategies/curve/build.js +10 -7
  49. package/dist/esm/strategies/curve/build.js.map +1 -1
  50. package/dist/esm/strategies/curve/fetch/curveApiData/abi.js +1 -1
  51. package/dist/esm/strategies/curve/fetch/curveApiData/abi.js.map +1 -1
  52. package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js +3 -3
  53. package/dist/esm/strategies/curve/fetch/curveApiData/bytecode.js.map +1 -1
  54. package/dist/esm/strategies/curve/fetch/curveApiData/config.js +1 -1
  55. package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js +3 -6
  56. package/dist/esm/strategies/curve/fetch/curveApiData/getCurveApiData.js.map +1 -1
  57. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js +1 -0
  58. package/dist/esm/strategies/curve/fetch/curveApiData/getGaugesWeights.js.map +1 -1
  59. package/dist/esm/strategies/curve/fetch/getStratsWithApr.js +26 -58
  60. package/dist/esm/strategies/curve/fetch/getStratsWithApr.js.map +1 -1
  61. package/dist/esm/strategies/curve/fetch/index.js +7 -23
  62. package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
  63. package/dist/esm/strategies/curve/httpCalls.js +8 -24
  64. package/dist/esm/strategies/curve/httpCalls.js.map +1 -1
  65. package/dist/esm/strategies/utils/abis/MulticallYearnStratsAbi.json +107 -0
  66. package/dist/esm/strategies/{curve/fetch → utils}/getAprBreakdown.js +18 -8
  67. package/dist/esm/strategies/utils/getAprBreakdown.js.map +1 -0
  68. package/dist/esm/strategies/utils/index.js +1 -0
  69. package/dist/esm/strategies/utils/index.js.map +1 -1
  70. package/dist/esm/strategies/utils/sdt.js +17 -0
  71. package/dist/esm/strategies/utils/sdt.js.map +1 -1
  72. package/dist/esm/strategies/yearn/build.js +97 -0
  73. package/dist/esm/strategies/yearn/build.js.map +1 -0
  74. package/dist/esm/strategies/yearn/fetch/computeYearnApr.js +28 -0
  75. package/dist/esm/strategies/yearn/fetch/computeYearnApr.js.map +1 -0
  76. package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js +61 -0
  77. package/dist/esm/strategies/yearn/fetch/fetchAllYearnGauges.js.map +1 -0
  78. package/dist/esm/strategies/yearn/fetch/index.js +169 -0
  79. package/dist/esm/strategies/yearn/fetch/index.js.map +1 -0
  80. package/dist/esm/tsconfig.build.tsbuildinfo +1 -1
  81. package/dist/esm/utils.js +33 -1
  82. package/dist/esm/utils.js.map +1 -1
  83. package/dist/types/batches/buildYearnStrats.d.ts +4 -0
  84. package/dist/types/batches/buildYearnStrats.d.ts.map +1 -0
  85. package/dist/types/batches/curveStrats.d.ts.map +1 -1
  86. package/dist/types/batches/fetchYearnGauges.d.ts +4 -0
  87. package/dist/types/batches/fetchYearnGauges.d.ts.map +1 -0
  88. package/dist/types/batches/index.d.ts +2 -0
  89. package/dist/types/batches/index.d.ts.map +1 -1
  90. package/dist/types/index.d.ts +2 -0
  91. package/dist/types/index.d.ts.map +1 -1
  92. package/dist/types/lockers/fetch/index.d.ts +11 -0
  93. package/dist/types/lockers/fetch/index.d.ts.map +1 -0
  94. package/dist/types/lockers/utils/cakeLockerAirdrop.d.ts +8 -0
  95. package/dist/types/lockers/utils/cakeLockerAirdrop.d.ts.map +1 -0
  96. package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts +3 -0
  97. package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts.map +1 -0
  98. package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts +11 -0
  99. package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts.map +1 -0
  100. package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts +6 -0
  101. package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts.map +1 -0
  102. package/dist/types/lockers/utils/callsForLockers/gaugeControllerCalls.d.ts +11 -0
  103. package/dist/types/lockers/utils/callsForLockers/gaugeControllerCalls.d.ts.map +1 -0
  104. package/dist/types/lockers/utils/callsForLockers/index.d.ts +3 -0
  105. package/dist/types/lockers/utils/callsForLockers/index.d.ts.map +1 -0
  106. package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts +15 -0
  107. package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts.map +1 -0
  108. package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts +3 -0
  109. package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts.map +1 -0
  110. package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts +11 -0
  111. package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts.map +1 -0
  112. package/dist/types/lockers/utils/endpoints.d.ts +3 -0
  113. package/dist/types/lockers/utils/endpoints.d.ts.map +1 -0
  114. package/dist/types/lockers/utils/getBribesRewardsData.d.ts +18 -0
  115. package/dist/types/lockers/utils/getBribesRewardsData.d.ts.map +1 -0
  116. package/dist/types/lockers/utils/getCherriesLeaderBoard.d.ts +2 -0
  117. package/dist/types/lockers/utils/getCherriesLeaderBoard.d.ts.map +1 -0
  118. package/dist/types/lockers/utils/getFees.d.ts +4 -0
  119. package/dist/types/lockers/utils/getFees.d.ts.map +1 -0
  120. package/dist/types/lockers/utils/getHttpCalls.d.ts +11 -0
  121. package/dist/types/lockers/utils/getHttpCalls.d.ts.map +1 -0
  122. package/dist/types/lockers/utils/getSdtInflationData.d.ts +8 -0
  123. package/dist/types/lockers/utils/getSdtInflationData.d.ts.map +1 -0
  124. package/dist/types/lockers/utils/index.d.ts +30 -0
  125. package/dist/types/lockers/utils/index.d.ts.map +1 -0
  126. package/dist/types/lockers/utils/substractFees.d.ts +3 -0
  127. package/dist/types/lockers/utils/substractFees.d.ts.map +1 -0
  128. package/dist/types/strategies/curve/build.d.ts +2 -31
  129. package/dist/types/strategies/curve/build.d.ts.map +1 -1
  130. package/dist/types/strategies/curve/fetch/curveApiData/abi.d.ts.map +1 -1
  131. package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts +1 -1
  132. package/dist/types/strategies/curve/fetch/curveApiData/bytecode.d.ts.map +1 -1
  133. package/dist/types/strategies/curve/fetch/curveApiData/config.d.ts +1 -1
  134. package/dist/types/strategies/curve/fetch/curveApiData/getCurveApiData.d.ts.map +1 -1
  135. package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts +1 -0
  136. package/dist/types/strategies/curve/fetch/curveApiData/getGaugesWeights.d.ts.map +1 -1
  137. package/dist/types/strategies/curve/fetch/getStratsWithApr.d.ts +0 -4
  138. package/dist/types/strategies/curve/fetch/getStratsWithApr.d.ts.map +1 -1
  139. package/dist/types/strategies/curve/fetch/index.d.ts +2 -7
  140. package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
  141. package/dist/types/strategies/curve/httpCalls.d.ts +3 -6
  142. package/dist/types/strategies/curve/httpCalls.d.ts.map +1 -1
  143. package/dist/types/strategies/types.d.ts +49 -6
  144. package/dist/types/strategies/types.d.ts.map +1 -1
  145. package/dist/types/strategies/utils/getAprBreakdown.d.ts +15 -0
  146. package/dist/types/strategies/utils/getAprBreakdown.d.ts.map +1 -0
  147. package/dist/types/strategies/utils/index.d.ts +1 -0
  148. package/dist/types/strategies/utils/index.d.ts.map +1 -1
  149. package/dist/types/strategies/utils/sdt.d.ts +1 -0
  150. package/dist/types/strategies/utils/sdt.d.ts.map +1 -1
  151. package/dist/types/strategies/yearn/build.d.ts +8 -0
  152. package/dist/types/strategies/yearn/build.d.ts.map +1 -0
  153. package/dist/types/strategies/yearn/fetch/computeYearnApr.d.ts +9 -0
  154. package/dist/types/strategies/yearn/fetch/computeYearnApr.d.ts.map +1 -0
  155. package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts +2 -0
  156. package/dist/types/strategies/yearn/fetch/fetchAllYearnGauges.d.ts.map +1 -0
  157. package/dist/types/strategies/yearn/fetch/index.d.ts +5 -0
  158. package/dist/types/strategies/yearn/fetch/index.d.ts.map +1 -0
  159. package/dist/types/utils.d.ts +5 -0
  160. package/dist/types/utils.d.ts.map +1 -1
  161. package/package.json +4 -3
  162. package/src/batches/buildYearnStrats.ts +41 -0
  163. package/src/batches/curveStrats.ts +4 -6
  164. package/src/batches/fetchYearnGauges.ts +78 -0
  165. package/src/batches/index.ts +2 -0
  166. package/src/index.ts +2 -0
  167. package/src/lockers/fetch/index.ts +407 -0
  168. package/src/lockers/utils/cakeLockerAirdrop.ts +73 -0
  169. package/src/lockers/utils/callsForLockers/depositorCalls.ts +25 -0
  170. package/src/lockers/utils/callsForLockers/feeCalls.ts +118 -0
  171. package/src/lockers/utils/callsForLockers/gaugeCalls.ts +6 -0
  172. package/src/lockers/utils/callsForLockers/gaugeControllerCalls.ts +8 -0
  173. package/src/lockers/utils/callsForLockers/index.ts +44 -0
  174. package/src/lockers/utils/callsForLockers/pegCalls.ts +40 -0
  175. package/src/lockers/utils/callsForLockers/veCalls.ts +31 -0
  176. package/src/lockers/utils/callsForLockers/veSdtCalls.ts +15 -0
  177. package/src/lockers/utils/endpoints.ts +24 -0
  178. package/src/lockers/utils/getBribesRewardsData.ts +64 -0
  179. package/src/lockers/utils/getCherriesLeaderBoard.ts +34 -0
  180. package/src/lockers/utils/getFees.ts +34 -0
  181. package/src/lockers/utils/getHttpCalls.ts +55 -0
  182. package/src/lockers/utils/getSdtInflationData.ts +54 -0
  183. package/src/lockers/utils/index.ts +200 -0
  184. package/src/lockers/utils/substractFees.ts +26 -0
  185. package/src/strategies/curve/build.ts +49 -44
  186. package/src/strategies/curve/fetch/curveApiData/abi.ts +1 -1
  187. package/src/strategies/curve/fetch/curveApiData/bytecode.ts +3 -3
  188. package/src/strategies/curve/fetch/curveApiData/config.ts +1 -1
  189. package/src/strategies/curve/fetch/curveApiData/getCurveApiData.ts +2 -2
  190. package/src/strategies/curve/fetch/curveApiData/getGaugesWeights.ts +2 -0
  191. package/src/strategies/curve/fetch/getStratsWithApr.ts +27 -81
  192. package/src/strategies/curve/fetch/index.ts +10 -29
  193. package/src/strategies/curve/httpCalls.ts +8 -24
  194. package/src/strategies/types.ts +52 -6
  195. package/src/strategies/{curve/fetch → utils}/getAprBreakdown.ts +26 -9
  196. package/src/strategies/utils/index.ts +1 -0
  197. package/src/strategies/utils/sdt.ts +24 -0
  198. package/src/strategies/yearn/build.ts +156 -0
  199. package/src/strategies/yearn/fetch/computeYearnApr.ts +47 -0
  200. package/src/strategies/yearn/fetch/fetchAllYearnGauges.ts +78 -0
  201. package/src/strategies/yearn/fetch/index.ts +225 -0
  202. package/src/utils.ts +43 -1
  203. package/dist/esm/strategies/curve/fetch/getAprBreakdown.js.map +0 -1
  204. package/dist/esm/strategies/curve/fetch/types.js +0 -2
  205. package/dist/esm/strategies/curve/fetch/types.js.map +0 -1
  206. package/dist/types/strategies/curve/fetch/getAprBreakdown.d.ts +0 -17
  207. package/dist/types/strategies/curve/fetch/getAprBreakdown.d.ts.map +0 -1
  208. package/dist/types/strategies/curve/fetch/types.d.ts +0 -11
  209. package/dist/types/strategies/curve/fetch/types.d.ts.map +0 -1
  210. package/src/strategies/curve/fetch/types.ts +0 -11
@@ -0,0 +1,118 @@
1
+ import { zeroAddress } from 'viem'
2
+
3
+ import { Zero } from '../../../index.js'
4
+
5
+ export const feeCalls = (lockerId: string, accumulatorAddress: string) => {
6
+ const calls: any[] = []
7
+
8
+ if (accumulatorAddress === zeroAddress || lockerId === 'mav') {
9
+ return calls
10
+ }
11
+
12
+ // Harvester fees
13
+ calls.push({ address: accumulatorAddress, name: 'claimerFee', params: [] })
14
+
15
+ // Treasury
16
+ if (['crv', 'cake', 'yfi', 'pendle', 'fpis'].includes(lockerId)) {
17
+ calls.push({ address: accumulatorAddress, name: 'daoFee', params: [] })
18
+ }
19
+
20
+ switch (lockerId) {
21
+ case 'crv':
22
+ calls.push({ address: accumulatorAddress, name: 'liquidityFee', params: [] })
23
+ break
24
+ case 'cake':
25
+ case 'yfi':
26
+ calls.push({ address: accumulatorAddress, name: 'liquidityFee', params: [] })
27
+ break
28
+ case 'pendle':
29
+ calls.push({ address: accumulatorAddress, name: 'bountyFee', params: [] })
30
+ break
31
+ case 'fpis':
32
+ calls.push({ address: accumulatorAddress, name: 'bribeFee', params: [] })
33
+ break
34
+ case 'apw':
35
+ case 'bpt':
36
+ calls.push({ address: accumulatorAddress, name: 'lockerFee', params: [] })
37
+ break
38
+ }
39
+
40
+ return calls
41
+ }
42
+
43
+ export interface ILockerFee {
44
+ lockerId: string
45
+ claimerFee: bigint
46
+ daoFee: bigint
47
+ bountyFee: bigint
48
+ liquidityFee: bigint
49
+ lockerFee: bigint
50
+ }
51
+
52
+ export const extractFees = (lockers: any, feesData: any): ILockerFee[] => {
53
+ const results: ILockerFee[] = []
54
+
55
+ // We reverse it because all fee calls was pushed in the locker array order
56
+ // It's easier to get back fees with the pop function
57
+ // And we slice it because the reverse modify the original array
58
+ const lockersReverse = lockers.slice().reverse()
59
+
60
+ for (const locker of lockersReverse) {
61
+ if (locker.extensions.accumulator === zeroAddress || locker.id === 'mav') {
62
+ const claimerFee = locker.fees.find((f) => f.key === 'claimerFee')
63
+ const daoFee = locker.fees.find((f) => f.key === 'daoFee')
64
+ const bountyFee = locker.fees.find((f) => f.key === 'bountyFee')
65
+ const liquidityFee = locker.fees.find((f) => f.key === 'liquidityFee')
66
+ const lockerFee = locker.fees.find((f) => f.key === 'lockerFee')
67
+
68
+ results.push({
69
+ lockerId: locker.id,
70
+ claimerFee: claimerFee ? BigInt(claimerFee.value * 100) : Zero,
71
+ daoFee: daoFee ? BigInt(daoFee.value * 100) : Zero,
72
+ bountyFee: bountyFee ? BigInt(bountyFee.value * 100) : Zero,
73
+ liquidityFee: liquidityFee ? BigInt(liquidityFee.value * 100) : Zero,
74
+ lockerFee: lockerFee ? BigInt(lockerFee.value * 100) : Zero,
75
+ })
76
+ continue
77
+ }
78
+
79
+ let daoFee = Zero
80
+ let bountyFee = Zero
81
+ let liquidityFee = Zero
82
+ let lockerFee = Zero
83
+
84
+ switch (locker.id) {
85
+ case 'crv':
86
+ liquidityFee = BigInt(feesData.pop()?.result)
87
+ daoFee = BigInt(feesData.pop()?.result)
88
+ break
89
+ case 'cake':
90
+ case 'yfi':
91
+ liquidityFee = BigInt(feesData.pop()?.result)
92
+ daoFee = BigInt(feesData.pop()?.result)
93
+ break
94
+ case 'pendle':
95
+ case 'fpis':
96
+ bountyFee = BigInt(feesData.pop()?.result)
97
+ daoFee = BigInt(feesData.pop()?.result)
98
+ break
99
+ case 'apw':
100
+ case 'bpt':
101
+ lockerFee = BigInt(feesData.pop()?.result)
102
+ break
103
+ }
104
+
105
+ const claimerFee = BigInt(feesData.pop()?.result)
106
+
107
+ results.push({
108
+ lockerId: locker.id,
109
+ claimerFee,
110
+ daoFee,
111
+ bountyFee,
112
+ liquidityFee,
113
+ lockerFee,
114
+ })
115
+ }
116
+
117
+ return results
118
+ }
@@ -0,0 +1,6 @@
1
+ const gaugeCalls = (gauge: string) => [
2
+ { address: gauge, name: 'totalSupply' },
3
+ { address: gauge, name: 'working_supply' },
4
+ ]
5
+
6
+ export default gaugeCalls
@@ -0,0 +1,8 @@
1
+ const gaugeControllerCalls = (gaugeController: string, gauge: string) => [
2
+ { address: gaugeController, name: 'gauge_relative_weight', params: [gauge] },
3
+ { address: gaugeController, name: 'get_total_weight' },
4
+ { address: gaugeController, name: 'get_gauge_weight', params: [gauge] },
5
+ { address: gaugeController, name: 'time_total' },
6
+ ]
7
+
8
+ export default gaugeControllerCalls
@@ -0,0 +1,44 @@
1
+ import { FOUR_YEAR } from '@stake-dao/constants'
2
+ import { OneEther } from '../../../index.js'
3
+
4
+ import depositorCalls from './depositorCalls.js'
5
+ import gaugeCalls from './gaugeCalls.js'
6
+ import gaugeControllerCalls from './gaugeControllerCalls.js'
7
+ import pegCalls from './pegCalls.js'
8
+ import veCalls from './veCalls.js'
9
+ import veSdtCalls from './veSdtCalls.js'
10
+
11
+ const callsForLockers = (
12
+ lockerId: string,
13
+ token: string,
14
+ sdToken: string,
15
+ votingEscrow: string,
16
+ depositor: string,
17
+ gaugeController: string,
18
+ gauge: string,
19
+ locker: string,
20
+ pool: string,
21
+ pegInfo: any,
22
+ secondaryMarket: string,
23
+ voteBooster: any,
24
+ ) => [
25
+ ...veCalls(lockerId, votingEscrow, locker, token),
26
+ ...depositorCalls(depositor, locker),
27
+ ...gaugeControllerCalls(gaugeController, gauge),
28
+ ...gaugeCalls(gauge),
29
+ // Token
30
+ { address: token, name: 'balanceOf', params: [depositor] },
31
+ ...veSdtCalls(voteBooster, token, sdToken, gauge),
32
+ pegCalls(secondaryMarket, pool, pegInfo, sdToken, token),
33
+ ...(lockerId === 'mav'
34
+ ? [
35
+ {
36
+ address: votingEscrow,
37
+ name: 'previewPoints',
38
+ params: [OneEther, FOUR_YEAR],
39
+ },
40
+ ]
41
+ : []),
42
+ ]
43
+
44
+ export default callsForLockers
@@ -0,0 +1,40 @@
1
+ import { parseUnits, zeroAddress } from 'viem'
2
+
3
+ import { contracts } from '@stake-dao/constants'
4
+ import { One, Zero } from '../../../index.js'
5
+
6
+ const pegCalls = (secondaryMarket: string, pool: string, pegInfo: any, sdToken: string, token: string) => {
7
+ switch (secondaryMarket) {
8
+ case 'Balancer':
9
+ return {
10
+ address: contracts.balancerVault![1],
11
+ name: 'queryBatchSwap',
12
+ params: [
13
+ Zero,
14
+ [[pool, Zero, One, parseUnits(pegInfo?.basedOn ? pegInfo.basedOn.toString() : '1', 18), '0x']],
15
+ [sdToken, token],
16
+ [zeroAddress, false, zeroAddress, false],
17
+ ],
18
+ }
19
+ case 'Maverick':
20
+ return {
21
+ address: contracts.mavPoolInfos![1],
22
+ name: 'calculateSwap',
23
+ params: [pool, parseUnits(pegInfo?.basedOn ? pegInfo.basedOn.toString() : '1', 18), true, false, Zero],
24
+ }
25
+ case 'PancakeSwap':
26
+ return {
27
+ address: contracts.pancakeQuoter![56],
28
+ name: 'quoteExactInputSingle',
29
+ params: [[sdToken, token, parseUnits(pegInfo?.basedOn ? pegInfo.basedOn.toString() : '1', 18), '2500', '0']],
30
+ }
31
+ default:
32
+ return {
33
+ address: pool,
34
+ name: 'get_dy',
35
+ params: [One, Zero, parseUnits(pegInfo?.basedOn ? pegInfo.basedOn.toString() : '1', 18)],
36
+ }
37
+ }
38
+ }
39
+
40
+ export default pegCalls
@@ -0,0 +1,31 @@
1
+ import { lockerWithId } from '@stake-dao/constants'
2
+
3
+ import { lockedAmountCall } from '../index.js'
4
+
5
+ const veCalls = (lockerId: string, votingEscrow: string, locker: string, token: string) => {
6
+ const calls: any[] = []
7
+ calls.push(lockedAmountCall(lockerId, votingEscrow, locker))
8
+ calls.push({ address: votingEscrow, name: 'balanceOf', params: [locker] })
9
+
10
+ if (
11
+ [
12
+ lockerWithId('pendle')!.extensions.locker,
13
+ lockerWithId('mav')!.extensions.locker,
14
+ lockerWithId('cake', 56)!.extensions.locker,
15
+ ].includes(locker)
16
+ ) {
17
+ calls.push({ address: token, name: 'balanceOf', params: [votingEscrow] })
18
+ } else {
19
+ calls.push({ address: votingEscrow, name: 'supply' })
20
+ }
21
+
22
+ if (locker === lockerWithId('pendle')!.extensions.locker) {
23
+ calls.push({ address: votingEscrow, name: 'totalSupplyStored' })
24
+ } else {
25
+ calls.push({ address: votingEscrow, name: 'totalSupply' })
26
+ }
27
+
28
+ return calls
29
+ }
30
+
31
+ export default veCalls
@@ -0,0 +1,15 @@
1
+ import { contracts, tokenWithId } from '@stake-dao/constants'
2
+
3
+ const veSdtCalls = (voteBooster: any, token: string, sdToken: string, sdTokenGauge: string) => [
4
+ { address: tokenWithId('vesdt')!.address, name: 'totalSupply' },
5
+ ...(voteBooster
6
+ ? [
7
+ { address: token, name: 'balanceOf', params: [contracts.voteBoosterStrategy![1]] },
8
+ { address: sdToken, name: 'balanceOf', params: [contracts.voteBoosterStrategy![1]] },
9
+ { address: sdTokenGauge, name: 'balanceOf', params: [contracts.voteBoosterStrategy![1]] },
10
+ { address: sdTokenGauge, name: 'working_balances', params: [contracts.voteBoosterStrategy![1]] },
11
+ ]
12
+ : []),
13
+ ]
14
+
15
+ export default veSdtCalls
@@ -0,0 +1,24 @@
1
+ import { gql } from 'graphql-request'
2
+
3
+ export const SDCAKE_AIRDROP_GRAPH_URL = 'https://api.thegraph.com/subgraphs/name/lucasramadour/sdcake-airdrop'
4
+
5
+ export const SDCAKE_AIRDROP_GLOBAL_QUERY = gql`
6
+ query Global {
7
+ globals(first: 1) {
8
+ timestamp
9
+ points
10
+ rate
11
+ threeMTimestamp
12
+ tenMTimestamp
13
+ twentyFiveMTimestamp
14
+ fiftyMTimestamp
15
+ currentMultiplier
16
+ }
17
+ users(first: 1000) {
18
+ address
19
+ timestamp
20
+ points
21
+ rate
22
+ }
23
+ }
24
+ `
@@ -0,0 +1,64 @@
1
+ import { parseUnits } from 'viem'
2
+
3
+ import { delegationWithId } from '@stake-dao/constants'
4
+ import { One, Zero } from '../../index.js'
5
+
6
+ import { calculateAllData } from './index.js'
7
+
8
+ const getBribesRewardsData = (
9
+ locker: any,
10
+ bribesData: any,
11
+ veSdtTotalSupply: any,
12
+ totalSupplyStaked: any,
13
+ veBalanceOfLocker: any,
14
+ gaugeWorkingSupply: any,
15
+ ) => {
16
+ const bribesAverageApr = [
17
+ { id: 'crv', value: bribesData?.[delegationWithId('crv')!] / 100 || 0 },
18
+ { id: 'bal', value: bribesData?.[delegationWithId('bal')!] / 100 || 0 },
19
+ { id: 'fxs', value: bribesData?.[delegationWithId('fxs')!] / 100 || 0 }, // 1 FXS = 4 veFXS
20
+ { id: 'angle', value: bribesData?.[delegationWithId('angle')!] / 100 || 0 },
21
+ { id: 'pendle', value: bribesData?.[delegationWithId('pendle')!] / 100 || 0 },
22
+ { id: 'fxn', value: bribesData?.[delegationWithId('fxn')!] / 100 || 0 },
23
+ ]
24
+
25
+ // Vote incentives APR
26
+ const votingPower = calculateAllData(
27
+ locker.id,
28
+ {
29
+ veSDTSupply: veSdtTotalSupply,
30
+ userVeSDTBalance: Zero,
31
+ gaugeSupply: parseUnits(totalSupplyStaked, locker.token.decimals),
32
+ userSdTokenGaugeBalance: Zero,
33
+ llVotingPower: parseUnits(veBalanceOfLocker, locker.token.decimals),
34
+ gaugeWorkingSupply: parseUnits(gaugeWorkingSupply, locker.token.decimals),
35
+ delegatedVeSDTBalance: Zero,
36
+ receivedVeSDTBalance: Zero,
37
+ },
38
+ One,
39
+ Zero,
40
+ )
41
+
42
+ const bribesAverage = bribesAverageApr.find((b) => b.id === locker.id)
43
+ const bribeMinApr = (bribesAverage ? bribesAverage.value * (Number(votingPower.min) / 1000) : 0) * 100
44
+ const bribeMaxApr = (bribesAverage ? bribesAverage.value * (Number(votingPower.max) / 1000) : 0) * 100
45
+ const bribeRewards = bribesAverage
46
+ ? {
47
+ bribeMinApr,
48
+ bribeMaxApr,
49
+ bribeAverageApr: bribesAverage.value * 100,
50
+ average: bribesAverageApr,
51
+ minBoost: (Number(votingPower.min) / 1000).toFixed(2),
52
+ maxBoost: (Number(votingPower.max) / 1000).toFixed(2),
53
+ token: `sd${bribesAverage.id}`,
54
+ }
55
+ : undefined
56
+
57
+ return {
58
+ bribeMinApr,
59
+ bribeMaxApr,
60
+ bribeRewards,
61
+ }
62
+ }
63
+
64
+ export default getBribesRewardsData
@@ -0,0 +1,34 @@
1
+ import { formatEther } from 'viem'
2
+
3
+ import { graphql } from '../../utils.js'
4
+ import { SDCAKE_AIRDROP_GLOBAL_QUERY, SDCAKE_AIRDROP_GRAPH_URL } from './endpoints.js'
5
+
6
+ import { computeRatePoints } from './cakeLockerAirdrop.js'
7
+
8
+ export const getCherriesLeaderBoard = async () => {
9
+ const subgraphData = await graphql(SDCAKE_AIRDROP_GRAPH_URL, SDCAKE_AIRDROP_GLOBAL_QUERY, {})
10
+ const airdropGraph = subgraphData?.globals ? subgraphData.globals[0] : undefined
11
+
12
+ const now = Math.floor(Date.now() / 1000)
13
+
14
+ const leaderBoard =
15
+ subgraphData?.globals &&
16
+ subgraphData.users.map((user) => {
17
+ const currentPoints = computeRatePoints(
18
+ BigInt(user.rate),
19
+ BigInt(user.timestamp),
20
+ BigInt(now),
21
+ airdropGraph,
22
+ BigInt(user.points),
23
+ )
24
+ return {
25
+ ...user,
26
+ currentPoints: Number(formatEther(currentPoints)),
27
+ }
28
+ })
29
+
30
+ return {
31
+ ...airdropGraph,
32
+ leaderBoard: leaderBoard?.sort((a, b) => b.currentPoints - a.currentPoints),
33
+ }
34
+ }
@@ -0,0 +1,34 @@
1
+ import { type ILockerFee } from './callsForLockers/feeCalls.js'
2
+
3
+ const getFees = (locker: any, lockerFee: ILockerFee | null | undefined) => {
4
+ const fees: any[] = []
5
+
6
+ for (const fee of locker.fees) {
7
+ let value: number = fee.value
8
+ if (!fee.static) {
9
+ switch (fee.key) {
10
+ case 'voteFee':
11
+ value = Number(lockerFee?.bountyFee || 0) / 100
12
+ break
13
+ case 'claimerFee':
14
+ case 'liquidityFee':
15
+ case 'daoFee':
16
+ case 'lockerFee':
17
+ value = Number(lockerFee?.[fee.key] || 0) / 100
18
+ break
19
+ }
20
+ }
21
+
22
+ if (value > 0) {
23
+ fees.push({
24
+ label: fee.label,
25
+ value,
26
+ key: fee.key,
27
+ })
28
+ }
29
+ }
30
+
31
+ return fees
32
+ }
33
+
34
+ export default getFees
@@ -0,0 +1,55 @@
1
+ import { bsc, mainnet } from 'viem/chains'
2
+
3
+ const getHttpCalls = async (chainId: number) => {
4
+ switch (chainId) {
5
+ case mainnet.id: {
6
+ const httpCalls = [
7
+ (await fetch('https://raw.githubusercontent.com/stake-dao/bounties-report/main/delegationsAPRs.json')).json(),
8
+ fetch('https://api.frax.finance/v1/vefpisdata/1-day')
9
+ .then((result) => result.json())
10
+ .catch((error) => {
11
+ console.error(error)
12
+ return undefined
13
+ }),
14
+ fetch('https://api.cvg.finance//stake-dao/aprs')
15
+ .then((result) => result.json())
16
+ .catch((error) => {
17
+ console.error(error)
18
+ return undefined
19
+ }),
20
+ ]
21
+
22
+ const httpResponses = (await Promise.allSettled(httpCalls)).map((result) =>
23
+ result.status === 'fulfilled' ? result.value : undefined,
24
+ )
25
+
26
+ const bribesData = httpResponses[0]
27
+ const fpisBribesData = httpResponses[1]
28
+ const cvgAprs = httpResponses[2]?.aprProjecteds
29
+
30
+ return {
31
+ bribesData,
32
+ fpisBribesData,
33
+ cvgAprs,
34
+ }
35
+ }
36
+ case bsc.id: {
37
+ const delegationsAPRsCall = [
38
+ (await fetch('https://raw.githubusercontent.com/stake-dao/bounties-report/main/delegationsAPRs.json')).json(),
39
+ ]
40
+
41
+ const delegationsAPRsResponse = (await Promise.allSettled(delegationsAPRsCall)).map((result) =>
42
+ result.status === 'fulfilled' ? result.value : undefined,
43
+ )
44
+
45
+ const delegationsAPRsData = delegationsAPRsResponse[0]
46
+
47
+ return {
48
+ bribesData: delegationsAPRsData,
49
+ }
50
+ }
51
+ }
52
+ return undefined
53
+ }
54
+
55
+ export default getHttpCalls
@@ -0,0 +1,54 @@
1
+ import { mainnet } from 'viem/chains'
2
+
3
+ import {
4
+ ETH_SECONDS_PER_BLOCK,
5
+ LOCKERS_MASTERCHEF_PID,
6
+ STRATEGIES_MASTERCHEF_PID,
7
+ contracts,
8
+ } from '@stake-dao/constants'
9
+ import { parseAbi } from 'viem'
10
+ import { multicall } from '../../utils.js'
11
+
12
+ const getSdtInflationData = async (provider: any) => {
13
+ const chainId = await provider.getChainId()
14
+ if (chainId === mainnet.id) {
15
+ const rawSdtMasterchefData = await multicall(
16
+ provider,
17
+ [
18
+ { address: contracts.sdtMasterchef![1]!, name: 'sdtPerBlock' },
19
+ { address: contracts.sdtMasterchef![1]!, name: 'totalAllocPoint' },
20
+ { address: contracts.sdtMasterchef![1]!, name: 'poolInfo', params: [LOCKERS_MASTERCHEF_PID] },
21
+ { address: contracts.sdtMasterchef![1]!, name: 'poolInfo', params: [STRATEGIES_MASTERCHEF_PID] },
22
+ ],
23
+ parseAbi([
24
+ 'function sdtPerBlock() external view returns (uint256)',
25
+ 'function totalAllocPoint() external view returns (uint256)',
26
+ 'function poolInfo(uint256) external view returns (address,uint256,uint256)',
27
+ ]),
28
+ )
29
+
30
+ const sdtPerBlock = rawSdtMasterchefData[0].result as unknown as bigint
31
+ const totalAllocPoint = rawSdtMasterchefData[1].result as unknown as bigint
32
+ const lockerPoolInfo = rawSdtMasterchefData[2].result as unknown as bigint
33
+ const stratPoolInfo = rawSdtMasterchefData[3].result as unknown as bigint
34
+
35
+ const lockersAllocPoint = lockerPoolInfo[1] as unknown as bigint
36
+ const stratsAllocPoint = stratPoolInfo[1] as unknown as bigint
37
+
38
+ const lockersSdtPerBlock = (lockersAllocPoint * sdtPerBlock) / totalAllocPoint
39
+ const lockersSdtPerSecond = BigInt(lockersSdtPerBlock) / BigInt(ETH_SECONDS_PER_BLOCK)
40
+
41
+ const stratsSdtPerBlock = (stratsAllocPoint * sdtPerBlock) / totalAllocPoint
42
+ const stratsSdtPerSecond = BigInt(stratsSdtPerBlock) / BigInt(ETH_SECONDS_PER_BLOCK)
43
+
44
+ return {
45
+ lockersSdtPerBlock,
46
+ lockersSdtPerSecond,
47
+ stratsSdtPerBlock,
48
+ stratsSdtPerSecond,
49
+ }
50
+ }
51
+ return undefined
52
+ }
53
+
54
+ export default getSdtInflationData