diff --git a/src/components/pages/evm/address/index.tsx b/src/components/pages/evm/address/index.tsx index 0ef43b3..90c637f 100644 --- a/src/components/pages/evm/address/index.tsx +++ b/src/components/pages/evm/address/index.tsx @@ -69,7 +69,7 @@ export default function Address() { return; } - const mainnetRpcUrls = rpcUrls[1]; + const mainnetRpcUrls = rpcUrls["eip155:1"]; if (!mainnetRpcUrls || mainnetRpcUrls.length === 0) { setEnsError(t("noRPCForEnsResolution")); setEnsResolving(false); diff --git a/src/components/pages/evm/address/shared/TransactionHistory.tsx b/src/components/pages/evm/address/shared/TransactionHistory.tsx index cffa9e5..e8a5bf4 100644 --- a/src/components/pages/evm/address/shared/TransactionHistory.tsx +++ b/src/components/pages/evm/address/shared/TransactionHistory.tsx @@ -230,8 +230,8 @@ const TransactionHistory: React.FC = ({ return; } - searchToBlockRef.current = range.fromBlock; loadMoreFromBlockRef.current = undefined; + searchToBlockRef.current = undefined; isAutoSearchRef.current = true; setAutoSearchPending(false); setSearchLimit(5); @@ -596,6 +596,8 @@ const TransactionHistory: React.FC = ({ ✓ Success ) : tx.receipt?.status === "0x0" || tx.receipt?.status === "0" ? ( ✗ Failed + ) : tx.blockNumber && parseInt(tx.blockNumber, 16) > 0 ? ( + Confirmed ) : ( ⏳ Pending )} diff --git a/src/hooks/useENS.ts b/src/hooks/useENS.ts index efcc7c5..e0c47b9 100644 --- a/src/hooks/useENS.ts +++ b/src/hooks/useENS.ts @@ -40,7 +40,7 @@ export function useENS( const isMainnet = chainId === 1; // Always use mainnet RPC for ENS resolution - const mainnetRpcUrls = rpcUrls[1]; + const mainnetRpcUrls = rpcUrls["eip155:1"]; // Memoize ENSService instance to avoid recreating on every render const ensService = useMemo(() => { @@ -140,7 +140,7 @@ export function useENSResolve(ensName: string | undefined): { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); - const mainnetRpcUrls = rpcUrls[1]; + const mainnetRpcUrls = rpcUrls["eip155:1"]; // Memoize ENSService instance const ensService = useMemo(() => { diff --git a/src/hooks/useSearch.ts b/src/hooks/useSearch.ts index ac6964f..280cc01 100644 --- a/src/hooks/useSearch.ts +++ b/src/hooks/useSearch.ts @@ -36,7 +36,7 @@ export function useSearch(): UseSearchResult { // Return the slug as networkId for backward compatibility const networkId = resolvedNetwork ? networkSlug : undefined; - const mainnetRpcUrls = rpcUrls[1]; + const mainnetRpcUrls = rpcUrls["eip155:1"]; // Memoize ENSService instance const ensService = useMemo(() => { diff --git a/src/services/AddressTransactionSearch.ts b/src/services/AddressTransactionSearch.ts index 9cb528e..f549f84 100644 --- a/src/services/AddressTransactionSearch.ts +++ b/src/services/AddressTransactionSearch.ts @@ -80,11 +80,25 @@ type TransactionFoundCallback = ( ) => void; /** - * Extract data from strategy result, handling both fallback and parallel modes + * Extract data from strategy result, handling both fallback and parallel modes. + * In parallel mode, StrategyResult.data is an array of RPCProviderResponse objects. + * We find the first successful response and return its inner data. */ function extractData(data: T | T[] | null | undefined): T | null { if (data === null || data === undefined) return null; - if (Array.isArray(data)) return data[0] ?? null; + if (Array.isArray(data)) { + const firstItem = data[0]; + // Parallel strategy wraps results in RPCProviderResponse objects + if (firstItem && typeof firstItem === "object" && "url" in firstItem && "status" in firstItem) { + // biome-ignore lint/suspicious/noExplicitAny: Provider response shape is dynamic + const successful = (data as any[]).find( + // biome-ignore lint/suspicious/noExplicitAny: Provider response shape is dynamic + (r: any) => r.status === "success" && r.data !== undefined, + ); + return successful ? (successful.data as T) : null; + } + return firstItem ?? null; + } return data; } diff --git a/src/styles/tables.css b/src/styles/tables.css index f70aa10..773df1e 100644 --- a/src/styles/tables.css +++ b/src/styles/tables.css @@ -158,6 +158,11 @@ color: var(--badge-warning-text); } +.table-status-confirmed { + background: var(--overlay-light-5); + color: var(--text-secondary); +} + /* Address Display Tables */ .address-table-container { overflow-x: auto;