Skip to content

Commit d3fd751

Browse files
committed
merge: resolve conflicts with upstream/dev
2 parents 2a68810 + 727b28e commit d3fd751

20 files changed

Lines changed: 234 additions & 7 deletions

public/kleros-logo.png

2.48 KB
Loading

src/components/pages/evm/address/displays/AccountDisplay.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import type React from "react";
22
import { useCallback, useMemo, useState } from "react";
33
import { getNetworkById } from "../../../../../config/networks";
4+
import type { KlerosTag } from "../../../../../services/KlerosService";
45
import type { Address, ENSReverseResult, RPCMetadata, Transaction } from "../../../../../types";
56
import AIAnalysisPanel from "../../../../common/AIAnalysis/AIAnalysisPanel";
67
import { AddressHeader, TransactionHistory } from "../shared";
@@ -18,6 +19,7 @@ interface AccountDisplayProps {
1819
ensName?: string | null;
1920
reverseResult?: ENSReverseResult | null;
2021
isMainnet?: boolean;
22+
klerosTag?: KlerosTag | null;
2123
}
2224

2325
const AccountDisplay: React.FC<AccountDisplayProps> = ({
@@ -30,6 +32,7 @@ const AccountDisplay: React.FC<AccountDisplayProps> = ({
3032
ensName,
3133
reverseResult,
3234
isMainnet = true,
35+
klerosTag,
3336
}) => {
3437
const network = getNetworkById(networkId);
3538
const networkName = network?.name ?? "Unknown Network";
@@ -83,6 +86,7 @@ const AccountDisplay: React.FC<AccountDisplayProps> = ({
8386
metadata={metadata}
8487
selectedProvider={selectedProvider}
8588
onProviderSelect={onProviderSelect}
89+
klerosTag={klerosTag}
8690
/>
8791

8892
<div className="address-section-content">

src/components/pages/evm/address/displays/ContractDisplay.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { useContext, useMemo } from "react";
33
import { getNetworkById } from "../../../../../config/networks";
44
import { AppContext } from "../../../../../context";
55
import { useSourcify } from "../../../../../hooks/useSourcify";
6+
import type { KlerosTag } from "../../../../../services/KlerosService";
67
import type { Address, ENSReverseResult, RPCMetadata } from "../../../../../types";
78
import AIAnalysisPanel from "../../../../common/AIAnalysis/AIAnalysisPanel";
89
import { AddressHeader } from "../shared";
@@ -23,6 +24,7 @@ interface ContractDisplayProps {
2324
ensName?: string | null;
2425
reverseResult?: ENSReverseResult | null;
2526
isMainnet?: boolean;
27+
klerosTag?: KlerosTag | null;
2628
}
2729

2830
const ContractDisplay: React.FC<ContractDisplayProps> = ({
@@ -35,6 +37,7 @@ const ContractDisplay: React.FC<ContractDisplayProps> = ({
3537
ensName,
3638
reverseResult,
3739
isMainnet = true,
40+
klerosTag,
3841
}) => {
3942
const { jsonFiles } = useContext(AppContext);
4043
const network = getNetworkById(networkId);
@@ -127,6 +130,7 @@ const ContractDisplay: React.FC<ContractDisplayProps> = ({
127130
metadata={metadata}
128131
selectedProvider={selectedProvider}
129132
onProviderSelect={onProviderSelect}
133+
klerosTag={klerosTag}
130134
/>
131135

132136
<div className="address-section-content">

src/components/pages/evm/address/displays/ERC1155Display.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getAssetUrl,
99
type TokenMetadata,
1010
} from "../../../../../services/MetadataService";
11+
import type { KlerosTag } from "../../../../../services/KlerosService";
1112
import type { Address, ENSReverseResult, RPCMetadata } from "../../../../../types";
1213
import { decodeAbiString } from "../../../../../utils/hexUtils";
1314
import { logger } from "../../../../../utils/logger";
@@ -29,6 +30,7 @@ interface ERC1155DisplayProps {
2930
ensName?: string | null;
3031
reverseResult?: ENSReverseResult | null;
3132
isMainnet?: boolean;
33+
klerosTag?: KlerosTag | null;
3234
}
3335

3436
const ERC1155Display: React.FC<ERC1155DisplayProps> = ({
@@ -41,6 +43,7 @@ const ERC1155Display: React.FC<ERC1155DisplayProps> = ({
4143
ensName,
4244
reverseResult,
4345
isMainnet = true,
46+
klerosTag,
4447
}) => {
4548
const { jsonFiles, rpcUrls } = useContext(AppContext);
4649
const [tokenMetadata, setTokenMetadata] = useState<TokenMetadata | null>(null);
@@ -234,6 +237,7 @@ const ERC1155Display: React.FC<ERC1155DisplayProps> = ({
234237
onProviderSelect={onProviderSelect}
235238
tokenSymbol={collectionSymbol}
236239
tokenName={collectionName}
240+
klerosTag={klerosTag}
237241
/>
238242

239243
<div className="address-section-content">

src/components/pages/evm/address/displays/ERC20Display.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getAssetUrl,
99
type TokenMetadata,
1010
} from "../../../../../services/MetadataService";
11+
import type { KlerosTag } from "../../../../../services/KlerosService";
1112
import type { Address, ENSReverseResult, RPCMetadata } from "../../../../../types";
1213
import { hexToUtf8 } from "../../../../../utils/erc20Utils";
1314
import { logger } from "../../../../../utils/logger";
@@ -29,6 +30,7 @@ interface ERC20DisplayProps {
2930
ensName?: string | null;
3031
reverseResult?: ENSReverseResult | null;
3132
isMainnet?: boolean;
33+
klerosTag?: KlerosTag | null;
3234
}
3335

3436
const ERC20Display: React.FC<ERC20DisplayProps> = ({
@@ -41,6 +43,7 @@ const ERC20Display: React.FC<ERC20DisplayProps> = ({
4143
ensName,
4244
reverseResult,
4345
isMainnet = true,
46+
klerosTag,
4447
}) => {
4548
const { jsonFiles, rpcUrls } = useContext(AppContext);
4649
const [tokenMetadata, setTokenMetadata] = useState<TokenMetadata | null>(null);
@@ -247,6 +250,7 @@ const ERC20Display: React.FC<ERC20DisplayProps> = ({
247250
onProviderSelect={onProviderSelect}
248251
tokenSymbol={tokenSymbol}
249252
tokenName={tokenName}
253+
klerosTag={klerosTag}
250254
/>
251255

252256
<div className="address-section-content">

src/components/pages/evm/address/displays/ERC721Display.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
getAssetUrl,
99
type TokenMetadata,
1010
} from "../../../../../services/MetadataService";
11+
import type { KlerosTag } from "../../../../../services/KlerosService";
1112
import type { Address, ENSReverseResult, RPCMetadata } from "../../../../../types";
1213
import { decodeAbiString } from "../../../../../utils/hexUtils";
1314
import { logger } from "../../../../../utils/logger";
@@ -29,6 +30,7 @@ interface ERC721DisplayProps {
2930
ensName?: string | null;
3031
reverseResult?: ENSReverseResult | null;
3132
isMainnet?: boolean;
33+
klerosTag?: KlerosTag | null;
3234
}
3335

3436
const ERC721Display: React.FC<ERC721DisplayProps> = ({
@@ -41,6 +43,7 @@ const ERC721Display: React.FC<ERC721DisplayProps> = ({
4143
ensName,
4244
reverseResult,
4345
isMainnet = true,
46+
klerosTag,
4447
}) => {
4548
const { jsonFiles, rpcUrls } = useContext(AppContext);
4649
const [tokenMetadata, setTokenMetadata] = useState<TokenMetadata | null>(null);
@@ -216,6 +219,7 @@ const ERC721Display: React.FC<ERC721DisplayProps> = ({
216219
onProviderSelect={onProviderSelect}
217220
tokenSymbol={collectionSymbol}
218221
tokenName={collectionName}
222+
klerosTag={klerosTag}
219223
/>
220224

221225
<div className="address-section-content">

src/components/pages/evm/address/index.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { getNetworkById } from "../../../../config/networks";
55
import { AppContext } from "../../../../context";
66
import { useDataService } from "../../../../hooks/useDataService";
77
import { useENS } from "../../../../hooks/useENS";
8+
import { useKlerosTag } from "../../../../hooks/useKlerosTag";
89
import { useProviderSelection } from "../../../../hooks/useProviderSelection";
910
import { ENSService } from "../../../../services/ENS/ENSService";
1011
import type { Address as AddressData, AddressType, DataWithMetadata } from "../../../../types";
@@ -65,6 +66,8 @@ export default function Address() {
6566
`address_${numericNetworkId}_${address}`,
6667
);
6768

69+
const klerosTag = useKlerosTag(address, numericNetworkId);
70+
6871
// Resolve ENS name to address
6972
useEffect(() => {
7073
if (!isEnsName || !addressParam) {
@@ -263,6 +266,7 @@ export default function Address() {
263266
metadata: addressDataResult?.metadata,
264267
selectedProvider,
265268
onProviderSelect: setSelectedProvider,
269+
klerosTag,
266270
};
267271

268272
// Render appropriate display component based on detected type

src/components/pages/evm/address/shared/AddressHeader.tsx

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import type React from "react";
2+
import { useTranslation } from "react-i18next";
3+
import { getKlerosCurateItemUrl, type KlerosTag } from "../../../../../services/KlerosService";
24
import type { AddressType, RPCMetadata } from "../../../../../types";
35
import { getAddressTypeIcon, getAddressTypeLabel } from "../../../../../utils/addressTypeDetection";
46
import { RPCIndicator } from "../../../../common/RPCIndicator";
@@ -13,6 +15,7 @@ interface AddressHeaderProps {
1315
onProviderSelect?: (provider: string) => void;
1416
tokenSymbol?: string;
1517
tokenName?: string;
18+
klerosTag?: KlerosTag | null;
1619
}
1720

1821
// Truncate hash to show first and last N characters
@@ -32,7 +35,9 @@ const AddressHeader: React.FC<AddressHeaderProps> = ({
3235
onProviderSelect,
3336
tokenSymbol,
3437
tokenName,
38+
klerosTag,
3539
}) => {
40+
const { t } = useTranslation("address");
3641
const truncatedHash = truncateHash(addressHash, 4);
3742

3843
return (
@@ -42,6 +47,22 @@ const AddressHeader: React.FC<AddressHeaderProps> = ({
4247
<span className="address-type-icon">{getAddressTypeIcon(addressType)}</span>
4348
<span className="address-type-label">{getAddressTypeLabel(addressType)}</span>
4449
{tokenSymbol && <span className="address-token-symbol">{tokenSymbol}</span>}
50+
{klerosTag && (
51+
<a
52+
href={getKlerosCurateItemUrl(klerosTag.itemID)}
53+
target="_blank"
54+
rel="noopener noreferrer"
55+
className="kleros-verified-tag"
56+
title={t("klerosVerifiedTooltip")}
57+
>
58+
<img
59+
src={`${import.meta.env.BASE_URL}kleros-logo.png`}
60+
alt="Kleros"
61+
className="kleros-logo"
62+
/>
63+
{klerosTag.publicNameTag}
64+
</a>
65+
)}
4566
</div>
4667
{(ensName || tokenName) && <span className="address-ens-name">{ensName || tokenName}</span>}
4768
<span

src/components/pages/home/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ export default function Home() {
5454
const [showTestnets, setShowTestnets] = useState(false);
5555

5656
const { featuredNetworks, productionNetworks, testnetNetworks } = useMemo(() => {
57-
const isDevelopment = process.env.REACT_APP_ENVIRONMENT === "development";
57+
const isDevelopment = import.meta.env.VITE_ENVIRONMENT === "development";
5858
const localhostChainId = 31337;
5959

6060
// In development, treat localhost as a production network (show with other networks)

src/config/networks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ export function getEnabledNetworks(): NetworkConfig[] {
100100
const envNetworks = process.env.REACT_APP_OPENSCAN_NETWORKS;
101101
const localhostChainId = 31337;
102102

103-
// REACT_APP_ENVIRONMENT is set by webpack DefinePlugin based on NODE_ENV
104-
const isDevelopment = process.env.REACT_APP_ENVIRONMENT === "development";
103+
// VITE_ENVIRONMENT is injected via vite.config.ts define block based on NODE_ENV
104+
const isDevelopment = import.meta.env.VITE_ENVIRONMENT === "development";
105105

106106
// Check if localhost is explicitly enabled in REACT_APP_OPENSCAN_NETWORKS
107107
const isLocalhostExplicitlyEnabled = envNetworks

0 commit comments

Comments
 (0)