github blockscout/blockscout v11.0.0
BlockScout v11.0.0

latest releases: v11.0.3, v11.0.2, v11.0.1...
24 days ago

⚠️ v11.0.0 Installation Requirements

For existing instances: Version v11.0.0 must be installed on top of v10.1. Installing it on versions earlier than v10.1 will fail.
For new (greenfield) installations, this requirement does not apply - you can install v11.0.0 directly.

💥 v11.0.0 API Breaking Changes

This release introduces breaking changes and behavioral updates across multiple API surfaces. Please review and update your integrations accordingly.


1. Asynchronous CSV Export (Conditional Breaking Change)

CSV export endpoints can now operate in asynchronous mode, depending on configuration.

⚠️ Important:
This is a breaking change only for instances where async export is enabled.
If async mode is disabled, behavior remains unchanged (synchronous CSV download).

🔍 Detection

GET /api/v2/config/csv-export

Response:

{
  "async_enabled": true
}
  • trueasync mode enabled (breaking change applies)
  • falselegacy synchronous behavior

🔄 Behavior When Async Mode Is Enabled

All CSV export endpoints (same URLs and query params as before) no longer return a file directly.

New responses:

  • 202 Accepted

    { "request_id": "<uuid>" }

    Export job is queued. Use the request_id to poll for status.

  • 409 Conflict

    { "error": "..." }

    Too many pending export jobs from the same IP.
    Limit controlled by CSV_EXPORT_ASYNC_MAX_PENDING_TASKS_PER_IP.

  • 500 Internal Server Error

    { "error": "..." }

    Failed to create export job.


📌 Affected Endpoints

  • Address CSV exports:

    • transactions
    • token transfers
    • logs
    • internal transactions
    • Celo election rewards (where applicable)
  • Token holders CSV

  • GET /api/v2/advanced-filters/csv


📊 Status & Result Retrieval

GET /api/v2/csv-exports/:uuid
  • 200 OK

    {
      "status": "pending | completed | failed",
      "file_id": "<id>",
      "expires_at": "<timestamp>"
    }
  • 404 Not Found
    → Unknown request_id


2. BENS Fields May Be Missing (Conditional Breaking Change)

BENS (ENS-like) data is now conditionally included.

When BENS preload is disabled, responses will not include:

ens_domain_name

📌 Affected Endpoints

  • /api/v2/transactions
  • /api/v2/addresses/:hash/transactions
  • /api/v2/blocks/:hash/transactions
  • /api/v2/token-transfers
  • /api/v2/addresses/:hash/token-transfers
  • /api/v2/tokens/:address_hash_param/transfers

⚠️ Impact

Clients must treat ens_domain_name as optional.


3. WebSocket new_block Payload Is Now Variable (Conditional Breaking Change)

The new_block event (block channel) may include additional fields:

  • metadata
  • ens_domain_name

⚠️ Important

These fields are configuration-dependent:

  • Present on some explorer instances
  • Absent on others

✅ Recommendation

Handle these fields as optional in WebSocket consumers.


4. Polygon zkEVM Removal (Breaking Change)

Support for Polygon zkEVM has been completely removed.

