@stake-dao/reader 0.4.112 → 0.5.0

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 (193) hide show
  1. package/dist/esm/abis/lockersMulticall.js +30 -2
  2. package/dist/esm/abis/lockersMulticall.js.map +1 -1
  3. package/dist/esm/index.js +2 -1
  4. package/dist/esm/index.js.map +1 -1
  5. package/dist/esm/lockers/fetch/index.js +53 -224
  6. package/dist/esm/lockers/fetch/index.js.map +1 -1
  7. package/dist/esm/lockers/fetch/parse.js +174 -0
  8. package/dist/esm/lockers/fetch/parse.js.map +1 -0
  9. package/dist/esm/lockers/fetch/protocols/angle.js +136 -0
  10. package/dist/esm/lockers/fetch/protocols/angle.js.map +1 -0
  11. package/dist/esm/lockers/fetch/protocols/balancer.js +172 -0
  12. package/dist/esm/lockers/fetch/protocols/balancer.js.map +1 -0
  13. package/dist/esm/lockers/fetch/protocols/blackpool.js +130 -0
  14. package/dist/esm/lockers/fetch/protocols/blackpool.js.map +1 -0
  15. package/dist/esm/lockers/fetch/protocols/curve.js +204 -0
  16. package/dist/esm/lockers/fetch/protocols/curve.js.map +1 -0
  17. package/dist/esm/lockers/fetch/protocols/frax-fpis.js +121 -0
  18. package/dist/esm/lockers/fetch/protocols/frax-fpis.js.map +1 -0
  19. package/dist/esm/lockers/fetch/protocols/frax-fxs.js +169 -0
  20. package/dist/esm/lockers/fetch/protocols/frax-fxs.js.map +1 -0
  21. package/dist/esm/lockers/fetch/protocols/fxn.js +131 -0
  22. package/dist/esm/lockers/fetch/protocols/fxn.js.map +1 -0
  23. package/dist/esm/lockers/fetch/protocols/maverick.js +172 -0
  24. package/dist/esm/lockers/fetch/protocols/maverick.js.map +1 -0
  25. package/dist/esm/lockers/fetch/protocols/pancakeswap.js +128 -0
  26. package/dist/esm/lockers/fetch/protocols/pancakeswap.js.map +1 -0
  27. package/dist/esm/lockers/fetch/protocols/pendle.js +144 -0
  28. package/dist/esm/lockers/fetch/protocols/pendle.js.map +1 -0
  29. package/dist/esm/lockers/fetch/protocols/spectra.js +133 -0
  30. package/dist/esm/lockers/fetch/protocols/spectra.js.map +1 -0
  31. package/dist/esm/lockers/fetch/protocols/yearn.js +138 -0
  32. package/dist/esm/lockers/fetch/protocols/yearn.js.map +1 -0
  33. package/dist/esm/lockers/fetch/protocols/yieldbasis.js +131 -0
  34. package/dist/esm/lockers/fetch/protocols/yieldbasis.js.map +1 -0
  35. package/dist/esm/lockers/fetch/protocols/yieldnest.js +135 -0
  36. package/dist/esm/lockers/fetch/protocols/yieldnest.js.map +1 -0
  37. package/dist/esm/lockers/fetch/protocols/zerolend.js +124 -0
  38. package/dist/esm/lockers/fetch/protocols/zerolend.js.map +1 -0
  39. package/dist/esm/lockers/fetch/static.js +33 -0
  40. package/dist/esm/lockers/fetch/static.js.map +1 -0
  41. package/dist/esm/lockers/fetch/types.js +2 -0
  42. package/dist/esm/lockers/fetch/types.js.map +1 -0
  43. package/dist/esm/lockers/utils/callsForLockers/pegCalls.js.map +1 -1
  44. package/dist/esm/lockers/utils/getBribesRewardsData.js +11 -9
  45. package/dist/esm/lockers/utils/getBribesRewardsData.js.map +1 -1
  46. package/dist/esm/lockers/utils/substractFees.js +1 -2
  47. package/dist/esm/lockers/utils/substractFees.js.map +1 -1
  48. package/dist/esm/strategies/curve/fetch/getOnlyboostData.js +8 -3
  49. package/dist/esm/strategies/curve/fetch/getOnlyboostData.js.map +1 -1
  50. package/dist/esm/strategies/curve/fetch/index.js +1 -1
  51. package/dist/esm/strategies/curve/fetch/index.js.map +1 -1
  52. package/dist/esm/strategies/v2/parse.js +5 -3
  53. package/dist/esm/strategies/v2/parse.js.map +1 -1
  54. package/dist/esm/utils.js +5 -0
  55. package/dist/esm/utils.js.map +1 -1
  56. package/dist/types/abis/lockersMulticall.d.ts +1 -1
  57. package/dist/types/abis/lockersMulticall.d.ts.map +1 -1
  58. package/dist/types/index.d.ts +2 -1
  59. package/dist/types/index.d.ts.map +1 -1
  60. package/dist/types/lockers/fetch/index.d.ts +5 -99
  61. package/dist/types/lockers/fetch/index.d.ts.map +1 -1
  62. package/dist/types/lockers/fetch/parse.d.ts +52 -0
  63. package/dist/types/lockers/fetch/parse.d.ts.map +1 -0
  64. package/dist/types/lockers/fetch/protocols/angle.d.ts +9 -0
  65. package/dist/types/lockers/fetch/protocols/angle.d.ts.map +1 -0
  66. package/dist/types/lockers/fetch/protocols/balancer.d.ts +9 -0
  67. package/dist/types/lockers/fetch/protocols/balancer.d.ts.map +1 -0
  68. package/dist/types/lockers/fetch/protocols/blackpool.d.ts +9 -0
  69. package/dist/types/lockers/fetch/protocols/blackpool.d.ts.map +1 -0
  70. package/dist/types/lockers/fetch/protocols/curve.d.ts +9 -0
  71. package/dist/types/lockers/fetch/protocols/curve.d.ts.map +1 -0
  72. package/dist/types/lockers/fetch/protocols/frax-fpis.d.ts +9 -0
  73. package/dist/types/lockers/fetch/protocols/frax-fpis.d.ts.map +1 -0
  74. package/dist/types/lockers/fetch/protocols/frax-fxs.d.ts +9 -0
  75. package/dist/types/lockers/fetch/protocols/frax-fxs.d.ts.map +1 -0
  76. package/dist/types/lockers/fetch/protocols/fxn.d.ts +9 -0
  77. package/dist/types/lockers/fetch/protocols/fxn.d.ts.map +1 -0
  78. package/dist/types/lockers/fetch/protocols/maverick.d.ts +9 -0
  79. package/dist/types/lockers/fetch/protocols/maverick.d.ts.map +1 -0
  80. package/dist/types/lockers/fetch/protocols/pancakeswap.d.ts +9 -0
  81. package/dist/types/lockers/fetch/protocols/pancakeswap.d.ts.map +1 -0
  82. package/dist/types/lockers/fetch/protocols/pendle.d.ts +9 -0
  83. package/dist/types/lockers/fetch/protocols/pendle.d.ts.map +1 -0
  84. package/dist/types/lockers/fetch/protocols/spectra.d.ts +9 -0
  85. package/dist/types/lockers/fetch/protocols/spectra.d.ts.map +1 -0
  86. package/dist/types/lockers/fetch/protocols/yearn.d.ts +9 -0
  87. package/dist/types/lockers/fetch/protocols/yearn.d.ts.map +1 -0
  88. package/dist/types/lockers/fetch/protocols/yieldbasis.d.ts +9 -0
  89. package/dist/types/lockers/fetch/protocols/yieldbasis.d.ts.map +1 -0
  90. package/dist/types/lockers/fetch/protocols/yieldnest.d.ts +9 -0
  91. package/dist/types/lockers/fetch/protocols/yieldnest.d.ts.map +1 -0
  92. package/dist/types/lockers/fetch/protocols/zerolend.d.ts +9 -0
  93. package/dist/types/lockers/fetch/protocols/zerolend.d.ts.map +1 -0
  94. package/dist/types/lockers/fetch/static.d.ts +3 -0
  95. package/dist/types/lockers/fetch/static.d.ts.map +1 -0
  96. package/dist/types/lockers/fetch/types.d.ts +105 -0
  97. package/dist/types/lockers/fetch/types.d.ts.map +1 -0
  98. package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts +1 -1
  99. package/dist/types/lockers/utils/callsForLockers/pegCalls.d.ts.map +1 -1
  100. package/dist/types/lockers/utils/getBribesRewardsData.d.ts +1 -0
  101. package/dist/types/lockers/utils/getBribesRewardsData.d.ts.map +1 -1
  102. package/dist/types/lockers/utils/substractFees.d.ts.map +1 -1
  103. package/dist/types/strategies/curve/fetch/getOnlyboostData.d.ts +1 -1
  104. package/dist/types/strategies/curve/fetch/getOnlyboostData.d.ts.map +1 -1
  105. package/dist/types/strategies/curve/fetch/index.d.ts.map +1 -1
  106. package/dist/types/strategies/stakeDao/fetch.d.ts +1 -1
  107. package/dist/types/strategies/v2/parse.d.ts.map +1 -1
  108. package/dist/types/utils.d.ts +1 -0
  109. package/dist/types/utils.d.ts.map +1 -1
  110. package/package.json +2 -2
  111. package/src/abis/lockersMulticall.ts +30 -2
  112. package/src/index.ts +2 -1
  113. package/src/lockers/fetch/index.ts +65 -329
  114. package/src/lockers/fetch/parse.ts +258 -0
  115. package/src/lockers/fetch/protocols/angle.ts +157 -0
  116. package/src/lockers/fetch/protocols/balancer.ts +195 -0
  117. package/src/lockers/fetch/protocols/blackpool.ts +151 -0
  118. package/src/lockers/fetch/protocols/curve.ts +229 -0
  119. package/src/lockers/fetch/protocols/frax-fpis.ts +139 -0
  120. package/src/lockers/fetch/protocols/frax-fxs.ts +193 -0
  121. package/src/lockers/fetch/protocols/fxn.ts +152 -0
  122. package/src/lockers/fetch/protocols/maverick.ts +193 -0
  123. package/src/lockers/fetch/protocols/pancakeswap.ts +149 -0
  124. package/src/lockers/fetch/protocols/pendle.ts +165 -0
  125. package/src/lockers/fetch/protocols/spectra.ts +154 -0
  126. package/src/lockers/fetch/protocols/yearn.ts +159 -0
  127. package/src/lockers/fetch/protocols/yieldbasis.ts +152 -0
  128. package/src/lockers/fetch/protocols/yieldnest.ts +157 -0
  129. package/src/lockers/fetch/protocols/zerolend.ts +144 -0
  130. package/src/lockers/fetch/static.ts +35 -0
  131. package/src/lockers/fetch/types.ts +112 -0
  132. package/src/lockers/utils/callsForLockers/pegCalls.ts +2 -1
  133. package/src/lockers/utils/getBribesRewardsData.ts +12 -11
  134. package/src/lockers/utils/substractFees.ts +1 -2
  135. package/src/strategies/curve/fetch/getOnlyboostData.ts +11 -2
  136. package/src/strategies/curve/fetch/index.ts +2 -0
  137. package/src/strategies/v2/parse.ts +10 -4
  138. package/src/utils.ts +5 -0
  139. package/dist/esm/lockers/fetch/parseBoost.js +0 -36
  140. package/dist/esm/lockers/fetch/parseBoost.js.map +0 -1
  141. package/dist/esm/lockers/fetch/parsePeg.js +0 -18
  142. package/dist/esm/lockers/fetch/parsePeg.js.map +0 -1
  143. package/dist/esm/lockers/fetch/parseVoteBoosterData.js +0 -28
  144. package/dist/esm/lockers/fetch/parseVoteBoosterData.js.map +0 -1
  145. package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js +0 -24
  146. package/dist/esm/lockers/utils/callsForLockers/depositorCalls.js.map +0 -1
  147. package/dist/esm/lockers/utils/callsForLockers/feeCalls.js +0 -97
  148. package/dist/esm/lockers/utils/callsForLockers/feeCalls.js.map +0 -1
  149. package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js +0 -9
  150. package/dist/esm/lockers/utils/callsForLockers/gaugeCalls.js.map +0 -1
  151. package/dist/esm/lockers/utils/callsForLockers/index.js +0 -34
  152. package/dist/esm/lockers/utils/callsForLockers/index.js.map +0 -1
  153. package/dist/esm/lockers/utils/callsForLockers/veBoosts.js +0 -17
  154. package/dist/esm/lockers/utils/callsForLockers/veBoosts.js.map +0 -1
  155. package/dist/esm/lockers/utils/callsForLockers/veCalls.js +0 -33
  156. package/dist/esm/lockers/utils/callsForLockers/veCalls.js.map +0 -1
  157. package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js +0 -14
  158. package/dist/esm/lockers/utils/callsForLockers/veSdtCalls.js.map +0 -1
  159. package/dist/esm/lockers/utils/getFees.js +0 -27
  160. package/dist/esm/lockers/utils/getFees.js.map +0 -1
  161. package/dist/types/lockers/fetch/parseBoost.d.ts +0 -4
  162. package/dist/types/lockers/fetch/parseBoost.d.ts.map +0 -1
  163. package/dist/types/lockers/fetch/parsePeg.d.ts +0 -3
  164. package/dist/types/lockers/fetch/parsePeg.d.ts.map +0 -1
  165. package/dist/types/lockers/fetch/parseVoteBoosterData.d.ts +0 -13
  166. package/dist/types/lockers/fetch/parseVoteBoosterData.d.ts.map +0 -1
  167. package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts +0 -4
  168. package/dist/types/lockers/utils/callsForLockers/depositorCalls.d.ts.map +0 -1
  169. package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts +0 -13
  170. package/dist/types/lockers/utils/callsForLockers/feeCalls.d.ts.map +0 -1
  171. package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts +0 -6
  172. package/dist/types/lockers/utils/callsForLockers/gaugeCalls.d.ts.map +0 -1
  173. package/dist/types/lockers/utils/callsForLockers/index.d.ts +0 -8
  174. package/dist/types/lockers/utils/callsForLockers/index.d.ts.map +0 -1
  175. package/dist/types/lockers/utils/callsForLockers/veBoosts.d.ts +0 -7
  176. package/dist/types/lockers/utils/callsForLockers/veBoosts.d.ts.map +0 -1
  177. package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts +0 -4
  178. package/dist/types/lockers/utils/callsForLockers/veCalls.d.ts.map +0 -1
  179. package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts +0 -11
  180. package/dist/types/lockers/utils/callsForLockers/veSdtCalls.d.ts.map +0 -1
  181. package/dist/types/lockers/utils/getFees.d.ts +0 -4
  182. package/dist/types/lockers/utils/getFees.d.ts.map +0 -1
  183. package/src/lockers/fetch/parseBoost.ts +0 -46
  184. package/src/lockers/fetch/parsePeg.ts +0 -22
  185. package/src/lockers/fetch/parseVoteBoosterData.ts +0 -34
  186. package/src/lockers/utils/callsForLockers/depositorCalls.ts +0 -30
  187. package/src/lockers/utils/callsForLockers/feeCalls.ts +0 -124
  188. package/src/lockers/utils/callsForLockers/gaugeCalls.ts +0 -10
  189. package/src/lockers/utils/callsForLockers/index.ts +0 -51
  190. package/src/lockers/utils/callsForLockers/veBoosts.ts +0 -28
  191. package/src/lockers/utils/callsForLockers/veCalls.ts +0 -44
  192. package/src/lockers/utils/callsForLockers/veSdtCalls.ts +0 -15
  193. package/src/lockers/utils/getFees.ts +0 -31
