All checks were successful
check / check (push) Successful in 9s
## Summary Adds Sepolia testnet support to AutistMask. ### Changes - **New `src/shared/networks.js`** — centralized network definitions (mainnet + Sepolia) with chain IDs, default RPC/Blockscout endpoints, and block explorer URLs - **State management** — `networkId` added to persisted state; defaults to mainnet for backward compatibility - **Settings UI** — network selector dropdown lets users switch between Ethereum Mainnet and Sepolia Testnet - **Dynamic explorer links** — all hardcoded `etherscan.io` URLs replaced with dynamic links from the current network config (`sepolia.etherscan.io` for Sepolia) - **Background service** — `wallet_switchEthereumChain` now accepts both mainnet (0x1) and Sepolia (0xaa36a7); broadcasts `chainChanged` 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/api/v2` for Sepolia - **Etherscan labels** — phishing/scam checks use the correct explorer per network - **Price fetching** — skipped on testnets (testnet tokens have no real market value) - **RPC validation** — checks against the selected network's chain ID, not hardcoded mainnet - **ethers provider** — `getProvider()` uses the correct ethers `Network` for Sepolia ### API Endpoints Verified | Service | Mainnet | Sepolia | |---------|---------|--------| | Etherscan | etherscan.io | sepolia.etherscan.io | | Blockscout | eth.blockscout.com/api/v2 | eth-sepolia.blockscout.com/api/v2 | | RPC | ethereum-rpc.publicnode.com | ethereum-sepolia-rpc.publicnode.com | | CoinDesk (prices) | ✅ | N/A (skipped on testnet) | closes #110 Reviewed-on: #137 THIS WAS ONESHOTTED USING OPUS 4. WTAF Co-authored-by: clawbot <clawbot@noreply.example.org> Co-committed-by: clawbot <clawbot@noreply.example.org>
49 lines
1.5 KiB
JavaScript
49 lines
1.5 KiB
JavaScript
const DEBUG = true;
|
|
const DEBUG_MNEMONIC =
|
|
"cube evolve unfold result inch risk jealous skill hotel bulb night wreck";
|
|
|
|
const ETHEREUM_MAINNET_CHAIN_ID = "0x1";
|
|
const ETHEREUM_SEPOLIA_CHAIN_ID = "0xaa36a7";
|
|
|
|
const DEFAULT_RPC_URL = "https://ethereum-rpc.publicnode.com";
|
|
|
|
const DEFAULT_BLOCKSCOUT_URL = "https://eth.blockscout.com/api/v2";
|
|
|
|
const BIP44_ETH_PATH = "m/44'/60'/0'/0";
|
|
|
|
const ERC20_ABI = [
|
|
"function name() view returns (string)",
|
|
"function symbol() view returns (string)",
|
|
"function decimals() view returns (uint8)",
|
|
"function balanceOf(address) view returns (uint256)",
|
|
"function transfer(address to, uint256 amount) returns (bool)",
|
|
"function allowance(address owner, address spender) view returns (uint256)",
|
|
"function approve(address spender, uint256 amount) returns (bool)",
|
|
];
|
|
|
|
// Known null/burn addresses that permanently destroy funds.
|
|
const BURN_ADDRESSES = new Set([
|
|
"0x0000000000000000000000000000000000000000",
|
|
"0x0000000000000000000000000000000000000001",
|
|
"0x000000000000000000000000000000000000dead",
|
|
"0xdead000000000000000000000000000000000000",
|
|
"0x00000000000000000000000000000000deadbeef",
|
|
]);
|
|
|
|
function isBurnAddress(address) {
|
|
return BURN_ADDRESSES.has(address.toLowerCase());
|
|
}
|
|
|
|
module.exports = {
|
|
DEBUG,
|
|
DEBUG_MNEMONIC,
|
|
ETHEREUM_MAINNET_CHAIN_ID,
|
|
ETHEREUM_SEPOLIA_CHAIN_ID,
|
|
DEFAULT_RPC_URL,
|
|
DEFAULT_BLOCKSCOUT_URL,
|
|
BIP44_ETH_PATH,
|
|
ERC20_ABI,
|
|
BURN_ADDRESSES,
|
|
isBurnAddress,
|
|
};
|