@merkl/api 0.10.199 → 0.10.200

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 (215) hide show
  1. package/dist/src/eden/index.d.ts +2 -6398
  2. package/dist/src/errors/HttpError.d.ts +5 -0
  3. package/dist/src/errors/HttpError.js +6 -0
  4. package/dist/src/errors/NotFound.error.d.ts +4 -0
  5. package/dist/src/errors/NotFound.error.js +5 -0
  6. package/dist/src/index.d.ts +1 -2464
  7. package/dist/src/index.js +56 -7
  8. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +15 -22
  9. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +1 -0
  10. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.d.ts +3 -1
  11. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +8 -0
  12. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GammaProcessor.d.ts +43 -0
  13. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GammaProcessor.js +63 -0
  14. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.d.ts +3 -3
  15. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +3 -1
  16. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/NoLinkVaultProcessor.d.ts +36 -0
  17. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/NoLinkVaultProcessor.js +51 -0
  18. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/StakingProcessor.d.ts +0 -1
  19. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/StakingProcessor.js +15 -7
  20. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +4 -0
  21. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.d.ts +1 -1
  22. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +13 -572
  23. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.d.ts +2 -21
  24. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +197 -1174
  25. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.d.ts +1 -5
  26. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +11 -634
  27. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.d.ts +1 -4
  28. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +10 -380
  29. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.d.ts +3 -3
  30. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +11 -312
  31. package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +8 -8
  32. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +3 -4
  33. package/dist/src/libs/campaigns/campaignsDynamicData.js +0 -5
  34. package/dist/src/modules/v4/accounting/accounting.controller.js +1 -1
  35. package/dist/src/modules/v4/apr/apr.model.d.ts +26 -0
  36. package/dist/src/modules/v4/apr/apr.model.js +15 -1
  37. package/dist/src/modules/v4/blacklist/blacklist.controller.js +1 -1
  38. package/dist/src/modules/v4/campaign/campaign.controller.d.ts +4 -4
  39. package/dist/src/modules/v4/campaign/campaign.controller.js +14 -4
  40. package/dist/src/modules/v4/campaign/campaign.model.d.ts +50 -5
  41. package/dist/src/modules/v4/campaign/campaign.model.js +47 -13
  42. package/dist/src/modules/v4/campaign/campaign.repository.d.ts +2 -2
  43. package/dist/src/modules/v4/campaign/campaign.service.d.ts +2 -2
  44. package/dist/src/modules/v4/chain/chain.controller.d.ts +2 -2
  45. package/dist/src/modules/v4/chain/chain.controller.js +7 -2
  46. package/dist/src/modules/v4/chain/chain.model.d.ts +6 -1
  47. package/dist/src/modules/v4/chain/chain.model.js +8 -1
  48. package/dist/src/modules/v4/chain/chain.repository.js +1 -1
  49. package/dist/src/modules/v4/claims/claims.controller.js +1 -1
  50. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +4 -1
  51. package/dist/src/modules/v4/enso/enso.model.d.ts +1 -1
  52. package/dist/src/modules/v4/enso/enso.model.js +2 -1
  53. package/dist/src/modules/v4/enso/enso.service.d.ts +0 -1
  54. package/dist/src/modules/v4/enso/enso.service.js +4 -4
  55. package/dist/src/modules/v4/interaction/interaction.controller.d.ts +26 -17
  56. package/dist/src/modules/v4/interaction/interaction.controller.js +19 -28
  57. package/dist/src/modules/v4/interaction/interaction.model.d.ts +17 -5
  58. package/dist/src/modules/v4/interaction/interaction.model.js +3 -3
  59. package/dist/src/modules/v4/interaction/interaction.service.d.ts +18 -3
  60. package/dist/src/modules/v4/interaction/interaction.service.js +89 -11
  61. package/dist/src/modules/v4/kyberzap/kyberzap.model.d.ts +72 -0
  62. package/dist/src/modules/v4/kyberzap/kyberzap.model.js +79 -0
  63. package/dist/src/modules/v4/kyberzap/kyberzap.service.d.ts +15 -0
  64. package/dist/src/modules/v4/kyberzap/kyberzap.service.js +84 -0
  65. package/dist/src/modules/v4/liquidity/liquidity.controller.js +1 -1
  66. package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +1 -1
  67. package/dist/src/modules/v4/opportunity/opportunity.controller.d.ts +224 -213
  68. package/dist/src/modules/v4/opportunity/opportunity.controller.js +39 -10
  69. package/dist/src/modules/v4/opportunity/opportunity.model.d.ts +252 -22
  70. package/dist/src/modules/v4/opportunity/opportunity.model.js +58 -15
  71. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +11 -11
  72. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +12 -232
  73. package/dist/src/modules/v4/opportunity/opportunity.service.js +0 -32
  74. package/dist/src/modules/v4/price/price.controller.js +1 -1
  75. package/dist/src/modules/v4/protocol/protocol.controller.d.ts +23 -24
  76. package/dist/src/modules/v4/protocol/protocol.controller.js +15 -9
  77. package/dist/src/modules/v4/protocol/protocol.model.d.ts +13 -1
  78. package/dist/src/modules/v4/protocol/protocol.model.js +12 -8
  79. package/dist/src/modules/v4/reward/reward.controller.js +1 -1
  80. package/dist/src/modules/v4/reward/reward.model.d.ts +44 -1
  81. package/dist/src/modules/v4/reward/reward.model.js +15 -0
  82. package/dist/src/modules/v4/reward/reward.repository.d.ts +2 -2
  83. package/dist/src/modules/v4/reward/reward.service.d.ts +11 -11
  84. package/dist/src/modules/v4/reward/reward.service.js +1 -1
  85. package/dist/src/modules/v4/router.d.ts +287 -268
  86. package/dist/src/modules/v4/status/status.controller.js +2 -3
  87. package/dist/src/modules/v4/status/status.model.d.ts +12 -0
  88. package/dist/src/modules/v4/status/status.model.js +12 -0
  89. package/dist/src/modules/v4/token/token.controller.d.ts +4 -4
  90. package/dist/src/modules/v4/token/token.controller.js +1 -1
  91. package/dist/src/modules/v4/token/token.model.d.ts +12 -0
  92. package/dist/src/modules/v4/token/token.model.js +12 -0
  93. package/dist/src/modules/v4/token/token.repository.d.ts +2 -2
  94. package/dist/src/modules/v4/token/token.service.d.ts +7 -7
  95. package/dist/src/modules/v4/tvl/tvl.model.d.ts +24 -0
  96. package/dist/src/modules/v4/tvl/tvl.model.js +15 -1
  97. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.d.ts +1 -1
  98. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +9 -8
  99. package/dist/src/modules/v4/user/user.controller.d.ts +4 -4
  100. package/dist/src/modules/v4/user/user.controller.js +20 -17
  101. package/dist/src/modules/v4/user/user.model.d.ts +30 -0
  102. package/dist/src/modules/v4/user/user.model.js +27 -0
  103. package/dist/src/modules/v4/zyfi/zyfi.model.d.ts +45 -0
  104. package/dist/src/modules/v4/zyfi/zyfi.model.js +1 -0
  105. package/dist/src/modules/v4/zyfi/zyfi.service.d.ts +30 -0
  106. package/dist/src/modules/v4/zyfi/zyfi.service.js +35 -0
  107. package/dist/src/plugins/error-handling.plugin.d.ts +2 -2
  108. package/dist/src/plugins/error-handling.plugin.js +9 -3
  109. package/dist/src/plugins/logger.plugin.js +1 -20
  110. package/dist/src/routes/v1/allowances.d.ts +1 -1
  111. package/dist/src/routes/v1/allowances.js +1 -1
  112. package/dist/src/routes/v1/balances.d.ts +1 -1
  113. package/dist/src/routes/v1/balances.js +1 -1
  114. package/dist/src/routes/v1/prices.d.ts +1 -1
  115. package/dist/src/routes/v1/prices.js +1 -1
  116. package/dist/src/routes/v1/router.d.ts +102 -0
  117. package/dist/src/routes/v1/router.js +6 -0
  118. package/dist/src/routes/v1/tokens.d.ts +1 -1
  119. package/dist/src/routes/v1/tokens.js +1 -1
  120. package/dist/src/routes/v2/merkl.d.ts +5 -5
  121. package/dist/src/routes/v2/merkl.js +1 -1
  122. package/dist/src/routes/v2/router.d.ts +46 -0
  123. package/dist/src/routes/v2/router.js +3 -0
  124. package/dist/src/routes/v3/app.d.ts +1 -1
  125. package/dist/src/routes/v3/app.js +1 -1
  126. package/dist/src/routes/v3/blacklist.d.ts +1 -2479
  127. package/dist/src/routes/v3/blacklist.js +1 -1
  128. package/dist/src/routes/v3/campaignClaims.d.ts +1 -1
  129. package/dist/src/routes/v3/campaignClaims.js +1 -1
  130. package/dist/src/routes/v3/campaignReport.d.ts +1 -1
  131. package/dist/src/routes/v3/campaignReport.js +1 -1
  132. package/dist/src/routes/v3/campaignUnclaimed.d.ts +1 -1
  133. package/dist/src/routes/v3/campaignUnclaimed.js +1 -1
  134. package/dist/src/routes/v3/campaigns.d.ts +1 -2483
  135. package/dist/src/routes/v3/campaigns.js +1 -1
  136. package/dist/src/routes/v3/campaignsForMainParameter.d.ts +1 -1
  137. package/dist/src/routes/v3/campaignsForMainParameter.js +1 -1
  138. package/dist/src/routes/v3/campaignsInfo.d.ts +1 -2481
  139. package/dist/src/routes/v3/campaignsInfo.js +1 -1
  140. package/dist/src/routes/v3/campaignsRewardsReport.d.ts +1 -1
  141. package/dist/src/routes/v3/campaignsRewardsReport.js +1 -1
  142. package/dist/src/routes/v3/claims.d.ts +1 -1
  143. package/dist/src/routes/v3/claims.js +1 -1
  144. package/dist/src/routes/v3/compoundV2.d.ts +1 -1
  145. package/dist/src/routes/v3/compoundV2.js +1 -1
  146. package/dist/src/routes/v3/createCampaign.d.ts +1 -1
  147. package/dist/src/routes/v3/createCampaign.js +1 -1
  148. package/dist/src/routes/v3/dolomite.d.ts +1 -1
  149. package/dist/src/routes/v3/dolomite.js +1 -1
  150. package/dist/src/routes/v3/euler.d.ts +1 -1
  151. package/dist/src/routes/v3/euler.js +1 -1
  152. package/dist/src/routes/v3/fetch.d.ts +1 -1
  153. package/dist/src/routes/v3/fetch.js +1 -1
  154. package/dist/src/routes/v3/health.d.ts +1 -1
  155. package/dist/src/routes/v3/health.js +1 -1
  156. package/dist/src/routes/v3/lostyield.d.ts +1 -1
  157. package/dist/src/routes/v3/lostyield.js +1 -1
  158. package/dist/src/routes/v3/merkl.d.ts +1 -1
  159. package/dist/src/routes/v3/merkl.js +1 -1
  160. package/dist/src/routes/v3/morphoMarkets.d.ts +1 -1
  161. package/dist/src/routes/v3/morphoMarkets.js +1 -1
  162. package/dist/src/routes/v3/morphoVaults.d.ts +1 -1
  163. package/dist/src/routes/v3/morphoVaults.js +1 -1
  164. package/dist/src/routes/v3/multiChainPositions.d.ts +1 -2480
  165. package/dist/src/routes/v3/multiChainPositions.js +1 -1
  166. package/dist/src/routes/v3/opportunity.d.ts +1 -2483
  167. package/dist/src/routes/v3/opportunity.js +1 -1
  168. package/dist/src/routes/v3/overview.d.ts +1 -1
  169. package/dist/src/routes/v3/overview.js +1 -1
  170. package/dist/src/routes/v3/parse.d.ts +1 -1
  171. package/dist/src/routes/v3/parse.js +1 -1
  172. package/dist/src/routes/v3/payload.d.ts +1 -1
  173. package/dist/src/routes/v3/payload.js +1 -1
  174. package/dist/src/routes/v3/poolInfo.js +1 -1
  175. package/dist/src/routes/v3/positions.d.ts +1 -2479
  176. package/dist/src/routes/v3/positions.js +1 -1
  177. package/dist/src/routes/v3/radiant.d.ts +1 -1
  178. package/dist/src/routes/v3/radiant.js +1 -1
  179. package/dist/src/routes/v3/recipients.d.ts +1 -1
  180. package/dist/src/routes/v3/recipients.js +1 -1
  181. package/dist/src/routes/v3/rewards.d.ts +1 -2508
  182. package/dist/src/routes/v3/rewards.js +1 -1
  183. package/dist/src/routes/v3/rewardsReport.d.ts +1 -1
  184. package/dist/src/routes/v3/rewardsReport.js +1 -1
  185. package/dist/src/routes/v3/router.d.ts +1 -0
  186. package/dist/src/routes/v3/router.js +74 -0
  187. package/dist/src/routes/v3/silo.d.ts +1 -1
  188. package/dist/src/routes/v3/silo.js +1 -1
  189. package/dist/src/routes/v3/token.d.ts +1 -1
  190. package/dist/src/routes/v3/token.js +1 -1
  191. package/dist/src/routes/v3/tokenUnclaimed.d.ts +1 -1
  192. package/dist/src/routes/v3/tokenUnclaimed.js +1 -1
  193. package/dist/src/routes/v3/updates.d.ts +1 -2483
  194. package/dist/src/routes/v3/updates.js +1 -1
  195. package/dist/src/routes/v3/userRewards.d.ts +1 -2499
  196. package/dist/src/routes/v3/userRewards.js +1 -1
  197. package/dist/src/utils/decodeCalls.js +12 -1
  198. package/dist/src/utils/encodeCalls.js +26 -3
  199. package/dist/src/utils/generateCardName.js +2 -0
  200. package/dist/tsconfig.package.tsbuildinfo +1 -1
  201. package/package.json +2 -3
  202. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.d.ts +0 -3
  203. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +0 -155
  204. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.d.ts +0 -4
  205. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +0 -24
  206. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.d.ts +0 -4
  207. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +0 -230
  208. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.d.ts +0 -3
  209. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +0 -22
  210. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.d.ts +0 -3
  211. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +0 -22
  212. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.d.ts +0 -4
  213. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +0 -22
  214. package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.d.ts +0 -3
  215. package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +0 -75
@@ -1,1209 +1,232 @@
1
- import { Interface } from "@ethersproject/abi";
2
- import { ERC20Interface, UniswapV2PoolInterface } from "@sdk";
1
+ import { decodeCall } from "../../../../utils/decodeCalls";
3
2
  import { enzymeFundValueCalculatorRouterMapping, getTypeFromFactoryAddress } from "./helpers/factoryFinder";
4
3
  import { tokenType } from "./helpers/tokenType";
5
- import { balancerPoolInterface } from "./subtypesRound2";
6
- const factoryABI = [
7
- {
8
- constant: true,
9
- inputs: [],
10
- name: "factory",
11
- outputs: [
12
- {
13
- name: "",
14
- type: "address",
15
- },
16
- ],
17
- payable: false,
18
- stateMutability: "view",
19
- type: "function",
20
- },
21
- ];
22
- const balancerGaugeABI = [
23
- {
24
- constant: true,
25
- inputs: [],
26
- name: "lp_token",
27
- outputs: [
28
- {
29
- name: "",
30
- type: "address",
31
- },
32
- ],
33
- payable: false,
34
- stateMutability: "view",
35
- type: "function",
36
- },
37
- ];
38
- const OneInchStakingContract = [
39
- {
40
- constant: true,
41
- inputs: [],
42
- name: "stakingToken",
43
- outputs: [
44
- {
45
- name: "",
46
- type: "address",
47
- },
48
- ],
49
- payable: false,
50
- stateMutability: "view",
51
- type: "function",
52
- },
53
- ];
54
- const compoundABI = [
55
- {
56
- constant: true,
57
- inputs: [],
58
- name: "baseToken",
59
- outputs: [
60
- {
61
- name: "",
62
- type: "address",
63
- },
64
- ],
65
- payable: false,
66
- stateMutability: "view",
67
- type: "function",
68
- },
69
- {
70
- inputs: [],
71
- name: "totalBorrow",
72
- outputs: [
73
- {
74
- name: "",
75
- type: "uint256",
76
- },
77
- ],
78
- payable: false,
79
- stateMutability: "view",
80
- type: "function",
81
- },
82
- ];
83
- const radiantABI = [
84
- {
85
- constant: true,
86
- inputs: [],
87
- name: "UNDERLYING_ASSET_ADDRESS",
88
- outputs: [
89
- {
90
- name: "",
91
- type: "address",
92
- },
93
- ],
94
- payable: false,
95
- stateMutability: "view",
96
- type: "function",
97
- },
98
- {
99
- inputs: [],
100
- name: "getAssetPrice",
101
- outputs: [
102
- {
103
- name: "",
104
- type: "uint256",
105
- },
106
- ],
107
- payable: false,
108
- stateMutability: "view",
109
- type: "function",
110
- },
111
- ];
112
- const ionicABI = [
113
- {
114
- constant: true,
115
- inputs: [],
116
- name: "exchangeRateCurrent",
117
- outputs: [
118
- {
119
- name: "",
120
- type: "uint256",
121
- },
122
- ],
123
- payable: false,
124
- stateMutability: "view",
125
- type: "function",
126
- },
127
- {
128
- inputs: [],
129
- name: "underlying",
130
- outputs: [
131
- {
132
- name: "",
133
- type: "address",
134
- },
135
- ],
136
- payable: false,
137
- stateMutability: "view",
138
- type: "function",
139
- },
140
- ];
141
- const layerBankABI = [
142
- {
143
- constant: true,
144
- inputs: [],
145
- name: "exchangeRate",
146
- outputs: [
147
- {
148
- name: "",
149
- type: "uint256",
150
- },
151
- ],
152
- payable: false,
153
- stateMutability: "view",
154
- type: "function",
155
- },
156
- {
157
- inputs: [],
158
- name: "underlying",
159
- outputs: [
160
- {
161
- name: "",
162
- type: "address",
163
- },
164
- ],
165
- payable: false,
166
- stateMutability: "view",
167
- type: "function",
168
- },
169
- ];
170
- const metamorphoABI = [
171
- {
172
- inputs: [],
173
- name: "MORPHO",
174
- outputs: [
175
- {
176
- name: "",
177
- type: "address",
178
- },
179
- ],
180
- payable: false,
181
- stateMutability: "view",
182
- type: "function",
183
- },
184
- {
185
- inputs: [],
186
- name: "asset",
187
- outputs: [
188
- {
189
- name: "",
190
- type: "address",
191
- },
192
- ],
193
- payable: false,
194
- stateMutability: "view",
195
- type: "function",
196
- },
197
- ];
198
- const moonwellABI = [
199
- {
200
- constant: true,
201
- inputs: [],
202
- name: "exchangeRateStored",
203
- outputs: [
204
- {
205
- name: "",
206
- type: "uint256",
207
- },
208
- ],
209
- payable: false,
210
- stateMutability: "view",
211
- type: "function",
212
- },
213
- {
214
- inputs: [],
215
- name: "underlying",
216
- outputs: [
217
- {
218
- name: "",
219
- type: "address",
220
- },
221
- ],
222
- payable: false,
223
- stateMutability: "view",
224
- type: "function",
225
- },
226
- ];
227
- const aaveABI = [
228
- {
229
- inputs: [],
230
- name: "UNDERLYING_ASSET_ADDRESS",
231
- outputs: [
232
- {
233
- name: "",
234
- type: "address",
235
- },
236
- ],
237
- payable: false,
238
- stateMutability: "view",
239
- type: "function",
240
- },
241
- ];
242
- const fraxlendABI = [
243
- {
244
- inputs: [],
245
- name: "asset",
246
- outputs: [
247
- {
248
- name: "",
249
- type: "address",
250
- },
251
- ],
252
- payable: false,
253
- stateMutability: "view",
254
- type: "function",
255
- },
256
- {
257
- inputs: [],
258
- name: "pricePerShare",
259
- outputs: [
260
- {
261
- name: "",
262
- type: "uint256",
263
- },
264
- ],
265
- payable: false,
266
- stateMutability: "view",
267
- type: "function",
268
- },
269
- ];
270
- const curveABI = [
271
- {
272
- inputs: [],
273
- name: "lp_price",
274
- outputs: [
275
- {
276
- name: "",
277
- type: "uint256",
278
- },
279
- ],
280
- payable: false,
281
- stateMutability: "view",
282
- type: "function",
283
- },
284
- {
285
- inputs: [
286
- {
287
- name: "arg0",
288
- type: "uint256",
289
- },
290
- ],
291
- name: "coins",
292
- outputs: [
293
- {
294
- name: "",
295
- type: "address",
296
- },
297
- ],
298
- payable: false,
299
- stateMutability: "view",
300
- type: "function",
301
- },
302
- {
303
- inputs: [],
304
- name: "get_virtual_price",
305
- outputs: [
306
- {
307
- name: "",
308
- type: "uint256",
309
- },
310
- ],
311
- payable: false,
312
- stateMutability: "view",
313
- type: "function",
314
- },
315
- ];
316
- const sturdyABI = [
317
- {
318
- inputs: [],
319
- name: "collateralContract",
320
- outputs: [
321
- {
322
- name: "",
323
- type: "address",
324
- },
325
- ],
326
- payable: false,
327
- stateMutability: "view",
328
- type: "function",
329
- },
330
- ];
331
- const torosABI = [
332
- {
333
- inputs: [],
334
- name: "tokenPrice",
335
- outputs: [
336
- {
337
- internalType: "uint256",
338
- name: "price",
339
- type: "uint256",
340
- },
341
- ],
342
- stateMutability: "view",
343
- type: "function",
344
- },
345
- ];
346
- const auraABI = [
347
- {
348
- inputs: [],
349
- name: "asset",
350
- outputs: [
351
- {
352
- name: "",
353
- type: "address",
354
- },
355
- ],
356
- payable: false,
357
- stateMutability: "view",
358
- type: "function",
359
- },
360
- {
361
- inputs: [],
362
- name: "operator",
363
- outputs: [
364
- {
365
- name: "",
366
- type: "address",
367
- },
368
- ],
369
- payable: false,
370
- stateMutability: "view",
371
- type: "function",
372
- },
373
- {
374
- inputs: [],
375
- name: "pid",
376
- outputs: [
377
- {
378
- name: "",
379
- type: "uint256",
380
- },
381
- ],
382
- payable: false,
383
- stateMutability: "view",
384
- type: "function",
385
- },
386
- ];
387
- const fluidABI = [
388
- {
389
- inputs: [],
390
- name: "asset",
391
- outputs: [
392
- {
393
- internalType: "address",
394
- name: "",
395
- type: "address",
396
- },
397
- ],
398
- stateMutability: "view",
399
- type: "function",
400
- },
401
- {
402
- inputs: [
403
- {
404
- internalType: "uint256",
405
- name: "shares_",
406
- type: "uint256",
407
- },
408
- ],
409
- name: "convertToAssets",
410
- outputs: [
411
- {
412
- internalType: "uint256",
413
- name: "",
414
- type: "uint256",
415
- },
416
- ],
417
- stateMutability: "view",
418
- type: "function",
419
- },
420
- ];
421
- const enzymeABI = [
422
- {
423
- inputs: [],
424
- name: "getCreator",
425
- outputs: [
426
- {
427
- internalType: "address",
428
- name: "",
429
- type: "address",
430
- },
431
- ],
432
- stateMutability: "view",
433
- type: "function",
434
- },
435
- {
436
- inputs: [
437
- {
438
- internalType: "address",
439
- name: "_vaultProxy",
440
- type: "address",
441
- },
442
- ],
443
- name: "calcNetShareValue",
444
- outputs: [
445
- {
446
- internalType: "address",
447
- name: "denominationAsset_",
448
- type: "address",
449
- },
450
- {
451
- internalType: "uint256",
452
- name: "netShareValue_",
453
- type: "uint256",
454
- },
455
- ],
456
- stateMutability: "nonpayable",
457
- type: "function",
458
- },
459
- ];
460
- const eulerABI = [
461
- {
462
- inputs: [],
463
- name: "asset",
464
- outputs: [
465
- {
466
- name: "",
467
- type: "address",
468
- },
469
- ],
470
- payable: false,
471
- stateMutability: "view",
472
- type: "function",
473
- },
474
- {
475
- inputs: [],
476
- name: "eVault",
477
- outputs: [
478
- {
479
- name: "",
480
- type: "address",
481
- },
482
- ],
483
- payable: false,
484
- stateMutability: "view",
485
- type: "function",
486
- },
487
- {
488
- inputs: [],
489
- name: "totalBorrows",
490
- outputs: [
491
- {
492
- name: "",
493
- type: "uint256",
494
- },
495
- ],
496
- payable: false,
497
- stateMutability: "view",
498
- type: "function",
499
- },
500
- {
501
- inputs: [],
502
- name: "totalAssets",
503
- outputs: [
504
- {
505
- name: "",
506
- type: "uint256",
507
- },
508
- ],
509
- payable: false,
510
- stateMutability: "view",
511
- type: "function",
512
- },
513
- ];
514
- const beefyABI = [
515
- {
516
- inputs: [],
517
- name: "getPricePerFullShare",
518
- outputs: [
519
- {
520
- internalType: "uint256",
521
- name: "price",
522
- type: "uint256",
523
- },
524
- ],
525
- stateMutability: "view",
526
- type: "function",
527
- },
528
- {
529
- inputs: [],
530
- name: "want",
531
- outputs: [
532
- {
533
- name: "",
534
- type: "address",
535
- },
536
- ],
537
- stateMutability: "view",
538
- type: "function",
539
- },
540
- ];
541
- export const factoryInterface = new Interface(factoryABI);
542
- export const balancerGaugeInterface = new Interface(balancerGaugeABI);
543
- export const OneInchStakingInterface = new Interface(OneInchStakingContract);
544
- export const compoundInterface = new Interface(compoundABI);
545
- export const radiantInterface = new Interface(radiantABI);
546
- export const ionicInterface = new Interface(ionicABI);
547
- export const layerBankInterface = new Interface(layerBankABI);
548
- export const metamorphoInterface = new Interface(metamorphoABI);
549
- export const moonwellInterface = new Interface(moonwellABI);
550
- export const aaveInterface = new Interface(aaveABI);
551
- export const fraxlendInterface = new Interface(fraxlendABI);
552
- export const curveInterface = new Interface(curveABI);
553
- export const sturdyInterface = new Interface(sturdyABI);
554
- export const torosInterface = new Interface(torosABI);
555
- export const auraInterface = new Interface(auraABI);
556
- export const fluidInterface = new Interface(fluidABI);
557
- export const enzymeInterface = new Interface(enzymeABI);
558
- export const eulerInterface = new Interface(eulerABI);
559
- export const beefyInterface = new Interface(beefyABI);
560
- export function getTokenTypeRound1(calls, targetToken, index) {
4
+ import { processorMapping } from "./processor/processorMapping";
5
+ function satisfiesNameConditions(name, type) {
6
+ const lowerCaseName = name.toLowerCase();
7
+ switch (type) {
8
+ case tokenType.fraxlend:
9
+ return lowerCaseName.includes("fraxlend interest bearing");
10
+ case tokenType.sturdy_aggregator:
11
+ return lowerCaseName.includes("aggregator");
12
+ case tokenType.sturdy_silo:
13
+ return lowerCaseName.includes("sturdy interest bearing");
14
+ case tokenType.aura:
15
+ return lowerCaseName.includes("aura deposit vault");
16
+ case tokenType.poolside:
17
+ return lowerCaseName.includes("poolside");
18
+ case tokenType.balancerGauge:
19
+ return lowerCaseName.includes("balancer") && !lowerCaseName.includes("aura deposit vault");
20
+ case tokenType.gearbox:
21
+ return lowerCaseName.includes("farming of");
22
+ case tokenType.euler_borrow:
23
+ return lowerCaseName.startsWith("debt token of evk vault");
24
+ case tokenType.euler_lend:
25
+ return lowerCaseName.includes("evk vault");
26
+ case tokenType.fluid:
27
+ return lowerCaseName.startsWith("fluid");
28
+ case tokenType.filament:
29
+ return lowerCaseName.startsWith("filament");
30
+ case tokenType.radiant_lend:
31
+ return lowerCaseName.includes("radiant interest");
32
+ case tokenType.radiant_borrow:
33
+ return lowerCaseName.includes("radiant variable debt");
34
+ case tokenType.ionic:
35
+ return lowerCaseName.includes("ionic");
36
+ case tokenType.rfx:
37
+ return lowerCaseName.includes("rfx");
38
+ case tokenType.layerbank:
39
+ return lowerCaseName.includes("layerbank");
40
+ case tokenType.moonwell:
41
+ return lowerCaseName.includes("moonwell");
42
+ case tokenType.curve_2:
43
+ return (lowerCaseName === "crvusd/frax" ||
44
+ lowerCaseName === "ezeth/wfrxeth" ||
45
+ lowerCaseName === "pufeth/wsteth" ||
46
+ lowerCaseName === "hai/lusd");
47
+ case tokenType.silostaking:
48
+ return lowerCaseName === "isei";
49
+ case tokenType.beefy:
50
+ return lowerCaseName.startsWith("moo velo");
51
+ case tokenType.uniswapv2:
52
+ return lowerCaseName.includes("uniswap");
53
+ case tokenType.fenix:
54
+ return lowerCaseName.includes("stablev1 amm");
55
+ case tokenType.ra:
56
+ return lowerCaseName.includes("volatile pair -") || lowerCaseName.includes("correlated pair -");
57
+ case tokenType.syncswap:
58
+ return lowerCaseName.includes("syncswap");
59
+ case tokenType.aave_lending:
60
+ return lowerCaseName.includes("aave");
61
+ case tokenType.aave_borrowing:
62
+ return lowerCaseName.includes("aave") && lowerCaseName.includes("debt");
63
+ case tokenType.yei_borrowing:
64
+ return ((lowerCaseName.startsWith("yei") || (lowerCaseName.includes("aave") && lowerCaseName.includes("yei"))) &&
65
+ lowerCaseName.includes("debt"));
66
+ case tokenType.ironclad_borrowing:
67
+ return ((lowerCaseName.startsWith("ironclad") ||
68
+ (lowerCaseName.includes("aave") && lowerCaseName.includes("ironclad"))) &&
69
+ lowerCaseName.includes("debt") &&
70
+ name.toLowerCase() !== "ironclad token");
71
+ case tokenType.zerolend_borrowing:
72
+ return lowerCaseName.includes("zerolend") && lowerCaseName.includes("debt");
73
+ case tokenType.yei_lending:
74
+ return lowerCaseName.startsWith("yei") || (lowerCaseName.includes("aave") && lowerCaseName.includes("yei"));
75
+ case tokenType.ironclad_lending:
76
+ return ((lowerCaseName.startsWith("ironclad") ||
77
+ (lowerCaseName.includes("aave") && lowerCaseName.includes("ironclad"))) &&
78
+ name.toLowerCase() !== "ironclad token");
79
+ case tokenType.zerolend_lending:
80
+ return lowerCaseName.includes("zerolend");
81
+ case tokenType.compound:
82
+ return lowerCaseName.includes("compound");
83
+ case tokenType.ironcladStaking:
84
+ return lowerCaseName === "ironclad token";
85
+ case tokenType.woofi:
86
+ return lowerCaseName.includes("woofi");
87
+ case tokenType.maverickBoostedPosition:
88
+ return lowerCaseName.includes("maverick");
89
+ case tokenType.zkSwapThreePool:
90
+ return lowerCaseName.includes("zf");
91
+ case tokenType.maha:
92
+ return lowerCaseName.includes("staked") && lowerCaseName.includes("maha");
93
+ case tokenType.tempest:
94
+ return lowerCaseName.startsWith("ts");
95
+ case tokenType.tempestStaking:
96
+ return lowerCaseName.startsWith("tempest");
97
+ case tokenType.holdstation:
98
+ return lowerCaseName.startsWith("hs");
99
+ case tokenType.noLinkVault:
100
+ return lowerCaseName.startsWith("unifi eth");
101
+ default:
102
+ return false;
103
+ }
104
+ }
105
+ function generateResult(type, name, targetToken, typeInfo) {
106
+ const ProcessorClass = processorMapping[type];
107
+ if (!ProcessorClass) {
108
+ throw new Error(`Processor not found for key: ${type}`);
109
+ }
110
+ const processorObject = new ProcessorClass();
111
+ typeInfo = {
112
+ ...typeInfo,
113
+ name: name,
114
+ tokenAddress: targetToken,
115
+ totalSupply: 0,
116
+ blacklistedSupply: 0,
117
+ };
118
+ return processorObject.computeRound1(type, typeInfo);
119
+ }
120
+ function processNamingConditions(type, name, targetToken) {
121
+ if (satisfiesNameConditions(name, type)) {
122
+ return generateResult(type, name, targetToken, {});
123
+ }
124
+ }
125
+ function processNamingConditionsInOrder(types, name, targetToken) {
126
+ for (const type of types) {
127
+ const result = processNamingConditions(type, name, targetToken);
128
+ if (result)
129
+ return result;
130
+ }
131
+ }
132
+ function parseForFactory(calls, index, targetToken) {
561
133
  try {
562
- const factory = factoryInterface.decodeFunctionResult("factory", calls[index].returnData)[0];
563
- const name = ERC20Interface.decodeFunctionResult("name", calls[index + 2].returnData)[0];
134
+ const factory = decodeCall(calls, index, "factory");
135
+ const name = decodeCall(calls, index + 2, "name");
564
136
  const type = getTypeFromFactoryAddress(factory);
565
- if (type === tokenType.aerodrome ||
566
- type === tokenType.velodrome ||
567
- type === tokenType.dragonswap ||
568
- type === tokenType.akron) {
569
- return {
570
- type: type,
571
- calls: [
572
- {
573
- allowFailure: true,
574
- callData: UniswapV2PoolInterface.encodeFunctionData("token0"),
575
- target: targetToken,
576
- },
577
- {
578
- allowFailure: true,
579
- callData: UniswapV2PoolInterface.encodeFunctionData("token1"),
580
- target: targetToken,
581
- },
582
- ],
583
- typeInfo: {
584
- name: name,
585
- tokenAddress: targetToken,
586
- },
587
- };
588
- }
589
- if (type === tokenType.koi ||
590
- type === tokenType.baseswap ||
591
- type === tokenType.fenix ||
592
- type === tokenType.zkswap) {
593
- let protocol = "Koi V2";
594
- if (type === tokenType.baseswap) {
595
- protocol = "BaseSwap V2";
596
- }
597
- else if (type === tokenType.fenix) {
598
- protocol = "Fenix V2";
599
- }
600
- else if (type === tokenType.zkswap) {
601
- protocol = "ZKSwap";
602
- }
603
- return {
604
- type: tokenType.uniswapv2,
605
- calls: [
606
- {
607
- allowFailure: true,
608
- callData: UniswapV2PoolInterface.encodeFunctionData("token0"),
609
- target: targetToken,
610
- },
611
- {
612
- allowFailure: true,
613
- callData: UniswapV2PoolInterface.encodeFunctionData("token1"),
614
- target: targetToken,
615
- },
616
- ],
617
- typeInfo: {
618
- name: name,
619
- tokenAddress: targetToken,
620
- protocol: protocol,
621
- },
622
- };
623
- }
624
- if (type === tokenType.curve) {
625
- return {
626
- type: type,
627
- calls: [
628
- {
629
- allowFailure: true,
630
- callData: curveInterface.encodeFunctionData("lp_price"),
631
- target: targetToken,
632
- },
633
- {
634
- allowFailure: true,
635
- callData: curveInterface.encodeFunctionData("coins", [0]),
636
- target: targetToken,
637
- },
638
- {
639
- allowFailure: true,
640
- callData: curveInterface.encodeFunctionData("coins", [1]),
641
- target: targetToken,
642
- },
643
- {
644
- allowFailure: true,
645
- callData: curveInterface.encodeFunctionData("coins", [2]),
646
- target: targetToken,
647
- },
648
- ],
649
- typeInfo: {
650
- name: name,
651
- tokenAddress: targetToken,
652
- },
653
- };
654
- }
655
- // https://explorer.mode.network/address/0x34cf9BF641bd5f34197060A3f3478a1f97f78f0a?tab=read_contract
656
- if (type === tokenType.splice) {
657
- return {
658
- type: type,
659
- calls: [],
660
- typeInfo: {
661
- name: name,
662
- tokenAddress: targetToken,
663
- },
664
- };
665
- }
666
- // Double proxy so explorer link is useless
667
- // https://basescan.org/address/0xc1e02884af4a283ca25ab63c45360d220d69da52
668
- // ABI here: https://github.com/dhedge/V2-Public/blob/master/abi/PoolLogic.json
669
- if (type === tokenType.toros) {
670
- return {
671
- type: type,
672
- calls: [],
673
- typeInfo: {
674
- name: name,
675
- tokenAddress: targetToken,
676
- },
677
- };
678
- }
137
+ if (type !== tokenType.unknown)
138
+ return generateResult(type, name, targetToken, { factory });
679
139
  }
680
140
  catch (e) {
681
141
  // No factory on this token
682
142
  }
143
+ }
144
+ function parseForEnzyme(calls, index, targetToken) {
683
145
  // Enzyme check
684
146
  try {
685
- const dispatcher = enzymeInterface.decodeFunctionResult("getCreator", calls[index + 4].returnData)[0];
686
- const name = ERC20Interface.decodeFunctionResult("name", calls[index + 2].returnData)[0];
147
+ const dispatcher = decodeCall(calls, index + 4, "getCreator");
148
+ const name = decodeCall(calls, index + 2, "name");
687
149
  const type = getTypeFromFactoryAddress(dispatcher);
688
150
  const fundValueCalculator = enzymeFundValueCalculatorRouterMapping[dispatcher];
151
+ const typeInfo = {
152
+ fundValueCalculator,
153
+ dispatcher,
154
+ };
689
155
  if (type === tokenType.enzyme) {
690
- return {
691
- type: type,
692
- calls: [
693
- {
694
- allowFailure: true,
695
- callData: enzymeInterface.encodeFunctionData("calcNetShareValue", [targetToken]),
696
- target: fundValueCalculator,
697
- },
698
- ],
699
- typeInfo: {
700
- name: name,
701
- tokenAddress: targetToken,
702
- factory: dispatcher,
703
- },
704
- };
156
+ return generateResult(type, name, targetToken, typeInfo);
705
157
  }
706
158
  }
707
159
  catch (e) {
708
160
  // No factory on this token
709
161
  }
162
+ }
163
+ function parseForMetamorpho(calls, index, targetToken) {
710
164
  // MetaMorpho check
711
165
  try {
712
- metamorphoInterface.decodeFunctionResult("MORPHO", calls[index + 1].returnData)[0];
713
- const name = ERC20Interface.decodeFunctionResult("name", calls[index + 2].returnData)[0];
714
- return {
715
- type: tokenType.metamorpho,
716
- calls: [
717
- {
718
- allowFailure: true,
719
- callData: metamorphoInterface.encodeFunctionData("asset"),
720
- target: targetToken,
721
- },
722
- ],
723
- typeInfo: {
724
- name: name,
725
- tokenAddress: targetToken,
726
- },
727
- };
166
+ decodeCall(calls, index + 1, "MORPHO");
167
+ const name = decodeCall(calls, index + 2, "name");
168
+ return generateResult(tokenType.metamorpho, name, targetToken, {});
728
169
  }
729
170
  catch (e) {
730
171
  // Not a metamorpho token
731
172
  }
732
- let name;
733
- try {
734
- name = ERC20Interface.decodeFunctionResult("name", calls[index + 2].returnData)[0];
735
- }
736
- catch (e) {
737
- return {
738
- type: tokenType.unknown,
739
- calls: [],
740
- typeInfo: {
741
- name: "Unknown",
742
- tokenAddress: targetToken,
743
- },
744
- };
745
- }
173
+ }
174
+ function parseForBalancer(calls, index, targetToken, name) {
746
175
  // Check for balancer pools
747
176
  try {
748
- const poolId = balancerPoolInterface.decodeFunctionResult("getPoolId", calls[index + 3].returnData)[0];
749
- return {
750
- type: tokenType.balancerPool,
751
- calls: [],
752
- typeInfo: {
753
- name: name,
754
- tokenAddress: targetToken,
755
- },
756
- };
177
+ decodeCall(calls, index + 3, "getPoolId");
178
+ return generateResult(tokenType.balancerPool, name, targetToken, {});
757
179
  }
758
180
  catch (e) {
759
181
  // Not a balancer pool
760
182
  }
761
- // https://arbiscan.io/address/0xc5a583c532c519196cc2bea060f387780aecc61f
762
- if (name.toLowerCase().includes("aura deposit vault")) {
763
- return {
764
- type: tokenType.aura,
765
- calls: [
766
- // Asset is the balancer pool lp token (not the gauge token)
767
- {
768
- allowFailure: true,
769
- callData: auraInterface.encodeFunctionData("asset"),
770
- target: targetToken,
771
- },
772
- {
773
- allowFailure: true,
774
- callData: auraInterface.encodeFunctionData("operator"),
775
- target: targetToken,
776
- },
777
- {
778
- allowFailure: true,
779
- callData: auraInterface.encodeFunctionData("pid"),
780
- target: targetToken,
781
- },
782
- ],
783
- typeInfo: {
784
- name: name,
785
- tokenAddress: targetToken,
786
- },
787
- };
788
- }
789
- // https://etherscan.io/address/0xb0ac070ae1f9BC564c1F4EA23bD2Ed0aF1B6BA5A#readContract
790
- if (name.toLowerCase().includes("poolside")) {
791
- return {
792
- type: tokenType.poolside,
793
- calls: [
794
- {
795
- allowFailure: true,
796
- callData: UniswapV2PoolInterface.encodeFunctionData("token0"),
797
- target: targetToken,
798
- },
799
- {
800
- allowFailure: true,
801
- callData: UniswapV2PoolInterface.encodeFunctionData("token1"),
802
- target: targetToken,
803
- },
804
- ],
805
- typeInfo: {
806
- name: name,
807
- tokenAddress: targetToken,
808
- },
809
- };
810
- }
811
- // https://arbiscan.io/address/0xe882f63f74e5966c9d2424b745ad6655d24d1336#readContract
812
- if (name.toLowerCase().includes("balancer") && !name.toLowerCase().includes("aura deposit vault")) {
813
- // For balancer pools we need to fetch the gyroscope pool address by calling the lp_token function
814
- return {
815
- type: tokenType.balancerGauge,
816
- calls: [
817
- {
818
- allowFailure: true,
819
- callData: balancerGaugeInterface.encodeFunctionData("lp_token"),
820
- target: targetToken,
821
- },
822
- ],
823
- typeInfo: {
824
- name: name,
825
- tokenAddress: targetToken,
826
- },
827
- };
828
- }
829
- // https://etherscan.io/address/0x9ef444a6d7f4a5adcd68fd5329aa5240c90e14d2#readContract
830
- if (name.toLowerCase().includes("farming of")) {
831
- // 1inch reward staking contract
832
- return {
833
- type: tokenType.gearbox,
834
- calls: [
835
- {
836
- allowFailure: true,
837
- callData: OneInchStakingInterface.encodeFunctionData("stakingToken"),
838
- target: targetToken,
839
- },
840
- ],
841
- typeInfo: {
842
- name: name,
843
- tokenAddress: targetToken,
844
- },
845
- };
846
- }
847
- // https://etherscan.io/address/0xb0050BF47733b7B426b355C358C4700Aa7Ea473A#readContract
848
- if (name.toLowerCase().includes("evk vault")) {
849
- if (name.toLowerCase().startsWith("debt token of evk vault")) {
850
- return {
851
- type: tokenType.euler_borrow,
852
- calls: [
853
- {
854
- allowFailure: true,
855
- callData: eulerInterface.encodeFunctionData("eVault"),
856
- target: targetToken,
857
- },
858
- ],
859
- typeInfo: {
860
- name: name,
861
- tokenAddress: targetToken,
862
- },
863
- };
864
- }
865
- return {
866
- type: tokenType.euler_lend,
867
- calls: [],
868
- typeInfo: {
869
- name: name,
870
- tokenAddress: targetToken,
871
- },
872
- };
873
- }
874
- // https://etherscan.io/address/0x9fb7b4477576fe5b32be4c1843afb1e55f251b33
875
- if (name.toLowerCase().startsWith("fluid") || name.toLowerCase().startsWith("filament")) {
876
- let protocol = "Fluid";
877
- if (name.toLowerCase().startsWith("filament")) {
878
- protocol = "Filament";
879
- }
880
- return {
881
- type: tokenType.fluid,
882
- calls: [
883
- {
884
- allowFailure: true,
885
- callData: fluidInterface.encodeFunctionData("asset"),
886
- target: targetToken,
887
- },
888
- ],
889
- typeInfo: {
890
- name: name,
891
- tokenAddress: targetToken,
892
- protocol: protocol,
893
- },
894
- };
895
- }
896
- // https://arbiscan.io/address/0x9c4ec768c28520b50860ea7a15bd7213a9ff58bf#readProxyContract
897
- if (name.toLowerCase().includes("compound")) {
898
- return {
899
- type: tokenType.compound,
900
- calls: [
901
- {
902
- allowFailure: true,
903
- callData: compoundInterface.encodeFunctionData("baseToken"),
904
- target: targetToken,
905
- },
906
- ],
907
- typeInfo: {
908
- name: name,
909
- tokenAddress: targetToken,
910
- },
911
- };
912
- }
913
- // https://arbiscan.io/address/0xb11A56DA177c5532D5E29cC8363d145bD0822c81#readProxyContract
914
- if (name.toLowerCase().includes("radiant interest")) {
915
- return {
916
- type: tokenType.radiant_lend,
917
- calls: [
918
- {
919
- allowFailure: true,
920
- callData: radiantInterface.encodeFunctionData("UNDERLYING_ASSET_ADDRESS"),
921
- target: targetToken,
922
- },
923
- {
924
- allowFailure: true,
925
- callData: radiantInterface.encodeFunctionData("getAssetPrice"),
926
- target: targetToken,
927
- },
928
- ],
929
- typeInfo: {
930
- name: name,
931
- tokenAddress: targetToken,
932
- },
933
- };
934
- }
935
- // https://arbiscan.io/address/0x2D7d510Dc21F5384C9efd30811D0366F8b4269DF#readProxyContract
936
- if (name.toLowerCase().includes("radiant variable debt")) {
937
- return {
938
- type: tokenType.radiant_borrow,
939
- calls: [
940
- {
941
- allowFailure: true,
942
- callData: radiantInterface.encodeFunctionData("UNDERLYING_ASSET_ADDRESS"),
943
- target: targetToken,
944
- },
945
- {
946
- allowFailure: true,
947
- callData: radiantInterface.encodeFunctionData("getAssetPrice"),
948
- target: targetToken,
949
- },
950
- ],
951
- typeInfo: {
952
- name: name,
953
- tokenAddress: targetToken,
954
- },
955
- };
956
- }
957
- // https://explorer.mode.network/address/0x71ef7EDa2Be775E5A7aa8afD02C45F059833e9d2
958
- if (name.toLowerCase().includes("ionic")) {
959
- return {
960
- type: tokenType.ionic,
961
- calls: [
962
- {
963
- allowFailure: true,
964
- callData: ionicInterface.encodeFunctionData("underlying"),
965
- target: targetToken,
966
- },
967
- {
968
- allowFailure: true,
969
- callData: ionicInterface.encodeFunctionData("exchangeRateCurrent"),
970
- target: targetToken,
971
- },
972
- ],
973
- typeInfo: {
974
- name: name,
975
- tokenAddress: targetToken,
976
- },
977
- };
978
- }
979
- // https://explorer.mode.network/address/0xe855B8018C22A05F84724e93693caf166912aDD5?tab=read_contract
980
- if (name.toLowerCase().includes("layerbank")) {
981
- return {
982
- type: tokenType.layerbank,
983
- calls: [
984
- {
985
- allowFailure: true,
986
- callData: layerBankInterface.encodeFunctionData("underlying"),
987
- target: targetToken,
988
- },
989
- {
990
- allowFailure: true,
991
- callData: layerBankInterface.encodeFunctionData("exchangeRate"),
992
- target: targetToken,
993
- },
994
- ],
995
- typeInfo: {
996
- name: name,
997
- tokenAddress: targetToken,
998
- },
999
- };
1000
- }
1001
- // https://basescan.org/address/0xedc817a28e8b93b03976fbd4a3ddbc9f7d176c22#readContract
1002
- if (name.toLowerCase().includes("moonwell")) {
1003
- return {
1004
- type: tokenType.moonwell,
1005
- calls: [
1006
- {
1007
- allowFailure: true,
1008
- callData: moonwellInterface.encodeFunctionData("underlying"),
1009
- target: targetToken,
1010
- },
1011
- {
1012
- allowFailure: true,
1013
- callData: moonwellInterface.encodeFunctionData("exchangeRateStored"),
1014
- target: targetToken,
1015
- },
1016
- ],
1017
- typeInfo: {
1018
- name: name,
1019
- tokenAddress: targetToken,
1020
- },
1021
- };
1022
- }
1023
- // https://basescan.org/address/0x4e65fe4dba92790696d040ac24aa414708f5c0ab#readProxyContract
1024
- if (name.toLowerCase().includes("aave") ||
1025
- name.toLowerCase().startsWith("yei") ||
1026
- (name.toLowerCase().startsWith("ironclad") && name.toLowerCase() !== "ironclad token") ||
1027
- name.toLowerCase().includes("zerolend")) {
1028
- let type = tokenType.aave_lending;
1029
- if (name.toLowerCase().includes("debt")) {
1030
- type = tokenType.aave_borrowing;
1031
- }
1032
- let protocol = "Aave";
1033
- if (name.toLowerCase().includes("yei")) {
1034
- protocol = "Yei Finance";
1035
- }
1036
- else if (name.toLowerCase().includes("ironclad") && name.toLowerCase() !== "ironclad token") {
1037
- protocol = "Ironclad";
1038
- }
1039
- else if (name.toLowerCase().includes("zerolend")) {
1040
- protocol = "ZeroLend";
1041
- }
1042
- return {
1043
- type: type,
1044
- calls: [
1045
- {
1046
- allowFailure: true,
1047
- callData: aaveInterface.encodeFunctionData("UNDERLYING_ASSET_ADDRESS"),
1048
- target: targetToken,
1049
- },
1050
- ],
1051
- typeInfo: {
1052
- name: name,
1053
- tokenAddress: targetToken,
1054
- protocol: protocol,
1055
- },
1056
- };
1057
- }
1058
- // https://fraxscan.com/address/0x4f968317721b9c300afbff3fd37365637318271d#readContract
1059
- if (name.toLowerCase().includes("fraxlend interest bearing") ||
1060
- name.toLowerCase().includes("aggregator") ||
1061
- name.toLowerCase().includes("sturdy interest bearing")) {
1062
- let type = tokenType.fraxlend;
1063
- if (name.toLowerCase().includes("aggregator")) {
1064
- type = tokenType.sturdy_aggregator;
1065
- }
1066
- else if (name.toLowerCase().includes("sturdy interest bearing")) {
1067
- type = tokenType.sturdy_silo;
1068
- }
1069
- const calls = [
1070
- {
1071
- allowFailure: true,
1072
- callData: fraxlendInterface.encodeFunctionData("asset"),
1073
- target: targetToken,
1074
- },
1075
- {
1076
- allowFailure: true,
1077
- callData: fraxlendInterface.encodeFunctionData("pricePerShare"),
1078
- target: targetToken,
1079
- },
1080
- ];
1081
- if (type === tokenType.sturdy_silo) {
1082
- calls.push({
1083
- allowFailure: true,
1084
- callData: sturdyInterface.encodeFunctionData("collateralContract"),
1085
- target: targetToken,
1086
- });
1087
- }
1088
- return {
1089
- type: type,
1090
- calls: calls,
1091
- typeInfo: {
1092
- name: name,
1093
- tokenAddress: targetToken,
1094
- },
1095
- };
1096
- }
1097
- // Doing these last because Ra is hard to categorize
1098
- if (name.toLowerCase().includes("uniswap") ||
1099
- name.toLowerCase().includes("stablev1 amm") ||
1100
- name.toLowerCase().includes("volatile pair -") ||
1101
- name.toLowerCase().includes("correlated pair -") ||
1102
- name.toLowerCase().includes("syncswap")) {
1103
- let protocol = "Uniswap V2";
1104
- if (name.toLowerCase().includes("stablev1 amm")) {
1105
- protocol = "Fenix V2";
1106
- }
1107
- else if (name.toLowerCase().includes("volatile pair -") || name.toLowerCase().includes("correlated pair -")) {
1108
- protocol = "Ra";
1109
- }
1110
- else if (name.toLowerCase().includes("syncswap")) {
1111
- protocol = "SyncSwap";
183
+ }
184
+ function parseForStaking(campaign, calls, index, targetToken) {
185
+ try {
186
+ const whitelist = campaign.campaignParameters.whitelist;
187
+ if (whitelist.length === 1) {
188
+ const forwarders = campaign.campaignParameters.forwarders;
189
+ if (forwarders.length === 1) {
190
+ if (forwarders[0].sender === whitelist[0]) {
191
+ const name = decodeCall(calls, index + 2, "name");
192
+ return generateResult(tokenType.staking, name, targetToken, { stakingContract: whitelist[0] });
193
+ }
194
+ }
1112
195
  }
1113
- return {
1114
- type: tokenType.uniswapv2,
1115
- calls: [
1116
- {
1117
- allowFailure: true,
1118
- callData: UniswapV2PoolInterface.encodeFunctionData("token0"),
1119
- target: targetToken,
1120
- },
1121
- {
1122
- allowFailure: true,
1123
- callData: UniswapV2PoolInterface.encodeFunctionData("token1"),
1124
- target: targetToken,
1125
- },
1126
- ],
1127
- typeInfo: {
1128
- name: name,
1129
- tokenAddress: targetToken,
1130
- protocol: protocol,
1131
- },
1132
- };
1133
- }
1134
- // Duo pool on Curve Fraxtal which has no factory
1135
- // https://fraxscan.com/address/0x63eb7846642630456707c3efbb50a03c79b89d81#readContract
1136
- if (name.toLowerCase() === "crvusd/frax" ||
1137
- name.toLowerCase() === "ezeth/wfrxeth" ||
1138
- name.toLowerCase() === "pufeth/wsteth") {
1139
- return {
1140
- type: tokenType.curve_2,
1141
- calls: [
1142
- {
1143
- allowFailure: true,
1144
- callData: curveInterface.encodeFunctionData("get_virtual_price"),
1145
- target: targetToken,
1146
- },
1147
- {
1148
- allowFailure: true,
1149
- callData: curveInterface.encodeFunctionData("coins", [0]),
1150
- target: targetToken,
1151
- },
1152
- {
1153
- allowFailure: true,
1154
- callData: curveInterface.encodeFunctionData("coins", [1]),
1155
- target: targetToken,
1156
- },
1157
- {
1158
- allowFailure: true,
1159
- callData: curveInterface.encodeFunctionData("coins", [2]),
1160
- target: targetToken,
1161
- },
1162
- ],
1163
- typeInfo: {
1164
- name: name,
1165
- tokenAddress: targetToken,
1166
- },
1167
- };
1168
196
  }
1169
- if (name.toLowerCase() === "isei") {
1170
- return {
1171
- type: tokenType.silostaking,
1172
- calls: [],
1173
- typeInfo: {
1174
- name: name,
1175
- tokenAddress: targetToken,
1176
- symbolUnderlyingToken: "SEI",
1177
- },
1178
- };
197
+ catch (e) {
198
+ // No factory on this token
199
+ // console.log(e);
1179
200
  }
1180
- if (name.toLowerCase().startsWith("moo velo")) {
1181
- return {
1182
- type: tokenType.beefy,
1183
- calls: [
1184
- {
1185
- allowFailure: true,
1186
- callData: beefyInterface.encodeFunctionData("getPricePerFullShare", []),
1187
- target: targetToken,
1188
- },
1189
- {
1190
- allowFailure: true,
1191
- callData: beefyInterface.encodeFunctionData("want", []),
1192
- target: targetToken,
1193
- },
1194
- ],
1195
- typeInfo: {
1196
- name: name,
1197
- tokenAddress: targetToken,
1198
- },
1199
- };
201
+ }
202
+ export function getTokenTypeRound1(calls, targetToken, index, campaign) {
203
+ const returnValueOfCalls = calls.map(call => call.returnData);
204
+ let result = parseForFactory(returnValueOfCalls, index, targetToken);
205
+ if (result)
206
+ return result;
207
+ result = parseForEnzyme(returnValueOfCalls, index, targetToken);
208
+ if (result)
209
+ return result;
210
+ result = parseForMetamorpho(returnValueOfCalls, index, targetToken);
211
+ if (result)
212
+ return result;
213
+ result = parseForStaking(campaign, returnValueOfCalls, index, targetToken);
214
+ if (result)
215
+ return result;
216
+ let name;
217
+ try {
218
+ name = decodeCall(returnValueOfCalls, index + 2, "name");
1200
219
  }
1201
- return {
1202
- type: tokenType.unknown,
1203
- calls: [],
1204
- typeInfo: {
1205
- name: name,
1206
- tokenAddress: targetToken,
1207
- },
1208
- };
220
+ catch (e) {
221
+ return generateResult(tokenType.unknown, "Unknown", targetToken, {});
222
+ }
223
+ result = parseForBalancer(returnValueOfCalls, index, targetToken, name);
224
+ if (result)
225
+ return result;
226
+ // Order matters
227
+ const ordered_token_Type = Object.values(tokenType).filter(value => typeof value === "string");
228
+ result = processNamingConditionsInOrder(ordered_token_Type, name, targetToken);
229
+ if (result)
230
+ return result;
231
+ return generateResult(tokenType.unknown, name, targetToken, {});
1209
232
  }