@cfxjs/sirius-next-common 0.2.10 → 0.2.11

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 (329) hide show
  1. package/dist/_esm-TZ4WSCGM.js +4035 -0
  2. package/dist/_esm-TZ4WSCGM.js.map +1 -0
  3. package/dist/abis/CommonError.d.ts +10 -0
  4. package/dist/abis/CommonError.js +8 -0
  5. package/dist/abis/CommonError.js.map +1 -0
  6. package/dist/abis/CommonPanic.d.ts +10 -0
  7. package/dist/abis/CommonPanic.js +8 -0
  8. package/dist/abis/CommonPanic.js.map +1 -0
  9. package/dist/ccip-DBSI27GO.js +15 -0
  10. package/dist/ccip-DBSI27GO.js.map +1 -0
  11. package/dist/chunk-3PXUIH3S.js +17 -0
  12. package/dist/chunk-3PXUIH3S.js.map +1 -0
  13. package/dist/chunk-4B6ASBYQ.js +408 -0
  14. package/dist/chunk-4B6ASBYQ.js.map +1 -0
  15. package/dist/{chunk-LXTR4VAD.js → chunk-5EDEEGZK.js} +42 -19
  16. package/dist/chunk-5EDEEGZK.js.map +1 -0
  17. package/dist/chunk-5TGK2EA2.js +18 -0
  18. package/dist/chunk-5TGK2EA2.js.map +1 -0
  19. package/dist/chunk-5Y7I6VYA.js +145 -0
  20. package/dist/chunk-5Y7I6VYA.js.map +1 -0
  21. package/dist/chunk-6H5A42YS.js +23 -0
  22. package/dist/chunk-6H5A42YS.js.map +1 -0
  23. package/dist/chunk-6SXAFSBF.js +1032 -0
  24. package/dist/chunk-6SXAFSBF.js.map +1 -0
  25. package/dist/chunk-735VMABS.js +82 -0
  26. package/dist/chunk-735VMABS.js.map +1 -0
  27. package/dist/chunk-7CBOXGGA.js +78 -0
  28. package/dist/chunk-7CBOXGGA.js.map +1 -0
  29. package/dist/chunk-ADNS57X5.js +18 -0
  30. package/dist/chunk-ADNS57X5.js.map +1 -0
  31. package/dist/{chunk-ABDGDYRT.js → chunk-ADULNBMD.js} +5 -5
  32. package/dist/chunk-AKMGJWIM.js +79 -0
  33. package/dist/chunk-AKMGJWIM.js.map +1 -0
  34. package/dist/{chunk-IIIPX34H.js → chunk-BUSBM33B.js} +4 -4
  35. package/dist/chunk-CKVDFS45.js +56 -0
  36. package/dist/chunk-CKVDFS45.js.map +1 -0
  37. package/dist/{chunk-WI3G3OD5.js → chunk-CNF26YY7.js} +3 -3
  38. package/dist/{chunk-DFQG46WD.js → chunk-CPPQCJEV.js} +3 -3
  39. package/dist/chunk-CPR4QZT6.js +21 -0
  40. package/dist/chunk-CPR4QZT6.js.map +1 -0
  41. package/dist/{chunk-NUKYY7GO.js → chunk-DF3PVTB5.js} +2 -2
  42. package/dist/chunk-E3ZD2GGG.js +17 -0
  43. package/dist/chunk-E3ZD2GGG.js.map +1 -0
  44. package/dist/chunk-EERNUGUK.js +198 -0
  45. package/dist/chunk-EERNUGUK.js.map +1 -0
  46. package/dist/{chunk-S5QP6EUQ.js → chunk-EMPFZFBS.js} +6 -19
  47. package/dist/chunk-EMPFZFBS.js.map +1 -0
  48. package/dist/chunk-FYLAXC3R.js +82 -0
  49. package/dist/chunk-FYLAXC3R.js.map +1 -0
  50. package/dist/{chunk-IWNT4XVY.js → chunk-GKZK26DZ.js} +3 -3
  51. package/dist/{chunk-IQJOXINX.js → chunk-GSWIFV2B.js} +2 -2
  52. package/dist/chunk-JFFTHCNE.js +344 -0
  53. package/dist/chunk-JFFTHCNE.js.map +1 -0
  54. package/dist/chunk-JIRLY7OG.js +4357 -0
  55. package/dist/chunk-JIRLY7OG.js.map +1 -0
  56. package/dist/chunk-K6FHTS3F.js +115 -0
  57. package/dist/chunk-K6FHTS3F.js.map +1 -0
  58. package/dist/chunk-L62OTV7F.js +71 -0
  59. package/dist/chunk-L62OTV7F.js.map +1 -0
  60. package/dist/{chunk-2R6NJR5T.js → chunk-LVFMTP5H.js} +2 -2
  61. package/dist/chunk-NWVSTRCG.js +20 -0
  62. package/dist/chunk-NWVSTRCG.js.map +1 -0
  63. package/dist/chunk-NXCZ5PMI.js +64 -0
  64. package/dist/chunk-NXCZ5PMI.js.map +1 -0
  65. package/dist/{chunk-HHA2RXLW.js → chunk-NZY53U2H.js} +9 -13
  66. package/dist/chunk-NZY53U2H.js.map +1 -0
  67. package/dist/{chunk-U3F7QHXB.js → chunk-OCQIWTDC.js} +2 -2
  68. package/dist/{chunk-EQWAYCW3.js → chunk-ODJ4QBD5.js} +6 -6
  69. package/dist/chunk-OYESIV3F.js +47 -0
  70. package/dist/chunk-OYESIV3F.js.map +1 -0
  71. package/dist/{chunk-IWGPVXSI.js → chunk-P4EE3QGM.js} +3 -3
  72. package/dist/{chunk-BRST23XX.js → chunk-Q2DX6IDH.js} +2 -2
  73. package/dist/chunk-SFCNLOQ5.js +37 -0
  74. package/dist/chunk-SFCNLOQ5.js.map +1 -0
  75. package/dist/chunk-SUCQASD3.js +84 -0
  76. package/dist/chunk-SUCQASD3.js.map +1 -0
  77. package/dist/chunk-U6ZN2ABK.js +184 -0
  78. package/dist/chunk-U6ZN2ABK.js.map +1 -0
  79. package/dist/chunk-UM5J477V.js +69 -0
  80. package/dist/chunk-UM5J477V.js.map +1 -0
  81. package/dist/{chunk-7RH7LJYB.js → chunk-WIB76E7O.js} +6 -2
  82. package/dist/{chunk-7RH7LJYB.js.map → chunk-WIB76E7O.js.map} +1 -1
  83. package/dist/chunk-WQG2LZMB.js +50 -0
  84. package/dist/chunk-WQG2LZMB.js.map +1 -0
  85. package/dist/chunk-XZ7IV2FF.js +5947 -0
  86. package/dist/chunk-XZ7IV2FF.js.map +1 -0
  87. package/dist/chunk-Y7OVL5US.js +46 -0
  88. package/dist/chunk-Y7OVL5US.js.map +1 -0
  89. package/dist/chunk-YBQQ72FQ.js +10 -0
  90. package/dist/chunk-YBQQ72FQ.js.map +1 -0
  91. package/dist/chunk-YDA7DDMQ.js +186 -0
  92. package/dist/chunk-YDA7DDMQ.js.map +1 -0
  93. package/dist/{chunk-YEUH2K6Z.js → chunk-YEINMVAR.js} +8 -2
  94. package/dist/chunk-YEINMVAR.js.map +1 -0
  95. package/dist/chunk-YIZCD4WG.js +107 -0
  96. package/dist/chunk-YIZCD4WG.js.map +1 -0
  97. package/dist/components/AceEditor/index.js +9 -143
  98. package/dist/components/AceEditor/index.js.map +1 -1
  99. package/dist/components/AddressContainer/CoreAddressContainer.js +14 -12
  100. package/dist/components/AddressContainer/EVMAddressContainer.js +13 -11
  101. package/dist/components/AddressContainer/addressSwitcher.js +11 -9
  102. package/dist/components/AddressContainer/addressView.js +9 -8
  103. package/dist/components/AddressContainer/label.js +7 -6
  104. package/dist/components/AddressContainer/utils.d.ts +9 -0
  105. package/dist/components/AddressContainer/utils.js +30 -0
  106. package/dist/components/AddressContainer/utils.js.map +1 -0
  107. package/dist/components/Age/index.js +7 -6
  108. package/dist/components/Age/index.js.map +1 -1
  109. package/dist/components/AutoComplete/index.js +6 -5
  110. package/dist/components/AutoComplete/index.js.map +1 -1
  111. package/dist/components/Button/ActionButton/index.js +1 -0
  112. package/dist/components/Button/BaseButton/index.js +1 -0
  113. package/dist/components/Button/IconButton/index.js +1 -0
  114. package/dist/components/Button/index.js +1 -0
  115. package/dist/components/Card/index.js +1 -0
  116. package/dist/components/Charts/BreadcrumbNav.js +1 -0
  117. package/dist/components/Charts/ChartOptions.js +1 -0
  118. package/dist/components/Charts/PreviewChartTemplate.js +3 -2
  119. package/dist/components/Charts/PreviewChartTemplate.js.map +1 -1
  120. package/dist/components/Charts/PreviewTitle.js +1 -0
  121. package/dist/components/Charts/StockChartTemplate.js +10 -9
  122. package/dist/components/Charts/StockChartTemplate.js.map +1 -1
  123. package/dist/components/Charts/StockTitle.js +1 -0
  124. package/dist/components/Charts/config.js +1 -0
  125. package/dist/components/Charts/constants.js +1 -0
  126. package/dist/components/Charts/useHighCharts.js +1 -0
  127. package/dist/components/CookieTip/CookieIcon.js +1 -0
  128. package/dist/components/CookieTip/index.js +2 -1
  129. package/dist/components/CookieTip/index.js.map +1 -1
  130. package/dist/components/CopyButton/index.js +6 -5
  131. package/dist/components/CopyButton/index.js.map +1 -1
  132. package/dist/components/DecimalsSelect/index.js +6 -5
  133. package/dist/components/DecimalsSelect/index.js.map +1 -1
  134. package/dist/components/DeleteIcon/index.js +2 -0
  135. package/dist/components/DeleteIcon/index.js.map +1 -1
  136. package/dist/components/Description/index.js +1 -0
  137. package/dist/components/Divider/index.js +1 -0
  138. package/dist/components/DownloadCSV/index.js +7 -6
  139. package/dist/components/DownloadCSV/index.js.map +1 -1
  140. package/dist/components/Dropdown/index.js +1 -0
  141. package/dist/components/Dropdown/index.js.map +1 -1
  142. package/dist/components/Empty/index.js +4 -40
  143. package/dist/components/Empty/index.js.map +1 -1
  144. package/dist/components/FileUpload/index.js +2 -0
  145. package/dist/components/FileUpload/index.js.map +1 -1
  146. package/dist/components/Footer/index.js +1 -0
  147. package/dist/components/Footer/index.js.map +1 -1
  148. package/dist/components/GasPriceDropdown/index.js +5 -4
  149. package/dist/components/GasPriceDropdown/index.js.map +1 -1
  150. package/dist/components/Highlight/index.js +1 -0
  151. package/dist/components/Highlight/index.js.map +1 -1
  152. package/dist/components/Icons/index.d.ts +8 -1
  153. package/dist/components/Icons/index.js +20 -64
  154. package/dist/components/Icons/index.js.map +1 -1
  155. package/dist/components/ImageSkeleton/index.js +2 -0
  156. package/dist/components/ImageSkeleton/index.js.map +1 -1
  157. package/dist/components/IncreasePercent/Icons.js +1 -0
  158. package/dist/components/IncreasePercent/index.js +5 -4
  159. package/dist/components/IncreasePercent/index.js.map +1 -1
  160. package/dist/components/InfoIconWithTooltip/InfoIcon.js +1 -0
  161. package/dist/components/InfoIconWithTooltip/index.js +7 -6
  162. package/dist/components/InputData/AddressLabel.d.ts +8 -0
  163. package/dist/components/InputData/AddressLabel.js +23 -0
  164. package/dist/components/InputData/AddressLabel.js.map +1 -0
  165. package/dist/components/InputData/ContractDetail.d.ts +22 -0
  166. package/dist/components/InputData/ContractDetail.js +19 -0
  167. package/dist/components/InputData/ContractDetail.js.map +1 -0
  168. package/dist/components/InputData/FunctionName.d.ts +10 -0
  169. package/dist/components/InputData/FunctionName.js +10 -0
  170. package/dist/components/InputData/FunctionName.js.map +1 -0
  171. package/dist/components/InputData/GeneralDecode.d.ts +9 -0
  172. package/dist/components/InputData/GeneralDecode.js +8 -0
  173. package/dist/components/InputData/GeneralDecode.js.map +1 -0
  174. package/dist/components/InputData/JsonDecode.d.ts +18 -0
  175. package/dist/components/InputData/JsonDecode.js +19 -0
  176. package/dist/components/InputData/JsonDecode.js.map +1 -0
  177. package/dist/components/InputData/OptimizationDecode.d.ts +23 -0
  178. package/dist/components/InputData/OptimizationDecode.js +32 -0
  179. package/dist/components/InputData/OptimizationDecode.js.map +1 -0
  180. package/dist/components/InputData/Original.d.ts +8 -0
  181. package/dist/components/InputData/Original.js +8 -0
  182. package/dist/components/InputData/Original.js.map +1 -0
  183. package/dist/components/InputData/UTF8.d.ts +8 -0
  184. package/dist/components/InputData/UTF8.js +14 -0
  185. package/dist/components/InputData/UTF8.js.map +1 -0
  186. package/dist/components/InputData/index.d.ts +15 -0
  187. package/dist/components/InputData/index.js +36 -0
  188. package/dist/components/InputData/index.js.map +1 -0
  189. package/dist/components/InputData/utils.d.ts +5 -0
  190. package/dist/components/InputData/utils.js +8 -0
  191. package/dist/components/InputData/utils.js.map +1 -0
  192. package/dist/components/Link/index.js +1 -0
  193. package/dist/components/List/index.js +1 -0
  194. package/dist/components/List/index.js.map +1 -1
  195. package/dist/components/Loading/index.js +1 -0
  196. package/dist/components/Loading/index.js.map +1 -1
  197. package/dist/components/Loading/loading.js +1 -0
  198. package/dist/components/Modal/index.js +6 -5
  199. package/dist/components/NetworkIcon/index.js +5 -4
  200. package/dist/components/NetworkIcon/index.js.map +1 -1
  201. package/dist/components/OutputData/ErrorDecode.d.ts +14 -0
  202. package/dist/components/OutputData/ErrorDecode.js +39 -0
  203. package/dist/components/OutputData/ErrorDecode.js.map +1 -0
  204. package/dist/components/OutputData/index.d.ts +21 -0
  205. package/dist/components/OutputData/index.js +42 -0
  206. package/dist/components/OutputData/index.js.map +1 -0
  207. package/dist/components/PageHeader/index.js +2 -0
  208. package/dist/components/PageHeader/index.js.map +1 -1
  209. package/dist/components/PhishingAddressContainer/PhishingWarningIcon.js +1 -0
  210. package/dist/components/PhishingAddressContainer/index.js +7 -6
  211. package/dist/components/PhishingAddressContainer/index.js.map +1 -1
  212. package/dist/components/Popover/index.js +6 -5
  213. package/dist/components/Price/index.js +6 -5
  214. package/dist/components/Price/index.js.map +1 -1
  215. package/dist/components/ProxyContractAddress/index.d.ts +24 -0
  216. package/dist/components/ProxyContractAddress/index.js +120 -0
  217. package/dist/components/ProxyContractAddress/index.js.map +1 -0
  218. package/dist/components/Radio/index.js +5 -4
  219. package/dist/components/Radio/index.js.map +1 -1
  220. package/dist/components/Remark/index.js +1 -0
  221. package/dist/components/Remark/index.js.map +1 -1
  222. package/dist/components/SearchIcon/index.js +2 -0
  223. package/dist/components/SearchIcon/index.js.map +1 -1
  224. package/dist/components/SearchInput/index.js +7 -6
  225. package/dist/components/SearchInput/index.js.map +1 -1
  226. package/dist/components/Select/index.d.ts +5 -4
  227. package/dist/components/Select/index.js +10 -105
  228. package/dist/components/Select/index.js.map +1 -1
  229. package/dist/components/Select/select.js +7 -5
  230. package/dist/components/Skeleton/index.js +1 -0
  231. package/dist/components/SkeletonContainer/index.js +1 -0
  232. package/dist/components/Spin/index.js +1 -0
  233. package/dist/components/Switch/index.d.ts +10 -0
  234. package/dist/components/Switch/index.js +81 -0
  235. package/dist/components/Switch/index.js.map +1 -0
  236. package/dist/components/Table/index.d.ts +9 -0
  237. package/dist/components/Table/index.js +12 -0
  238. package/dist/components/Table/index.js.map +1 -0
  239. package/dist/components/Text/index.js +7 -6
  240. package/dist/components/TextLogo/index.js +2 -0
  241. package/dist/components/TextLogo/index.js.map +1 -1
  242. package/dist/components/Tooltip/index.js +6 -5
  243. package/dist/components/TransactionAction/constants.js +1 -0
  244. package/dist/components/TransactionAction/coreTransactionAction.js +15 -13
  245. package/dist/components/TransactionAction/coreTransactionAction.js.map +1 -1
  246. package/dist/components/TransactionAction/evmTransactionAction.js +14 -12
  247. package/dist/components/TransactionAction/evmTransactionAction.js.map +1 -1
  248. package/dist/components/TransactionTrace/TraceDetail.d.ts +20 -0
  249. package/dist/components/TransactionTrace/TraceDetail.js +54 -0
  250. package/dist/components/TransactionTrace/TraceDetail.js.map +1 -0
  251. package/dist/components/TransactionTrace/TreeTraceTable.d.ts +20 -0
  252. package/dist/components/TransactionTrace/TreeTraceTable.js +57 -0
  253. package/dist/components/TransactionTrace/TreeTraceTable.js.map +1 -0
  254. package/dist/components/TransactionTrace/index.d.ts +9 -0
  255. package/dist/components/TransactionTrace/index.js +60 -0
  256. package/dist/components/TransactionTrace/index.js.map +1 -0
  257. package/dist/secp256k1-WGKMGTUQ.js +2255 -0
  258. package/dist/secp256k1-WGKMGTUQ.js.map +1 -0
  259. package/dist/store/index.js +1 -0
  260. package/dist/uno.css +103 -5
  261. package/dist/utils/address.js +5 -4
  262. package/dist/utils/cache.js +2 -1
  263. package/dist/utils/constants.d.ts +3 -1
  264. package/dist/utils/constants.js +6 -1
  265. package/dist/utils/contractManagerTool.js +5 -4
  266. package/dist/utils/contractManagerTool.js.map +1 -1
  267. package/dist/utils/cookie.js +1 -0
  268. package/dist/utils/ga.js +1 -0
  269. package/dist/utils/hooks/useAddressLabel.d.ts +3 -0
  270. package/dist/utils/hooks/useAddressLabel.js +14 -0
  271. package/dist/utils/hooks/useAddressLabel.js.map +1 -0
  272. package/dist/utils/hooks/useAge.js +2 -1
  273. package/dist/utils/hooks/useAge.js.map +1 -1
  274. package/dist/utils/hooks/useAutoSetHolderFilterParams.js +5 -4
  275. package/dist/utils/hooks/useAutoSetHolderFilterParams.js.map +1 -1
  276. package/dist/utils/hooks/useChartQueryParams.js +2 -0
  277. package/dist/utils/hooks/useChartQueryParams.js.map +1 -1
  278. package/dist/utils/hooks/useContractDetail.d.ts +6 -0
  279. package/dist/utils/hooks/useContractDetail.js +12 -0
  280. package/dist/utils/hooks/useContractDetail.js.map +1 -0
  281. package/dist/utils/hooks/useDecodeFunctionData.d.ts +29 -0
  282. package/dist/utils/hooks/useDecodeFunctionData.js +19 -0
  283. package/dist/utils/hooks/useDecodeFunctionData.js.map +1 -0
  284. package/dist/utils/hooks/useDecodeFunctionError.d.ts +17 -0
  285. package/dist/utils/hooks/useDecodeFunctionError.js +19 -0
  286. package/dist/utils/hooks/useDecodeFunctionError.js.map +1 -0
  287. package/dist/utils/hooks/useDecodedDataType.d.ts +18 -0
  288. package/dist/utils/hooks/useDecodedDataType.js +8 -0
  289. package/dist/utils/hooks/useDecodedDataType.js.map +1 -0
  290. package/dist/utils/hooks/useENS.js +6 -5
  291. package/dist/utils/hooks/useGetTxnStatus.js +2 -0
  292. package/dist/utils/hooks/useGetTxnStatus.js.map +1 -1
  293. package/dist/utils/hooks/useMethodAbi.d.ts +8 -0
  294. package/dist/utils/hooks/useMethodAbi.js +12 -0
  295. package/dist/utils/hooks/useMethodAbi.js.map +1 -0
  296. package/dist/utils/hooks/useMultiAceSearch.js +2 -0
  297. package/dist/utils/hooks/useMultiAceSearch.js.map +1 -1
  298. package/dist/utils/hooks/useSearchParams.js +1 -0
  299. package/dist/utils/hooks/useTxTrace.d.ts +124 -0
  300. package/dist/utils/hooks/useTxTrace.js +170 -0
  301. package/dist/utils/hooks/useTxTrace.js.map +1 -0
  302. package/dist/utils/index.js +5 -4
  303. package/dist/utils/media.js +1 -0
  304. package/dist/utils/pubsub.js +1 -0
  305. package/dist/utils/request.d.ts +5 -2
  306. package/dist/utils/request.js +5 -2
  307. package/dist/utils/request.types.d.ts +18 -3
  308. package/dist/utils/rpcRequest.js +1 -0
  309. package/dist/utils/rpcRequest.js.map +1 -1
  310. package/dist/utils/sdk.d.ts +35 -0
  311. package/dist/utils/sdk.js +19 -0
  312. package/dist/utils/sdk.js.map +1 -0
  313. package/package.json +5 -2
  314. package/dist/chunk-HHA2RXLW.js.map +0 -1
  315. package/dist/chunk-LXTR4VAD.js.map +0 -1
  316. package/dist/chunk-S5QP6EUQ.js.map +0 -1
  317. package/dist/chunk-YEUH2K6Z.js.map +0 -1
  318. /package/dist/{chunk-ABDGDYRT.js.map → chunk-ADULNBMD.js.map} +0 -0
  319. /package/dist/{chunk-IIIPX34H.js.map → chunk-BUSBM33B.js.map} +0 -0
  320. /package/dist/{chunk-WI3G3OD5.js.map → chunk-CNF26YY7.js.map} +0 -0
  321. /package/dist/{chunk-DFQG46WD.js.map → chunk-CPPQCJEV.js.map} +0 -0
  322. /package/dist/{chunk-NUKYY7GO.js.map → chunk-DF3PVTB5.js.map} +0 -0
  323. /package/dist/{chunk-IWNT4XVY.js.map → chunk-GKZK26DZ.js.map} +0 -0
  324. /package/dist/{chunk-IQJOXINX.js.map → chunk-GSWIFV2B.js.map} +0 -0
  325. /package/dist/{chunk-2R6NJR5T.js.map → chunk-LVFMTP5H.js.map} +0 -0
  326. /package/dist/{chunk-U3F7QHXB.js.map → chunk-OCQIWTDC.js.map} +0 -0
  327. /package/dist/{chunk-EQWAYCW3.js.map → chunk-ODJ4QBD5.js.map} +0 -0
  328. /package/dist/{chunk-IWGPVXSI.js.map → chunk-P4EE3QGM.js.map} +0 -0
  329. /package/dist/{chunk-BRST23XX.js.map → chunk-Q2DX6IDH.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/hooks/useChartQueryParams.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\n\nexport const useChartQueryParams = ({\n preview = false,\n withoutToday = false,\n}: {\n preview?: boolean;\n withoutToday?: boolean;\n}) => {\n const yesterday = useMemo(\n () =>\n withoutToday ? dayjs().utc().startOf('day').subtract(1, 'day').unix() : 0,\n [withoutToday],\n );\n if (!withoutToday) {\n return preview\n ? {\n limit: '30',\n intervalType: 'day',\n }\n : undefined;\n }\n return preview\n ? {\n limit: '30',\n intervalType: 'day',\n maxTimestamp: yesterday,\n }\n : {\n maxTimestamp: yesterday,\n };\n};\n"],"mappings":";AAAA,SAAS,eAAe;AACxB,OAAO,WAAW;AAClB,OAAO,SAAS;AAEhB,MAAM,OAAO,GAAG;AAET,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAU;AAAA,EACV,eAAe;AACjB,MAGM;AACJ,QAAM,YAAY;AAAA,IAChB,MACE,eAAe,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,KAAK,IAAI;AAAA,IAC1E,CAAC,YAAY;AAAA,EACf;AACA,MAAI,CAAC,cAAc;AACjB,WAAO,UACH;AAAA,MACE,OAAO;AAAA,MACP,cAAc;AAAA,IAChB,IACA;AAAA,EACN;AACA,SAAO,UACH;AAAA,IACE,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,IACA;AAAA,IACE,cAAc;AAAA,EAChB;AACN;","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/hooks/useChartQueryParams.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\n\ndayjs.extend(utc);\n\nexport const useChartQueryParams = ({\n preview = false,\n withoutToday = false,\n}: {\n preview?: boolean;\n withoutToday?: boolean;\n}) => {\n const yesterday = useMemo(\n () =>\n withoutToday ? dayjs().utc().startOf('day').subtract(1, 'day').unix() : 0,\n [withoutToday],\n );\n if (!withoutToday) {\n return preview\n ? {\n limit: '30',\n intervalType: 'day',\n }\n : undefined;\n }\n return preview\n ? {\n limit: '30',\n intervalType: 'day',\n maxTimestamp: yesterday,\n }\n : {\n maxTimestamp: yesterday,\n };\n};\n"],"mappings":";;;AAAA,SAAS,eAAe;AACxB,OAAO,WAAW;AAClB,OAAO,SAAS;AAEhB,MAAM,OAAO,GAAG;AAET,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAU;AAAA,EACV,eAAe;AACjB,MAGM;AACJ,QAAM,YAAY;AAAA,IAChB,MACE,eAAe,MAAM,EAAE,IAAI,EAAE,QAAQ,KAAK,EAAE,SAAS,GAAG,KAAK,EAAE,KAAK,IAAI;AAAA,IAC1E,CAAC,YAAY;AAAA,EACf;AACA,MAAI,CAAC,cAAc;AACjB,WAAO,UACH;AAAA,MACE,OAAO;AAAA,MACP,cAAc;AAAA,IAChB,IACA;AAAA,EACN;AACA,SAAO,UACH;AAAA,IACE,OAAO;AAAA,IACP,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,IACA;AAAA,IACE,cAAc;AAAA,EAChB;AACN;","names":[]}
@@ -0,0 +1,6 @@
1
+ import * as swr from 'swr';
2
+ import { BaseContractInfo } from '../request.types.js';
3
+
4
+ declare const useContractDetail: <T extends string>(contractAddress?: string, fields?: T[], shouldFetch?: boolean) => swr.SWRResponse<BaseContractInfo & Record<T, unknown>, any, any>;
5
+
6
+ export { useContractDetail };
@@ -0,0 +1,12 @@
1
+ import {
2
+ useContractDetail
3
+ } from "../../chunk-3PXUIH3S.js";
4
+ import "../../chunk-5EDEEGZK.js";
5
+ import "../../chunk-J2I22Q2M.js";
6
+ import "../../chunk-YEINMVAR.js";
7
+ import "../../chunk-DQGLZCIG.js";
8
+ import "../../chunk-WQG2LZMB.js";
9
+ export {
10
+ useContractDetail
11
+ };
12
+ //# sourceMappingURL=useContractDetail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,29 @@
1
+ import { AbiFunctionWithoutGas } from '../sdk.js';
2
+ import 'viem';
3
+
4
+ type Hex = `0x${string}`;
5
+ interface DecodedFunctionData {
6
+ decodedParams?: {
7
+ args: readonly unknown[] | undefined;
8
+ functionName: string;
9
+ };
10
+ decodedResults?: unknown[];
11
+ abiItem?: AbiFunctionWithoutGas;
12
+ fullName?: string;
13
+ noAbi?: boolean;
14
+ failed?: boolean;
15
+ similarWarning?: boolean;
16
+ }
17
+ declare const useDecodeFunctionData: ({ to, abi: outerAbi, implementation: _implementation, input, output, space, success, supportMethodAbi, withOutput, }: {
18
+ input: Hex;
19
+ output?: `0x${string}` | undefined;
20
+ to?: string | undefined;
21
+ implementation?: string | undefined;
22
+ abi?: AbiFunctionWithoutGas[] | undefined;
23
+ space: 'evm' | 'core';
24
+ success?: boolean | undefined;
25
+ supportMethodAbi?: boolean | undefined;
26
+ withOutput?: boolean | undefined;
27
+ }) => [DecodedFunctionData, boolean];
28
+
29
+ export { DecodedFunctionData, Hex, useDecodeFunctionData };
@@ -0,0 +1,19 @@
1
+ import {
2
+ useDecodeFunctionData
3
+ } from "../../chunk-EERNUGUK.js";
4
+ import "../../chunk-E3ZD2GGG.js";
5
+ import "../../chunk-6SXAFSBF.js";
6
+ import "../../chunk-JIRLY7OG.js";
7
+ import "../../chunk-4B6ASBYQ.js";
8
+ import "../../chunk-3PXUIH3S.js";
9
+ import "../../chunk-CPPQCJEV.js";
10
+ import "../../chunk-WIB76E7O.js";
11
+ import "../../chunk-5EDEEGZK.js";
12
+ import "../../chunk-J2I22Q2M.js";
13
+ import "../../chunk-YEINMVAR.js";
14
+ import "../../chunk-DQGLZCIG.js";
15
+ import "../../chunk-WQG2LZMB.js";
16
+ export {
17
+ useDecodeFunctionData
18
+ };
19
+ //# sourceMappingURL=useDecodeFunctionData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,17 @@
1
+ import { AbiItem } from 'viem';
2
+
3
+ declare const useDecodeFunctionError: ({ to, implementation: _implementation, errorData, space, }: {
4
+ errorData: `0x${string}`;
5
+ to?: string | undefined;
6
+ implementation?: string | undefined;
7
+ space: 'evm' | 'core';
8
+ }) => [
9
+ {
10
+ abiItem?: AbiItem;
11
+ args?: readonly unknown[];
12
+ errorName: string;
13
+ } | null,
14
+ boolean
15
+ ];
16
+
17
+ export { useDecodeFunctionError };
@@ -0,0 +1,19 @@
1
+ import {
2
+ useDecodeFunctionError
3
+ } from "../../chunk-K6FHTS3F.js";
4
+ import "../../chunk-6SXAFSBF.js";
5
+ import "../../chunk-JIRLY7OG.js";
6
+ import "../../chunk-4B6ASBYQ.js";
7
+ import "../../chunk-3PXUIH3S.js";
8
+ import "../../chunk-5TGK2EA2.js";
9
+ import "../../chunk-ADNS57X5.js";
10
+ import "../../chunk-WIB76E7O.js";
11
+ import "../../chunk-5EDEEGZK.js";
12
+ import "../../chunk-J2I22Q2M.js";
13
+ import "../../chunk-YEINMVAR.js";
14
+ import "../../chunk-DQGLZCIG.js";
15
+ import "../../chunk-WQG2LZMB.js";
16
+ export {
17
+ useDecodeFunctionError
18
+ };
19
+ //# sourceMappingURL=useDecodeFunctionError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,18 @@
1
+ import { DecodedFunctionData } from './useDecodeFunctionData.js';
2
+ import '../sdk.js';
3
+ import 'viem';
4
+
5
+ type DataType = 'original' | 'json' | 'utf8' | 'generalDecode' | 'optimizationDecode';
6
+ declare const useDecodedDataType: ({ to, input, isContractCreated, decodedData, }: {
7
+ to?: string | undefined;
8
+ isContractCreated?: boolean | undefined;
9
+ input: `0x${string}`;
10
+ decodedData?: DecodedFunctionData | undefined;
11
+ }) => {
12
+ tip: string | undefined;
13
+ dataType: DataType;
14
+ dataTypeList: DataType[];
15
+ setDataType: (type: DataType) => void;
16
+ };
17
+
18
+ export { DataType, useDecodedDataType };
@@ -0,0 +1,8 @@
1
+ import {
2
+ useDecodedDataType
3
+ } from "../../chunk-UM5J477V.js";
4
+ import "../../chunk-WQG2LZMB.js";
5
+ export {
6
+ useDecodedDataType
7
+ };
8
+ //# sourceMappingURL=useDecodedDataType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,12 +1,13 @@
1
1
  import {
2
2
  useENS
3
- } from "../../chunk-IIIPX34H.js";
4
- import "../../chunk-WI3G3OD5.js";
5
- import "../../chunk-7RH7LJYB.js";
6
- import "../../chunk-LXTR4VAD.js";
3
+ } from "../../chunk-BUSBM33B.js";
4
+ import "../../chunk-CNF26YY7.js";
5
+ import "../../chunk-WIB76E7O.js";
6
+ import "../../chunk-5EDEEGZK.js";
7
7
  import "../../chunk-J2I22Q2M.js";
