{"id":23983615,"url":"https://github.com/jmcph4/blocktop","last_synced_at":"2025-10-04T23:12:00.962Z","repository":{"id":270530351,"uuid":"910663425","full_name":"jmcph4/blocktop","owner":"jmcph4","description":"A minimalist TUI block explorer for Ethereum networks","archived":false,"fork":false,"pushed_at":"2025-05-28T10:27:18.000Z","size":2178,"stargazers_count":17,"open_issues_count":13,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-14T10:16:09.554Z","etag":null,"topics":["block-explorer","blockchain","blockchain-indexer","blockchain-indexing","ethereum","rust-ethereum","sqlite","tui"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jmcph4.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["jmcph4"]}},"created_at":"2025-01-01T01:28:01.000Z","updated_at":"2025-06-02T10:23:17.000Z","dependencies_parsed_at":"2025-01-01T02:26:39.747Z","dependency_job_id":"ac132ca1-ce1c-4fab-b6a2-341651469cf2","html_url":"https://github.com/jmcph4/blocktop","commit_stats":null,"previous_names":["jmcph4/blocktop"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/jmcph4/blocktop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcph4%2Fblocktop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcph4%2Fblocktop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcph4%2Fblocktop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcph4%2Fblocktop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jmcph4","download_url":"https://codeload.github.com/jmcph4/blocktop/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jmcph4%2Fblocktop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278386130,"owners_count":25978113,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["block-explorer","blockchain","blockchain-indexer","blockchain-indexing","ethereum","rust-ethereum","sqlite","tui"],"created_at":"2025-01-07T12:19:12.442Z","updated_at":"2025-10-04T23:12:00.954Z","avatar_url":"https://github.com/jmcph4.png","language":"Rust","readme":"# blocktop #\n\n[![asciicast](https://asciinema.org/a/698693.svg)](https://asciinema.org/a/698693)\n\nMinimalist TUI block explorer for Ethereum networks.\n\n - Gain rapid insights into chain health by viewing new canonical blocks live in a visually clear, low-latency manner\n - Drill down into specific details of individual blocks and transactions\n - Store chain data to a relational schema using a simple, open format\n\nSee [FUNCTIONALITY](docs/FUNCTIONALITY.md) for the full feature list.\n\n## Installation ##\n\n```\n$ cargo install blocktop\n```\n\n**Note**: `blocktop` is alpha software is is not stable yet.\n\n## Usage ##\n\n```\nA minimalist TUI block explorer for Ethereum blockchains\n\nUsage: blocktop [OPTIONS]\n\nOptions:\n  -r, --rpc \u003cRPC\u003e                  [default: wss://eth.merkle.io]\n  -d, --db \u003cDB\u003e                    \n      --headless                   \n      --list-block-hashes          \n      --block \u003cBLOCK\u003e              \n      --transaction \u003cTRANSACTION\u003e  \n  -s, --serve                      \n  -m, --metrics                    \n  -p, --port \u003cPORT\u003e                \n  -h, --help                       Print help\n  -V, --version                    Print version\n```\n\n\nAt the moment, `blocktop` only supports Websockets or Unix domain sockets as transports for RPC communication. `blocktop` makes use of the [free Ethereum RPC service provided by Merkle](https://merkle.io/free-eth-rpc) by default.\n\n### TUI Mode ###\n\nThe default invocation (i.e., `blocktop`) will open the TUI and start retrieving data from the default Ethereum RPC node using an in-memory SQLite database.\n\n![Main page](https://pbs.twimg.com/media/GglTD6CbkAA1CpC?format=png\u0026name=large)\n\n#### Controls ####\n\n| Key | Action |\n| --- | --- |\n| `j`, `k`, `Up`, `Down` | Scrolls lists | \n| `e` | In block or transaction view, opens the block or transaction in [Etherscan](https://etherscan.io), respectively |\n| `q`, `Ctrl+c` | Exits the application |\n| `Esc` | Returns to the previous page or exits the application if on the main page |\n| `r` | Toggles the address display mode (i.e., labelled or raw) |\n| `l` | In block view, opens the block in [libMEV](https://libmev.com) |\n\n### Headless Mode ###\n\nTo invoke solely the indexer without the TUI frontend, specify the `--headless` flag. This mode is the most useful with the `RUST_LOG` environment variable configured to `info`:\n\n```\n$ RUST_LOG=info blocktop --headless\n 2025-05-28T10:14:05.298Z WARN  blocktop \u003e Headless mode without specifying an on-disk database. All data will be lost on exit.\n 2025-05-28T10:14:06.493Z INFO  blocktop::client \u003e Websockets client initialised (endpoint: wss://eth.merkle.io/, chain: 1)\n 2025-05-28T10:14:07.440Z INFO  blocktop::db     \u003e Wrote block 0xed8f155905becde73d4eae0b03a3bd6ddce554aa0c4fe2495bc61238e6207885 to the database\n 2025-05-28T10:14:08.840Z INFO  blocktop::client \u003e Websockets client initialised (endpoint: wss://eth.merkle.io/, chain: 1)\n 2025-05-28T10:14:14.234Z INFO  blocktop::db     \u003e Wrote block 0xe828b36306c36ed8d5175540e9444861507e27b8570760d1409787fb9ad233c7 to the database\n```\n\nAs the warning-level log line at the start of the output indicates, headless operation also benefits from specifying an on-disk database to save chain state to:\n\n```\n$ RUST_LOG=info blocktop --headless --db foobar.db\n```\n\n#### Metrics ####\n\nTo expose metrics for scraping via Prometheus, use the `--metrics` flag:\n\n```\n$ RUST_LOG=info blocktop --headless --metrics\n```\n\nThen, concurrently:\n\n```\n$ curl http://localhost:9898/metrics\n# HELP blocks_added The number of blocks added to the index\n# TYPE blocks_added gauge\nblocks_added 0\n# HELP failed_rpc_requests The number of requests made to the RPC node that have received an error response\n# TYPE failed_rpc_requests gauge\nfailed_rpc_requests 0\n# HELP rpc_requests The number of requests made to the RPC node\n# TYPE rpc_requests gauge\nrpc_requests 0\n```\n\nTechnically, metrics can be enable whilst using the TUI; however, one would imagine that it really only makes sense to collect metrics in order to view the state of the index.\n\n","funding_links":["https://github.com/sponsors/jmcph4"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmcph4%2Fblocktop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjmcph4%2Fblocktop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjmcph4%2Fblocktop/lists"}