@cfxjs/sirius-next-common 0.2.16 → 0.2.18
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.
- package/dist/{chunk-SX6R4MHO.js → chunk-2WEBXRNL.js} +2 -2
- package/dist/{chunk-CNF26YY7.js → chunk-6L4ZEJQI.js} +2 -2
- package/dist/{chunk-2KXTTKRI.js → chunk-7AVQOIDM.js} +2 -2
- package/dist/{chunk-ZLNQICQZ.js → chunk-7VQL3G7K.js} +4 -4
- package/dist/{chunk-GSWIFV2B.js → chunk-AYCHKB2Y.js} +2 -2
- package/dist/{chunk-E3ZD2GGG.js → chunk-BEI5TWJL.js} +2 -2
- package/dist/{chunk-CKVDFS45.js → chunk-BHAXBHVC.js} +8 -13
- package/dist/chunk-BHAXBHVC.js.map +1 -0
- package/dist/{chunk-VJSXGYWN.js → chunk-C6CGZ6KN.js} +2 -2
- package/dist/{chunk-P4EE3QGM.js → chunk-C7OIVXE3.js} +3 -3
- package/dist/{chunk-BUSBM33B.js → chunk-CMOP3BKX.js} +3 -3
- package/dist/{chunk-6H5A42YS.js → chunk-DCQANK66.js} +2 -2
- package/dist/{chunk-OZ4OJLIM.js → chunk-DYNSSHD5.js} +7 -7
- package/dist/{chunk-OCQIWTDC.js → chunk-ELF2EOGF.js} +2 -2
- package/dist/{chunk-5M5ECKFB.js → chunk-GG7ROFBQ.js} +45 -41
- package/dist/chunk-GG7ROFBQ.js.map +1 -0
- package/dist/{chunk-YIZCD4WG.js → chunk-GHHUAWSG.js} +3 -3
- package/dist/{chunk-DF3PVTB5.js → chunk-GQRCW7WX.js} +2 -2
- package/dist/{chunk-YIXV7A4J.js → chunk-H5ZJBRIK.js} +4 -4
- package/dist/{chunk-JRB53YY7.js → chunk-K4SBN5ZT.js} +22 -18
- package/dist/chunk-K4SBN5ZT.js.map +1 -0
- package/dist/{chunk-3PXUIH3S.js → chunk-LCIBOT5P.js} +2 -2
- package/dist/chunk-MUW5KBWU.js +25 -0
- package/dist/chunk-MUW5KBWU.js.map +1 -0
- package/dist/{chunk-7OSADJ6H.js → chunk-NFPBS22O.js} +24 -9
- package/dist/chunk-NFPBS22O.js.map +1 -0
- package/dist/{chunk-CPPQCJEV.js → chunk-NM3BMITL.js} +4 -5
- package/dist/chunk-NM3BMITL.js.map +1 -0
- package/dist/{chunk-L62OTV7F.js → chunk-OT7NZ4PK.js} +3 -3
- package/dist/{chunk-EMPFZFBS.js → chunk-RUU22F7R.js} +2 -2
- package/dist/{chunk-CPR4QZT6.js → chunk-UF5BN4QN.js} +2 -2
- package/dist/{chunk-TP67325Z.js → chunk-UZALXR3J.js} +4 -4
- package/dist/{chunk-5EDEEGZK.js → chunk-VGYNHJFT.js} +16 -3
- package/dist/chunk-VGYNHJFT.js.map +1 -0
- package/dist/{chunk-A6ND7FSQ.js → chunk-W64AF7LA.js} +5 -5
- package/dist/chunk-WZIT54AU.js +51 -0
- package/dist/chunk-WZIT54AU.js.map +1 -0
- package/dist/{chunk-AYH6CLQB.js → chunk-XZL5CZFT.js} +6 -6
- package/dist/chunk-XZL5CZFT.js.map +1 -0
- package/dist/{chunk-5Y7I6VYA.js → chunk-YEAWH772.js} +2 -2
- package/dist/{chunk-5CDCNIBM.js → chunk-YKHDBNJD.js} +21 -24
- package/dist/chunk-YKHDBNJD.js.map +1 -0
- package/dist/{chunk-LVFMTP5H.js → chunk-YVV32ON3.js} +2 -2
- package/dist/components/AceEditor/index.js +4 -4
- package/dist/components/AddressContainer/CoreAddressContainer.d.ts +1 -0
- package/dist/components/AddressContainer/CoreAddressContainer.js +10 -10
- package/dist/components/AddressContainer/EVMAddressContainer.d.ts +1 -0
- package/dist/components/AddressContainer/EVMAddressContainer.js +9 -9
- package/dist/components/AddressContainer/addressSwitcher.d.ts +1 -0
- package/dist/components/AddressContainer/addressSwitcher.js +7 -7
- package/dist/components/AddressContainer/addressView.d.ts +2 -1
- package/dist/components/AddressContainer/addressView.js +6 -6
- package/dist/components/AddressContainer/label.js +45 -6
- package/dist/components/AddressContainer/label.js.map +1 -1
- package/dist/components/AddressContainer/types.d.ts +20 -23
- package/dist/components/AddressContainer/utils.d.ts +17 -2
- package/dist/components/AddressContainer/utils.js +6 -20
- package/dist/components/AddressContainer/utils.js.map +1 -1
- package/dist/components/Age/index.js +4 -4
- package/dist/components/AutoComplete/index.js +3 -3
- package/dist/components/Charts/PreviewChartTemplate.js +1 -1
- package/dist/components/Charts/StockChartTemplate.js +1 -1
- package/dist/components/CopyButton/index.js +3 -3
- package/dist/components/DecimalsSelect/index.js +3 -3
- package/dist/components/DownloadCSV/index.js +4 -4
- package/dist/components/GasPriceDropdown/index.js +2 -2
- package/dist/components/IncreasePercent/index.js +2 -2
- package/dist/components/InfoIconWithTooltip/index.js +4 -4
- package/dist/components/InputData/AddressLabel.js +8 -9
- package/dist/components/InputData/ContractDetail.js +3 -3
- package/dist/components/InputData/JsonDecode.js +5 -5
- package/dist/components/InputData/OptimizationDecode.js +10 -11
- package/dist/components/InputData/UTF8.js +3 -3
- package/dist/components/InputData/index.js +14 -15
- package/dist/components/Modal/index.js +3 -3
- package/dist/components/NetworkIcon/index.js +2 -2
- package/dist/components/OutputData/ErrorDecode.js +13 -14
- package/dist/components/OutputData/index.js +15 -16
- package/dist/components/PhishingAddressContainer/index.js +4 -4
- package/dist/components/Popover/index.js +3 -3
- package/dist/components/Price/index.js +3 -3
- package/dist/components/ProxyContractAddress/index.d.ts +1 -1
- package/dist/components/ProxyContractAddress/index.js +24 -15
- package/dist/components/ProxyContractAddress/index.js.map +1 -1
- package/dist/components/Radio/index.js +2 -2
- package/dist/components/SearchInput/index.js +4 -4
- package/dist/components/Select/index.js +4 -4
- package/dist/components/Select/select.js +3 -3
- package/dist/components/Text/index.js +4 -4
- package/dist/components/Tooltip/index.js +3 -3
- package/dist/components/TransactionAction/coreTransactionAction.js +13 -18
- package/dist/components/TransactionAction/coreTransactionAction.js.map +1 -1
- package/dist/components/TransactionAction/evmTransactionAction.js +12 -17
- package/dist/components/TransactionAction/evmTransactionAction.js.map +1 -1
- package/dist/components/TransactionTrace/TraceDetail.js +23 -24
- package/dist/components/TransactionTrace/TreeTraceTable.js +24 -25
- package/dist/components/TransactionTrace/index.js +24 -25
- package/dist/utils/address.js +2 -2
- package/dist/utils/contractManagerTool.js +2 -2
- package/dist/utils/hooks/useAddressLabel.js +3 -3
- package/dist/utils/hooks/useAddressNameMap.d.ts +6 -0
- package/dist/utils/hooks/useAddressNameMap.js +12 -0
- package/dist/utils/hooks/useAddressNameMap.js.map +1 -0
- package/dist/utils/hooks/useAge.js +1 -1
- package/dist/utils/hooks/useAge.js.map +1 -1
- package/dist/utils/hooks/useAutoSetHolderFilterParams.js +2 -2
- package/dist/utils/hooks/useContractDetail.js +2 -2
- package/dist/utils/hooks/useDecodeFunctionData.js +5 -5
- package/dist/utils/hooks/useDecodeFunctionError.js +3 -3
- package/dist/utils/hooks/useENS.js +3 -3
- package/dist/utils/hooks/useEnhanceDataWithNameMap.d.ts +30 -0
- package/dist/utils/hooks/useEnhanceDataWithNameMap.js +71 -0
- package/dist/utils/hooks/useEnhanceDataWithNameMap.js.map +1 -0
- package/dist/utils/hooks/useMethodAbi.js +2 -2
- package/dist/utils/hooks/useTableData.d.ts +34 -0
- package/dist/utils/hooks/useTableData.js +95 -0
- package/dist/utils/hooks/useTableData.js.map +1 -0
- package/dist/utils/hooks/useTxTrace.d.ts +3 -40
- package/dist/utils/hooks/useTxTrace.js +5 -15
- package/dist/utils/hooks/useTxTrace.js.map +1 -1
- package/dist/utils/index.js +2 -2
- package/dist/utils/request.d.ts +7 -2
- package/dist/utils/request.js +3 -1
- package/dist/utils/request.types.d.ts +35 -1
- package/package.json +11 -11
- package/dist/chunk-5CDCNIBM.js.map +0 -1
- package/dist/chunk-5EDEEGZK.js.map +0 -1
- package/dist/chunk-5M5ECKFB.js.map +0 -1
- package/dist/chunk-7OSADJ6H.js.map +0 -1
- package/dist/chunk-AYH6CLQB.js.map +0 -1
- package/dist/chunk-CKVDFS45.js.map +0 -1
- package/dist/chunk-CPPQCJEV.js.map +0 -1
- package/dist/chunk-JRB53YY7.js.map +0 -1
- package/dist/chunk-Q2DX6IDH.js +0 -49
- package/dist/chunk-Q2DX6IDH.js.map +0 -1
- /package/dist/{chunk-SX6R4MHO.js.map → chunk-2WEBXRNL.js.map} +0 -0
- /package/dist/{chunk-CNF26YY7.js.map → chunk-6L4ZEJQI.js.map} +0 -0
- /package/dist/{chunk-2KXTTKRI.js.map → chunk-7AVQOIDM.js.map} +0 -0
- /package/dist/{chunk-ZLNQICQZ.js.map → chunk-7VQL3G7K.js.map} +0 -0
- /package/dist/{chunk-GSWIFV2B.js.map → chunk-AYCHKB2Y.js.map} +0 -0
- /package/dist/{chunk-E3ZD2GGG.js.map → chunk-BEI5TWJL.js.map} +0 -0
- /package/dist/{chunk-VJSXGYWN.js.map → chunk-C6CGZ6KN.js.map} +0 -0
- /package/dist/{chunk-P4EE3QGM.js.map → chunk-C7OIVXE3.js.map} +0 -0
- /package/dist/{chunk-BUSBM33B.js.map → chunk-CMOP3BKX.js.map} +0 -0
- /package/dist/{chunk-6H5A42YS.js.map → chunk-DCQANK66.js.map} +0 -0
- /package/dist/{chunk-OZ4OJLIM.js.map → chunk-DYNSSHD5.js.map} +0 -0
- /package/dist/{chunk-OCQIWTDC.js.map → chunk-ELF2EOGF.js.map} +0 -0
- /package/dist/{chunk-YIZCD4WG.js.map → chunk-GHHUAWSG.js.map} +0 -0
- /package/dist/{chunk-DF3PVTB5.js.map → chunk-GQRCW7WX.js.map} +0 -0
- /package/dist/{chunk-YIXV7A4J.js.map → chunk-H5ZJBRIK.js.map} +0 -0
- /package/dist/{chunk-3PXUIH3S.js.map → chunk-LCIBOT5P.js.map} +0 -0
- /package/dist/{chunk-L62OTV7F.js.map → chunk-OT7NZ4PK.js.map} +0 -0
- /package/dist/{chunk-EMPFZFBS.js.map → chunk-RUU22F7R.js.map} +0 -0
- /package/dist/{chunk-CPR4QZT6.js.map → chunk-UF5BN4QN.js.map} +0 -0
- /package/dist/{chunk-TP67325Z.js.map → chunk-UZALXR3J.js.map} +0 -0
- /package/dist/{chunk-A6ND7FSQ.js.map → chunk-W64AF7LA.js.map} +0 -0
- /package/dist/{chunk-5Y7I6VYA.js.map → chunk-YEAWH772.js.map} +0 -0
- /package/dist/{chunk-LVFMTP5H.js.map → chunk-YVV32ON3.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AddressContainer/addressSwitcher.tsx"],"sourcesContent":["import { WithTranslation } from 'react-i18next';\nimport { AlertTriangle, File } from '@zeit-ui/react-icons';\nimport InternalContractIcon from '../../images/internal-contract-icon.png';\nimport ContractIcon from '../../images/contract-icon.png';\nimport VerifiedIcon from '../../images/verified.png';\nimport isMeIcon from '../../images/me.png';\nimport { Tooltip } from '../Tooltip';\nimport { isPosAddress } from '@cfx-kit/dapp-utils/dist/address';\nimport { formatAddress, isInnerContractAddress } from '../../utils/address';\nimport { getTranslations, getEnvConfig, useGlobalData } from '../../store';\nimport { getNetwork, coreCorrespondsToEspace } from 'src/utils';\nimport { Props } from './types';\nimport { RenderAddress } from './addressView';\nimport { ContractCreated } from '../Icons';\n\n// common\nexport const ContractCreatedAddress = (\n props: Props & WithTranslation & { outputType: 'hex' | 'base32' },\n) => {\n const { contractCreated = '', outputType, t, isFull } = props;\n\n const translations = getTranslations();\n\n const contractAddress = formatAddress(contractCreated, outputType);\n\n const customProps = {\n contractName: t(translations.transaction.contractCreation),\n hrefAddress: contractAddress,\n cfxAddress: contractAddress,\n maxWidth: 160,\n };\n\n const mergedProps = { ...props, ...customProps };\n return RenderAddress({\n ...mergedProps,\n prefix: (\n <div className={`mr-[2px] flex-shrink-0 ${isFull ? 'icon' : ''}`}>\n <Tooltip title={mergedProps.contractName}>\n <div className=\"relative w-[16px] h-[16px]\">\n <ContractCreated className=\"w-[16px] h-[16px] align-bottom mb-[3px]\" />\n </div>\n </Tooltip>\n </div>\n ),\n });\n};\n\n// core\nexport const CoreHexAddress = (props: Props & WithTranslation) => {\n const { value, t, isFull, maxWidth } = props;\n const { globalData } = useGlobalData();\n\n const ENV_CONFIG = getEnvConfig();\n const translations = getTranslations();\n const hexAddress = formatAddress(value, 'hex');\n const network = getNetwork(\n globalData?.networks,\n coreCorrespondsToEspace(ENV_CONFIG.ENV_NETWORK_ID),\n );\n const url = `${network.url}/address/${hexAddress}`;\n\n return RenderAddress({\n cfxAddress: hexAddress,\n hoverValue: hexAddress,\n link: url,\n isFull,\n maxWidth,\n suffixSize: 0,\n prefix: (\n <div className=\"mr-[2px] flex-shrink-0\">\n <Tooltip title={t((translations as any).general.eSpaceAddress)}>\n <File size={16} color=\"#17B38A\" />\n </Tooltip>\n </div>\n ),\n });\n};\n\n// common\nexport const InvalidAddress = (props: Props & WithTranslation) => {\n const {\n value,\n tokenName,\n contractName,\n verificationName,\n t,\n isFull,\n maxWidth,\n isFullNameTag,\n hideAliasPrefixInHover,\n } = props;\n\n const translations = getTranslations();\n\n const tip = t(translations.general.invalidAddress);\n\n return RenderAddress({\n cfxAddress: value,\n contractName,\n tokenName,\n verificationName,\n hoverValue: `${tip}: ${value}`,\n link: false,\n isFull,\n isFullNameTag,\n maxWidth,\n style: { color: '#e00909' },\n prefix: (\n <div className=\"mr-[2px] flex-shrink-0\">\n <Tooltip title={tip}>\n <AlertTriangle size={16} color=\"#e00909\" />\n </Tooltip>\n </div>\n ),\n hideAliasPrefixInHover,\n });\n};\n\n// common\nexport const ContractAddress = (props: Props & WithTranslation) => {\n const { showIcon, verify, t, cfxAddress, isFull } = props;\n\n const translations = getTranslations();\n\n const isInnerContract = cfxAddress && isInnerContractAddress(cfxAddress);\n\n const typeText = t(\n isInnerContract\n ? translations.general.internalContract\n : verify\n ? translations.general.verifiedContract\n : translations.general.unverifiedContract,\n );\n\n return RenderAddress({\n ...props,\n prefix: showIcon ? (\n <div className={`mr-[2px] flex-shrink-0 ${isFull ? 'icon' : ''}`}>\n <Tooltip title={typeText}>\n <div className=\"relative w-[16px] h-[16px]\">\n {isInnerContract ? (\n <img\n className=\"w-[16px] h-[16px] align-bottom mb-[5px]\"\n src={InternalContractIcon}\n alt={typeText}\n />\n ) : (\n <>\n <img\n className=\"w-[16px] h-[16px] align-bottom mb-[5px]\"\n src={ContractIcon}\n alt={typeText}\n />\n {verify ? (\n <img\n className=\"w-[8px] h-[8px] absolute bottom-[-1px] right-[1px]\"\n src={VerifiedIcon}\n alt={''}\n />\n ) : (\n <></>\n )}\n </>\n )}\n </div>\n </Tooltip>\n </div>\n ) : (\n <></>\n ),\n });\n};\n\n// common\nexport const MyAddress = (props: Props & WithTranslation) => {\n const { isFull } = props;\n return RenderAddress({\n ...props,\n suffix: (\n <div className=\"mr-[2px] flex-shrink-0\">\n <img\n className=\"w-[38.5px] h-[16px] ml-[3px] align-bottom\"\n src={isMeIcon}\n alt=\"is me\"\n style={{\n marginBottom: isFull ? '6px' : '4px',\n }}\n />\n </div>\n ),\n });\n};\n\n// core\nexport const PosAddress = (props: Props & WithTranslation) => {\n const {\n tokenName,\n contractName,\n verificationName,\n isFull,\n isFullNameTag,\n maxWidth,\n t,\n link,\n isMe,\n hideAliasPrefixInHover,\n } = props;\n const value = props.value;\n if (!value) {\n return <>--</>;\n }\n if (isMe) {\n return MyAddress(props);\n }\n const translations = getTranslations();\n if (!isPosAddress(value)) {\n const tip = t(translations.general.invalidPosAddress);\n return RenderAddress({\n cfxAddress: value,\n tokenName,\n contractName,\n verificationName,\n hoverValue: `${tip}: ${value}`,\n link: false,\n isFull,\n isFullNameTag,\n maxWidth,\n style: { color: '#e00909' },\n prefix: (\n <div className=\"mr-[2px] flex-shrink-0\">\n <Tooltip title={tip}>\n <AlertTriangle size={16} color=\"#e00909\" />\n </Tooltip>\n </div>\n ),\n type: 'pos',\n hideAliasPrefixInHover,\n });\n }\n\n return RenderAddress({\n cfxAddress: value,\n tokenName,\n contractName,\n verificationName,\n link,\n isFull,\n isFullNameTag,\n maxWidth,\n type: 'pos',\n hideAliasPrefixInHover,\n });\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getContractDetail
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-VGYNHJFT.js";
|
|
4
4
|
|
|
5
5
|
// src/utils/hooks/useContractDetail.ts
|
|
6
6
|
import useSWRImmutable from "swr/immutable";
|
|
@@ -14,4 +14,4 @@ var useContractDetail = (contractAddress, fields = [], shouldFetch = true) => {
|
|
|
14
14
|
export {
|
|
15
15
|
useContractDetail
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-LCIBOT5P.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {
|
|
2
|
+
fetchAddressNameMap
|
|
3
|
+
} from "./chunk-VGYNHJFT.js";
|
|
4
|
+
|
|
5
|
+
// src/utils/hooks/useAddressNameMap.ts
|
|
6
|
+
import useSWRImmutable from "swr/immutable";
|
|
7
|
+
import { useMemo } from "react";
|
|
8
|
+
var useAddressNameMap = (addresses, shouldFetch = true) => {
|
|
9
|
+
const key = useMemo(() => {
|
|
10
|
+
return shouldFetch && addresses.length > 0 ? `address-name-map-${[...addresses].sort().join(",")}` : null;
|
|
11
|
+
}, [addresses, shouldFetch]);
|
|
12
|
+
return useSWRImmutable(
|
|
13
|
+
key,
|
|
14
|
+
() => fetchAddressNameMap(addresses, {
|
|
15
|
+
withContractInfo: "true",
|
|
16
|
+
withNameTagInfo: "true",
|
|
17
|
+
withENSInfo: "true"
|
|
18
|
+
})
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
useAddressNameMap
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=chunk-MUW5KBWU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/hooks/useAddressNameMap.ts"],"sourcesContent":["import useSWRImmutable from 'swr/immutable';\nimport { fetchAddressNameMap } from '../request';\nimport { useMemo } from 'react';\n\nexport const useAddressNameMap = (addresses: string[], shouldFetch = true) => {\n const key = useMemo(() => {\n return shouldFetch && addresses.length > 0\n ? `address-name-map-${[...addresses].sort().join(',')}`\n : null;\n }, [addresses, shouldFetch]);\n return useSWRImmutable(key, () =>\n fetchAddressNameMap(addresses, {\n withContractInfo: 'true',\n withNameTagInfo: 'true',\n withENSInfo: 'true',\n }),\n );\n};\n"],"mappings":";;;;;AAAA,OAAO,qBAAqB;AAE5B,SAAS,eAAe;AAEjB,IAAM,oBAAoB,CAAC,WAAqB,cAAc,SAAS;AAC5E,QAAM,MAAM,QAAQ,MAAM;AACxB,WAAO,eAAe,UAAU,SAAS,IACrC,oBAAoB,CAAC,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,GAAG,MAClD;AAAA,EACN,GAAG,CAAC,WAAW,WAAW,CAAC;AAC3B,SAAO;AAAA,IAAgB;AAAA,IAAK,MAC1B,oBAAoB,WAAW;AAAA,MAC7B,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,MACjB,aAAa;AAAA,IACf,CAAC;AAAA,EACH;AACF;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
convertCheckSum
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6L4ZEJQI.js";
|
|
4
4
|
import {
|
|
5
5
|
Text
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-C7OIVXE3.js";
|
|
7
7
|
import {
|
|
8
8
|
getTranslations
|
|
9
9
|
} from "./chunk-DQGLZCIG.js";
|
|
@@ -54,10 +54,12 @@ var convertLink = ({
|
|
|
54
54
|
};
|
|
55
55
|
var RenderAddress = ({
|
|
56
56
|
cfxAddress,
|
|
57
|
-
|
|
57
|
+
tokenName,
|
|
58
|
+
contractName,
|
|
59
|
+
showVerificationName = false,
|
|
60
|
+
verificationName,
|
|
58
61
|
hoverValue,
|
|
59
62
|
hrefAddress,
|
|
60
|
-
content,
|
|
61
63
|
link = "",
|
|
62
64
|
isFull = false,
|
|
63
65
|
isFullNameTag = false,
|
|
@@ -70,13 +72,23 @@ var RenderAddress = ({
|
|
|
70
72
|
addressLabel = "",
|
|
71
73
|
ENSLabel = "",
|
|
72
74
|
nametag = "",
|
|
75
|
+
innerName = "",
|
|
73
76
|
hideAliasPrefixInHover = false
|
|
74
77
|
}) => {
|
|
75
78
|
const translations = getTranslations();
|
|
76
|
-
const name =
|
|
79
|
+
const name = (
|
|
80
|
+
// Private name tags
|
|
81
|
+
addressLabel || // Official tag/name
|
|
82
|
+
nametag || // contract token name
|
|
83
|
+
tokenName || // contract name tag
|
|
84
|
+
contractName || // contract verification name
|
|
85
|
+
showVerificationName && verificationName || // CNS/ENS
|
|
86
|
+
ENSLabel || // inner name is used for some special address, like the zero address
|
|
87
|
+
innerName
|
|
88
|
+
);
|
|
77
89
|
const isShowEns = !!ENSLabel && name === ENSLabel;
|
|
78
90
|
const defaultStyle = {
|
|
79
|
-
maxWidth: `${name && isFullNameTag || isFull ? "
|
|
91
|
+
maxWidth: `${name && isFullNameTag || isFull ? "unset" : (maxWidth || defaultPCMaxWidth) + "px"}`
|
|
80
92
|
};
|
|
81
93
|
const href = convertLink({ link, type, hrefAddress, cfxAddress });
|
|
82
94
|
const Wrapper = href ? "a" : "div";
|
|
@@ -95,12 +107,15 @@ var RenderAddress = ({
|
|
|
95
107
|
},
|
|
96
108
|
alias: {
|
|
97
109
|
label: translations?.profile.address.publicNameTag,
|
|
98
|
-
value:
|
|
110
|
+
value: tokenName || contractName || verificationName,
|
|
99
111
|
hideLabel: hideAliasPrefixInHover
|
|
100
112
|
}
|
|
101
113
|
};
|
|
102
114
|
const checksumAddress = convertCheckSum(cfxAddress);
|
|
103
|
-
const cfxAddressLabel = typeof
|
|
115
|
+
const cfxAddressLabel = typeof checksumAddress === "string" && !isFull ? type === "pos" ? shortenAddress(checksumAddress, {
|
|
116
|
+
prefixLength: 10,
|
|
117
|
+
suffixLength: 0
|
|
118
|
+
}) : shortenAddress(checksumAddress) : checksumAddress;
|
|
104
119
|
return /* @__PURE__ */ jsxs("div", { className: "inline-flex", children: [
|
|
105
120
|
prefix || (isShowEns ? ENSIcon : null),
|
|
106
121
|
/* @__PURE__ */ jsx(
|
|
@@ -129,4 +144,4 @@ var RenderAddress = ({
|
|
|
129
144
|
export {
|
|
130
145
|
RenderAddress
|
|
131
146
|
};
|
|
132
|
-
//# sourceMappingURL=chunk-
|
|
147
|
+
//# sourceMappingURL=chunk-NFPBS22O.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AddressContainer/addressView.tsx"],"sourcesContent":["import { Translation } from 'react-i18next';\nimport { Text } from '../Text';\nimport { convertCheckSum } from '../../utils/address';\nimport { getTranslations } from '../../store';\nimport { TooltipContent, RenderAddressProps } from './types';\nimport { shortenAddress } from '@cfx-kit/dapp-utils/dist/address';\n\nconst defaultPCMaxWidth = 138;\n\n// common\nconst renderTooltipContent = (tooltipContent: TooltipContent) => {\n return Object.entries(tooltipContent)\n .map(([key, { label, value, hideLabel }]) => {\n if (value) {\n return (\n <div key={key}>\n {!hideLabel && (\n <span>\n <Translation>{t => t(label)}</Translation>\n </span>\n )}\n {value}\n </div>\n );\n }\n return null;\n })\n .filter(Boolean);\n};\n\n// common\nconst convertLink = ({\n link,\n type,\n hrefAddress,\n cfxAddress,\n}: RenderAddressProps) => {\n if (typeof link === 'string') {\n return link;\n }\n if (link === false) {\n return false;\n }\n\n const address = hrefAddress || cfxAddress;\n\n if (address && typeof address === 'string') {\n const pathname = window.location.pathname.toLowerCase();\n const addressLower = address.toLowerCase();\n if (pathname.includes('/address/' + addressLower)) {\n return false;\n }\n\n if (type === 'pow') {\n return `/address/${address}`;\n }\n\n if (type === 'pos') {\n return `/pos/accounts/${address}`;\n }\n }\n\n return false;\n};\n\n// common\nexport const RenderAddress = ({\n cfxAddress,\n tokenName,\n contractName,\n showVerificationName = false,\n verificationName,\n hoverValue,\n hrefAddress,\n link = '',\n isFull = false,\n isFullNameTag = false,\n style = {},\n maxWidth,\n prefix = null,\n ENSIcon = null,\n suffix = null,\n type = 'pow',\n addressLabel = '',\n ENSLabel = '',\n nametag = '',\n innerName = '',\n hideAliasPrefixInHover = false,\n}: RenderAddressProps) => {\n const translations = getTranslations();\n\n // Private name tags > Official tag/name > contract token name > contract name tag > contract verification name > CNS/ENS\n const name =\n // Private name tags\n addressLabel ||\n // Official tag/name\n nametag ||\n // contract token name\n tokenName ||\n // contract name tag\n contractName ||\n // contract verification name\n (showVerificationName && verificationName) ||\n // CNS/ENS\n ENSLabel ||\n // inner name is used for some special address, like the zero address\n innerName;\n const isShowEns = !!ENSLabel && name === ENSLabel;\n\n const defaultStyle = {\n maxWidth: `${(name && isFullNameTag) || isFull ? 'unset' : (maxWidth || defaultPCMaxWidth) + 'px'}`,\n };\n\n const href = convertLink({ link, type, hrefAddress, cfxAddress });\n\n const Wrapper = href ? 'a' : 'div';\n\n const tooltipContent: TooltipContent = {\n ENSLabel: {\n label: (translations as any)?.ens?.tip,\n value: ENSLabel,\n },\n nametag: {\n label: translations?.nametag?.tip,\n value: nametag,\n },\n addressLabel: {\n label: translations?.profile.address.myNameTag,\n value: addressLabel,\n },\n alias: {\n label: translations?.profile.address.publicNameTag,\n value: tokenName || contractName || verificationName,\n hideLabel: hideAliasPrefixInHover,\n },\n };\n\n const checksumAddress = convertCheckSum(cfxAddress);\n\n const cfxAddressLabel =\n typeof checksumAddress === 'string' && !isFull\n ? type === 'pos'\n ? shortenAddress(checksumAddress!, {\n prefixLength: 10,\n suffixLength: 0,\n })\n : shortenAddress(checksumAddress!)\n : checksumAddress;\n\n return (\n <div className=\"inline-flex\">\n {prefix || (isShowEns ? ENSIcon : null)}\n <Text\n tag=\"span\"\n hoverValue={\n <>\n {renderTooltipContent(tooltipContent)}\n <div>{hoverValue || checksumAddress}</div>\n </>\n }\n >\n <Wrapper\n className=\"block relative align-bottom cursor-default truncate\"\n style={{ ...defaultStyle, ...style }}\n {...(href ? { href: String(href) } : {})}\n >\n {name || cfxAddressLabel}\n </Wrapper>\n </Text>\n {suffix}\n </div>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-WIB76E7O.js";
|
|
4
4
|
import {
|
|
5
5
|
fetch
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-VGYNHJFT.js";
|
|
7
7
|
|
|
8
8
|
// src/utils/index.ts
|
|
9
9
|
import BigNumber from "bignumber.js";
|
|
@@ -312,7 +312,7 @@ function checkInt(value, type) {
|
|
|
312
312
|
function checkUint(value, type) {
|
|
313
313
|
const num = Number(type.slice(4));
|
|
314
314
|
const min = new BigNumber(0);
|
|
315
|
-
const max = new BigNumber(
|
|
315
|
+
const max = new BigNumber(2).pow(num).minus(1);
|
|
316
316
|
let isType = false;
|
|
317
317
|
if (!isNaN(Number(value))) {
|
|
318
318
|
const valNum = new BigNumber(value);
|
|
@@ -665,8 +665,7 @@ var getDuration = (pFrom, pTo) => {
|
|
|
665
665
|
return [0, 0, 0, 0];
|
|
666
666
|
}
|
|
667
667
|
};
|
|
668
|
-
var
|
|
669
|
-
var formatPrice = (price, symbol = cSymbol) => {
|
|
668
|
+
var formatPrice = (price, symbol = getCurrencySymbol()) => {
|
|
670
669
|
const p = new BigNumber(price);
|
|
671
670
|
let precision = 2;
|
|
672
671
|
if (p.eq(0)) {
|
|
@@ -794,4 +793,4 @@ export {
|
|
|
794
793
|
viewJson,
|
|
795
794
|
formatABI
|
|
796
795
|
};
|
|
797
|
-
//# sourceMappingURL=chunk-
|
|
796
|
+
//# sourceMappingURL=chunk-NM3BMITL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.ts"],"sourcesContent":["import BigNumber from 'bignumber.js';\nimport dayjs from 'dayjs';\nimport { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\nimport { utils as ethersUtils } from 'ethers';\nimport { LOCALSTORAGE_KEYS_MAP, getCurrencySymbol } from './constants';\nimport { fetch } from './request';\nimport { GlobalDataType, NetworkSpace, NetworksType } from 'src/store/types';\nimport IconCore from '../images/core-space/icon.svg';\nimport IconEvm from '../images/espace/icon.svg';\nimport IconBtc from '../images/bspace/icon.svg';\n\nBigNumber.config({ EXPONENTIAL_AT: [-18, 34], DECIMAL_PLACES: 80 });\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const toThousands = (num: any, delimiter = ',', prevDelimiter = ',') => {\n if ((typeof num !== 'number' || isNaN(num)) && typeof num !== 'string')\n return '';\n let str = num + '';\n return str\n .replace(new RegExp(prevDelimiter, 'igm'), '')\n .split('.')\n .reduce((acc, cur, index) => {\n if (index) {\n return `${acc}.${cur}`;\n } else {\n return cur.replace(/(\\d{1,3})(?=(\\d{3})+(?:$|\\.))/g, `$1${delimiter}`);\n }\n }, '');\n};\n\nexport const getEllipsStr = (str: string, frontNum: number, endNum: number) => {\n if (str) {\n const length = str.length;\n if (endNum === 0 && length <= frontNum) {\n return str.substring(0, frontNum);\n }\n return (\n str.substring(0, frontNum) +\n '...' +\n str.substring(length - endNum, length)\n );\n }\n return '';\n};\n\nexport const transferToLowerCase = (str: string) => {\n return str ? str.toLowerCase() : '';\n};\n\nfunction hex2asc(pStr: string) {\n let tempstr = '';\n for (let b = 0; b < pStr.length; b += 2) {\n tempstr += String.fromCharCode(parseInt(pStr.slice(b, b + 2), 16));\n }\n return tempstr;\n}\n\nexport const hex2utf8 = (pStr: string) => {\n let tempstr = '';\n try {\n tempstr = decodeURIComponent(\n pStr.replace(/\\s+/g, '').replace(/[0-9a-f]{2}/g, '%$&'),\n );\n } catch (err) {\n tempstr = hex2asc(pStr);\n }\n return tempstr;\n};\n\n// alternative of String.prototype.replaceAll\nexport const replaceAll = (str: string, find: string, replace: string) => {\n return str.replace(\n new RegExp(find.replace(/[.*+\\-?^${}()|[\\]\\\\]/g, '\\\\$&'), 'g'),\n replace,\n );\n};\n\n/**\n * 格式化字符串,向下取整\n * @param {number|string} num 数字或字符串,应尽量使用字符串格式,数字格式如果长度超过 Number.MAX_SAFE_INTEGER 或 Number.MIN_SAFE_INTEGER 可能会有精度损失\n * @param {object} opt 配置参数\n * @returns {string} 格式化后字符串格式数字\n * @todo: 支持四舍五入,向上取整\n * @todo: 支持整数位小数设置精度\n * @todo: 支持负数格式化\n */\nexport const formatNumber = (num: number | string | BigNumber, opt?: any) => {\n // 无法通过 bignumber.js 格式化的不处理\n let bNum = new BigNumber(num).toFixed();\n if (bNum === 'NaN') {\n return '';\n }\n const option = {\n precision: 3, // 保留小数精度数(注意整数位小数的精度固定为 3,原因是受千分符影响)\n keepDecimal: true, // 是否保留小数位(注意如果整数部分带有小数位,则不保留实际小数位,原因是会显示两个小数点,会误解)\n keepZero: false, // 是否保留小数位的 0(注意此配置优先级高于 precision,会清除 precision 添加的 0)\n delimiter: ',', // 自定义分隔符\n withUnit: true, // 是否显示单位\n unit: '', // 指定单位\n ...opt,\n };\n // 0. 定义返回值\n let int = '';\n let decimal = '';\n let result = '';\n /**\n * 1. 定义单位\n * K - kilo, 10³\n * M - mega, 10⁶\n * G - giga, 10⁹\n * T - tera, 10¹²\n * P - peta, 10¹⁵\n * E - exa, 10¹⁸\n * Z - zetta, 10²¹\n * Y - yotta, 10²⁴\n */\n const UNITS = ['', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\n // 2. 拆分出整数和小数,小数默认值为 0\n const [intStr, decimalStr = '0'] = bNum.split('.');\n // 3. 只能处理 27 位数的单位,大于 27 位的字符串从头部截断保留\n // 3.1 获取大于小数点前 27 位的数字 intStrFront\n let intStrFront = intStr ? intStr.slice(-Infinity, -27) : 0;\n // 3.2 获取小数点前 27 位数字 intStrEnd\n let intStrEnd = intStr ? intStr.slice(-27) : 0;\n // 4. intStrEnd 转千分符形式\n const intStrEndAfterToThousands = toThousands(intStrEnd, option.delimiter);\n // 5. intStrEnd 添加单位,此处不对数字有效性做验证,即可能值为 100.000,100.000k 或 000.000Y\n let intStrEndWithUnit = '';\n\n if (option.withUnit === false) {\n intStrEndWithUnit = intStrEndAfterToThousands;\n } else {\n let unitIndex = 1;\n if (option.unit !== '' && UNITS.includes(option.unit)) {\n unitIndex =\n intStrEndAfterToThousands.split(option.delimiter).length -\n UNITS.findIndex(u => u === option.unit);\n }\n if (unitIndex > 0) {\n intStrEndWithUnit = intStrEndAfterToThousands\n .split(option.delimiter)\n .reduce((prev, curr, index, arr) => {\n const len = arr.length;\n // 无单位整数,为了后面方便处理统一格式\n if (len === 1) {\n return `${curr}.000`;\n }\n if (index === 0) {\n return curr;\n } else if (index === unitIndex) {\n return `${prev}.${curr}${UNITS[len - index]}`;\n } else if (index < unitIndex) {\n return `${prev},${curr}`;\n } else {\n return prev;\n }\n }, '');\n } else {\n intStrEndWithUnit = intStrEndAfterToThousands;\n }\n }\n // 6. 格式化整数\n if (intStrFront) {\n // 如果数字长度超过 27 位,则前面的数字用千分符分割\n int = `${toThousands(intStrFront, option.delimiter)}${\n option.delimiter\n }${intStrEndWithUnit}`;\n } else {\n int = intStrEndWithUnit;\n }\n // 7. 格式化小数\n decimal = new BigNumber(`0.${decimalStr}`).toPrecision(option.precision, 1);\n // 8. 拼接整数,小数和单位\n let unit = int.slice(-1);\n let intWithoutUnit = int;\n if (int && UNITS.includes(unit)) {\n // 8.1 整数位包含单位,则不显示实际小数部分\n if (option.keepDecimal) {\n // 保留整数位整数 + 整数位小数\n intWithoutUnit = int.slice(-Infinity, -1);\n } else {\n // 仅保留整数位整数\n intWithoutUnit = intWithoutUnit.split('.')[0] || '';\n }\n result = `${intWithoutUnit}${unit}`;\n } else {\n unit = '';\n // 8.2 整数位为 0 或无单位整数,拼接小数位\n if (option.keepDecimal) {\n result = new BigNumber(int.toString().replace(/,/g, ''))\n .plus(new BigNumber(decimal))\n .toFixed(option.precision, 1);\n } else {\n result = int.split('.')[0] || '';\n }\n intWithoutUnit = result;\n }\n // 9. 处理小数部分的 0\n if (!option.keepZero) {\n result = `${new BigNumber(\n replaceAll(intWithoutUnit, option.delimiter, ''),\n ).toFormat()}${unit}`;\n }\n // 10. 格式化千分符\n result = toThousands(result);\n return result;\n};\n\nexport const roundToFixedPrecision = (\n number: number | string,\n precision: number,\n method = 'ROUND',\n) => {\n if (number === '') {\n return '--';\n }\n if (typeof number === 'string' && number.includes('<')) {\n return number;\n }\n\n const regex = /^([+-]?[0-9]*\\.?[0-9]+)(\\D*)$/;\n let matches = String(number).match(regex);\n if (!matches) {\n matches = [String(number), ''];\n }\n const suffix = matches[2] || '';\n\n const numberFormat = parseFloat(matches[1] ?? '');\n const factor = Math.pow(10, precision);\n let resultNum: number;\n\n switch (method) {\n case 'FLOOR':\n resultNum = Math.floor(numberFormat * factor) / factor;\n break;\n case 'CEIL':\n resultNum = Math.ceil(numberFormat * factor) / factor;\n break;\n case 'ROUND':\n default:\n resultNum = Math.round((numberFormat + Number.EPSILON) * factor) / factor;\n }\n return resultNum.toFixed(precision) + suffix;\n};\n\nexport const getPercent = (\n divisor: number | string | BigNumber,\n dividend: number | string | BigNumber,\n precision?: number,\n) => {\n if (Number(dividend) === 0) return 0 + '%';\n const bnDivisor = new BigNumber(divisor);\n const bnDividend = new BigNumber(dividend);\n const percentageNum = formatNumber(\n bnDivisor.dividedBy(bnDividend).multipliedBy(100).toNumber(),\n );\n if (precision || precision === 0) {\n const percentageNumPrecision = roundToFixedPrecision(\n percentageNum,\n precision,\n );\n if (percentageNumPrecision === '100.00') {\n return '100%';\n } else if (percentageNumPrecision === '0.00') {\n return '0%';\n }\n return roundToFixedPrecision(percentageNum, precision) + '%';\n }\n\n return `${percentageNum}%`;\n};\n\nexport const formatTimeStamp = (\n time: number,\n type?: 'standard' | 'timezone',\n) => {\n let result: string;\n try {\n switch (type) {\n case 'standard':\n result = dayjs(time).format('YYYY-MM-DD HH:mm:ss');\n break;\n case 'timezone':\n result = dayjs(time).format('YYYY-MM-DD HH:mm:ss Z');\n break;\n default:\n result = dayjs(time).format('YYYY-MM-DD HH:mm:ss');\n }\n } catch (error) {\n result = '';\n }\n return result;\n};\n\nexport const fromGdripToDrip = (num: number | string) =>\n new BigNumber(num).multipliedBy(10 ** 9);\n\nexport const fromCfxToDrip = (num: number | string) =>\n new BigNumber(num).multipliedBy(10 ** 18);\n\nexport const formatBalance = (\n balance: any,\n decimals = 18,\n isShowFull = false,\n opt = {},\n ltValue?: number | string,\n) => {\n try {\n const balanceValue =\n typeof balance === 'string' || typeof balance === 'number'\n ? new BigNumber(balance)\n : balance;\n const num = balanceValue.div(new BigNumber(10).pow(decimals));\n if (num.eq(0)) {\n return num.toFixed() as string;\n }\n if (isShowFull) {\n return toThousands(num.toFixed());\n }\n if (ltValue && num.lt(ltValue)) {\n return `<${ltValue}`;\n }\n return formatNumber(num.toString(), opt);\n } catch {\n return '';\n }\n};\n\ninterface BodyElement extends HTMLBodyElement {\n createTextRange?(): Range;\n}\nexport const selectText = (element: HTMLElement) => {\n var range: any,\n selection: any,\n body = document.body as BodyElement;\n if (body.createTextRange) {\n range = body.createTextRange();\n range.moveToElementText(element);\n range.select();\n } else if (window.getSelection) {\n selection = window.getSelection();\n range = document.createRange();\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n }\n};\n\nexport const isHash = (str: string) => {\n return /^0x[0-9a-fA-F]{64}$/.test(str);\n};\n\nexport const isBlockHash = async (str: string) => {\n if (!isHash(str)) return false;\n let isBlock = true;\n try {\n const block: any = await fetch(`/v1/block/${str}`);\n // server side will return {} when no block found\n if (!block.hash || block.code !== undefined) isBlock = false;\n } catch (err) {\n isBlock = false;\n }\n\n return isBlock;\n};\n\nexport const isTxHash = async (str: string) => {\n if (!isHash(str)) return false;\n return !(await isBlockHash(str));\n};\n\nexport function validURL(str: string) {\n var pattern = new RegExp(\n '^(https?:\\\\/\\\\/)?' + // protocol\n '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n '(\\\\#[-a-z\\\\d_]*)?$',\n 'i',\n ); // fragment locator\n return !!pattern.test(str);\n}\n\nexport function byteToKb(bytes: number) {\n return bytes / 1024;\n}\n\nexport function isObject(o: any) {\n return o !== null && typeof o === 'object' && Array.isArray(o) === false;\n}\n\nexport function checkInt(value: string, type: string) {\n const num = Number(type.slice(3));\n const min = new BigNumber(2).pow(num - 1).multipliedBy(-1);\n const max = new BigNumber(2).pow(num - 1).minus(1);\n let isType = false;\n if (!isNaN(Number(value))) {\n const valNum = new BigNumber(value);\n if (\n valNum.isInteger() &&\n valNum.isGreaterThanOrEqualTo(min) &&\n valNum.isLessThanOrEqualTo(max)\n ) {\n isType = true;\n } else {\n isType = false;\n }\n } else {\n isType = false;\n }\n return [isType, num, min.toString(), max.toString()];\n}\n\nexport function checkUint(value: string, type: string) {\n const num = Number(type.slice(4));\n const min = new BigNumber(0);\n const max = new BigNumber(2).pow(num).minus(1);\n let isType = false;\n if (!isNaN(Number(value))) {\n const valNum = new BigNumber(value);\n if (\n valNum.isInteger() &&\n valNum.isGreaterThanOrEqualTo(min) &&\n valNum.isLessThanOrEqualTo(max)\n ) {\n isType = true;\n } else {\n isType = false;\n }\n } else {\n isType = false;\n }\n return [isType, num, min.toFixed(), max.toFixed()];\n}\n\nexport function isHex(num: string, withPrefix = true) {\n const reg = withPrefix ? /^0x[0-9a-f]*$/i : /^(0x)?[0-9a-f]*$/i;\n return Boolean(num.match(reg));\n}\n\nexport function isEvenLength(str: string) {\n const length = str.length;\n return length > 0 && length % 2 === 0;\n}\n\nexport function checkBytes(value: string, type: string) {\n if (type === 'byte') {\n type = 'bytes1';\n }\n const num = Number(type.slice(5));\n let isBytes = false;\n if (!value) return [isBytes, num];\n if (isHex(value) && isEvenLength(value)) {\n if (num > 0) {\n const str = value.slice(2);\n const buffer = Buffer.from(str, 'hex');\n if (buffer.length === num) {\n isBytes = true;\n } else {\n isBytes = false;\n }\n } else {\n isBytes = true;\n }\n } else {\n isBytes = false;\n }\n return [isBytes, num];\n}\n\nexport function checkCfxType(value: string | number) {\n if (isNaN(Number(value))) {\n return false;\n }\n const valNum = new BigNumber(value);\n if (valNum.isNegative()) {\n return false;\n }\n let index = String(value).indexOf('.');\n if (index !== -1) {\n if (String(value).slice(index + 1).length > 18) {\n return false;\n } else {\n return true;\n }\n } else {\n return true;\n }\n}\n\nexport const sleep = (timeout: number) =>\n new Promise(resolve => setTimeout(resolve, timeout));\n\n// get two block interval time\nexport const getTimeByBlockInterval = (\n minuend = 0,\n subtrahend = 0,\n blockInterval = 0.5,\n) => {\n const seconds = new BigNumber(minuend)\n .minus(subtrahend)\n .multipliedBy(blockInterval)\n .toNumber();\n const dayBase = 86400;\n const hourBase = 3600;\n const days = Math.floor(seconds / dayBase);\n const deltaSecond = seconds - days * 86400;\n const hours = Math.floor(deltaSecond / hourBase);\n return { days, hours, seconds };\n};\n\n/**\n *\n * @param {number|string} data\n * @returns {boolean}\n * @example\n * 0 -> true\n * . -> true\n * 0. -> true\n * .0 -> true\n * 0.0 -> true\n * 0..0 -> false\n * x -> false\n * e -> false\n * @todo support config, such as negative and exponential notation\n */\n\n/**\n *\n * @param {number|string} data\n * @returns {boolean}\n * @example\n * 0 -> true\n * . -> false\n * 11 -> true\n * 011 -> false\n * -1 -> false\n */\nexport const isSafeNumberOrNumericStringInput = (data: string) =>\n /^\\d+\\.?\\d*$|^\\.\\d*$/.test(data);\n\nexport const isZeroOrPositiveInteger = (data: string) =>\n /^(0|[1-9]\\d*)$/.test(data);\n\nexport const parseString = (v: string) => {\n if (typeof v === 'string' && !v.startsWith('0x')) {\n return Buffer.from(v);\n }\n return v;\n};\n\n// process datepicker initial value\nexport const getInitialDate = (minTimestamp: number, maxTimestamp: number) => {\n const startDate = dayjs('2020-10-29T00:00:00+08:00');\n const endDate = dayjs();\n const innerMinTimestamp = minTimestamp\n ? dayjs(new Date(parseInt((minTimestamp + '000') as string)))\n : startDate;\n const innerMaxTimestamp = maxTimestamp\n ? dayjs(new Date(parseInt((maxTimestamp + '000') as string)))\n : endDate;\n const disabledDateD1 = (date: dayjs.Dayjs) =>\n date &&\n (date > innerMaxTimestamp.endOf('day') ||\n date < startDate.subtract(1, 'day').endOf('day'));\n const disabledDateD2 = (date: dayjs.Dayjs) =>\n date &&\n (date < innerMinTimestamp.subtract(1, 'day').endOf('day') ||\n date > endDate.endOf('day'));\n\n return {\n minT: innerMinTimestamp,\n maxT: innerMaxTimestamp,\n dMinT: disabledDateD1,\n dMaxT: disabledDateD2,\n };\n};\n\nexport const addIPFSGateway = (\n imgURL: string,\n IPFSGatewayURL: string,\n): string => {\n if (\n typeof imgURL === 'string' &&\n typeof IPFSGatewayURL === 'string' &&\n imgURL.startsWith('ipfs://')\n ) {\n imgURL = `${IPFSGatewayURL}/${imgURL.replace('ipfs://', 'ipfs/')}`;\n }\n\n return imgURL;\n};\n\nexport const isLikeBigNumber = (obj: any) => {\n if (obj === null || typeof obj !== 'object') {\n return false;\n }\n return 's' in obj && 'e' in obj && 'c' in obj && Array.isArray(obj.c);\n};\n\ntype NestedArray = (string | number | BigNumber | NestedArray)[];\ntype NestedObject = {\n [key: string]: BigNumber | string | NestedObject | NestedObject[];\n};\nexport const convertBigNumbersToStrings: any = (input: NestedArray) => {\n return input.map((item: any) => {\n if (item instanceof Uint8Array) {\n return item;\n }\n if (Array.isArray(item)) {\n return convertBigNumbersToStrings(item);\n } else if (\n item !== null &&\n typeof item === 'object' &&\n !isLikeBigNumber(item)\n ) {\n return convertObjBigNumbersToStrings(item);\n } else if (isLikeBigNumber(item)) {\n return item.toString(10);\n } else {\n return item;\n }\n });\n};\nexport const convertObjBigNumbersToStrings: any = (input: NestedArray) => {\n const newObj: NestedObject = {};\n if (Array.isArray(input)) {\n return convertBigNumbersToStrings(input);\n }\n for (let key in input as any) {\n if (isLikeBigNumber(input[key])) {\n newObj[key] = (input[key] as BigNumber).toString(10);\n } else if (Array.isArray(input[key])) {\n newObj[key] = convertBigNumbersToStrings(input[key]);\n } else if (typeof input[key] === 'object') {\n newObj[key] = convertObjBigNumbersToStrings(input[key] as NestedObject);\n } else {\n newObj[key] = input[key];\n }\n }\n return newObj;\n};\nexport const constprocessResultArray = (resultArray: NestedArray) => {\n if (typeof resultArray === 'string') {\n return resultArray;\n }\n const processElement: any = (element: any) => {\n if (Array.isArray(element)) {\n return element.map(processElement);\n } else if (element.type && element.type === 'Buffer') {\n let result = element.data\n .map((byte: number) => ('00' + byte.toString(16)).slice(-2))\n .join('');\n if (!result.startsWith('0x')) {\n result = '0x' + result;\n }\n return result;\n } else {\n return element;\n }\n };\n\n const inputArray = Array.isArray(resultArray) ? resultArray : [resultArray];\n return inputArray.map(processElement);\n};\n\nexport const formatLargeNumber = (number: string | number | BigNumber) => {\n const num = new BigNumber(number);\n\n if (num.isNaN()) {\n return { value: null, unit: '' };\n }\n\n const T = new BigNumber(10).pow(12);\n const P = new BigNumber(10).pow(15);\n const E = new BigNumber(10).pow(18);\n\n if (num.isGreaterThanOrEqualTo(E)) {\n const result = num.dividedBy(E);\n return {\n value: result.isNaN() ? null : result.toString(),\n unit: 'E',\n };\n } else if (num.isGreaterThanOrEqualTo(P)) {\n const result = num.dividedBy(P);\n return {\n value: result.isNaN() ? null : result.toString(),\n unit: 'P',\n };\n } else if (num.isGreaterThanOrEqualTo(T)) {\n const result = num.dividedBy(T);\n return {\n value: result.isNaN() ? null : result.toString(),\n unit: 'T',\n };\n } else {\n return {\n value: num.toString(),\n unit: '',\n };\n }\n};\n\nconst EPS = new BigNumber(1e-6);\n\nexport function transferRisk(riskStr: string) {\n const riskNum = new BigNumber(riskStr);\n\n if (riskNum.isNaN()) {\n return '';\n }\n // risk > 1e-4*(1+EPS)\n if (riskNum.isGreaterThan(new BigNumber(1e-4).times(EPS.plus(1)))) {\n return 'lv3';\n }\n // risk > 1e-6*(1+EPS)\n if (riskNum.isGreaterThan(new BigNumber(1e-6).times(EPS.plus(1)))) {\n return 'lv2';\n }\n // risk > 1e-8*(1+EPS)\n if (riskNum.isGreaterThan(new BigNumber(1e-8).times(EPS.plus(1)))) {\n return 'lv1';\n }\n return 'lv0';\n}\n\nexport const mergeDeep = (...objects: any[]): any => {\n return objects.reduce((prev, obj) => {\n if (isObject(obj)) {\n Object.keys(obj).forEach(key => {\n const pVal = prev[key];\n const oVal = obj[key];\n\n if (Array.isArray(pVal) && Array.isArray(oVal)) {\n prev[key] = pVal.concat(oVal);\n } else if (isObject(pVal) && isObject(oVal)) {\n prev[key] = mergeDeep(pVal, oVal);\n } else {\n prev[key] = oVal;\n }\n });\n }\n return prev;\n }, {});\n};\n\nexport const HIDE_IN_DOT_NET =\n /.net$/.test(window.location.host) &&\n localStorage.getItem(LOCALSTORAGE_KEYS_MAP.hideInDotNet) !== 'false';\n\nexport const getNetwork = (\n networks: GlobalDataType['networks'],\n id: number,\n) => {\n const list = [\n ...(networks.mainnet ?? []),\n ...(networks.testnet ?? []),\n ...(networks.devnet ?? []),\n ];\n const matched = list.find(n => n.id === id);\n\n return matched || list[0] || { url: '', name: '', id: 0 };\n};\nexport const gotoNetwork = (networkUrl?: string): void => {\n networkUrl && window.location.assign(networkUrl);\n};\nexport const getNetworkIcon = ({\n space,\n icon,\n}: {\n space?: NetworkSpace;\n icon?: string;\n}) => {\n if (icon) return icon;\n if (space === 'core') {\n return IconCore;\n } else if (space === 'evm') {\n return IconEvm;\n } else if (space === 'btc') {\n return IconBtc;\n }\n};\n\nexport const coreCorrespondsToEspace = (coreId: number) => {\n const correspond: { [index: number]: number } = {\n 1029: 1030,\n 1: 71,\n };\n return correspond[coreId] || 1030;\n};\n\n/**\n * 格式化字符串\n * @param {string} str\n * @param {string} type 可能取值为:tag - contract name tag, hash, address; 如果 type 为数字,则截取对应数字 + ...,默认值为 12\n */\nexport const formatString = (\n str: string,\n type?:\n | 'tag'\n | 'hash'\n | 'address'\n | 'tokenTracker'\n | 'posAddress'\n | 'hexAddress'\n | number,\n) => {\n let result: string;\n switch (type) {\n case 'tag':\n result = getEllipsStr(str, 14, 0);\n break;\n case 'hash':\n result = getEllipsStr(str, 10, 0);\n break;\n case 'address':\n result = getEllipsStr(str, 6, 4);\n break;\n case 'tokenTracker':\n result = getEllipsStr(str, 24, 0);\n break;\n case 'posAddress':\n result = getEllipsStr(str, 10, 0);\n break;\n case 'hexAddress':\n result = getEllipsStr(str, 6, 4);\n break;\n default:\n let num = 12;\n if (typeof type === 'number') num = type;\n if (str.length > num) {\n result = getEllipsStr(str, num, 0);\n } else {\n result = str;\n }\n }\n return result;\n};\n\n/**\n *\n * @param num original number\n * @param isShowFull Whether to show all numbers\n */\nexport const fromDripToGdrip = (\n num: number | string,\n isShowFull = false,\n _opt = {},\n) => {\n const opt = {\n minNum: 0.001,\n ..._opt,\n };\n const bn = new BigNumber(num);\n let result = '0';\n if (!window.isNaN(bn.toNumber()) && bn.toNumber() !== 0) {\n const divideBn = bn.dividedBy(10 ** 9);\n if (isShowFull) {\n result = toThousands(divideBn.toFixed());\n } else {\n result = divideBn.lt(opt.minNum)\n ? '< ' + new BigNumber(opt.minNum).toString()\n : formatNumber(divideBn.toFixed(), opt);\n }\n }\n return result;\n};\n/**\n *\n * @param num original number\n * @param isShowFull Whether to show all numbers\n */\nexport const fromDripToCfx = (\n num: number | string,\n isShowFull: boolean = false,\n _opt = {},\n) => {\n const opt = {\n minNum: 0.001,\n ..._opt,\n };\n const bn = new BigNumber(num);\n let result: string = '0';\n if (!window.isNaN(bn.toNumber()) && bn.toNumber() !== 0) {\n const divideBn = bn.dividedBy(10 ** 18);\n if (isShowFull) {\n result = toThousands(divideBn.toFixed());\n } else {\n result = divideBn.lt(opt.minNum)\n ? '< ' + new BigNumber(opt.minNum).toString()\n : formatNumber(divideBn.toFixed(), opt);\n }\n }\n return result;\n};\n\n/**\n * 获取给定时间戳 from 到给定时间 to 的 duration\n * @param {string | number} from syncTimestamp\n * @param {string | number} to current serverTimestamp or current browserTimestamp\n */\nexport const getDuration = (pFrom: number, pTo?: number) => {\n try {\n const to = pTo || +new Date();\n const from = pFrom * 1000;\n\n if (from > to) {\n throw new Error('invalid timestamp pair');\n }\n\n const dayjsTo = dayjs(to);\n\n const fullDay = dayjsTo.diff(from, 'day');\n const fullHour = dayjsTo.diff(from, 'hour');\n const fullMinute = dayjsTo.diff(from, 'minute');\n\n const day = dayjsTo.diff(from, 'day');\n const hour = dayjsTo.subtract(fullDay, 'day').diff(from, 'hour');\n const minute = dayjsTo.subtract(fullHour, 'hour').diff(from, 'minute');\n const second = dayjsTo.subtract(fullMinute, 'minute').diff(from, 'second');\n\n return [day, hour, minute, second];\n } catch (e) {\n return [0, 0, 0, 0];\n }\n};\n\nexport const formatPrice = (\n price: string | number,\n symbol = getCurrencySymbol(),\n): [string, string] => {\n const p = new BigNumber(price);\n let precision = 2;\n\n if (p.eq(0)) {\n return ['0', ''];\n } else if (p.lt(0.0001)) {\n return [\n '<0.0001',\n formatNumber(price || 0, {\n withUnit: false,\n precision: 18,\n keepZero: false,\n }),\n ];\n } else if (p.lt(1)) {\n precision = 4;\n } else if (p.lt(10)) {\n precision = 3;\n } else {\n precision = 2;\n }\n\n return [\n symbol +\n formatNumber(price || 0, {\n withUnit: false,\n keepZero: false,\n precision,\n }),\n '',\n ];\n};\n\nexport const getIncreasePercent = (\n _base: string | number | BigNumber,\n prev: string | number | BigNumber,\n precision = 0,\n) => {\n const base = new BigNumber(_base);\n const isNegative = base.isLessThan(prev);\n const value = Number(\n base.minus(prev).dividedBy(prev).multipliedBy(100).toFixed(precision),\n );\n\n return {\n value,\n percent: getPercent(base.minus(prev), prev, precision),\n isNegative,\n };\n};\n\nexport const viewJson = async (json: object) => {\n const jsonString = encodeURI(\n `data:text/json;charset=utf-8,${JSON.stringify(json)}`,\n );\n const iframe = `<iframe width='100%' height='100%' style='border: none;' src='${jsonString}'></iframe>`;\n const newWindow = window.open(jsonString);\n if (newWindow) {\n newWindow.document.open();\n newWindow.document.write(iframe);\n newWindow.document.close();\n }\n};\n\ntype FragmentType = 'function' | 'event' | 'constructor' | 'error';\ninterface FormatABIOptions {\n allowEmpty?: boolean;\n nameRequired?: boolean;\n minimal?: boolean;\n json?: boolean;\n allowTypes?: FragmentType[];\n}\nexport function formatABI(\n _abi: ConstructorParameters<typeof ethersUtils.Interface>[0],\n options: FormatABIOptions & { json: true },\n): string;\nexport function formatABI(\n _abi: ConstructorParameters<typeof ethersUtils.Interface>[0],\n options?: FormatABIOptions,\n): string[];\nexport function formatABI(\n _abi: ConstructorParameters<typeof ethersUtils.Interface>[0],\n {\n allowEmpty = false,\n nameRequired = false,\n minimal = false,\n json = false,\n allowTypes = [],\n }: FormatABIOptions = {},\n) {\n // try to parse abi\n const iface = new ethersUtils.Interface(_abi);\n // if abi is empty and allowEmpty is false, throw error\n if (!allowEmpty && iface.fragments.length === 0)\n throw new Error('abi is empty');\n if (\n allowTypes.length > 0 &&\n iface.fragments.some(f => !allowTypes.includes(f.type as FragmentType))\n ) {\n throw new Error('type is not allowed');\n }\n if (nameRequired && iface.fragments.some(f => f.inputs.some(i => !i.name))) {\n throw new Error('name is required');\n }\n return json\n ? iface.format('json')\n : iface.format(minimal ? 'minimal' : 'full');\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
} from "./chunk-SFCNLOQ5.js";
|
|
4
4
|
import {
|
|
5
5
|
AceEditor
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YEAWH772.js";
|
|
7
7
|
import {
|
|
8
8
|
formatABI
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NM3BMITL.js";
|
|
10
10
|
|
|
11
11
|
// src/components/InputData/JsonDecode.tsx
|
|
12
12
|
import { useId, useMemo } from "react";
|
|
@@ -68,4 +68,4 @@ var JsonDecode = ({
|
|
|
68
68
|
export {
|
|
69
69
|
JsonDecode
|
|
70
70
|
};
|
|
71
|
-
//# sourceMappingURL=chunk-
|
|
71
|
+
//# sourceMappingURL=chunk-OT7NZ4PK.js.map
|
|
@@ -14,7 +14,7 @@ import {
|
|
|
14
14
|
} from "./chunk-LRCAKRPK.js";
|
|
15
15
|
import {
|
|
16
16
|
cn
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-NM3BMITL.js";
|
|
18
18
|
|
|
19
19
|
// src/components/Select/select.tsx
|
|
20
20
|
import * as React9 from "react";
|
|
@@ -3613,4 +3613,4 @@ export {
|
|
|
3613
3613
|
SelectItem,
|
|
3614
3614
|
SelectSeparator
|
|
3615
3615
|
};
|
|
3616
|
-
//# sourceMappingURL=chunk-
|
|
3616
|
+
//# sourceMappingURL=chunk-RUU22F7R.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
hex2utf8
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-NM3BMITL.js";
|
|
4
4
|
|
|
5
5
|
// src/components/InputData/UTF8.tsx
|
|
6
6
|
import { useMemo } from "react";
|
|
@@ -18,4 +18,4 @@ var UTF8 = ({ data }) => {
|
|
|
18
18
|
export {
|
|
19
19
|
UTF8
|
|
20
20
|
};
|
|
21
|
-
//# sourceMappingURL=chunk-
|
|
21
|
+
//# sourceMappingURL=chunk-UF5BN4QN.js.map
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ErrorDecode
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-H5ZJBRIK.js";
|
|
4
4
|
import {
|
|
5
5
|
GeneralDecode
|
|
6
6
|
} from "./chunk-OYESIV3F.js";
|
|
7
7
|
import {
|
|
8
8
|
DecodedParameters
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-DYNSSHD5.js";
|
|
10
10
|
import {
|
|
11
11
|
Original
|
|
12
12
|
} from "./chunk-YBQQ72FQ.js";
|
|
13
13
|
import {
|
|
14
14
|
UTF8
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UF5BN4QN.js";
|
|
16
16
|
|
|
17
17
|
// src/components/OutputData/index.tsx
|
|
18
18
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -69,4 +69,4 @@ var OutputData = ({
|
|
|
69
69
|
export {
|
|
70
70
|
OutputData
|
|
71
71
|
};
|
|
72
|
-
//# sourceMappingURL=chunk-
|
|
72
|
+
//# sourceMappingURL=chunk-UZALXR3J.js.map
|
|
@@ -73,7 +73,7 @@ var fetchWithAbort = (url, options = {}) => {
|
|
|
73
73
|
}, timeout);
|
|
74
74
|
window.fetch(url, opts).then(checkStatus).then(parseJSON).then((...args) => checkResponse(url, ...args, opts)).then((data) => resolve(data)).catch((error) => {
|
|
75
75
|
if (/HEAD/i.test(opts?.method || "")) {
|
|
76
|
-
return {};
|
|
76
|
+
return resolve({});
|
|
77
77
|
}
|
|
78
78
|
if (error.name === "TypeError") {
|
|
79
79
|
publishRequestError({ url, code: 20004 }, "http");
|
|
@@ -243,6 +243,18 @@ var reqAbiByMethodId = (methodId) => {
|
|
|
243
243
|
})
|
|
244
244
|
);
|
|
245
245
|
};
|
|
246
|
+
var fetchAddressNameMap = (addresses, params = {}) => {
|
|
247
|
+
const url = qs.stringifyUrl({
|
|
248
|
+
url: "/account/infos",
|
|
249
|
+
query: {
|
|
250
|
+
accounts: addresses.join(","),
|
|
251
|
+
...params
|
|
252
|
+
}
|
|
253
|
+
});
|
|
254
|
+
return fetchWithOpenApi(url, {
|
|
255
|
+
method: "GET"
|
|
256
|
+
});
|
|
257
|
+
};
|
|
246
258
|
|
|
247
259
|
export {
|
|
248
260
|
fetch,
|
|
@@ -257,6 +269,7 @@ export {
|
|
|
257
269
|
reqContractAndToken,
|
|
258
270
|
getContractDetail,
|
|
259
271
|
detectAccountType,
|
|
260
|
-
reqAbiByMethodId
|
|
272
|
+
reqAbiByMethodId,
|
|
273
|
+
fetchAddressNameMap
|
|
261
274
|
};
|
|
262
|
-
//# sourceMappingURL=chunk-
|
|
275
|
+
//# sourceMappingURL=chunk-VGYNHJFT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/request.ts"],"sourcesContent":["import qs from 'query-string';\nimport { publishRequestError } from './pubsub';\nimport {\n AddressNameMap,\n BaseContractInfo,\n DetectAccountTypeResponse,\n MethodAbiItemResponse,\n} from './request.types';\nimport { getEnvConfig } from '../store';\nimport { fetchWithCache } from './cache';\ninterface FetchWithAbortType<T> {\n promise: Promise<T>;\n abort: () => void;\n}\n\ninterface FetchOptions extends RequestInit {\n timeout?: number;\n}\n\nconst TIMEOUT_TIMESTAMP = 60000;\n\nconst checkStatus = (response: Response) => {\n if (\n (response.status >= 200 && response.status < 300) ||\n response.status === 600\n ) {\n return response;\n } else {\n const error = new Error(response.statusText);\n error.name = 'HttpError';\n (error as any).status = response.status;\n (error as any).response = response;\n throw error;\n }\n};\n\n// 格式化 response data\nconst parseJSON = async (response: Response) => {\n const contentType = response.headers.get('content-type');\n try {\n if (contentType?.includes('application/json')) {\n return { data: await response.json(), response };\n } else if (contentType?.includes('text/html')) {\n return { data: await response.text(), response };\n } else {\n // contentType 还有其他类型,目前项目中用不到\n // 不能简单的报错,比如 image/x-icon 是 favicon 请求\n // 此处直接返回 response,由业务代码处理其他类型的数据\n return { data: response, response };\n }\n } catch (error) {\n if ((error as any).name === 'AbortError') {\n return { data: response, response };\n }\n publishRequestError({ url: response.url, code: 20001 }, 'http');\n (error as any).response = response;\n throw error;\n }\n};\n\n// 检查返回值中是否包含错误\nconst checkResponse = function (\n url: string,\n {\n data,\n response,\n }: {\n data: any;\n response: Response;\n },\n opts: any,\n) {\n // 兼容 data.code 和 data.data, 是关于 core space 的数据结构\n if (response.status === 200 && (data.status === '1' || data.code === 0)) {\n return data.result || data.data;\n } else if (/HEAD/i.test(opts?.method || '')) {\n // handle of HEAD method\n return response;\n } else {\n const code = Number(data.status ?? data.code);\n publishRequestError({ url, code, message: data.message }, 'http');\n const error: Partial<ErrorEvent> & {\n response?: ResponseType;\n } = new Error(data.message);\n error.response = data;\n throw error;\n }\n};\n\nconst fetchWithAbort = <T>(\n url: string,\n options: FetchOptions = {},\n): FetchWithAbortType<T> => {\n const controller = new AbortController();\n const opts: FetchOptions = { ...options, signal: controller.signal };\n const timeout = options.timeout || TIMEOUT_TIMESTAMP;\n\n let timeoutId: ReturnType<typeof setTimeout>;\n const promise: Promise<T> = new Promise((resolve, reject) => {\n timeoutId = setTimeout(() => {\n controller.abort();\n publishRequestError(\n { url, code: 20002, message: 'Request timeout' },\n 'http',\n );\n reject(new Error('Request timeout'));\n }, timeout);\n\n window\n .fetch(url, opts)\n .then(checkStatus)\n .then(parseJSON)\n .then((...args) => checkResponse(url, ...args, opts))\n .then(data => resolve(data as T))\n .catch(error => {\n if (/HEAD/i.test(opts?.method || '')) {\n return resolve({} as T);\n }\n\n // A fetch() promise will reject with a TypeError when a network error is encountered or CORS is misconfigured on the server-side,\n // although this usually means permission issues or similar — a 404 does not constitute a network error, for example.\n // For detail: https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch\n if (error.name === 'TypeError') {\n publishRequestError({ url, code: 20004 }, 'http');\n reject(new Error('Network error'));\n } else if (error.name === 'AbortError') {\n publishRequestError(\n { url, code: 20003, message: 'Fetch aborted' },\n 'http',\n );\n reject(new Error('Fetch aborted'));\n } else {\n publishRequestError(\n { url, code: (error as any).status, message: error.message },\n 'http',\n );\n reject(error);\n }\n })\n .finally(() => clearTimeout(timeoutId));\n });\n\n return {\n promise,\n abort: () => {\n clearTimeout(timeoutId);\n controller.abort();\n },\n };\n};\n\nexport const fetch = <T>(\n url: string,\n options: FetchOptions = {},\n): Promise<T> => {\n const { promise } = fetchWithAbort<T>(url, options);\n return promise;\n};\n\nexport const appendApiPrefix = (url: string) => {\n // for cfx top N\n if (url.startsWith('/stat/')) {\n return url;\n }\n if (url.startsWith('http')) {\n return url;\n }\n return `/v1${url.startsWith('/') ? url : '/' + url}`;\n};\n\nexport const fetchWithPrefix = <T>(url: string, opts?: FetchOptions) => {\n return fetch<T>(appendApiPrefix(url), opts);\n};\n\nexport const fetchWithOpenApi = <T>(url: string, opts?: FetchOptions) => {\n const ENV_CONFIG = getEnvConfig();\n if (!ENV_CONFIG.ENV_OPEN_API_HOST) {\n throw new Error('ENV_OPEN_API_HOST is not set');\n }\n return fetch<T>(\n `${ENV_CONFIG.ENV_OPEN_API_HOST}${url.startsWith('/') ? url : '/' + url}`,\n opts,\n );\n};\n\nexport const simpleGetFetcher = async <T>(...args: any[]) => {\n let [url, query] = args;\n if (query) {\n url = qs.stringifyUrl({ url, query });\n }\n return await fetchWithPrefix<T>(url, {\n method: 'get',\n });\n};\n\ntype RequestMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD';\ninterface QueryParams {\n [key: string]: string | undefined;\n}\ninterface Config {\n url: string;\n query: QueryParams;\n type?: RequestMethod;\n body?: any;\n headers?: Headers;\n signal?: AbortSignal;\n}\n\nconst queryAddress = (address: string[]) => {\n return address.reduce((prev, curr, index) => {\n return !index ? `address=${curr}` : `${prev}&address=${curr}`;\n }, '');\n};\n\nexport const sendRequestChart = async (config: Config) => {\n try {\n const res: any = await fetch(\n qs.stringifyUrl({ url: config.url, query: config.query }),\n {\n method: config.type || 'GET',\n body: config.body,\n headers: config.headers,\n signal: config.signal,\n },\n );\n const data = res;\n data.list = [...(data.list || [])].reverse();\n return data;\n } catch (error) {\n console.error('Request failed', error);\n throw error;\n }\n};\n\nexport const sendRequestENSInfo = async (url?: string | null) => {\n if (!url) return {};\n try {\n const res: any = await fetch(url, {\n method: 'GET',\n });\n\n return res?.map;\n } catch (error) {\n console.error('Request failed', error);\n throw error;\n }\n};\n\nexport const sendRequestGasPrice = async () => {\n try {\n const res: any = await fetch(`/stat/gasprice/tracker`, {\n method: 'GET',\n });\n return res;\n } catch (error) {\n console.error('Request failed', error);\n throw error;\n }\n};\n\nexport const reqNametag = async (address: string[]) => {\n const query = queryAddress(address);\n\n const res: any = await fetch(`/v1/nametag?${query}`, {\n method: 'GET',\n });\n return res?.map;\n};\n\nexport const reqContractAndToken = fetchWithCache(\n async (address: string[]) => {\n const query = queryAddress(address);\n\n const res: any = await fetch(`/v1/contract-and-token?${query}`, {\n method: 'GET',\n });\n return res;\n },\n {\n key: 'contract-and-token',\n maxAge: 1000 * 60 * 60,\n },\n);\n\nexport const getContractDetail = fetchWithCache(\n <T extends string>(contractAddress?: string, fields: T[] = []) => {\n const url = qs.stringifyUrl({\n url: `/v1/contract/${contractAddress}`,\n query: { fields },\n });\n\n return fetch<BaseContractInfo & Record<T, unknown>>(url, {\n method: 'GET',\n });\n },\n {\n key: 'contract-detail',\n maxAge: 1000 * 60 * 60,\n },\n);\n\nexport const detectAccountType = fetchWithCache(\n (address: string) => {\n return fetchWithOpenApi<DetectAccountTypeResponse>(\n `/util/detectAccountType?hex=${address}`,\n {\n method: 'GET',\n },\n );\n },\n {\n // 10 seconds\n maxAge: 1000 * 10,\n },\n);\n\nexport const reqAbiByMethodId = (methodId: string) => {\n return fetchWithPrefix<{\n list: MethodAbiItemResponse[];\n }>(\n qs.stringifyUrl({\n url: '/stat/list-abi-method',\n query: {\n id: methodId,\n },\n }),\n );\n};\n\nexport const fetchAddressNameMap = (\n addresses: string[],\n params: {\n withContractInfo?: 'true' | 'false';\n withNameTagInfo?: 'true' | 'false';\n withENSInfo?: 'true' | 'false';\n } = {},\n) => {\n const url = qs.stringifyUrl({\n url: '/account/infos',\n query: {\n accounts: addresses.join(','),\n ...params,\n },\n });\n return fetchWithOpenApi<Record<string, AddressNameMap>>(url, {\n method: 'GET',\n });\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useDecodeFunctionData
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XZL5CZFT.js";
|
|
4
4
|
import {
|
|
5
5
|
useDecodedDataType
|
|
6
6
|
} from "./chunk-UM5J477V.js";
|
|
7
7
|
import {
|
|
8
8
|
Select
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-GHHUAWSG.js";
|
|
10
10
|
import {
|
|
11
11
|
OutputData
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-UZALXR3J.js";
|
|
13
13
|
import {
|
|
14
14
|
InputData
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-7VQL3G7K.js";
|
|
16
16
|
import {
|
|
17
17
|
AbiWarning
|
|
18
18
|
} from "./chunk-XBEBAU77.js";
|
|
@@ -189,4 +189,4 @@ var TraceDetail = (props) => {
|
|
|
189
189
|
export {
|
|
190
190
|
TraceDetail
|
|
191
191
|
};
|
|
192
|
-
//# sourceMappingURL=chunk-
|
|
192
|
+
//# sourceMappingURL=chunk-W64AF7LA.js.map
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isZeroAddress
|
|
3
|
+
} from "./chunk-6L4ZEJQI.js";
|
|
4
|
+
|
|
5
|
+
// src/components/AddressContainer/utils.ts
|
|
6
|
+
var getPocketAlias = ({
|
|
7
|
+
type,
|
|
8
|
+
address,
|
|
9
|
+
pocket
|
|
10
|
+
}) => {
|
|
11
|
+
if (!isZeroAddress(address))
|
|
12
|
+
return null;
|
|
13
|
+
if (pocket === "mint_or_burn") {
|
|
14
|
+
return type === "from" ? "System mint" : "System burn";
|
|
15
|
+
}
|
|
16
|
+
if (pocket === "gas_payment") {
|
|
17
|
+
return "System gas_payment";
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
};
|
|
21
|
+
var getAddressNameInfo = (address, nameMap) => {
|
|
22
|
+
if (!nameMap || !address)
|
|
23
|
+
return null;
|
|
24
|
+
const info = nameMap[address] || nameMap[address.toLowerCase()];
|
|
25
|
+
if (!info)
|
|
26
|
+
return null;
|
|
27
|
+
return {
|
|
28
|
+
tokenName: info.token?.name,
|
|
29
|
+
tokenSymbol: info.token?.symbol,
|
|
30
|
+
tokenDecimals: info.token?.decimals,
|
|
31
|
+
tokenIconUrl: info.token?.iconUrl,
|
|
32
|
+
isContract: !!info.contract,
|
|
33
|
+
contractName: info.contract?.name,
|
|
34
|
+
verify: !!info.verification?.name,
|
|
35
|
+
verificationName: info.verification?.name,
|
|
36
|
+
nametag: info.nameTag?.nameTag,
|
|
37
|
+
ensName: info.ens?.name,
|
|
38
|
+
// only for core space
|
|
39
|
+
isEspaceAddress: !!info.eSpace?.address,
|
|
40
|
+
// contract token name > contract tag > contract name
|
|
41
|
+
// alias: info.token?.name || info.contract?.name || info.verification?.name,
|
|
42
|
+
alias: info.token?.name || info.contract?.name,
|
|
43
|
+
originInfo: info
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
getPocketAlias,
|
|
49
|
+
getAddressNameInfo
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=chunk-WZIT54AU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/AddressContainer/utils.ts"],"sourcesContent":["import { isZeroAddress } from 'src/utils/address';\nimport { AddressNameMap, Pocket } from 'src/utils/request.types';\n\n// https://app.clickup.com/3719212/v/dc/3hg1c-23878/3hg1c-21778?block=block-vVZ_AG9Btz\nexport const getPocketAlias = ({\n type,\n address,\n pocket,\n}: {\n type: 'from' | 'to';\n address: string;\n pocket?: Pocket;\n}): string | null => {\n // only show pocket info when address is zero address\n if (!isZeroAddress(address)) return null;\n\n if (pocket === 'mint_or_burn') {\n return type === 'from' ? 'System mint' : 'System burn';\n }\n if (pocket === 'gas_payment') {\n return 'System gas_payment';\n }\n return null;\n};\n\nexport const getAddressNameInfo = (\n address?: string,\n nameMap?: Record<string, AddressNameMap>,\n) => {\n if (!nameMap || !address) return null;\n const info = nameMap[address] || nameMap[address.toLowerCase()];\n if (!info) return null;\n return {\n tokenName: info.token?.name,\n tokenSymbol: info.token?.symbol,\n tokenDecimals: info.token?.decimals,\n tokenIconUrl: info.token?.iconUrl,\n isContract: !!info.contract,\n contractName: info.contract?.name,\n verify: !!info.verification?.name,\n verificationName: info.verification?.name,\n nametag: info.nameTag?.nameTag,\n ensName: info.ens?.name,\n // only for core space\n isEspaceAddress: !!info.eSpace?.address,\n // contract token name > contract tag > contract name\n // alias: info.token?.name || info.contract?.name || info.verification?.name,\n alias: info.token?.name || info.contract?.name,\n originInfo: info,\n };\n};\n"],"mappings":";;;;;AAIO,IAAM,iBAAiB,CAAC;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,MAIqB;AAEnB,MAAI,CAAC,cAAc,OAAO;AAAG,WAAO;AAEpC,MAAI,WAAW,gBAAgB;AAC7B,WAAO,SAAS,SAAS,gBAAgB;AAAA,EAC3C;AACA,MAAI,WAAW,eAAe;AAC5B,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEO,IAAM,qBAAqB,CAChC,SACA,YACG;AACH,MAAI,CAAC,WAAW,CAAC;AAAS,WAAO;AACjC,QAAM,OAAO,QAAQ,OAAO,KAAK,QAAQ,QAAQ,YAAY,CAAC;AAC9D,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO;AAAA,IACL,WAAW,KAAK,OAAO;AAAA,IACvB,aAAa,KAAK,OAAO;AAAA,IACzB,eAAe,KAAK,OAAO;AAAA,IAC3B,cAAc,KAAK,OAAO;AAAA,IAC1B,YAAY,CAAC,CAAC,KAAK;AAAA,IACnB,cAAc,KAAK,UAAU;AAAA,IAC7B,QAAQ,CAAC,CAAC,KAAK,cAAc;AAAA,IAC7B,kBAAkB,KAAK,cAAc;AAAA,IACrC,SAAS,KAAK,SAAS;AAAA,IACvB,SAAS,KAAK,KAAK;AAAA;AAAA,IAEnB,iBAAiB,CAAC,CAAC,KAAK,QAAQ;AAAA;AAAA;AAAA,IAGhC,OAAO,KAAK,OAAO,QAAQ,KAAK,UAAU;AAAA,IAC1C,YAAY;AAAA,EACd;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useMethodAbi
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-BEI5TWJL.js";
|
|
4
4
|
import {
|
|
5
5
|
decodeFunctionData,
|
|
6
6
|
decodeFunctionResult
|
|
@@ -10,10 +10,10 @@ import {
|
|
|
10
10
|
} from "./chunk-JIRLY7OG.js";
|
|
11
11
|
import {
|
|
12
12
|
useContractDetail
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-LCIBOT5P.js";
|
|
14
14
|
import {
|
|
15
15
|
formatABI
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-NM3BMITL.js";
|
|
17
17
|
|
|
18
18
|
// src/utils/hooks/useDecodeFunctionData.ts
|
|
19
19
|
import { useMemo } from "react";
|
|
@@ -41,13 +41,13 @@ var decodeFunctionDataByAbi = ({
|
|
|
41
41
|
});
|
|
42
42
|
let decodedResults = success ? !isReturnDataEmpty ? decodeFunctionResult({
|
|
43
43
|
abi,
|
|
44
|
-
functionName:
|
|
44
|
+
functionName: methodID,
|
|
45
45
|
data: output,
|
|
46
46
|
space
|
|
47
47
|
}) : void 0 : output;
|
|
48
48
|
const abiItem = getAbiItem({
|
|
49
49
|
abi,
|
|
50
|
-
name:
|
|
50
|
+
name: methodID
|
|
51
51
|
});
|
|
52
52
|
const results = decodedResults === void 0 ? void 0 : abiItem.outputs.length === 1 ? [decodedResults] : decodedResults;
|
|
53
53
|
if (!withOutput) {
|
|
@@ -199,4 +199,4 @@ var useDecodeFunctionData = ({
|
|
|
199
199
|
export {
|
|
200
200
|
useDecodeFunctionData
|
|
201
201
|
};
|
|
202
|
-
//# sourceMappingURL=chunk-
|
|
202
|
+
//# sourceMappingURL=chunk-XZL5CZFT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/hooks/useDecodeFunctionData.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport {\n decodeFunctionData,\n decodeFunctionResult,\n getAbiItem,\n AbiFunctionWithoutGas,\n} from 'src/utils/sdk';\nimport { useContractDetail } from './useContractDetail';\nimport { formatABI } from '..';\nimport { useMethodAbi } from './useMethodAbi';\n\nconst fields = ['abi' as const];\n\nexport type Hex = `0x${string}`;\n\nconst decodeFunctionDataByAbi = ({\n abi: _abi,\n input,\n output,\n space,\n success,\n withOutput = false,\n similarWarning,\n}: {\n input: Hex;\n output?: Hex;\n abi?: AbiFunctionWithoutGas[] | string;\n space: 'evm' | 'core';\n success?: boolean;\n withOutput?: boolean;\n similarWarning?: boolean;\n}) => {\n try {\n const abi = typeof _abi === 'string' ? JSON.parse(_abi) : _abi;\n const hasAbi = abi && abi.length > 0;\n if (!hasAbi) return null;\n const isReturnDataEmpty = !output || output === '0x';\n const methodID = input.slice(0, 10);\n const decodedParams = decodeFunctionData({\n abi: abi,\n data: input,\n space,\n });\n let decodedResults = success\n ? !isReturnDataEmpty\n ? decodeFunctionResult({\n abi: abi,\n functionName: methodID,\n data: output,\n space,\n })\n : undefined\n : output;\n const abiItem = getAbiItem({\n abi: abi,\n name: methodID,\n }) as AbiFunctionWithoutGas;\n // if the output has only one value, decodeFunctionResult will return the value directly, otherwise it will return an array,\n // so we need to check the length of abiItem.outputs to determine whether to wrap decodedResults in an array\n const results =\n decodedResults === undefined\n ? undefined\n : abiItem.outputs.length === 1\n ? [decodedResults]\n : (decodedResults as unknown[]);\n if (!withOutput) {\n abiItem.outputs = [];\n }\n const fullName = formatABI([abiItem])[0];\n return {\n decodedParams,\n decodedResults: results,\n abiItem,\n fullName: fullName,\n failed: false,\n similarWarning,\n };\n } catch (error) {\n console.log('decode function data and result error', error);\n return {\n failed: true,\n similarWarning,\n };\n }\n};\n\nexport interface DecodedFunctionData {\n decodedParams?: {\n args: readonly unknown[] | undefined;\n functionName: string;\n };\n decodedResults?: unknown[];\n abiItem?: AbiFunctionWithoutGas;\n fullName?: string;\n // no abi for decoded\n noAbi?: boolean;\n // decoded failed\n failed?: boolean;\n // decoded by method abi, not contract abi\n similarWarning?: boolean;\n}\n\nexport const useDecodeFunctionData = ({\n to,\n abi: outerAbi,\n implementation: _implementation,\n input,\n output,\n space,\n success,\n supportMethodAbi,\n withOutput,\n}: {\n input: Hex;\n output?: Hex;\n to?: string;\n implementation?: string;\n abi?: AbiFunctionWithoutGas[];\n space: 'evm' | 'core';\n success?: boolean;\n supportMethodAbi?: boolean;\n withOutput?: boolean;\n}): [DecodedFunctionData, boolean] => {\n const hasOuterAbi = outerAbi && outerAbi.length > 0;\n const needContractAbi = !hasOuterAbi && !!input;\n const { data: contractData, isLoading: contractLoading } = useContractDetail(\n to,\n fields,\n needContractAbi,\n );\n const implementation =\n _implementation ?? contractData?.implementation?.address;\n const { data: implementationData, isLoading: implementationLoading } =\n useContractDetail(implementation, fields, needContractAbi);\n const decodedByOuterAbi = useMemo(() => {\n return decodeFunctionDataByAbi({\n abi: outerAbi,\n input,\n output,\n space,\n success,\n withOutput,\n });\n }, [input, output, outerAbi, success, space, withOutput]);\n const decodedByContractAbi = useMemo(() => {\n if (!contractData?.abi) return null;\n return decodeFunctionDataByAbi({\n abi: contractData.abi as string,\n input,\n output,\n space,\n success,\n withOutput,\n });\n }, [input, output, contractData?.abi, success, space, withOutput]);\n const decodedByImplementationAbi = useMemo(() => {\n if (!implementationData?.abi) return null;\n return decodeFunctionDataByAbi({\n abi: implementationData.abi as string,\n input,\n output,\n space,\n success,\n withOutput,\n });\n }, [input, output, implementationData?.abi, success, space, withOutput]);\n const needMethodAbi =\n !!supportMethodAbi &&\n needContractAbi &&\n // contract abi decoded failed\n !contractLoading &&\n (!decodedByContractAbi || decodedByContractAbi.failed) &&\n // implementation contract abi decoded failed\n !implementationLoading &&\n (!decodedByImplementationAbi || decodedByImplementationAbi.failed);\n const { data: methodAbi, isLoading: methodAbiLoading } = useMethodAbi(\n input.slice(0, 10),\n needMethodAbi,\n );\n const decodedByMethodAbi = useMemo(() => {\n // decode tx data with function abi only if there is only one function\n if (!methodAbi || methodAbi.list.length !== 1) return null;\n try {\n // e.g. transfer(address,uint256)\n const fullName = methodAbi.list[0]!.fullName;\n // e.g. function transfer(address recipient, uint256 amount) returns (bool)\n const formatWithArg = methodAbi.list[0]!.formatWithArg;\n const abi = formatABI([formatWithArg || `function ${fullName}`], {\n json: true,\n });\n return decodeFunctionDataByAbi({\n abi: abi,\n input,\n output,\n space,\n success,\n withOutput,\n similarWarning: true,\n });\n } catch (error) {\n console.log('decode function data and result error', error);\n return {\n failed: true,\n };\n }\n }, [input, output, methodAbi, success, space, withOutput]);\n\n return useMemo(() => {\n if (!input) return [{}, false];\n if (decodedByOuterAbi && !decodedByOuterAbi.failed)\n return [decodedByOuterAbi, false];\n if (decodedByImplementationAbi && !decodedByImplementationAbi.failed)\n return [decodedByImplementationAbi, implementationLoading];\n if (decodedByContractAbi && !decodedByContractAbi.failed)\n return [decodedByContractAbi, contractLoading];\n if (decodedByMethodAbi && !decodedByMethodAbi.failed)\n return [decodedByMethodAbi, methodAbiLoading];\n if (implementationLoading || contractLoading || methodAbiLoading) {\n return [{}, true];\n }\n if (\n (decodedByOuterAbi && decodedByOuterAbi.failed) ||\n (decodedByImplementationAbi && decodedByImplementationAbi.failed) ||\n (decodedByContractAbi && decodedByContractAbi.failed) ||\n (decodedByMethodAbi && decodedByMethodAbi.failed)\n ) {\n return [\n {\n failed: true,\n },\n false,\n ];\n }\n return [\n {\n noAbi: true,\n },\n false,\n ];\n }, [\n input,\n decodedByOuterAbi,\n decodedByContractAbi,\n decodedByImplementationAbi,\n decodedByMethodAbi,\n contractLoading,\n implementationLoading,\n methodAbiLoading,\n ]);\n};\n"],"mappings":"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","names":[]}
|