❌ Removed

  • polygon-zkevm chain type

  • All endpoints under:

    /api/v2/zkevm/*
    

⚠️ Impact

Any integration relying on zkEVM endpoints must be removed or migrated.


5. Transaction Actions Deprecated (Breaking Change)

The transaction_actions field has been removed.

📌 Affected Endpoint

GET /api/v2/transactions/:hash

⚠️ Impact

Clients must stop relying on:

transaction_actions

6. Stricter Validation for Chain-Specific Endpoints (Breaking Change)

OpenAPI specifications have been expanded to additional chain types (Scroll, Zilliqa, Celo), introducing stricter input validation.

⚠️ Impact

Endpoints now reject invalid or loosely formatted input that may have previously been accepted.

📌 Affected Endpoints

  • /api/v2/scroll/*
  • /api/v2/transactions/scroll-batch/*
  • /api/v2/validators/zilliqa/*
  • /api/v2/celo/*
  • /api/v2/addresses/:hash/celo/*

🚀 Features

  • Async CSV export (#14028)
  • FHE operations and tags (#13742)
  • Restore BENS preloads on the main page under toggle and add blocks BENS preload toggle (#14262)
  • /api/legacy/* wrappers for three ES-compatible RPC endpoints (#14239)
  • Make token balances import chunk size configurable (#14250)
  • Add toggle to disable transactions / token transfers BENS preload (#14159)
  • Add ENS and metadata preloading in block channel (#12074)
  • Add validation for IPFS links before sending requests to gateway (#14131)
  • Add search by token address hash in /api/v2/tokens (#14102)
  • Add :rename heavy index db operation type and implement zero-downtime index replacement for transactions table (#14052)
  • Use libraries field from eth bytecode db response (#13948)

🐛 Bug Fixes

  • Fix filecoin view error (#14255)
  • Internal transactions on-demand fetcher: check existence of deleted internal transactions address placeholders (#14249)
  • Fix OnDemand.InternalTransaction fetcher (#14242)
  • Guard missing ETS table in contract creator fetcher (#14241)
  • Address ids usage improvements (#14240)
  • Fix timeouts for API v1 tokentx endpoint (#14185)
  • Remove internal transaction error field references (#14213)
  • Handle partial errors in ContractCode fetch_codes (#14211)
  • Include bridged token query params in OpenAPI spec (#14209)
  • Update changed constraint name in shrink IT migration (#14205)
  • Fix contract internal transactions preload (#14203)
  • Handle RPC errors in ContractCreator, limit retries to 5 (#14136)
  • Prevent duplicate missing block range inserts (#14138)
  • Implementation address hash retrieval logic in the old UI (#14192)
  • Keycloak address displaying (#14155)
  • Celo election rewards csv export (#14160)
  • Sync GraphQL language enum with SmartContract schema (#14109)
  • Don't insert PTO for non-traceable transactions (#14133)
  • Fix pending ops migration overflow by adaptive batching and chunked inserts (#14135)
  • State changes use token transfer type (#14073)
  • Fix 500 error when apikey provided with disabled account (#14064)
  • Fix ArgumentError in BlockScoutWeb.NFTHelper.get_media_src/2 (#14051)

🚜 Refactor

  • Refactor RollupReorgMonitorQueue (#14196)
  • Deduplicate json_rpc_named_arguments (#14194)
  • Fully migrate to language enum field in smart_contracts table (#14049)
  • Migrate address_names to composite primary key on (address_hash, name) (#14078)

📚 Documentation

  • Add .dialyzer-ignore hygiene guideline to CONTRIBUTING (#14199)

⚡ Performance

  • Optimize token1155tx API v1 endpoint (#14202)
  • Optimize optional address preloads across tx endpoints (#14165)
  • Optimize on demand hot contracts performance (#14150)
  • Remove join to "blocks" in api/v2/blocks/:block_number/transactions API endpoint (#14162)
  • Improve performance of /api/v2/tokens API endpoint (#14158)

⚙️ Miscellaneous Tasks

  • Update LICENCE (#14201)
  • Remove "transaction_hash", "block_hash" and "block_index" from internal transactions, migrate Address Hashes to Address IDs (#14099)
  • Remove timeout for test for FillInternalTransactionsAddressIds (#14266)
  • Increase default timeout for FillInternalTransactionsAddressIds (#14264)
  • Expand action of API_DISABLE_CONTRACT_CREATION_INTERNAL_TRANSACTION_ASSOCIATION flag to preload smart-contract associations ((#14257)[https://github.com//pull/14257])
  • Add Autoscout promo in the logs (#14234)
  • Improve internal transactions migrations (#14233)
  • Remove unused Explorer.Chain.Address.find_contract_addresses/2 function (#14220)
  • Prevent deadlocks in IT fields removing migration (#14215)
  • Filter blocks by BLOCK_RANGES in add_ranges_by_block_numbers (#13875)
  • FillInternalTransactionsAddressIds improvements (#14208)
  • Remove timeout between successful migrations (#14198)
  • Add batch size env for FillInternalTransactionsAddressIds migration (#14204)
  • Add Celo OpenAPI specs (#14197, #14229)
  • Cover counters to multichain export with unit tests (#14193)
  • Update credo config (#14147)
  • Remove Polygon zkEVM support (#14188)
  • Add Block.full_refetch (#14180)
  • Remove deprecated files from the root folder (#14186)
  • Remove deprecated "transaction actions" indexer (#14183)
  • Stabilize various flaky tests (#14149)
  • Return automatic chromedriver version definition (#14108)
  • Move agents skills to .agents/skills folder (#14081)
  • Put in order background db migrations on the "transactions" table (#14077)
  • Drop transactions_operator_fee_constant_index (#14066)
  • Unescape ampersand in token's metadata (#14055)
  • Treat blocks with huge amount of transactions as massive (#13994)
  • Add OpenAPI docs for Scroll and Zilliqa endpoints (#13972)
  • Add all-in-one open API spec file (#14050)

📘 Updated Swagger Documentation

💡 New environment variables

New environment variables list
Variable Description Parameters
DISABLE_BLOCK_BROADCAST_ENRICHMENT If true, disables ENS and metadata enrichment for new_block WebSocket broadcasts. Implemented in #12074. Version: v11.0.0+
Default: (empty)
Applications: API
INDEXER_MASSIVE_BLOCK_THRESHOLD Max transactions count in a single block after which the block is treated as massive. Implemented in #13994. Version: v11.0.0+
Default: 1000
Applications: Indexer
INDEXER_CURRENT_TOKEN_BALANCES_IMPORT_CHUNK_SIZE Number of CurrentTokenBalances items processed per chunk in token balances import. Default is 50; effective minimum is 1. Implemented in #14250. Version: v11.0.0+
Default: 50
Applications: Indexer
INDEXER_FHE_OPERATIONS_ENABLED Flag to enable parsing of Fully Homomorphic Encryption (FHE) operations from transactions. Implemented in #13742. Version: v11.0.0+
Default: false
Applications: Indexer
MIGRATION_FILL_INTERNAL_TRANSACTIONS_ADDRESS_IDS_BATCH_SIZE Number of internal transactions to fill their address ids in the batch. Implemented in #14204. Version: v11.0.0+
Default: 30
Applications: Indexer
MIGRATION_FILL_INTERNAL_TRANSACTIONS_ADDRESS_IDS_TIMEOUT Timeout between filling internal transactions address ids batches processing. Implemented in #14208. Version: v11.0.0+
Default: 5s
Applications: Indexer
DISABLE_BLOCKS_BENS_PRELOAD If true, skips ENS name preloading in responses for block list endpoints: /api/v2/blocks, /api/v2/main-page/blocks, /api/v2/blocks/optimism-batch/:batch_number, /api/v2/blocks/scroll-batch/:batch_number. Version: v11.0.0+
Default: false
Applications: API
DISABLE_TRANSACTIONS_BENS_PRELOAD If true, skips ENS name preloading in responses for transaction list endpoints: /api/v2/transactions, /api/v2/transactions/watchlist, /api/v2/main-page/transactions, /api/v2/main-page/transactions/watchlist, /api/v2/addresses/:hash/transactions, /api/v2/blocks/:hash/transactions. Version: v11.0.0+
Default: false
Applications: API
DISABLE_TOKEN_TRANSFERS_BENS_PRELOAD If true, skips ENS name preloading in responses for token transfer list endpoints: /api/v2/token-transfers, /api/v2/addresses/:hash/token-transfers, /api/v2/tokens/:address_hash_param/transfers. Version: v11.0.0+
Default: false
Applications: API
CSV_EXPORT_ASYNC_ENABLED Enables async CSV export for supported endpoints. When enabled, the API returns 202 Accepted with a request_id and processes exports through Oban instead of streaming them directly. Implemented in #14028 Version: v11.0.0+ Required: No
Default: false
Applications: API
CSV_EXPORT_ASYNC_OBAN_CONCURRENCY Sets Oban concurrency for the csv_export queue used by async CSV exports. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 10
Applications: API
CSV_EXPORT_ASYNC_GOKAPI_URL Base URL of the Gokapi instance used to store completed async CSV exports. Trailing slash is stripped during validation. Implemented in #14028 Version: v11.0.0+ Required: Yes, if async export is enabled
Default: (empty)
Applications: API
CSV_EXPORT_ASYNC_GOKAPI_API_KEY API key sent to Gokapi in the apikey header for async CSV export uploads. Implemented in #14028 Version: v11.0.0+ Required: Yes, if async export is enabled
Default: (empty)
Applications: API
CSV_EXPORT_ASYNC_MAX_PENDING_TASKS_PER_IP Maximum number of pending async CSV export requests allowed per client IP at once. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 3
Applications: API
CSV_EXPORT_ASYNC_UPLOAD_CHUNK_SIZE Chunk size in bytes for reading the generated CSV file and uploading it to Gokapi. Should be synchronized with Gokapi settings. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 47185920
Applications: API
CSV_EXPORT_DB_TIMEOUT Timeout for CSV export database work. Follows the time format. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 1h if async export is enabled, otherwise 5m
Applications: API
CSV_EXPORT_ASYNC_TMP_DIR Directory used for in-progress async CSV export files before they are uploaded to Gokapi. Implemented in #14028 Version: v11.0.0+ Required: No
Default: /tmp/csv_export
Applications: API
CSV_EXPORT_ASYNC_GOKAPI_TIMEOUT HTTP timeout and recv_timeout used for Gokapi requests during async CSV export. Follows the time format. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 60s
Applications: API
CSV_EXPORT_ASYNC_GOKAPI_UPLOAD_EXPIRY_DAYS Sets Gokapi expiryDays for completed async CSV export uploads. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 1
Applications: API
CSV_EXPORT_ASYNC_GOKAPI_UPLOAD_ALLOWED_DOWNLOADS Sets Gokapi allowedDownloads for completed async CSV export uploads. Implemented in #14028 Version: v11.0.0+ Required: No
Default: 1
Applications: API

⛔ Deprecated environment variables

Deprecated environment variables list
Variable Description Default Version Need recompile Deprecated in Version
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_BATCHES_ENABLED Enables Polygon zkEVM batches fetcher. Implemented in #7584. false v5.3.1+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_BATCHES_CHUNK_SIZE The number of Polygon zkEVM batches in one chunk when reading them from RPC. Implemented in #7584. 20 v5.3.1+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_BATCHES_RECHECK_INTERVAL The latest batch rechecking interval, seconds. Implemented in #7584. 60 v5.3.1+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_BATCHES_IGNORE Comma-separated list of batch numbers that should be ignored by the fetcher. Implemented in #12387. (empty) v9.0.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_RPC The RPC endpoint for L1 used to fetch Deposit or Withdrawal bridge events. Implemented in #9098. (empty) v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_START_BLOCK The number of a start block on L1 to index L1 bridge events. If the table of bridge operations is not empty, the process will continue indexing from the last indexed L1 event. If empty or not defined, the L1 events are not handled. Implemented in #9098. (empty) v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_CONTRACT The address of PolygonZkEVMBridgeV2 contract on L1 used to fetch L1 bridge events. Required for L1 bridge events indexing. Implemented in #9098. (empty) v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_NETWORK_ID L1 Network ID in terms of Polygon zkEVM bridge (0 = Ethereum Mainnet, 1 = Polygon zkEVM, 2 = Astar zkEVM, etc.). Required if INDEXER_POLYGON_ZKEVM_L1_BRIDGE_START_BLOCK or INDEXER_POLYGON_ZKEVM_L2_BRIDGE_START_BLOCK is defined. Implemented in #9637. (empty) v6.4.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_ROLLUP_INDEX L1 Rollup index in terms of Polygon zkEVM bridge (0 = Polygon zkEVM, 1 = Astar zkEVM, etc.). Not defined if L1 is Ethereum Mainnet. Required if L1 is not Ethereum Mainnet and INDEXER_POLYGON_ZKEVM_L1_BRIDGE_START_BLOCK or INDEXER_POLYGON_ZKEVM_L2_BRIDGE_START_BLOCK is defined. Implemented in #9637. (empty) v6.4.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_NATIVE_SYMBOL The symbol of the native coin on L1 to display it in the table of the bridge Deposits and Withdrawals on UI. Implemented in #9098. ETH v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L1_BRIDGE_NATIVE_DECIMALS The number of decimals to correctly display an amount of native coins for some Deposit or Withdrawal bridge operations on UI. Implemented in #9098. 18 v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L2_BRIDGE_START_BLOCK The number of a start block on L2 to index L2 bridge events. If the table of bridge operations is not empty, the process will continue indexing from the last indexed L2 event. If empty or not defined, the L2 events are not handled. Implemented in #9098. (empty) v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L2_BRIDGE_CONTRACT The address of PolygonZkEVMBridgeV2 contract on L2 used to fetch L2 bridge events. Required for L2 bridge events indexing. Implemented in #9098. (empty) v6.2.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L2_BRIDGE_NETWORK_ID L2 Network ID in terms of Polygon zkEVM bridge (1 = Polygon zkEVM, 2 = Astar zkEVM, etc.). Required if INDEXER_POLYGON_ZKEVM_L1_BRIDGE_START_BLOCK or INDEXER_POLYGON_ZKEVM_L2_BRIDGE_START_BLOCK is defined. Implemented in #9637. (empty) v6.4.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_POLYGON_ZKEVM_L2_BRIDGE_ROLLUP_INDEX L2 Rollup index in terms of Polygon zkEVM bridge (0 = Polygon zkEVM, 1 = Astar zkEVM, etc.). Required if INDEXER_POLYGON_ZKEVM_L1_BRIDGE_START_BLOCK or INDEXER_POLYGON_ZKEVM_L2_BRIDGE_START_BLOCK is defined. Implemented in #9637. (empty) v6.4.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_AAVE_V3_POOL_CONTRACT Pool contract address for Aave v3 protocol. If not defined, Aave transaction actions are ignored by the indexer. Implemented in #7185. (empty) v5.1.3+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_ENABLE If true, transaction action indexer is active. Implemented in #6582. false v5.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_MAX_TOKEN_CACHE_SIZE Maximum number of items in an internal cache of tx actions indexing process (to limit memory consumption). Implemented in #6582. 100000 v5.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_REINDEX_FIRST_BLOCK The first block of a block range for historical indexing or reindexing of tx actions. Implemented in #6582. (empty) v5.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_REINDEX_LAST_BLOCK The last block of a block range for historical indexing or reindexing of tx actions. Implemented in #6582. (empty) v5.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_REINDEX_PROTOCOLS Comma-separated names of protocols which should be indexed or reindexed on historical blocks defined by the range. Example: uniswap_v3,zkbob - only these protocols will be indexed or reindexed for the defined block range. If the value is empty string (or not defined), all supported protocols will be indexed/reindexed. This option is not applicable to realtime and catchup fetchers (it always indexes all supported protocols). Implemented in #6582. (empty) v5.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_UNISWAP_V3_FACTORY_CONTRACT UniswapV3Factory contract address. Implemented in #7312. 0x1F98431c8aD98523631AE4a59f267346ea31F984 v5.1.4+ v11.0.0+
<span style={{color: "red"}}>Deprecated INDEXER_TX_ACTIONS_UNISWAP_V3_NFT_POSITION_MANAGER_CONTRACT NonfungiblePositionManager contract address for Uniswap v3. Implemented in #7312. 0xC36442b4a4522E871399CD717aBDD847Ab11FE88 v5.1.4+ v11.0.0+
<span style={{color: "red"}}>Deprecated MIGRATION_REINDEX_DUPLICATED_INTERNAL_TRANSACTIONS_BATCH_SIZE Number of internal transactions to reindex in the batch. Implemented in #12394. 100 v8.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated MIGRATION_REINDEX_DUPLICATED_INTERNAL_TRANSACTIONS_CONCURRENCY Number of parallel reindexing internal transaction batches processing. Implemented in #12394. 1 v8.1.0+ v11.0.0+
<span style={{color: "red"}}>Deprecated MIGRATION_REINDEX_DUPLICATED_INTERNAL_TRANSACTIONS_TIMEOUT Timeout between reindexing internal transaction batches processing. Implemented in #12394. 0 v8.1.0+ v11.0.0+

Don't miss a new blockscout release

NewReleases is sending notifications on new releases.