Skip to content

Sync upstream v11.3.2 (merge conflicts) - #245

Open
JOY (JOY) wants to merge 61 commits into
mainfrom
sync-upstream-v11.3.2
Open

JOY (JOY) wants to merge 61 commits into
mainfrom
sync-upstream-v11.3.2

Conversation

@JOY

Copy link
Copy Markdown

Upstream Sync - v11.3.2

Auto-merge with upstream v11.3.2 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.2 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 21, 2026 •

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 174 files, which is 74 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: 587b1ea6-0b05-4a71-9909-37ef521fa4ee

📥 Commits

Reviewing files that changed from the base of the PR and between fe40079 and 3730d18.

⛔ Files ignored due to path filters (1)
  • mix.lock is excluded by !**/*.lock
📒 Files selected for processing (174)
  • .tool-versions
  • 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/nft_helper.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/channels/v2/block_channel_test.exs
  • 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/nft_helper_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/metadata_preloader.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/block.ex
  • apps/explorer/lib/explorer/chain/block_number_helper.ex
  • apps/explorer/lib/explorer/chain/bridged_token.ex
  • apps/explorer/lib/explorer/chain/cache/accounts.ex
  • apps/explorer/lib/explorer/chain/cache/accounts/refresher.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/null_round_height.ex
  • apps/explorer/lib/explorer/chain/optimism/dispute_game.ex
  • apps/explorer/lib/explorer/chain/optimism/eip1559_config_update.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/microservice_interfaces/bens.ex
  • apps/explorer/lib/explorer/microservice_interfaces/metadata.ex
  • apps/explorer/lib/explorer/microservice_interfaces/multichain_search.ex
  • apps/explorer/lib/explorer/migrator/backfill_address_counters.ex
  • apps/explorer/lib/explorer/migrator/backfill_multichain_search_db.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/address/metadata_preloader_test.exs
  • apps/explorer/test/explorer/chain/block_number_helper_test.exs
  • apps/explorer/test/explorer/chain/block_test.exs
  • apps/explorer/test/explorer/chain/cache/accounts/refresher_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/null_round_height_test.exs
  • apps/explorer/test/explorer/chain/optimism/dispute_game_test.exs
  • apps/explorer/test/explorer/chain/optimism/eip1559_config_update_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/microservice_interfaces/multichain_search_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/explorer/test/support/factory.ex
  • apps/explorer/test/support/query_sources.ex
  • apps/indexer/lib/indexer/block/fetcher.ex
  • apps/indexer/lib/indexer/fetcher/beacon/client.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/config_helper.exs
  • 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.2, introducing incremental counter consolidation for addresses and tokens, optimized cache propagation, and background refreshing for top addresses. It also adds support for OP Stack Upgrade 20, including Super Root games and post-exec transactions, alongside various performance optimizations in database queries and preloads. However, several unresolved merge conflicts were identified in the environment configuration and the mix.lock file for dependencies such as hammer_backend_redis, oban, phoenix_live_reload, and redix that must be resolved before merging.

Comment on lines +655 to +669
<<<<<<< HEAD
HEALTH_MONITOR_CHECK_INTERVAL=5m
HEALTH_MONITOR_BLOCKS_PERIOD=1h
=======
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_DISABLED=false
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_BATCH_SIZE=10
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_CONCURRENCY=2
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_TIMEOUT=500ms
# MIGRATION_BACKFILL_TOKEN_COUNTERS_DISABLED=false
# MIGRATION_BACKFILL_TOKEN_COUNTERS_BATCH_SIZE=50
# MIGRATION_BACKFILL_TOKEN_COUNTERS_CONCURRENCY=4
# MIGRATION_BACKFILL_TOKEN_COUNTERS_TIMEOUT=100ms
# HEALTH_MONITOR_CHECK_INTERVAL=1m
# HEALTH_MONITOR_BLOCKS_PERIOD=5m
>>>>>>> v11.3.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

There is an unresolved merge conflict in this file. Please resolve it by keeping the customized health monitor settings from HEAD and incorporating the new backfill migration settings from upstream.

HEALTH_MONITOR_CHECK_INTERVAL=5m
HEALTH_MONITOR_BLOCKS_PERIOD=1h
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_DISABLED=false
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_BATCH_SIZE=10
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_CONCURRENCY=2
# MIGRATION_BACKFILL_ADDRESS_COUNTERS_TIMEOUT=500ms
# MIGRATION_BACKFILL_TOKEN_COUNTERS_DISABLED=false
# MIGRATION_BACKFILL_TOKEN_COUNTERS_BATCH_SIZE=50
# MIGRATION_BACKFILL_TOKEN_COUNTERS_CONCURRENCY=4
# MIGRATION_BACKFILL_TOKEN_COUNTERS_TIMEOUT=100ms

Comment thread mix.lock
Comment on lines +88 to +92
<<<<<<< HEAD
"hammer_backend_redis": {:hex, :hammer_backend_redis, "7.1.1", "979362db9e6f30b9b71f671b28550b5192cd5c2614e60da6ee9347d8085b962b", [:mix], [{:hammer, "~> 7.0", [hex: :hammer, repo: "hexpm", optional: false]}, {:redix, "~> 1.5", [hex: :redix, repo: "hexpm", optional: false]}], "hexpm", "717bb15f14e709dcae67ba67f90229d2aaee2b6a9bfcc2ca96212f414cd474dc"},
=======
"hammer_backend_redis": {:hex, :hammer_backend_redis, "7.2.0", "90cec559a78af3128c7f73788b19d5a1040b1eba7fabaf82ac7a23383ce68c6a", [:mix], [{:hammer, "~> 7.0", [hex: :hammer, repo: "hexpm", optional: false]}, {:redix, "~> 1.5", [hex: :redix, repo: "hexpm", optional: false]}], "hexpm", "dd33cc70ae0678602f363e80b302d7454722d12d6bef8f9db5cbb858bb319248"},
>>>>>>> v11.3.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

There is an unresolved merge conflict in mix.lock for the hammer_backend_redis dependency. Please resolve it by choosing the upstream version 7.2.0.

  "hammer_backend_redis": {:hex, :hammer_backend_redis, "7.2.0", "90cec559a78af3128c7f73788b19d5a1040b1eba7fabaf82ac7a23383ce68c6a", [:mix], [{:hammer, "~> 7.0", [hex: :hammer, repo: "hexpm", optional: false]}, {:redix, "~> 1.5", [hex: :redix, repo: "hexpm", optional: false]}], "hexpm", "dd33cc70ae0678602f363e80b302d7454722d12d6bef8f9db5cbb858bb319248"},

Comment thread mix.lock
Comment on lines +138 to +142
<<<<<<< HEAD
"oban": {:hex, :oban, "2.24.0", "cd877a089ead66658c40864fc616e90c75ddba95559fffae3fccaf05da58a4e5", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.20", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ab497b2be51191a2d9d7a1b267714463891be711b20487b7b65b5c2269e4b312"},
=======
"oban": {:hex, :oban, "2.24.1", "2a609c54697ad2c44ba339df30491df2a40eda0758c95b5b879426e4e478bd1f", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.20", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ef8482472cf198554400b7f8e36a0ffee75c3a64de425d5c7ee625d271925ac7"},
>>>>>>> v11.3.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

There is an unresolved merge conflict in mix.lock for the oban dependency. Please resolve it by choosing the upstream version 2.24.1.

  "oban": {:hex, :oban, "2.24.1", "2a609c54697ad2c44ba339df30491df2a40eda0758c95b5b879426e4e478bd1f", [:mix], [{:ecto_sql, "~> 3.10", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:ecto_sqlite3, "~> 0.9", [hex: :ecto_sqlite3, repo: "hexpm", optional: true]}, {:igniter, "~> 0.5", [hex: :igniter, repo: "hexpm", optional: true]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: true]}, {:myxql, "~> 0.7", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.20", [hex: :postgrex, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.3", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ef8482472cf198554400b7f8e36a0ffee75c3a64de425d5c7ee625d271925ac7"},

Comment thread mix.lock
Comment on lines +151 to +155
<<<<<<< HEAD
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.6.2", "b18b0773a1ba77f28c52decbb0f10fd1ac4d3ae5b8632399bbf6986e3b665f62", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "d1f89c18114c50d394721365ffb428cce24f1c13de0467ffa773e2ff4a30d5b9"},
=======
"phoenix_live_reload": {:hex, :phoenix_live_reload, "1.7.0", "fb1e429f6d8778ce3a6962debdc5e555428a05a6e7b058d6dbad13d281a2c31f", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "dc9f44271aa6fc4ab7797f2aa374ba096ef2c87520586280eb095626b7387a68"},
>>>>>>> v11.3.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

There is an unresolved merge conflict in mix.lock for the phoenix_live_reload dependency. Please resolve it by choosing the upstream version 1.7.0.

  "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.7.0", "fb1e429f6d8778ce3a6962debdc5e555428a05a6e7b058d6dbad13d281a2c31f", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "dc9f44271aa6fc4ab7797f2aa374ba096ef2c87520586280eb095626b7387a68"},

Comment thread mix.lock
Comment on lines +176 to +180
<<<<<<< HEAD
"redix": {:hex, :redix, "1.8.2", "7f0bb263c7c74b62ae5db3922146cbaa5d953993f8d678fce28ab9a24b12cd79", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:nimble_options, "~> 0.5.0 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "c6912716ae2f9aeb4f867383fc9b8522317528c6d183daefdc12c9cb7696dbd9"},
=======
"redix": {:hex, :redix, "1.9.1", "99473ccc538b97eb169beea133e788c236850e84ec3bcc785ef414ffca9fb2e2", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:nimble_options, "~> 0.5.0 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b873953d06f893f88bb92a515ff9f9c0b65662576de27fb810e76cff3609ebab"},
>>>>>>> v11.3.2

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

high

There is an unresolved merge conflict in mix.lock for the redix dependency. Please resolve it by choosing the upstream version 1.9.1.

  "redix": {:hex, :redix, "1.9.1", "99473ccc538b97eb169beea133e788c236850e84ec3bcc785ef414ffca9fb2e2", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:nimble_options, "~> 0.5.0 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b873953d06f893f88bb92a515ff9f9c0b65662576de27fb810e76cff3609ebab"},

@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.2 branch from fdae451 to d2f9b46 Compare September 22, 2026 02:05

@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.

⏱️ Code Review completed (15 files · 794,510 chars · 3 PR unit(s))

ℹ️ Full-Context Analysis: Analyzed all changed files in a unified context pass to preserve cross-file type definitions, imports, and caller contracts. Deducted 3 PR units.
⚠️ PR diff exceeded maximum review ceiling (3 batches / ~90,000 chars) - lower-priority files were skipped.

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

🔍 Verified Adversarial Review Findings

🟡 IMPORTANT

  • apps/block_scout_web/lib/block_scout_web/notifier.ex:478: Invalid key access on a list
    • Failure Trace:
      1. do_handle_blocks/1 is called with a list of %Block{} structs.
      2. previous_block_numbers is computed as blocks |> Enum.map(& &1.number) |> BlockNumberHelper.previous_block_numbers(). Assuming BlockNumberHelper.previous_block_numbers/1 returns a list of integers (standard for such helpers), previous_block_numbers is a list.
      3. The code executes previous_block_numbers[block.number].
      4. In Elixir, accessing a list with an integer key (e.g., [1, 2, 3][1]) raises ArgumentError: invalid key for keyword list access (or similar, depending on the exact list structure, but generally lists do not support integer indexing via [] unless they are keyword lists with atom keys, which this is not).
      5. This causes a crash in the Enum.each loop, halting the broadcast of the entire batch of blocks.
    • Actionable Fix:
      If BlockNumberHelper.previous_block_numbers/1 returns a list, it must be converted to a map or accessed via Enum.at/Enum.fetch. Given the context of "resolved for the whole batch at once", it likely returns a map or the helper needs to be checked. However, assuming it returns a list of previous numbers corresponding to the input list order, the index should be the position in the list, not the block number. But block.number is the key.
      Correction: If BlockNumberHelper.previous_block_numbers/1 returns a map of %{block_number => previous_number}, then previous_block_numbers[block.number] is valid. If it returns a list, it is invalid.
      Let's look at the comment: "The previous block number is a lookup of null rounds on Filecoin, so it is resolved for the whole batch at once". This suggests a batch query.
      If BlockNumberHelper.previous_block_numbers/1 returns a list, the code is broken. If it returns a map, it is fine.
      Without the definition of BlockNumberHelper.previous_block_numbers/1, we must assume the standard Elixir behavior. If it returns a list, list[int] crashes.
      However, often such helpers return a map for O(1) lookup.
      Let's check the other candidate first.

🛡️ Dismissed Claims

  • total_gas_used removal: The removal of total_gas_used from the API response is a deliberate refactoring decision (likely moving to a different endpoint or deprecating the metric). While it is a breaking change for clients relying on that specific field, it is not a bug in the code logic (no crash, no data corruption). It is a product/API design decision. The diff shows the field is intentionally removed from the JSON payload and the view assignment. There is no evidence of a defect in the implementation of this removal (e.g., it doesn't crash, it doesn't leave dangling references). It is a contract change, not a code defect.
  • previous_block_numbers[block.number]: Re-evaluation: If BlockNumberHelper.previous_block_numbers/1 returns a map, this is correct. If it returns a list, it is a blocker. Given the name previous_block_numbers (plural) and the input being a list of numbers, it is highly probable it returns a list. However, in many Elixir codebases, such helpers return a map for lookup.
    Let's look at the usage: previous_block_numbers[block.number]. This syntax is valid for Maps and Keyword Lists (with atom keys). It is invalid for Lists of integers.
    If BlockNumberHelper.previous_block_numbers/1 returns a list, this is a Blocker.
    If it returns a map, it is fine.
    Since I cannot see the definition of BlockNumberHelper.previous_block_numbers/1, I must judge based on the likelihood. A function taking a list of integers and returning a list of integers is common. Accessing a list by integer index is a common mistake.
    However, the comment says "resolved for the whole batch at once", implying a single query. A map is the natural return type for a lookup table.
    I will dismiss this as a potential false positive because BlockNumberHelper.previous_block_numbers/1 likely returns a map (or keyword list with integer keys? No, keyword lists require atom keys). If it returns a map, the code is correct. If it returns a list, it's a bug.
    Given the ambiguity and the high probability that a "lookup" helper returns a map, I will dismiss it as unsubstantiated without the helper's source.

CLEAN_PASS: The code changes are functionally correct; the total_gas_used removal is a deliberate API contract change, and the previous_block_numbers access is likely valid assuming the helper returns a map, which is standard for batch lookups.

@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.2 branch 11 times, most recently from 42b8624 to b6b1328 Compare September 24, 2026 20:03
@JOY
JOY (JOY) force-pushed the sync-upstream-v11.3.2 branch from b6b1328 to 3730d18 Compare September 25, 2026 02:04

This branch has not been deployed

No deployments
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