8
- import "../../chunk-YEUH2K6Z.js";
8
+ import "../../chunk-YEINMVAR.js";
9
9
  import "../../chunk-DQGLZCIG.js";
10
+ import "../../chunk-WQG2LZMB.js";
10
11
  export {
11
12
  useENS
12
13
  };
@@ -1,3 +1,5 @@
1
+ import "../../chunk-WQG2LZMB.js";
2
+
1
3
  // src/utils/hooks/useGetTxnStatus.ts
2
4
  import { useEffect, useState, useRef } from "react";
3
5
  var promiseCache = {};
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/hooks/useGetTxnStatus.ts"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\n\ninterface TxnLoopOptsType {\n callback?: (data: any) => void;\n timeout?: number;\n method?: string;\n}\n\nconst promiseCache: { [key: string]: Promise<any> } = {};\nconst callbacksCache: Record<string, ((response: any) => void)[]> = {};\n\nexport const getTransactionLoop = function (\n hash: string,\n outOptions: TxnLoopOptsType,\n) {\n const options = {\n callback: () => {},\n timeout: 2000,\n method: 'getTransactionByHash',\n ...outOptions,\n };\n\n if (!callbacksCache[hash]) {\n callbacksCache[hash] = [];\n }\n if (options.callback) {\n callbacksCache[hash]?.push(options.callback);\n }\n\n if (promiseCache[hash]) {\n return promiseCache[hash];\n }\n\n promiseCache[hash] = new Promise<any>((resolve, reject) => {\n const loop = function () {\n const t: number = options.timeout;\n const CFX = (window as any).CFX;\n CFX.cfx[options.method](hash)\n .then((resp: any) => {\n try {\n if (resp) {\n let status: number | null = null;\n if (options.method === 'getTransactionByHash') {\n status = resp && resp.status;\n } else if (options.method === 'getTransactionReceipt') {\n status = resp && resp.outcomeStatus;\n }\n\n callbacksCache[hash]?.forEach(cb => cb(resp));\n\n if (status !== 0) {\n setTimeout(() => {\n loop();\n }, t);\n } else {\n resolve(resp);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n return resp;\n }\n } else {\n setTimeout(() => {\n loop();\n }, t);\n }\n } catch (e) {\n reject(e);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n }\n })\n .catch(() => {\n try {\n setTimeout(() => {\n loop();\n }, t);\n } catch (e) {\n reject(e);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n }\n });\n };\n loop();\n });\n\n return promiseCache[hash];\n};\n\nexport const useGetTxnStatus = (\n txnHashs: Array<string>,\n timeout?: number, // timeout to polling txn status,\n method?: any, // getTransactionByHash or getTransactionReceipt,\n) => {\n // 0 for success, 1 for error occured, null when the transaction is skipped or not packed.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [status, setStatus] = useState<{ [key: string]: any }>({});\n const markedHashs = useRef<{ [key: string]: boolean }>({});\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const newHashs = txnHashs.filter(h => !markedHashs.current[h]);\n if (newHashs.length) {\n newHashs.forEach(h => {\n markedHashs.current[h] = true;\n\n getTransactionLoop(h, {\n callback: resp => {\n setStatus((statusMap: { [key: string]: any }) => {\n const markedHashsKeys = Object.keys(markedHashs.current);\n const updatedStatusMap = markedHashsKeys.reduce(\n (prev: { [key: string]: any }, curr) => {\n prev[curr] = statusMap[curr];\n return prev;\n },\n {},\n );\n updatedStatusMap[h] = resp?.status;\n return updatedStatusMap;\n });\n },\n timeout: timeout || 2000,\n method: method || 'getTransactionByHash',\n });\n });\n }\n }, [txnHashs]);\n\n return {\n status,\n };\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../src/utils/hooks/useGetTxnStatus.ts"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\n\ninterface TxnLoopOptsType {\n callback?: (data: any) => void;\n timeout?: number;\n method?: string;\n}\n\nconst promiseCache: { [key: string]: Promise<any> } = {};\nconst callbacksCache: Record<string, ((response: any) => void)[]> = {};\n\nexport const getTransactionLoop = function (\n hash: string,\n outOptions: TxnLoopOptsType,\n) {\n const options = {\n callback: () => {},\n timeout: 2000,\n method: 'getTransactionByHash',\n ...outOptions,\n };\n\n if (!callbacksCache[hash]) {\n callbacksCache[hash] = [];\n }\n if (options.callback) {\n callbacksCache[hash]?.push(options.callback);\n }\n\n if (promiseCache[hash]) {\n return promiseCache[hash];\n }\n\n promiseCache[hash] = new Promise<any>((resolve, reject) => {\n const loop = function () {\n const t: number = options.timeout;\n const CFX = (window as any).CFX;\n CFX.cfx[options.method](hash)\n .then((resp: any) => {\n try {\n if (resp) {\n let status: number | null = null;\n if (options.method === 'getTransactionByHash') {\n status = resp && resp.status;\n } else if (options.method === 'getTransactionReceipt') {\n status = resp && resp.outcomeStatus;\n }\n\n callbacksCache[hash]?.forEach(cb => cb(resp));\n\n if (status !== 0) {\n setTimeout(() => {\n loop();\n }, t);\n } else {\n resolve(resp);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n return resp;\n }\n } else {\n setTimeout(() => {\n loop();\n }, t);\n }\n } catch (e) {\n reject(e);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n }\n })\n .catch(() => {\n try {\n setTimeout(() => {\n loop();\n }, t);\n } catch (e) {\n reject(e);\n delete promiseCache[hash];\n delete callbacksCache[hash];\n }\n });\n };\n loop();\n });\n\n return promiseCache[hash];\n};\n\nexport const useGetTxnStatus = (\n txnHashs: Array<string>,\n timeout?: number, // timeout to polling txn status,\n method?: any, // getTransactionByHash or getTransactionReceipt,\n) => {\n // 0 for success, 1 for error occured, null when the transaction is skipped or not packed.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const [status, setStatus] = useState<{ [key: string]: any }>({});\n const markedHashs = useRef<{ [key: string]: boolean }>({});\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const newHashs = txnHashs.filter(h => !markedHashs.current[h]);\n if (newHashs.length) {\n newHashs.forEach(h => {\n markedHashs.current[h] = true;\n\n getTransactionLoop(h, {\n callback: resp => {\n setStatus((statusMap: { [key: string]: any }) => {\n const markedHashsKeys = Object.keys(markedHashs.current);\n const updatedStatusMap = markedHashsKeys.reduce(\n (prev: { [key: string]: any }, curr) => {\n prev[curr] = statusMap[curr];\n return prev;\n },\n {},\n );\n updatedStatusMap[h] = resp?.status;\n return updatedStatusMap;\n });\n },\n timeout: timeout || 2000,\n method: method || 'getTransactionByHash',\n });\n });\n }\n }, [txnHashs]);\n\n return {\n status,\n };\n};\n"],"mappings":"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","names":[]}
@@ -0,0 +1,8 @@
1
+ import * as swr from 'swr';
2
+ import { MethodAbiItemResponse } from '../request.types.js';
3
+
4
+ declare const useMethodAbi: (methodId?: string, shouldFetch?: boolean) => swr.SWRResponse<{
5
+ list: MethodAbiItemResponse[];
6
+ }, any, any>;
7
+
8
+ export { useMethodAbi };
@@ -0,0 +1,12 @@
1
+ import {
2
+ useMethodAbi
3
+ } from "../../chunk-E3ZD2GGG.js";
4
+ import "../../chunk-5EDEEGZK.js";
5
+ import "../../chunk-J2I22Q2M.js";
6
+ import "../../chunk-YEINMVAR.js";
7
+ import "../../chunk-DQGLZCIG.js";
8
+ import "../../chunk-WQG2LZMB.js";
9
+ export {
10
+ useMethodAbi
11
+ };
12
+ //# sourceMappingURL=useMethodAbi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,3 +1,5 @@
1
+ import "../../chunk-WQG2LZMB.js";
2
+
1
3
  // src/utils/hooks/useMultiAceSearch.ts
2
4
  import { useCallback, useRef, useState } from "react";
3
5
  import { Range } from "ace-builds";
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/hooks/useMultiAceSearch.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport ReactAce from 'react-ace/lib/ace';\nimport { Ace, Range } from 'ace-builds';\n\ntype RangeType = Ace.Range;\n\ninterface EditorSearchStatus {\n // 编辑器的起始搜索序号\n start: number;\n // 编辑器每个搜索结果对应的位置\n rangeList: RangeType[];\n}\n\nconst zeroRangeInEditor = new Range(0, 0, 0, 0);\n\n// 判断两个 Range 的位置关系\nconst checkRange = (range1: RangeType, range2: RangeType) => {\n // 因为搜索结果位置不会重叠, 所以只需要判断 start 位置即可\n if (\n range1.start.row === range2.start.row &&\n range1.start.column === range2.start.column\n ) {\n return 'equal';\n }\n if (\n range1.start.row > range2.start.row ||\n (range1.start.row === range2.start.row &&\n range1.start.column > range2.start.column)\n ) {\n return 'after';\n }\n return 'before';\n};\n\nconst timeout = 50;\n\nexport const useMultiAceSearch = ({\n onSearchEmpty,\n}: {\n // 需要保证不会随着组件重新渲染而重新初始化,推荐使用 useCallback 或在组件外定义\n onSearchEmpty?: () => void;\n} = {}) => {\n // 是否处在搜索状态\n const [inSearch, setInSearch] = useState(false);\n // 搜索内容\n const [searchValue, setSearchValue] = useState('');\n // 管理编辑器实例\n const editorListRef = useRef<ReactAce[]>([]);\n // 管理每个编辑器实例的搜索状态\n const editorSearchStatusListRef = useRef<EditorSearchStatus[]>([]);\n // 记录当前搜索中的编辑器索引\n const editorIndexRef = useRef(0);\n // 记录搜索结果总数,用于页面显示\n const [total, setTotal] = useState<number | null>(null);\n // 记录当前搜索结果索引,用于页面显示\n const [searchIndex, setSearchIndex] = useState<number | null>(null);\n // 记录搜索结果总数,用于内部计算\n const totalRef = useRef<number | null>(null);\n // 延时定位编辑器,避免搜索位置还没更新\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n // 初始化搜索状态\n const initSearch = useCallback(\n (reset = false) => {\n if (searchValue === '') {\n return [true, 0] as const;\n }\n // 是否是新搜索\n let isNew = false;\n if (totalRef.current === null || reset) {\n // 每个编辑器第一个搜索结果在全局的索引\n let start = 0;\n // 全局搜索结果总数\n let _total = 0;\n editorSearchStatusListRef.current = editorListRef.current.map(\n editor => {\n // 初始化搜索状态\n const searchStatus: EditorSearchStatus = {\n start,\n rangeList: [],\n };\n // 默认从编辑器起始位置开始搜索,使用 find 方法查询每个结果的位置,不能使用 findAll\n let range = editor.editor.find(searchValue, {\n start: zeroRangeInEditor,\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType | false;\n let startRange = range as RangeType;\n while (range) {\n // 如果 range 存在,说明有搜索结果, stage + 1 且记录 range 位置\n start++;\n searchStatus.rangeList.push(range);\n // 再次查找下一个搜索结果\n range = editor.editor.find(searchValue, {\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType;\n // 如果当前 range 不在 startRange 之后,说明搜索结果重复,退出循环\n if (checkRange(range, startRange) !== 'after') {\n break;\n }\n }\n _total += searchStatus.rangeList.length;\n return searchStatus;\n },\n );\n setTotal(_total);\n totalRef.current = _total;\n isNew = true;\n }\n // 没有搜索结果\n if (totalRef.current === 0) {\n onSearchEmpty?.();\n }\n return [isNew || reset, totalRef.current] as const;\n },\n [searchValue, onSearchEmpty],\n );\n // 从 index 查询下一个可用于搜索的编辑器索引\n const getNextAvailableEditor = useCallback((index: number, direction = 1) => {\n // + editorListRef.current.length 避免负数\n const initIndex =\n (index + editorListRef.current.length) % editorListRef.current.length;\n let currentEditorIndex = initIndex;\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex];\n while (\n !currentEditorSearchStatus ||\n currentEditorSearchStatus.rangeList.length === 0\n ) {\n // 如果当前编辑器没有搜索结果,则尝试下一个编辑器\n currentEditorIndex =\n (currentEditorIndex + editorListRef.current.length + direction) %\n editorListRef.current.length;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex];\n }\n return [currentEditorIndex, currentEditorIndex !== initIndex] as const;\n }, []);\n const scrollToEditor = useCallback((editor: ReactAce) => {\n // 清除当前延时定位\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n // 延迟定位到搜索结果的位置,因为编辑器更新 textarea 需要时间,所以不能直接定位\n scrollTimeoutRef.current = setTimeout(() => {\n // 优先定位编辑器内的 textarea 标签,对应组件的光标所在位置,否则定位编辑器本身,此时可能会因为编辑器内容过多导致定位不准确\n const textarea = editor.refEditor.getElementsByTagName('textarea')[0];\n (textarea ?? editor.refEditor).scrollIntoView({ block: 'center' });\n scrollTimeoutRef.current = null;\n }, timeout);\n }, []);\n const findPrevious = useCallback(() => {\n const [isNewSearch, total] = initSearch();\n // 没有搜索结果\n if (total === 0) return;\n setInSearch(true);\n const editorList = editorListRef.current;\n // 新的搜索从最后一个编辑器开始,否则从上一次搜索的编辑器开始\n const [currentEditorIndex, isEditorChanged] = getNextAvailableEditor(\n isNewSearch ? editorList.length - 1 : editorIndexRef.current,\n -1,\n );\n // 获取当前编辑器实例和搜索状态\n let currentEditor = editorList[currentEditorIndex]!;\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex]!;\n // 获取第一和最后一个搜索结果的位置\n const prevRange = currentEditor.editor.selection.getRange();\n const startRange = currentEditorSearchStatus.rangeList[0]!;\n let range = currentEditor.editor.find(searchValue, {\n // 如果是新的搜索或者切换了编辑器,那么从第一个结果开始搜索,同时忽略当前结果,找到的就是最后一个结果\n start: isNewSearch || isEditorChanged ? startRange : undefined,\n // 如果是在当前编辑器内继续搜索,那么直接忽略当前结果查找上一个结果\n skipCurrent: true,\n // 从后往前查找\n backwards: true,\n }) as unknown as RangeType;\n // 更新搜索编辑器的索引\n editorIndexRef.current = currentEditorIndex;\n if (\n checkRange(range, prevRange) !== 'before' &&\n !isEditorChanged &&\n !isNewSearch\n ) {\n // 不是新的搜索,且没有切换编辑器,且找到的结果不在之前的位置签名,说明已经搜索完成回到末尾,那么需要切换到上一个编辑器\n const [nextEditorIndex] = getNextAvailableEditor(\n currentEditorIndex - 1,\n // 指定查找编辑器的方向\n -1,\n );\n // 重新更新搜索编辑器的索引\n editorIndexRef.current = nextEditorIndex;\n // 获取当前编辑器实例和搜索状态\n currentEditor = editorList[nextEditorIndex]!;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[nextEditorIndex]!;\n // 获取第一个搜索结果的位置\n const startRange = currentEditorSearchStatus.rangeList[0]!;\n range = currentEditor.editor.find(searchValue, {\n // 当前已知是切换了编辑器,所以从第一个结果开始搜索,同时忽略当前结果,找到的就是最后一个结果\n start: startRange,\n skipCurrent: true,\n backwards: true,\n }) as unknown as RangeType;\n }\n // 滚动到编辑器\n scrollToEditor(currentEditor);\n // 计算更新结果在所有结果中的序号\n const searchIndex =\n currentEditorSearchStatus.rangeList.findIndex(\n pr => checkRange(range, pr) === 'equal',\n ) +\n currentEditorSearchStatus.start +\n 1;\n setSearchIndex(searchIndex);\n }, [searchValue, initSearch, getNextAvailableEditor, scrollToEditor]);\n const findNext = useCallback(() => {\n const [isNewSearch, total] = initSearch();\n // 没有搜索结果\n if (total === 0) return;\n setInSearch(true);\n const editorList = editorListRef.current;\n // 新的搜索从第一个编辑器开始,否则从上一次搜索的编辑器开始\n const [currentEditorIndex, isEditorChanged] = getNextAvailableEditor(\n isNewSearch ? 0 : editorIndexRef.current,\n );\n // 获取当前编辑器实例和搜索状态\n let currentEditor = editorList[currentEditorIndex]!;\n const prevRange = currentEditor.editor.selection.getRange();\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex]!;\n // 获取最后一个搜索结果的位置\n const endRange =\n currentEditorSearchStatus.rangeList[\n currentEditorSearchStatus.rangeList.length - 1\n ]!;\n let range = currentEditor.editor.find(searchValue, {\n // 如果是新的搜索或者切换了编辑器,那么从最后一个结果开始搜索,同时忽略当前结果,找到的就是第一个结果\n start: isNewSearch || isEditorChanged ? endRange : undefined,\n // 如果是在当前编辑器内继续搜索,那么直接忽略当前结果查找下一个结果\n skipCurrent: true,\n // 从前往后查找\n backwards: false,\n }) as unknown as RangeType;\n // 更新搜索编辑器的索引\n editorIndexRef.current = currentEditorIndex;\n if (checkRange(range, prevRange) !== 'after' && !isNewSearch) {\n // 不是新的搜索,且没有切换编辑器,且找到的位置不在之前的位置后面,说明已经搜索完成回到开头,那么需要切换到下一个编辑器\n const [nextEditorIndex] = getNextAvailableEditor(currentEditorIndex + 1);\n // 重新更新搜索编辑器的索引\n editorIndexRef.current = nextEditorIndex;\n // 获取当前编辑器实例和搜索状态\n currentEditor = editorList[nextEditorIndex]!;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[nextEditorIndex]!;\n // 获取最后一个搜索结果的位置\n const endRange =\n currentEditorSearchStatus.rangeList[\n currentEditorSearchStatus.rangeList.length - 1\n ]!;\n range = currentEditor.editor.find(searchValue, {\n // 当前已知是切换了编辑器,所以从最后一个结果开始搜索,同时忽略当前结果,找到的就是第一个结果\n start: endRange,\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType;\n }\n // 滚动到编辑器\n scrollToEditor(currentEditor);\n // 计算更新结果在所有结果中的序号\n const searchIndex =\n currentEditorSearchStatus.rangeList.findIndex(\n pr => checkRange(range, pr) === 'equal',\n ) +\n currentEditorSearchStatus.start +\n 1;\n setSearchIndex(searchIndex);\n }, [searchValue, initSearch, getNextAvailableEditor, scrollToEditor]);\n const reset = useCallback((resetSearchValue = false) => {\n if (resetSearchValue === true) {\n setSearchValue('');\n }\n editorSearchStatusListRef.current = [];\n editorIndexRef.current = 0;\n totalRef.current = null;\n setTotal(null);\n setSearchIndex(null);\n }, []);\n return {\n editorListRef,\n searchValue,\n total,\n searchIndex,\n inSearch,\n setSearchValue: useCallback(\n (value: string) => {\n setSearchValue(value);\n // reset\n reset();\n },\n [reset],\n ),\n setEditorIndex: useCallback((index: number) => {\n editorIndexRef.current = index;\n }, []),\n findNext,\n findPrevious,\n reset,\n exitSearch: useCallback(() => {\n setInSearch(false);\n reset();\n }, [reset]),\n };\n};\n"],"mappings":"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","names":["reset","total","startRange","searchIndex","endRange"]}
1
+ {"version":3,"sources":["../../../src/utils/hooks/useMultiAceSearch.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\nimport ReactAce from 'react-ace/lib/ace';\nimport { Ace, Range } from 'ace-builds';\n\ntype RangeType = Ace.Range;\n\ninterface EditorSearchStatus {\n // 编辑器的起始搜索序号\n start: number;\n // 编辑器每个搜索结果对应的位置\n rangeList: RangeType[];\n}\n\nconst zeroRangeInEditor = new Range(0, 0, 0, 0);\n\n// 判断两个 Range 的位置关系\nconst checkRange = (range1: RangeType, range2: RangeType) => {\n // 因为搜索结果位置不会重叠, 所以只需要判断 start 位置即可\n if (\n range1.start.row === range2.start.row &&\n range1.start.column === range2.start.column\n ) {\n return 'equal';\n }\n if (\n range1.start.row > range2.start.row ||\n (range1.start.row === range2.start.row &&\n range1.start.column > range2.start.column)\n ) {\n return 'after';\n }\n return 'before';\n};\n\nconst timeout = 50;\n\nexport const useMultiAceSearch = ({\n onSearchEmpty,\n}: {\n // 需要保证不会随着组件重新渲染而重新初始化,推荐使用 useCallback 或在组件外定义\n onSearchEmpty?: () => void;\n} = {}) => {\n // 是否处在搜索状态\n const [inSearch, setInSearch] = useState(false);\n // 搜索内容\n const [searchValue, setSearchValue] = useState('');\n // 管理编辑器实例\n const editorListRef = useRef<ReactAce[]>([]);\n // 管理每个编辑器实例的搜索状态\n const editorSearchStatusListRef = useRef<EditorSearchStatus[]>([]);\n // 记录当前搜索中的编辑器索引\n const editorIndexRef = useRef(0);\n // 记录搜索结果总数,用于页面显示\n const [total, setTotal] = useState<number | null>(null);\n // 记录当前搜索结果索引,用于页面显示\n const [searchIndex, setSearchIndex] = useState<number | null>(null);\n // 记录搜索结果总数,用于内部计算\n const totalRef = useRef<number | null>(null);\n // 延时定位编辑器,避免搜索位置还没更新\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n // 初始化搜索状态\n const initSearch = useCallback(\n (reset = false) => {\n if (searchValue === '') {\n return [true, 0] as const;\n }\n // 是否是新搜索\n let isNew = false;\n if (totalRef.current === null || reset) {\n // 每个编辑器第一个搜索结果在全局的索引\n let start = 0;\n // 全局搜索结果总数\n let _total = 0;\n editorSearchStatusListRef.current = editorListRef.current.map(\n editor => {\n // 初始化搜索状态\n const searchStatus: EditorSearchStatus = {\n start,\n rangeList: [],\n };\n // 默认从编辑器起始位置开始搜索,使用 find 方法查询每个结果的位置,不能使用 findAll\n let range = editor.editor.find(searchValue, {\n start: zeroRangeInEditor,\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType | false;\n let startRange = range as RangeType;\n while (range) {\n // 如果 range 存在,说明有搜索结果, stage + 1 且记录 range 位置\n start++;\n searchStatus.rangeList.push(range);\n // 再次查找下一个搜索结果\n range = editor.editor.find(searchValue, {\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType;\n // 如果当前 range 不在 startRange 之后,说明搜索结果重复,退出循环\n if (checkRange(range, startRange) !== 'after') {\n break;\n }\n }\n _total += searchStatus.rangeList.length;\n return searchStatus;\n },\n );\n setTotal(_total);\n totalRef.current = _total;\n isNew = true;\n }\n // 没有搜索结果\n if (totalRef.current === 0) {\n onSearchEmpty?.();\n }\n return [isNew || reset, totalRef.current] as const;\n },\n [searchValue, onSearchEmpty],\n );\n // 从 index 查询下一个可用于搜索的编辑器索引\n const getNextAvailableEditor = useCallback((index: number, direction = 1) => {\n // + editorListRef.current.length 避免负数\n const initIndex =\n (index + editorListRef.current.length) % editorListRef.current.length;\n let currentEditorIndex = initIndex;\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex];\n while (\n !currentEditorSearchStatus ||\n currentEditorSearchStatus.rangeList.length === 0\n ) {\n // 如果当前编辑器没有搜索结果,则尝试下一个编辑器\n currentEditorIndex =\n (currentEditorIndex + editorListRef.current.length + direction) %\n editorListRef.current.length;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex];\n }\n return [currentEditorIndex, currentEditorIndex !== initIndex] as const;\n }, []);\n const scrollToEditor = useCallback((editor: ReactAce) => {\n // 清除当前延时定位\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n // 延迟定位到搜索结果的位置,因为编辑器更新 textarea 需要时间,所以不能直接定位\n scrollTimeoutRef.current = setTimeout(() => {\n // 优先定位编辑器内的 textarea 标签,对应组件的光标所在位置,否则定位编辑器本身,此时可能会因为编辑器内容过多导致定位不准确\n const textarea = editor.refEditor.getElementsByTagName('textarea')[0];\n (textarea ?? editor.refEditor).scrollIntoView({ block: 'center' });\n scrollTimeoutRef.current = null;\n }, timeout);\n }, []);\n const findPrevious = useCallback(() => {\n const [isNewSearch, total] = initSearch();\n // 没有搜索结果\n if (total === 0) return;\n setInSearch(true);\n const editorList = editorListRef.current;\n // 新的搜索从最后一个编辑器开始,否则从上一次搜索的编辑器开始\n const [currentEditorIndex, isEditorChanged] = getNextAvailableEditor(\n isNewSearch ? editorList.length - 1 : editorIndexRef.current,\n -1,\n );\n // 获取当前编辑器实例和搜索状态\n let currentEditor = editorList[currentEditorIndex]!;\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex]!;\n // 获取第一和最后一个搜索结果的位置\n const prevRange = currentEditor.editor.selection.getRange();\n const startRange = currentEditorSearchStatus.rangeList[0]!;\n let range = currentEditor.editor.find(searchValue, {\n // 如果是新的搜索或者切换了编辑器,那么从第一个结果开始搜索,同时忽略当前结果,找到的就是最后一个结果\n start: isNewSearch || isEditorChanged ? startRange : undefined,\n // 如果是在当前编辑器内继续搜索,那么直接忽略当前结果查找上一个结果\n skipCurrent: true,\n // 从后往前查找\n backwards: true,\n }) as unknown as RangeType;\n // 更新搜索编辑器的索引\n editorIndexRef.current = currentEditorIndex;\n if (\n checkRange(range, prevRange) !== 'before' &&\n !isEditorChanged &&\n !isNewSearch\n ) {\n // 不是新的搜索,且没有切换编辑器,且找到的结果不在之前的位置签名,说明已经搜索完成回到末尾,那么需要切换到上一个编辑器\n const [nextEditorIndex] = getNextAvailableEditor(\n currentEditorIndex - 1,\n // 指定查找编辑器的方向\n -1,\n );\n // 重新更新搜索编辑器的索引\n editorIndexRef.current = nextEditorIndex;\n // 获取当前编辑器实例和搜索状态\n currentEditor = editorList[nextEditorIndex]!;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[nextEditorIndex]!;\n // 获取第一个搜索结果的位置\n const startRange = currentEditorSearchStatus.rangeList[0]!;\n range = currentEditor.editor.find(searchValue, {\n // 当前已知是切换了编辑器,所以从第一个结果开始搜索,同时忽略当前结果,找到的就是最后一个结果\n start: startRange,\n skipCurrent: true,\n backwards: true,\n }) as unknown as RangeType;\n }\n // 滚动到编辑器\n scrollToEditor(currentEditor);\n // 计算更新结果在所有结果中的序号\n const searchIndex =\n currentEditorSearchStatus.rangeList.findIndex(\n pr => checkRange(range, pr) === 'equal',\n ) +\n currentEditorSearchStatus.start +\n 1;\n setSearchIndex(searchIndex);\n }, [searchValue, initSearch, getNextAvailableEditor, scrollToEditor]);\n const findNext = useCallback(() => {\n const [isNewSearch, total] = initSearch();\n // 没有搜索结果\n if (total === 0) return;\n setInSearch(true);\n const editorList = editorListRef.current;\n // 新的搜索从第一个编辑器开始,否则从上一次搜索的编辑器开始\n const [currentEditorIndex, isEditorChanged] = getNextAvailableEditor(\n isNewSearch ? 0 : editorIndexRef.current,\n );\n // 获取当前编辑器实例和搜索状态\n let currentEditor = editorList[currentEditorIndex]!;\n const prevRange = currentEditor.editor.selection.getRange();\n let currentEditorSearchStatus =\n editorSearchStatusListRef.current[currentEditorIndex]!;\n // 获取最后一个搜索结果的位置\n const endRange =\n currentEditorSearchStatus.rangeList[\n currentEditorSearchStatus.rangeList.length - 1\n ]!;\n let range = currentEditor.editor.find(searchValue, {\n // 如果是新的搜索或者切换了编辑器,那么从最后一个结果开始搜索,同时忽略当前结果,找到的就是第一个结果\n start: isNewSearch || isEditorChanged ? endRange : undefined,\n // 如果是在当前编辑器内继续搜索,那么直接忽略当前结果查找下一个结果\n skipCurrent: true,\n // 从前往后查找\n backwards: false,\n }) as unknown as RangeType;\n // 更新搜索编辑器的索引\n editorIndexRef.current = currentEditorIndex;\n if (checkRange(range, prevRange) !== 'after' && !isNewSearch) {\n // 不是新的搜索,且没有切换编辑器,且找到的位置不在之前的位置后面,说明已经搜索完成回到开头,那么需要切换到下一个编辑器\n const [nextEditorIndex] = getNextAvailableEditor(currentEditorIndex + 1);\n // 重新更新搜索编辑器的索引\n editorIndexRef.current = nextEditorIndex;\n // 获取当前编辑器实例和搜索状态\n currentEditor = editorList[nextEditorIndex]!;\n currentEditorSearchStatus =\n editorSearchStatusListRef.current[nextEditorIndex]!;\n // 获取最后一个搜索结果的位置\n const endRange =\n currentEditorSearchStatus.rangeList[\n currentEditorSearchStatus.rangeList.length - 1\n ]!;\n range = currentEditor.editor.find(searchValue, {\n // 当前已知是切换了编辑器,所以从最后一个结果开始搜索,同时忽略当前结果,找到的就是第一个结果\n start: endRange,\n skipCurrent: true,\n backwards: false,\n }) as unknown as RangeType;\n }\n // 滚动到编辑器\n scrollToEditor(currentEditor);\n // 计算更新结果在所有结果中的序号\n const searchIndex =\n currentEditorSearchStatus.rangeList.findIndex(\n pr => checkRange(range, pr) === 'equal',\n ) +\n currentEditorSearchStatus.start +\n 1;\n setSearchIndex(searchIndex);\n }, [searchValue, initSearch, getNextAvailableEditor, scrollToEditor]);\n const reset = useCallback((resetSearchValue = false) => {\n if (resetSearchValue === true) {\n setSearchValue('');\n }\n editorSearchStatusListRef.current = [];\n editorIndexRef.current = 0;\n totalRef.current = null;\n setTotal(null);\n setSearchIndex(null);\n }, []);\n return {\n editorListRef,\n searchValue,\n total,\n searchIndex,\n inSearch,\n setSearchValue: useCallback(\n (value: string) => {\n setSearchValue(value);\n // reset\n reset();\n },\n [reset],\n ),\n setEditorIndex: useCallback((index: number) => {\n editorIndexRef.current = index;\n }, []),\n findNext,\n findPrevious,\n reset,\n exitSearch: useCallback(() => {\n setInSearch(false);\n reset();\n }, [reset]),\n };\n};\n"],"mappings":"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","names":["reset","total","startRange","searchIndex","endRange"]}
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  useSearchParams
3
3
  } from "../../chunk-CPSXYQJ7.js";
4
+ import "../../chunk-WQG2LZMB.js";
4
5
  export {
5
6
  useSearchParams
6
7
  };
@@ -0,0 +1,124 @@
1
+ import * as swr from 'swr';
2
+ import { AbiFunctionWithoutGas } from '../sdk.js';
3
+ import { Pocket } from '../request.types.js';
4
+ import 'viem';
5
+
6
+ interface TraceAction {
7
+ createType: string;
8
+ callType: string;
9
+ from: string;
10
+ to?: string;
11
+ input?: `0x${string}`;
12
+ value: string;
13
+ gas?: string;
14
+ space: string;
15
+ fromPocket?: Pocket;
16
+ toPocket?: Pocket;
17
+ fromSpace?: 'evm' | 'none' | 'native';
18
+ toSpace?: 'evm' | 'none' | 'native';
19
+ }
20
+ interface TraceResult {
21
+ addr?: string;
22
+ gasLeft: string;
23
+ outcome: 'success' | 'fail' | 'reverted';
24
+ returnData: `0x${string}`;
25
+ }
26
+ interface ContractInfo {
27
+ address: string;
28
+ isVirtual: boolean;
29
+ verify: {
30
+ result: number;
31
+ };
32
+ }
33
+ interface TokenInfo {
34
+ address: string;
35
+ decimals: number;
36
+ symbol: string;
37
+ name: string;
38
+ tokenType: string;
39
+ }
40
+ interface NameTagInfo {
41
+ nameTag: string;
42
+ website?: string;
43
+ desc?: string;
44
+ labels?: string[];
45
+ caution?: number;
46
+ }
47
+ interface OriginTreeTrace {
48
+ calls: OriginTreeTrace[];
49
+ action: TraceAction;
50
+ result?: TraceResult;
51
+ blockHash: string;
52
+ epochHash: string;
53
+ epochNumber: number;
54
+ transactionHash: string;
55
+ transactionPosition: number;
56
+ type: string;
57
+ valid: boolean;
58
+ isCallImpl?: boolean;
59
+ }
60
+ type ProxyType = 'BeaconProxy' | 'Proxy';
61
+ interface OriginTraceData {
62
+ addressArray: string[];
63
+ contractMap: Record<string, ContractInfo>;
64
+ tokenMap: Record<string, TokenInfo>;
65
+ proxyMap: Record<string, ProxyType>;
66
+ methodMap: Record<string, Record<string, string>>;
67
+ ensMap: Record<string, {
68
+ name?: string;
69
+ }>;
70
+ nameTagMap: Record<string, NameTagInfo>;
71
+ traceTree: OriginTreeTrace[];
72
+ }
73
+ interface ListTraceForUI {
74
+ index: string;
75
+ type: string;
76
+ from: string;
77
+ to?: string;
78
+ value: string;
79
+ input?: `0x${string}`;
80
+ result?: TraceResult;
81
+ gas?: string;
82
+ isProxyCall?: boolean;
83
+ method?: string;
84
+ contractCreated?: string;
85
+ abi?: AbiFunctionWithoutGas[];
86
+ fromContractInfo: ContractInfo | {};
87
+ toContractInfo: ContractInfo | {};
88
+ fromTokenInfo: TokenInfo | {};
89
+ toTokenInfo: TokenInfo | {};
90
+ fromNameTagInfo?: NameTagInfo;
91
+ toNameTagInfo?: NameTagInfo;
92
+ fromENSInfo?: {
93
+ name?: string;
94
+ };
95
+ toENSInfo?: {
96
+ name?: string;
97
+ };
98
+ proxy?: {
99
+ type: ProxyType;
100
+ beaconAddress?: string;
101
+ implAddress: string;
102
+ };
103
+ isCallBeacon?: boolean;
104
+ isCallImpl?: boolean;
105
+ toESpaceInfo?: {
106
+ address?: string;
107
+ };
108
+ fromESpaceInfo?: {
109
+ address?: string;
110
+ };
111
+ fromPocket?: Pocket;
112
+ toPocket?: Pocket;
113
+ }
114
+ interface TreeTraceForUI extends ListTraceForUI {
115
+ calls?: TreeTraceForUI[];
116
+ }
117
+ declare const treeTraceToList: (data: TreeTraceForUI[], showProxyCall?: boolean) => ListTraceForUI[];
118
+ declare const hideProxyCallInTreeTrace: (data: TreeTraceForUI[]) => TreeTraceForUI[];
119
+ declare const useTxTrace: (hash: string, space: 'evm' | 'core') => swr.SWRResponse<void | {
120
+ list: TreeTraceForUI[];
121
+ total: number;
122
+ } | undefined, any, any>;
123
+
124
+ export { ListTraceForUI, OriginTraceData, OriginTreeTrace, ProxyType, TraceAction, TraceResult, TreeTraceForUI, hideProxyCallInTreeTrace, treeTraceToList, useTxTrace };
@@ -0,0 +1,170 @@
1
+ import {
2
+ formatAddress
3
+ } from "../../chunk-CNF26YY7.js";
4
+ import {
5
+ formatABI
6
+ } from "../../chunk-CPPQCJEV.js";
7
+ import "../../chunk-WIB76E7O.js";
8
+ import {
9
+ fetchWithPrefix
10
+ } from "../../chunk-5EDEEGZK.js";
11
+ import {
12
+ publishRequestError
13
+ } from "../../chunk-J2I22Q2M.js";
14
+ import "../../chunk-YEINMVAR.js";
15
+ import "../../chunk-DQGLZCIG.js";
16
+ import "../../chunk-WQG2LZMB.js";
17
+
18
+ // src/utils/hooks/useTxTrace.ts
19
+ import useSWRImmutable from "swr/immutable";
20
+ var formatTraceData = (data, space) => {
21
+ const addressType = space === "core" ? "base32" : "hex";
22
+ const contractInfo = data.contractMap || {};
23
+ const tokenInfo = data.tokenMap || {};
24
+ const proxyMap = data.proxyMap || {};
25
+ const nameTagMap = data.nameTagMap || {};
26
+ const ensMap = data.ensMap || {};
27
+ const methodMap = data.methodMap || {};
28
+ let total = 0;
29
+ const formatList = (t, parent) => {
30
+ total += t.length;
31
+ return t.map((item, index) => formatItem(item, index, parent, t));
32
+ };
33
+ const formatItem = (t, index, parent, list2) => {
34
+ const methodId = t.action.input?.slice(0, 10);
35
+ const from = formatAddress(t.action.from, addressType);
36
+ const to = formatAddress(t.action.to, addressType);
37
+ let method = methodId;
38
+ let abi = void 0;
39
+ const methodABI = methodId && to ? methodMap[methodId]?.[to] : void 0;
40
+ if (methodABI) {
41
+ try {
42
+ const result = formatABI(`["${methodABI}"]`, {
43
+ json: true,
44
+ allowEmpty: true
45
+ });
46
+ abi = JSON.parse(result);
47
+ const jsonABI = abi[0];
48
+ method = jsonABI?.name || methodId;
49
+ } catch (error) {
50
+ console.log("parse method abi error: ", methodABI, error);
51
+ }
52
+ }
53
+ const isContractCreated = !!t.action.createType;
54
+ const item = {
55
+ index: `${parent?.index ? `${parent.index}_` : ""}${index}`,
56
+ type: `${t.action.callType || t.type}`,
57
+ from,
58
+ to,
59
+ input: t.action.input,
60
+ value: t.action.value,
61
+ result: t.result,
62
+ gas: t.action.gas,
63
+ method,
64
+ abi,
65
+ contractCreated: isContractCreated ? t.result?.addr : void 0,
66
+ fromContractInfo: contractInfo[from] || {},
67
+ toContractInfo: contractInfo[to ?? ""] || {},
68
+ fromTokenInfo: tokenInfo[from] || {},
69
+ toTokenInfo: tokenInfo[to ?? ""] || {},
70
+ fromNameTagInfo: nameTagMap[from],
71
+ toNameTagInfo: nameTagMap[to ?? ""],
72
+ fromENSInfo: ensMap[from],
73
+ toENSInfo: ensMap[to ?? ""],
74
+ isCallImpl: t.isCallImpl,
75
+ fromPocket: t.action.fromPocket,
76
+ toPocket: t.action.toPocket
77
+ };
78
+ if (t.action.fromSpace === "evm") {
79
+ item.fromESpaceInfo = {
80
+ address: formatAddress(from, "hex")
81
+ };
82
+ }
83
+ if (t.action.toSpace === "evm") {
84
+ item.toESpaceInfo = {
85
+ address: formatAddress(to, "hex")
86
+ };
87
+ }
88
+ if (parent && parent.to && proxyMap[parent.to] && from === parent.to && to) {
89
+ if (index === 0 && proxyMap[parent.to] === "Proxy" && t.action.callType === "delegatecall") {
90
+ parent.proxy = {
91
+ type: "Proxy",
92
+ implAddress: to
93
+ };
94
+ item.isCallImpl = true;
95
+ }
96
+ const second = list2[1];
97
+ if (index === 0 && proxyMap[parent.to] === "BeaconProxy" && t.action.callType === "staticcall" && second && second.action.to && second.action.from === parent.to && second.action.callType === "delegatecall") {
98
+ parent.proxy = {
99
+ type: "BeaconProxy",
100
+ beaconAddress: to,
101
+ implAddress: second.action.to
102
+ };
103
+ item.isCallBeacon = true;
104
+ second.isCallImpl = true;
105
+ }
106
+ }
107
+ if (t.calls) {
108
+ item.calls = formatList(t.calls, item);
109
+ }
110
+ return item;
111
+ };
112
+ const list = formatList(data.traceTree);
113
+ return {
114
+ total,
115
+ list
116
+ };
117
+ };
118
+ var treeTraceToList = (data, showProxyCall = false) => {
119
+ const result = [];
120
+ const handler = (list) => {
121
+ list.forEach((item) => {
122
+ if (showProxyCall || !item.isCallBeacon && !item.isCallImpl) {
123
+ result.push(item);
124
+ }
125
+ if (item.calls) {
126
+ handler(item.calls);
127
+ }
128
+ });
129
+ };
130
+ handler(data);
131
+ return result;
132
+ };
133
+ var hideProxyCallInTreeTrace = (data) => {
134
+ const handler = (list) => {
135
+ const result = [];
136
+ list.forEach((item) => {
137
+ const newTrace = { ...item };
138
+ if (!newTrace.isCallBeacon && !newTrace.isCallImpl) {
139
+ result.push(newTrace);
140
+ if (newTrace.calls) {
141
+ newTrace.calls = handler(newTrace.calls);
142
+ }
143
+ } else if (newTrace.calls) {
144
+ result.push(...handler(newTrace.calls));
145
+ }
146
+ });
147
+ return result;
148
+ };
149
+ return handler(data);
150
+ };
151
+ var useTxTrace = (hash, space) => {
152
+ const url = `/transferTree/${hash}`;
153
+ return useSWRImmutable(
154
+ [url, space],
155
+ () => fetchWithPrefix(url).then((resp) => {
156
+ if (resp?.traceTree) {
157
+ const { list, total } = formatTraceData(resp, space);
158
+ return { list, total };
159
+ }
160
+ }).catch((e) => {
161
+ publishRequestError({ code: 60002, message: e.message }, "code");
162
+ })
163
+ );
164
+ };
165
+ export {
166
+ hideProxyCallInTreeTrace,
167
+ treeTraceToList,
168
+ useTxTrace
169
+ };
170
+ //# sourceMappingURL=useTxTrace.js.map