Add support for the Sepolia testnet alongside Ethereum mainnet: - New src/shared/networks.js with network definitions (mainnet + sepolia) including chain IDs, default RPC/Blockscout endpoints, and explorer URLs - State now tracks networkId; defaults to mainnet for backward compatibility - Network selector in Settings lets users switch between mainnet and Sepolia - Switching networks updates RPC URL, Blockscout URL, and chain ID - All hardcoded etherscan.io URLs replaced with dynamic explorer links from the current network config (sepolia.etherscan.io for Sepolia) - Background handles wallet_switchEthereumChain for both supported chains and broadcasts chainChanged events to connected dApps - Inpage provider fetches chain ID on init and updates dynamically via chainChanged events (no more hardcoded 0x1) - Blockscout API uses eth-sepolia.blockscout.com for Sepolia - Etherscan label/phishing checks use the correct explorer per network - Price fetching skipped on testnets (tokens have no real value) - RPC validation checks against the selected network's chain ID - getProvider() uses the correct ethers Network for Sepolia API endpoints verified: - Etherscan: sepolia.etherscan.io - Blockscout: eth-sepolia.blockscout.com/api/v2 - RPC: ethereum-sepolia-rpc.publicnode.com closes #110
This commit is contained in:
@@ -2,8 +2,6 @@
|
||||
// Extension users make the requests directly to Etherscan — no proxy needed.
|
||||
// This is a best-effort enrichment: network failures return null silently.
|
||||
|
||||
const ETHERSCAN_BASE = "https://etherscan.io/address/";
|
||||
|
||||
// Patterns in the page title that indicate a flagged address.
|
||||
// Title format: "Fake_Phishing184810 | Address: 0x... | Etherscan"
|
||||
const PHISHING_LABEL_PATTERNS = [/^Fake_Phishing/i, /^Phish:/i, /^Exploiter/i];
|
||||
@@ -74,12 +72,19 @@ function parseEtherscanPage(html) {
|
||||
* Returns a warning object if the address is flagged, or null.
|
||||
* Network failures return null silently (best-effort check).
|
||||
*
|
||||
* Uses the current network's explorer URL so the lookup works on both
|
||||
* mainnet (etherscan.io) and Sepolia (sepolia.etherscan.io).
|
||||
*
|
||||
* @param {string} address - Ethereum address to check.
|
||||
* @returns {Promise<{type: string, message: string, severity: string}|null>}
|
||||
*/
|
||||
async function checkEtherscanLabel(address) {
|
||||
try {
|
||||
const resp = await fetch(ETHERSCAN_BASE + address, {
|
||||
// Lazy require to avoid pulling in chrome.storage at module scope
|
||||
// (which breaks unit tests that only exercise parseEtherscanPage).
|
||||
const { currentNetwork } = require("./state");
|
||||
const etherscanBase = currentNetwork().explorerUrl + "/address/";
|
||||
const resp = await fetch(etherscanBase + address, {
|
||||
headers: { Accept: "text/html" },
|
||||
});
|
||||
if (!resp.ok) return null;
|
||||
|
||||
Reference in New Issue
Block a user