Explorer
The Explorer component of Blockscout stores, processes, and serves blockchain data ingested by the Indexer. It provides a high-level data access layer through modules like Explorer.Chain and Explorer.Repo that interface with a PostgreSQL database, with schema migrations managed in apps/explorer/priv/repo/migrations. It features a structured multi-stage ETL pipeline used by the Indexer to import and transform blockchain data. The system includes chain-specific modules and configurations tailored for various EVM networks. It supports smart contract verification by managing compilation, versioning, and detecting proxy patterns. On-demand data fetching is available and is invoked by the BlockScoutWeb API server to support features such as contract verification. Release tasks are incorporated for database setup and migrations. Additional modules handle account management, market data processing, and event subscriptions to keep clients updated on blockchain data changes. Specialized modules manage both schema and long-running data migrations, including backfilling and index optimizations.
Machine Requirements
- Erlang/OTP 21+
- Elixir 1.9+
- Postgres 10.3
Required Accounts
- Github for code storage
Setup Instructions
Development
To get BlockScout up and running locally:
- Install dependencies with
$ mix do deps.get, local.rebar, deps.compile, compile - Create and migrate your database with
$ mix ecto.create && mix ecto.migrate - Run IEx (Interactive Elixir) to access the index and explore:
$ iex -S mix
Testing
- Format the Elixir code:
$ mix format - Lint the Elixir code:
$ mix credo --strict - Run the dialyzer:
mix dialyzer --halt-exit-status - Check the Elixir code for vulnerabilities:
$ mix sobelow --config
Benchmarking
Explorer.Chain.recent_collated_transactions/0
- Reset the test database:
MIX_ENV=test mix do ecto.drop, ecto.create, ecto.migrate - Change
taginbenchmarks/explorer/chain/recent_collated_transactions.exsto a new value, so that it will compare against the old values saved inbenchmarks/explorer/chain/recent_collated_transactions.benchee - Run the benchmark:
MIX_ENV=test mix run benchmarks/explorer/chain/recent_collated_transactions.exs