Browser-only Ethereum traffic profiler with:
- Concurrent block scanning
- Provider presets (Infura, Alchemy, Erigon, Public Node, Local)
- Optional dual-pass token detection (logs + receipts)
- Rich tx-type breakdown (ETH, ERC-20/721/1155, mixed token activity)
- Token metadata panel (ERC-20 name/symbol/decimals)
- CSV upload for offline visualization
- Spamoor scenario YAML export (combined + per-scenario)
- Live/Offline mode indicator
Everything runs in your browser using a JSON-RPC endpoint (no backend service).
EVM_Profiler_pro_plus_tokens_csv.html– single-page app, open directly in a modern browser.- Output artifacts created via buttons in the UI:
summary.json– JSON summary of the runper_block.csv– per-block stats for the scanned rangetokens.json– resolved token metadata and usage countsspamoor_scenarios.yaml– combined Spamoor scenarios approximating the observed mixspamoor_<scenario>.yaml– one YAML file per scenario (e.g.spamoor_eoatx.yaml,spamoor_erctx.yaml, etc.)
You do not need block_profiler.py for the browser-only mode, but you can still use CSV upload to visualize outputs from a separate CLI if you want.
- Modern browser (Chrome / Edge / Firefox / Safari).
- An Ethereum JSON-RPC URL with archive or near-archive coverage for your target range, for example:
- Infura
- Alchemy
- Public Node
- Local Erigon / Geth / Nethermind
No Node.js or Python is required for this HTML-only workflow.
At the top of the page, next to the subtitle, there is a mode pill:
- 🟢 Live RPC – the current view is based on a live RPC scan.
- 🟠 Offline CSV – the current view is based purely on a loaded CSV file.
The mode pill updates automatically when:
- You run a new profile via RPC (Live RPC).
- You load a CSV (Offline CSV).
This makes it clear at a glance whether the charts and tables are coming from a live run or an offline artifact.
-
Open the HTML file
Open
EVM_Profiler_pro_plus_tokens_csv.htmlin your browser (double-click or drag into a tab). -
Connect to RPC
- Paste your RPC URL into the RPC field.
- Click Connect.
- Status will show Connected and the heartbeat indicator turns green if successful.
-
Choose a provider preset (optional but recommended)
Use the Provider dropdown:
Infura– conservative page size and concurrencyAlchemy– slightly larger page & higher concurrencyErigon/Local– aggressive settings for local nodesPublic Node– safer settings for shared endpointsCustom– lets you manually tune everything
The preset will auto-fill:
- Page – number of blocks per chunk
- Conc. – concurrency for block fetching
- Internal logs-scan step size for dual-pass mode
-
Set block range
- Start – starting block number (inclusive)
- End – ending block number (inclusive)
-
Optional settings
- Page – chunk size in blocks (overrides preset if changed)
- Conc. – number of concurrent block fetch workers
- Skip contract check – if enabled (default), skips
eth_getCodechecks (faster). - Dual-pass (logs + receipts) – if enabled:
- Pass 1 scans logs for token transfers and collects tx hashes.
- Pass 2 fetches receipts only for token-related txs.
- Tx cap – optional integer to stop after a given number of txs (even if block range is not fully processed).
-
Run & Stop
- Click ▶ Run to start profiling.
- Progress bar and block text show how far the scan has progressed.
- The heartbeat indicator shows the current activity (logs scan, block, etc.).
- Click ■ Stop to safely request cancellation:
- All loops and workers check a shared cancellation flag.
- Logs pass and block pass both terminate cleanly.
-
Inspect results
After a successful run:
- Overview panel shows:
- Block range and count
- Total tx and approximate tx/sec
- Dominant tx type and count
- Chain ID and whether data is live or from CSV
- Transaction types section:
- Bar chart of tx counts by type
- Doughnut chart of share by type
- Tx-type table:
- Per-type count
- Gas used
- Avg gas price in gwei
- Overview panel shows:
Tx types include:
eth_transfercontract_creationerc20_transfererc721_transfererc1155_transfermixed_token_activityother_contract_call
The Token metadata panel shows ERC-20-like contracts observed during the run and lets you resolve basic metadata.
During classification, whenever a log with Transfer(address,address,uint256) is seen:
- The log’s
addressis treated as a token contract. - Its address is added to the token list.
- A simple
tx_countfor that token is maintained.
- Run a profile over a block range that includes token transfers.
- In the Token metadata panel, click Resolve ERC-20 metadata.
- For each observed token address, the app will attempt to call:
symbol()name()decimals()
- The table will fill in:
- Address
- Symbol
- Name
- Decimals
- Tx count
Note: Some contracts may not implement standard ERC-20 methods or may revert. Those entries will keep
?/blank fields.
- Click Export tokens.json to download a JSON array of objects:
{ "address": "0x...", "tx_count": 123, "symbol": "TOKEN", "name": "Token Name", "decimals": 18, "resolved": true }
You can feed this into other tools or merge with your own token registry.
You can visualize results from a previous run (or from another tool) without any RPC calls using CSV offline mode.
The UI expects a CSV roughly matching the per_block.csv that this tool generates, with at least:
block_numbertimestamp(UNIX seconds)tx_count
And ideally:
eth_transfercontract_creationerc20_transfererc721_transfererc1155_transfermixed_token_activityother_contract_callblock_gas_usedblock_gas_limit
Column order doesn’t matter, but header names do.
- Click Choose file (file picker) next to Offline mode.
- Select a CSV (e.g., one produced by per_block.csv export).
- Click Load CSV.
The app will:
- Parse the CSV entirely in the browser.
- Rebuild an internal
summaryandperBlockRowsfrom the data. - Re-render:
- Overview panel
- Tx-type charts
- Tx-type table
The mode pill will switch to Offline CSV to indicate you’re viewing offline data.
There are now two Spamoor export buttons:
- Spamoor YAML (combined)
- Exports a single
spamoor_scenarios.yamlfile containing all scenarios in one YAML stream.
- Exports a single
- Spamoor YAML (per scenario)
- Exports one YAML file per scenario, e.g.:
spamoor_eoatx.yamlspamoor_erctx.yamlspamoor_deploytx.yamlspamoor_calltx.yaml
- Exports one YAML file per scenario, e.g.:
- Maps tx types to scenario kinds:
eth_transfer→eoatxerc20_transfer→erctxcontract_creation→deploytx- Everything else →
calltx
- Estimates throughput per scenario based on:
- Observed counts
- Approximate slots inferred from block timestamps
- Approximates
base_feefrom average gas price minus a default tip. - Sets basic refill, wallet, and pending config values.
You can paste or refine these scenarios inside your Spamoor configs or run them individually using the per-scenario YAMLs.
- If your provider rate-limits you:
- Lower Conc. (e.g. 2–4)
- Lower Page size
- Consider disabling Dual-pass if logs are heavy.
- If runs feel slow but stable:
- Increase Page and Conc. cautiously, especially on local nodes.
- If token resolution is flaky:
- Some tokens use non-standard ABIs or revert on metadata calls—this is expected.
- All computation happens in your browser; RPC keys are not sent anywhere else.
- RPC endpoints should be treated as secrets; do not commit this HTML with a hard-coded key.
- For very large ranges, use Tx cap and/or Dual-pass to keep calls manageable.
Enjoy profiling your chain traffic in the browser!