@@ -0,0 +1,131 @@
1
+ import { One, STAKE_DAO_ASSETS_BASE_URL, Zero, tokenWithId } from '@stake-dao/constants';
2
+ import { formatUnits, parseUnits } from 'viem';
3
+ import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
4
+ import { getRes, multicall } from '../../../utils.js';
5
+ import { parse, parsePeg } from '../parse.js';
6
+ export const locker = {
7
+ id: 'fxn',
8
+ symbol: 'FXN',
9
+ protocol: 'f(x) Protocol',
10
+ protocolDescription: 'f(x) splits ETH into a mix of low-volatility “floating stablecoins” called fETH and high volatility “leveraged ETH” tokens called xETH.',
11
+ website: 'https://fx.aladdin.club/',
12
+ logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/fxn.svg`,
13
+ chainId: 1,
14
+ rgb: '86, 61, 250',
15
+ token: tokenWithId('fxn'),
16
+ sdToken: tokenWithId('sdfxn'),
17
+ rewards: [
18
+ { ...tokenWithId('sdt'), distribution: 'streamed', origin: 'sdtEmission' },
19
+ { ...tokenWithId('wsteth'), distribution: 'streamed', origin: 'native.fxn' },
20
+ { ...tokenWithId('sdfxn'), distribution: 'distributed', origin: 'bounties' },
21
+ ],
22
+ delegation: ['sdfxn.eth'],
23
+ modules: {
24
+ depositor: '0x7995192bE61EA0B28ce14183DDA51eDF78F1c7AB',
25
+ locker: '0x75736518075a01034fa72D675D36a47e9B06B2Fb',
26
+ veToken: '0xEC6B8A3F3605B083F7044C0F31f2cac0caf1d469',
27
+ gauge: '0xbcfE5c47129253C6B8a9A00565B3358b488D42E0',
28
+ accumulator: '0x23ab5100acaFF53d00ad92BB8Df75a72e7a3Bc4a',
29
+ },
30
+ secondaryMarket: {
31
+ label: 'Curve',
32
+ poolKey: 'factory-v2-359',
33
+ vaultKey: '',
34
+ pool: '0x28Ca243dc0aC075dD012fCf9375C25D18A844d96',
35
+ pools: ['0x28Ca243dc0aC075dD012fCf9375C25D18A844d96'],
36
+ pegBase: 50,
37
+ },
38
+ fees: [
39
+ {
40
+ label: { key: 'liquidity', variable: 'sdFXN/FXN' },
41
+ value: 10,
42
+ key: 'liquidityFee',
43
+ },
44
+ {
45
+ label: { key: 'treasury' },
46
+ value: 5,
47
+ key: 'daoFee',
48
+ },
49
+ {
50
+ label: { key: 'harvester' },
51
+ value: 0.5,
52
+ key: 'claimerFee',
53
+ },
54
+ ],
55
+ extensions: {
56
+ coingeckoBaseSlug: 'fxn-token',
57
+ },
58
+ };
59
+ const fxnLocker = async ({ provider, common, prices }) => {
60
+ const token = locker.token.address;
61
+ const sdToken = locker.sdToken.address;
62
+ const gauge = locker.modules.gauge;
63
+ const depositor = locker.modules.depositor;
64
+ const votingEscrow = locker.modules.veToken;
65
+ const lockerAddress = locker.modules.locker;
66
+ const secondaryMarket = locker.secondaryMarket;
67
+ const rewards = locker.rewards;
68
+ const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
69
+ const format = (value) => formatUnits(value, locker.token.decimals);
70
+ const formatRes = (value) => format(getRes(value));
71
+ const calls = [
72
+ /*********************************************************************************
73
+ *** Voting Escrow
74
+ *********************************************************************************/
75
+ // Token locked by the Locker
76
+ { address: votingEscrow, name: 'locked', params: [lockerAddress] },
77
+ // veToken Balance of the Locker
78
+ { address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
79
+ // Total token locked
80
+ { address: votingEscrow, name: 'supply' },
81
+ // Total veToken supply
82
+ { address: votingEscrow, name: 'totalSupply' },
83
+ /*********************************************************************************
84
+ *** Gauge
85
+ *********************************************************************************/
86
+ // Total sdToken staked
87
+ { address: gauge, name: 'totalSupply' },
88
+ // Gauge working supply
89
+ { address: gauge, name: 'working_supply' },
90
+ /*********************************************************************************
91
+ *** Token & sdToken
92
+ *********************************************************************************/
93
+ // Token balance not locked
94
+ { address: token, name: 'balanceOf', params: [depositor] },
95
+ // sdToken in secondary market pool
96
+ { address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
97
+ /*********************************************************************************
98
+ *** Peg
99
+ *********************************************************************************/
100
+ // Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
101
+ { address: secondaryMarket.pool, name: '0x5e0d443f', params: [One, Zero, pegBase] },
102
+ /*********************************************************************************
103
+ *** Rewards
104
+ *********************************************************************************/
105
+ // Streaming status for each reward token
106
+ ...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
107
+ ];
108
+ const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId));
109
+ const raw = {
110
+ tokenLocked: getRes(res.shift()),
111
+ veBalanceOfLocker: formatRes(res.shift()),
112
+ totalTokenLocked: formatRes(res.shift()),
113
+ veTotalSupply: formatRes(res.shift()),
114
+ totalSupplyStaked: formatRes(res.shift()),
115
+ gaugeWorkingSupply: formatRes(res.shift()),
116
+ amountTokenNotLock: formatRes(res.shift()),
117
+ sdTokenInPool: formatRes(res.shift()),
118
+ peg: getRes(res.shift()),
119
+ rewards: rewards.map(() => getRes(res.shift())),
120
+ veTokenRate: '4',
121
+ _workingSupply: '0',
122
+ _veBalanceOfLocker: '0',
123
+ };
124
+ raw.tokenLocked = format(raw.tokenLocked[0]);
125
+ raw.peg = parsePeg(locker, raw.peg);
126
+ raw._workingSupply = raw.gaugeWorkingSupply;
127
+ raw._veBalanceOfLocker = raw.veBalanceOfLocker;
128
+ return parse({ locker, common, prices, raw });
129
+ };
130
+ export default fxnLocker;
131
+ //# sourceMappingURL=fxn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fxn.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/fxn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ import { FOUR_YEAR, OneEther, STAKE_DAO_ASSETS_BASE_URL, tokenWithId } from '@stake-dao/constants';
2
+ import { formatUnits } from 'viem';
3
+ import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
4
+ import { getRes, multicall, multichainMulticall } from '../../../utils.js';
5
+ import { parse } from '../parse.js';
6
+ export const locker = {
7
+ id: 'mav',
8
+ symbol: 'MAV',
9
+ protocol: 'Maverick',
10
+ protocolDescription: 'Maverick Protocol offers an infrastructure for DeFi, built for traders, liquidity providers, DAO treasuries, and developers.',
11
+ website: 'https://www.mav.xyz/',
12
+ logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/mav.svg`,
13
+ chainId: 1,
14
+ rgb: '100, 0, 255',
15
+ token: tokenWithId('mav'),
16
+ sdToken: tokenWithId('sdmav'),
17
+ rewards: [],
18
+ delegation: ['sdmav.eth'],
19
+ modules: {
20
+ depositor: '0x177Eaa1A7c26da6Dc84c0cC3F9AE6Fd0A470E7Ec',
21
+ locker: '0xdBD6170396ECE3DCd51195950A2dF7F7635F9e38',
22
+ veToken: '0x4949Ac21d5b2A0cCd303C20425eeb29DCcba66D8',
23
+ gauge: '0x5B75C60D45BfB053f91B5a9eAe22519DFaa37BB6',
24
+ accumulator: '0x0000000000000000000000000000000000000000',
25
+ },
26
+ secondaryMarket: {
27
+ label: 'Maverick',
28
+ poolKey: '0x10463ad648d59a3dadcef626dcec4197fd0b550f',
29
+ vaultKey: '',
30
+ pool: '0x10463ad648d59a3dAdceF626dCec4197FD0B550f',
31
+ pools: ['0x10463ad648d59a3dAdceF626dCec4197FD0B550f'],
32
+ router: '0xbBF1EE38152E9D8e3470Dc47947eAa65DcA94913',
33
+ pegBase: 1,
34
+ },
35
+ fees: [
36
+ {
37
+ label: { key: 'liquidity', variable: 'sdMAV/MAV' },
38
+ value: 10,
39
+ key: 'liquidityFee',
40
+ static: true,
41
+ },
42
+ {
43
+ label: { key: 'treasury' },
44
+ value: 5,
45
+ key: 'daoFee',
46
+ static: true,
47
+ },
48
+ {
49
+ label: { key: 'harvester' },
50
+ value: 0.1,
51
+ key: 'claimerFee',
52
+ static: true,
53
+ },
54
+ ],
55
+ extensions: {
56
+ coingeckoBaseSlug: 'maverick-protocol',
57
+ sideChains: [
58
+ {
59
+ chainId: 324,
60
+ locker: '0xb908EB86C9427269EC85C83bd812A2265778Da3e',
61
+ veToken: '0x7EDcB053d4598a145DdaF5260cf89A32263a2807',
62
+ depositor: '0x5b3b63E8313e7c68F88E4A12c86dC319ba75fC98',
63
+ sdToken: '0x8E6d4c0088b5B41BdDb126f355Ef278Ac5B5974C',
64
+ token: '0x787c09494ec8bcb24dcaf8659e7d5d69979ee508',
65
+ },
66
+ {
67
+ chainId: 56,
68
+ locker: '0xC6973841dC130597dF3Cb8bE2F57440d856FD7C4',
69
+ veToken: '0xE6108f1869d37E5076a56168C66A1607EdB10819',
70
+ depositor: '0xC5CCc20f6A4CD65fda979A2E292DBCF2C450C067',
71
+ sdToken: '0x75289388d50364c3013583d97bd70cED0e183e32',
72
+ token: '0xd691d9a68c887bdf34da8c36f63487333acfd103',
73
+ },
74
+ {
75
+ chainId: 8453,
76
+ locker: '0xC5CCc20f6A4CD65fda979A2E292DBCF2C450C067',
77
+ veToken: '0xFcCB5263148fbF11d58433aF6FeeFF0Cc49E0EA5',
78
+ depositor: '0xb30807324354379233FC6F7716C0510BbBD88487',
79
+ sdToken: '0x75289388d50364c3013583d97bd70cED0e183e32',
80
+ token: '0x64b88c73A5DfA78D1713fE1b4c69a22d7E0faAa7',
81
+ },
82
+ ],
83
+ },
84
+ };
85
+ const maverickLocker = async ({ provider, common, prices }) => {
86
+ const token = locker.token.address;
87
+ const sdToken = locker.sdToken.address;
88
+ const gauge = locker.modules.gauge;
89
+ const depositor = locker.modules.depositor;
90
+ const votingEscrow = locker.modules.veToken;
91
+ const lockerAddress = locker.modules.locker;
92
+ const secondaryMarket = locker.secondaryMarket;
93
+ const rewards = locker.rewards;
94
+ const sidechains = locker.extensions.sideChains;
95
+ const format = (value) => formatUnits(value, locker.token.decimals);
96
+ const formatRes = (value) => format(getRes(value));
97
+ const calls = [
98
+ /*********************************************************************************
99
+ *** Voting Escrow
100
+ *********************************************************************************/
101
+ // Token locked by the Locker
102
+ { address: votingEscrow, name: 'lockups', params: [lockerAddress, 0] },
103
+ // veToken Balance of the Locker
104
+ { address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
105
+ // Total token locked
106
+ { address: token, name: 'balanceOf', params: [votingEscrow] },
107
+ // Total veToken supply
108
+ { address: votingEscrow, name: 'totalSupply' },
109
+ // veToken rate
110
+ { address: votingEscrow, name: 'previewPoints', params: [OneEther, FOUR_YEAR] },
111
+ /*********************************************************************************
112
+ *** Gauge
113
+ *********************************************************************************/
114
+ // Total sdToken staked
115
+ { address: gauge, name: 'totalSupply' },
116
+ // Gauge working supply
117
+ { address: gauge, name: 'working_supply' },
118
+ /*********************************************************************************
119
+ *** Token & sdToken
120
+ *********************************************************************************/
121
+ // Token balance not locked
122
+ { address: token, name: 'balanceOf', params: [depositor] },
123
+ // sdToken in secondary market pool
124
+ { address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
125
+ /*********************************************************************************
126
+ *** Rewards
127
+ *********************************************************************************/
128
+ // Streaming status for each reward token
129
+ ...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
130
+ ];
131
+ /*********************************************************************************
132
+ *** Sidechains
133
+ *********************************************************************************/
134
+ const sidechainsCalls = sidechains.reduce((acc, value) => {
135
+ return acc.concat([
136
+ { address: value.veToken, name: 'lockups', params: [value.locker, 0], chainId: value.chainId },
137
+ { address: value.veToken, name: 'balanceOf', params: [value.locker], chainId: value.chainId },
138
+ { address: value.veToken, name: 'totalSupply', chainId: value.chainId },
139
+ ]);
140
+ }, []);
141
+ const [res, sidechainsRes] = await Promise.all([
142
+ multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId)),
143
+ multichainMulticall(sidechainsCalls, lockersMulticallAbi()),
144
+ ]);
145
+ const raw = {
146
+ tokenLocked: getRes(res.shift()),
147
+ veBalanceOfLocker: formatRes(res.shift()),
148
+ totalTokenLocked: formatRes(res.shift()),
149
+ veTotalSupply: formatRes(res.shift()),
150
+ veTokenRate: getRes(res.shift()),
151
+ totalSupplyStaked: formatRes(res.shift()),
152
+ gaugeWorkingSupply: formatRes(res.shift()),
153
+ amountTokenNotLock: formatRes(res.shift()),
154
+ sdTokenInPool: formatRes(res.shift()),
155
+ peg: '-',
156
+ rewards: rewards.map(() => getRes(res.shift())),
157
+ _workingSupply: '0',
158
+ _veBalanceOfLocker: '0',
159
+ sidechains: sidechains.map((s) => ({
160
+ tokenLocked: format(getRes(sidechainsRes[s.chainId].shift())[0]),
161
+ veBalanceOfLocker: formatRes(sidechainsRes[s.chainId].shift()),
162
+ veTotalSupply: formatRes(sidechainsRes[s.chainId].shift()),
163
+ })),
164
+ };
165
+ raw.tokenLocked = format(raw.tokenLocked[0]);
166
+ raw.veTokenRate = format(raw.veTokenRate[0]);
167
+ raw._workingSupply = raw.gaugeWorkingSupply;
168
+ raw._veBalanceOfLocker = raw.veBalanceOfLocker;
169
+ return parse({ locker, common, prices, raw });
170
+ };
171
+ export default maverickLocker;
172
+ //# sourceMappingURL=maverick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"maverick.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/maverick.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import { One, STAKE_DAO_ASSETS_BASE_URL, Zero, tokenWithId } from '@stake-dao/constants';
2
+ import { formatUnits, parseUnits } from 'viem';
3
+ import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
4
+ import { STAKE_DAO_API } from '../../../endpoints.js';
5
+ import { getRes, multicall } from '../../../utils.js';
6
+ import { parse, parsePeg } from '../parse.js';
7
+ export const locker = {
8
+ id: 'cake',
9
+ symbol: 'CAKE',
10
+ protocol: 'PancakeSwap',
11
+ protocolDescription: 'PancakeSwap is the leading decentralized exchange on BNB Smart Chain.',
12
+ website: 'https://pancakeswap.finance/',
13
+ logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/cake.svg`,
14
+ chainId: 56,
15
+ rgb: '31, 199, 212',
16
+ token: tokenWithId('cake', 56),
17
+ sdToken: tokenWithId('sdcake', 56),
18
+ rewards: [
19
+ { ...tokenWithId('cake', 56), distribution: 'streamed', origin: 'native.pancakeswap' },
20
+ { ...tokenWithId('sdcake', 56), distribution: 'distributed', origin: 'bounties' },
21
+ ],
22
+ delegation: ['sdcake.eth'],
23
+ modules: {
24
+ depositor: '0x0000000000000000000000000000000000000000',
25
+ locker: '0x1e6f87a9ddf744af31157d8daa1e3025648d042d',
26
+ veToken: '0x5692DB8177a81A6c6afc8084C2976C9933EC1bAB',
27
+ gauge: '0xE2496134149e6CD3f3A577C2B08A6f54fC23e6e4',
28
+ accumulator: '0xAA14AD0AD8B48406Baf2473692901e47430414F5',
29
+ redeem: '0xD1Aa72713ccB1FE2983141EC176F1181F98E4908',
30
+ },
31
+ secondaryMarket: {
32
+ label: 'PancakeSwap',
33
+ poolKey: '',
34
+ vaultKey: '',
35
+ pool: '0xb8204D31379A9B317CD61C833406C972F58ecCbC',
36
+ pools: ['0xb8204D31379A9B317CD61C833406C972F58ecCbC', '0x8A876Ca851063e0252654CA6368a5B2280f51c32'],
37
+ router: '0x13f4EA83D0bd40E75C8222255bc855a974568Dd4',
38
+ pegBase: 3000,
39
+ },
40
+ fees: [
41
+ {
42
+ label: { key: 'liquidity', variable: 'sdCAKE/CAKE' },
43
+ value: 10,
44
+ key: 'liquidityFee',
45
+ },
46
+ {
47
+ label: { key: 'treasury' },
48
+ value: 5,
49
+ key: 'daoFee',
50
+ },
51
+ ],
52
+ extensions: {
53
+ coingeckoBaseSlug: 'pancakeswap',
54
+ },
55
+ };
56
+ const pancakeswapLocker = async ({ provider, common, prices }) => {
57
+ const token = locker.token.address;
58
+ const sdToken = locker.sdToken.address;
59
+ const gauge = locker.modules.gauge;
60
+ const depositor = locker.modules.depositor;
61
+ const votingEscrow = locker.modules.veToken;
62
+ const lockerAddress = locker.modules.locker;
63
+ const secondaryMarket = locker.secondaryMarket;
64
+ const rewards = locker.rewards;
65
+ const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
66
+ const format = (value) => formatUnits(value, locker.token.decimals);
67
+ const formatRes = (value) => format(getRes(value));
68
+ const calls = [
69
+ /*********************************************************************************
70
+ *** Voting Escrow
71
+ *********************************************************************************/
72
+ // Token locked by the Locker
73
+ { address: votingEscrow, name: 'locks', params: [lockerAddress] },
74
+ // veToken Balance of the Locker
75
+ { address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
76
+ // Total token locked
77
+ { address: token, name: 'balanceOf', params: [votingEscrow] },
78
+ // Total veToken supply
79
+ { address: votingEscrow, name: 'totalSupply' },
80
+ /*********************************************************************************
81
+ *** Gauge
82
+ *********************************************************************************/
83
+ // Total sdToken staked
84
+ { address: gauge, name: 'totalSupply' },
85
+ /*********************************************************************************
86
+ *** Token & sdToken
87
+ *********************************************************************************/
88
+ // Token balance not locked
89
+ { address: token, name: 'balanceOf', params: [depositor] },
90
+ // sdToken in secondary market pool
91
+ { address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
92
+ /*********************************************************************************
93
+ *** Peg
94
+ *********************************************************************************/
95
+ // Return amount when swapping {pegBase} sdToken to token -> get_dy(uint256,uint256,uint256)
96
+ { address: secondaryMarket.pool, name: '0x556d6e9f', params: [One, Zero, pegBase] },
97
+ /*********************************************************************************
98
+ *** Rewards
99
+ *********************************************************************************/
100
+ // Streaming status for each reward token
101
+ ...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
102
+ ];
103
+ const [res, sdcakeData] = await Promise.all([
104
+ multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId)),
105
+ fetch(`${STAKE_DAO_API}/main/api/lockers/sdcake-working-supply.json`).then((res) => res.json()),
106
+ ]);
107
+ const raw = {
108
+ tokenLocked: getRes(res.shift()),
109
+ veBalanceOfLocker: formatRes(res.shift()),
110
+ totalTokenLocked: formatRes(res.shift()),
111
+ veTotalSupply: formatRes(res.shift()),
112
+ totalSupplyStaked: formatRes(res.shift()),
113
+ gaugeWorkingSupply: '0',
114
+ amountTokenNotLock: formatRes(res.shift()),
115
+ sdTokenInPool: formatRes(res.shift()),
116
+ peg: getRes(res.shift()),
117
+ rewards: rewards.map(() => getRes(res.shift())),
118
+ veTokenRate: '4',
119
+ _workingSupply: sdcakeData.working_supply.toString(),
120
+ _veBalanceOfLocker: sdcakeData.total_user_votes.toString(),
121
+ };
122
+ raw.tokenLocked = format(raw.tokenLocked[0]);
123
+ raw.gaugeWorkingSupply = raw.totalSupplyStaked;
124
+ raw.peg = parsePeg(locker, raw.peg);
125
+ return parse({ locker, common, prices, raw });
126
+ };
127
+ export default pancakeswapLocker;
128
+ //# sourceMappingURL=pancakeswap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pancakeswap.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/pancakeswap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ import { One, STAKE_DAO_ASSETS_BASE_URL, Zero, tokenWithId } from '@stake-dao/constants';
2
+ import { formatUnits, parseUnits } from 'viem';
3
+ import lockersMulticallAbi from '../../../abis/lockersMulticall.js';
4
+ import { getRes, multicall } from '../../../utils.js';
5
+ import { parse, parsePeg } from '../parse.js';
6
+ export const locker = {
7
+ id: 'pendle',
8
+ symbol: 'PENDLE',
9
+ protocol: 'Pendle',
10
+ protocolDescription: 'Pendle is a permissionless yield-trading protocol where users can execute various yield-management strategies.',
11
+ website: 'https://pendle.finance/',
12
+ logoUrl: `${STAKE_DAO_ASSETS_BASE_URL}/assets/archive/pendle.svg`,
13
+ chainId: 1,
14
+ rgb: '21, 46, 81',
15
+ token: tokenWithId('pendle'),
16
+ sdToken: tokenWithId('sdpendle'),
17
+ rewards: [
18
+ { ...tokenWithId('sdt'), distribution: 'streamed', origin: 'sdtEmission' },
19
+ { ...tokenWithId('pendle'), distribution: 'streamed', origin: 'stratPerf' },
20
+ { ...tokenWithId('weth'), distribution: 'streamed', origin: 'native.common' },
21
+ { ...tokenWithId('usdt'), distribution: 'streamed', origin: 'native.common' },
22
+ { ...tokenWithId('sdpendle'), distribution: 'streamed', origin: 'native.common' },
23
+ { ...tokenWithId('sdpendle'), distribution: 'distributed', origin: 'bounties' },
24
+ ],
25
+ delegation: ['sdpendle.eth'],
26
+ modules: {
27
+ depositor: '0x7F5c485D24fB1832A14f122C8722ef15C158Acb5',
28
+ locker: '0xD8fa8dC5aDeC503AcC5e026a98F32Ca5C1Fa289A',
29
+ veToken: '0x4f30A9D41B80ecC5B94306AB4364951AE3170210',
30
+ gauge: '0x50DC9aE51f78C593d4138263da7088A973b8184E',
31
+ accumulator: '0x65682CB35C8DEa1d3027CD37F37a245356BC4526',
32
+ },
33
+ secondaryMarket: {
34
+ label: 'Curve',
35
+ poolKey: 'factory-v2-306',
36
+ vaultKey: '',
37
+ pool: '0x26f3f26F46cBeE59d1F8860865e13Aa39e36A8c0',
38
+ pools: ['0x26f3f26F46cBeE59d1F8860865e13Aa39e36A8c0'],
39
+ pegBase: 2000,
40
+ },
41
+ fees: [
42
+ {
43
+ label: { key: 'liquidity', variable: 'sdPENDLE/PENDLE' },
44
+ value: 10,
45
+ key: 'liquidityFee',
46
+ },
47
+ {
48
+ label: { key: 'treasuryOn', variable: 'PENDLE, WETH' },
49
+ value: 5,
50
+ key: 'daoFee',
51
+ },
52
+ {
53
+ label: {
54
+ key: 'harvesterOn',
55
+ variable: 'PENDLE, WETH',
56
+ },
57
+ value: 0.1,
58
+ key: 'claimerFee',
59
+ },
60
+ ],
61
+ extensions: {
62
+ coingeckoBaseSlug: 'pendle',
63
+ },
64
+ alternativeYields: {
65
+ aSdPendleConcentrator: {
66
+ label: 'asdPENDLE',
67
+ platform: 'Concentrator',
68
+ href: 'https://concentrator.aladdin.club/',
69
+ },
70
+ },
71
+ };
72
+ const pendleLocker = async ({ provider, common, prices }) => {
73
+ const token = locker.token.address;
74
+ const sdToken = locker.sdToken.address;
75
+ const gauge = locker.modules.gauge;
76
+ const depositor = locker.modules.depositor;
77
+ const votingEscrow = locker.modules.veToken;
78
+ const lockerAddress = locker.modules.locker;
79
+ const secondaryMarket = locker.secondaryMarket;
80
+ const rewards = locker.rewards;
81
+ const pegBase = parseUnits(secondaryMarket?.pegBase?.toString() || '1', 18);
82
+ const format = (value) => formatUnits(value, locker.token.decimals);
83
+ const formatRes = (value) => format(getRes(value));
84
+ const calls = [
85
+ /*********************************************************************************
86
+ *** Voting Escrow
87
+ *********************************************************************************/
88
+ // Token locked by the Locker
89
+ { address: votingEscrow, name: 'positionData', params: [lockerAddress] },
90
+ // veToken Balance of the Locker
91
+ { address: votingEscrow, name: 'balanceOf', params: [lockerAddress] },
92
+ // Total token locked
93
+ { address: token, name: 'balanceOf', params: [votingEscrow] },
94
+ // Total veToken supply
95
+ { address: votingEscrow, name: 'totalSupplyStored' },
96
+ /*********************************************************************************
97
+ *** Gauge
98
+ *********************************************************************************/
99
+ // Total sdToken staked
100
+ { address: gauge, name: 'totalSupply' },
101
+ // Gauge working supply
102
+ { address: gauge, name: 'working_supply' },
103
+ /*********************************************************************************
104
+ *** Token & sdToken
105
+ *********************************************************************************/
106
+ // Token balance not locked
107
+ { address: token, name: 'balanceOf', params: [depositor] },
108
+ // sdToken in secondary market pool
109
+ { address: sdToken, name: 'balanceOf', params: [secondaryMarket.pool] },
110
+ /*********************************************************************************
111
+ *** Peg
112
+ *********************************************************************************/
113
+ // Return amount when swapping {pegBase} sdToken to token -> get_dy(int128,int128,uint256)
114
+ { address: secondaryMarket.pool, name: '0x5e0d443f', params: [One, Zero, pegBase] },
115
+ /*********************************************************************************
116
+ *** Rewards
117
+ *********************************************************************************/
118
+ // Streaming status for each reward token
119
+ ...rewards.map((r) => ({ address: gauge, name: 'reward_data', params: [r.address] })),
120
+ ];
121
+ const res = await multicall(provider, calls, lockersMulticallAbi(locker.id, locker.chainId));
122
+ const raw = {
123
+ tokenLocked: getRes(res.shift()),
124
+ veBalanceOfLocker: formatRes(res.shift()),
125
+ totalTokenLocked: formatRes(res.shift()),
126
+ veTotalSupply: formatRes(res.shift()),
127
+ totalSupplyStaked: formatRes(res.shift()),
128
+ gaugeWorkingSupply: formatRes(res.shift()),
129
+ amountTokenNotLock: formatRes(res.shift()),
130
+ sdTokenInPool: formatRes(res.shift()),
131
+ peg: getRes(res.shift()),
132
+ rewards: rewards.map(() => getRes(res.shift())),
133
+ veTokenRate: '4',
134
+ _workingSupply: '0',
135
+ _veBalanceOfLocker: '0',
136
+ };
137
+ raw.tokenLocked = format(raw.tokenLocked[0]);
138
+ raw.peg = parsePeg(locker, raw.peg);
139
+ raw._workingSupply = raw.gaugeWorkingSupply;
140
+ raw._veBalanceOfLocker = raw.veBalanceOfLocker;
141
+ return parse({ locker, common, prices, raw });
142
+ };
143
+ export default pendleLocker;
144
+ //# sourceMappingURL=pendle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pendle.js","sourceRoot":"","sources":["../../../../../src/lockers/fetch/protocols/pendle.ts"],"names":[],"mappings":"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"}