Skip to content

Sync upstream v11.3.1 (merge conflicts) - #239

Open
JOY (JOY) wants to merge 53 commits into
mainfrom
sync-upstream-v11.3.1
Open

JOY (JOY) wants to merge 53 commits into
mainfrom
sync-upstream-v11.3.1

Conversation

@JOY

Copy link
Copy Markdown

Upstream Sync - v11.3.1

Auto-merge with upstream v11.3.1 failed. Version/workflow conflicts were auto-resolved,
but the following files have code conflicts that need manual resolution:

docker-compose/envs/common-blockscout.env
mix.lock

To resolve:

  1. Check out this branch locally
  2. Resolve remaining conflicts
  3. Push and merge this PR
  4. Then create tag v11.3.1 to trigger Docker build

Upstream release notes

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…cout#14654)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…4761)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…#14764)

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Victor Baranov <baranov.viktor.27@gmail.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.

@coderabbitai

coderabbitai Bot commented Sep 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 148 files, which is 48 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: e73aa270-98ed-48af-8e1f-c97cce8fd5be

📥 Commits

Reviewing files that changed from the base of the PR and between fe40079 and 9a94ec3.

⛔ Files ignored due to path filters (1)
  • mix.lock is excluded by !**/*.lock
📒 Files selected for processing (148)
  • CHANGELOG.md
  • apps/block_scout_web/assets/css/components/_custom_tooltips.scss
  • apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/address_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/fallback_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/main_page_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/stats_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/token_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/transaction_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/chain_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/tokens/token_controller.ex
  • apps/block_scout_web/lib/block_scout_web/controllers/tokens/transfer_controller.ex
  • apps/block_scout_web/lib/block_scout_web/graphql/resolvers/internal_transaction.ex
  • apps/block_scout_web/lib/block_scout_web/microservice_interfaces/transaction_interpretation.ex
  • apps/block_scout_web/lib/block_scout_web/models/get_address_tags.ex
  • apps/block_scout_web/lib/block_scout_web/notifier.ex
  • apps/block_scout_web/lib/block_scout_web/notifiers/arbitrum.ex
  • apps/block_scout_web/lib/block_scout_web/notifiers/optimism.ex
  • apps/block_scout_web/lib/block_scout_web/schemas/api/v2/optimism/game.ex
  • apps/block_scout_web/lib/block_scout_web/schemas/api/v2/stats/response.ex
  • apps/block_scout_web/lib/block_scout_web/schemas/api/v2/transaction.ex
  • apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex
  • apps/block_scout_web/lib/block_scout_web/views/api/v2/optimism_view.ex
  • apps/block_scout_web/lib/block_scout_web/views/api/v2/transaction_view.ex
  • apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex
  • apps/block_scout_web/mix.exs
  • apps/block_scout_web/priv/gettext/default.pot
  • apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  • apps/block_scout_web/test/block_scout_web/controllers/api/rpc/eth_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/controllers/api/v2/address_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/controllers/api/v2/block_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/controllers/api/v2/stats_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/controllers/api/v2/token_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/controllers/api/v2/transaction_controller_test.exs
  • apps/block_scout_web/test/block_scout_web/models/get_address_tags_test.exs
  • apps/block_scout_web/test/block_scout_web/notifier_broadcast_test.exs
  • apps/block_scout_web/test/block_scout_web/notifier_subscriber_filter_test.exs
  • apps/block_scout_web/test/block_scout_web/views/api/v2/transaction_view_test.exs
  • apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs
  • apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/http.ex
  • apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/request_coordinator.ex
  • apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/transaction.ex
  • apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/transport.ex
  • apps/ethereum_jsonrpc/mix.exs
  • apps/ethereum_jsonrpc/test/ethereum_jsonrpc/http/mox_test.exs
  • apps/ethereum_jsonrpc/test/ethereum_jsonrpc/receipt_test.exs
  • apps/ethereum_jsonrpc/test/ethereum_jsonrpc/transaction_test.exs
  • apps/explorer/config/config.exs
  • apps/explorer/config/runtime/test.exs
  • apps/explorer/config/test.exs
  • apps/explorer/lib/explorer/application.ex
  • apps/explorer/lib/explorer/chain.ex
  • apps/explorer/lib/explorer/chain/address.ex
  • apps/explorer/lib/explorer/chain/address/coin_balance.ex
  • apps/explorer/lib/explorer/chain/address/counters.ex
  • apps/explorer/lib/explorer/chain/address/reputation.ex
  • apps/explorer/lib/explorer/chain/address/scam_badge_to_address.ex
  • apps/explorer/lib/explorer/chain/advanced_filter.ex
  • apps/explorer/lib/explorer/chain/bridged_token.ex
  • apps/explorer/lib/explorer/chain/cache/address_tags.ex
  • apps/explorer/lib/explorer/chain/cache/background_migrations.ex
  • apps/explorer/lib/explorer/chain/cache/counters/address_counters.ex
  • apps/explorer/lib/explorer/chain/cache/counters/address_counters_consolidator.ex
  • apps/explorer/lib/explorer/chain/cache/counters/address_token_transfers_count.ex
  • apps/explorer/lib/explorer/chain/cache/counters/address_transactions_count.ex
  • apps/explorer/lib/explorer/chain/cache/counters/address_transactions_gas_usage_sum.ex
  • apps/explorer/lib/explorer/chain/cache/counters/consolidation.ex
  • apps/explorer/lib/explorer/chain/cache/counters/gas_usage_sum.ex
  • apps/explorer/lib/explorer/chain/cache/counters/helper.ex
  • apps/explorer/lib/explorer/chain/cache/counters/token_counters.ex
  • apps/explorer/lib/explorer/chain/cache/counters/token_counters_consolidator.ex
  • apps/explorer/lib/explorer/chain/cache/counters/token_holders_count.ex
  • apps/explorer/lib/explorer/chain/cache/counters/token_transfers_count.ex
  • apps/explorer/lib/explorer/chain/cache/propagator.ex
  • apps/explorer/lib/explorer/chain/cache/scam_addresses.ex
  • apps/explorer/lib/explorer/chain/import.ex
  • apps/explorer/lib/explorer/chain/import/runner/address/current_token_balances.ex
  • apps/explorer/lib/explorer/chain/import/runner/blocks.ex
  • apps/explorer/lib/explorer/chain/import/runner/tokens.ex
  • apps/explorer/lib/explorer/chain/internal_transaction.ex
  • apps/explorer/lib/explorer/chain/map_cache.ex
  • apps/explorer/lib/explorer/chain/optimism/dispute_game.ex
  • apps/explorer/lib/explorer/chain/optimism/withdrawal.ex
  • apps/explorer/lib/explorer/chain/ordered_cache.ex
  • apps/explorer/lib/explorer/chain/smart_contract.ex
  • apps/explorer/lib/explorer/chain/token.ex
  • apps/explorer/lib/explorer/chain/token_transfer.ex
  • apps/explorer/lib/explorer/chain/transaction.ex
  • apps/explorer/lib/explorer/eth_rpc.ex
  • apps/explorer/lib/explorer/etherscan.ex
  • apps/explorer/lib/explorer/etherscan/logs.ex
  • apps/explorer/lib/explorer/market/source/crypto_compare.ex
  • apps/explorer/lib/explorer/migrator/backfill_address_counters.ex
  • apps/explorer/lib/explorer/migrator/backfill_token_counters.ex
  • apps/explorer/lib/explorer/migrator/reindex_blocks_with_uncataloged_token_transfers.ex
  • apps/explorer/lib/explorer/query_helper.ex
  • apps/explorer/lib/explorer/token/metadata_retriever.ex
  • apps/explorer/lib/explorer/utility/address_id_to_address_hash.ex
  • apps/explorer/lib/explorer/utility/counters_refetch_block.ex
  • apps/explorer/mix.exs
  • apps/explorer/priv/repo/migrations/20260831000000_add_counters_updated_at_to_addresses.exs
  • apps/explorer/priv/repo/migrations/20260831000001_create_address_counters_refetch_blocks.exs
  • apps/explorer/priv/repo/migrations/20260831000002_add_counters_updated_at_to_tokens.exs
  • apps/explorer/priv/repo/migrations/20260831000003_rename_address_counters_refetch_blocks.exs
  • apps/explorer/test/explorer/application_test.exs
  • apps/explorer/test/explorer/chain/cache/address_tags_test.exs
  • apps/explorer/test/explorer/chain/cache/counters/address_counters_consolidator_test.exs
  • apps/explorer/test/explorer/chain/cache/counters/address_counters_test.exs
  • apps/explorer/test/explorer/chain/cache/counters/token_counters_consolidator_test.exs
  • apps/explorer/test/explorer/chain/cache/counters/token_counters_test.exs
  • apps/explorer/test/explorer/chain/cache/propagator_test.exs
  • apps/explorer/test/explorer/chain/cache/scam_addresses_test.exs
  • apps/explorer/test/explorer/chain/cache/transactions_test.exs
  • apps/explorer/test/explorer/chain/import/runner/address/current_token_balances_test.exs
  • apps/explorer/test/explorer/chain/import/runner/blocks_test.exs
  • apps/explorer/test/explorer/chain/optimism/dispute_game_test.exs
  • apps/explorer/test/explorer/chain/token_transfer_test.exs
  • apps/explorer/test/explorer/chain/transaction_test.exs
  • apps/explorer/test/explorer/chain_test.exs
  • apps/explorer/test/explorer/eth_rpc_test.exs
  • apps/explorer/test/explorer/etherscan/logs_test.exs
  • apps/explorer/test/explorer/etherscan_test.exs
  • apps/explorer/test/explorer/market/source/crypto_compare_test.exs
  • apps/explorer/test/explorer/migrator/backfill_address_counters_test.exs
  • apps/explorer/test/explorer/migrator/backfill_token_counters_test.exs
  • apps/explorer/test/explorer/migrator/reindex_blocks_with_uncataloged_token_transfers_test.exs
  • apps/indexer/lib/indexer/block/fetcher.ex
  • apps/indexer/lib/indexer/fetcher/on_demand/internal_transaction.ex
  • apps/indexer/lib/indexer/fetcher/on_demand/token_total_supply.ex
  • apps/indexer/lib/indexer/fetcher/optimism/transaction_batch.ex
  • apps/indexer/lib/indexer/fetcher/token_counters_updater.ex
  • apps/indexer/lib/indexer/supervisor.ex
  • apps/indexer/lib/indexer/temporary/uncataloged_token_transfers.ex
  • apps/indexer/mix.exs
  • apps/indexer/test/indexer/fetcher/on_demand/contract_creator_test.exs
  • apps/indexer/test/indexer/fetcher/on_demand/token_total_supply_test.exs
  • apps/indexer/test/indexer/temporary/uncataloged_token_transfers_test.exs
  • apps/nft_media_handler/mix.exs
  • apps/utils/mix.exs
  • bin/install_chrome_headless.sh
  • config/runtime.exs
  • config/runtime/prod.exs
  • cspell.json
  • docker-compose/envs/common-blockscout.env
  • docker/Makefile
  • mix.exs
  • rel/config.exs

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request updates the application to version 11.3.1, introducing support for OP Stack Upgrade 20 (Super Root games, SystemConfig v4) and OP Stack post-exec transactions. It includes significant performance optimizations, such as caching public address tags, deduplicating on-demand token total supply fetchers, and introducing incremental consolidation for address and token counters. Additionally, it optimizes JSON RPC request grouping and local event broadcasting. The review feedback highlights a potential crash in optimism_view.ex due to the use of DateTime.from_unix!/1 on unvalidated on-chain data, suggesting a safer fallback using DateTime.from_unix/1 to prevent 500 errors.

{:block_number, block_number} -> {block_number, nil}
# zero timestamp means the extra data is unknown or malformed
{:timestamp, 0} -> {nil, nil}
{:timestamp, timestamp} -> {nil, DateTime.from_unix!(timestamp)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Using DateTime.from_unix!/1 can raise an ArgumentError if the timestamp parsed from the on-chain extra_data is extremely large (e.g., exceeding the maximum year 9999 supported by Erlang's calendar module) or otherwise malformed. To prevent potential 500 crashes on invalid external data, it is safer to use DateTime.from_unix/1 and handle the error gracefully.

              {:timestamp, timestamp} ->\n                case DateTime.from_unix(timestamp) do\n                  {:ok, datetime} -> {nil, datetime}\n                  {:error, _} -> {nil, nil}\n                end

@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.1 branch 9 times, most recently from 4ef8868 to e7004f4 Compare September 18, 2026 20:03

@dos dos Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏱️ Adversarial Review completed (Model: qwen3.8-27b)

⚠️ Input diff exceeded 30000 chars and was truncated before review.

🔍 Verified Adversarial Review Findings

🟡 IMPORTANT

  • apps/block_scout_web/lib/block_scout_web/controllers/api/v2/token_controller.ex:104: Type Mismatch in TokenTotalSupplyOnDemand.trigger_fetch
    • Failure Trace: The diff changes the call from TokenTotalSupplyOnDemand.trigger_fetch(ip, address_hash) to TokenTotalSupplyOnDemand.trigger_fetch(ip, token). address_hash is an Explorer.Chain.Address.Hash struct, while token is an Explorer.Chain.Token struct. Unless trigger_fetch/2 was explicitly refactored in this PR to accept a Token struct (which is not shown in the diff), this will cause a runtime error (e.g., MatchError or FunctionClauseError) when the function attempts to pattern match on the hash or access hash-specific fields.
    • Actionable Fix: Revert the argument to address_hash or verify that TokenTotalSupplyOnDemand.trigger_fetch/2 has been updated to accept a Token struct and extract the hash internally.

🛡️ Dismissed Claims

  • stats_controller.ex:105 removal of total_gas_used: The removal of a field from a JSON response is a standard API evolution pattern (deprecation/removal). Without evidence that this is a breaking change for a specific versioned contract or that the field is required for the endpoint's core functionality, this is not a code defect but a product decision.
  • address_controller.ex:292 AddressCounters.fetch signature: The claim is speculative ("likely relies on..."). The diff shows AddressCounters.fetch(address) being used consistently in both address_controller.ex and api/v2/address_controller.ex where address is a valid struct obtained from Chain.hash_to_address. Without the definition of AddressCounters.fetch, we cannot prove a defect, and the usage is consistent with the refactoring pattern.
  • address_controller.ex:74 token transfer necessity: The claim itself concludes "This seems intentional" and identifies no concrete failure. The separation of query preloads from participant preloads is a valid optimization pattern.

@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.1 branch 8 times, most recently from 7861e19 to 4628f88 Compare September 20, 2026 20:03
@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.1 branch from 4628f88 to 9a94ec3 Compare September 21, 2026 02:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants