From 9ee3c0dd52927dc6ac346ed56998360bd557a816 Mon Sep 17 00:00:00 2001 From: Alejandro Cabeza Romero Date: Thu, 24 Apr 2025 13:36:57 +0200 Subject: [PATCH] Add blockscout --- .../blockscout/.circleci/config.yml | 626 + sz-poc-offsite-2025/blockscout/.credo.exs | 151 + .../blockscout/.devcontainer/Dockerfile | 50 + .../blockscout/.devcontainer/README.md | 200 + .../blockscout/.devcontainer/bin/bs | 320 + .../.devcontainer/bin/chain-specific-checks | 17 + .../.devcontainer/bin/extract_apps.exs | 45 + .../blockscout/.devcontainer/bin/utils | 22 + .../.devcontainer/devcontainer.json | 47 + .../.devcontainer/docker-compose.yml | 30 + .../blockscout/.dialyzer_ignore.exs | 16 + sz-poc-offsite-2025/blockscout/.dockerignore | 13 + sz-poc-offsite-2025/blockscout/.formatter.exs | 11 + .../.github/ISSUE_TEMPLATE/bug_report.yml | 100 + .../.github/ISSUE_TEMPLATE/config.yml | 11 + .../.github/actions/setup-repo/action.yml | 86 + .../blockscout/.github/dependabot.yml | 23 + .../.github/scripts/select-builder.sh | 44 + .../blockscout/.github/workflows/antiscam.yml | 29 + .../blockscout/.github/workflows/antispam.yml | 24 + .../.github/workflows/codeql-analysis.yml | 72 + .../blockscout/.github/workflows/config.yml | 797 + .../workflows/pre-release-arbitrum.yml | 62 + .../workflows/pre-release-berachain.yml | 62 + .../.github/workflows/pre-release-celo.yml | 63 + .../.github/workflows/pre-release-eth.yml | 62 + .../workflows/pre-release-filecoin.yml | 62 + .../.github/workflows/pre-release-fuse.yml | 62 + .../workflows/pre-release-optimism.yml | 62 + .../workflows/pre-release-polygon-zkevm.yml | 62 + .../workflows/pre-release-rootstock.yml | 62 + .../.github/workflows/pre-release-scroll.yml | 62 + .../.github/workflows/pre-release-zilliqa.yml | 62 + .../.github/workflows/pre-release-zksync.yml | 62 + .../.github/workflows/pre-release.yml | 74 + .../publish-docker-image-custom-build.yml | 54 + .../publish-docker-image-every-push.yml | 116 + .../publish-docker-image-for-arbitrum.yml | 57 + .../publish-docker-image-for-berachain.yml | 57 + .../publish-docker-image-for-celo.yml | 61 + .../publish-docker-image-for-core.yml | 39 + .../publish-docker-image-for-eth-sepolia.yml | 57 + .../publish-docker-image-for-eth.yml | 57 + .../publish-docker-image-for-filecoin.yml | 56 + .../publish-docker-image-for-fuse.yml | 40 + .../publish-docker-image-for-gnosis-chain.yml | 59 + .../publish-docker-image-for-l2-staging.yml | 39 + .../publish-docker-image-for-lukso.yml | 39 + .../publish-docker-image-for-optimism.yml | 58 + .../publish-docker-image-for-rootstock.yml | 40 + .../publish-docker-image-for-scroll.yml | 58 + .../publish-docker-image-for-suave.yml | 43 + .../publish-docker-image-for-zetachain.yml | 40 + .../publish-docker-image-for-zilliqa.yml | 59 + .../publish-docker-image-for-zkevm.yml | 58 + .../publish-docker-image-for-zksync.yml | 57 + ...publish-docker-image-staging-on-demand.yml | 52 + ...publish-regular-docker-image-on-demand.yml | 67 + .../.github/workflows/release-arbitrum.yml | 60 + .../.github/workflows/release-berachain.yml | 60 + .../.github/workflows/release-celo.yml | 64 + .../.github/workflows/release-eth.yml | 61 + .../.github/workflows/release-filecoin.yml | 60 + .../.github/workflows/release-fuse.yml | 60 + .../.github/workflows/release-gnosis.yml | 62 + .../.github/workflows/release-optimism.yml | 60 + .../workflows/release-polygon-zkevm.yml | 61 + .../.github/workflows/release-rootstock.yml | 61 + .../.github/workflows/release-scroll.yml | 61 + .../.github/workflows/release-suave.yml | 60 + .../.github/workflows/release-zetachain.yml | 60 + .../.github/workflows/release-zilliqa.yml | 62 + .../.github/workflows/release-zksync.yml | 60 + .../blockscout/.github/workflows/release.yml | 149 + sz-poc-offsite-2025/blockscout/.gitignore | 77 + sz-poc-offsite-2025/blockscout/.pairs | 13 + .../blockscout/.pre-commit-config.yaml | 5 + sz-poc-offsite-2025/blockscout/.tool-versions | 3 + sz-poc-offsite-2025/blockscout/CHANGELOG.md | 4917 +++ .../blockscout/CODE_OF_CONDUCT.md | 73 + .../blockscout/CONTRIBUTING.md | 259 + sz-poc-offsite-2025/blockscout/LICENSE | 674 + .../blockscout/PULL_REQUEST_TEMPLATE.md | 32 + sz-poc-offsite-2025/blockscout/README.md | 51 + .../apps/block_scout_web/.sobelow-conf | 15 + .../apps/block_scout_web/API blueprint.md | 3278 ++ .../blockscout/apps/block_scout_web/API.md | 2227 ++ .../blockscout/apps/block_scout_web/README.md | 43 + .../apps/block_scout_web/assets/.babelrc | 3 + .../apps/block_scout_web/assets/README.md | 9 + .../assets/__mocks__/css/app.scss.js | 4 + .../__tests__/lib/async_listing_load.js | 82 + .../assets/__tests__/lib/autocomplete.js | 31 + .../assets/__tests__/lib/currency.js | 18 + .../lib/smart_contract/common_helpers.js | 286 + .../assets/__tests__/lib/utils.js | 12 + .../assets/__tests__/pages/address.js | 66 + .../pages/address/internal_transactions.js | 151 + .../__tests__/pages/address/transactions.js | 128 + .../__tests__/pages/address/validations.js | 50 + .../assets/__tests__/pages/blocks.js | 156 + .../assets/__tests__/pages/chain.js | 419 + .../__tests__/pages/pending_transactions.js | 212 + .../assets/__tests__/pages/transaction.js | 18 + .../assets/__tests__/pages/transactions.js | 133 + .../apps/block_scout_web/assets/close.svg | 4 + .../block_scout_web/assets/css/_code.scss | 46 + .../block_scout_web/assets/css/_elements.scss | 29 + .../block_scout_web/assets/css/_helpers.scss | 54 + .../block_scout_web/assets/css/_layout.scss | 16 + .../block_scout_web/assets/css/_mixins.scss | 253 + .../assets/css/_typography.scss | 130 + .../apps/block_scout_web/assets/css/app.scss | 136 + .../assets/css/components/_account.scss | 143 + .../assets/css/components/_ad.scss | 9 + .../css/components/_address-overview.scss | 84 + .../assets/css/components/_address_link.scss | 23 + .../assets/css/components/_alerts.scss | 9 + .../assets/css/components/_animations.scss | 94 + .../assets/css/components/_api.scss | 254 + .../assets/css/components/_badge.scss | 45 + .../assets/css/components/_btn_add_to_mm.scss | 28 + .../css/components/_btn_address_card.scss | 11 + .../assets/css/components/_btn_contract.scss | 18 + .../assets/css/components/_btn_copy.scss | 61 + .../css/components/_btn_dropdown_line.scss | 21 + .../assets/css/components/_btn_full.scss | 6 + .../assets/css/components/_btn_line.scss | 16 + .../assets/css/components/_btn_no_border.scss | 30 + .../assets/css/components/_btn_qr.scss | 6 + .../assets/css/components/_btn_swap.scss | 32 + .../assets/css/components/_btn_wallet.scss | 10 + .../assets/css/components/_button.scss | 104 + .../assets/css/components/_card.scss | 347 + .../assets/css/components/_check.scss | 48 + .../assets/css/components/_check_tooltip.scss | 27 + .../css/components/_coin-balance-tile.scss | 9 + .../css/components/_custom_tooltips.scss | 135 + .../css/components/_dashboard-banner.scss | 289 + .../css/components/_description-list.scss | 3 + .../assets/css/components/_dot.scss | 23 + .../assets/css/components/_dropdown.scss | 116 + .../assets/css/components/_dropzone.scss | 541 + .../_erc721_token_image_container.scss | 11 + .../assets/css/components/_errors.scss | 111 + .../assets/css/components/_external_link.scss | 21 + .../assets/css/components/_filter.scss | 4 + .../css/components/_fontawesome_icon.scss | 55 + .../assets/css/components/_footer.scss | 121 + .../assets/css/components/_form.scss | 152 + .../assets/css/components/_highlight.scss | 17 + .../assets/css/components/_i_tooltip.scss | 27 + .../assets/css/components/_i_tooltip_2.scss | 11 + .../assets/css/components/_icon-link.scss | 36 + ...entory_token_instance_image_container.scss | 11 + .../assets/css/components/_label.scss | 104 + .../css/components/_loading-spinner.scss | 87 + .../assets/css/components/_log-search.scss | 69 + .../assets/css/components/_me_tooltip.scss | 25 + .../assets/css/components/_modal.scss | 110 + .../assets/css/components/_modal_stake.scss | 140 + .../assets/css/components/_modal_status.scss | 103 + .../css/components/_modal_variables.scss | 5 + .../assets/css/components/_nav_tabs.scss | 39 + .../assets/css/components/_navbar.scss | 307 + .../css/components/_new_smart_contract.scss | 212 + .../css/components/_nounderline-link.scss | 3 + .../css/components/_pagination_container.scss | 196 + .../assets/css/components/_panels.scss | 14 + .../assets/css/components/_qr-code.scss | 6 + .../assets/css/components/_radio.scss | 49 + .../assets/css/components/_radio_big.scss | 55 + .../assets/css/components/_search.scss | 74 + .../assets/css/components/_stakes_table.scss | 218 + .../css/components/_stakes_variables.scss | 2 + .../assets/css/components/_table.scss | 30 + .../assets/css/components/_tile.scss | 612 + .../components/_token-balance-dropdown.scss | 117 + .../assets/css/components/_token.scss | 10 + .../css/components/_token_tile_view_more.scss | 47 + .../assets/css/components/_tooltip.scss | 25 + .../css/components/_transaction-input.scss | 14 + .../assets/css/components/_transaction.scss | 98 + .../components/_verify_other_explorers.scss | 216 + .../assets/css/components/datepicker.scss | 1 + .../assets/css/custom-scrollbar.scss | 35 + .../assets/css/export-csv.scss | 12 + .../assets/css/export-vars-to-js.module.scss | 35 + .../block_scout_web/assets/css/main-page.scss | 82 + .../assets/css/non-critical.scss | 20 + .../assets/css/theme/_base_variables.scss | 995 + .../assets/css/theme/_callisto_variables.scss | 3 + .../theme/_dai_variables-non-critical.scss | 7 + .../assets/css/theme/_dai_variables.scss | 282 + .../assets/css/theme/_dark-theme.scss | 1136 + .../assets/css/theme/_ellaism_variables.scss | 3 + .../theme/_ether1_variables-non-critical.scss | 7 + .../assets/css/theme/_ether1_variables.scss | 49 + .../_ethercore_variables-non-critical.scss | 7 + .../css/theme/_ethercore_variables.scss | 84 + ...hereum_classic_variables-non-critical.scss | 7 + .../theme/_ethereum_classic_variables.scss | 84 + .../_ethereum_variables-non-critical.scss | 7 + .../assets/css/theme/_ethereum_variables.scss | 75 + .../assets/css/theme/_expanse_variables.scss | 3 + .../assets/css/theme/_fonts.scss | 2 + .../assets/css/theme/_gochain_variables.scss | 3 + .../theme/_goerli_variables-non-critical.scss | 8 + .../assets/css/theme/_goerli_variables.scss | 87 + .../theme/_kovan_variables-non-critical.scss | 7 + .../assets/css/theme/_kovan_variables.scss | 84 + .../theme/_lukso_variables-non-critical.scss | 7 + .../assets/css/theme/_lukso_variables.scss | 174 + .../assets/css/theme/_musicoin_variables.scss | 3 + .../_neutral_variables-non-critical.scss | 7 + .../assets/css/theme/_neutral_variables.scss | 83 + .../assets/css/theme/_pirl_variables.scss | 8 + .../theme/_poa_variables-non-critical.scss | 7 + .../assets/css/theme/_poa_variables.scss | 81 + .../_rinkeby_variables-non-critical.scss | 7 + .../assets/css/theme/_rinkeby_variables.scss | 66 + .../_ropsten_variables-non-critical.scss | 7 + .../assets/css/theme/_ropsten_variables.scss | 66 + .../theme/_rsk_variables-non-critical.scss | 7 + .../assets/css/theme/_rsk_variables.scss | 73 + .../assets/css/theme/_social_variables.scss | 8 + .../theme/_sokol_variables-non-critical.scss | 8 + .../assets/css/theme/_sokol_variables.scss | 81 + .../assets/css/theme/_tobalaba_variables.scss | 8 + .../css/theme/_tomochain_variables.scss | 4 + .../css/theme/_variables-non-critical.scss | 23 + .../assets/css/theme/_variables.scss | 32 + .../assets/css/theme/_wanchain_variables.scss | 3 + .../theme/_xusdt_variables-non-critical.scss | 7 + .../assets/css/theme/_xusdt_variables.scss | 97 + .../custom_contracts/_circles-theme.scss | 717 + .../custom_contracts/_dark-forest-theme.scss | 1035 + .../block_scout_web/assets/eslint.config.js | 23 + .../apps/block_scout_web/assets/js/app.js | 42 + .../block_scout_web/assets/js/app_extra.js | 33 + .../assets/js/balance-chart-loader.js | 14 + .../block_scout_web/assets/js/chart-loader.js | 12 + .../assets/js/lib/ace/src-min/ace.js | 17 + .../assets/js/lib/ace/src-min/mode-csharp.js | 8 + .../assets/js/lib/ace/src-min/theme-chrome.js | 8 + .../apps/block_scout_web/assets/js/lib/ad.js | 99 + .../assets/js/lib/add_chain_to_mm.js | 60 + .../assets/js/lib/analytics.js | 50 + .../assets/js/lib/async_listing_load.js | 382 + .../assets/js/lib/autocomplete.js | 200 + .../block_scout_web/assets/js/lib/banner.js | 17 + .../assets/js/lib/card_tabs.js | 26 + .../assets/js/lib/clipboard_buttons.js | 24 + .../js/lib/coin_balance_history_chart.js | 93 + .../assets/js/lib/csv_download.js | 167 + .../block_scout_web/assets/js/lib/currency.js | 73 + .../assets/js/lib/custom_ad.json | 1 + .../assets/js/lib/custom_scrollbar.js | 22 + .../assets/js/lib/dark_mode.js | 37 + .../block_scout_web/assets/js/lib/dropzone.js | 1 + .../block_scout_web/assets/js/lib/from_now.js | 35 + .../assets/js/lib/history_chart.js | 344 + .../block_scout_web/assets/js/lib/indexing.js | 52 + .../assets/js/lib/infinite_scroll_helpers.js | 109 + .../assets/js/lib/list_morph.js | 133 + .../assets/js/lib/loading_element.js | 5 + .../block_scout_web/assets/js/lib/modals.js | 201 + .../assets/js/lib/path_helper.js | 5 + .../js/lib/pending_transactions_toggle.js | 20 + .../assets/js/lib/pretty_json.js | 9 + .../assets/js/lib/public_tags_request_form.js | 48 + .../block_scout_web/assets/js/lib/queue.js | 72 + .../assets/js/lib/random_access_pagination.js | 371 + .../assets/js/lib/redux_helpers.js | 129 + .../assets/js/lib/reload_button.js | 3 + .../js/lib/smart_contract/common_helpers.js | 329 + .../assets/js/lib/smart_contract/connect.js | 181 + .../assets/js/lib/smart_contract/functions.js | 119 + .../assets/js/lib/smart_contract/index.js | 3 + .../assets/js/lib/smart_contract/interact.js | 116 + .../lib/smart_contract/wei_ether_converter.js | 30 + .../assets/js/lib/stop_propagation.js | 3 + .../block_scout_web/assets/js/lib/text_ad.js | 8 + .../assets/js/lib/token_balance_dropdown.js | 41 + .../js/lib/token_balance_dropdown_search.js | 43 + .../assets/js/lib/token_icon.js | 55 + .../assets/js/lib/token_transfers_toggle.js | 17 + .../block_scout_web/assets/js/lib/tooltip.js | 5 + .../js/lib/transaction_input_dropdown.js | 13 + .../block_scout_web/assets/js/lib/try_api.js | 138 + .../assets/js/lib/try_eth_api.js | 83 + .../block_scout_web/assets/js/lib/utils.js | 38 + .../assets/js/lib/validation.js | 64 + .../apps/block_scout_web/assets/js/locale.js | 8 + .../js/pages/account/delete_item_handler.js | 23 + .../assets/js/pages/address.js | 343 + .../assets/js/pages/address/coin_balances.js | 70 + .../js/pages/address/internal_transactions.js | 119 + .../assets/js/pages/address/logs.js | 120 + .../js/pages/address/token_transfers.js | 110 + .../assets/js/pages/address/transactions.js | 185 + .../assets/js/pages/address/utils.js | 5 + .../assets/js/pages/address/validations.js | 71 + .../assets/js/pages/admin/tasks.js | 27 + .../block_scout_web/assets/js/pages/blocks.js | 134 + .../block_scout_web/assets/js/pages/chain.js | 444 + .../assets/js/pages/dark-mode-switcher.js | 12 + .../block_scout_web/assets/js/pages/layout.js | 222 + .../assets/js/pages/pending_transactions.js | 139 + .../assets/js/pages/search-results/search.js | 94 + .../assets/js/pages/sol2uml.js | 84 + .../assets/js/pages/token/overview.js | 11 + .../assets/js/pages/token/search.js | 75 + .../assets/js/pages/token/token_transfers.js | 90 + .../assets/js/pages/token_contract.js | 2 + .../assets/js/pages/token_counters.js | 123 + .../assets/js/pages/transaction.js | 194 + .../assets/js/pages/transactions.js | 108 + .../assets/js/pages/verification_form.js | 371 + .../assets/js/pages/verified_contracts.js | 107 + .../apps/block_scout_web/assets/js/socket.js | 37 + .../address_contract/code_highlighting.js | 31 + .../raw_trace/code_highlighting.js | 6 + .../block_scout_web/assets/package-lock.json | 28287 ++++++++++++++ .../apps/block_scout_web/assets/package.json | 116 + .../block_scout_web/assets/postcss.config.js | 9 + .../block_scout_web/assets/static/503.html | 200 + .../assets/static/android-chrome-192x192.png | Bin 0 -> 9762 bytes .../assets/static/android-chrome-512x512.png | Bin 0 -> 30191 bytes .../assets/static/apple-touch-icon.png | Bin 0 -> 16647 bytes .../assets/static/browserconfig.xml | 9 + .../assets/static/images/average_time.svg | 1 + .../assets/static/images/block.svg | 1 + .../assets/static/images/blocks.svg | 3 + .../assets/static/images/blockscout_logo.svg | 1 + .../assets/static/images/callisto_logo.svg | 1 + .../static/images/classic_ethereum_logo.svg | 1 + .../assets/static/images/classic_logo.svg | 1 + .../assets/static/images/controller.svg | 1 + .../assets/static/images/cube.svg | 1 + .../images/custom-themes/circles/balance.svg | 19 + .../custom-themes/circles/copy-circles.svg | 1 + .../custom-themes/circles/footer_logo.svg | 1 + .../images/custom-themes/circles/logo.svg | 1 + .../custom-themes/circles/qr-circles.svg | 1 + .../custom-themes/dark-forest/copy-df.svg | 1 + .../dark-forest/dark_forest_logo.svg | 1 + .../custom-themes/dark-forest/pic_balance.svg | 1 + .../custom-themes/dark-forest/planet.svg | 1 + .../custom-themes/dark-forest/qr-df.svg | 1 + .../custom-themes/dark-forest/union.svg | 1 + .../assets/static/images/dai_logo.svg | 1 + .../assets/static/images/ellaism_logo.svg | 1 + .../images/errors-img/etc-block-not-found.png | Bin 0 -> 11447 bytes .../errors-img/etc-block-not-found@2x.png | Bin 0 -> 24234 bytes .../images/errors-img/etc-page-not-found.png | Bin 0 -> 13383 bytes .../errors-img/etc-page-not-found@2x.png | Bin 0 -> 29207 bytes .../images/errors-img/etc-tx-not-found.png | Bin 0 -> 10565 bytes .../images/errors-img/etc-tx-not-found@2x.png | Bin 0 -> 21965 bytes .../images/errors-img/eth-block-not-found.png | Bin 0 -> 11346 bytes .../errors-img/eth-block-not-found@2x.png | Bin 0 -> 23984 bytes .../images/errors-img/eth-page-not-found.png | Bin 0 -> 13434 bytes .../errors-img/eth-page-not-found@2x.png | Bin 0 -> 29356 bytes .../images/errors-img/eth-tx-not-found.png | Bin 0 -> 10643 bytes .../images/errors-img/eth-tx-not-found@2x.png | Bin 0 -> 22224 bytes .../errors-img/goerli-block-not-found.png | Bin 0 -> 11360 bytes .../errors-img/goerli-block-not-found@2x.png | Bin 0 -> 24034 bytes .../errors-img/goerli-page-not-found.png | Bin 0 -> 13387 bytes .../errors-img/goerli-page-not-found@2x.png | Bin 0 -> 29168 bytes .../images/errors-img/goerli-tx-not-found.png | Bin 0 -> 10309 bytes .../errors-img/goerli-tx-not-found@2x.png | Bin 0 -> 21439 bytes .../errors-img/internal-server-error.svg | 4 + .../errors-img/koan-block-not-found@2x.png | Bin 0 -> 26425 bytes .../errors-img/kovan-block-not-found.png | Bin 0 -> 11515 bytes .../errors-img/kovan-block-not-found@2x.png | Bin 0 -> 24324 bytes .../errors-img/kovan-page-not-found.png | Bin 0 -> 13510 bytes .../errors-img/kovan-page-not-found@2x.png | Bin 0 -> 29445 bytes .../images/errors-img/kovan-tx-not-found.png | Bin 0 -> 10528 bytes .../errors-img/kovan-tx-not-found@2x.png | Bin 0 -> 21863 bytes .../errors-img/lukso-block-not-found.png | Bin 0 -> 11875 bytes .../errors-img/lukso-block-not-found@2x.png | Bin 0 -> 24689 bytes .../errors-img/lukso-page-not-found.png | Bin 0 -> 13113 bytes .../errors-img/lukso-page-not-found@2x.png | Bin 0 -> 28578 bytes .../images/errors-img/lukso-tx-not-found.png | Bin 0 -> 13640 bytes .../errors-img/lukso-tx-not-found@2x.png | Bin 0 -> 27875 bytes .../images/errors-img/page-not-found.svg | 4 + .../static/images/errors-img/pic-404.svg | 27 + .../images/errors-img/poa-block-not-found.png | Bin 0 -> 11331 bytes .../errors-img/poa-block-not-found@2x.png | Bin 0 -> 23998 bytes .../images/errors-img/poa-page-not-found.png | Bin 0 -> 13372 bytes .../errors-img/poa-page-not-found@2x.png | Bin 0 -> 29117 bytes .../images/errors-img/poa-tx-not-found.png | Bin 0 -> 10192 bytes .../images/errors-img/poa-tx-not-found@2x.png | Bin 0 -> 21210 bytes .../errors-img/rinkeby-block-not-found.png | Bin 0 -> 11333 bytes .../errors-img/rinkeby-block-not-found@2x.png | Bin 0 -> 23948 bytes .../errors-img/rinkeby-page-not-found.png | Bin 0 -> 13184 bytes .../errors-img/rinkeby-page-not-found@2x.png | Bin 0 -> 28743 bytes .../errors-img/rinkeby-tx-not-found.png | Bin 0 -> 10356 bytes .../errors-img/rinkeby-tx-not-found@2x.png | Bin 0 -> 21581 bytes .../errors-img/rinnkeby-block-not-found.png | Bin 0 -> 10661 bytes .../rinnkeby-block-not-found@2x.png | Bin 0 -> 23316 bytes .../errors-img/ropsten-block-not-found.png | Bin 0 -> 11245 bytes .../errors-img/ropsten-block-not-found@2x.png | Bin 0 -> 23815 bytes .../errors-img/ropsten-page-not-found.png | Bin 0 -> 13184 bytes .../errors-img/ropsten-page-not-found@2x.png | Bin 0 -> 28749 bytes .../errors-img/ropsten-tx-not-found.png | Bin 0 -> 10354 bytes .../errors-img/ropsten-tx-not-found@2x.png | Bin 0 -> 21564 bytes .../images/errors-img/rsk-block-not-found.png | Bin 0 -> 11360 bytes .../errors-img/rsk-block-not-found@2x.png | Bin 0 -> 24074 bytes .../images/errors-img/rsk-page-not-found.png | Bin 0 -> 13520 bytes .../errors-img/rsk-page-not-found@2x.png | Bin 0 -> 29527 bytes .../images/errors-img/rsk-tx-not-found.png | Bin 0 -> 10994 bytes .../images/errors-img/rsk-tx-not-found@2x.png | Bin 0 -> 22889 bytes .../errors-img/sokol-block-not-found.png | Bin 0 -> 11360 bytes .../errors-img/sokol-block-not-found@2x.png | Bin 0 -> 24074 bytes .../errors-img/sokol-page-not-found.png | Bin 0 -> 13520 bytes .../errors-img/sokol-page-not-found@2x.png | Bin 0 -> 29527 bytes .../images/errors-img/sokol-tx-not-found.png | Bin 0 -> 10994 bytes .../errors-img/sokol-tx-not-found@2x.png | Bin 0 -> 22889 bytes .../static/images/errors-img/tx-not-found.svg | 9 + .../errors-img/unprocessable-entity.svg | 4 + .../errors-img/xdai-block-not-found.png | Bin 0 -> 11335 bytes .../errors-img/xdai-block-not-found@2x.png | Bin 0 -> 24073 bytes .../images/errors-img/xdai-page-not-found.png | Bin 0 -> 13319 bytes .../errors-img/xdai-page-not-found@2x.png | Bin 0 -> 28979 bytes .../images/errors-img/xdai-tx-not-found.png | Bin 0 -> 10309 bytes .../errors-img/xdai-tx-not-found@2x.png | Bin 0 -> 21439 bytes .../assets/static/images/eth.png | Bin 0 -> 1292 bytes .../assets/static/images/ether1_logo.svg | 1 + .../assets/static/images/ethercore_logo.svg | 10139 +++++ .../static/images/ethercore_testnet_logo.svg | 5382 +++ .../assets/static/images/ethereum.png | Bin 0 -> 9853 bytes .../assets/static/images/ethereum_logo.svg | 1 + .../assets/static/images/expanse_logo.png | Bin 0 -> 35288 bytes .../assets/static/images/favicon-16x16.png | Bin 0 -> 424 bytes .../assets/static/images/favicon-32x32.png | Bin 0 -> 794 bytes .../assets/static/images/favicon.ico | Bin 0 -> 15086 bytes .../assets/static/images/gc_logo_2.svg | 6 + .../assets/static/images/gc_logo_old.svg | 1 + .../assets/static/images/gc_logo_rebrand.svg | 3 + .../assets/static/images/gochain_logo.png | Bin 0 -> 13703 bytes .../assets/static/images/goerli_logo.svg | 1 + .../assets/static/images/icons/blockchair.png | Bin 0 -> 562 bytes .../static/images/icons/blockchair@2x.png | Bin 0 -> 1404 bytes .../assets/static/images/icons/check-1.svg | 3 + .../assets/static/images/icons/copy.svg | 3 + .../assets/static/images/icons/dots.svg | 3 + .../assets/static/images/icons/etherchain.png | Bin 0 -> 305 bytes .../static/images/icons/etherchain@2x.png | Bin 0 -> 569 bytes .../assets/static/images/icons/etherscan.png | Bin 0 -> 796 bytes .../static/images/icons/etherscan@2x.png | Bin 0 -> 1781 bytes .../images/icons/fontawesome/bar-chart.svg | 1 + .../images/icons/fontawesome/github.svg | 1 + .../images/icons/fontawesome/info-circle.svg | 1 + .../static/images/icons/fontawesome/tag.svg | 2 + .../images/icons/fontawesome/telegram.svg | 1 + .../images/icons/fontawesome/twitter.svg | 4 + .../assets/static/images/icons/link.svg | 3 + .../static/images/icons/metamask-fox.svg | 61 + .../assets/static/images/icons/pic-empty.svg | 1 + .../assets/static/images/icons/plus.svg | 1 + .../assets/static/images/icons/remove.svg | 1 + .../assets/static/images/icons/swap/1inch.svg | 16 + .../static/images/icons/swap/component.png | Bin 0 -> 25775 bytes .../static/images/icons/swap/cowswap.png | Bin 0 -> 14780 bytes .../assets/static/images/icons/swap/curve.svg | 1 + .../static/images/icons/swap/honeyswap.png | Bin 0 -> 3773 bytes .../assets/static/images/icons/swap/sushi.svg | 1 + .../assets/static/images/icons/swap/swapr.svg | 1 + .../images/icons/token_icon_default.svg | 1 + .../assets/static/images/icons/withdraw.svg | 3 + .../assets/static/images/kovan_logo.svg | 1 + .../assets/static/images/last_block.svg | 1 + .../assets/static/images/logo.svg | 1 + .../static/images/lukso_dashboard_image.png | Bin 0 -> 22431 bytes .../assets/static/images/lukso_logo.png | Bin 0 -> 2326 bytes .../static/images/lukso_logo_footer.png | Bin 0 -> 2263 bytes .../assets/static/images/musicoin_logo.svg | 1 + .../callisto-mainnet.svg | 1 + .../network-selector-icons/circle-xusdt.svg | 1 + .../ethereum-classic.svg | 1 + .../ethereum-mainnet.svg | 1 + .../network-selector-icons/goerli-testnet.svg | 1 + .../network-selector-icons/kovan-testnet.svg | 1 + .../lukso-l14-testnet.svg | 1 + .../network-selector-icons/poa-core.svg | 1 + .../network-selector-icons/poa-sokol.svg | 1 + .../rinkeby-testnet.svg | 1 + .../ropsten-testnet.svg | 1 + .../network-selector-icons/rsk-mainnet.svg | 1 + .../network-selector-icons/xdai-chain.svg | 1 + .../assets/static/images/pirl_logo.svg | 1 + .../assets/static/images/poa_logo.svg | 3 + .../assets/static/images/purple-block.svg | 1 + .../assets/static/images/rinkeby_logo.svg | 1 + .../assets/static/images/ropsten_logo.svg | 1 + .../assets/static/images/rsk_logo.svg | 1 + .../assets/static/images/smart_contract.svg | 1 + .../assets/static/images/social_logo.svg | 1 + .../assets/static/images/sokol_logo.svg | 1 + .../assets/static/images/spinner.svg | 52 + .../assets/static/images/tobalaba_logo.svg | 1 + .../assets/static/images/token.svg | 1 + .../assets/static/images/tomochain_logo.svg | 1 + .../assets/static/images/transaction.svg | 3 + .../assets/static/images/transactions.svg | 3 + .../assets/static/images/wanchain_logo.png | Bin 0 -> 2416 bytes .../assets/static/images/xdai_alternative.svg | 1 + .../assets/static/images/xdai_logo.svg | 1 + .../static/images/xusdt-logo-footer.svg | 1 + .../assets/static/images/xusdt-logo-top.svg | 1 + .../assets/static/manifest.webmanifest | 19 + .../assets/static/mstile-150x150.png | Bin 0 -> 7418 bytes .../assets/static/safari-pinned-tab.svg | 39 + .../block_scout_web/assets/webpack.config.js | 186 + .../apps/block_scout_web/config/config.exs | 138 + .../apps/block_scout_web/config/dev.exs | 69 + .../apps/block_scout_web/config/prod.exs | 37 + .../block_scout_web/config/runtime/test.exs | 18 + .../apps/block_scout_web/config/test.exs | 33 + .../block_scout_web/lib/block_scout_web.ex | 98 + .../lib/block_scout_web/api_v2.ex | 9 + .../lib/block_scout_web/application.ex | 77 + .../lib/block_scout_web/captcha_helper.ex | 167 + .../lib/block_scout_web/chain.ex | 938 + .../channels/address_channel.ex | 279 + .../channels/arbitrum_channel.ex | 14 + .../block_scout_web/channels/block_channel.ex | 49 + .../channels/exchange_rate_channel.ex | 10 + .../channels/optimism_channel.ex | 20 + .../channels/reward_channel.ex | 41 + .../block_scout_web/channels/token_channel.ex | 64 + .../channels/token_instance_channel.ex | 10 + .../channels/transaction_channel.ex | 110 + .../block_scout_web/channels/user_socket.ex | 22 + .../channels/v2/address_channel.ex | 16 + .../channels/v2/block_channel.ex | 17 + .../channels/v2/exchange_rate_channel.ex | 10 + .../polygon_zkevm_confirmed_batch_channel.ex | 10 + .../channels/v2/reward_channel.ex | 13 + .../channels/v2/token_channel.ex | 10 + .../channels/v2/transaction_channel.ex | 22 + .../channels/v2/user_socket.ex | 29 + .../lib/block_scout_web/checksum_address.ex | 65 + .../lib/block_scout_web/cldr.ex | 13 + .../lib/block_scout_web/controller.ex | 68 + .../account/api/v2/address_controller.ex | 41 + .../account/api/v2/authenticate_controller.ex | 271 + .../account/api/v2/email_controller.ex | 104 + .../account/api/v2/fallback_controller.ex | 149 + .../account/api/v2/tags_controller.ex | 91 + .../account/api/v2/user_controller.ex | 536 + .../controllers/account/api_key_controller.ex | 65 + .../controllers/account/auth_controller.ex | 106 + .../account/custom_abi_controller.ex | 87 + .../account/public_tags_request_controller.ex | 114 + .../account/tag_address_controller.ex | 49 + .../account/tag_transaction_controller.ex | 49 + .../account/watchlist_address_controller.ex | 92 + .../account/watchlist_controller.ex | 26 + .../address_coin_balance_by_day_controller.ex | 27 + .../address_coin_balance_controller.ex | 120 + .../address_contract_controller.ex | 51 + ...ddress_contract_verification_controller.ex | 165 + ...ification_via_flattened_code_controller.ex | 52 + ...ntract_verification_via_json_controller.ex | 34 + ...ication_via_multi_part_files_controller.ex | 40 + ...tion_via_standard_json_input_controller.ex | 39 + ..._contract_verification_vyper_controller.ex | 50 + .../controllers/address_controller.ex | 202 + ...address_internal_transaction_controller.ex | 131 + .../controllers/address_logs_controller.ex | 127 + .../address_read_contract_controller.ex | 93 + .../address_read_proxy_controller.ex | 46 + .../address_token_balance_controller.ex | 42 + .../controllers/address_token_controller.ex | 94 + .../address_token_transfer_controller.ex | 227 + .../address_transaction_controller.ex | 163 + .../address_validation_controller.ex | 98 + .../address_withdrawal_controller.ex | 122 + .../address_write_contract_controller.ex | 86 + .../address_write_proxy_controller.ex | 47 + .../controllers/admin/dashboard_controller.ex | 7 + .../controllers/admin/session_controller.ex | 37 + .../controllers/admin/setup_controller.ex | 90 + .../controllers/admin/tasks_controller.ex | 22 + .../controllers/api/api_logger.ex | 16 + .../controllers/api/eth_rpc/eth_controller.ex | 72 + .../controllers/api/health_controller.ex | 344 + .../controllers/api/rpc/address_controller.ex | 590 + .../controllers/api/rpc/block_controller.ex | 180 + .../api/rpc/contract_controller.ex | 765 + .../controllers/api/rpc/helper.ex | 55 + .../controllers/api/rpc/logs_controller.ex | 238 + .../controllers/api/rpc/rpc_translator.ex | 144 + .../controllers/api/rpc/stats_controller.ex | 124 + .../controllers/api/rpc/token_controller.ex | 93 + .../api/rpc/transaction_controller.ex | 103 + .../api/v1/gas_price_oracle_controller.ex | 48 + .../controllers/api/v1/supply_controller.ex | 12 + .../v1/verified_smart_contract_controller.ex | 62 + .../api/v2/address_badge_controller.ex | 90 + .../controllers/api/v2/address_controller.ex | 1046 + .../api/v2/advanced_filter_controller.ex | 381 + .../controllers/api/v2/api_key_controller.ex | 31 + .../controllers/api/v2/arbitrum_controller.ex | 333 + .../controllers/api/v2/blob_controller.ex | 32 + .../controllers/api/v2/block_controller.ex | 500 + .../controllers/api/v2/config_controller.ex | 27 + .../api/v2/csv_export_controller.ex | 129 + .../controllers/api/v2/fallback_controller.ex | 326 + .../controllers/api/v2/import_controller.ex | 234 + .../api/v2/internal_transaction_controller.ex | 89 + .../api/v2/main_page_controller.ex | 103 + .../controllers/api/v2/mud_controller.ex | 316 + .../controllers/api/v2/optimism_controller.ex | 787 + .../api/v2/polygon_edge_controller.ex | 70 + .../api/v2/polygon_zkevm_controller.ex | 180 + .../proxy/account_abstraction_controller.ex | 254 + .../api/v2/proxy/metadata_controller.ex | 30 + .../api/v2/proxy/noves_fi_controller.ex | 58 + .../v2/proxy/universal_proxy_controller.ex | 13 + .../api/v2/proxy/xname_controller.ex | 24 + .../controllers/api/v2/scroll_controller.ex | 154 + .../controllers/api/v2/search_controller.ex | 53 + .../api/v2/shibarium_controller.ex | 81 + .../api/v2/smart_contract_controller.ex | 296 + .../controllers/api/v2/stats_controller.ex | 207 + .../controllers/api/v2/token_controller.ex | 440 + .../api/v2/token_transfer_controller.ex | 86 + .../api/v2/transaction_controller.ex | 728 + .../controllers/api/v2/utils_controller.ex | 43 + .../api/v2/validator_controller.ex | 226 + .../api/v2/verification_controller.ex | 416 + .../api/v2/withdrawal_controller.ex | 47 + .../controllers/api/v2/zksync_controller.ex | 113 + .../controllers/api_docs_controller.ex | 18 + .../controllers/block_controller.ex | 116 + .../block_transaction_controller.ex | 168 + .../block_withdrawal_controller.ex | 106 + .../chain/market_history_chart_controller.ex | 70 + .../transaction_history_chart_controller.ex | 43 + .../controllers/chain_controller.ex | 179 + .../common_components_controller.ex | 12 + .../controllers/csv_export_controller.ex | 43 + .../controllers/page_not_found_controller.ex | 9 + .../pending_transaction_controller.ex | 70 + .../recent_transactions_controller.ex | 52 + .../controllers/robots_controller.ex | 13 + .../controllers/search_controller.ex | 72 + .../controllers/smart_contract_controller.ex | 264 + .../controllers/tokens/contract_controller.ex | 56 + .../controllers/tokens/holder_controller.ex | 87 + .../controllers/tokens/instance/helper.ex | 21 + .../tokens/instance/holder_controller.ex | 77 + .../tokens/instance/metadata_controller.ex | 31 + .../tokens/instance/transfer_controller.ex | 80 + .../controllers/tokens/instance_controller.ex | 26 + .../tokens/inventory_controller.ex | 78 + .../controllers/tokens/token_controller.ex | 24 + .../controllers/tokens/tokens_controller.ex | 73 + .../controllers/tokens/transfer_controller.ex | 93 + .../controllers/transaction_controller.ex | 228 + ...saction_internal_transaction_controller.ex | 130 + .../controllers/transaction_log_controller.ex | 121 + .../transaction_raw_trace_controller.ex | 70 + .../transaction_state_controller.ex | 131 + .../transaction_token_transfer_controller.ex | 133 + .../verified_contracts_controller.ex | 71 + .../visualize_sol2uml_controller.ex | 70 + .../controllers/withdrawal_controller.ex | 42 + .../counters/blocks_indexed_counter.ex | 56 + .../internal_transactions_indexed_counter.ex | 55 + .../lib/block_scout_web/csp_header.ex | 38 + .../lib/block_scout_web/endpoint.ex | 93 + .../lib/block_scout_web/etherscan.ex | 3104 ++ .../lib/block_scout_web/gettext.ex | 24 + .../block_scout_web/graphql/body_reader.ex | 35 + .../graphql/celo/resolvers/token_transfer.ex | 21 + .../resolvers/token_transfer_transaction.ex | 27 + .../graphql/celo/schema/query_fields.ex | 28 + .../graphql/celo/schema/types.ex | 87 + .../graphql/middleware/api_enabled.ex | 19 + .../graphql/resolvers/address.ex | 19 + .../graphql/resolvers/block.ex | 32 + .../graphql/resolvers/internal_transaction.ex | 23 + .../graphql/resolvers/token.ex | 10 + .../graphql/resolvers/token_transfer.ex | 33 + .../graphql/resolvers/transaction.ex | 27 + .../lib/block_scout_web/graphql/schema.ex | 149 + .../block_scout_web/graphql/schema/scalars.ex | 121 + .../graphql/schema/scalars/JSON.ex | 33 + .../block_scout_web/graphql/schema/types.ex | 309 + .../graphql/schema_controller.ex | 20 + .../lib/block_scout_web/health_endpoint.ex | 17 + .../lib/block_scout_web/health_router.ex | 13 + .../main_page_realtime_event_handler.ex | 29 + .../transaction_interpretation.ex | 419 + .../models/get_address_tags.ex | 80 + .../models/get_transaction_tags.ex | 50 + .../models/transaction_state_helper.ex | 221 + .../lib/block_scout_web/notifier.ex | 803 + .../lib/block_scout_web/notifiers/arbitrum.ex | 31 + .../lib/block_scout_web/notifiers/optimism.ex | 40 + .../lib/block_scout_web/paging_helper.ex | 395 + .../plug/admin/check_owner_registered.ex | 29 + .../plug/admin/require_admin_role.ex | 26 + .../lib/block_scout_web/plug/allow_iframe.ex | 14 + .../block_scout_web/plug/check_account_api.ex | 21 + .../block_scout_web/plug/check_account_web.ex | 31 + .../lib/block_scout_web/plug/check_api_v2.ex | 21 + .../block_scout_web/plug/check_chain_type.ex | 33 + .../lib/block_scout_web/plug/check_feature.ex | 71 + .../plug/fetch_user_from_session.ex | 20 + .../lib/block_scout_web/plug/graphql.ex | 11 + .../plug/graphql_schema_introspection.ex | 34 + .../lib/block_scout_web/plug/logger.ex | 58 + .../lib/block_scout_web/plug/rate_limit.ex | 31 + .../lib/block_scout_web/plug/redis_cookie.ex | 232 + .../block_scout_web/prometheus/exporter.ex | 9 + .../prometheus/instrumenter.ex | 17 + .../prometheus/phoenix_instrumenter.ex | 16 + .../prometheus/public_exporter.ex | 9 + .../block_scout_web/realtime_event_handler.ex | 65 + .../lib/block_scout_web/router.ex | 108 + .../block_scout_web/routers/account_router.ex | 194 + .../routers/address_badges_v2_router.ex | 58 + .../block_scout_web/routers/admin_router.ex | 60 + .../routers/api_key_v2_router.ex | 30 + .../lib/block_scout_web/routers/api_router.ex | 560 + .../routers/chain_type_scope.ex | 44 + .../routers/smart_contracts_api_v2_router.ex | 83 + .../routers/tokens_api_v2_router.ex | 79 + .../routers/utils_api_v2_router.ex | 33 + .../lib/block_scout_web/routers/web_router.ex | 452 + .../smart_contract_realtime_event_handler.ex | 29 + .../lib/block_scout_web/social_media.ex | 25 + .../templates/account/api_key/form.html.eex | 34 + .../templates/account/api_key/index.html.eex | 51 + .../templates/account/api_key/row.html.eex | 18 + .../templates/account/auth/profile.html.eex | 36 + .../templates/account/common/_nav.html.eex | 25 + .../account/custom_abi/form.html.eex | 39 + .../account/custom_abi/index.html.eex | 51 + .../templates/account/custom_abi/row.html.eex | 18 + .../address_field.html.eex | 8 + .../account/public_tags_request/form.html.eex | 72 + .../public_tags_request/index.html.eex | 44 + .../account/public_tags_request/row.html.eex | 20 + .../account/tag_address/form.html.eex | 33 + .../account/tag_address/index.html.eex | 41 + .../account/tag_address/row.html.eex | 15 + .../account/tag_transaction/form.html.eex | 33 + .../account/tag_transaction/index.html.eex | 41 + .../account/tag_transaction/row.html.eex | 18 + .../templates/account/watchlist/show.html.eex | 42 + .../account/watchlist_address/form.html.eex | 91 + .../account/watchlist_address/row.html.eex | 29 + .../address/_balance_dropdown.html.eex | 12 + .../templates/address/_block_link.html.eex | 1 + .../address/_current_coin_balance.html.eex | 15 + .../address/_custom_view_df_title.html.eex | 19 + .../templates/address/_labels.html.eex | 19 + .../templates/address/_link.html.eex | 23 + .../templates/address/_metatags.html.eex | 15 + .../address/_responsive_hash.html.eex | 38 + .../_show_address_transactions.html.eex | 1 + .../templates/address/_tabs.html.eex | 107 + .../templates/address/_tile.html.eex | 34 + .../_validator_metadata_modal.html.eex | 41 + .../address/_verify_other_explorer.html.eex | 15 + .../_verify_other_explorer_modal.html.eex | 22 + .../address/_verify_other_explorers.html.eex | 38 + .../templates/address/index.html.eex | 58 + .../templates/address/overview.html.eex | 293 + .../_coin_balances.html.eex | 31 + .../address_coin_balance/index.html.eex | 48 + .../address_contract/_metatags.html.eex | 1 + .../templates/address_contract/index.html.eex | 260 + .../new.html.eex | 130 + .../_compiler_field.html.eex | 10 + .../_constructor_args.html.eex | 10 + .../_contract_address_field.html.eex | 10 + .../_contract_name_field.html.eex | 10 + .../_fetch_constructor_args.html.eex | 20 + .../_include_nightly_builds_field.html.eex | 21 + .../_libraries_other.html.eex | 7 + .../_library_address.html.eex | 10 + .../_library_first.html.eex | 11 + .../_library_name.html.eex | 10 + .../_yul_contracts_switcher.html.eex | 21 + .../new.html.eex | 123 + .../new.html.eex | 50 + .../new.html.eex | 116 + .../new.html.eex | 64 + .../new.html.eex | 59 + .../_metatags.html.eex | 1 + .../index.html.eex | 72 + .../templates/address_logs/_logs.html.eex | 108 + .../templates/address_logs/index.html.eex | 46 + .../address_read_contract/_metatags.html.eex | 1 + .../address_read_contract/index.html.eex | 58 + .../address_read_proxy/_metatags.html.eex | 1 + .../address_read_proxy/index.html.eex | 17 + .../address_token/_metatags.html.eex | 1 + .../templates/address_token/_tokens.html.eex | 58 + .../templates/address_token/index.html.eex | 75 + .../templates/address_token/overview.html.eex | 73 + .../address_token/overview_item.html.eex | 14 + .../_token_balances.html.eex | 78 + .../address_token_balance/_tokens.html.eex | 65 + .../address_token_transfer/_metatags.html.eex | 1 + .../address_token_transfer/index.html.eex | 76 + .../address_transaction/_metatags.html.eex | 1 + .../address_transaction/index.html.eex | 72 + .../address_validation/_metatags.html.eex | 1 + .../address_validation/index.html.eex | 33 + .../address_withdrawal/_metatags.html.eex | 1 + .../address_withdrawal/_withdrawal.html.eex | 25 + .../address_withdrawal/index.html.eex | 66 + .../address_write_contract/_metatags.html.eex | 1 + .../address_write_contract/index.html.eex | 56 + .../address_write_proxy/_metatags.html.eex | 1 + .../address_write_proxy/index.html.eex | 17 + .../templates/admin/dashboard/index.html.eex | 37 + .../admin/session/login_form.html.eex | 17 + .../admin/setup/admin_registration.html.eex | 19 + .../templates/admin/setup/verify.html.eex | 25 + .../banners_ad/_banner_728.html.eex | 6 + .../advertisement/text_ad/index.html.eex | 4 + .../templates/api_docs/_action_tile.html.eex | 259 + .../templates/api_docs/_eth_rpc_item.html.eex | 182 + .../templates/api_docs/_metatags.html.eex | 5 + .../templates/api_docs/_model_table.html.eex | 65 + .../templates/api_docs/_module_card.html.eex | 12 + .../templates/api_docs/_module_item.html.eex | 4 + .../templates/api_docs/eth_rpc.html.eex | 25 + .../templates/api_docs/index.html.eex | 18 + .../templates/block/_link.html.eex | 4 + .../templates/block/_metatags.html.eex | 13 + .../templates/block/_number_link.html.eex | 4 + .../templates/block/_tabs.html.eex | 19 + .../templates/block/_tile.html.eex | 82 + .../templates/block/index.html.eex | 25 + .../templates/block/overview.html.eex | 273 + .../templates/block_transaction/404.html.eex | 13 + .../block_transaction/_metatags.html.eex | 1 + .../block_transaction/index.html.eex | 33 + .../block_withdrawal/_metatags.html.eex | 1 + .../block_withdrawal/_withdrawal.html.eex | 23 + .../templates/block_withdrawal/index.html.eex | 54 + .../templates/chain/_block.html.eex | 32 + .../templates/chain/_metatags.html.eex | 5 + .../gas_price_oracle_legend_item.html.eex | 43 + .../templates/chain/show.html.eex | 234 + .../common_components/_btn_add_full.html.eex | 9 + .../common_components/_btn_add_line.html.eex | 9 + .../common_components/_btn_copy.html.eex | 14 + .../_btn_copy_for_table.html.eex | 15 + .../_btn_external_link.html.eex | 8 + .../common_components/_btn_line.html.eex | 6 + .../common_components/_btn_qr_code.html.eex | 17 + .../_changed_bytecode_warning.html.eex | 4 + .../_channel_disconnected_message.html.eex | 5 + .../common_components/_check_tooltip.html.eex | 14 + .../_csv_export_button.html.eex | 9 + .../common_components/_i_tooltip.html.eex | 14 + .../common_components/_i_tooltip_2.html.eex | 11 + .../_icon_error_modal.html.eex | 29 + .../_icon_question_modal.html.eex | 29 + .../_icon_success_modal.html.eex | 29 + .../_icon_warning_modal.html.eex | 29 + .../common_components/_info.html.eex | 1 + .../common_components/_input_group.html.eex | 17 + .../_loading_spinner.html.eex | 6 + .../_minimal_proxy_pattern.html.eex | 10 + .../_modal_bottom_disclaimer.html.eex | 8 + .../_modal_close_button.html.eex | 5 + .../common_components/_modal_qr_code.html.eex | 18 + .../common_components/_modal_status.html.eex | 32 + .../_pagination_container.html.eex | 66 + .../_progress_from_to.html.eex | 9 + .../_rap_pagination_container.html.eex | 15 + .../common_components/_status_icon.html.eex | 10 + .../common_components/_svg_minus.html.eex | 4 + .../common_components/_svg_pen.html.eex | 3 + .../common_components/_svg_plus.html.eex | 4 + .../common_components/_svg_trash.html.eex | 3 + .../common_components/_table-loader.html.eex | 9 + .../common_components/_tenderly_link.html.eex | 4 + .../common_components/_tile-loader.html.eex | 120 + ..._token_transfer_type_display_name.html.eex | 12 + .../templates/csv_export/index.html.eex | 45 + .../templates/error422/index.html.eex | 12 + .../templates/form/_tag.html.eex | 3 + .../templates/form/text_field.html.eex | 15 + .../templates/icons/_accounts_icon.html.eex | 4 + .../templates/icons/_active_icon.html.eex | 3 + .../templates/icons/_api_icon.html.eex | 5 + .../templates/icons/_apps_icon.html.eex | 5 + .../templates/icons/_block_icon.html.eex | 5 + .../templates/icons/_blockchain_icon.html.eex | 3 + .../icons/_check_dark_forest_icon.html.eex | 1 + .../templates/icons/_external_link.html.eex | 1 + .../templates/icons/_gas_price_icon.html.eex | 3 + .../templates/icons/_guage_icon.html.eex | 18 + .../templates/icons/_hourglass_icon.html.eex | 17 + .../templates/icons/_inactive_icon.html.eex | 3 + .../templates/icons/_network_icon.html.eex | 3 + .../templates/icons/_search_icon.html.eex | 3 + .../templates/icons/_smart_contract.html.eex | 22 + .../icons/_test_network_icon.html.eex | 3 + .../templates/icons/_tokens_icon.html.eex | 4 + .../icons/_transaction_icon.html.eex | 4 + .../internal_server_error/index.html.eex | 12 + .../internal_transaction/_tile.html.eex | 48 + .../layout/_account_menu_item.html.eex | 37 + .../layout/_add_chain_to_mm.html.eex | 13 + .../templates/layout/_default_title.html.eex | 3 + .../templates/layout/_footer.html.eex | 97 + .../templates/layout/_search.html.eex | 35 + .../templates/layout/_topnav.html.eex | 198 + .../templates/layout/app.html.eex | 181 + .../templates/log/_data_decoded_view.html.eex | 37 + .../templates/page_not_found/index.html.eex | 12 + .../templates/page_not_found/index.json.eex | 1 + .../pending_transaction/index.html.eex | 35 + .../templates/robots/robots.txt.eex | 6 + .../templates/robots/sitemap.xml.eex | 53 + .../templates/search/_empty_td.html.eex | 4 + .../templates/search/_name_td.html.eex | 7 + .../templates/search/_tile.html.eex | 98 + .../templates/search/results.html.eex | 51 + .../_connect_container.html.eex | 16 + .../_function_response.html.eex | 44 + .../smart_contract/_functions.html.eex | 161 + .../_pending_contract_write.html.eex | 20 + .../templates/tokens/_tile.html.eex | 56 + .../templates/tokens/_token_icon.html.eex | 2 + .../tokens/_token_icon_default.html.eex | 1 + .../tokens/contract/_metatags.html.eex | 1 + .../templates/tokens/contract/index.html.eex | 23 + .../tokens/holder/_metatags.html.eex | 1 + .../tokens/holder/_token_balances.html.eex | 19 + .../templates/tokens/holder/index.html.eex | 44 + .../templates/tokens/index.html.eex | 65 + .../tokens/instance/holder/index.html.eex | 41 + .../tokens/instance/metadata/index.html.eex | 30 + .../instance/overview/_details.html.eex | 97 + .../tokens/instance/overview/_tabs.html.eex | 22 + .../tokens/instance/transfer/index.html.eex | 41 + .../tokens/inventory/_metatags.html.eex | 1 + .../tokens/inventory/_token.html.eex | 58 + .../templates/tokens/inventory/index.html.eex | 42 + .../tokens/overview/_details.html.eex | 156 + .../tokens/overview/_metatags.html.eex | 5 + .../templates/tokens/overview/_tabs.html.eex | 53 + .../tokens/transfer/_metatags.html.eex | 1 + .../tokens/transfer/_token_transfer.html.eex | 50 + .../templates/tokens/transfer/index.html.eex | 42 + .../templates/transaction/_actions.html.eex | 140 + .../transaction/_actions_aave.html.eex | 1 + .../transaction/_actions_address.html.eex | 13 + .../transaction/_actions_to.html.eex | 4 + .../transaction/_actions_uniswap.html.eex | 1 + .../transaction/_decoded_input.html.eex | 44 + .../transaction/_decoded_input_body.html.eex | 61 + .../_emission_reward_tile.html.eex | 34 + .../templates/transaction/_link.html.eex | 4 + .../_link_to_token_instance.html.eex | 1 + .../_link_to_token_symbol.html.eex | 1 + .../templates/transaction/_metatags.html.eex | 14 + .../transaction/_pending_tile.html.eex | 25 + .../templates/transaction/_tabs.html.eex | 34 + .../templates/transaction/_tile.html.eex | 99 + .../transaction/_token_transfer.html.eex | 25 + .../transaction/_total_transfers.html.eex | 23 + .../_total_transfers_from_to.html.eex | 48 + .../_transfer_token_with_id.html.eex | 2 + .../templates/transaction/index.html.eex | 45 + .../templates/transaction/not_found.html.eex | 16 + .../templates/transaction/overview.html.eex | 611 + .../show_internal_transactions.html.eex | 1 + .../transaction/show_token_transfers.html.eex | 1 + .../_metatags.html.eex | 1 + .../index.html.eex | 29 + .../templates/transaction_log/_logs.html.eex | 148 + .../transaction_log/_metatags.html.eex | 1 + .../templates/transaction_log/index.html.eex | 32 + .../transaction_raw_trace/_card_body.html.eex | 19 + .../transaction_raw_trace/_metatags.html.eex | 1 + .../transaction_raw_trace/index.html.eex | 10 + .../transaction_state/_metatags.html.eex | 1 + .../transaction_state/_state_change.html.eex | 64 + .../transaction_state/_token_balance.html.eex | 5 + .../transaction_state/index.html.eex | 58 + .../_metatags.html.eex | 1 + .../_token_transfer.html.eex | 20 + .../transaction_token_transfer/index.html.eex | 32 + .../verified_contracts/_contract.html.eex | 64 + .../verified_contracts/_metatags.html.eex | 8 + .../verified_contracts/_stats.html.eex | 33 + .../verified_contracts/index.html.eex | 107 + .../visualize_sol2uml/index.html.eex | 36 + .../templates/withdrawal/_metatags.html.eex | 8 + .../templates/withdrawal/_withdrawal.html.eex | 34 + .../templates/withdrawal/index.html.eex | 61 + .../lib/block_scout_web/tracer.ex | 5 + .../utility/event_handlers_metrics.ex | 45 + .../views/abi_encoded_value_view.ex | 193 + .../block_scout_web/views/access_helper.ex | 279 + .../views/account/api/v2/account_view.ex | 7 + .../views/account/api/v2/tags_view.ex | 27 + .../views/account/api/v2/user_view.ex | 220 + .../views/account/api_key_view.ex | 5 + .../views/account/auth_view.ex | 3 + .../views/account/common_view.ex | 11 + .../views/account/custom_abi_view.ex | 22 + .../views/account/public_tags_request_view.ex | 70 + .../views/account/tag_address_view.ex | 7 + .../views/account/tag_transaction_view.ex | 5 + .../views/account/watchlist_address_view.ex | 11 + .../views/account/watchlist_view.ex | 11 + .../views/address_coin_balance_view.ex | 34 + ...ontract_verification_common_fields_view.ex | 3 + ...ct_verification_via_flattened_code_view.ex | 6 + ...ess_contract_verification_via_json_view.ex | 3 + ..._verification_via_multi_part_files_view.ex | 6 + ...rification_via_standard_json_input_view.ex | 5 + .../address_contract_verification_view.ex | 5 + ...ddress_contract_verification_vyper_view.ex | 5 + .../views/address_contract_view.ex | 171 + .../address_internal_transaction_view.ex | 15 + .../views/address_logs_view.ex | 8 + .../views/address_read_contract_view.ex | 5 + .../views/address_read_proxy_view.ex | 5 + .../views/address_token_balance_view.ex | 20 + .../views/address_token_transfer_view.ex | 15 + .../views/address_token_view.ex | 8 + .../views/address_transaction_view.ex | 15 + .../views/address_validation_view.ex | 5 + .../lib/block_scout_web/views/address_view.ex | 481 + .../views/address_withdrawal_view.ex | 5 + .../views/address_write_contract_view.ex | 5 + .../views/address_write_proxy_view.ex | 5 + .../views/admin/dashboard_view.ex | 3 + .../views/admin/session_view.ex | 7 + .../block_scout_web/views/admin/setup_view.ex | 7 + .../views/advertisement/banners_ad_view.ex | 3 + .../views/advertisement/text_ad_view.ex | 3 + .../block_scout_web/views/api/eth_rpc/view.ex | 116 + .../views/api/rpc/address_view.ex | 271 + .../views/api/rpc/block_view.ex | 97 + .../views/api/rpc/contract_view.ex | 252 + .../views/api/rpc/logs_view.ex | 39 + .../block_scout_web/views/api/rpc/rpc_view.ex | 27 + .../views/api/rpc/stats_view.ex | 57 + .../views/api/rpc/token_view.ex | 61 + .../views/api/rpc/transaction_view.ex | 91 + .../views/api/v1/supply_view.ex | 10 + .../views/api/v2/address_badge_view.ex | 35 + .../views/api/v2/address_view.ex | 283 + .../views/api/v2/advanced_filter_view.ex | 188 + .../block_scout_web/views/api/v2/api_view.ex | 7 + .../views/api/v2/arbitrum_view.ex | 732 + .../block_scout_web/views/api/v2/blob_view.ex | 23 + .../views/api/v2/block_view.ex | 169 + .../block_scout_web/views/api/v2/celo_view.ex | 403 + .../views/api/v2/config_view.ex | 7 + .../views/api/v2/ethereum_view.ex | 53 + .../views/api/v2/filecoin_view.ex | 114 + .../block_scout_web/views/api/v2/helper.ex | 256 + .../views/api/v2/internal_transaction_view.ex | 58 + .../block_scout_web/views/api/v2/mud_view.ex | 124 + .../views/api/v2/optimism_view.ex | 468 + .../views/api/v2/polygon_edge_view.ex | 101 + .../views/api/v2/polygon_zkevm_view.ex | 192 + .../views/api/v2/proxy/metadata_view.ex | 13 + .../views/api/v2/rootstock_view.ex | 19 + .../views/api/v2/scroll_view.ex | 218 + .../views/api/v2/search_view.ex | 217 + .../views/api/v2/shibarium_view.ex | 71 + .../views/api/v2/smart_contract_view.ex | 428 + .../views/api/v2/stability_view.ex | 130 + .../views/api/v2/suave_view.ex | 137 + .../views/api/v2/token_transfer_view.ex | 108 + .../views/api/v2/token_view.ex | 166 + .../views/api/v2/transaction_view.ex | 938 + .../views/api/v2/validator_view.ex | 68 + .../views/api/v2/withdrawal_view.ex | 41 + .../views/api/v2/zilliqa_view.ex | 147 + .../views/api/v2/zksync_view.ex | 207 + .../block_scout_web/views/api_docs_view.ex | 79 + .../views/block_transaction_view.ex | 17 + .../lib/block_scout_web/views/block_view.ex | 85 + .../views/block_withdrawal_view.ex | 5 + .../views/bridged_tokens_view.ex | 24 + .../lib/block_scout_web/views/chain_view.ex | 69 + .../views/cldr_helper/number.ex | 45 + .../views/common_components_view.ex | 7 + .../lib/block_scout_web/views/csv_export.ex | 31 + .../block_scout_web/views/currency_helper.ex | 95 + .../lib/block_scout_web/views/error_422.ex | 5 + .../lib/block_scout_web/views/error_helper.ex | 59 + .../lib/block_scout_web/views/error_view.ex | 41 + .../lib/block_scout_web/views/form_view.ex | 66 + .../lib/block_scout_web/views/icons_view.ex | 3 + .../views/internal_server_error_view.ex | 5 + .../views/internal_transaction_view.ex | 30 + .../lib/block_scout_web/views/layout_view.ex | 263 + .../lib/block_scout_web/views/log_view.ex | 3 + .../lib/block_scout_web/views/nft_helper.ex | 108 + .../block_scout_web/views/page_not_found.ex | 5 + .../views/pending_transaction_view.ex | 5 + .../block_scout_web/views/render_helper.ex | 21 + .../lib/block_scout_web/views/robots_view.ex | 10 + .../block_scout_web/views/script_helper.ex | 34 + .../lib/block_scout_web/views/search_view.ex | 19 + .../views/smart_contract_view.ex | 236 + .../lib/block_scout_web/views/tab_helper.ex | 70 + .../views/tokens/contract_view.ex | 6 + .../block_scout_web/views/tokens/helper.ex | 208 + .../views/tokens/holder_view.ex | 86 + .../views/tokens/instance/holder_view.ex | 5 + .../views/tokens/instance/metadata_view.ex | 9 + .../views/tokens/instance/overview_view.ex | 76 + .../views/tokens/instance/transfer_view.ex | 5 + .../views/tokens/instance_view.ex | 3 + .../views/tokens/inventory_view.ex | 8 + .../views/tokens/overview_view.ex | 89 + .../views/tokens/transfer_view.ex | 7 + .../lib/block_scout_web/views/tokens_view.ex | 22 + .../transaction_internal_transaction_view.ex | 4 + .../views/transaction_log_view.ex | 7 + .../views/transaction_raw_trace_view.ex | 15 + .../views/transaction_state_view.ex | 40 + .../views/transaction_token_transfer_view.ex | 6 + .../block_scout_web/views/transaction_view.ex | 628 + .../views/verified_contracts_view.ex | 16 + .../views/visualize_sol2uml_view.ex | 3 + .../lib/block_scout_web/views/wei_helper.ex | 83 + .../block_scout_web/views/withdrawal_view.ex | 5 + .../block_scout_web/lib/phoenix/html/safe.ex | 32 + .../apps/block_scout_web/lib/phoenix/param.ex | 35 + .../blockscout/apps/block_scout_web/mix.exs | 194 + .../block_scout_web/priv/gettext/default.pot | 3736 ++ .../priv/gettext/en/LC_MESSAGES/default.po | 3736 ++ .../priv/gettext/en/LC_MESSAGES/errors.po | 94 + .../block_scout_web/priv/gettext/errors.pot | 94 + .../test/block_scout_web/chain_test.exs | 68 + .../channels/address_channel_test.exs | 257 + .../channels/block_channel_test.exs | 30 + .../channels/exchange_rate_channel_test.exs | 103 + .../channels/reward_channel_test.exs | 57 + .../channels/transaction_channel_test.exs | 67 + .../channels/v2/address_channel_test.exs | 129 + .../channels/v2/block_channel_test.exs | 30 + .../v2/exchange_rate_channel_test.exs | 102 + .../channels/v2/reward_channel_test.exs | 57 + .../channels/v2/transaction_channel_test.exs | 46 + .../channels/v2/websocket_test.exs | 403 + .../account/api/v2/user_controller_test.exs | 1284 + .../account/custom_abi_controller_test.exs | 189 + ...ss_coin_balance_by_day_controller_test.exs | 27 + .../address_contract_controller_test.exs | 59 + .../controllers/address_controller_test.exs | 86 + ...s_internal_transaction_controller_test.exs | 572 + .../address_read_contract_controller_test.exs | 76 + .../address_read_proxy_controller_test.exs | 74 + .../address_token_balance_controller_test.exs | 46 + .../address_token_controller_test.exs | 223 + ...address_token_transfer_controller_test.exs | 272 + .../address_transaction_controller_test.exs | 153 + .../address_withdrawal_controller_test.exs | 116 + ...address_write_contract_controller_test.exs | 78 + .../address_write_proxy_controller_test.exs | 76 + .../admin/dashboard_controller_test.exs | 26 + .../admin/session_controller_test.exs | 83 + .../admin/setup_controller_test.exs | 109 + .../api/rpc/address_controller_test.exs | 3553 ++ .../api/rpc/block_controller_test.exs | 430 + .../api/rpc/contract_controller_test.exs | 1340 + .../api/rpc/eth_controller_test.exs | 752 + .../api/rpc/logs_controller_test.exs | 885 + .../api/rpc/rpc_translator_test.exs | 89 + .../api/rpc/stats_controller_test.exs | 312 + .../api/rpc/token_controller_test.exs | 109 + .../api/rpc/transaction_controller_test.exs | 870 + .../api/v1/health_controller_test.exs | 159 + .../api/v1/supply_controller_test.exs | 17 + ...erified_smart_contract_controller_test.exs | 80 + .../api/v2/address_controller_test.exs | 3896 ++ .../v2/advanced_filter_controller_test.exs | 1060 + .../api/v2/block_controller_test.exs | 525 + .../api/v2/config_controller_test.exs | 22 + .../api/v2/csv_export_controller_test.exs | 435 + .../api/v2/import_controller_test.exs | 166 + .../internal_transaction_controller_test.exs | 94 + .../api/v2/main_page_controller_test.exs | 181 + .../api/v2/search_controller_test.exs | 1418 + .../api/v2/smart_contract_controller_test.exs | 1905 + .../api/v2/stats_controller_test.exs | 67 + .../api/v2/token_controller_test.exs | 2224 ++ .../api/v2/token_transfer_controller_test.exs | 189 + .../api/v2/transaction_controller_test.exs | 1695 + .../api/v2/utils_controller_test.exs | 78 + .../api/v2/validator_controller_test.exs | 295 + .../api/v2/verification_controller_test.exs | 452 + .../api/v2/withdrawal_controller_test.exs | 66 + .../controllers/api_docs_controller_test.exs | 18 + .../controllers/block_controller_test.exs | 188 + .../block_transaction_controller_test.exs | 204 + .../block_withdrawal_controller_test.exs | 139 + .../market_history_chart_controller_test.exs | 24 + ...nsaction_history_chart_controller_test.exs | 57 + .../controllers/chain_controller_test.exs | 242 + .../controllers/metrics_contoller_test.exs | 11 + .../page_not_found_controller_test.exs | 11 + .../pending_transaction_controller_test.exs | 84 + .../recent_transactions_controller_test.exs | 54 + .../smart_contract_controller_test.exs | 292 + .../tokens/holder_controller_test.exs | 93 + .../instance/transfer_controller_test.exs | 28 + .../tokens/instance_controller_test.exs | 26 + .../tokens/inventory_controller_test.exs | 141 + .../tokens/read_contract_controller_test.exs | 68 + .../tokens/token_controller_test.exs | 39 + .../transaction_controller_test.exs | 137 + ...n_internal_transaction_controller_test.exs | 224 + .../transaction_log_controller_test.exs | 176 + .../transaction_state_controller_test.exs | 264 + ...saction_token_transfer_controller_test.exs | 173 + .../verified_contracts_controller_test.exs | 182 + .../withdrawal_controller_test.exs | 56 + .../address_contract_verification_test.exs | 77 + .../features/pages/address_contract_page.ex | 23 + .../features/pages/address_page.ex | 178 + .../features/pages/app_page.ex | 19 + .../features/pages/block_list_page.ex | 33 + .../features/pages/block_page.ex | 50 + .../features/pages/chain_page.ex | 48 + .../features/pages/contract_verify_page.ex | 58 + .../features/pages/token_page.ex | 27 + .../features/pages/transaction_list_page.ex | 33 + .../features/pages/transaction_logs_page.ex | 23 + .../features/pages/transaction_page.ex | 25 + .../features/viewing_addresses_test.exs | 496 + .../features/viewing_app_test.exs | 139 + .../features/viewing_blocks_test.exs | 186 + .../features/viewing_chain_test.exs | 160 + .../features/viewing_tokens_test.exs | 21 + .../features/viewing_transactions_test.exs | 163 + .../graphql/schema/query/address_test.exs | 596 + .../graphql/schema/query/addresses_test.exs | 185 + .../graphql/schema/query/block_test.exs | 108 + .../schema/query/introspection_test.exs | 125 + .../graphql/schema/query/node_test.exs | 209 + .../schema/query/token_transfers_test.exs | 327 + .../graphql/schema/query/transaction_test.exs | 552 + .../subscription/token_transfers_test.exs | 117 + .../admin/check_owner_registered_test.exs | 27 + .../plug/admin/require_admin_role_test.exs | 42 + .../plug/fetch_user_from_session_test.exs | 46 + .../routers/chain_type_scope_test.exs | 50 + .../block_scout_web/social_media_test.exs | 25 + .../views/abi_encoded_value_view_test.exs | 125 + .../views/access_helper_test.exs | 70 + .../views/address_coin_balance_view_test.exs | 62 + .../views/address_contract_view_test.exs | 17 + .../views/address_token_balance_view_test.exs | 67 + .../views/address_transaction_view_test.exs | 5 + .../views/address_view_test.exs | 361 + .../views/api/v2/transaction_view_test.exs | 163 + .../views/api_docs_view_test.exs | 101 + .../block_scout_web/views/block_view_test.exs | 98 + .../views/currency_helper_test.exs | 64 + .../views/error_helper_test.exs | 42 + .../block_scout_web/views/error_view_test.exs | 22 + .../views/internal_transaction_view_test.exs | 40 + .../views/layout_view_test.exs | 203 + .../block_scout_web/views/nft_helper_test.exs | 29 + .../views/render_helper_test.exs | 22 + .../views/search_view_test.exs | 44 + .../views/smart_contract_view_test.exs | 50 + .../block_scout_web/views/tab_helper_test.exs | 57 + .../views/tokens/helper_test.exs | 72 + .../views/tokens/holder_view_test.exs | 74 + .../tokens/instance/overview_view_test.exs | 122 + .../views/tokens/overview_view_test.exs | 167 + .../views/tokens/read_contract_view_test.exs | 3 + .../views/tokens/smart_contract_view_test.exs | 131 + .../views/tokens/transfer_view_test.exs | 3 + .../views/transaction_view_test.exs | 383 + .../block_scout_web/views/wei_helper_test.exs | 8 + .../param/explorer/chain/block_test.exs | 17 + .../test/support/channel_case.ex | 41 + .../block_scout_web/test/support/conn_case.ex | 55 + .../test/support/feature_case.ex | 40 + .../smart_contract/compiler_tests.json | 13 + .../smart_contract/contract_with_lib.json | 14 + ...all_alliance_sources_partial_response.json | 43 + ...sources_partial_response_eth_bdb_full.json | 43 + ..._search_all_alliance_sources_response.json | 43 + ..._db_search_all_local_sources_response.json | 59 + ..._search_all_sourcify_sources_response.json | 30 + ...l_sourcify_sources_with_libs_response.json | 47 + .../eth_bytecode_db_search_response.json | 17 + ...r_vyper_multi_part_blueprint_response.json | 21 + .../fixture/smart_contract/solc_bin.json | 7894 ++++ .../test/support/subscription_case.ex | 27 + .../apps/block_scout_web/test/test_helper.exs | 45 + .../apps/ethereum_jsonrpc/.gitignore | 24 + .../apps/ethereum_jsonrpc/README.md | 85 + .../apps/ethereum_jsonrpc/config/config.exs | 34 + .../apps/ethereum_jsonrpc/config/dev.exs | 7 + .../apps/ethereum_jsonrpc/config/prod.exs | 8 + .../ethereum_jsonrpc/config/runtime/test.exs | 10 + .../apps/ethereum_jsonrpc/config/test.exs | 22 + .../ethereum_jsonrpc/lib/ethereum_jsonrpc.ex | 881 + .../lib/ethereum_jsonrpc/anvil.ex | 55 + .../lib/ethereum_jsonrpc/application.ex | 70 + .../lib/ethereum_jsonrpc/arbitrum.ex | 391 + .../arbitrum/constants/contracts.ex | 549 + .../arbitrum/constants/events.ex | 155 + .../lib/ethereum_jsonrpc/besu.ex | 81 + .../lib/ethereum_jsonrpc/besu/trace.ex | 47 + .../lib/ethereum_jsonrpc/besu/traces.ex | 16 + .../lib/ethereum_jsonrpc/block.ex | 984 + .../lib/ethereum_jsonrpc/block/by_hash.ex | 9 + .../lib/ethereum_jsonrpc/block/by_nephew.ex | 15 + .../lib/ethereum_jsonrpc/block/by_number.ex | 39 + .../lib/ethereum_jsonrpc/block/by_tag.ex | 62 + .../lib/ethereum_jsonrpc/blocks.ex | 554 + .../lib/ethereum_jsonrpc/contract.ex | 243 + .../lib/ethereum_jsonrpc/decode_error.ex | 77 + .../lib/ethereum_jsonrpc/encoder.ex | 130 + .../lib/ethereum_jsonrpc/erc20.ex | 148 + .../lib/ethereum_jsonrpc/erigon.ex | 61 + .../lib/ethereum_jsonrpc/fetched_balance.ex | 62 + .../lib/ethereum_jsonrpc/fetched_balances.ex | 61 + .../ethereum_jsonrpc/fetched_beneficiaries.ex | 196 + .../ethereum_jsonrpc/fetched_beneficiary.ex | 17 + .../lib/ethereum_jsonrpc/fetched_code.ex | 94 + .../lib/ethereum_jsonrpc/fetched_codes.ex | 84 + .../lib/ethereum_jsonrpc/filecoin.ex | 744 + .../lib/ethereum_jsonrpc/geth.ex | 508 + .../lib/ethereum_jsonrpc/geth/call.ex | 490 + .../lib/ethereum_jsonrpc/geth/calls.ex | 239 + .../ethereum_jsonrpc/geth/polygon_tracer.ex | 355 + .../lib/ethereum_jsonrpc/geth/tracer.ex | 321 + .../lib/ethereum_jsonrpc/http.ex | 271 + .../lib/ethereum_jsonrpc/http/httpoison.ex | 90 + .../lib/ethereum_jsonrpc/ipc.ex | 93 + .../lib/ethereum_jsonrpc/log.ex | 193 + .../lib/ethereum_jsonrpc/logs.ex | 125 + .../lib/ethereum_jsonrpc/nethermind.ex | 70 + .../lib/ethereum_jsonrpc/nethermind/trace.ex | 487 + .../nethermind/trace/action.ex | 54 + .../nethermind/trace/result.ex | 42 + .../lib/ethereum_jsonrpc/nethermind/traces.ex | 16 + .../lib/ethereum_jsonrpc/nft.ex | 203 + .../lib/ethereum_jsonrpc/nonce.ex | 90 + .../ethereum_jsonrpc/pending_transaction.ex | 75 + .../prometheus/instrumenter.ex | 36 + .../lib/ethereum_jsonrpc/receipt.ex | 430 + .../lib/ethereum_jsonrpc/receipts.ex | 449 + .../receipts/by_block_number.ex | 33 + .../receipts/by_transaction_hash.ex | 22 + .../ethereum_jsonrpc/request_coordinator.ex | 198 + .../lib/ethereum_jsonrpc/rolling_window.ex | 224 + .../lib/ethereum_jsonrpc/rsk.ex | 25 + .../lib/ethereum_jsonrpc/rsk/trace.ex | 21 + .../lib/ethereum_jsonrpc/rsk/traces.ex | 16 + .../ethereum_jsonrpc/signed_authorization.ex | 58 + .../lib/ethereum_jsonrpc/subscription.ex | 64 + .../lib/ethereum_jsonrpc/trace_block.ex | 91 + .../trace_replay_block_transactions.ex | 290 + .../lib/ethereum_jsonrpc/tracer.ex | 5 + .../lib/ethereum_jsonrpc/transaction.ex | 757 + .../lib/ethereum_jsonrpc/transactions.ex | 159 + .../lib/ethereum_jsonrpc/transport.ex | 126 + .../lib/ethereum_jsonrpc/uncle.ex | 42 + .../lib/ethereum_jsonrpc/uncles.ex | 37 + .../ethereum_jsonrpc/utility/common_helper.ex | 72 + .../utility/endpoint_availability_checker.ex | 161 + .../utility/endpoint_availability_observer.ex | 502 + .../ethereum_jsonrpc/utility/ranges_helper.ex | 225 + .../lib/ethereum_jsonrpc/variant.ex | 136 + .../lib/ethereum_jsonrpc/web_socket.ex | 115 + .../web_socket/registration.ex | 81 + .../web_socket/retry_worker.ex | 59 + .../ethereum_jsonrpc/web_socket/supervisor.ex | 66 + .../web_socket/web_socket_client.ex | 625 + .../web_socket/web_socket_client/options.ex | 17 + .../lib/ethereum_jsonrpc/withdrawal.ex | 101 + .../lib/ethereum_jsonrpc/withdrawals.ex | 67 + .../lib/ethereum_jsonrpc/zilliqa.ex | 19 + .../zilliqa/aggregate_quorum_certificate.ex | 187 + .../lib/ethereum_jsonrpc/zilliqa/helper.ex | 145 + .../zilliqa/nested_quorum_certificates.ex | 192 + .../zilliqa/quorum_certificate.ex | 100 + .../blockscout/apps/ethereum_jsonrpc/mix.exs | 93 + .../geth/debug_traceTransaction/tracer.js | 479 + .../test/ethereum_jsonrpc/block_test.exs | 112 + .../test/ethereum_jsonrpc/blocks_test.exs | 5 + .../test/ethereum_jsonrpc/contract_test.exs | 140 + .../test/ethereum_jsonrpc/encoder_test.exs | 171 + .../fetched_beneficiaries_test.exs | 260 + .../test/ethereum_jsonrpc/filecoin_test.exs | 200 + .../test/ethereum_jsonrpc/geth/call_test.exs | 49 + .../ethereum_jsonrpc/geth/calls_tests.exs | 5 + .../ethereum_jsonrpc/geth/tracer_test.exs | 53 + .../test/ethereum_jsonrpc/geth_test.exs | 1013 + .../test/ethereum_jsonrpc/http/mox_test.exs | 307 + .../test/ethereum_jsonrpc/log_test.exs | 32 + .../test/ethereum_jsonrpc/mox_test.exs | 38 + .../nethermind/trace/action_test.exs | 5 + .../nethermind/trace/result_test.exs | 5 + .../nethermind/trace_test.exs | 5 + .../test/ethereum_jsonrpc/nethermind_test.exs | 616 + .../test/ethereum_jsonrpc/receipt_test.exs | 30 + .../test/ethereum_jsonrpc/receipts_test.exs | 178 + .../request_coordinator_test.exs | 67 + .../ethereum_jsonrpc/rolling_window_test.exs | 119 + .../ethereum_jsonrpc/transaction_test.exs | 15 + .../ethereum_jsonrpc/transactions_test.exs | 45 + .../test/ethereum_jsonrpc/uncle_test.exs | 5 + .../test/ethereum_jsonrpc/uncles_test.exs | 5 + .../utility/common_helper_test.exs | 52 + .../web_socket/web_socket_client_test.exs | 167 + .../test/ethereum_jsonrpc/web_socket_test.exs | 231 + .../test/ethereum_jsonrpc/withdrawal_test.exs | 5 + .../ethereum_jsonrpc/withdrawals_test.exs | 5 + .../test/ethereum_jsonrpc/zilliqa_test.exs | 8 + .../test/ethereum_jsonrpc_test.exs | 1112 + .../test/support/ethereum_jsonrpc/case.ex | 56 + .../ethereum_jsonrpc/case/filecoin/mox.ex | 17 + .../case/geth/http_websocket.ex | 20 + .../support/ethereum_jsonrpc/case/geth/mox.ex | 17 + .../case/nethermind/http_websocket.ex | 20 + .../ethereum_jsonrpc/case/nethermind/mox.ex | 17 + .../support/ethereum_jsonrpc/http/case.ex | 32 + .../ethereum_jsonrpc/web_socket/case.ex | 9 + .../ethereum_jsonrpc/web_socket/case/geth.ex | 25 + .../ethereum_jsonrpc/web_socket/case/mox.ex | 76 + .../web_socket/case/nethermind.ex | 25 + .../web_socket/cowboy/websocket_handler.ex | 67 + .../fixture/geth/trace/calltracer.json | 1 + .../fixture/geth/trace/struct_logger.json | 1 + .../ethereum_jsonrpc/test/test_helper.exs | 16 + .../blockscout/apps/explorer/.gitignore | 3 + .../blockscout/apps/explorer/.sobelow-conf | 12 + .../blockscout/apps/explorer/README.md | 38 + .../recent_collated_transactions.benchee | Bin 0 -> 4301269 bytes .../chain/recent_collated_transactions.exs | 56 + .../apps/explorer/config/config.exs | 212 + .../blockscout/apps/explorer/config/dev.exs | 53 + .../apps/explorer/config/dev/anvil.exs | 34 + .../apps/explorer/config/dev/besu.exs | 38 + .../apps/explorer/config/dev/erigon.exs | 38 + .../apps/explorer/config/dev/filecoin.exs | 37 + .../apps/explorer/config/dev/geth.exs | 38 + .../apps/explorer/config/dev/nethermind.exs | 38 + .../apps/explorer/config/dev/rsk.exs | 38 + .../blockscout/apps/explorer/config/prod.exs | 61 + .../apps/explorer/config/prod/anvil.exs | 34 + .../apps/explorer/config/prod/besu.exs | 38 + .../apps/explorer/config/prod/erigon.exs | 38 + .../apps/explorer/config/prod/filecoin.exs | 37 + .../apps/explorer/config/prod/geth.exs | 38 + .../apps/explorer/config/prod/nethermind.exs | 38 + .../apps/explorer/config/prod/rsk.exs | 38 + .../apps/explorer/config/runtime/test.exs | 110 + .../blockscout/apps/explorer/config/test.exs | 107 + .../apps/explorer/config/test/anvil.exs | 13 + .../apps/explorer/config/test/besu.exs | 14 + .../apps/explorer/config/test/erigon.exs | 14 + .../apps/explorer/config/test/filecoin.exs | 13 + .../apps/explorer/config/test/geth.exs | 13 + .../apps/explorer/config/test/nethermind.exs | 14 + .../apps/explorer/config/test/rsk.exs | 14 + .../blockscout/apps/explorer/coveralls.json | 5 + .../blockscout/apps/explorer/lib/explorer.ex | 22 + .../explorer/lib/explorer/access_helper.ex | 57 + .../apps/explorer/lib/explorer/account.ex | 88 + .../explorer/lib/explorer/account/api/key.ex | 203 + .../explorer/lib/explorer/account/api/plan.ex | 13 + .../lib/explorer/account/custom_abi.ex | 336 + .../explorer/lib/explorer/account/identity.ex | 362 + .../lib/explorer/account/notifier/email.ex | 168 + .../account/notifier/forbidden_address.ex | 72 + .../lib/explorer/account/notifier/notify.ex | 159 + .../lib/explorer/account/notifier/summary.ex | 222 + .../explorer/lib/explorer/account/notify.ex | 43 + .../explorer/account/public_tags_request.ex | 334 + .../lib/explorer/account/tag_address.ex | 255 + .../lib/explorer/account/tag_transaction.ex | 270 + .../lib/explorer/account/watchlist.ex | 93 + .../lib/explorer/account/watchlist_address.ex | 311 + .../account/watchlist_notification.ex | 151 + .../lib/explorer/accounts/accounts.ex | 93 + .../explorer/lib/explorer/accounts/user.ex | 44 + .../explorer/accounts/user/authenticate.ex | 22 + .../explorer/accounts/user/registration.ex | 29 + .../lib/explorer/accounts/user_contact.ex | 50 + .../apps/explorer/lib/explorer/admin.ex | 76 + .../lib/explorer/admin/administrator.ex | 34 + .../explorer/lib/explorer/admin/recovery.ex | 67 + .../apps/explorer/lib/explorer/admin/role.ex | 32 + .../apps/explorer/lib/explorer/application.ex | 450 + .../lib/explorer/application/constants.ex | 105 + .../explorer/arbitrum/claim_rollup_message.ex | 739 + .../lib/explorer/arbitrum/withdraw.ex | 86 + .../explorer/lib/explorer/bloom_filter.ex | 78 + .../apps/explorer/lib/explorer/bound_queue.ex | 177 + .../apps/explorer/lib/explorer/chain.ex | 4684 +++ .../explorer/lib/explorer/chain/address.ex | 1011 + .../explorer/chain/address/coin_balance.ex | 166 + .../chain/address/coin_balance_daily.ex | 77 + .../lib/explorer/chain/address/counters.ex | 574 + .../chain/address/current_token_balance.ex | 357 + .../chain/address/metadata_preloader.ex | 316 + .../lib/explorer/chain/address/name.ex | 92 + .../chain/address/scam_badge_to_address.ex | 101 + .../lib/explorer/chain/address/token.ex | 120 + .../explorer/chain/address/token_balance.ex | 151 + .../lib/explorer/chain/advanced_filter.ex | 1387 + .../explorer/chain/arbitrum/batch_block.ex | 69 + .../chain/arbitrum/batch_to_da_blob.ex | 64 + .../chain/arbitrum/batch_transaction.ex | 61 + .../chain/arbitrum/da_multi_purpose_record.ex | 106 + .../lib/explorer/chain/arbitrum/l1_batch.ex | 88 + .../explorer/chain/arbitrum/l1_execution.ex | 60 + .../chain/arbitrum/lifecycle_transaction.ex | 70 + .../lib/explorer/chain/arbitrum/message.ex | 86 + .../explorer/chain/arbitrum/reader/README.md | 40 + .../chain/arbitrum/reader/api/general.ex | 44 + .../chain/arbitrum/reader/api/messages.ex | 183 + .../chain/arbitrum/reader/api/settlement.ex | 536 + .../explorer/chain/arbitrum/reader/common.ex | 137 + .../chain/arbitrum/reader/indexer/general.ex | 72 + .../chain/arbitrum/reader/indexer/messages.ex | 373 + .../indexer/parent_chain_transactions.ex | 115 + .../arbitrum/reader/indexer/settlement.ex | 610 + .../lib/explorer/chain/beacon/blob.ex | 47 + .../explorer/chain/beacon/blob_transaction.ex | 47 + .../lib/explorer/chain/beacon/reader.ex | 216 + .../lib/explorer/chain/blackfort/validator.ex | 207 + .../apps/explorer/lib/explorer/chain/block.ex | 580 + .../explorer/chain/block/emission_reward.ex | 28 + .../lib/explorer/chain/block/range.ex | 190 + .../explorer/chain/block/reader/general.ex | 284 + .../lib/explorer/chain/block/reward.ex | 284 + .../chain/block/reward/address_type.ex | 103 + .../chain/block/second_degree_relation.ex | 63 + .../lib/explorer/chain/block_number_helper.ex | 124 + .../lib/explorer/chain/bridged_token.ex | 1032 + .../lib/explorer/chain/cache/accounts.ex | 73 + .../chain/cache/background_migrations.ex | 347 + .../lib/explorer/chain/cache/block_number.ex | 58 + .../lib/explorer/chain/cache/blocks.ex | 41 + .../chain/cache/celo_core_contracts.ex | 275 + .../lib/explorer/chain/cache/chain_id.ex | 31 + .../cache/counters/address_gas_usage_sum.ex | 87 + .../counters/address_tabs_elements_count.ex | 138 + .../counters/address_token_transfers_count.ex | 85 + .../cache/counters/address_tokens_usd_sum.ex | 87 + .../counters/address_transactions_count.ex | 85 + .../counters/addresses_coin_balance_sum.ex | 66 + .../addresses_coin_balance_sum_minus_burnt.ex | 69 + .../chain/cache/counters/addresses_count.ex | 131 + .../cache/counters/average_block_time.ex | 147 + .../counters/blackfort/validators_count.ex | 95 + .../cache/counters/block_burnt_fee_count.ex | 71 + .../counters/block_priority_fee_count.ex | 71 + .../chain/cache/counters/blocks_count.ex | 95 + .../chain/cache/counters/contracts_count.ex | 95 + .../chain/cache/counters/gas_usage_sum.ex | 96 + .../explorer/chain/cache/counters/helper.ex | 266 + .../average_block_time_duration_format.ex | 104 + .../cache/counters/last_fetched_counter.ex | 132 + .../cache/counters/new_contracts_count.ex | 96 + .../new_pending_transactions_count.ex | 96 + .../counters/new_verified_contracts_count.ex | 96 + .../optimism/last_output_root_size_counter.ex | 113 + .../counters/pending_block_operation_count.ex | 78 + .../counters/rootstock/locked_btc_count.ex | 31 + .../deposits_and_withdrawals_count.ex | 58 + .../counters/stability/validators_count.ex | 103 + .../cache/counters/token_holders_count.ex | 98 + .../cache/counters/token_transfers_count.ex | 76 + .../cache/counters/transactions_24h_count.ex | 155 + .../cache/counters/transactions_count.ex | 79 + .../counters/verified_contracts_count.ex | 95 + .../chain/cache/counters/withdrawals_sum.ex | 92 + .../explorer/chain/cache/gas_price_oracle.ex | 396 + .../chain/cache/latest_l1_block_number.ex | 15 + .../explorer/chain/cache/min_missing_block.ex | 74 + .../cache/optimism_finalization_period.ex | 54 + .../lib/explorer/chain/cache/state_changes.ex | 32 + .../cache/transaction_action_tokens_data.ex | 61 + .../cache/transaction_action_uniswap_pools.ex | 44 + .../lib/explorer/chain/cache/transactions.ex | 30 + .../chain/cache/transactions_api_v2.ex | 27 + .../lib/explorer/chain/cache/uncles.ex | 48 + .../explorer/chain/celo/election_reward.ex | 558 + .../lib/explorer/chain/celo/epoch_reward.ex | 118 + .../lib/explorer/chain/celo/helper.ex | 124 + .../celo/pending_epoch_block_operation.ex | 87 + .../lib/explorer/chain/celo/reader.ex | 213 + .../chain/celo/validator_group_vote.ex | 76 + .../lib/explorer/chain/contract_method.ex | 157 + .../address/internal_transactions.ex | 103 + .../explorer/chain/csv_export/address/logs.ex | 65 + .../csv_export/address/token_transfers.ex | 184 + .../chain/csv_export/address/transactions.ex | 121 + .../chain/csv_export/celo/election_rewards.ex | 87 + .../lib/explorer/chain/csv_export/helper.ex | 173 + .../lib/explorer/chain/currency_helper.ex | 16 + .../apps/explorer/lib/explorer/chain/data.ex | 430 + .../lib/explorer/chain/decoding_helper.ex | 73 + .../explorer/chain/denormalization_helper.ex | 66 + .../lib/explorer/chain/events/db_sender.ex | 36 + .../lib/explorer/chain/events/listener.ex | 92 + .../lib/explorer/chain/events/publisher.ex | 57 + .../explorer/chain/events/simple_sender.ex | 21 + .../lib/explorer/chain/events/subscriber.ex | 67 + .../chain/fetcher/addresses_blacklist.ex | 121 + .../fetcher/addresses_blacklist/blockaid.ex | 44 + .../check_bytecode_matching_on_demand.ex | 80 + .../fetcher/fetch_validator_info_on_demand.ex | 88 + ...ook_up_smart_contract_sources_on_demand.ex | 279 + .../lib/explorer/chain/filecoin/id.ex | 157 + .../explorer/chain/filecoin/native_address.ex | 477 + .../filecoin/pending_address_operation.ex | 85 + .../apps/explorer/lib/explorer/chain/gas.ex | 10 + .../apps/explorer/lib/explorer/chain/hash.ex | 246 + .../lib/explorer/chain/hash/address.ex | 270 + .../explorer/lib/explorer/chain/hash/full.ex | 150 + .../explorer/lib/explorer/chain/hash/nonce.ex | 146 + .../lib/explorer/chain/health/helper.ex | 245 + .../lib/explorer/chain/health/monitor.ex | 168 + .../explorer/lib/explorer/chain/import.ex | 423 + .../lib/explorer/chain/import/runner.ex | 62 + .../import/runner/address/coin_balances.ex | 140 + .../runner/address/coin_balances_daily.ex | 135 + .../runner/address/current_token_balances.ex | 387 + .../import/runner/address/token_balances.ex | 162 + .../explorer/chain/import/runner/addresses.ex | 305 + .../import/runner/arbitrum/batch_blocks.ex | 104 + .../runner/arbitrum/batch_to_da_blobs.ex | 102 + .../runner/arbitrum/batch_transactions.ex | 79 + .../arbitrum/da_multi_purpose_records.ex | 106 + .../import/runner/arbitrum/l1_batches.ex | 114 + .../import/runner/arbitrum/l1_executions.ex | 102 + .../runner/arbitrum/lifecycle_transactions.ex | 107 + .../chain/import/runner/arbitrum/messages.ex | 117 + .../import/runner/beacon/blob_transactions.ex | 115 + .../chain/import/runner/block/rewards.ex | 84 + .../runner/block/second_degree_relations.ex | 107 + .../explorer/chain/import/runner/blocks.ex | 1062 + .../import/runner/celo/election_rewards.ex | 93 + .../chain/import/runner/celo/epoch_rewards.ex | 139 + .../runner/celo/validator_group_votes.ex | 91 + .../explorer/chain/import/runner/helper.ex | 22 + .../import/runner/internal_transactions.ex | 867 + .../lib/explorer/chain/import/runner/logs.ex | 155 + .../chain/import/runner/optimism/deposits.ex | 106 + .../import/runner/optimism/dispute_games.ex | 110 + .../runner/optimism/eip1559_config_updates.ex | 104 + .../runner/optimism/frame_sequence_blobs.ex | 109 + .../import/runner/optimism/frame_sequences.ex | 102 + .../runner/optimism/interop_messages.ex | 118 + .../import/runner/optimism/output_roots.ex | 108 + .../runner/optimism/transaction_batches.ex | 101 + .../runner/optimism/withdrawal_events.ex | 106 + .../import/runner/optimism/withdrawals.ex | 104 + .../runner/polygon_edge/deposit_executes.ex | 106 + .../import/runner/polygon_edge/deposits.ex | 110 + .../runner/polygon_edge/withdrawal_exits.ex | 106 + .../import/runner/polygon_edge/withdrawals.ex | 108 + .../polygon_zkevm/batch_transactions.ex | 79 + .../runner/polygon_zkevm/bridge_l1_tokens.ex | 101 + .../runner/polygon_zkevm/bridge_operations.ex | 115 + .../polygon_zkevm/lifecycle_transactions.ex | 103 + .../polygon_zkevm/transaction_batches.ex | 114 + .../import/runner/scroll/batch_bundles.ex | 106 + .../chain/import/runner/scroll/batches.ex | 110 + .../import/runner/scroll/bridge_operations.ex | 111 + .../import/runner/scroll/l1_fee_params.ex | 102 + .../runner/shibarium/bridge_operations.ex | 119 + .../import/runner/signed_authorizations.ex | 111 + .../chain/import/runner/token_instances.ex | 106 + .../chain/import/runner/token_transfers.ex | 158 + .../explorer/chain/import/runner/tokens.ex | 317 + .../chain/import/runner/transaction/forks.ex | 93 + .../import/runner/transaction_actions.ex | 104 + .../chain/import/runner/transactions.ex | 718 + .../chain/import/runner/withdrawals.ex | 106 + .../zilliqa/aggregate_quorum_certificates.ex | 79 + .../zilliqa/nested_quorum_certificates.ex | 86 + .../runner/zilliqa/quorum_certificates.ex | 79 + .../import/runner/zksync/batch_blocks.ex | 79 + .../runner/zksync/batch_transactions.ex | 79 + .../runner/zksync/lifecycle_transactions.ex | 103 + .../runner/zksync/transaction_batches.ex | 122 + .../lib/explorer/chain/import/stage.ex | 78 + .../stage/block_transaction_referencing.ex | 33 + .../lib/explorer/chain/import/stage/blocks.ex | 27 + .../chain/import/stage/chain_type_specific.ex | 96 + .../import/stage/internal_transactions.ex | 27 + .../lib/explorer/chain/import/stage/logs.ex | 27 + .../lib/explorer/chain/import/stage/main.ex | 37 + .../chain/import/stage/token_instances.ex | 27 + .../chain/import/stage/token_referencing.ex | 28 + .../explorer/chain/internal_transaction.ex | 896 + .../chain/internal_transaction/action.ex | 42 + .../chain/internal_transaction/call_type.ex | 150 + .../chain/internal_transaction/result.ex | 32 + .../chain/internal_transaction/type.ex | 177 + .../apps/explorer/lib/explorer/chain/log.ex | 694 + .../explorer/lib/explorer/chain/map_cache.ex | 246 + .../lib/explorer/chain/method_identifier.ex | 36 + .../explorer/lib/explorer/chain/metrics.ex | 83 + .../lib/explorer/chain/metrics/queries.ex | 273 + .../apps/explorer/lib/explorer/chain/mud.ex | 646 + .../explorer/lib/explorer/chain/mud/schema.ex | 110 + .../explorer/lib/explorer/chain/mud/table.ex | 88 + .../chain/neon/linked_solana_transactions.ex | 40 + .../lib/explorer/chain/null_round_height.ex | 153 + .../lib/explorer/chain/optimism/deposit.ex | 105 + .../explorer/chain/optimism/dispute_game.ex | 89 + .../chain/optimism/eip1559_config_update.ex | 107 + .../explorer/chain/optimism/frame_sequence.ex | 248 + .../chain/optimism/frame_sequence_blob.ex | 116 + .../chain/optimism/interop_message.ex | 786 + .../explorer/chain/optimism/output_root.ex | 102 + .../lib/explorer/chain/optimism/reader.ex | 43 + .../chain/optimism/transaction_batch.ex | 283 + .../lib/explorer/chain/optimism/withdrawal.ex | 411 + .../chain/optimism/withdrawal_event.ex | 69 + .../lib/explorer/chain/ordered_cache.ex | 378 + .../explorer/chain/pending_block_operation.ex | 99 + .../chain/pending_operations_helper.ex | 121 + .../chain/pending_transaction_operation.ex | 91 + .../explorer/chain/polygon_edge/deposit.ex | 44 + .../chain/polygon_edge/deposit_execute.ex | 34 + .../lib/explorer/chain/polygon_edge/reader.ex | 153 + .../explorer/chain/polygon_edge/withdrawal.ex | 53 + .../chain/polygon_edge/withdrawal_exit.ex | 33 + .../chain/polygon_zkevm/batch_transaction.ex | 37 + .../explorer/chain/polygon_zkevm/bridge.ex | 55 + .../chain/polygon_zkevm/bridge_l1_token.ex | 37 + .../polygon_zkevm/lifecycle_transaction.ex | 33 + .../explorer/chain/polygon_zkevm/reader.ex | 394 + .../chain/polygon_zkevm/transaction_batch.ex | 47 + .../chain/rollup_reorg_monitor_queue.ex | 91 + .../lib/explorer/chain/scroll/batch.ex | 151 + .../lib/explorer/chain/scroll/batch_bundle.ex | 58 + .../lib/explorer/chain/scroll/bridge.ex | 78 + .../lib/explorer/chain/scroll/l1_fee_param.ex | 134 + .../lib/explorer/chain/scroll/reader.ex | 461 + .../explorer/lib/explorer/chain/search.ex | 1270 + .../lib/explorer/chain/shibarium/bridge.ex | 67 + .../lib/explorer/chain/shibarium/reader.ex | 121 + .../explorer/chain/signed_authorization.ex | 80 + .../lib/explorer/chain/smart_contract.ex | 1614 + .../chain/smart_contract/audit_report.ex | 136 + .../chain/smart_contract/external_library.ex | 12 + .../chain/smart_contract/legacy_helper.ex | 111 + .../explorer/chain/smart_contract/proxy.ex | 549 + .../proxy/clone_with_immutable_arguments.ex | 54 + .../chain/smart_contract/proxy/eip_1167.ex | 66 + .../chain/smart_contract/proxy/eip_1822.ex | 38 + .../chain/smart_contract/proxy/eip_1967.ex | 120 + .../chain/smart_contract/proxy/eip_2535.ex | 37 + .../chain/smart_contract/proxy/eip_7702.ex | 82 + .../chain/smart_contract/proxy/erc_7760.ex | 100 + .../chain/smart_contract/proxy/master_copy.ex | 68 + .../proxy/models/implementation.ex | 545 + .../proxy/resolved_delegate_proxy.ex | 148 + .../proxy/verification_status.ex | 117 + .../smart_contract/verification_status.ex | 146 + .../chain/smart_contract_additional_source.ex | 59 + .../lib/explorer/chain/stability/validator.ex | 289 + .../explorer/lib/explorer/chain/supply.ex | 32 + .../explorer/chain/supply/exchange_rate.ex | 21 + .../chain/supply/proof_of_authority.ex | 57 + .../explorer/lib/explorer/chain/supply/rsk.ex | 153 + .../apps/explorer/lib/explorer/chain/token.ex | 467 + .../lib/explorer/chain/token/instance.ex | 1245 + .../chain/token/instance/media_urls.ex | 51 + .../lib/explorer/chain/token_transfer.ex | 728 + .../lib/explorer/chain/transaction.ex | 2219 ++ .../lib/explorer/chain/transaction/fork.ex | 55 + .../chain/transaction/history/historian.ex | 272 + .../transaction/history/transaction_stats.ex | 60 + .../lib/explorer/chain/transaction/reader.ex | 87 + .../chain/transaction/state_change.ex | 319 + .../lib/explorer/chain/transaction/status.ex | 109 + .../lib/explorer/chain/transaction_action.ex | 76 + .../lib/explorer/chain/user_operation.ex | 66 + .../explorer/lib/explorer/chain/validator.ex | 56 + .../apps/explorer/lib/explorer/chain/wei.ex | 331 + .../explorer/lib/explorer/chain/withdrawal.ex | 106 + .../zilliqa/aggregate_quorum_certificate.ex | 64 + .../chain/zilliqa/hash/bls_public_key.ex | 58 + .../explorer/chain/zilliqa/hash/peer_id.ex | 58 + .../explorer/chain/zilliqa/hash/signature.ex | 60 + .../lib/explorer/chain/zilliqa/helper.ex | 18 + .../zilliqa/nested_quorum_certificate.ex | 64 + .../chain/zilliqa/quorum_certificate.ex | 56 + .../lib/explorer/chain/zilliqa/reader.ex | 51 + .../lib/explorer/chain/zilliqa/staker.ex | 118 + .../lib/explorer/chain/zksync/batch_block.ex | 37 + .../chain/zksync/batch_transaction.ex | 51 + .../chain/zksync/lifecycle_transaction.ex | 38 + .../lib/explorer/chain/zksync/reader.ex | 381 + .../chain/zksync/transaction_batch.ex | 83 + .../lib/explorer/chain_spec/genesis_data.ex | 320 + .../lib/explorer/chain_spec/geth/importer.ex | 155 + .../explorer/chain_spec/parity/importer.ex | 177 + .../lib/explorer/chain_spec/poa/importer.ex | 111 + .../lib/explorer/custom_contracts_helper.ex | 18 + .../lib/explorer/encrypted/address_hash.ex | 7 + .../explorer/lib/explorer/encrypted/binary.ex | 7 + .../explorer/encrypted/transaction_hash.ex | 7 + .../explorer/encrypted/types/address_hash.ex | 27 + .../encrypted/types/transaction_hash.ex | 27 + .../lib/explorer/env_var_translator.ex | 24 + .../apps/explorer/lib/explorer/eth_rpc.ex | 1350 + .../explorer/lib/explorer/eth_rpc_helper.ex | 121 + .../apps/explorer/lib/explorer/etherscan.ex | 841 + .../lib/explorer/etherscan/addresses.ex | 28 + .../explorer/lib/explorer/etherscan/blocks.ex | 99 + .../lib/explorer/etherscan/contracts.ex | 196 + .../explorer/lib/explorer/etherscan/logs.ex | 382 + .../apps/explorer/lib/explorer/graphql.ex | 127 + .../explorer/lib/explorer/graphql/celo.ex | 160 + .../apps/explorer/lib/explorer/helper.ex | 488 + .../lib/explorer/history/historian.ex | 45 + .../explorer/lib/explorer/history/process.ex | 133 + .../apps/explorer/lib/explorer/logger.ex | 19 + .../apps/explorer/lib/explorer/mailer.ex | 12 + .../lib/explorer/market/fetcher/coin.ex | 224 + .../lib/explorer/market/fetcher/history.ex | 186 + .../lib/explorer/market/fetcher/token.ex | 120 + .../explorer/lib/explorer/market/market.ex | 73 + .../lib/explorer/market/market_history.ex | 143 + .../explorer/market/market_history_cache.ex | 77 + .../explorer/lib/explorer/market/source.ex | 369 + .../lib/explorer/market/source/coin_gecko.ex | 294 + .../explorer/market/source/coin_market_cap.ex | 204 + .../explorer/market/source/crypto_compare.ex | 100 + .../lib/explorer/market/source/crypto_rank.ex | 195 + .../lib/explorer/market/source/defillama.ex | 87 + .../lib/explorer/market/source/mobula.ex | 184 + .../explorer/lib/explorer/market/token.ex | 56 + .../lib/explorer/metadata_uri_validator.ex | 128 + .../account_abstraction.ex | 221 + .../explorer/microservice_interfaces/bens.ex | 255 + .../microservice_interfaces/metadata.ex | 240 + .../multichain_search.ex | 236 + ...ddress_current_token_balance_token_type.ex | 54 + .../address_token_balance_token_type.ex | 54 + .../arbitrum_da_records_normalization.ex | 65 + .../migrator/backfill_metadata_url.ex | 233 + .../migrator/backfill_multichain_search_db.ex | 195 + .../filecoin_pending_address_operations.ex | 71 + .../explorer/migrator/filling_migration.ex | 308 + .../migrator/heavy_db_index_operation.ex | 278 + .../heavy_db_index_operation/README.md | 245 + ...ount_asc_coin_balance_desc_hash_partial.ex | 78 + ...s_transactions_count_desc_partial_index.ex | 70 + ...ed_fetched_coin_balance_desc_hash_index.ex | 70 + .../create_addresses_verified_hash_index.ex | 70 + .../create_addresses_verified_index.ex | 65 + ...fied_transactions_count_desc_hash_index.ex | 70 + ...atch_l2_blocks_unconfirmed_blocks_index.ex | 65 + ...lock_number_desc_block_index_desc_index.ex | 67 + ...hash_block_number_desc_index_desc_index.ex | 71 + ...sh_first_topic_block_number_index_index.ex | 79 + .../create_logs_block_hash_index.ex | 66 + .../create_logs_deposits_withdrawals_index.ex | 69 + .../create_smart_contracts_language_index.ex | 62 + .../drop_addresses_verified_index.ex | 58 + ...al_transactions_from_address_hash_index.ex | 60 + .../drop_logs_address_hash_index.ex | 70 + ...ogs_address_hash_transaction_hash_index.ex | 72 + ...p_logs_block_number_asc_index_asc_index.ex | 60 + .../drop_logs_index_index.ex | 73 + ...rs_block_number_asc_log_index_asc_index.ex | 60 + ...drop_token_transfers_block_number_index.ex | 72 + ...rom_address_hash_transaction_hash_index.ex | 63 + ..._to_address_hash_transaction_hash_index.ex | 68 + ...act_address_hash_transaction_hash_index.ex | 72 + ...ontract_address_hash_with_pending_index.ex | 60 + ...ns_from_address_hash_with_pending_index.ex | 63 + ...ions_to_address_hash_with_pending_index.ex | 67 + .../heavy_db_index_operation/helper.ex | 252 + .../lib/explorer/migrator/migration_status.ex | 172 + .../migrator/refetch_contract_codes.ex | 80 + ...l_transactions_with_incompatible_status.ex | 135 + .../restore_omitted_weth_transfers.ex | 269 + .../sanitize_duplicated_log_index_logs.ex | 198 + .../sanitize_empty_contract_code_addresses.ex | 60 + .../sanitize_incorrect_nft_token_transfers.ex | 162 + ...sanitize_incorrect_weth_token_transfers.ex | 179 + .../migrator/sanitize_missing_block_ranges.ex | 34 + .../sanitize_missing_token_balances.ex | 73 + .../sanitize_replaced_transactions.ex | 46 + .../migrator/sanitize_verified_addresses.ex | 151 + .../migrator/shrink_internal_transactions.ex | 63 + .../migrator/smart_contract_language.ex | 73 + .../migrator/switch_pending_operations.ex | 22 + .../token_transfer_block_consensus.ex | 54 + .../migrator/token_transfer_token_type.ex | 70 + .../migrator/transaction_block_consensus.ex | 55 + .../migrator/transactions_denormalization.ex | 56 + .../explorer/lib/explorer/paging_options.ex | 44 + .../collector/active_db_connections.ex | 50 + .../lib/explorer/prometheus/instrumenter.ex | 218 + .../explorer/lib/explorer/query_helper.ex | 41 + .../apps/explorer/lib/explorer/repo.ex | 167 + .../lib/explorer/repo/config_helper.ex | 135 + .../lib/explorer/repo/prometheus_logger.ex | 9 + .../apps/explorer/lib/explorer/schema.ex | 13 + .../certified_smart_contract_cataloger.ex | 29 + .../smart_contract/compiler_version.ex | 254 + .../eth_bytecode_db_interface.ex | 135 + .../lib/explorer/smart_contract/helper.ex | 314 + .../lib/explorer/smart_contract/reader.ex | 972 + .../smart_contract/rust_verifier_interface.ex | 6 + .../rust_verifier_interface_behaviour.ex | 234 + .../smart_contract/sig_provider_interface.ex | 154 + .../smart_contract/solc_downloader.ex | 99 + .../smart_contract/solidity/code_compiler.ex | 334 + .../smart_contract/solidity/publish_helper.ex | 274 + .../smart_contract/solidity/publisher.ex | 455 + .../solidity/publisher_worker.ex | 97 + .../smart_contract/solidity/verifier.ex | 605 + .../smart_contract/stylus/publisher.ex | 228 + .../smart_contract/stylus/publisher_worker.ex | 72 + .../smart_contract/stylus/verifier.ex | 109 + .../stylus_verifier_interface.ex | 165 + .../smart_contract/vyper/code_compiler.ex | 72 + .../smart_contract/vyper/publisher.ex | 212 + .../smart_contract/vyper/publisher_worker.ex | 50 + .../explorer/smart_contract/vyper/verifier.ex | 140 + .../smart_contract/vyper_downloader.ex | 127 + .../lib/explorer/smart_contract/writer.ex | 46 + .../explorer/lib/explorer/sorting_helper.ex | 166 + .../explorer/lib/explorer/tags/address_tag.ex | 99 + .../explorer/tags/address_tag_cataloger.ex | 161 + .../lib/explorer/tags/address_to_tag.ex | 144 + .../third_party_integrations/airtable.ex | 93 + .../third_party_integrations/auth0.ex | 830 + .../third_party_integrations/noves_fi.ex | 100 + .../third_party_integrations/solidityscan.ex | 56 + .../third_party_integrations/sourcify.ex | 452 + .../universal_proxy.ex | 357 + .../third_party_integrations/xname.ex | 50 + .../lib/explorer/token/balance_reader.ex | 173 + .../lib/explorer/token/metadata_retriever.ex | 997 + .../helper.ex | 93 + .../supervisor.ex | 28 + .../worker.ex | 51 + .../apps/explorer/lib/explorer/tracer.ex | 5 + .../explorer/lib/explorer/tuple_encoder.ex | 14 + .../address_contract_code_fetch_attempt.ex | 94 + .../explorer/utility/event_notification.ex | 20 + .../lib/explorer/utility/massive_block.ex | 42 + .../lib/explorer/utility/microservice.ex | 53 + .../utility/missing_balance_of_token.ex | 127 + .../explorer/utility/missing_block_range.ex | 628 + .../utility/missing_ranges_manipulator.ex | 61 + .../lib/explorer/utility/rate_limiter.ex | 149 + .../utility/replica_accessibility_manager.ex | 65 + ...token_instance_metadata_refetch_attempt.ex | 87 + .../explorer/validator/metadata_importer.ex | 44 + .../explorer/validator/metadata_processor.ex | 31 + .../explorer/validator/metadata_retriever.ex | 98 + .../apps/explorer/lib/explorer/vault.ex | 22 + .../lib/explorer/visualize/sol2uml.ex | 68 + .../explorer/lib/fetch_celo_core_contracts.ex | 236 + .../apps/explorer/lib/release_tasks.ex | 118 + .../apps/explorer/lib/test_helper.ex | 289 + .../blockscout/apps/explorer/mix.exs | 167 + .../apps/explorer/package-lock.json | 170 + .../blockscout/apps/explorer/package.json | 18 + ...211031164954_create_account_identities.exs | 13 + ...211105114502_create_account_watchlists.exs | 14 + ...907_create_account_watchlist_addresses.exs | 28 + ...create_account_watchlist_notifications.exs | 31 + ...add_email_and_name_to_account_identity.exs | 10 + ...212222222_create_account_tag_addresses.exs | 17 + ...133333_create_account_tag_transactions.exs | 17 + ...add_subject_to_watchlist_notifications.exs | 9 + ...07134152_add_api_keys_and_plans_tables.exs | 33 + .../20220510094118_add_custom_abis_table.exs | 18 + ...94836_add_account_public_tags_requests.exs | 23 + ...0620182600_add_account_identity_fields.exs | 10 + .../20220624142547_add_unique_constraints.exs | 9 + ...migrate_public_tags_addresses_to_array.exs | 34 + .../20220706114430_encrypt_account_data.exs | 60 + ...220706153506_remove_unencrypted_fields.exs | 79 + .../20220706211444_set_new_indexes.exs | 43 + .../20220905195203_remove_guardian_tokens.exs | 7 + ...en_transfer_token_id_migrator_progress.exs | 11 + ...2083519_add_verification_email_sent_at.exs | 9 + ...20231207201701_add_watchlist_id_column.exs | 23 + ...unt_watchlist_addresses_erc_404_fields.exs | 10 + .../migrations/20240913194307_account_v2.exs | 50 + .../20241015091450_rename_tx_hash_field.exs | 9 + .../20241121140138_remove_abused_api_keys.exs | 20 + ...241128100836_remove_abused_custom_abis.exs | 19 + ...3817_remove_abused_public_tags_request.exs | 19 + .../20240201125730_create_arbitrum_tables.exs | 124 + ...58_extend_transaction_and_block_tables.exs | 15 + .../migrations/20240527212653_add_da_info.exs | 25 + .../20240628210148_add_index_for_messages.exs | 14 + ...15093220_rename_tx_hash_field_arbitrum.exs | 7 + .../20241111195112_add_stylus_fields.exs | 10 + ...155103_add_data_blobs_to_batches_table.exs | 35 + .../20240109102458_create_blobs_tables.exs | 34 + ...8154323_create_blob_transactions_index.exs | 15 + ...0240910112251_add_blackfort_validators.exs | 20 + .../20230919080116_add_bridged_tokens.exs | 29 + .../20240323152023_add_custom_fields.exs | 11 + ...856_add_pending_epoch_block_operations.exs | 14 + ...nsaction_hash_from_primary_key_in_logs.exs | 26 + ...sh_from_primary_key_in_token_transfers.exs | 23 + .../20240607185817_add_epoch_rewards.exs | 62 + ...240612135216_add_validator_group_votes.exs | 36 + .../20240614125614_add_election_rewards.exs | 38 + ...used_fields_from_validator_group_votes.exs | 10 + ...dress_and_group_address_to_primary_key.exs | 33 + ...4_modify_collated_gas_price_constraint.exs | 27 + .../apps/explorer/priv/compile_solc.js | 54 + .../priv/compile_solc_standard_json_input.js | 15 + .../priv/contracts_abi/poa/metadata.json | 579 + .../priv/contracts_abi/poa/validators.json | 462 + ...3_modify_collated_gas_price_constraint.exs | 15 + ...231109104957_create_null_round_heights.exs | 9 + ..._change_null_round_heights_height_type.exs | 9 + ...4142_create_pending_address_operations.exs | 23 + ...34138_add_chain_type_fields_to_address.exs | 11 + ...tch_after_to_pending_address_operation.exs | 17 + ...529_replace_filecoin_addresses_indexes.exs | 11 + ...161152_create_neon_solana_transactions.exs | 16 + ...0243_transaction_columns_to_support_l2.exs | 14 + ...230131115105_add_op_output_roots_table.exs | 16 + ...0230206123308_add_op_withdrawals_table.exs | 14 + ...2162845_add_op_withdrawal_events_table.exs | 22 + ...35703_add_op_transaction_batches_table.exs | 14 + .../20230220202107_create_op_deposits.exs | 17 + .../20230301105051_rename_fields.exs | 12 + .../20230303125841_add_op_indexes.exs | 8 + ...307090655_add_op_frame_sequences_table.exs | 24 + ...3_modify_collated_gas_price_constraint.exs | 15 + ...20231025102325_add_op_withdrawal_index.exs | 7 + ...124124644_remove_op_epoch_number_field.exs | 9 + .../20240328125102_fault_proofs_support.exs | 23 + ...40503113124_add_celestia_blob_metadata.exs | 31 + .../20240612120541_add_view_ready_field.exs | 11 + ...65020_add_frame_sequence_id_prev_field.exs | 11 + ...40121_rename_tx_related_field_optimism.exs | 7 + .../20241203113159_holocene_support.exs | 14 + ...0241209101134_op_withdrawal_events_key.exs | 26 + .../20250121131928_holocene_clear.exs | 11 + .../20250204050501_op_interop_messages.exs | 28 + .../20250221121840_reindex_batches.exs | 8 + ...0250317111838_rename_interop_addresses.exs | 8 + ..._create_polygon_edge_withdrawal_tables.exs | 28 + ...550_create_polygon_edge_deposit_tables.exs | 29 + ...3_modify_collated_gas_price_constraint.exs | 15 + .../20230420110800_create_zkevm_tables.exs | 55 + .../20231010093238_add_bridge_tables.exs | 46 + ...20240306080627_make_timestamp_optional.exs | 9 + .../explorer/priv/repo/migrations/.gitkeep | 0 .../20180117221921_create_address.exs | 14 + .../20180117221922_create_blocks.exs | 29 + .../20180117221923_create_transactions.exs | 225 + .../migrations/20180212222309_create_logs.exs | 39 + ...221001948_create_internal_transactions.exs | 82 + .../20180424203101_create_market_history.exs | 13 + .../20180508183700_create_users.exs | 14 + .../20180508191045_create_user_contacts.exs | 22 + ...8221256_create_smart_contract_verified.exs | 19 + ...0522154252_create_btree_gist_extension.exs | 7 + .../20180522154253_create_block_rewards.exs | 12 + .../20180606135149_create_tokens.exs | 26 + .../20180606135150_create_token_transfers.exs | 32 + ...143840_add_inserted_at_index_to_blocks.exs | 7 + ...717204948_create_address_coin_balances.exs | 27 + ...17021704_create_address_token_balances.exs | 32 + .../20180821142139_create_address_names.exs | 33 + ...9_create_block_second_degree_relations.exs | 22 + ...20180918200001_create_transaction_fork.exs | 16 + ...9175123_alter_token_decimals_to_bigint.exs | 15 + .../20181008195723_create_administrators.exs | 15 + ...12_add_fields_to_internal_transactions.exs | 17 + ...5173318_add_case_insensitive_extension.exs | 10 + .../20181015173319_modify_users_username.exs | 23 + ...81016163236_modify_user_contacts_email.exs | 23 + ...dd_index_to_internal_transaction_table.exs | 17 + ...nal_transactions_composite_primary_key.exs | 22 + ...81024164623_logs_composite_primary_key.exs | 22 + ..._token_transfers_composite_primary_key.exs | 22 + ..._create_address_current_token_balances.exs | 32 + ..._table_decimals_from_bigint_to_numeric.exs | 17 + .../20181106152300_add_nonce_to_addresses.exs | 26 + .../repo/migrations/20181107164103_eip6.exs | 40 + ...ional_internal_transaction_constraints.exs | 45 + ...16_add_block_number_to_token_transfers.exs | 18 + .../20181126203826_add_index_to_addresses.exs | 13 + ...name_block_rewards_to_emission_rewards.exs | 7 + ...0181206200312_create_new_block_rewards.exs | 16 + ...2115448_add_indexes_to_token_transfers.exs | 8 + ...56_add_metadata_field_to_address_names.exs | 9 + ...1143000_create_blocks_miner_hash_index.exs | 7 + .../20181221145054_add_contract_methods.exs | 15 + ...0102141900_index_current_token_holders.exs | 11 + ...20190114204640_add_tokens_holder_count.exs | 10 + ...ed_contract_indexed_at_to_transactions.exs | 12 + ...190118040301_create_tokens_primary_key.exs | 12 + ...degree_relations_composite_primary_key.exs | 12 + ...15_change_transaction_error_constraint.exs | 88 + ...ransaction_nonce_and_from_address_hash.exs | 8 + ...0208113202_add_unique_index_to_rewards.exs | 12 + ...address_hash_for_current_token_balance.exs | 7 + ...liest_processing_start_to_transactions.exs | 9 + ...block_number_to_address_token_balances.exs | 7 + ...x_on_fetched_coin_balance_to_addresses.exs | 7 + ..._compound_index_address_token_balances.exs | 7 + ...nstructor_arguments_to_smart_contracts.exs | 11 + ...636_add_indexes_for_block_reward_query.exs | 8 + ...dd_index_created_contract_address_hash.exs | 7 + ...3_change_constructor_arguments_to_text.exs | 15 + ...rnal_transactions_indexed_at_to_blocks.exs | 10 + ...190301095620_remove_duplicated_indexes.exs | 32 + .../20190301120328_add_index_to_consensus.exs | 7 + ...05095926_add_index_to_value_fetched_at.exs | 7 + ...90313085740_add_index_symobl_in_tokens.exs | 7 + ...3912_change_transactions_v_column_type.exs | 15 + ...314084907_add_index_to_to_address_hash.exs | 7 + ...1809_add_inserted_at_index_to_accounts.exs | 7 + ...1821_create_decompiled_smart_contracts.exs | 15 + ...d_old_value_for_current_token_balances.exs | 10 + ...ique_address_hash_decompiled_contracts.exs | 11 + ...0403080447_add_full_text_search_tokens.exs | 16 + .../20190421143300_add_index_to_bsdr.exs | 10 + ...24170833_change_block_size_to_nullable.exs | 15 + ...22_add_old_block_hash_for_transactions.exs | 12 + ...0513134025_add_refetch_needed_to_block.exs | 11 + ...sh_index_to_decompiled_smart_contracts.exs | 14 + ...ompiled_and_verified_flag_to_addresses.exs | 18 + .../20190521104412_create_staking_pools.exs | 27 + ...112839_create_staking_pools_delegators.exs | 26 + ...add_transaction_hash_inserted_at_index.exs | 7 + ...3_reduce_transaction_status_constraint.exs | 132 + ...5085852_add_additional_contract_fields.exs | 11 + ...0190709043832_create_transaction_stats.exs | 12 + ..._external_libraries_to_smart_contracts.exs | 13 + ...0190807111216_remove_duplicate_indexes.exs | 17 + ...0190807113117_create_suggested_indexes.exs | 8 + ...4_add_index_on_token_transfer_token_id.exs | 7 + .../20190905083522_create_token_instances.exs | 22 + ...er_in_token_transfers_and_transactions.exs | 7 + ..._add_indexes_for_token_instances_query.exs | 8 + ...635_add_token_transfer_sorting_indexes.exs | 12 + ...010075740_add_error_to_token_instances.exs | 11 + ...120546_create_pending_block_operations.exs | 14 + ...ending_internal_transactions_operation.exs | 79 + ...add_block_hash_and_block_index_to_logs.exs | 43 + ...2035_add_block_hash_to_token_transfers.exs | 40 + ...emove_duplicate_indexes_token_entities.exs | 9 + ...transactions_add_to_address_hash_index.exs | 25 + ...block_rewards_block_hash_partial_index.exs | 9 + ...18120138_logs_block_number_index_index.exs | 7 + ...ck_operations_block_hash_partial_index.exs | 9 + ...4152058_add_token_id_to_token_balances.exs | 12 + ...nces_token_contract_address_hash_value.exs | 7 + ...ken_contract_address_hash_block_number.exs | 7 + .../20200421102450_pending_transactions.exs | 16 + ...ess_hash_address_type_block_hash_index.exs | 11 + ...e_index_blocks_miner_hash_number_index.exs | 7 + ...20200521090250_recreate_staking_tables.exs | 101 + ...dress_hash_token_id_block_number_index.exs | 7 + ...0525115811_address_coin_balances_daily.exs | 17 + .../20200527144742_add_counters_table.exs | 12 + ...22_alter_transactions_add_error_reason.exs | 9 + ...0200806125649_token_add_bridged_column.exs | 9 + .../20200807064700_bridged_tokens_table.exs | 20 + ...3050_add_addresses_contract_code_index.exs | 7 + ...5501_add_bridged_token_custom_metadata.exs | 9 + .../20200929075625_add_bridged_token_type.exs | 9 + ...transactions_stat_add_gas_usage_column.exs | 9 + .../20201214203532_support_sourcify.exs | 22 + .../migrations/20210219080523_add_tags.exs | 24 + ...exchange_rate_column_to_bridged_tokens.exs | 9 + ...309104122_add_bridged_token_custom_cap.exs | 10 + ...210331074008_add_pool_name_description.exs | 10 + ...add_token_id_to_current_token_balances.exs | 12 + ..._balances_add_token_id_to_unique_index.exs | 25 + ..._balances_add_token_id_to_unique_index.exs | 25 + ..._unfetched_token_balances_unique_index.exs | 32 + ...108_extend_token_transfers_for_erc1155.exs | 10 + ...0210524165427_min_missing_block_number.exs | 12 + ...transaction_stats_add_total_fee_column.exs | 9 + ...0552_smart_contracts_add_is_vyper_flag.exs | 9 + .../20210701084814_support_partial_match.exs | 9 + .../20210811140837_add_1559_support.exs | 15 + ...3144531_tokens_add_metadata_fetch_flag.exs | 9 + ...4_add_file_path_for_sourcify_contracts.exs | 9 + ...20211006121008_add_block_is_empty_flag.exs | 11 + ...e_duplicates_of_current_token_balances.exs | 55 + ...5545_migrate_optimization_runs_to_int8.exs | 15 + .../20211018072347_add_is_empty_index.exs | 17 + ...n_balances_contract_address_hash_index.exs | 12 + ...164843_transactions_block_number_index.exs | 12 + ...ntract_address_hash_block_number_index.exs | 12 + ...gs_address_hash_transaction_hash_index.exs | 12 + ...block_rewards_block_hash_partial_index.exs | 14 + ...64817_add_check_for_bytecode_actuality.exs | 13 + ...add_contract_verification_status_table.exs | 13 + .../20211204184037_address_add_gas_used.exs | 9 + ...6071033_modify_address_gas_used_bigint.exs | 15 + ...184136_add_display_name_to_address_tag.exs | 15 + ...r_in_internal_txs_field_to_transaction.exs | 9 + .../20220111085751_address_add_counters.exs | 10 + ...3252_smart_contracts_contract_code_md5.exs | 23 + ...20220306091504_add_implementation_name.exs | 9 + ...220527131249_add_implementation_fields.exs | 10 + .../20220622114402_remove_staking_tables.exs | 13 + .../20220622140604_remove_bridged_tokens.exs | 11 + ...ss_coin_balances_daily_add_primary_key.exs | 17 + ..._address_coin_balances_add_primary_key.exs | 17 + ...504_transactions_forks_add_primary_key.exs | 17 + ...06102746_block_rewards_add_primary_key.exs | 18 + ...05925_emission_rewards_add_primary_key.exs | 16 + ...06111510_address_names_add_primary_key.exs | 9 + ...20804114005_create_event_notifications.exs | 9 + .../20220902083436_extend_token_name_type.exs | 9 + ...create_index_token_transfers_token_ids.exs | 13 + ...s_token_contract_address_hash_token_id.exs | 8 + .../20220919105140_add_method_id_index.exs | 15 + ...0220926122620_extend_token_symbol_type.exs | 9 + ...04091552_add_transaction_actions_table.exs | 31 + ...en_transfer_token_id_migrator_progress.exs | 11 + ...53_remove_not_null_constraint_from_abi.exs | 7 + ...drop_internal_transactions_order_index.exs | 7 + ..._modify_address_token_balances_indexes.exs | 58 + ...address_current_token_balances_indexes.exs | 31 + ...21120184715_add_json_compiler_settings.exs | 9 + ...074820_drop_required_output_constraint.exs | 31 + ...0221126103223_add_transactions_indexes.exs | 73 + ...59_drop_unfetched_token_balances_index.exs | 14 + ...nge_index_for_pending_block_operations.exs | 18 + ...1219151744_create_missing_block_ranges.exs | 13 + ...ock_number_to_pending_block_operations.exs | 9 + .../20221223214711_create_withdrawals.exs | 19 + ..._and_circulating_market_cap_for_tokens.exs | 10 + ...17_add_validators_and_constants_tables.exs | 21 + ...5226_add_total_supply_updated_at_block.exs | 9 + ...328100414_add_transaction_action_types.exs | 14 + ...093914_allow_nil_transaction_gas_price.exs | 17 + .../20230425185941_add_token_icon_url.exs | 9 + ..._withdrawals_gwei_amount_to_wei_amount.exs | 7 + ...30074105_market_history_add_market_cap.exs | 9 + ...80138_add_verified_via_eth_bytecode_db.exs | 9 + ...935_fix_contract_creation_transactions.exs | 18 + ...dress_coin_balances_block_number_index.exs | 11 + .../20230615130940_add_blocks_date_index.exs | 11 + ...elete_erc_1155_tt_with_empty_token_ids.exs | 9 + ...134253_add_is_verified_via_admin_panel.exs | 9 + ...151_drop_logs_address_hash_foreign_key.exs | 7 + ...s_and_transactions_address_foreign_key.exs | 12 + ...230817061317_drop_address_foreign_keys.exs | 13 + ...dd_token_ids_to_address_token_balances.exs | 13 + ...1120625_drop_rest_address_foreign_keys.exs | 13 + ...rent_token_balances_tokens_foreign_key.exs | 9 + ...drop_token_balances_tokens_foreign_key.exs | 7 + ...093553_add_tvl_to_market_history_table.exs | 9 + ...imestamp_and_consensus_to_transactions.exs | 13 + ...0231212102127_create_migrations_status.exs | 12 + ...20231213085254_add_btree_gin_extension.exs | 11 + ...token_contract_address_token_ids_index.exs | 26 + ...5_drop_token_transfers_token_ids_index.exs | 7 + ...213152332_alter_log_topic_columns_type.exs | 18 + ...5_drop_token_transfers_token_id_column.exs | 12 + ...0231215104320_drop_unused_actb_indexes.exs | 21 + ...1215115638_drop_unused_logs_type_index.exs | 11 + ...132609_add_index_blocks_refetch_needed.exs | 15 + ...0231225113850_transactions_asc_indices.exs | 47 + .../20231225115026_logs_asc_index.exs | 7 + ...231225115100_token_transfers_asc_index.exs | 7 + ...27170848_add_proxy_verification_status.exs | 17 + ...add_smart_contract_audit_reports_table.exs | 39 + ...720_constrain_null_date_market_history.exs | 9 + ...nhanced_unfetched_token_balances_index.exs | 20 + ...2141_add_token_type_to_token_transfers.exs | 13 + ...40123102336_add_tokens_cataloged_index.exs | 17 + ...112623_add_smart_contract_license_type.exs | 9 + ...0240219143204_add_volume_24h_to_tokens.exs | 9 + ...add_block_consensus_to_token_transfers.exs | 13 + ..._pending_block_operations_block_number.exs | 9 + .../20240226074456_create_massive_blocks.exs | 11 + ...1331_add_secondary_coin_market_history.exs | 12 + ...49_add_smart_contracts_name_text_index.exs | 13 + ...d_from_address_hash_block_number_index.exs | 9 + ...add_to_address_hash_block_number_index.exs | 9 + ...ess_contract_code_fetch_attempts_table.exs | 14 + ...446_add_verified_via_verifier_alliance.exs | 9 + ...enhance_index_for_token_transfers_list.exs | 11 + ...utdated_index_for_token_transfers_list.exs | 9 + ...0_enhance_index_for_token_holders_list.exs | 14 + ..._outdated_index_for_token_holders_list.exs | 14 + ...515_smart_contracts_add_certified_flag.exs | 13 + ...fix_index_for_unfetched_token_balances.exs | 16 + ...ted_index_for_unfetched_token_balances.exs | 18 + ...095711_add_proxy_implementations_table.exs | 13 + ...19101821_migrate_proxy_implementations.exs | 13 + ...ation_fields_from_smart_contract_table.exs | 11 + .../20240425091614_add_proxy_type_column.exs | 16 + .../20240425185705_alter_proxy_type.exs | 7 + ...y_type_clones_with_immutable_arguments.exs | 7 + ...64431_create_missing_balance_of_tokens.exs | 12 + ...08_add_nft_instance_fetcher_aux_fields.exs | 10 + ..._smart_contracts_add_is_blueprint_flag.exs | 9 + ...stance_metadata_refetch_attempts_table.exs | 15 + ...plemented_to_missing_balance_of_tokens.exs | 9 + .../20240708152519_add_nft_media_urls.exs | 11 + ..._overlap_index_to_missing_block_ranges.exs | 11 + ...add_contract_methods_inserted_at_index.exs | 7 + ...8140638_add_token_balance_retry_fields.exs | 10 + ...30142652_add_meta_to_migrations_status.exs | 9 + ...904161254_create_signed_authorizations.exs | 25 + ...240910095635_add_address_badges_tables.exs | 14 + .../20240918104231_new_proxy_type_eip7702.exs | 7 + ...issing_token_balances_migration_status.exs | 7 + ...923173516_address_tags_add_primary_key.exs | 9 + ...25432_add_is_banned_to_token_instances.exs | 9 + ...20241015140214_rename_tx_related_field.exs | 7 + ...or_duplicated_log_index_logs_migration.exs | 30 + ..._create_pending_transaction_operations.exs | 14 + .../20241111200520_add_language_field.exs | 9 + ...reate_types_for_composite_primary_keys.exs | 42 + .../20241219102223_remove_large_decimals.exs | 9 + ...50119145532_add_metadata_tags_aux_type.exs | 20 + ..._add_tokens_metadata_updated_at_column.exs | 15 + ...new_proxy_type_resolved_delegate_proxy.exs | 7 + ...20250128081221_add_token_instance_type.exs | 18 + ...2049_update_last_fetched_counters_keys.exs | 29 + ...250214102221_remove_composite_id_types.exs | 76 + ...0217221717_change_tokens_icon_url_type.exs | 9 + ...emove_decompiled_smart_contracts_table.exs | 37 + ...50311090608_add_erc_7760_to_proxy_type.exs | 7 + .../20250318091828_add_metadata_url.exs | 10 + ...3945_missing_block_ranges_add_priority.exs | 12 + ...rizations_nonce_change_type_to_numeric.exs | 15 + .../scripts/20181107164103_eip6.sql | 64 + ...ional_internal_transaction_constraints.sql | 88 + ...ional_internal_transaction_constraints.sql | 82 + ...ansfers_update_block_number_in_batches.sql | 39 + .../20181126182700_migrate_address_nonce.sql | 55 + ...2921_lose_consensus_for_invalid_blocks.sql | 6 + ...ock_hash_block_index_dups_to_carnitine.sql | 73 + ...ress_current_token_balances_in_batches.sql | 133 + ...internal_transaction_update_in_batches.sql | 59 + .../scripts/transaction_update_in_batches.sql | 55 + ...ress_current_token_balances_in_batches.sql | 125 + ...ate_new_tokens_holder_count_in_batches.sql | 95 + .../scripts/update_replaced_transaction.sql | 92 + .../apps/explorer/priv/repo/seeds.exs | 11 + .../priv/repo_api/migrations/.gitkeep | 0 ...4094744_add_rootstock_fields_to_blocks.exs | 13 + ...pending_block_ops_with_historic_blocks.exs | 16 + .../20240710101931_add_fee_fields.exs | 23 + .../20240807114346_add_queue_index_field.exs | 9 + .../20240815102318_add_bridge_table.exs | 24 + .../20240913114630_add_batches_tables.exs | 40 + .../20241016105249_rename_fields.exs | 7 + .../20231024091228_add_bridge_table.exs | 34 + ...move_internal_transactions_constraints.exs | 18 + ...0240203091010_add_stability_validators.exs | 14 + ...921120210_add_suave_transaction_fields.exs | 24 + ...240927123039_create_quorum_certificate.exs | 20 + ...01_create_aggregate_quorum_certificate.exs | 19 + ...23113_create_nested_quorum_certificate.exs | 21 + .../20241015095021_add_view_to_block.exs | 9 + .../20241027171945_modify_smart_contracts.exs | 17 + .../20250106185108_create_zilliqa_stakers.exs | 19 + ..._decrease_scilla_language_index_by_one.exs | 36 + ...2082101_make_tranaction_r_s_v_optional.exs | 17 + .../20231213171043_create_zksync_tables.exs | 82 + ...814_rename_field_in_batch_transactions.exs | 7 + ...zk_compiler_version_to_smart_contracts.exs | 10 + ...1015093336_rename_tx_hash_field_zksync.exs | 7 + ...28102407_rename_tx_count_fields_zksync.exs | 8 + ...1028102853_add_contract_code_refetched.exs | 13 + .../test/explorer/account/identity_test.exs | 103 + .../explorer/account/notifier/email_test.exs | 124 + .../explorer/account/notifier/notify_test.exs | 174 + .../account/notifier/summary_test.exs | 451 + .../test/explorer/accounts/accounts_test.exs | 126 + .../explorer/accounts/user_contact_test.exs | 21 + .../test/explorer/accounts/user_test.exs | 30 + .../admin/administrator/role_test.exs | 43 + .../test/explorer/admin/recovery_test.exs | 74 + .../explorer/test/explorer/admin_test.exs | 57 + .../test/explorer/bloom_filter_test.exs | 63 + .../chain/address/coin_balance_test.exs | 301 + .../address/current_token_balance_test.exs | 230 + .../chain/address/token_balance_test.exs | 122 + .../explorer/chain/address/token_test.exs | 330 + .../test/explorer/chain/address_test.exs | 132 + .../explorer/chain/beacon/reader_test.exs | 9 + .../test/explorer/chain/block/range_test.exs | 110 + .../chain/block/reader/general_test.exs | 50 + .../block/second_degree_relation_test.exs | 56 + .../test/explorer/chain/block_test.exs | 146 + .../explorer/chain/cache/accounts_test.exs | 42 + .../chain/cache/block_number_test.exs | 73 + .../test/explorer/chain/cache/blocks_test.exs | 61 + .../chain/cache/celo_core_contracts_test.exs | 84 + .../cache/counters/addresses_count_test.exs | 16 + .../counters/addresses_sum_minus_burnt.exs | 58 + .../cache/counters/addresses_sum_test.exs | 57 + .../addresses_tokens_usd_sum_counter_test.exs | 34 + .../counters/average_block_time_test.exs | 187 + .../chain/cache/counters/blocks_test.exs | 56 + .../chain/cache/counters/contracts_test.exs | 18 + .../counters/new_contracts_count_test.exs | 29 + .../new_pending_transactions_count_test.exs | 27 + .../new_verified_contracts_count_test.exs | 18 + .../last_output_root_size_count_test.exs | 47 + .../rootstock_locked_btc_count_test.exs | 38 + .../counters/transactions_24h_count_test.exs | 61 + .../cache/counters/transactions_test.exs | 58 + .../counters/verified_contracts_test.exs | 17 + .../chain/cache/gas_price_oracle_test.exs | 644 + .../chain/cache/transactions_test.exs | 95 + .../test/explorer/chain/cache/uncles_test.exs | 27 + .../test/explorer/chain/celo/helper_test.exs | 4 + .../address/internal_transactions_test.exs | 324 + .../chain/csv_export/address/logs_test.exs | 132 + .../address/token_transfers_test.exs | 135 + .../csv_export/address/transactions_test.exs | 161 + .../explorer/chain/currency_helper_text.exs | 25 + .../test/explorer/chain/data_test.exs | 5 + .../explorer/chain/events/publisher_test.exs | 65 + .../explorer/chain/events/subscriber_test.exs | 33 + .../chain/filecoin/native_address_test.exs | 211 + .../test/explorer/chain/hash/address_test.exs | 36 + .../test/explorer/chain/hash/full_test.exs | 17 + .../test/explorer/chain/hash/nonce_test.exs | 5 + .../test/explorer/chain/hash_test.exs | 5 + .../explorer/chain/health/helper_test.exs | 44 + .../address/current_token_balances_test.exs | 478 + .../runner/address/token_balances_test.exs | 273 + .../chain/import/runner/addresses_test.exs | 69 + .../chain/import/runner/blocks_test.exs | 770 + .../runner/internal_transactions_test.exs | 479 + .../chain/import/runner/tokens_test.exs | 47 + .../chain/import/runner/transactions_test.exs | 91 + .../test/explorer/chain/import_test.exs | 2369 ++ .../internal_transaction/call_type_test.exs | 5 + .../chain/internal_transaction/type_test.exs | 5 + .../chain/internal_transaction_test.exs | 820 + .../explorer/test/explorer/chain/log_test.exs | 243 + .../smart_contract/proxy/erc_7760_test.exs | 267 + .../proxy/models/implementation_test.exs | 330 + .../chain/smart_contract/proxy_test.exs | 540 + .../explorer/chain/smart_contract_test.exs | 434 + .../chain/supply/proof_of_authority_test.exs | 40 + .../test/explorer/chain/supply/rsk_test.exs | 149 + .../explorer/chain/token/instance_test.exs | 215 + .../test/explorer/chain/token_test.exs | 151 + .../explorer/chain/token_transfer_test.exs | 352 + .../explorer/chain/transaction/fork_test.exs | 23 + .../transaction/history/historian_test.exs | 111 + .../history/transaction_stats_test.exs | 30 + .../chain/transaction/status_test.exs | 5 + .../test/explorer/chain/transaction_test.exs | 870 + .../explorer/test/explorer/chain/wei_test.exs | 134 + .../test/explorer/chain/withdrawal_test.exs | 81 + .../chain_spec/geth/importer_test.exs | 230 + .../chain_spec/parity/importer_test.exs | 257 + .../explorer/test/explorer/chain_test.exs | 3829 ++ .../test/explorer/config_helper_test.exs | 57 + .../test/explorer/etherscan/logs_test.exs | 813 + .../explorer/test/explorer/etherscan_test.exs | 1639 + .../explorer/test/explorer/graphql_test.exs | 347 + .../test/explorer/history/process_test.exs | 106 + .../explorer/market/fetcher/coin_test.exs | 101 + .../explorer/market/fetcher/history_test.exs | 260 + .../explorer/market/fetcher/token_test.exs | 224 + .../market/market_history_cache_test.exs | 91 + .../test/explorer/market/market_test.exs | 115 + .../market/source/coin_gecko_test.exs | 682 + .../market/source/coin_market_cap_test.exs | 313 + .../market/source/crypto_compare_test.exs | 159 + ..._current_token_balance_token_type_test.exs | 33 + .../address_token_balance_token_type_test.exs | 33 + .../migrator/backfill_metadata_url_test.exs | 350 + ...lock_number_desc_index_desc_index_test.exs | 54 + ..._block_number_asc_index_asc_index_test.exs | 43 + ...sactions_with_incompatible_status_test.exs | 80 + ...anitize_duplicated_log_index_logs_test.exs | 152 + ...ize_empty_contract_code_addresses_test.exs | 79 + ...ize_incorrect_nft_token_transfers_test.exs | 71 + ...ze_incorrect_weth_token_transfers_test.exs | 181 + .../sanitize_missing_token_balances_test.exs | 52 + .../migrator/smart_contract_language_test.exs | 51 + .../switch_pending_operations_test.exs | 89 + .../token_transfer_token_type_test.exs | 82 + ...sactions_denormalization_migrator_test.exs | 43 + .../test/explorer/repo/config_helper_test.exs | 131 + .../apps/explorer/test/explorer/repo_test.exs | 53 + ...ertified_smart_contract_cataloger_test.exs | 88 + .../smart_contract/compiler_version_test.exs | 69 + .../explorer/smart_contract/helper_test.exs | 153 + .../explorer/smart_contract/reader_test.exs | 619 + .../solidity/code_compiler_test.exs | 400 + .../solidity/publisher_test.exs | 239 + .../smart_contract/solidity/verifier_test.exs | 1286 + .../smart_contract/vyper/publisher_test.exs | 82 + .../explorer/smart_contract/writer_test.exs | 331 + .../universal_proxy_test.exs | 536 + .../explorer/token/balance_reader_test.exs | 97 + .../token/metadata_retriever_test.exs | 1174 + .../helper_test.exs | 121 + .../utility/missing_block_range_test.exs | 484 + .../explorer/utility/rate_limiter_test.exs | 47 + .../validator/metadata_importer_test.exs | 52 + .../validator/metadata_retriever_test.exs | 151 + .../chars/explorer/chain/address_test.exs | 5 + .../string/chars/explorer/chain/data_test.exs | 5 + .../test/support/chain/import/runner_case.ex | 78 + .../apps/explorer/test/support/data_case.ex | 74 + .../apps/explorer/test/support/factory.ex | 1385 + .../test/support/fakes/one_coin_source.ex | 80 + .../support/fixture/chain_spec/classic.json | 31157 ++++++++++++++++ .../fixture/chain_spec/foundation.json | 1533 + .../fixture/chain_spec/optimism_genesis.json | 39 + .../fixture/chain_spec/polygon_genesis.json | 108 + .../fixture/chain_spec/qdai_genesis.json | 53 + .../fixture/chain_spec/zkatana_genesis.json | 102 + .../fixture/exchange_rates/coin_gecko.json | 1806 + .../support/fixture/smart_contract/ERC677.sol | 1163 + .../smart_contract/compiler_tests.json | 24 + .../smart_contract/contract_from_factory.sol | 18 + .../smart_contract/contract_with_lib.json | 13 + .../smart_contract/contract_with_lib.sol | 25 + .../fixture/smart_contract/home_bridge.sol | 259 + .../fixture/smart_contract/issue_3082.sol | 594 + .../fixture/smart_contract/issue_4758.sol | 1718 + .../fixture/smart_contract/issue_5114.sol | 686 + .../fixture/smart_contract/issue_5127.sol | 554 + .../fixture/smart_contract/issue_5431.sol | 28 + .../issue_with_constructor_args.sol | 573 + .../smart_contract/large_smart_contract.sol | 3874 ++ .../fixture/smart_contract/solc_bin.json | 6035 +++ .../solidity_0.5.9_smart_contract.sol | 76 + .../solidity_5.11_new_whisper_metadata.json | 8 + .../solidity_5.11_new_whisper_metadata.sol | 412 + .../smart_contract/standard_input.json | 33 + .../support/fixture/smart_contract/vyper.vy | 105 + .../support/fixture/vcr_cassettes/.gitkeep | 0 ..._download_block_1_downloads_the_block.json | 30 + ...ock_importer_import_1_duplicate_block.json | 30 + .../block_importer_import_1_pending.json | 30 + ...ock_importer_import_1_saves_the_block.json | 30 + ...reumex_extensions_trace_transaction_1.json | 30 + .../import_block_perform_1_duplicate.json | 30 + .../import_block_perform_1_earliest.json | 30 + .../import_block_perform_1_integer.json | 30 + .../import_block_perform_1_latest.json | 30 + .../import_block_perform_1_string.json | 30 + .../import_block_perform_later_1_latest.json | 1 + ...import_internal_transaction_perform_1.json | 1 + .../import_receipt_perform_1.json | 30 + .../import_skipped_blocks_perform_1.json | 1 + .../import_transaction_perform_1.json | 1 + ...nternal_transaction_importer_import_1.json | 30 + ...ion_importer_import_1_from_core-trace.json | 1 + ...orter_import_1_with_contract_creation.json | 30 + ..._importer_binds_internal_transactions.json | 30 + ...ction_importer_creates_a_from_address.json | 30 + ...saction_importer_creates_a_to_address.json | 30 + ...ter_creates_a_to_address_from_creates.json | 30 + ...saction_importer_download_transaction.json | 30 + ..._download_transaction_with_a_bad_hash.json | 30 + .../transaction_importer_import_1_failed.json | 30 + ...nsaction_importer_import_1_out_of_gas.json | 30 + ...transaction_importer_import_1_pending.json | 30 + ...transaction_importer_import_1_receipt.json | 30 + ...importer_import_saves_the_transaction.json | 30 + ...action_importer_saves_the_association.json | 30 + ...on_importer_transaction_without_block.json | 30 + ...tion_importer_updates_the_association.json | 30 + .../apps/explorer/test/test_helper.exs | 34 + .../blockscout/apps/indexer/.gitignore | 24 + .../blockscout/apps/indexer/README.md | 167 + .../blockscout/apps/indexer/config/config.exs | 32 + .../blockscout/apps/indexer/config/dev.exs | 42 + .../apps/indexer/config/dev/anvil.exs | 40 + .../apps/indexer/config/dev/besu.exs | 47 + .../apps/indexer/config/dev/erigon.exs | 47 + .../apps/indexer/config/dev/filecoin.exs | 43 + .../apps/indexer/config/dev/geth.exs | 44 + .../apps/indexer/config/dev/nethermind.exs | 47 + .../apps/indexer/config/dev/rsk.exs | 48 + .../blockscout/apps/indexer/config/prod.exs | 50 + .../apps/indexer/config/prod/anvil.exs | 40 + .../apps/indexer/config/prod/besu.exs | 46 + .../apps/indexer/config/prod/erigon.exs | 46 + .../apps/indexer/config/prod/filecoin.exs | 43 + .../apps/indexer/config/prod/geth.exs | 44 + .../apps/indexer/config/prod/nethermind.exs | 46 + .../apps/indexer/config/prod/rsk.exs | 48 + .../apps/indexer/config/runtime/test.exs | 13 + .../blockscout/apps/indexer/config/test.exs | 26 + .../apps/indexer/config/test/anvil.exs | 8 + .../apps/indexer/config/test/besu.exs | 8 + .../apps/indexer/config/test/erigon.exs | 8 + .../apps/indexer/config/test/filecoin.exs | 8 + .../apps/indexer/config/test/geth.exs | 8 + .../apps/indexer/config/test/nethermind.exs | 8 + .../apps/indexer/config/test/rsk.exs | 8 + .../blockscout/apps/indexer/lib/indexer.ex | 5 + .../apps/indexer/lib/indexer/application.ex | 99 + .../catchup/bound_interval_supervisor.ex | 344 + .../lib/indexer/block/catchup/fetcher.ex | 285 + .../block/catchup/massive_blocks_fetcher.ex | 92 + .../block/catchup/missing_ranges_collector.ex | 529 + .../lib/indexer/block/catchup/supervisor.ex | 40 + .../apps/indexer/lib/indexer/block/fetcher.ex | 817 + .../lib/indexer/block/fetcher/receipts.ex | 139 + .../lib/indexer/block/realtime/fetcher.ex | 563 + .../lib/indexer/block/realtime/supervisor.ex | 50 + .../indexer/lib/indexer/bound_interval.ex | 32 + .../calc_lp_tokens_total_liquidity.ex | 52 + .../set_amb_bridged_metadata_for_tokens.ex | 44 + .../set_omni_bridged_metadata_for_tokens.ex | 54 + .../apps/indexer/lib/indexer/buffered_task.ex | 1392 + .../apps/indexer/lib/indexer/fetcher.ex | 78 + .../indexer/fetcher/arbitrum/da/anytrust.ex | 549 + .../indexer/fetcher/arbitrum/da/celestia.ex | 186 + .../lib/indexer/fetcher/arbitrum/da/common.ex | 241 + .../indexer/fetcher/arbitrum/data_backfill.ex | 197 + .../arbitrum/messages_to_l2_matcher.ex | 357 + .../lib/indexer/fetcher/arbitrum/messaging.ex | 322 + .../arbitrum/rollup_messages_catchup.ex | 390 + .../arbitrum/tracking_batches_statuses.ex | 677 + .../arbitrum/tracking_messages_on_l1.ex | 230 + .../fetcher/arbitrum/utils/db/README.md | 37 + .../fetcher/arbitrum/utils/db/common.ex | 84 + .../fetcher/arbitrum/utils/db/messages.ex | 312 + .../utils/db/parent_chain_transactions.ex | 139 + .../fetcher/arbitrum/utils/db/settlement.ex | 591 + .../fetcher/arbitrum/utils/db/tools.ex | 49 + .../indexer/fetcher/arbitrum/utils/helper.ex | 310 + .../indexer/fetcher/arbitrum/utils/logging.ex | 162 + .../lib/indexer/fetcher/arbitrum/utils/rpc.ex | 821 + .../fetcher/arbitrum/workers/backfill.ex | 441 + .../arbitrum/workers/batches/README.md | 96 + .../arbitrum/workers/batches/discovery.ex | 687 + .../workers/batches/discovery_utils.ex | 136 + .../arbitrum/workers/batches/events.ex | 47 + .../workers/batches/rollup_entities.ex | 387 + .../fetcher/arbitrum/workers/batches/tasks.ex | 622 + .../arbitrum/workers/confirmations/README.md | 90 + .../workers/confirmations/discovery.ex | 479 + .../arbitrum/workers/confirmations/events.ex | 94 + .../workers/confirmations/rollup_blocks.ex | 708 + .../arbitrum/workers/confirmations/tasks.ex | 556 + .../workers/historical_messages_on_l2.ex | 372 + .../arbitrum/workers/l1_finalization.ex | 101 + .../arbitrum/workers/new_l1_executions.ex | 467 + .../arbitrum/workers/new_messages_to_l2.ex | 357 + .../lib/indexer/fetcher/beacon/blob.ex | 175 + .../lib/indexer/fetcher/beacon/client.ex | 88 + .../indexer/fetcher/blackfort/validator.ex | 54 + .../lib/indexer/fetcher/block_reward.ex | 340 + .../fetcher/celo/epoch_block_operations.ex | 156 + .../core_contract_version.ex | 92 + .../delegated_payments.ex | 166 + .../epoch_block_operations/distributions.ex | 101 + .../validator_and_group_payments.ex | 67 + .../epoch_block_operations/voter_payments.ex | 201 + .../lib/indexer/fetcher/celo/epoch_logs.ex | 137 + .../lib/indexer/fetcher/celo/helper.ex | 29 + .../fetcher/celo/validator_group_votes.ex | 217 + .../indexer/fetcher/coin_balance/catchup.ex | 77 + .../indexer/fetcher/coin_balance/helper.ex | 228 + .../indexer/fetcher/coin_balance/realtime.ex | 60 + .../lib/indexer/fetcher/contract_code.ex | 283 + .../indexer/fetcher/empty_blocks_sanitizer.ex | 257 + .../indexer/fetcher/filecoin/address_info.ex | 401 + .../lib/indexer/fetcher/filecoin/beryx_api.ex | 50 + .../indexer/fetcher/filecoin/filfox_api.ex | 48 + .../indexer/fetcher/internal_transaction.ex | 582 + .../indexer/fetcher/on_demand/coin_balance.ex | 263 + .../fetcher/on_demand/contract_code.ex | 159 + .../fetcher/on_demand/contract_creator.ex | 246 + .../indexer/fetcher/on_demand/first_trace.ex | 82 + .../on_demand/neon_solana_transactions.ex | 84 + .../nft_collection_metadata_refetch.ex | 42 + .../fetcher/on_demand/token_balance.ex | 325 + .../token_instance_metadata_refetch.ex | 128 + .../fetcher/on_demand/token_total_supply.ex | 67 + .../indexer/lib/indexer/fetcher/optimism.ex | 638 + .../lib/indexer/fetcher/optimism/deposit.ex | 325 + .../indexer/fetcher/optimism/dispute_game.ex | 457 + .../fetcher/optimism/eip1559_config_update.ex | 598 + .../fetcher/optimism/interop/helper.ex | 48 + .../fetcher/optimism/interop/message.ex | 435 + .../optimism/interop/message_failed.ex | 407 + .../fetcher/optimism/interop/message_queue.ex | 395 + .../indexer/fetcher/optimism/output_root.ex | 247 + .../fetcher/optimism/transaction_batch.ex | 1477 + .../indexer/fetcher/optimism/withdrawal.ex | 419 + .../fetcher/optimism/withdrawal_event.ex | 348 + .../pending_block_operations_sanitizer.ex | 69 + .../indexer/fetcher/pending_transaction.ex | 193 + .../lib/indexer/fetcher/polygon_edge.ex | 621 + .../indexer/fetcher/polygon_edge/deposit.ex | 162 + .../fetcher/polygon_edge/deposit_execute.ex | 226 + .../fetcher/polygon_edge/withdrawal.ex | 241 + .../fetcher/polygon_edge/withdrawal_exit.ex | 106 + .../indexer/fetcher/polygon_zkevm/bridge.ex | 472 + .../fetcher/polygon_zkevm/bridge_l1.ex | 275 + .../fetcher/polygon_zkevm/bridge_l1_tokens.ex | 78 + .../fetcher/polygon_zkevm/bridge_l2.ex | 223 + .../polygon_zkevm/transaction_batch.ex | 341 + .../indexer/fetcher/replaced_transaction.ex | 137 + .../fetcher/rollup_l1_reorg_monitor.ex | 206 + .../lib/indexer/fetcher/rootstock_data.ex | 170 + .../lib/indexer/fetcher/scroll/batch.ex | 828 + .../lib/indexer/fetcher/scroll/bridge.ex | 330 + .../lib/indexer/fetcher/scroll/bridge_l1.ex | 202 + .../lib/indexer/fetcher/scroll/bridge_l2.ex | 155 + .../lib/indexer/fetcher/scroll/helper.ex | 14 + .../indexer/fetcher/scroll/l1_fee_param.ex | 355 + .../lib/indexer/fetcher/shibarium/helper.ex | 146 + .../lib/indexer/fetcher/shibarium/l1.ex | 677 + .../lib/indexer/fetcher/shibarium/l2.ex | 547 + .../indexer/fetcher/stability/validator.ex | 75 + .../apps/indexer/lib/indexer/fetcher/token.ex | 86 + .../lib/indexer/fetcher/token_balance.ex | 312 + .../indexer/fetcher/token_instance/helper.ex | 168 + .../fetcher/token_instance/realtime.ex | 136 + .../indexer/fetcher/token_instance/refetch.ex | 54 + .../indexer/fetcher/token_instance/retry.ex | 71 + .../fetcher/token_instance/sanitize.ex | 67 + .../token_instance/sanitize_erc1155.ex | 70 + .../fetcher/token_instance/sanitize_erc721.ex | 110 + .../fetcher/token_total_supply_updater.ex | 69 + .../lib/indexer/fetcher/token_updater.ex | 97 + .../lib/indexer/fetcher/transaction_action.ex | 297 + .../lib/indexer/fetcher/uncle_block.ex | 286 + .../indexer/lib/indexer/fetcher/withdrawal.ex | 163 + .../fetcher/zilliqa/scilla_smart_contracts.ex | 135 + .../fetcher/zksync/batches_status_tracker.ex | 242 + .../fetcher/zksync/discovery/batches_data.ex | 413 + .../fetcher/zksync/discovery/workers.ex | 174 + .../zksync/status_tracking/committed.ex | 86 + .../fetcher/zksync/status_tracking/common.ex | 178 + .../zksync/status_tracking/executed.ex | 86 + .../fetcher/zksync/status_tracking/proven.ex | 189 + .../fetcher/zksync/transaction_batch.ex | 149 + .../lib/indexer/fetcher/zksync/utils/db.ex | 206 + .../indexer/fetcher/zksync/utils/logging.ex | 143 + .../lib/indexer/fetcher/zksync/utils/rpc.ex | 379 + .../apps/indexer/lib/indexer/helper.ex | 871 + .../apps/indexer/lib/indexer/logger.ex | 33 + .../indexer/lib/indexer/memory/monitor.ex | 284 + .../indexer/lib/indexer/memory/shrinkable.ex | 33 + .../migrator/recovery_weth_token_transfers.ex | 199 + .../indexer/nft_media_handler/backfiller.ex | 104 + .../lib/indexer/nft_media_handler/queue.ex | 328 + .../lib/indexer/pending_ops_cleaner.ex | 45 + .../indexer/pending_transactions_sanitizer.ex | 189 + ...in_pending_address_operations_collector.ex | 35 + .../pending_block_operations_collector.ex | 29 + ...ending_transaction_operations_collector.ex | 29 + .../lib/indexer/prometheus/instrumenter.ex | 137 + .../apps/indexer/lib/indexer/supervisor.ex | 389 + .../temporary/uncataloged_token_transfers.ex | 104 + .../indexer/temporary/uncles_without_index.ex | 168 + .../indexer/lib/indexer/token_balances.ex | 184 + .../apps/indexer/lib/indexer/tracer.ex | 5 + .../transform/address_coin_balances.ex | 144 + .../transform/address_coin_balances_daily.ex | 72 + .../transform/address_token_balances.ex | 47 + .../lib/indexer/transform/addresses.ex | 636 + .../indexer/transform/arbitrum/messaging.ex | 47 + .../indexer/lib/indexer/transform/blocks.ex | 104 + .../lib/indexer/transform/blocks/base.ex | 14 + .../lib/indexer/transform/blocks/clique.ex | 18 + .../transform/celo/transaction_gas_tokens.ex | 42 + .../celo/transaction_token_transfers.ex | 145 + .../validator_epoch_payment_distributions.ex | 73 + .../lib/indexer/transform/mint_transfers.ex | 62 + .../indexer/transform/optimism/withdrawals.ex | 49 + .../polygon_edge/deposit_executes.ex | 55 + .../transform/polygon_edge/withdrawals.ex | 54 + .../indexer/transform/polygon_zkevm/bridge.ex | 115 + .../indexer/transform/scroll/l1_fee_params.ex | 70 + .../lib/indexer/transform/shibarium/bridge.ex | 99 + .../transform/signed_authorizations.ex | 75 + .../lib/indexer/transform/token_instances.ex | 102 + .../lib/indexer/transform/token_transfers.ex | 491 + .../indexer/transform/transaction_actions.ex | 992 + .../blockscout/apps/indexer/mix.exs | 82 + .../bound_interval_supervisor_test.exs | 624 + .../indexer/block/catchup/fetcher_test.exs | 702 + .../catchup/missing_ranges_collector_test.exs | 99 + .../indexer/block/fetcher/receipts_test.exs | 149 + .../test/indexer/block/fetcher_test.exs | 1281 + .../indexer/block/realtime/fetcher_test.exs | 1058 + .../test/indexer/buffered_task_test.exs | 303 + .../test/indexer/fetcher/beacon/blob_test.exs | 170 + .../indexer/fetcher/block_reward_test.exs | 735 + .../celo/epoch_block_operations_test.exs | 64 + .../fetcher/coin_balance/catchup_test.exs | 528 + .../indexer/fetcher/contract_code_test.exs | 169 + .../fetcher/internal_transaction_test.exs | 638 + .../fetcher/on_demand/coin_balance_test.exs | 278 + .../fetcher/on_demand/contract_code_test.exs | 214 + .../on_demand/contract_creator_test.exs | 244 + .../token_instance_metadata_refetch_test.exs | 187 + ...ending_block_operations_sanitizer_test.exs | 31 + .../fetcher/pending_transaction_test.exs | 70 + .../fetcher/replaced_transaction_test.exs | 199 + .../indexer/fetcher/rootstock_data_test.exs | 136 + .../fetcher/stability/validator_test.exs | 270 + .../indexer/fetcher/token_balance_test.exs | 371 + .../fetcher/token_instance/helper_test.exs | 844 + .../fetcher/token_instance/realtime_test.exs | 123 + .../fetcher/token_instance/refetch_test.exs | 211 + .../token_instance/sanitize_erc1155_test.exs | 33 + .../token_instance/sanitize_erc721_test.exs | 39 + .../test/indexer/fetcher/token_test.exs | 81 + .../indexer/fetcher/token_updater_test.exs | 87 + .../test/indexer/fetcher/uncle_block_test.exs | 248 + .../test/indexer/fetcher/withdrawal_test.exs | 151 + .../recovery_weth_token_transfers_test.exs | 182 + .../test/indexer/pending_ops_cleaner_test.exs | 41 + .../uncataloged_token_transfers_test.exs | 108 + .../test/indexer/token_balances_test.exs | 619 + .../transform/address_coin_balances_test.exs | 201 + .../transform/address_token_balances_test.exs | 101 + .../test/indexer/transform/addresses.exs | 325 + .../indexer/transform/blocks/base_test.exs | 42 + .../indexer/transform/blocks/clique_test.exs | 43 + .../test/indexer/transform/blocks_test.exs | 85 + .../indexer/transform/mint_transfers_test.exs | 55 + .../transform/token_transfers_test.exs | 596 + .../apps/indexer/test/indexer_test.exs | 5 + .../indexer/block/catchup_supervisor_case.ex | 9 + .../fetcher/beacon_blob_supervisor_case.ex | 18 + .../fetcher/block_reward_supervisor_case.ex | 18 + .../celo_epoch_rewards_supervisor_case.ex | 17 + .../coin_balance_catchup_supervisor_case.ex | 19 + .../coin_balance_realtime_supervisor_case.ex | 17 + .../fetcher/contract_code_supervisor_case.ex | 17 + ...filecoin_native_address_supervisor_case.ex | 17 + .../internal_transaction_supervisor_case.ex | 20 + .../on_demand/coin_balance_supervisor_case.ex | 20 + .../token_balance_supervisor_case.ex | 20 + .../pending_transaction_supervisor_case.ex | 17 + .../replaced_transaction_supervisor_case.ex | 17 + .../fetcher/rootstock_data_supervisor_case.ex | 17 + .../fetcher/token_balance_supervisor_case.ex | 17 + .../indexer/fetcher/token_supervisor_case.ex | 17 + .../fetcher/token_updater_supervisor_case.ex | 17 + .../fetcher/uncle_block_supervisor_case.ex | 17 + .../fetcher/withdrawal_supervisor_case.ex | 17 + .../apps/indexer/test/test_helper.exs | 25 + .../apps/nft_media_handler/.gitignore | 26 + .../apps/nft_media_handler/README.md | 45 + .../lib/nft_media_handler.ex | 201 + .../lib/nft_media_handler/application.ex | 36 + .../lib/nft_media_handler/dispatcher.ex | 100 + .../nft_media_handler/dispatcher_interface.ex | 93 + .../lib/nft_media_handler/image/resizer.ex | 64 + .../lib/nft_media_handler/media/fetcher.ex | 60 + .../lib/nft_media_handler/r2/uploader.ex | 51 + .../blockscout/apps/nft_media_handler/mix.exs | 47 + .../blockscout/apps/utils/.gitignore | 26 + .../blockscout/apps/utils/README.md | 7 + .../lib/credo/checks/compile_env_usage.ex | 54 + .../lib/utils/compile_time_env_helper.ex | 170 + .../utils/lib/utils/runtime_env_helper.ex | 81 + .../utils/lib/utils/token_instance_helper.ex | 70 + .../blockscout/apps/utils/mix.exs | 41 + .../test/checks/compile_env_usage_test.exs | 38 + .../apps/utils/test/test_helper.exs | 1 + sz-poc-offsite-2025/blockscout/appspec.yml | 20 + sz-poc-offsite-2025/blockscout/bin/deploy | 124 + .../blockscout/bin/deployment/build | 26 + .../blockscout/bin/deployment/health_check | 16 + .../blockscout/bin/deployment/migrate | 19 + .../blockscout/bin/deployment/start | 7 + .../blockscout/bin/deployment/stop | 9 + .../blockscout/bin/install_chrome_headless.sh | 12 + sz-poc-offsite-2025/blockscout/bin/test | 9 + .../blockscout/bin/version_bump.sh | 83 + sz-poc-offsite-2025/blockscout/blockscout.png | Bin 0 -> 17833 bytes sz-poc-offsite-2025/blockscout/cliff.toml | 84 + .../config/assets/precompiles-arbitrum.json | 130 + .../blockscout/config/config.exs | 77 + .../blockscout/config/config_helper.exs | 416 + sz-poc-offsite-2025/blockscout/config/dev.exs | 17 + .../blockscout/config/prod.exs | 22 + .../blockscout/config/runtime.exs | 1399 + .../blockscout/config/runtime/dev.exs | 151 + .../blockscout/config/runtime/prod.exs | 118 + .../blockscout/config/runtime/test.exs | 31 + .../blockscout/config/test.exs | 13 + sz-poc-offsite-2025/blockscout/coveralls.json | 9 + sz-poc-offsite-2025/blockscout/cspell.json | 751 + .../blockscout/docker-compose/README.md | 93 + .../blockscout/docker-compose/anvil.yml | 94 + .../docker-compose/docker-compose.yml | 107 + .../docker-compose/envs/common-blockscout.env | 565 + .../docker-compose/envs/common-frontend.env | 19 + .../envs/common-nft-media-handler.env | 19 + .../envs/common-smart-contract-verifier.env | 39 + .../docker-compose/envs/common-stats.env | 29 + .../envs/common-user-ops-indexer.env | 48 + .../docker-compose/envs/common-visualizer.env | 1 + .../blockscout/docker-compose/erigon.yml | 87 + .../docker-compose/external-backend.yml | 70 + .../blockscout/docker-compose/external-db.yml | 70 + .../docker-compose/external-frontend.yml | 83 + .../docker-compose/geth-clique-consensus.yml | 88 + .../blockscout/docker-compose/geth.yml | 87 + .../docker-compose/hardhat-network.yml | 94 + .../docker-compose/microservices.yml | 57 + .../blockscout/docker-compose/no-services.yml | 63 + .../proxy/default.conf.template | 93 + .../proxy/explorer.conf.template | 34 + .../proxy/microservices.conf.template | 65 + .../docker-compose/services/backend.yml | 17 + .../blockscout/docker-compose/services/db.yml | 35 + .../docker-compose/services/frontend.yml | 11 + .../services/nft_media_handler.yml | 16 + .../services/nginx-explorer.yml | 14 + .../docker-compose/services/nginx.yml | 20 + .../docker-compose/services/redis.yml | 9 + .../docker-compose/services/sig-provider.yml | 9 + .../services/smart-contract-verifier.yml | 11 + .../docker-compose/services/stats.yml | 51 + .../services/user-ops-indexer.yml | 17 + .../docker-compose/services/visualizer.yml | 11 + .../blockscout/docker/Dockerfile | 92 + .../blockscout/docker/Makefile | 150 + .../blockscout/docker/README.md | 3 + .../blockscout/docker/oldUI.Dockerfile | 109 + sz-poc-offsite-2025/blockscout/funding.json | 5 + sz-poc-offsite-2025/blockscout/mix.exs | 106 + sz-poc-offsite-2025/blockscout/mix.lock | 175 + sz-poc-offsite-2025/blockscout/prometheus.yml | 6 + .../blockscout/rel/commands/migrate.sh | 3 + .../blockscout/rel/commands/seed.sh | 3 + sz-poc-offsite-2025/blockscout/rel/config.exs | 86 + .../blockscout/rel/plugins/.gitignore | 3 + sz-poc-offsite-2025/blockscout/rel/vm.args | 30 + 2972 files changed, 462546 insertions(+) create mode 100644 sz-poc-offsite-2025/blockscout/.circleci/config.yml create mode 100644 sz-poc-offsite-2025/blockscout/.credo.exs create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/Dockerfile create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/README.md create mode 100755 sz-poc-offsite-2025/blockscout/.devcontainer/bin/bs create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/bin/chain-specific-checks create mode 100755 sz-poc-offsite-2025/blockscout/.devcontainer/bin/extract_apps.exs create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/bin/utils create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/devcontainer.json create mode 100644 sz-poc-offsite-2025/blockscout/.devcontainer/docker-compose.yml create mode 100644 sz-poc-offsite-2025/blockscout/.dialyzer_ignore.exs create mode 100644 sz-poc-offsite-2025/blockscout/.dockerignore create mode 100644 sz-poc-offsite-2025/blockscout/.formatter.exs create mode 100644 sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/config.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/actions/setup-repo/action.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/dependabot.yml create mode 100755 sz-poc-offsite-2025/blockscout/.github/scripts/select-builder.sh create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/antiscam.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/antispam.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/codeql-analysis.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/config.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-arbitrum.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-berachain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-celo.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-eth.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-filecoin.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-fuse.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-optimism.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-polygon-zkevm.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-rootstock.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-scroll.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zilliqa.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zksync.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/pre-release.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-custom-build.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-every-push.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-arbitrum.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-berachain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-celo.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-core.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth-sepolia.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-filecoin.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-fuse.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-gnosis-chain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-l2-staging.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-lukso.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-optimism.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-rootstock.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-scroll.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-suave.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zetachain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zilliqa.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zkevm.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zksync.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-staging-on-demand.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/publish-regular-docker-image-on-demand.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-arbitrum.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-berachain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-celo.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-eth.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-filecoin.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-fuse.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-gnosis.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-optimism.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-polygon-zkevm.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-rootstock.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-scroll.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-suave.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-zetachain.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-zilliqa.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release-zksync.yml create mode 100644 sz-poc-offsite-2025/blockscout/.github/workflows/release.yml create mode 100644 sz-poc-offsite-2025/blockscout/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/.pairs create mode 100644 sz-poc-offsite-2025/blockscout/.pre-commit-config.yaml create mode 100644 sz-poc-offsite-2025/blockscout/.tool-versions create mode 100644 sz-poc-offsite-2025/blockscout/CHANGELOG.md create mode 100644 sz-poc-offsite-2025/blockscout/CODE_OF_CONDUCT.md create mode 100644 sz-poc-offsite-2025/blockscout/CONTRIBUTING.md create mode 100644 sz-poc-offsite-2025/blockscout/LICENSE create mode 100644 sz-poc-offsite-2025/blockscout/PULL_REQUEST_TEMPLATE.md create mode 100644 sz-poc-offsite-2025/blockscout/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/.sobelow-conf create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/API blueprint.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/API.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/.babelrc create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__mocks__/css/app.scss.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/async_listing_load.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/autocomplete.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/currency.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/smart_contract/common_helpers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/utils.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/address.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/address/internal_transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/address/transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/address/validations.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/blocks.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/chain.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/pending_transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/transaction.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/pages/transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/close.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_code.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_elements.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_helpers.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_layout.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_mixins.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/_typography.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/app.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_account.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_ad.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_address-overview.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_address_link.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_alerts.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_animations.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_api.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_badge.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_add_to_mm.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_address_card.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_contract.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_copy.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_dropdown_line.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_full.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_line.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_no_border.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_qr.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_swap.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_btn_wallet.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_button.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_card.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_check.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_check_tooltip.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_coin-balance-tile.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_custom_tooltips.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_dashboard-banner.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_description-list.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_dot.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_dropdown.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_dropzone.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_erc721_token_image_container.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_errors.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_external_link.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_filter.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_fontawesome_icon.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_footer.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_form.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_highlight.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_i_tooltip.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_i_tooltip_2.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_icon-link.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_inventory_token_instance_image_container.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_label.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_loading-spinner.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_log-search.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_me_tooltip.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_modal.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_modal_stake.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_modal_status.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_modal_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_nav_tabs.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_navbar.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_new_smart_contract.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_nounderline-link.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_pagination_container.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_panels.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_qr-code.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_radio.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_radio_big.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_search.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_stakes_table.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_stakes_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_table.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_tile.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_token-balance-dropdown.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_token.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_token_tile_view_more.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_tooltip.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_transaction-input.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_transaction.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/_verify_other_explorers.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/components/datepicker.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/custom-scrollbar.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/export-csv.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/export-vars-to-js.module.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/main-page.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_base_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_callisto_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_dai_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_dai_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_dark-theme.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ellaism_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ether1_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ether1_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethercore_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethercore_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethereum_classic_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethereum_classic_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethereum_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ethereum_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_expanse_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_fonts.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_gochain_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_goerli_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_goerli_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_kovan_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_kovan_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_lukso_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_lukso_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_musicoin_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_neutral_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_neutral_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_pirl_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_poa_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_poa_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_rinkeby_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_rinkeby_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ropsten_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_ropsten_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_rsk_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_rsk_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_social_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_sokol_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_sokol_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_tobalaba_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_tomochain_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_wanchain_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_xusdt_variables-non-critical.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/custom_contracts/_circles-theme.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/css/theme/custom_contracts/_dark-forest-theme.scss create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/eslint.config.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/app.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/app_extra.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/balance-chart-loader.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/chart-loader.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/ace/src-min/ace.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/ace/src-min/mode-csharp.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/ace/src-min/theme-chrome.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/ad.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/add_chain_to_mm.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/analytics.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/async_listing_load.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/autocomplete.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/banner.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/card_tabs.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/clipboard_buttons.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/coin_balance_history_chart.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/csv_download.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/currency.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/custom_ad.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/custom_scrollbar.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/dark_mode.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/dropzone.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/from_now.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/history_chart.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/indexing.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/infinite_scroll_helpers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/list_morph.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/loading_element.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/modals.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/path_helper.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/pending_transactions_toggle.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/pretty_json.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/public_tags_request_form.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/queue.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/random_access_pagination.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/redux_helpers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/reload_button.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/common_helpers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/connect.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/functions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/index.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/interact.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/smart_contract/wei_ether_converter.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/stop_propagation.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/text_ad.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/token_balance_dropdown.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/token_balance_dropdown_search.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/token_icon.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/token_transfers_toggle.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/tooltip.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/transaction_input_dropdown.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/try_api.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/try_eth_api.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/utils.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/lib/validation.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/locale.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/account/delete_item_handler.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/coin_balances.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/internal_transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/logs.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/token_transfers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/utils.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/address/validations.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/admin/tasks.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/blocks.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/chain.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/dark-mode-switcher.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/layout.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/pending_transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/search-results/search.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/sol2uml.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/token/overview.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/token/search.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/token/token_transfers.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/token_contract.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/token_counters.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/transaction.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/transactions.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/verification_form.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/pages/verified_contracts.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/socket.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/view_specific/address_contract/code_highlighting.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/js/view_specific/raw_trace/code_highlighting.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/package-lock.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/package.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/postcss.config.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/503.html create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/android-chrome-192x192.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/android-chrome-512x512.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/apple-touch-icon.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/browserconfig.xml create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/average_time.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/block.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/blocks.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/blockscout_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/callisto_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/classic_ethereum_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/classic_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/controller.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/cube.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/circles/balance.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/circles/copy-circles.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/circles/footer_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/circles/logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/circles/qr-circles.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/copy-df.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/dark_forest_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/pic_balance.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/planet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/qr-df.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/custom-themes/dark-forest/union.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/dai_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ellaism_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/etc-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/eth-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/goerli-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/internal-server-error.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/koan-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/kovan-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/lukso-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/page-not-found.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/pic-404.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/poa-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinkeby-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinnkeby-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rinnkeby-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/ropsten-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/rsk-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/sokol-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/tx-not-found.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/unprocessable-entity.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-block-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-block-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-page-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-tx-not-found.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/errors-img/xdai-tx-not-found@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/eth.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ether1_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ethercore_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ethercore_testnet_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ethereum.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ethereum_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/expanse_logo.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/favicon-16x16.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/favicon-32x32.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/favicon.ico create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/gc_logo_2.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/gc_logo_old.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/gc_logo_rebrand.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/gochain_logo.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/goerli_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/blockchair.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/blockchair@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/check-1.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/copy.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/dots.svg create mode 100755 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/etherchain.png create mode 100755 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/etherchain@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/etherscan.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/etherscan@2x.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/bar-chart.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/github.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/info-circle.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/tag.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/telegram.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/fontawesome/twitter.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/link.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/metamask-fox.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/pic-empty.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/plus.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/remove.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/1inch.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/component.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/cowswap.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/curve.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/honeyswap.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/sushi.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/swap/swapr.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/token_icon_default.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/icons/withdraw.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/kovan_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/last_block.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/logo.svg create mode 100755 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/lukso_dashboard_image.png create mode 100755 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/lukso_logo.png create mode 100755 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/lukso_logo_footer.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/musicoin_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/callisto-mainnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xusdt.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-classic.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/lukso-l14-testnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/poa-core.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/poa-sokol.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/pirl_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/poa_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/purple-block.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/rinkeby_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/ropsten_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/rsk_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/smart_contract.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/social_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/sokol_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/spinner.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/tobalaba_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/token.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/tomochain_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/transaction.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/transactions.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/wanchain_logo.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/xdai_alternative.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/xdai_logo.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/xusdt-logo-footer.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/images/xusdt-logo-top.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/manifest.webmanifest create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/mstile-150x150.png create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/static/safari-pinned-tab.svg create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/webpack.config.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/config/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/config/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/config/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/config/runtime/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/config/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/api_v2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/application.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/captcha_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/chain.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/address_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/arbitrum_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/block_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/exchange_rate_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/optimism_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/reward_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/token_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/token_instance_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/transaction_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/user_socket.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/address_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/block_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/exchange_rate_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/polygon_zkevm_confirmed_batch_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/reward_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/token_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/transaction_channel.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/channels/v2/user_socket.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/checksum_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/cldr.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/authenticate_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/email_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/fallback_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/tags_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api/v2/user_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/api_key_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/auth_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/custom_abi_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/public_tags_request_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/tag_address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/tag_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/watchlist_address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/account/watchlist_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_by_day_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_via_flattened_code_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_via_json_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_via_multi_part_files_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_via_standard_json_input_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_verification_vyper_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_read_proxy_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_token_balance_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_withdrawal_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_write_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/address_write_proxy_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/admin/dashboard_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/admin/session_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/admin/setup_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/admin/tasks_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/api_logger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/eth_rpc/eth_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/health_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/block_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/logs_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/rpc_translator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/stats_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/token_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v1/gas_price_oracle_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v1/supply_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v1/verified_smart_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/address_badge_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/address_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/advanced_filter_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/api_key_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/arbitrum_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/blob_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/block_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/config_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/csv_export_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/fallback_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/import_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/internal_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/main_page_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/mud_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/optimism_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/polygon_edge_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/polygon_zkevm_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/proxy/account_abstraction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/proxy/metadata_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/proxy/noves_fi_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/proxy/universal_proxy_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/proxy/xname_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/scroll_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/search_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/shibarium_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/smart_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/stats_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/token_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/token_transfer_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/utils_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/validator_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/verification_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/withdrawal_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api/v2/zksync_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/api_docs_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/block_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/block_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/block_withdrawal_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/chain/market_history_chart_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/chain/transaction_history_chart_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/chain_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/common_components_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/csv_export_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/page_not_found_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/pending_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/recent_transactions_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/robots_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/search_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/smart_contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/contract_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/holder_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance/holder_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance/metadata_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance/transfer_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/inventory_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/token_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/tokens_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/tokens/transfer_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_internal_transaction_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_log_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_raw_trace_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_state_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/transaction_token_transfer_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/verified_contracts_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/visualize_sol2uml_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/controllers/withdrawal_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/counters/blocks_indexed_counter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/counters/internal_transactions_indexed_counter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/csp_header.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/endpoint.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/etherscan.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/gettext.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/body_reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/celo/resolvers/token_transfer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/celo/resolvers/token_transfer_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/celo/schema/query_fields.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/celo/schema/types.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/middleware/api_enabled.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/internal_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/token_transfer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/resolvers/transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/schema.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/schema/scalars.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/schema/scalars/JSON.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/schema/types.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/graphql/schema_controller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/health_endpoint.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/health_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/main_page_realtime_event_handler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/microservice_interfaces/transaction_interpretation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/models/get_address_tags.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/models/get_transaction_tags.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/models/transaction_state_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/notifier.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/notifiers/arbitrum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/notifiers/optimism.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/paging_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/admin/check_owner_registered.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/admin/require_admin_role.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/allow_iframe.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/check_account_api.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/check_account_web.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/check_api_v2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/check_chain_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/check_feature.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/fetch_user_from_session.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/graphql.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/graphql_schema_introspection.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/logger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/rate_limit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/plug/redis_cookie.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/prometheus/exporter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/prometheus/instrumenter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/prometheus/phoenix_instrumenter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/prometheus/public_exporter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/realtime_event_handler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/account_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/address_badges_v2_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/admin_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/api_key_v2_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/api_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/chain_type_scope.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/smart_contracts_api_v2_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/tokens_api_v2_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/utils_api_v2_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/routers/web_router.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/smart_contract_realtime_event_handler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/social_media.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/api_key/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/api_key/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/api_key/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/auth/profile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/common/_nav.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/custom_abi/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/custom_abi/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/custom_abi/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/public_tags_request/address_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/public_tags_request/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/public_tags_request/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/public_tags_request/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_transaction/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/tag_transaction/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/watchlist/show.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/watchlist_address/form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/account/watchlist_address/row.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_balance_dropdown.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_block_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_current_coin_balance.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_custom_view_df_title.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_labels.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_responsive_hash.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_show_address_transactions.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_tabs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorer_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/_verify_other_explorers.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_compiler_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_constructor_args.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_address_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_name_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_fetch_constructor_args.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_include_nightly_builds_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_libraries_other.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_library_address.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_library_first.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_library_name.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_common_fields/_yul_contracts_switcher.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_via_json/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_via_standard_json_input/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_contract_verification_vyper/new.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_logs/_logs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_logs/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_read_contract/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_read_contract/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_read_proxy/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_read_proxy/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token/_tokens.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token/overview.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token/overview_item.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token_balance/_tokens.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_transaction/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_validation/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_validation/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_withdrawal/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_withdrawal/_withdrawal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_withdrawal/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_write_contract/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_write_contract/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_write_proxy/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/address_write_proxy/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/admin/dashboard/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/admin/session/login_form.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/admin/setup/admin_registration.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/admin/setup/verify.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/advertisement/banners_ad/_banner_728.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/advertisement/text_ad/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_action_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_model_table.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_module_card.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_module_item.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/_number_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/_tabs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/404.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_withdrawal/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_withdrawal/_withdrawal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/block_withdrawal/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/chain/_block.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/chain/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/chain/gas_price_oracle_legend_item.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_add_full.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_add_line.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_copy.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_copy_for_table.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_external_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_line.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_btn_qr_code.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_changed_bytecode_warning.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_channel_disconnected_message.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_check_tooltip.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_csv_export_button.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_i_tooltip.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_i_tooltip_2.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_error_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_question_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_success_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_warning_modal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_info.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_input_group.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_loading_spinner.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_minimal_proxy_pattern.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_bottom_disclaimer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_close_button.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_qr_code.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_pagination_container.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_progress_from_to.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_rap_pagination_container.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_status_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_svg_minus.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_svg_pen.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_svg_plus.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_svg_trash.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_table-loader.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tenderly_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tile-loader.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/csv_export/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/error422/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/form/_tag.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/form/text_field.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_accounts_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_active_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_api_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_apps_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_block_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_blockchain_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_check_dark_forest_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_external_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_gas_price_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_guage_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_hourglass_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_inactive_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_network_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_search_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_smart_contract.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_test_network_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_tokens_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/icons/_transaction_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/internal_server_error/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/internal_transaction/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_account_menu_item.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_add_chain_to_mm.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_default_title.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_search.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/layout/app.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/log/_data_decoded_view.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/page_not_found/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/page_not_found/index.json.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/pending_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/robots/robots.txt.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/robots/sitemap.xml.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/search/_empty_td.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/search/_name_td.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/search/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/search/results.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_connect_container.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_function_response.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_functions.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_pending_contract_write.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/_token_icon.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/_token_icon_default.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/contract/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/contract/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/holder/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/holder/_token_balances.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/holder/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/holder/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/metadata/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/inventory/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/inventory/_token.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/inventory/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_tabs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_actions.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_actions_aave.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_actions_address.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_actions_to.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_actions_uniswap.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_link.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_link_to_token_instance.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_link_to_token_symbol.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_pending_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tile.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_token_transfer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_total_transfers.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_total_transfers_from_to.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/_transfer_token_with_id.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/not_found.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/show_internal_transactions.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction/show_token_transfers.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/_logs.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_state/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_state/_state_change.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_state/_token_balance.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_state/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/verified_contracts/_contract.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/verified_contracts/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/verified_contracts/_stats.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/verified_contracts/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/visualize_sol2uml/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/withdrawal/_metatags.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/withdrawal/_withdrawal.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/templates/withdrawal/index.html.eex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/utility/event_handlers_metrics.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/abi_encoded_value_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/access_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/api/v2/account_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/api/v2/tags_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/api/v2/user_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/api_key_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/auth_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/common_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/custom_abi_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/public_tags_request_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/tag_address_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/tag_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/watchlist_address_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/account/watchlist_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_coin_balance_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_common_fields_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_via_flattened_code_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_via_json_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_via_multi_part_files_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_via_standard_json_input_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_verification_vyper_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_internal_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_logs_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_read_contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_read_proxy_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_token_balance_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_token_transfer_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_token_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_validation_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_withdrawal_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_write_contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/address_write_proxy_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/admin/dashboard_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/admin/session_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/admin/setup_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/advertisement/banners_ad_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/advertisement/text_ad_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/eth_rpc/view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/block_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/logs_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/rpc_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/stats_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/token_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/rpc/transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v1/supply_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/address_badge_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/address_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/advanced_filter_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/api_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/arbitrum_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/blob_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/block_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/celo_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/config_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/ethereum_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/filecoin_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/internal_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/mud_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/optimism_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/polygon_edge_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/polygon_zkevm_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/proxy/metadata_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/rootstock_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/scroll_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/search_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/shibarium_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/smart_contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/stability_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/suave_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/token_transfer_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/token_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/validator_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/withdrawal_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/zilliqa_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api/v2/zksync_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/block_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/block_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/block_withdrawal_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/bridged_tokens_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/cldr_helper/number.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/common_components_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/csv_export.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/currency_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/error_422.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/error_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/error_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/form_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/icons_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/internal_server_error_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/internal_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/layout_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/log_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/nft_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/page_not_found.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/pending_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/render_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/robots_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/script_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/search_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/smart_contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tab_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/contract_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/holder_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/instance/holder_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/instance/metadata_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/instance/overview_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/instance/transfer_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/instance_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/inventory_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/overview_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens/transfer_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/tokens_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_internal_transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_log_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_raw_trace_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_state_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_token_transfer_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/verified_contracts_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/visualize_sol2uml_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/wei_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/block_scout_web/views/withdrawal_view.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/phoenix/html/safe.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/lib/phoenix/param.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/priv/gettext/default.pot create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/errors.po create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/priv/gettext/errors.pot create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/chain_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/address_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/block_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/exchange_rate_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/reward_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/transaction_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/address_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/block_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/exchange_rate_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/reward_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/transaction_channel_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/channels/v2/websocket_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/account/api/v2/user_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/account/custom_abi_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_coin_balance_by_day_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_internal_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_read_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_read_proxy_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_token_balance_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_token_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_token_transfer_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_withdrawal_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_write_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/address_write_proxy_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/admin/dashboard_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/admin/session_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/admin/setup_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/block_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/eth_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/logs_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/rpc_translator_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/stats_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/token_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v1/health_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v1/supply_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v1/verified_smart_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/address_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/advanced_filter_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/block_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/config_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/csv_export_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/import_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/internal_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/main_page_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/search_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/smart_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/stats_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/token_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/token_transfer_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/utils_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/validator_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/verification_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api/v2/withdrawal_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/api_docs_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/block_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/block_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/block_withdrawal_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/chain/market_history_chart_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/chain/transaction_history_chart_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/chain_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/metrics_contoller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/page_not_found_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/pending_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/recent_transactions_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/holder_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/instance/transfer_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/instance_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/inventory_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/read_contract_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/tokens/token_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/transaction_internal_transaction_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/transaction_log_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/transaction_state_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/transaction_token_transfer_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/verified_contracts_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/controllers/withdrawal_controller_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/address_contract_verification_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/address_contract_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/address_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/app_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/block_list_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/block_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/chain_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/contract_verify_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/token_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/transaction_list_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/transaction_logs_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/pages/transaction_page.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_addresses_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_app_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_chain_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_tokens_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/features/viewing_transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/address_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/addresses_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/block_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/introspection_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/node_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/query/transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/graphql/schema/subscription/token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/plug/admin/check_owner_registered_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/plug/admin/require_admin_role_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/plug/fetch_user_from_session_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/routers/chain_type_scope_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/social_media_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/abi_encoded_value_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/access_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/address_coin_balance_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/address_contract_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/address_token_balance_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/address_transaction_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/address_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/api/v2/transaction_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/api_docs_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/block_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/currency_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/error_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/error_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/internal_transaction_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/layout_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/nft_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/render_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/search_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/smart_contract_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tab_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/holder_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/instance/overview_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/overview_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/read_contract_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/smart_contract_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/tokens/transfer_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/block_scout_web/views/wei_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/phoenix/param/explorer/chain/block_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/channel_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/conn_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/feature_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/compiler_tests.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/contract_with_lib.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_alliance_sources_partial_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_alliance_sources_partial_response_eth_bdb_full.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_alliance_sources_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_local_sources_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_sourcify_sources_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_all_sourcify_sources_with_libs_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/eth_bytecode_db_search_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/smart_contract_verifier_vyper_multi_part_blueprint_response.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/fixture/smart_contract/solc_bin.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/support/subscription_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/block_scout_web/test/test_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/config/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/config/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/config/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/config/runtime/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/config/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/anvil.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/application.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/arbitrum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/arbitrum/constants/contracts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/arbitrum/constants/events.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/besu.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/besu/trace.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/besu/traces.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block/by_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block/by_nephew.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block/by_number.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block/by_tag.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/contract.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/decode_error.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/encoder.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/erc20.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/erigon.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_beneficiaries.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_beneficiary.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_code.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/fetched_codes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/filecoin.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/calls.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/polygon_tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/http.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/http/httpoison.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/ipc.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/log.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nethermind.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nethermind/trace.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nethermind/trace/action.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nethermind/trace/result.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nethermind/traces.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nft.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/nonce.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/pending_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/prometheus/instrumenter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/receipt.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/receipts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/receipts/by_block_number.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/receipts/by_transaction_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/request_coordinator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/rolling_window.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/rsk.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/rsk/trace.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/rsk/traces.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/signed_authorization.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/subscription.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/trace_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/trace_replay_block_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/transport.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/uncle.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/uncles.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/utility/common_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/utility/endpoint_availability_checker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/utility/endpoint_availability_observer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/utility/ranges_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/variant.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket/registration.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket/retry_worker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket/supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket/web_socket_client.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/web_socket/web_socket_client/options.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/zilliqa.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/zilliqa/aggregate_quorum_certificate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/zilliqa/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/zilliqa/nested_quorum_certificates.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/zilliqa/quorum_certificate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/priv/js/ethereum_jsonrpc/geth/debug_traceTransaction/tracer.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/contract_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/encoder_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/fetched_beneficiaries_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/filecoin_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/calls_tests.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/tracer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/http/mox_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/log_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/mox_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/nethermind/trace/action_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/nethermind/trace/result_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/nethermind/trace_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/nethermind_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/receipt_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/receipts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/request_coordinator_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/rolling_window_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/uncle_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/uncles_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/utility/common_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/web_socket/web_socket_client_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/web_socket_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/withdrawal_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/withdrawals_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/zilliqa_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/ethereum_jsonrpc_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case/filecoin/mox.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case/geth/http_websocket.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case/geth/mox.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case/nethermind/http_websocket.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/case/nethermind/mox.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/http/case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/web_socket/case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/web_socket/case/geth.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/web_socket/case/mox.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/web_socket/case/nethermind.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/ethereum_jsonrpc/web_socket/cowboy/websocket_handler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/fixture/geth/trace/calltracer.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/support/fixture/geth/trace/struct_logger.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/ethereum_jsonrpc/test/test_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/.sobelow-conf create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/benchmarks/explorer/chain/recent_collated_transactions.benchee create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/benchmarks/explorer/chain/recent_collated_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/dev/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/prod/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/runtime/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/config/test/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/coveralls.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/access_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/api/key.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/api/plan.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/custom_abi.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/identity.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/notifier/email.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/notifier/forbidden_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/notifier/notify.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/notifier/summary.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/notify.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/public_tags_request.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/tag_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/tag_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/watchlist.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/watchlist_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/account/watchlist_notification.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/accounts/accounts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/accounts/user.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/accounts/user/authenticate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/accounts/user/registration.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/accounts/user_contact.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/admin.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/admin/administrator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/admin/recovery.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/admin/role.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/application.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/application/constants.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/arbitrum/claim_rollup_message.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/arbitrum/withdraw.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/bloom_filter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/bound_queue.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/coin_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/coin_balance_daily.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/counters.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/current_token_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/metadata_preloader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/name.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/scam_badge_to_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/address/token_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/advanced_filter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/batch_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/batch_to_da_blob.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/batch_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/da_multi_purpose_record.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/l1_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/l1_execution.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/lifecycle_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/message.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/api/general.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/api/messages.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/api/settlement.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/common.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/indexer/general.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/indexer/messages.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/indexer/parent_chain_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/arbitrum/reader/indexer/settlement.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/beacon/blob.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/beacon/blob_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/beacon/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/blackfort/validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/emission_reward.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/range.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/reader/general.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/reward.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/reward/address_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block/second_degree_relation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/block_number_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/bridged_token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/accounts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/background_migrations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/block_number.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/celo_core_contracts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/chain_id.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/address_gas_usage_sum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/address_tabs_elements_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/address_token_transfers_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/address_tokens_usd_sum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/address_transactions_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/addresses_coin_balance_sum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/addresses_coin_balance_sum_minus_burnt.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/addresses_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/average_block_time.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/blackfort/validators_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/block_burnt_fee_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/block_priority_fee_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/blocks_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/contracts_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/gas_usage_sum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/helper/average_block_time_duration_format.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/last_fetched_counter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/new_contracts_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/new_pending_transactions_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/new_verified_contracts_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/optimism/last_output_root_size_counter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/pending_block_operation_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/rootstock/locked_btc_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/shibarium/deposits_and_withdrawals_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/stability/validators_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/token_holders_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/token_transfers_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/transactions_24h_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/transactions_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/verified_contracts_count.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/counters/withdrawals_sum.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/gas_price_oracle.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/latest_l1_block_number.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/min_missing_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/optimism_finalization_period.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/state_changes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/transaction_action_tokens_data.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/transaction_action_uniswap_pools.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/transactions_api_v2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/cache/uncles.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/election_reward.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/epoch_reward.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/pending_epoch_block_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/celo/validator_group_vote.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/contract_method.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/address/internal_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/address/logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/address/token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/address/transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/celo/election_rewards.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/csv_export/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/currency_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/data.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/decoding_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/denormalization_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/events/db_sender.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/events/listener.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/events/publisher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/events/simple_sender.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/events/subscriber.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/fetcher/addresses_blacklist.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/fetcher/addresses_blacklist/blockaid.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/fetcher/check_bytecode_matching_on_demand.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/fetcher/fetch_validator_info_on_demand.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/fetcher/look_up_smart_contract_sources_on_demand.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/filecoin/id.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/filecoin/native_address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/filecoin/pending_address_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/gas.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/hash/address.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/hash/full.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/hash/nonce.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/health/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/health/monitor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/address/coin_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/address/coin_balances_daily.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/address/current_token_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/address/token_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/addresses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/batch_blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/batch_to_da_blobs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/batch_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/da_multi_purpose_records.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/l1_batches.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/l1_executions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/lifecycle_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/arbitrum/messages.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/beacon/blob_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/block/rewards.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/block/second_degree_relations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/celo/election_rewards.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/celo/epoch_rewards.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/celo/validator_group_votes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/internal_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/deposits.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/dispute_games.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/eip1559_config_updates.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/frame_sequence_blobs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/frame_sequences.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/interop_messages.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/output_roots.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/transaction_batches.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/withdrawal_events.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/optimism/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_edge/deposit_executes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_edge/deposits.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_edge/withdrawal_exits.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_edge/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_zkevm/batch_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_zkevm/bridge_l1_tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_zkevm/bridge_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_zkevm/lifecycle_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/polygon_zkevm/transaction_batches.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/scroll/batch_bundles.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/scroll/batches.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/scroll/bridge_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/scroll/l1_fee_params.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/shibarium/bridge_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/signed_authorizations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/token_instances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/transaction/forks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/transaction_actions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zilliqa/aggregate_quorum_certificates.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zilliqa/nested_quorum_certificates.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zilliqa/quorum_certificates.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zksync/batch_blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zksync/batch_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zksync/lifecycle_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/runner/zksync/transaction_batches.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/block_transaction_referencing.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/chain_type_specific.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/internal_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/main.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/token_instances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/import/stage/token_referencing.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/internal_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/internal_transaction/action.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/internal_transaction/call_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/internal_transaction/result.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/internal_transaction/type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/log.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/map_cache.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/method_identifier.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/metrics.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/metrics/queries.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/mud.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/mud/schema.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/mud/table.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/neon/linked_solana_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/null_round_height.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/deposit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/dispute_game.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/eip1559_config_update.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/frame_sequence.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/frame_sequence_blob.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/interop_message.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/output_root.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/optimism/withdrawal_event.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/ordered_cache.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/pending_block_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/pending_operations_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/pending_transaction_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_edge/deposit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_edge/deposit_execute.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_edge/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_edge/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_edge/withdrawal_exit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/batch_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/bridge_l1_token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/lifecycle_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/polygon_zkevm/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/rollup_reorg_monitor_queue.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/scroll/batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/scroll/batch_bundle.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/scroll/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/scroll/l1_fee_param.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/scroll/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/search.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/shibarium/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/shibarium/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/signed_authorization.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/audit_report.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/external_library.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/legacy_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/clone_with_immutable_arguments.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/eip_1167.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/eip_1822.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/eip_1967.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/eip_2535.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/eip_7702.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/erc_7760.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/master_copy.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/models/implementation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/resolved_delegate_proxy.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/proxy/verification_status.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract/verification_status.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/smart_contract_additional_source.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/stability/validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/supply.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/supply/exchange_rate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/supply/proof_of_authority.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/supply/rsk.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/token/instance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/token/instance/media_urls.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/token_transfer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/fork.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/history/historian.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/history/transaction_stats.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/state_change.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction/status.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/transaction_action.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/user_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/wei.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/aggregate_quorum_certificate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/hash/bls_public_key.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/hash/peer_id.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/hash/signature.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/nested_quorum_certificate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/quorum_certificate.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zilliqa/staker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zksync/batch_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zksync/batch_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zksync/lifecycle_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zksync/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain/zksync/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain_spec/genesis_data.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain_spec/geth/importer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain_spec/parity/importer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/chain_spec/poa/importer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/custom_contracts_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/encrypted/address_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/encrypted/binary.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/encrypted/transaction_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/encrypted/types/address_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/encrypted/types/transaction_hash.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/env_var_translator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/eth_rpc.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/eth_rpc_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/etherscan.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/etherscan/addresses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/etherscan/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/etherscan/contracts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/etherscan/logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/graphql.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/graphql/celo.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/history/historian.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/history/process.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/logger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/mailer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/fetcher/coin.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/fetcher/history.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/fetcher/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/market.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/market_history.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/market_history_cache.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/coin_gecko.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/coin_market_cap.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/crypto_compare.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/crypto_rank.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/defillama.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/source/mobula.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/market/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/metadata_uri_validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/microservice_interfaces/account_abstraction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/microservice_interfaces/bens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/microservice_interfaces/metadata.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/microservice_interfaces/multichain_search.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/address_current_token_balance_token_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/address_token_balance_token_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/arbitrum_da_records_normalization.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/backfill_metadata_url.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/backfill_multichain_search_db.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/filecoin_pending_address_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/filling_migration.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_transactions_count_asc_coin_balance_desc_hash_partial.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_transactions_count_desc_partial_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_verified_fetched_coin_balance_desc_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_verified_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_verified_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_addresses_verified_transactions_count_desc_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_arbitrum_batch_l2_blocks_unconfirmed_blocks_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_internal_transactions_block_number_desc_block_index_desc_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_logs_address_hash_block_number_desc_index_desc_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_logs_address_hash_first_topic_block_number_index_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_logs_block_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_logs_deposits_withdrawals_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/create_smart_contracts_language_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_addresses_verified_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_internal_transactions_from_address_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_logs_address_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_logs_address_hash_transaction_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_logs_block_number_asc_index_asc_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_logs_index_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_token_transfers_block_number_asc_log_index_asc_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_token_transfers_block_number_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_token_transfers_from_address_hash_transaction_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_token_transfers_to_address_hash_transaction_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_token_transfers_token_contract_address_hash_transaction_hash_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_transactions_created_contract_address_hash_with_pending_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_transactions_from_address_hash_with_pending_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/drop_transactions_to_address_hash_with_pending_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/heavy_db_index_operation/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/migration_status.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/refetch_contract_codes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/reindex_internal_transactions_with_incompatible_status.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/restore_omitted_weth_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_duplicated_log_index_logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_empty_contract_code_addresses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_incorrect_nft_token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_incorrect_weth_token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_missing_block_ranges.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_missing_token_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_replaced_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/sanitize_verified_addresses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/shrink_internal_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/smart_contract_language.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/switch_pending_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/token_transfer_block_consensus.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/token_transfer_token_type.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/transaction_block_consensus.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/migrator/transactions_denormalization.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/paging_options.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/prometheus/collector/active_db_connections.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/prometheus/instrumenter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/query_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/repo.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/repo/config_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/repo/prometheus_logger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/schema.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/certified_smart_contract_cataloger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/compiler_version.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/eth_bytecode_db_interface.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface_behaviour.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/sig_provider_interface.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solc_downloader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solidity/code_compiler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solidity/publish_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solidity/publisher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solidity/publisher_worker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/solidity/verifier.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/stylus/publisher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/stylus/publisher_worker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/stylus/verifier.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/stylus_verifier_interface.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/vyper/code_compiler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/vyper/publisher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/vyper/publisher_worker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/vyper/verifier.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/vyper_downloader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/smart_contract/writer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/sorting_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/tags/address_tag.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/tags/address_tag_cataloger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/tags/address_to_tag.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/airtable.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/auth0.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/noves_fi.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/solidityscan.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/sourcify.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/universal_proxy.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/third_party_integrations/xname.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/token/balance_reader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/token/metadata_retriever.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/token_instance_owner_address_migration/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/token_instance_owner_address_migration/supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/token_instance_owner_address_migration/worker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/tuple_encoder.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/address_contract_code_fetch_attempt.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/event_notification.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/massive_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/microservice.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/missing_balance_of_token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/missing_block_range.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/missing_ranges_manipulator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/rate_limiter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/replica_accessibility_manager.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/utility/token_instance_metadata_refetch_attempt.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/validator/metadata_importer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/validator/metadata_processor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/validator/metadata_retriever.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/vault.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/explorer/visualize/sol2uml.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/fetch_celo_core_contracts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/release_tasks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/lib/test_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/package-lock.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/package.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20211031164954_create_account_identities.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20211105114502_create_account_watchlists.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20211105130907_create_account_watchlist_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20211127212336_create_account_watchlist_notifications.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20211205220414_add_email_and_name_to_account_identity.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220212222222_create_account_tag_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220313133333_create_account_tag_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220324213333_add_subject_to_watchlist_notifications.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220407134152_add_api_keys_and_plans_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220510094118_add_custom_abis_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220606194836_add_account_public_tags_requests.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220620182600_add_account_identity_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220624142547_add_unique_constraints.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220705195240_migrate_public_tags_addresses_to_array.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220706114430_encrypt_account_data.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220706153506_remove_unencrypted_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220706211444_set_new_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20220905195203_remove_guardian_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20221104104635_create_token_transfer_token_id_migrator_progress.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20230502083519_add_verification_email_sent_at.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20231207201701_add_watchlist_id_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20240219152220_add_account_watchlist_addresses_erc_404_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20240913194307_account_v2.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20241015091450_rename_tx_hash_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20241121140138_remove_abused_api_keys.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20241128100836_remove_abused_custom_abis.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/account/migrations/20241204093817_remove_abused_public_tags_request.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20240201125730_create_arbitrum_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20240510184858_extend_transaction_and_block_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20240527212653_add_da_info.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20240628210148_add_index_for_messages.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20241015093220_rename_tx_hash_field_arbitrum.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20241111195112_add_stylus_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/arbitrum/migrations/20241217155103_add_data_blobs_to_batches_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/beacon/migrations/20240109102458_create_blobs_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/beacon/migrations/20240318154323_create_blob_transactions_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/blackfort/migrations/20240910112251_add_blackfort_validators.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/bridged_tokens/migrations/20230919080116_add_bridged_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240323152023_add_custom_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240424121856_add_pending_epoch_block_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240512143204_remove_transaction_hash_from_primary_key_in_logs.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240513091316_remove_transaction_hash_from_primary_key_in_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240607185817_add_epoch_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240612135216_add_validator_group_votes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240614125614_add_election_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240715110334_remove_unused_fields_from_validator_group_votes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20240830094610_add_account_address_and_group_address_to_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/celo/migrations/20241029131554_modify_collated_gas_price_constraint.exs create mode 100755 sz-poc-offsite-2025/blockscout/apps/explorer/priv/compile_solc.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/compile_solc_standard_json_input.js create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/contracts_abi/poa/metadata.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/contracts_abi/poa/validators.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20230731130103_modify_collated_gas_price_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20231109104957_create_null_round_heights.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20240219140124_change_null_round_heights_height_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20240801134142_create_pending_address_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20240807134138_add_chain_type_fields_to_address.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20241214110136_add_refetch_after_to_pending_address_operation.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/filecoin/migrations/20250220085529_replace_filecoin_addresses_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/neon/migrations/20241203161152_create_neon_solana_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20220204060243_transaction_columns_to_support_l2.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230131115105_add_op_output_roots_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230206123308_add_op_withdrawals_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230212162845_add_op_withdrawal_events_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230216135703_add_op_transaction_batches_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230220202107_create_op_deposits.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230301105051_rename_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230303125841_add_op_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230307090655_add_op_frame_sequences_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20230731130103_modify_collated_gas_price_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20231025102325_add_op_withdrawal_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20240124124644_remove_op_epoch_number_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20240328125102_fault_proofs_support.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20240503113124_add_celestia_blob_metadata.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20240612120541_add_view_ready_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20240613065020_add_frame_sequence_id_prev_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20241015140121_rename_tx_related_field_optimism.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20241203113159_holocene_support.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20241209101134_op_withdrawal_events_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20250121131928_holocene_clear.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20250204050501_op_interop_messages.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20250221121840_reindex_batches.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/optimism/migrations/20250317111838_rename_interop_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_edge/migrations/20230618132249_create_polygon_edge_withdrawal_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_edge/migrations/20230707113550_create_polygon_edge_deposit_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_edge/migrations/20230731130103_modify_collated_gas_price_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_zkevm/migrations/20230420110800_create_zkevm_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_zkevm/migrations/20231010093238_add_bridge_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/polygon_zkevm/migrations/20240306080627_make_timestamp_optional.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/.gitkeep create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180117221921_create_address.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180117221922_create_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180117221923_create_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180212222309_create_logs.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180221001948_create_internal_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180424203101_create_market_history.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180508183700_create_users.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180508191045_create_user_contacts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180518221256_create_smart_contract_verified.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180522154252_create_btree_gist_extension.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180522154253_create_block_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180606135149_create_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180606135150_create_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180626143840_add_inserted_at_index_to_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180717204948_create_address_coin_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180817021704_create_address_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180821142139_create_address_names.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180917182319_create_block_second_degree_relations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180918200001_create_transaction_fork.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20180919175123_alter_token_decimals_to_bigint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181008195723_create_administrators.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181011193212_add_fields_to_internal_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181015173318_add_case_insensitive_extension.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181015173319_modify_users_username.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181016163236_modify_user_contacts_email.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181017141409_add_index_to_internal_transaction_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181024141113_internal_transactions_composite_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181024164623_logs_composite_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181024172010_token_transfers_composite_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181026180921_create_address_current_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181029174420_update_tokens_table_decimals_from_bigint_to_numeric.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181106152300_add_nonce_to_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181107164103_eip6.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181108205650_additional_internal_transaction_constraints.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181121170616_add_block_number_to_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181126203826_add_index_to_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181206200140_rename_block_rewards_to_emission_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181206200312_create_new_block_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181212115448_add_indexes_to_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181213111656_add_metadata_field_to_address_names.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181221143000_create_blocks_miner_hash_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20181221145054_add_contract_methods.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190102141900_index_current_token_holders.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190114204640_add_tokens_holder_count.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190116082843_add_created_contract_indexed_at_to_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190118040301_create_tokens_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190118152240_block_second_degree_relations_composite_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190122125815_change_transaction_error_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190124082812_add_index_on_transaction_nonce_and_from_address_hash.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190208113202_add_unique_index_to_rewards.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190208143201_add_index_on_address_hash_block_number_and_token_contract_address_hash_for_current_token_balance.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190213180502_add_earliest_processing_start_to_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190214135850_add_index_on_block_number_to_address_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190215080049_add_index_on_fetched_coin_balance_to_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190215093358_add_compound_index_address_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190215105501_add_constructor_arguments_to_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190219082636_add_indexes_for_block_reward_query.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190228102650_add_index_created_contract_address_hash.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190228152333_change_constructor_arguments_to_text.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190228220746_add_internal_transactions_indexed_at_to_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190301095620_remove_duplicated_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190301120328_add_index_to_consensus.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190305095926_add_index_to_value_fetched_at.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190313085740_add_index_symobl_in_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190313103912_change_transactions_v_column_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190314084907_add_index_to_to_address_hash.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190318151809_add_inserted_at_index_to_accounts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190319081821_create_decompiled_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190321185644_add_old_value_for_current_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190325081658_remove_unique_address_hash_decompiled_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190403080447_add_full_text_search_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190421143300_add_index_to_bsdr.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190424170833_change_block_size_to_nullable.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190508152922_add_old_block_hash_for_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190513134025_add_refetch_needed_to_block.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190516140202_add_address_hash_index_to_decompiled_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190516160535_add_decompiled_and_verified_flag_to_addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190521104412_create_staking_pools.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190523112839_create_staking_pools_delegators.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190613065856_add_transaction_hash_inserted_at_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190619154943_reduce_transaction_status_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190625085852_add_additional_contract_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190709043832_create_transaction_stats.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190709103104_add_external_libraries_to_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190807111216_remove_duplicate_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190807113117_create_suggested_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190827120224_add_index_on_token_transfer_token_id.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190905083522_create_token_instances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20190910170703_create_indexes_for_block_number_in_token_transfers_and_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191007082500_add_indexes_for_token_instances_query.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191009121635_add_token_transfer_sorting_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191010075740_add_error_to_token_instances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191018120546_create_pending_block_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191018140054_add_pending_internal_transactions_operation.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191121064805_add_block_hash_and_block_index_to_logs.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191122062035_add_block_hash_to_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191128124415_remove_duplicate_indexes_token_entities.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191203112646_internal_transactions_add_to_address_hash_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191208135613_block_rewards_block_hash_partial_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191218120138_logs_block_number_index_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20191220113006_pending_block_operations_block_hash_partial_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200214152058_add_token_id_to_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200410115841_create_index_address_current_token_balances_token_contract_address_hash_value.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200410141202_create_index_token_transfers_token_contract_address_hash_block_number.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200421102450_pending_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200424070607_drop_block_rewards_address_hash_address_type_block_hash_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200518075748_create_index_blocks_miner_hash_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200521090250_recreate_staking_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200521170002_create_token_transfers_token_contract_address_hash_token_id_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200525115811_address_coin_balances_daily.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200527144742_add_counters_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200608075122_alter_transactions_add_error_reason.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200806125649_token_add_bridged_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200807064700_bridged_tokens_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200812143050_add_addresses_contract_code_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200904075501_add_bridged_token_custom_metadata.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20200929075625_add_bridged_token_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20201026093652_transactions_stat_add_gas_usage_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20201214203532_support_sourcify.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210219080523_add_tags.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210226154732_add_exchange_rate_column_to_bridged_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210309104122_add_bridged_token_custom_cap.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210331074008_add_pool_name_description.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210422115740_add_token_id_to_current_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210423084253_address_current_token_balances_add_token_id_to_unique_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210423091652_address_token_balances_add_token_id_to_unique_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210423094801_address_token_balances_change_unfetched_token_balances_unique_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210423115108_extend_token_transfers_for_erc1155.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210524165427_min_missing_block_number.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210527093756_transaction_stats_add_total_fee_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210616120552_smart_contracts_add_is_vyper_flag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210701084814_support_partial_match.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210811140837_add_1559_support.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210823144531_tokens_add_metadata_fetch_flag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20210916194004_add_file_path_for_sourcify_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211006121008_add_block_is_empty_flag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211013190346_remove_duplicates_of_current_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211017135545_migrate_optimization_runs_to_int8.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211018072347_add_is_empty_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211018073652_add_token_balances_contract_address_hash_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211018164843_transactions_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211018170533_add_address_token_balances_address_hash_token_contract_address_hash_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211018170638_add_logs_address_hash_transaction_hash_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211029085117_drop_block_rewards_block_hash_partial_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211115164817_add_check_for_bytecode_actuality.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211203115010_add_contract_verification_status_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211204184037_address_add_gas_used.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211206071033_modify_address_gas_used_bigint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211210184136_add_display_name_to_address_tag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20211217201759_add_has_error_in_internal_txs_field_to_transaction.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220111085751_address_add_counters.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220303083252_smart_contracts_contract_code_md5.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220306091504_add_implementation_name.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220527131249_add_implementation_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220622114402_remove_staking_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220622140604_remove_bridged_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706101103_address_coin_balances_daily_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706102257_address_coin_balances_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706102504_transactions_forks_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706102746_block_rewards_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706105925_emission_rewards_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220706111510_address_names_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220804114005_create_event_notifications.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220902083436_extend_token_name_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220902103213_create_index_token_transfers_token_ids.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220902103527_create_indexes_token_instances_token_contract_address_hash_token_id.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220919105140_add_method_id_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20220926122620_extend_token_symbol_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221104091552_add_transaction_actions_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221104104635_create_token_transfer_token_id_migrator_progress.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221114113853_remove_not_null_constraint_from_abi.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221114121811_drop_internal_transactions_order_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221117075456_modify_address_token_balances_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221117080657_modify_address_current_token_balances_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221120184715_add_json_compiler_settings.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221125074820_drop_required_output_constraint.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221126103223_add_transactions_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221209123459_drop_unfetched_token_balances_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221212093406_change_index_for_pending_block_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221219151744_create_missing_block_ranges.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221223151234_add_block_number_to_pending_block_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20221223214711_create_withdrawals.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230126205627_add_fiat_value_and_circulating_market_cap_for_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230214104917_add_validators_and_constants_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230217095226_add_total_supply_updated_at_block.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230328100414_add_transaction_action_types.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230417093914_allow_nil_transaction_gas_price.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230425185941_add_token_icon_url.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230522130735_withdrawals_gwei_amount_to_wei_amount.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230530074105_market_history_add_market_cap.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230605080138_add_verified_via_eth_bytecode_db.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230606091935_fix_contract_creation_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230613181244_address_coin_balances_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230615130940_add_blocks_date_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230719160318_delete_erc_1155_tt_with_empty_token_ids.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230809134253_add_is_verified_via_admin_panel.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230815131151_drop_logs_address_hash_foreign_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230816061723_drop_token_transfers_and_transactions_address_foreign_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230817061317_drop_address_foreign_keys.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230818094455_add_token_ids_to_address_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230821120625_drop_rest_address_foreign_keys.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230831122819_drop_current_token_balances_tokens_foreign_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20230905085809_drop_token_balances_tokens_foreign_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231003093553_add_tvl_to_market_history_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231212101547_add_block_timestamp_and_consensus_to_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231212102127_create_migrations_status.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231213085254_add_btree_gin_extension.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231213090140_add_token_transfers_token_contract_address_token_ids_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231213101235_drop_token_transfers_token_ids_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231213152332_alter_log_topic_columns_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231215094615_drop_token_transfers_token_id_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231215104320_drop_unused_actb_indexes.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231215115638_drop_unused_logs_type_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231215132609_add_index_blocks_refetch_needed.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231225113850_transactions_asc_indices.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231225115026_logs_asc_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231225115100_token_transfers_asc_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231227170848_add_proxy_verification_status.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20231229120232_add_smart_contract_audit_reports_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240103094720_constrain_null_date_market_history.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240114181404_enhanced_unfetched_token_balances_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240122102141_add_token_type_to_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240123102336_add_tokens_cataloged_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240129112623_add_smart_contract_license_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240219143204_add_volume_24h_to_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240219152810_add_block_consensus_to_token_transfers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240224112210_create_index_pending_block_operations_block_number.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240226074456_create_massive_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240226151331_add_secondary_coin_market_history.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240227115149_add_smart_contracts_name_text_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240308123508_token_transfers_add_from_address_hash_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240313195728_token_transfers_add_to_address_hash_block_number_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240322115647_create_address_contract_code_fetch_attempts_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240325195446_add_verified_via_verifier_alliance.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240403151125_enhance_index_for_token_transfers_list.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240403151126_drop_outdated_index_for_token_transfers_list.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240404102510_enhance_index_for_token_holders_list.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240404102511_drop_outdated_index_for_token_holders_list.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240417141515_smart_contracts_add_certified_flag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240418135458_fix_index_for_unfetched_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240418140425_drop_outdated_index_for_unfetched_token_balances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240419095711_add_proxy_implementations_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240419101821_migrate_proxy_implementations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240419102345_drop_implementation_fields_from_smart_contract_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240425091614_add_proxy_type_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240425185705_alter_proxy_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240501131140_new_proxy_type_clones_with_immutable_arguments.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240502064431_create_missing_balance_of_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240503091708_add_nft_instance_fetcher_aux_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240509014500_smart_contracts_add_is_blueprint_flag.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240520075414_create_token_instance_metadata_refetch_attempts_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240527152734_add_currently_implemented_to_missing_balance_of_tokens.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240708152519_add_nft_media_urls.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240718150123_add_no_overlap_index_to_missing_block_ranges.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240806162644_add_contract_methods_inserted_at_index.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240828140638_add_token_balance_retry_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240830142652_add_meta_to_migrations_status.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240904161254_create_signed_authorizations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240910095635_add_address_badges_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240918104231_new_proxy_type_eip7702.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240923135258_reset_sanitize_missing_token_balances_migration_status.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20240923173516_address_tags_add_primary_key.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241002125432_add_is_banned_to_token_instances.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241015140214_rename_tx_related_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241022133006_add_aux_types_for_duplicated_log_index_logs_migration.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241031110127_create_pending_transaction_operations.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241111200520_add_language_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241216112656_create_types_for_composite_primary_keys.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20241219102223_remove_large_decimals.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250119145532_add_metadata_tags_aux_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250121142849_add_tokens_metadata_updated_at_column.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250122185347_new_proxy_type_resolved_delegate_proxy.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250128081221_add_token_instance_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250212182049_update_last_fetched_counters_keys.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250214102221_remove_composite_id_types.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250217221717_change_tokens_icon_url_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250303080958_remove_decompiled_smart_contracts_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250311090608_add_erc_7760_to_proxy_type.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250318091828_add_metadata_url.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250319163945_missing_block_ranges_add_priority.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/20250328104924_signed_authorizations_nonce_change_type_to_numeric.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20181107164103_eip6.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20181108205650_additional_internal_transaction_constraints.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20181108205650_large_additional_internal_transaction_constraints.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20181121170616_token_transfers_update_block_number_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20181126182700_migrate_address_nonce.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20190326202921_lose_consensus_for_invalid_blocks.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/20191018140054_send_block_hash_block_index_dups_to_carnitine.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/insert_address_current_token_balances_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/internal_transaction_update_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/transaction_update_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/update_address_current_token_balances_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/update_new_tokens_holder_count_in_batches.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/migrations/scripts/update_replaced_transaction.sql create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo/seeds.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/repo_api/migrations/.gitkeep create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/rsk/migrations/20230724094744_add_rootstock_fields_to_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/rsk/migrations/20231004101922_populate_pending_block_ops_with_historic_blocks.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/scroll/migrations/20240710101931_add_fee_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/scroll/migrations/20240807114346_add_queue_index_field.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/scroll/migrations/20240815102318_add_bridge_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/scroll/migrations/20240913114630_add_batches_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/scroll/migrations/20241016105249_rename_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/shibarium/migrations/20231024091228_add_bridge_table.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/shrunk_internal_transactions/migrations/20240717080512_remove_internal_transactions_constraints.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/stability/migrations/20240203091010_add_stability_validators.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/suave/migrations/20230921120210_add_suave_transaction_fields.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20240927123039_create_quorum_certificate.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20240927123101_create_aggregate_quorum_certificate.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20240927123113_create_nested_quorum_certificate.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20241015095021_add_view_to_block.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20241027171945_modify_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20250106185108_create_zilliqa_stakers.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zilliqa/migrations/20250303201406_decrease_scilla_language_index_by_one.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20211202082101_make_tranaction_r_s_v_optional.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20231213171043_create_zksync_tables.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20240611091814_rename_field_in_batch_transactions.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20240716095237_add_zk_compiler_version_to_smart_contracts.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20241015093336_rename_tx_hash_field_zksync.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20241028102407_rename_tx_count_fields_zksync.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/priv/zk_sync/migrations/20241028102853_add_contract_code_refetched.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/account/identity_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/account/notifier/email_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/account/notifier/notify_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/account/notifier/summary_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/accounts/accounts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/accounts/user_contact_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/accounts/user_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/admin/administrator/role_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/admin/recovery_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/admin_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/bloom_filter_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/address/coin_balance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/address/current_token_balance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/address/token_balance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/address/token_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/address_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/beacon/reader_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/block/range_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/block/reader/general_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/block/second_degree_relation_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/block_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/accounts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/block_number_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/celo_core_contracts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/addresses_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/addresses_sum_minus_burnt.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/addresses_sum_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/addresses_tokens_usd_sum_counter_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/average_block_time_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/contracts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/new_contracts_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/new_pending_transactions_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/new_verified_contracts_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/optimism/last_output_root_size_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/rootstock/rootstock_locked_btc_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/transactions_24h_count_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/counters/verified_contracts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/gas_price_oracle_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/cache/uncles_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/celo/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/csv_export/address/internal_transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/csv_export/address/logs_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/csv_export/address/token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/csv_export/address/transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/currency_helper_text.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/data_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/events/publisher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/events/subscriber_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/filecoin/native_address_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/hash/address_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/hash/full_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/hash/nonce_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/hash_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/health/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/address/current_token_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/address/token_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/addresses_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/internal_transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/tokens_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import/runner/transactions_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/import_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/internal_transaction/call_type_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/internal_transaction/type_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/internal_transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/log_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/smart_contract/proxy/erc_7760_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/smart_contract/proxy/models/implementation_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/smart_contract/proxy_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/smart_contract_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/supply/proof_of_authority_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/supply/rsk_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/token/instance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/token_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/token_transfer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/transaction/fork_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/transaction/history/historian_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/transaction/history/transaction_stats_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/transaction/status_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/wei_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain/withdrawal_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain_spec/geth/importer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain_spec/parity/importer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/chain_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/config_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/etherscan/logs_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/etherscan_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/graphql_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/history/process_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/fetcher/coin_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/fetcher/history_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/fetcher/token_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/market_history_cache_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/market_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/source/coin_gecko_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/source/coin_market_cap_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/market/source/crypto_compare_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/address_current_token_balance_token_type_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/address_token_balance_token_type_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/backfill_metadata_url_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/heavy_db_index_operation/create_logs_address_hash_block_number_desc_index_desc_index_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/heavy_db_index_operation/drop_logs_block_number_asc_index_asc_index_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/reindex_internal_transactions_with_incompatible_status_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/sanitize_duplicated_log_index_logs_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/sanitize_empty_contract_code_addresses_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/sanitize_incorrect_nft_token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/sanitize_incorrect_weth_token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/sanitize_missing_token_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/smart_contract_language_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/switch_pending_operations_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/token_transfer_token_type_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/migrator/transactions_denormalization_migrator_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/repo/config_helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/repo_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/certified_smart_contract_cataloger_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/compiler_version_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/reader_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/solidity/code_compiler_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/solidity/publisher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/solidity/verifier_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/vyper/publisher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/smart_contract/writer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/third_party_integrations/universal_proxy_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/token/balance_reader_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/token/metadata_retriever_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/token_instance_owner_address_migration/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/utility/missing_block_range_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/utility/rate_limiter_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/validator/metadata_importer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/explorer/validator/metadata_retriever_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/string/chars/explorer/chain/address_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/string/chars/explorer/chain/data_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/chain/import/runner_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/data_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/factory.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fakes/one_coin_source.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/classic.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/foundation.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/optimism_genesis.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/polygon_genesis.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/qdai_genesis.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/chain_spec/zkatana_genesis.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/exchange_rates/coin_gecko.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/ERC677.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/compiler_tests.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/contract_from_factory.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/contract_with_lib.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/contract_with_lib.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/home_bridge.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_3082.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_4758.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_5114.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_5127.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_5431.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/issue_with_constructor_args.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/large_smart_contract.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/solc_bin.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/solidity_0.5.9_smart_contract.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.sol create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/standard_input.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/smart_contract/vyper.vy create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/.gitkeep create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/block_importer_download_block_1_downloads_the_block.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/block_importer_import_1_duplicate_block.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/block_importer_import_1_pending.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/block_importer_import_1_saves_the_block.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/ethereumex_extensions_trace_transaction_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_1_duplicate.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_1_earliest.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_1_integer.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_1_latest.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_1_string.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_block_perform_later_1_latest.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_internal_transaction_perform_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_receipt_perform_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_skipped_blocks_perform_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/import_transaction_perform_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/internal_transaction_importer_import_1.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/internal_transaction_importer_import_1_from_core-trace.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/internal_transaction_importer_import_1_with_contract_creation.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_binds_internal_transactions.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_creates_a_from_address.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_creates_a_to_address.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_creates_a_to_address_from_creates.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_download_transaction.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_download_transaction_with_a_bad_hash.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_import_1_failed.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_import_1_out_of_gas.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_import_1_pending.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_import_1_receipt.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_import_saves_the_transaction.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_saves_the_association.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_transaction_without_block.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/support/fixture/vcr_cassettes/transaction_importer_updates_the_association.json create mode 100644 sz-poc-offsite-2025/blockscout/apps/explorer/test/test_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/dev/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/prod/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/runtime/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/anvil.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/besu.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/erigon.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/filecoin.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/geth.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/nethermind.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/config/test/rsk.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/application.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/catchup/bound_interval_supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/catchup/fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/catchup/massive_blocks_fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/catchup/missing_ranges_collector.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/catchup/supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/fetcher/receipts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/realtime/fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/block/realtime/supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/bound_interval.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/bridged_tokens/calc_lp_tokens_total_liquidity.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/bridged_tokens/set_amb_bridged_metadata_for_tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/bridged_tokens/set_omni_bridged_metadata_for_tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/buffered_task.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/da/anytrust.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/da/celestia.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/da/common.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/data_backfill.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/messages_to_l2_matcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/messaging.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/rollup_messages_catchup.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/tracking_batches_statuses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/tracking_messages_on_l1.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/common.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/messages.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/parent_chain_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/settlement.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/db/tools.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/logging.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/utils/rpc.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/backfill.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/discovery.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/discovery_utils.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/events.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/rollup_entities.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/batches/tasks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/confirmations/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/confirmations/discovery.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/confirmations/events.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/confirmations/rollup_blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/confirmations/tasks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/historical_messages_on_l2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/l1_finalization.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/new_l1_executions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/arbitrum/workers/new_messages_to_l2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/beacon/blob.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/beacon/client.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/blackfort/validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/block_reward.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations/core_contract_version.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations/delegated_payments.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations/distributions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations/validator_and_group_payments.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_block_operations/voter_payments.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/epoch_logs.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/celo/validator_group_votes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/coin_balance/catchup.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/coin_balance/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/coin_balance/realtime.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/contract_code.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/empty_blocks_sanitizer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/filecoin/address_info.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/filecoin/beryx_api.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/filecoin/filfox_api.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/internal_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/coin_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/contract_code.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/contract_creator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/first_trace.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/neon_solana_transactions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/nft_collection_metadata_refetch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/token_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/token_instance_metadata_refetch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/on_demand/token_total_supply.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/deposit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/dispute_game.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/eip1559_config_update.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/interop/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/interop/message.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/interop/message_failed.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/interop/message_queue.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/output_root.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/optimism/withdrawal_event.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/pending_block_operations_sanitizer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/pending_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_edge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_edge/deposit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_edge/deposit_execute.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_edge/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_edge/withdrawal_exit.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_zkevm/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_zkevm/bridge_l1.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_zkevm/bridge_l1_tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_zkevm/bridge_l2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/polygon_zkevm/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/replaced_transaction.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/rollup_l1_reorg_monitor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/rootstock_data.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/bridge_l1.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/bridge_l2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/scroll/l1_fee_param.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/shibarium/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/shibarium/l1.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/shibarium/l2.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/stability/validator.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_balance.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/realtime.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/refetch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/retry.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/sanitize.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/sanitize_erc1155.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_instance/sanitize_erc721.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_total_supply_updater.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/token_updater.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/transaction_action.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/uncle_block.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/withdrawal.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zilliqa/scilla_smart_contracts.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/batches_status_tracker.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/discovery/batches_data.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/discovery/workers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/status_tracking/committed.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/status_tracking/common.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/status_tracking/executed.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/status_tracking/proven.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/transaction_batch.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/utils/db.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/utils/logging.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/fetcher/zksync/utils/rpc.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/logger.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/memory/monitor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/memory/shrinkable.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/migrator/recovery_weth_token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/nft_media_handler/backfiller.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/nft_media_handler/queue.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/pending_ops_cleaner.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/pending_transactions_sanitizer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/prometheus/collector/filecoin_pending_address_operations_collector.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/prometheus/collector/pending_block_operations_collector.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/prometheus/collector/pending_transaction_operations_collector.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/prometheus/instrumenter.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/supervisor.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/temporary/uncataloged_token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/temporary/uncles_without_index.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/token_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/tracer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/address_coin_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/address_coin_balances_daily.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/address_token_balances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/addresses.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/arbitrum/messaging.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/blocks.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/blocks/base.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/blocks/clique.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/celo/transaction_gas_tokens.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/celo/transaction_token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/celo/validator_epoch_payment_distributions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/mint_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/optimism/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/polygon_edge/deposit_executes.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/polygon_edge/withdrawals.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/polygon_zkevm/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/scroll/l1_fee_params.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/shibarium/bridge.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/signed_authorizations.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/token_instances.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/token_transfers.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/lib/indexer/transform/transaction_actions.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/catchup/bound_interval_supervisor_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/catchup/fetcher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/catchup/missing_ranges_collector_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/fetcher/receipts_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/fetcher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/block/realtime/fetcher_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/buffered_task_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/beacon/blob_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/block_reward_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/celo/epoch_block_operations_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/coin_balance/catchup_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/contract_code_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/internal_transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/on_demand/coin_balance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/on_demand/contract_code_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/on_demand/contract_creator_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/on_demand/token_instance_metadata_refetch_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/pending_block_operations_sanitizer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/pending_transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/replaced_transaction_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/rootstock_data_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/stability/validator_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_balance_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_instance/helper_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_instance/realtime_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_instance/refetch_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_instance/sanitize_erc1155_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_instance/sanitize_erc721_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/token_updater_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/uncle_block_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/fetcher/withdrawal_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/migrator/recovery_weth_token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/pending_ops_cleaner_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/temporary/uncataloged_token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/token_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/address_coin_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/address_token_balances_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/addresses.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/blocks/base_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/blocks/clique_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/blocks_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/mint_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer/transform/token_transfers_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/indexer_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/block/catchup_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/beacon_blob_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/block_reward_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/celo_epoch_rewards_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/coin_balance_catchup_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/coin_balance_realtime_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/contract_code_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/filecoin_native_address_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/internal_transaction_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/on_demand/coin_balance_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/on_demand/token_balance_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/pending_transaction_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/replaced_transaction_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/rootstock_data_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/token_balance_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/token_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/token_updater_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/uncle_block_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/support/indexer/fetcher/withdrawal_supervisor_case.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/indexer/test/test_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/application.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/dispatcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/dispatcher_interface.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/image/resizer.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/media/fetcher.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/lib/nft_media_handler/r2/uploader.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/nft_media_handler/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/README.md create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/lib/credo/checks/compile_env_usage.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/lib/utils/compile_time_env_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/lib/utils/runtime_env_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/lib/utils/token_instance_helper.ex create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/test/checks/compile_env_usage_test.exs create mode 100644 sz-poc-offsite-2025/blockscout/apps/utils/test/test_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/appspec.yml create mode 100755 sz-poc-offsite-2025/blockscout/bin/deploy create mode 100755 sz-poc-offsite-2025/blockscout/bin/deployment/build create mode 100755 sz-poc-offsite-2025/blockscout/bin/deployment/health_check create mode 100755 sz-poc-offsite-2025/blockscout/bin/deployment/migrate create mode 100755 sz-poc-offsite-2025/blockscout/bin/deployment/start create mode 100755 sz-poc-offsite-2025/blockscout/bin/deployment/stop create mode 100755 sz-poc-offsite-2025/blockscout/bin/install_chrome_headless.sh create mode 100755 sz-poc-offsite-2025/blockscout/bin/test create mode 100755 sz-poc-offsite-2025/blockscout/bin/version_bump.sh create mode 100644 sz-poc-offsite-2025/blockscout/blockscout.png create mode 100644 sz-poc-offsite-2025/blockscout/cliff.toml create mode 100644 sz-poc-offsite-2025/blockscout/config/assets/precompiles-arbitrum.json create mode 100644 sz-poc-offsite-2025/blockscout/config/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/config_helper.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/runtime.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/runtime/dev.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/runtime/prod.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/runtime/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/config/test.exs create mode 100644 sz-poc-offsite-2025/blockscout/coveralls.json create mode 100644 sz-poc-offsite-2025/blockscout/cspell.json create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/README.md create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/anvil.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/docker-compose.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-blockscout.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-frontend.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-nft-media-handler.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-smart-contract-verifier.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-stats.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-user-ops-indexer.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/envs/common-visualizer.env create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/erigon.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/external-backend.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/external-db.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/external-frontend.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/geth-clique-consensus.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/geth.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/hardhat-network.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/microservices.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/no-services.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/proxy/default.conf.template create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/proxy/explorer.conf.template create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/proxy/microservices.conf.template create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/backend.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/db.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/frontend.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/nft_media_handler.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/nginx-explorer.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/nginx.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/redis.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/sig-provider.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/smart-contract-verifier.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/stats.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/user-ops-indexer.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker-compose/services/visualizer.yml create mode 100644 sz-poc-offsite-2025/blockscout/docker/Dockerfile create mode 100644 sz-poc-offsite-2025/blockscout/docker/Makefile create mode 100644 sz-poc-offsite-2025/blockscout/docker/README.md create mode 100644 sz-poc-offsite-2025/blockscout/docker/oldUI.Dockerfile create mode 100644 sz-poc-offsite-2025/blockscout/funding.json create mode 100644 sz-poc-offsite-2025/blockscout/mix.exs create mode 100644 sz-poc-offsite-2025/blockscout/mix.lock create mode 100644 sz-poc-offsite-2025/blockscout/prometheus.yml create mode 100644 sz-poc-offsite-2025/blockscout/rel/commands/migrate.sh create mode 100644 sz-poc-offsite-2025/blockscout/rel/commands/seed.sh create mode 100644 sz-poc-offsite-2025/blockscout/rel/config.exs create mode 100644 sz-poc-offsite-2025/blockscout/rel/plugins/.gitignore create mode 100644 sz-poc-offsite-2025/blockscout/rel/vm.args diff --git a/sz-poc-offsite-2025/blockscout/.circleci/config.yml b/sz-poc-offsite-2025/blockscout/.circleci/config.yml new file mode 100644 index 0000000..03275c1 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.circleci/config.yml @@ -0,0 +1,626 @@ +version: 2 +jobs: + build: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3-node-browsers + environment: + MIX_ENV: test + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + + working_directory: ~/app + + steps: + - run: sudo apt-get update; sudo apt-get -y install autoconf build-essential libgmp3-dev libtool + + - checkout + - run: + command: ./bin/install_chrome_headless.sh + no_output_timeout: 2400 + + - run: mix local.hex --force + - run: mix local.rebar --force + + - run: + name: "ELIXIR_VERSION.lock" + command: echo "${ELIXIR_VERSION}" > ELIXIR_VERSION.lock + - run: + name: "OTP_VERSION.lock" + command: echo "${OTP_VERSION}" > OTP_VERSION.lock + + - restore_cache: + keys: + - v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.lock" }} + - v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.exs" }} + - v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }} + + - run: mix deps.get + + - restore_cache: + keys: + - v8-npm-install-{{ .Branch }}-{{ checksum "apps/block_scout_web/assets/package-lock.json" }} + - v8-npm-install-{{ .Branch }} + - v8-npm-install + + - run: + command: npm install + working_directory: "apps/explorer" + + - save_cache: + key: v3-npm-install-{{ .Branch }}-{{ checksum "apps/explorer/package-lock.json" }} + paths: "apps/explorer/node_modules" + - save_cache: + key: v3-npm-install-{{ .Branch }} + paths: "apps/explorer/node_modules" + - save_cache: + key: v3-npm-install + paths: "apps/explorer/node_modules" + + - run: + command: npm install + working_directory: "apps/block_scout_web/assets" + + - save_cache: + key: v8-npm-install-{{ .Branch }}-{{ checksum "apps/block_scout_web/assets/package-lock.json" }} + paths: "apps/block_scout_web/assets/node_modules" + - save_cache: + key: v8-npm-install-{{ .Branch }} + paths: "apps/block_scout_web/assets/node_modules" + - save_cache: + key: v8-npm-install + paths: "apps/block_scout_web/assets/node_modules" + + - run: mix compile + + - run: + command: make + working_directory: "deps/ex_secp256k1" + + # `deps` needs to be cached with `_build` because `_build` will symlink into `deps` + + - save_cache: + key: v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.lock" }} + paths: + - deps + - _build + - save_cache: + key: v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.exs" }} + paths: + - deps + - _build + - save_cache: + key: v8-mix-compile-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }} + paths: + - deps + - _build + + - run: + name: Build assets + command: node node_modules/webpack/bin/webpack.js --mode development + working_directory: "apps/block_scout_web/assets" + + - persist_to_workspace: + root: . + paths: + - .circleci + - .credo.exs + - .dialyzer_ignore.exs + - .formatter.exs + - .git + - .gitignore + - ELIXIR_VERSION.lock + - Gemfile + - Gemfile.lock + - OTP_VERSION.lock + - _build + - apps + - bin + - config + - deps + - doc + - mix.exs + - mix.lock + - appspec.yml + - rel + check_formatted: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix format --check-formatted + credo: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix local.hex --force + + - run: mix credo + deploy_aws: + docker: + # Ensure .tool-versions matches + - image: circleci/python:2.7-stretch + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - add_ssh_keys: + fingerprints: + - "c4:fd:a8:f8:48:a8:09:e5:3e:be:30:62:4d:6f:6f:36" + + - run: + name: Deploy to AWS + command: bin/deploy + dialyzer: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix local.hex --force + + - restore_cache: + keys: + - v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.lock" }} + - v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.exs" }} + - v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }} + + - run: + name: Unpack PLT cache + command: | + mkdir -p _build/test + cp plts/dialyxir*.plt _build/test/ || true + mkdir -p ~/.mix + cp plts/dialyxir*.plt ~/.mix/ || true + + - run: mix dialyzer --plt + + - run: + name: Pack PLT cache + command: | + mkdir -p plts + cp _build/test/dialyxir*.plt plts/ + cp ~/.mix/dialyxir*.plt plts/ + + - save_cache: + key: v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.lock" }} + paths: + - plts + - save_cache: + key: v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }}-{{ checksum "mix.exs" }} + paths: + - plts + - save_cache: + key: v8-mix-dialyzer-{{ checksum "OTP_VERSION.lock" }}-{{ checksum "ELIXIR_VERSION.lock" }} + paths: + - plts + + - run: mix dialyzer --halt-exit-status + eslint: + docker: + # Ensure .tool-versions matches + - image: circleci/node:12.18.2-browsers-legacy + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: + name: ESLint + command: ./node_modules/.bin/eslint --format=junit --output-file="test/eslint/junit.xml" js/** + working_directory: apps/block_scout_web/assets + + - store_test_results: + path: apps/block_scout_web/assets/test + gettext: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix local.hex --force + + - run: + name: Check for missed translations + command: | + mix gettext.extract --merge | tee stdout.txt + ! grep "Wrote " stdout.txt + working_directory: "apps/block_scout_web" + + - store_artifacts: + path: apps/block_scout_web/priv/gettext + jest: + docker: + # Ensure .tool-versions matches + - image: circleci/node:12.18.2-browsers-legacy + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: + name: Jest + command: ./node_modules/.bin/jest + working_directory: apps/block_scout_web/assets + release: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: prod + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix local.hex --force + - run: mix local.rebar --force + - run: MIX_ENV=prod mix release + - run: + name: Collecting artifacts + command: | + find -name 'blockscout.tar.gz' -exec sh -c 'mkdir -p ci_artifact && cp "$@" ci_artifact/ci_artifact_blockscout.tar.gz' _ {} + + when: always + + - store_artifacts: + name: Uploading CI artifacts + path: ci_artifact/ci_artifact_blockscout.tar.gz + destination: ci_artifact_blockscout.tar.gz + sobelow: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: mix local.hex --force + + - run: + name: Scan explorer for vulnerabilities + command: mix sobelow --config + working_directory: "apps/explorer" + + - run: + name: Scan block_scout_web for vulnerabilities + command: mix sobelow --config + working_directory: "apps/block_scout_web" + # test_geth_http_websocket: + # docker: + # # Ensure .tool-versions matches + # - image: circleci/elixir:1.10.3-node-browsers + # environment: + # MIX_ENV: test + # # match POSTGRES_PASSWORD for postgres image below + # PGPASSWORD: postgres + # # match POSTGRES_USER for postgres image below + # PGUSER: postgres + # ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Geth.HTTPWebSocket" + # ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Geth" + # - image: circleci/postgres:10.10-alpine + # environment: + # # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + # POSTGRES_DB: explorer_test + # # match PGPASSWORD for elixir image above + # POSTGRES_PASSWORD: postgres + # # match PGUSER for elixir image above + # POSTGRES_USER: postgres + + # working_directory: ~/app + + # steps: + # - attach_workspace: + # at: . + + # - run: + # command: ./bin/install_chrome_headless.sh + # no_output_timeout: 2400 + + # - run: mix local.hex --force + # - run: mix local.rebar --force + + # - run: + # name: Wait for DB + # command: dockerize -wait tcp://localhost:5432 -timeout 1m + + # - run: + # name: mix test --exclude no_geth + # command: | + # # Don't submit coverage report for forks, but let the build succeed + # if [[ -z "$COVERALLS_REPO_TOKEN" ]]; then + # mix coveralls.html --exclude no_geth --parallel --umbrella + # else + # mix coveralls.circle --exclude no_geth --parallel --umbrella || + # # if mix failed, then coveralls_merge won't run, so signal done here and return original exit status + # (retval=$? && curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" && return $retval) + # fi + + # - store_artifacts: + # path: cover/excoveralls.html + # - store_test_results: + # path: _build/test/junit + # test_geth_mox: + # docker: + # # Ensure .tool-versions matches + # - image: circleci/elixir:1.10.3-node-browsers + # environment: + # MIX_ENV: test + # # match POSTGRES_PASSWORD for postgres image below + # PGPASSWORD: postgres + # # match POSTGRES_USER for postgres image below + # PGUSER: postgres + # ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Geth.Mox" + # ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + # - image: circleci/postgres:10.10-alpine + # environment: + # # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + # POSTGRES_DB: explorer_test + # # match PGPASSWORD for elixir image above + # POSTGRES_PASSWORD: postgres + # # match PGUSER for elixir image above + # POSTGRES_USER: postgres + + # working_directory: ~/app + + # steps: + # - attach_workspace: + # at: . + + # - run: + # command: ./bin/install_chrome_headless.sh + # no_output_timeout: 2400 + + # - run: mix local.hex --force + # - run: mix local.rebar --force + + # - run: + # name: Wait for DB + # command: dockerize -wait tcp://localhost:5432 -timeout 1m + + # - run: + # name: mix test --exclude no_geth + # command: | + # # Don't submit coverage report for forks, but let the build succeed + # if [[ -z "$COVERALLS_REPO_TOKEN" ]]; then + # mix coveralls.html --exclude no_geth --parallel --umbrella + # else + # mix coveralls.circle --exclude no_geth --parallel --umbrella || + # # if mix failed, then coveralls_merge won't run, so signal done here and return original exit status + # (retval=$? && curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" && return $retval) + # fi + + # - store_artifacts: + # path: cover/excoveralls.html + # - store_test_results: + # path: _build/test/junit + # test_nethermind_http_websocket: + # docker: + # # Ensure .tool-versions matches + # - image: circleci/elixir:1.10.3-node-browsers + # environment: + # MIX_ENV: test + # # match POSTGRES_PASSWORD for postgres image below + # PGPASSWORD: postgres + # # match POSTGRES_USER for postgres image below + # PGUSER: postgres + # ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.HTTPWebSocket" + # ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Nethermind" + # - image: circleci/postgres:10.10-alpine + # environment: + # # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + # POSTGRES_DB: explorer_test + # # match PGPASSWORD for elixir image above + # POSTGRES_PASSWORD: postgres + # # match PGUSER for elixir image above + # POSTGRES_USER: postgres + + # working_directory: ~/app + + # steps: + # - attach_workspace: + # at: . + + # - run: + # command: ./bin/install_chrome_headless.sh + # no_output_timeout: 2400 + + # - run: mix local.hex --force + # - run: mix local.rebar --force + + # - run: + # name: Wait for DB + # command: dockerize -wait tcp://localhost:5432 -timeout 1m + + # - run: + # name: mix test --exclude no_nethermind + # command: | + # # Don't submit coverage report for forks, but let the build succeed + # if [[ -z "$COVERALLS_REPO_TOKEN" ]]; then + # mix coveralls.html --exclude no_nethermind --parallel --umbrella + # else + # mix coveralls.circle --exclude no_nethermind --parallel --umbrella || + # # if mix failed, then coveralls_merge won't run, so signal done here and return original exit status + # (retval=$? && curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" && return $retval) + # fi + + # - store_artifacts: + # path: cover/excoveralls.html + # - store_test_results: + # path: _build/test/junit + test_nethermind_mox: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3-node-browsers + environment: + MIX_ENV: test + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox" + ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + - image: circleci/postgres:10.10-alpine + environment: + # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + POSTGRES_DB: explorer_test + # match PGPASSWORD for elixir image above + POSTGRES_PASSWORD: postgres + # match PGUSER for elixir image above + POSTGRES_USER: postgres + + working_directory: ~/app + + steps: + - attach_workspace: + at: . + + - run: + command: ./bin/install_chrome_headless.sh + no_output_timeout: 2400 + + - run: mix local.hex --force + - run: mix local.rebar --force + + - run: + name: Wait for DB + command: dockerize -wait tcp://localhost:5432 -timeout 1m + + - run: + name: mix test --exclude no_nethermind + command: | + # Don't submit coverage report for forks, but let the build succeed + if [[ -z "$COVERALLS_REPO_TOKEN" ]]; then + mix coveralls.html --exclude no_nethermind --parallel --umbrella + else + mix coveralls.circle --exclude no_nethermind --parallel --umbrella || + # if mix failed, then coveralls_merge won't run, so signal done here and return original exit status + (retval=$? && curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" && return $retval) + fi + + - store_artifacts: + path: cover/excoveralls.html + - store_test_results: + path: _build/test/junit + coveralls_merge: + docker: + # Ensure .tool-versions matches + - image: circleci/elixir:1.10.3 + environment: + MIX_ENV: test + + steps: + - run: + name: Tell coveralls.io build is done + command: curl -k https://coveralls.io/webhook?repo_token=$COVERALLS_REPO_TOKEN -d "payload[build_num]=$CIRCLE_WORKFLOW_WORKSPACE_ID&payload[status]=done" +workflows: + version: 2 + primary: + jobs: + - build + - check_formatted: + requires: + - build + # This unfortunately will only fire if all the tests pass because of how `requires` works + - coveralls_merge: + requires: + # - test_nethermind_http_websocket + - test_nethermind_mox + # - test_geth_http_websocket + # - test_geth_mox + - credo: + requires: + - build + - deploy_aws: + filters: + branches: + only: + - production + - staging + - /deploy-[A-Za-z0-9]+$/ + requires: + - check_formatted + - credo + - eslint + - jest + - sobelow + # - test_nethermind_http_websocket + - test_nethermind_mox + # - test_geth_http_websocket + # - test_geth_mox + - dialyzer: + requires: + - build + - eslint: + requires: + - build + - gettext: + requires: + - build + - jest: + requires: + - build + - release: + requires: + - build + - sobelow: + requires: + - build + # - test_nethermind_http_websocket: + # requires: + # - build + - test_nethermind_mox: + requires: + - build + # - test_geth_http_websocket: + # requires: + # - build + # - test_geth_mox: + # requires: + # - build diff --git a/sz-poc-offsite-2025/blockscout/.credo.exs b/sz-poc-offsite-2025/blockscout/.credo.exs new file mode 100644 index 0000000..444b593 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.credo.exs @@ -0,0 +1,151 @@ +# This file contains the configuration for Credo and you are probably reading +# this after creating it with `mix credo.gen.config`. +# +# If you find anything wrong or unclear in this file, please report an +# issue on GitHub: https://github.com/rrrene/credo/issues +# +%{ + # + # You can have as many configs as you like in the `configs:` field. + configs: [ + %{ + # + # Run any exec using `mix credo -C `. If no exec name is given + # "default" is used. + # + name: "default", + # + # These are the files included in the analysis: + files: %{ + # + # You can give explicit globs or simply directories. + # In the latter case `**/*.{ex,exs}` will be used. + # + included: ["lib/", "src/", "web/", "apps/*/lib/**/*.{ex,exs}"], + excluded: [ + ~r"/_build/", + ~r"/deps/", + ~r"/node_modules/", + ~r"/apps/block_scout_web/lib/block_scout_web.ex" + ] + }, + # + # If you create your own checks, you must specify the source files for + # them here, so they can be loaded by Credo before running the analysis. + # + requires: ["apps/utils/lib/credo/**/*.ex"], + # + # If you want to enforce a style guide and need a more traditional linting + # experience, you can change `strict` to `true` below: + # + strict: true, + # + # If you want to use uncolored output by default, you can change `color` + # to `false` below: + # + color: true, + # + # You can customize the parameters of any check by adding a second element + # to the tuple. + # + # To disable a check put `false` as second element: + # + # {Credo.Check.Design.DuplicatedCode, false} + # + checks: [ + # outdated by formatter in Elixir 1.6. See https://github.com/rrrene/credo/issues/505 + {Credo.Check.Consistency.LineEndings, false}, + {Credo.Check.Consistency.SpaceAroundOperators, false}, + {Credo.Check.Consistency.SpaceInParentheses, false}, + {Credo.Check.Consistency.TabsOrSpaces, false}, + {Credo.Check.Readability.LargeNumbers, false}, + {Credo.Check.Readability.MaxLineLength, false}, + {Credo.Check.Readability.ParenthesesInCondition, false}, + {Credo.Check.Readability.RedundantBlankLines, false}, + {Credo.Check.Readability.Semicolons, false}, + {Credo.Check.Readability.SpaceAfterCommas, false}, + {Credo.Check.Readability.TrailingBlankLine, false}, + {Credo.Check.Readability.TrailingWhiteSpace, false}, + + # outdated by lazy Logger in Elixir 1.7. See https://elixir-lang.org/blog/2018/07/25/elixir-v1-7-0-released/ + {Credo.Check.Warning.LazyLogging, false}, + + # not handled by formatter + {Credo.Check.Consistency.ExceptionNames}, + {Credo.Check.Consistency.ParameterPatternMatching}, + + # You can customize the priority of any check + # Priority values are: `low, normal, high, higher` + # + {Credo.Check.Design.AliasUsage, + excluded_namespaces: ~w(Block Blocks Import Runner Socket SpandexDatadog Task), + excluded_lastnames: + ~w(Address DateTime Exporter Fetcher Full Instrumenter Logger Monitor Name Number Repo Spec Time Unit), + priority: :low}, + + # For some checks, you can also set other parameters + # + # If you don't want the `setup` and `test` macro calls in ExUnit tests + # or the `schema` macro in Ecto schemas to trigger DuplicatedCode, just + # set the `excluded_macros` parameter to `[:schema, :setup, :test]`. + # + {Credo.Check.Design.DuplicatedCode, excluded_macros: [], mass_threshold: 80}, + + # You can also customize the exit_status of each check. + # If you don't want TODO comments to cause `mix credo` to fail, just + # set this value to 0 (zero). + # + {Credo.Check.Design.TagTODO, exit_status: 0}, + {Credo.Check.Design.TagFIXME}, + {Credo.Check.Readability.FunctionNames}, + {Credo.Check.Readability.ModuleAttributeNames}, + {Credo.Check.Readability.ModuleDoc}, + {Credo.Check.Readability.ModuleNames}, + {Credo.Check.Readability.ParenthesesOnZeroArityDefs}, + {Credo.Check.Readability.PredicateFunctionNames}, + {Credo.Check.Readability.PreferImplicitTry}, + {Credo.Check.Readability.StringSigils}, + {Credo.Check.Readability.VariableNames}, + {Credo.Check.Refactor.DoubleBooleanNegation}, + {Credo.Check.Refactor.CondStatements}, + {Credo.Check.Refactor.CyclomaticComplexity}, + {Credo.Check.Refactor.FunctionArity}, + {Credo.Check.Refactor.LongQuoteBlocks}, + {Credo.Check.Refactor.MatchInCondition}, + {Credo.Check.Refactor.NegatedConditionsInUnless}, + {Credo.Check.Refactor.NegatedConditionsWithElse}, + {Credo.Check.Refactor.Nesting}, + {Credo.Check.Refactor.PipeChainStart}, + {Credo.Check.Refactor.UnlessWithElse}, + {Credo.Check.Warning.BoolOperationOnSameValues}, + {Credo.Check.Warning.ExpensiveEmptyEnumCheck}, + {Credo.Check.Warning.IExPry}, + {Credo.Check.Warning.IoInspect}, + {Credo.Check.Warning.OperationOnSameValues}, + {Credo.Check.Warning.OperationWithConstantResult}, + {Credo.Check.Warning.UnusedEnumOperation}, + {Credo.Check.Warning.UnusedFileOperation}, + {Credo.Check.Warning.UnusedKeywordOperation}, + {Credo.Check.Warning.UnusedListOperation}, + {Credo.Check.Warning.UnusedPathOperation}, + {Credo.Check.Warning.UnusedRegexOperation}, + {Credo.Check.Warning.UnusedStringOperation}, + {Credo.Check.Warning.UnusedTupleOperation}, + {Credo.Check.Warning.RaiseInsideRescue}, + + # Controversial and experimental checks (opt-in, just remove `, false`) + # + # TODO reenable before merging optimized-indexer branch + {Credo.Check.Refactor.ABCSize, false}, + {Credo.Check.Refactor.AppendSingleItem}, + {Credo.Check.Refactor.VariableRebinding}, + {Credo.Check.Warning.MapGetUnsafePass}, + {Credo.Check.Consistency.MultiAliasImportRequireUse}, + + # Custom checks can be created using `mix credo.gen.check`. + {Utils.Credo.Checks.CompileEnvUsage} + # + ] + } + ] +} diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/Dockerfile b/sz-poc-offsite-2025/blockscout/.devcontainer/Dockerfile new file mode 100644 index 0000000..98f0627 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/Dockerfile @@ -0,0 +1,50 @@ +# Since this is a copy of https://github.com/blockscout/devcontainer-elixir/blob/main/Dockerfile +# So after successful testing this file, the original one must be updated as well. +ARG VARIANT="1.17.3-erlang-27.1-debian-bullseye-20240926" +FROM hexpm/elixir:${VARIANT} + +# ARGs declared before FROM are not persisted beyond the FROM instruction. +# They must be redeclared here to be available in the rest of the Dockerfile. +ARG PHOENIX_VERSION="1.7.10" +ARG NODE_VERSION="20" + +# This Dockerfile adds a non-root user with sudo access. Update the “remoteUser” property in +# devcontainer.json to use it. More info: https://aka.ms/vscode-remote/containers/non-root-user. +ARG USERNAME=vscode +ARG USER_UID=1000 +ARG USER_GID=$USER_UID + +# Options for common package install script +ARG INSTALL_ZSH="true" +ARG UPGRADE_PACKAGES="true" +ARG COMMON_SCRIPT_SOURCE="https://raw.githubusercontent.com/microsoft/vscode-dev-containers/main/script-library/common-debian.sh" + +# Options for setup nodejs +ARG NODE_SCRIPT_SOURCE="https://raw.githubusercontent.com/microsoft/vscode-dev-containers/main/script-library/node-debian.sh" +ENV NVM_DIR=/usr/local/share/nvm +ENV NVM_SYMLINK_CURRENT=true +ENV PATH=${NVM_DIR}/current/bin:${PATH} + +# Install needed packages and setup non-root user. Use a separate RUN statement to add your own dependencies. +RUN apt-get update \ + && export DEBIAN_FRONTEND=noninteractive \ + && apt-get -y install --no-install-recommends curl ca-certificates 2>&1 \ + && curl -sSL ${COMMON_SCRIPT_SOURCE} -o /tmp/common-setup.sh \ + && /bin/bash /tmp/common-setup.sh "${INSTALL_ZSH}" "${USERNAME}" "${USER_UID}" "${USER_GID}" "${UPGRADE_PACKAGES}" \ + # + # Install Node.js for use with web applications + && curl -sSL ${NODE_SCRIPT_SOURCE} -o /tmp/node-setup.sh \ + && /bin/bash /tmp/node-setup.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}" \ + && npm install -g cspell@latest \ + # + # Install dependencies + && apt-get install -y build-essential inotify-tools \ + # + # Clean up + && apt-get autoremove -y \ + && apt-get clean -y \ + && rm -rf /var/lib/apt/lists/* /tmp/common-setup.sh /tmp/node-setup.sh + +RUN su ${USERNAME} -c "mix local.hex --force \ + && mix local.rebar --force \ + && mix archive.install --force hex phx_new ${PHOENIX_VERSION}" diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/README.md b/sz-poc-offsite-2025/blockscout/.devcontainer/README.md new file mode 100644 index 0000000..a589b1d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/README.md @@ -0,0 +1,200 @@ +# Blockscout Backend Development with VSCode Devcontainers and GitHub Codespaces + +## Table of Contents +1. [Motivation](#motivation) +2. [Setting Up VSCode Devcontainer Locally](#setting-up-vscode-devcontainer-locally) +3. [Using GitHub Codespaces in the Browser](#using-github-codespaces-in-the-browser) +4. [Configuring Postgres DB Access](#configuring-postgres-db-access) +5. [Developing Blockscout Backend](#developing-blockscout-backend) +6. [Upgrading Elixir Version](#upgrading-elixir-version) +7. [Contributing](#contributing) + +## Motivation + +Setting up a local development environment for Blockscout can be time-consuming and error-prone. This devcontainer setup streamlines the process by providing a pre-configured environment with all necessary dependencies. It ensures consistency across development environments, reduces setup time, and allows developers to focus on coding rather than configuration. + +Key benefits include: +- Pre-configured environment with Elixir, Phoenix, and Node.js +- Integrated PostgreSQL database +- Essential VS Code extensions pre-installed +- Simplified database management +- Consistent development environment across team members + +## Setting Up VSCode Devcontainer Locally + +1. Clone the Blockscout repository: + ``` + git clone https://github.com/blockscout/blockscout.git + cd blockscout + ``` + +2. Open the project in VS Code: + ``` + code . + ``` + +3. Before re-opening in the container, you may find it useful to configure SSH authorization. To do this: + + a. Ensure you have SSH access to GitHub configured on your local machine. + + b. Open `.devcontainer/devcontainer.json`. + + c. Uncomment the `mounts` section: + ```json + "mounts": [ + "source=${localEnv:HOME}/.ssh/config,target=/home/vscode/.ssh/config,type=bind,consistency=cached", + "source=${localEnv:HOME}/.ssh/id_rsa,target=/home/vscode/.ssh/id_rsa,type=bind,consistency=cached" + ], + ``` + + d. Adjust the paths if your SSH keys are stored in a different location. + + e. Use `git update-index --assume-unchanged .devcontainer/devcontainer.json` to prevent the changes to `devcontainer.json` from appearing in `git status` and VS Code's Source Control. To undo the changes, use `git update-index --no-assume-unchanged .devcontainer/devcontainer.json`. + +4. When prompted, click "Reopen in Container". If not prompted, press `F1`, type "Remote-Containers: Reopen in Container", and press Enter. + +5. VS Code will build the devcontainer. This process includes: + - Pulling the base Docker image + - Installing specified VS Code extensions + - Setting up the PostgreSQL database + - Installing project dependencies + + This may take several minutes the first time. + +6. Once the devcontainer is built, you'll be working inside the containerized environment. + +7. If you modified the `devcontainer.json` file in step 3, you may want to execute `git update-index --assume-unchanged .devcontainer/devcontainer.json` in a terminal within your devcontainer to prevent the changes to `devcontainer.json` from appearing in `git status` and VS Code's Source Control. + +### Additional Setup for Cursor.ai Users + +If you're using Cursor.ai instead of VSCode, you may need to perform some additional setup steps. Please note that these changes will not persist after reloading the devcontainer, so you may need to repeat these steps each time you start a new session. + +1. **Git Configuration**: You may encounter issues when trying to perform Git operations from the terminal or the "Source Control" tab. To resolve this, set up your Git configuration inside the devcontainer: + + a. Open a terminal in your devcontainer. + b. Set your Git username: + ``` + git config --global user.name "Your Name" + ``` + c. Set your Git email: + ``` + git config --global user.email "your.email@example.com" + ``` + + Replace "Your Name" and "your.email@example.com" with your actual name and email associated with your GitHub account. + +2. **ElixirLS: Elixir support and debugger** (JakeBecker.elixir-ls): This extension may not be automatically installed in Cursor.ai, even though it's specified in the devcontainer configuration. To install it manually: + + a. Open the Extensions tab. + b. Search for "JakeBecker.elixir-ls". + c. Look for the extension "ElixirLS: Elixir support and debugger" by JakeBecker and click "Install". + +Remember, you may need to repeat these steps each time you start a new Cursor.ai session with the devcontainer. + +### Signing in to GitHub for Pull Request Extension + +1. In the devcontainer, click on the GitHub icon in the Primary sidebar. +2. Click on "Sign in to GitHub" and follow the prompts to authenticate. + +## Using GitHub Codespaces in the Browser + +To open the project in GitHub Codespaces: + +1. Navigate to the Blockscout repository on GitHub. +2. Switch to the branch you want to work on. +3. Click the "Code" button. +4. Instead of clicking "Create codespace on [branch]" (which would use the default machine type that may not be sufficient for this Elixir-based project), click on the three dots (...) next to it. +5. Select "New with options". +6. Choose the "4-core/16GB RAM" machine type for optimal performance. +7. Click "Create codespace". + +This will create a new Codespace with the specified resources, ensuring adequate performance for the Elixir-based project. + +Note: After the container opens, you may see an error about the inability to use "GitHub Copilot Chat". This Copilot functionality will not be accessible in the Codespace environment. + +## Configuring Postgres DB Access + +To configure access to the PostgreSQL database using the VS Code extension: + +1. Click on the PostgreSQL icon in the Primary sidebar. +2. Click "+" (Add Connection) in the PostgreSQL explorer. +3. Use the following details: + - Host: `db` + - User: `postgres` + - Password: `postgres` + - Port: `5432` + - Use an ssl connection: "Standard connection" + - Database: `app` + - The display name: "" + +These credentials are derived from the `DATABASE_URL` in the `bs` script. + +## Developing Blockscout Backend + +### Configuration + +Before running the Blockscout server, you need to set up the configuration: + +1. Copy the `.devcontainer/.blockscout_config.example` file to `.devcontainer/.blockscout_config`. +2. Adjust the settings in `.devcontainer/.blockscout_config` as needed for your development environment. + +For a comprehensive list of environment variables that can be set in this configuration file, refer to the [Blockscout documentation](https://docs.blockscout.com/setup/env-variables). + +### Using the `bs` Script + +The `bs` script in `.devcontainer/bin/` helps orchestrate common development tasks. Here are some key commands: + +- Initialize the project: `bs --init` +- Initialize or re-initialize the database: `bs --db-init` (This will remove all data and tables from the DB and re-create the tables) +- Run the server: `bs` +- Run the server without syncing: `bs --no-sync` +- Recompile the project: `bs --recompile` (Use this when new dependencies arrive after a merge or when switching to another `CHAIN_TYPE`) +- Run various checks: `bs --spellcheck`, `bs --dialyzer`, `bs --credo`, `bs --format` + +For a full list of options, run `bs --help`. + +### Interacting with the Blockscout API + +For local devcontainer setups (not applicable to GitHub Codespaces), you can use API testing tools like Postman or Insomnia on your host machine to interact with the Blockscout API running in the container: + +1. Ensure the Blockscout server is running in the devcontainer. +2. In the API testing tool on your host machine, use `http://127.0.0.1:4000` as the base URL. +3. Example endpoint: `GET http://127.0.0.1:4000/api/v2/blocks` + +This allows testing API endpoints directly from your host machine while the server runs in the container. + +### Troubleshooting + +If you face issues with dependency compilation or dialyzer after container creation: + +1. Check for untracked files: `git ls-files --others` +2. Remove compilation artifacts or generated files if present. +3. For persistent issues, consider cleaning all untracked files (use with caution): + ``` + git clean -fdX + bs --recompile + ``` + +This ensures a clean compilation environment within the container. + +## Upgrading Elixir Version + +To upgrade the Elixir version: + +1. Open `.devcontainer/Dockerfile`. +2. Update the `VARIANT` argument with the desired Elixir version. +3. Rebuild the devcontainer. + +Note: Ensure that the version you choose is compatible with the project dependencies. + +After testing the new Elixir version, propagate the corresponding changes in the Dockerfile to the repo https://github.com/blockscout/devcontainer-elixir. Once a new release tag is published there and a new docker image `ghcr.io/blockscout/devcontainer-elixir` appears in the GitHub registry, modify the `docker-compose.yml` file in the `.devcontainer` directory to reflect the proper docker image tag. + +## Contributing + +When contributing changes that require additional checks for specific blockchain types: + +1. Open `.devcontainer/bin/chain-specific-checks`. +2. Add your checks under the appropriate `CHAIN_TYPE` case. +3. Ensure your checks exit with a non-zero code if unsuccessful. + +Remember to document any new checks or configuration options in this README. \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/bin/bs b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/bs new file mode 100755 index 0000000..145c152 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/bs @@ -0,0 +1,320 @@ +#!/bin/bash + +# Blockscout Development Helper Script +# +# This script provides a unified interface for common development tasks when working +# with the Blockscout backend server. It handles environment configuration, project +# initialization, and various development workflows. +# +# Main usage scenarios: +# 1. Project Setup +# - Initialize project directory: bs --init +# - Setup/reset database: bs --db-init +# +# 2. Development Tasks +# - Run backend server: bs +# - Run server (API only): bs --no-sync +# - Compile/recompile changes: bs --compile +# - Recompile dependencies: bs --recompile +# +# 3. Code Quality +# - Run formatter: bs --format +# - Run static analysis: bs --dialyzer +# - Run code style checks: bs --credo +# - Run spell checker: bs --spellcheck +# +# 4. Documentation +# - Generate project docs: bs --docs +# - Show usage help: bs --help +# +# Environment: +# - Loads configuration from .devcontainer/.blockscout_config if present +# - Uses default DATABASE_URL if not specified +# - Supports chain-specific configurations via CHAIN_TYPE + +source $(dirname $0)/utils + +# Source and export environment variables related to the backend configuration +BLOCKSCOUT_CONFIG_FILE=".devcontainer/.blockscout_config" +if [ -f "./${BLOCKSCOUT_CONFIG_FILE}" ]; then + set -a # Automatically export all variables + source ./${BLOCKSCOUT_CONFIG_FILE} + set +a # Disable automatic export +else + echo "Warning: ${BLOCKSCOUT_CONFIG_FILE} file not found. Skipping configuration loading." +fi + +if [ "${DATABASE_URL}" == "" ]; then + export DATABASE_URL="postgresql://postgres:postgres@db:5432/app" +fi + +# Initialize variables +INIT=false +NO_SYNC=false +DB_INIT=false +COMPILE=false +RECOMPILE=false +SPELLCHECK=false +DIALYZER=false +CREDO=false +FORMAT=false +DOCS=false +HELP=false + +# Define the help function +show_help() { + echo "Usage: bs [OPTION]" + echo "Orchestrate typical tasks when developing Blockscout backend server" + echo + echo "Options:" + echo " --help Show this help message and exit" + echo " --init Initialize the project directory" + echo " --format Run code formatter" + echo " --spellcheck Run spellcheck" + echo " --dialyzer Run dialyzer" + echo " --credo Run credo" + echo " --docs Generate documentation" + echo " --compile Compile/recompile changes" + echo " --recompile Re-fetch dependencies and recompile" + echo " --db-init (Re)initialize the database" + echo " --no-sync Run the server with disabled indexer, so only the API is available" + echo + echo "If no option is provided, the script will run the backend server." +} + +# Define valid arguments +VALID_ARGS=( + "--help" + "--init" + "--no-sync" + "--db-init" + "--compile" + "--recompile" + "--spellcheck" + "--dialyzer" + "--credo" + "--format" + "--docs" +) + +# Validate arguments +for arg in "$@" +do + if [[ ! " ${VALID_ARGS[@]} " =~ " ${arg} " ]]; then + echo "Error: Unknown argument '${arg}'" + echo + show_help + exit 1 + fi +done + +# Parse command line arguments +for arg in "$@" +do + case $arg in + --help) + HELP=true + shift # Remove --help from processing + ;; + --init) + INIT=true + shift # Remove --init from processing + ;; + --no-sync) + NO_SYNC=true + shift # Remove --no-sync from processing + ;; + --db-init) + DB_INIT=true + shift # Remove --db-init from processing + ;; + --compile) + COMPILE=true + shift # Remove --compile from processing + ;; + --recompile) + RECOMPILE=true + shift # Remove --recompile from processing + ;; + --spellcheck) + SPELLCHECK=true + shift # Remove --spellcheck from processing + ;; + --dialyzer) + DIALYZER=true + shift # Remove --dialyzer from processing + ;; + --credo) + CREDO=true + shift # Remove --credo from processing + ;; + --format) + FORMAT=true + shift # Remove --format from processing + ;; + --docs) + DOCS=true + shift # Remove --docs from processing + ;; + esac +done + +# If --help argument is passed, show help and exit +if [ "$HELP" = true ]; then + show_help + exit 0 +fi + +# Define the project directory initialization subroutine +initialize_project() { + if [ ! -d "apps/block_scout_web/priv/cert" ]; then + mix local.rebar --force + mix deps.compile + mix compile + + # cd apps/block_scout_web/assets + # npm install && node_modules/webpack/bin/webpack.js --mode production + # cd - + # cd apps/explorer + # npm install + # cd - + + cd apps/block_scout_web + mix phx.gen.cert blockscout blockscout.local + cd - + else + echo "Looks like the project directory is already initialized" + fi +} + +# Define the initialization subroutine +initialize_db() { + echo "Initializing database. Step 1 of 2: Dropping database" + if OUTPUT=$(mix ecto.drop 2>&1); then + echo "Initializing database. Step 2 of 2: Creating database" + mix do ecto.create, ecto.migrate | grep Runn + else + echo "Failed to drop database. Initialization aborted." + echo "Error output:" + echo "$OUTPUT" + return 1 + fi +} + +# Define the compile subroutine +compile() { + mix compile +} + +# Define the recompile subroutine +recompile() { + FALLBACK_APPS="block_scout_web ethereum_jsonrpc explorer indexer utils nft_media_handler" + APPS=$($(dirname $0)/extract_apps.exs) || APPS="$FALLBACK_APPS" + [ -z "$APPS" ] && APPS="$FALLBACK_APPS" + mix deps.clean $APPS + mix deps.get + mix deps.compile --force +} + +# Define the spellcheck subroutine +spellcheck() { + cspell | less +} + +# Define the dialyzer subroutine +dialyzer() { + if ! mix dialyzer; then + echo -e "\nDepending on the error you see, try either:" + echo " rm -rf 'priv/plts'" + echo " MIX_ENV=test bs --recompile" + return 1 + fi +} + +# Define the credo subroutine +credo() { + mix credo +} + +# Define the format subroutine +format() { + mix format +} + +# Define the generate_docs subroutine +generate_docs() { + mix docs +} + +# If --init argument is passed, run the project dir initialization subroutine and exit +if [ "$INIT" = true ]; then + initialize_project + exit 0 +fi + +# If --db-init argument is passed, run the database initialization subroutine and exit +if [ "$DB_INIT" = true ]; then + initialize_db + exit 0 +fi + +# If --compile argument is passed, run the compile subroutine and exit +if [ "$COMPILE" = true ]; then + compile + exit 0 +fi + +# If --recompile argument is passed, run the recompile subroutine and exit +if [ "$RECOMPILE" = true ]; then + recompile + exit 0 +fi + +# If --spellcheck argument is passed, run the spellcheck subroutine and exit +if [ "$SPELLCHECK" = true ]; then + spellcheck + exit 0 +fi + +# If --dialyzer argument is passed, run the dialyzer subroutine and exit +if [ "$DIALYZER" = true ]; then + dialyzer + exit 0 +fi + +# If --credo argument is passed, run the credo subroutine and exit +if [ "$CREDO" = true ]; then + credo + exit 0 +fi + +# If --format argument is passed, run the format subroutine and exit +if [ "$FORMAT" = true ]; then + format + exit 0 +fi + +# If --doc argument is passed, run the format subroutine and exit +if [ "$DOCS" = true ]; then + generate_docs + exit 0 +fi + +if [ "${ETHEREUM_JSONRPC_HTTP_URL}" != "" ]; then + check_server_availability ${ETHEREUM_JSONRPC_HTTP_URL} + check_server_accessibility ${ETHEREUM_JSONRPC_HTTP_URL} +fi + +if [ "${CHAIN_TYPE}" != "" -o "${CHAIN_TYPE}" != "ethereum" -o "${CHAIN_TYPE}" != "default" ]; then + source $(dirname $0)/chain-specific-checks +fi + +if [ ! -d "apps/block_scout_web/priv/cert" ]; then + echo "Project directory is not initialized" + echo "Run 'bs --init' to initialize the project directory" + exit 1 +fi + +export DISABLE_INDEXER=${NO_SYNC} + +mix phx.server diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/bin/chain-specific-checks b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/chain-specific-checks new file mode 100644 index 0000000..c6129f2 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/chain-specific-checks @@ -0,0 +1,17 @@ +# The script is sourced from the main script, so the unsuccessful check must exit +# with non-zero code to terminate the main script. + +source $(dirname $0)/utils + +# Run the appropriate checks based on CHAIN_TYPE +case "${CHAIN_TYPE}" in + "arbitrum") + echo "Arbitrum sepcific checks" + # if the check is not successful, exit with code 1 + check_server_availability ${INDEXER_ARBITRUM_L1_RPC} + check_server_accessibility ${INDEXER_ARBITRUM_L1_RPC} + ;; + *) + echo "No special checks for CHAIN_TYPE: $CHAIN_TYPE" + ;; +esac diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/bin/extract_apps.exs b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/extract_apps.exs new file mode 100755 index 0000000..a82f87c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/extract_apps.exs @@ -0,0 +1,45 @@ +#!/usr/bin/env elixir + +defmodule LocalHelper do + # Helper function to safely get configuration values + def get_config_value(config, key, name) do + case Keyword.get(config, key) do + nil -> {:error, name} + value -> {:ok, value} + end + end +end + +# Start Mix application +Mix.start() + +# Set the Mix environment to dev (or whatever environment you need) +Mix.env(:dev) + +# Read and evaluate the mix.exs file +Code.require_file("mix.exs") + +# Get the applications from the project configuration +apps = + try do + project = BlockScout.Mixfile.project() + + with {:ok, releases} <- LocalHelper.get_config_value(project, :releases, "releases"), + {:ok, blockscout} <- LocalHelper.get_config_value(releases, :blockscout, "blockscout release"), + {:ok, applications} <- LocalHelper.get_config_value(blockscout, :applications, "applications") do + applications + |> Keyword.keys() + |> Enum.join("\n") + else + {:error, message} -> + IO.puts(:stderr, "Error: #{message} not found in mix.exs configuration") + System.halt(1) + end + rescue + error -> + IO.puts(:stderr, "Error: Failed to read mix.exs configuration - #{Exception.message(error)}") + System.halt(1) + end + +# Print the applications to stdout +IO.puts(apps) diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/bin/utils b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/utils new file mode 100644 index 0000000..bd86034 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/bin/utils @@ -0,0 +1,22 @@ +# Function to check server availability +check_server_availability() { + local url=$1 + + curl --connect-timeout 3 --silent ${url} 1>/dev/null + if [ $? -ne 0 ]; then + echo "VPN must be enabled to connect to ${url}" + exit 1 + fi +} + +# Function to check server accessibility with a POST request +check_server_accessibility() { + local url=$1 + local payload='[{"id":0,"params":["latest",false],"method":"eth_getBlockByNumber","jsonrpc":"2.0"}]' + + http_code=$(curl -s -o /dev/null -w "%{http_code}" -X POST ${url} -H "Content-Type: application/json" -d "${payload}") + if [ "$http_code" -ne 200 ]; then + echo "VPN must be enabled to access ${url} (HTTP status code: ${http_code})" + exit 1 + fi +} diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/devcontainer.json b/sz-poc-offsite-2025/blockscout/.devcontainer/devcontainer.json new file mode 100644 index 0000000..54eed19 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/devcontainer.json @@ -0,0 +1,47 @@ +{ + "name": "Blockscout Elixir", + "dockerComposeFile": "docker-compose.yml", + "service": "elixir", + "workspaceFolder": "/workspace", + "postCreateCommand": { + "safe-directory": "git config --global --add safe.directory ${containerWorkspaceFolder}", + "deps": "mix deps.get", + "known_hosts": "sudo chown vscode:vscode /home/vscode/.ssh && ssh-keyscan github.com > /home/vscode/.ssh/known_hosts" + }, + "remoteEnv": { + "PATH": "${containerEnv:PATH}:${containerWorkspaceFolder}/.devcontainer/bin" + }, + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + // Add the IDs of extensions you want installed when the container is created. + "extensions": [ + "JakeBecker.elixir-ls", + "ckolkman.vscode-postgres", + "GitHub.copilot", + "GitHub.copilot-chat", + "GitHub.vscode-pull-request-github" + ] + } + }, + "features": { + "ghcr.io/stuartleeks/dev-container-features/shell-history:0": {} + }, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // This can be used to network with other containers or with the host. + "forwardPorts": [ + 4000, + 4001, + 5432 + ], + // Uncomment and adjust the private key path to the one you use to authenticate on GitHub + // if you want to have ability to push to GitHub from the container. + // "mounts": [ + // "source=${localEnv:HOME}/.ssh/config,target=/home/vscode/.ssh/config,type=bind,consistency=cached", + // // Make sure that the private key can be used to authenticate on GitHub + // "source=${localEnv:HOME}/.ssh/id_rsa,target=/home/vscode/.ssh/id_rsa,type=bind,consistency=cached" + // ], + // Uncomment to connect as a non-root user. See https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "vscode" +} \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.devcontainer/docker-compose.yml b/sz-poc-offsite-2025/blockscout/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..b02f298 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.devcontainer/docker-compose.yml @@ -0,0 +1,30 @@ +services: + elixir: + image: ghcr.io/blockscout/devcontainer-elixir:1.17.3-erlang-27.1 + + # Uncomment next lines to use test Dockerfile with new Elixir version + # build: + # context: . + # dockerfile: Dockerfile + + volumes: + - ..:/workspace:cached + # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. + network_mode: service:db + + # Overrides default command so things don't shut down after the process ends. + command: sleep infinity + + db: + image: postgres:17 + command: postgres -c 'max_connections=250' + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: app + +volumes: + postgres-data: diff --git a/sz-poc-offsite-2025/blockscout/.dialyzer_ignore.exs b/sz-poc-offsite-2025/blockscout/.dialyzer_ignore.exs new file mode 100644 index 0000000..9fe80cb --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.dialyzer_ignore.exs @@ -0,0 +1,16 @@ +[ + {"lib/ethereum_jsonrpc/rolling_window.ex", :improper_list_constr, 171}, + {"lib/explorer/smart_contract/solidity/publisher_worker.ex", :pattern_match, 1}, + {"lib/explorer/smart_contract/solidity/publisher_worker.ex", :exact_eq, 8}, + {"lib/explorer/smart_contract/solidity/publisher_worker.ex", :pattern_match, 8}, + {"lib/explorer/smart_contract/vyper/publisher_worker.ex", :pattern_match, 1}, + {"lib/explorer/smart_contract/vyper/publisher_worker.ex", :exact_eq, 8}, + {"lib/explorer/smart_contract/vyper/publisher_worker.ex", :pattern_match, 8}, + {"lib/explorer/smart_contract/stylus/publisher_worker.ex", :pattern_match, 1}, + {"lib/explorer/smart_contract/stylus/publisher_worker.ex", :exact_eq, 14}, + {"lib/explorer/smart_contract/stylus/publisher_worker.ex", :pattern_match, 14}, + ~r/lib\/phoenix\/router.ex/, + {"lib/explorer/chain/search.ex", :pattern_match, 80}, + {"lib/explorer/chain/search.ex", :pattern_match, 227}, + {"lib/explorer/chain/search.ex", :pattern_match, 322} +] diff --git a/sz-poc-offsite-2025/blockscout/.dockerignore b/sz-poc-offsite-2025/blockscout/.dockerignore new file mode 100644 index 0000000..86f0f1d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.dockerignore @@ -0,0 +1,13 @@ +_build +deps +apps/block_scout_web/assets/node_modules +apps/explorer/node_modules +test +.git +.circleci +.vscode +.elixir_ls +erl_crash.dump +logs +apps/*/test +.devcontainer \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.formatter.exs b/sz-poc-offsite-2025/blockscout/.formatter.exs new file mode 100644 index 0000000..69ae0d2 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.formatter.exs @@ -0,0 +1,11 @@ +[ + inputs: [ + ".credo.exs", + ".formatter.exs", + "apps/*/mix.exs", + "apps/*/{benchmarks,config,lib,priv,test}/**/*.{ex,exs}", + "mix.exs", + "{config}/**/*.{ex,exs}" + ], + line_length: 120 +] diff --git a/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/bug_report.yml b/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..5fa188d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,100 @@ +name: Bug Report +description: File a bug report +labels: [ "triage" ] +body: + - type: markdown + attributes: + value: | + Thanks for reporting a bug 🐛! + + Please search open/closed issues before submitting. Someone might have had the similar problem before 😉! + + - type: textarea + id: description + attributes: + label: Description + description: A brief description of the issue. + validations: + required: true + + - type: dropdown + id: installation-type + attributes: + label: Type of the installation + description: How the application has been deployed. + options: + - Docker-compose + - Helm charts (k8s) + - Manual from the source code + - Docker + validations: + required: true + + - type: input + id: archive-node-type + attributes: + label: Type of the JSON RPC archive node + description: Which type of archive node is used. + placeholder: "Erigon/Geth/Nethermind/Reth/PolygonEdge/Besu/OpenEthereum/..." + validations: + required: true + + - type: input + id: chain-type + attributes: + label: Type of the chain + description: Type of the chain. + placeholder: L1/L2/... + + - type: input + id: link + attributes: + label: Link to the page + description: The link to the page where the issue occurs. + placeholder: https://eth.blockscout.com + + - type: textarea + id: steps + attributes: + label: Steps to reproduce + description: | + Explain how to reproduce the issue in the development environment. + + - type: input + id: backend-version + attributes: + label: Backend version + description: The release version of the backend or branch/commit. + placeholder: v6.1.0 + validations: + required: true + + - type: input + id: frontend-version + attributes: + label: Frontend version + description: The release version of the frontend or branch/commit. + placeholder: v1.11.1 + + - type: input + id: elixir-version + attributes: + label: Elixir & Erlang/OTP versions + description: Elixir & Erlang/OTP versions. + placeholder: Elixir 1.17.3 (compiled with Erlang/OTP 27) + validations: + required: true + + - type: input + id: os-version + attributes: + label: Operating system + description: The operating system this issue occurred with. + placeholder: Linux/macOS/Windows + + - type: textarea + id: additional-information + attributes: + label: Additional information + description: | + Use this section to provide any additional information you might have (e.g screenshots or screencasts). \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/config.yml b/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..439bca6 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +blank_issues_enabled: false +contact_links: + - name: Feature Request + url: https://blockscout.canny.io/feature-requests + about: Request a feature or enhancement + - name: Ask a question + url: https://github.com/orgs/blockscout/discussions + about: Ask questions and discuss topics with other community members + - name: Join our Discord Server + url: https://discord.gg/blockscout + about: The official Blockscout Discord community \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.github/actions/setup-repo/action.yml b/sz-poc-offsite-2025/blockscout/.github/actions/setup-repo/action.yml new file mode 100644 index 0000000..ac52f13 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/actions/setup-repo/action.yml @@ -0,0 +1,86 @@ +name: 'Setup repo' +description: 'Setup repo: checkout/login/extract metadata, Set up Docker Buildx' +inputs: + github-token: + description: 'GitHub token for ghcr.io authentication' + required: true + docker-remote-multi-platform: + description: 'Docker remote multi-platform builder' + required: true + default: 'false' + docker-arm-host: + description: 'Docker remote arm builder' + required: false + docker-arm-host-key: + description: 'Docker remote arm builder ssh private key' + required: false + docker-image: + description: 'Docker image' + required: true + default: ghcr.io/blockscout/blockscout +outputs: + docker-builder: + description: 'Docker builder' + value: ${{ steps.builder_local.outputs.name || steps.builder_multi.outputs.name }} + docker-tags: + description: 'Docker metadata tags' + value: ${{ steps.meta.outputs.tags }} + docker-labels: + description: 'Docker metadata labels' + value: ${{ steps.meta.outputs.labels }} + docker-platforms: + description: 'Docker build platforms' + value: ${{ steps.builder_local.outputs.platforms || steps.builder_multi.outputs.platforms }} +runs: + using: "composite" + steps: + - name: Set up SSH key + shell: bash + run: | + mkdir -p ~/.ssh + echo "${{ inputs.docker-arm-host-key }}" > ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + - name: Find builder + if: ${{ inputs.docker-remote-multi-platform }} + shell: bash + run: echo "BUILDER_IP=$(./.github/scripts/select-builder.sh ${{ inputs.docker-arm-host }} root ~/.ssh/id_rsa)" >> $GITHUB_ENV + - name: Set up SSH + if: ${{ inputs.docker-remote-multi-platform }} + uses: MrSquaare/ssh-setup-action@523473d91581ccbf89565e12b40faba93f2708bd # v1.1.0 + with: + host: ${{ env.BUILDER_IP }} + private-key: ${{ inputs.docker-arm-host-key }} + + - name: Set up Docker Buildx + if: ${{ !inputs.docker-remote-multi-platform }} + uses: docker/setup-buildx-action@v3 + id: builder_local + with: + platforms: linux/amd64 + + - name: Set up Multi-platform Docker Buildx + if: ${{ inputs.docker-remote-multi-platform }} + uses: docker/setup-buildx-action@v3 + id: builder_multi + with: + platforms: linux/amd64 + append: | + - endpoint: ssh://root@${{ env.BUILDER_IP }} + platforms: linux/arm64/v8 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ inputs.github-token }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ inputs.docker-image }} + + - name: Add SHORT_SHA env property with commit short sha + shell: bash + run: echo "SHORT_SHA=`echo ${GITHUB_SHA} | cut -c1-8`" >> $GITHUB_ENV diff --git a/sz-poc-offsite-2025/blockscout/.github/dependabot.yml b/sz-poc-offsite-2025/blockscout/.github/dependabot.yml new file mode 100644 index 0000000..7ff4b3e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/dependabot.yml @@ -0,0 +1,23 @@ +version: 2 +updates: + - package-ecosystem: "mix" + directory: "/" + open-pull-requests-limit: 20 + schedule: + interval: "weekly" + + - package-ecosystem: "npm" + directory: "/apps/block_scout_web/assets" + open-pull-requests-limit: 10 + schedule: + interval: "monthly" + ignore: + - dependency-name: "bootstrap" + - dependency-name: "web3" + versions: ["4.x"] + + - package-ecosystem: "npm" + directory: "/apps/explorer" + open-pull-requests-limit: 10 + schedule: + interval: "monthly" diff --git a/sz-poc-offsite-2025/blockscout/.github/scripts/select-builder.sh b/sz-poc-offsite-2025/blockscout/.github/scripts/select-builder.sh new file mode 100755 index 0000000..e785109 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/scripts/select-builder.sh @@ -0,0 +1,44 @@ +#!/bin/bash + +# Check if a domain is provided as an argument +if [ -z "$1" ]; then + echo "Usage: $0 " + exit 1 +fi + +DOMAIN=$1 +SSH_USER=$2 +SSH_KEY=$3 + +# Resolve A records +IP_LIST=$(dig +short A $DOMAIN) +if [ -z "$IP_LIST" ]; then + echo "No IPs found for domain $DOMAIN" + exit 1 +fi + +MIN_LA=1000000 +BEST_BUILDER="" + +for IP in $IP_LIST; do + # Check if the host is reachable via SSH + ssh -o StrictHostKeychecking=no -o ConnectTimeout=5 -o BatchMode=yes -i $SSH_KEY $SSH_USER@$IP "exit" 2>/dev/null + if [ $? -eq 0 ]; then + # Get the load average + LA=$(ssh -o StrictHostKeychecking=no -i $SSH_KEY $SSH_USER@$IP "uptime | awk -F'load average:' '{ print \$2 }' | cut -d, -f1" 2>/dev/null) + if [ $? -eq 0 ]; then + # Compare and find the minimum load average + LA=$(echo $LA | xargs) # Trim whitespace + if (( $(echo "$LA < $MIN_LA" | bc -l) )); then + MIN_LA=$LA + BEST_BUILDER=$IP + fi + fi + fi +done + +if [ -n "$BEST_BUILDER" ]; then + echo "$BEST_BUILDER" | tr -d '[:space:]' +else + echo "No reachable hosts found." +fi diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/antiscam.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/antiscam.yml new file mode 100644 index 0000000..2da1a05 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/antiscam.yml @@ -0,0 +1,29 @@ +name: antiscam + +on: + issue_comment: + types: + - created + - edited + + discussion_comment: + types: + - created + - edited + +permissions: + pull-requests: write + issues: write + +jobs: + build: + if: ${{ !github.event.issue.pull_request }} + name: Antiscam + runs-on: ubuntu-latest + + steps: + - uses: vbaranov/antiscam-action@main + with: + token: ${{ github.token }} + env: + SCAM_ACTION_WHITELISTED_LOGINS: ${{ vars.SCAM_ACTION_WHITELISTED_LOGINS }} \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/antispam.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/antispam.yml new file mode 100644 index 0000000..b7c6b02 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/antispam.yml @@ -0,0 +1,24 @@ +name: antispam + +on: + issues: + types: + - opened + - edited + - reopened + +permissions: + pull-requests: write + issues: write + +jobs: + build: + name: Antispam + runs-on: ubuntu-latest + + steps: + - uses: vbaranov/antispam-action@main + with: + token: ${{ github.token }} + env: + SCAM_ACTION_WHITELISTED_LOGINS: ${{ vars.SCAM_ACTION_WHITELISTED_LOGINS }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/codeql-analysis.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..8a4cf36 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/codeql-analysis.yml @@ -0,0 +1,72 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ "master" ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ "master" ] + schedule: + - cron: '45 11 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + + # If the Autobuild fails above, remove it and uncomment the following three lines. + # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. + + # - run: | + # echo "Run, Build Application using script" + # ./location_of_script_within_repo/buildscript.sh + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/config.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/config.yml new file mode 100644 index 0000000..89fb2de --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/config.yml @@ -0,0 +1,797 @@ +name: Blockscout + +on: + push: + branches: + - master + - production-arbitrum + - production-core + - production-eth-sepolia + - production-filecoin + - production-fuse + - production-optimism + - production-immutable + - production-iota + - production-lukso + - production-rsk + - production-sokol + - production-suave + - production-xdai + - production-zkevm + - production-zksync + - staging-l2 + paths-ignore: + - "CHANGELOG.md" + - "**/README.md" + - "docker/*" + - "docker-compose/*" + pull_request: + types: [opened, synchronize, reopened, labeled] + branches: + - master + +env: + MIX_ENV: test + OTP_VERSION: ${{ github.ref_name == '10284/merge' && '27.1' || vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ github.ref_name == '10284/merge' && '1.17.3' || vars.ELIXIR_VERSION }} + ACCOUNT_AUTH0_DOMAIN: "blockscoutcom.us.auth0.com" + +jobs: + matrix-builder: + name: Build matrix + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - id: set-matrix + run: | + echo "matrix=$(node -e ' + + // Add/remove CI matrix chain types here + const defaultChainTypes = ["default"]; + + const chainTypes = [ + "arbitrum", + "berachain", + "blackfort", + "celo", + "ethereum", + "filecoin", + "optimism", + "polygon_zkevm", + "rsk", + "scroll", + "shibarium", + "stability", + "zetachain", + "zilliqa", + "zksync", + "neon" + ]; + + const extraChainTypes = ["suave", "polygon_edge"]; + + // Chain type matrix we use in master branch + const allChainTypes = [].concat(defaultChainTypes, chainTypes, extraChainTypes); + + const labels = ${{ github.event_name == 'pull_request' && toJson(github.event.pull_request.labels.*.name) || '[]' }}; + const ciLabels = labels.filter(label => label.startsWith("ci:")); + const labeledChainTypes = [].concat( + defaultChainTypes.filter(chainType => ciLabels.includes("ci:" + chainType)), + chainTypes.filter(chainType => ciLabels.includes("ci:all") || ciLabels.includes("ci:" + chainType)), + extraChainTypes.filter(chainType => ciLabels.includes("ci:" + chainType)) + ); + + // Chain type matrix we use in PRs to master branch + const ciChainTypes = labeledChainTypes.length > 0 ? labeledChainTypes : defaultChainTypes; + + const matrix = { "chain-type": ${{ github.event_name == 'pull_request' && 'ciChainTypes' || 'allChainTypes' }} }; + console.log(JSON.stringify(matrix)); + ')" >> $GITHUB_OUTPUT + + build-and-cache: + name: Build and Cache deps + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: "ELIXIR_VERSION.lock" + run: echo "${ELIXIR_VERSION}" > ELIXIR_VERSION.lock + + - name: "OTP_VERSION.lock" + run: echo "${OTP_VERSION}" > OTP_VERSION.lock + + - name: Restore Mix Deps Cache + uses: actions/cache@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Conditionally build Mix deps cache + if: steps.deps-cache.outputs.cache-hit != 'true' + run: | + mix local.hex --force + mix local.rebar --force + mix deps.get + mix deps.compile --skip-umbrella-children + + - name: Restore Explorer NPM Cache + uses: actions/cache@v4 + id: explorer-npm-cache + with: + path: apps/explorer/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm- + + - name: Conditionally build Explorer NPM Cache + if: steps.explorer-npm-cache.outputs.cache-hit != 'true' + run: npm install + working-directory: apps/explorer + + - name: Restore Blockscout Web NPM Cache + uses: actions/cache@v4 + id: blockscoutweb-npm-cache + with: + path: apps/block_scout_web/assets/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm- + + - name: Conditionally build Blockscout Web NPM Cache + if: steps.blockscoutweb-npm-cache.outputs.cache-hit != 'true' + run: npm install + working-directory: apps/block_scout_web/assets + + credo: + name: Credo + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Restore Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - run: mix credo + + check_formatted: + name: Code formatting checks + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Restore Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - run: mix format --check-formatted + + dialyzer: + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }} + name: Dialyzer static analysis + runs-on: ubuntu-latest + needs: + - build-and-cache + - matrix-builder + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Restore Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Dialyzer Cache + uses: actions/cache@v4 + id: dialyzer-cache + with: + path: priv/plts + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-${{ matrix.chain-type }}-dialyzer-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-${{ matrix.chain-type }}-dialyzer-mixlockhash- + + - name: Conditionally build Dialyzer Cache + if: steps.dialyzer-cache.output.cache-hit != 'true' + run: | + mkdir -p priv/plts + mix dialyzer --plt + env: + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + + - name: Run Dialyzer + run: mix dialyzer --halt-exit-status + env: + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + + gettext: + name: Missing translation keys check + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Restore Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - run: | + mix gettext.extract --merge | tee stdout.txt + grep "Wrote priv/gettext/en/LC_MESSAGES/default.po (0 new messages, 0 removed, " stdout.txt + working-directory: "apps/block_scout_web" + sobelow: + name: Sobelow security analysis + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Scan explorer for vulnerabilities + run: mix sobelow --config + working-directory: "apps/explorer" + - name: Scan block_scout_web for vulnerabilities + run: mix sobelow --config + working-directory: "apps/block_scout_web" + + cspell: + name: Check spelling + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Explorer NPM Cache + uses: actions/cache@v4 + id: explorer-npm-cache + with: + path: apps/explorer/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm- + + - name: Restore Blockscout Web NPM Cache + uses: actions/cache@v4 + id: blockscoutweb-npm-cache + with: + path: apps/block_scout_web/assets/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm- + + - name: Run cspell + uses: streetsidesoftware/cspell-action@v6 + with: + use_cspell_files: true + incremental_files_only: false + + eslint: + name: ESLint + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Explorer NPM Cache + uses: actions/cache@v4 + id: explorer-npm-cache + with: + path: apps/explorer/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm- + + - name: Restore Blockscout Web NPM Cache + uses: actions/cache@v4 + id: blockscoutweb-npm-cache + with: + path: apps/block_scout_web/assets/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm- + + - name: Build assets + run: node node_modules/webpack/bin/webpack.js --mode development + working-directory: "apps/block_scout_web/assets" + + - run: ./node_modules/.bin/eslint --format=junit --output-file="test/eslint/junit.xml" js/** + working-directory: apps/block_scout_web/assets + jest: + name: JS Tests + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Blockscout Web NPM Cache + uses: actions/cache@v4 + id: blockscoutweb-npm-cache + with: + path: apps/block_scout_web/assets/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm- + + - name: Build assets + run: node node_modules/webpack/bin/webpack.js --mode development + working-directory: "apps/block_scout_web/assets" + + - run: ./node_modules/.bin/jest + working-directory: apps/block_scout_web/assets + + test_utils: + name: Utils Tests + runs-on: ubuntu-latest + needs: build-and-cache + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Restore Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - working-directory: apps/utils + run: mix test + + test_nethermind_mox_ethereum_jsonrpc: + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }} + name: EthereumJSONRPC Tests + runs-on: ubuntu-latest + needs: + - build-and-cache + - matrix-builder + services: + postgres: + image: postgres:17 + env: + # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + POSTGRES_DB: explorer_test + # match PGPASSWORD for elixir image above + POSTGRES_PASSWORD: postgres + # match PGUSER for elixir image above + POSTGRES_USER: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - run: ./bin/install_chrome_headless.sh + - name: mix test --exclude no_nethermind + run: | + cd apps/ethereum_jsonrpc + mix compile + mix test --no-start --exclude no_nethermind + env: + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox" + ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + test_nethermind_mox_explorer: + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }} + name: Explorer Tests + runs-on: ubuntu-latest + needs: + - build-and-cache + - matrix-builder + services: + postgres: + image: postgres:17 + env: + # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + POSTGRES_DB: explorer_test + # match PGPASSWORD for elixir image above + POSTGRES_PASSWORD: postgres + # match PGUSER for elixir image above + POSTGRES_USER: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Explorer NPM Cache + uses: actions/cache@v4 + id: explorer-npm-cache + with: + path: apps/explorer/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm + + - run: ./bin/install_chrome_headless.sh + - name: mix test --exclude no_nethermind + run: | + mix ecto.create --quiet + mix ecto.migrate + cd apps/explorer + mix compile + mix test --no-start --exclude no_nethermind + env: + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox" + ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true" + test_nethermind_mox_indexer: + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }} + name: Indexer Tests + runs-on: ubuntu-latest + needs: + - build-and-cache + - matrix-builder + services: + postgres: + image: postgres:17 + env: + # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + POSTGRES_DB: explorer_test + # match PGPASSWORD for elixir image above + POSTGRES_PASSWORD: postgres + # match PGUSER for elixir image above + POSTGRES_USER: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - run: ./bin/install_chrome_headless.sh + + - name: mix test --exclude no_nethermind + run: | + mix ecto.create --quiet + mix ecto.migrate + cd apps/indexer + mix compile + mix test --no-start --exclude no_nethermind + env: + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox" + ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true" + test_nethermind_mox_block_scout_web: + strategy: + fail-fast: false + matrix: ${{ fromJson(needs.matrix-builder.outputs.matrix) }} + name: Blockscout Web Tests + runs-on: ubuntu-latest + needs: + - build-and-cache + - matrix-builder + services: + redis-db: + image: "redis:alpine" + ports: + - 6379:6379 + + postgres: + image: postgres:17 + env: + # Match apps/explorer/config/test.exs config :explorer, Explorer.Repo, database + POSTGRES_DB: explorer_test + # match PGPASSWORD for elixir image above + POSTGRES_PASSWORD: postgres + # match PGUSER for elixir image above + POSTGRES_USER: postgres + # Set health checks to wait until postgres has started + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + # Maps tcp port 5432 on service container to the host + - 5432:5432 + steps: + - uses: actions/checkout@v4 + - uses: erlef/setup-beam@v1 + with: + otp-version: ${{ env.OTP_VERSION }} + elixir-version: ${{ env.ELIXIR_VERSION }} + hexpm-mirrors: | + https://builds.hex.pm + https://cdn.jsdelivr.net/hex + + - name: Mix Deps Cache + uses: actions/cache/restore@v4 + id: deps-cache + with: + path: | + deps + _build + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash-${{ hashFiles('mix.lock') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash- + + - name: Restore Explorer NPM Cache + uses: actions/cache@v4 + id: explorer-npm-cache + with: + path: apps/explorer/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm-${{ hashFiles('apps/explorer/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-explorer-npm- + + - name: Restore Blockscout Web NPM Cache + uses: actions/cache@v4 + id: blockscoutweb-npm-cache + with: + path: apps/block_scout_web/assets/node_modules + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm-${{ hashFiles('apps/block_scout_web/assets/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-blockscoutweb-npm- + + - name: Build assets + run: node node_modules/webpack/bin/webpack.js --mode development + working-directory: "apps/block_scout_web/assets" + + - run: ./bin/install_chrome_headless.sh + + - name: mix test --exclude no_nethermind + run: | + mix ecto.create --quiet + mix ecto.migrate + cd apps/block_scout_web + mix compile + mix test --no-start --exclude no_nethermind + env: + # match POSTGRES_PASSWORD for postgres image below + PGPASSWORD: postgres + # match POSTGRES_USER for postgres image below + PGUSER: postgres + ETHEREUM_JSONRPC_CASE: "EthereumJSONRPC.Case.Nethermind.Mox" + ETHEREUM_JSONRPC_WEB_SOCKET_CASE: "EthereumJSONRPC.WebSocket.Case.Mox" + CHAIN_ID: "10200" + API_RATE_LIMIT_DISABLED: "true" + API_GRAPHQL_RATE_LIMIT_DISABLED: "true" + ADMIN_PANEL_ENABLED: "true" + ACCOUNT_ENABLED: "true" + ACCOUNT_REDIS_URL: "redis://localhost:6379" + SOURCIFY_INTEGRATION_ENABLED: "true" + CHAIN_TYPE: ${{ matrix.chain-type != 'default' && matrix.chain-type || '' }} + WETH_TOKEN_TRANSFERS_FILTERING_ENABLED: "true" diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-arbitrum.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-arbitrum.yml new file mode 100644 index 0000000..6c31b17 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-arbitrum.yml @@ -0,0 +1,62 @@ +name: Pre-release for Arbitrum + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Arbitrum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-arbitrum:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum + + - name: Build and push Docker image for Arbitrum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-arbitrum:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-berachain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-berachain.yml new file mode 100644 index 0000000..196201c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-berachain.yml @@ -0,0 +1,62 @@ +name: Pre-release for Berachain + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Ethereum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-berachain:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain + + - name: Build and push Docker image for Ethereum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-berachain:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-celo.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-celo.yml new file mode 100644 index 0000000..9edc3fc --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-celo.yml @@ -0,0 +1,63 @@ +name: Pre-release for CELO + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + API_GRAPHQL_MAX_COMPLEXITY: 10400 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for CELO (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-celo:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=celo + + - name: Build and push Docker image for CELO (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-celo:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=celo diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-eth.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-eth.yml new file mode 100644 index 0000000..6d1c680 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-eth.yml @@ -0,0 +1,62 @@ +name: Pre-release for Ethereum + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Ethereum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-ethereum:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + + - name: Build and push Docker image for Ethereum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-ethereum:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-filecoin.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-filecoin.yml new file mode 100644 index 0000000..e81fd27 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-filecoin.yml @@ -0,0 +1,62 @@ +name: Pre-release for Filecoin + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Filecoin (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-filecoin:latest, ghcr.io/blockscout/blockscout-filecoin:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=filecoin + + - name: Build and push Docker image for Filecoin (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-filecoin:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=filecoin diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-fuse.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-fuse.yml new file mode 100644 index 0000000..54e957d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-fuse.yml @@ -0,0 +1,62 @@ +name: Pre-release for Fuse + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Fuse (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-fuse:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true + + - name: Build and push Docker image for Fuse (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-fuse:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-optimism.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-optimism.yml new file mode 100644 index 0000000..4925acd --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-optimism.yml @@ -0,0 +1,62 @@ +name: Pre-release for Optimism + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Optimism (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-optimism:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism + + - name: Build and push Docker image for Optimism (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-optimism:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-polygon-zkevm.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-polygon-zkevm.yml new file mode 100644 index 0000000..90cab96 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-polygon-zkevm.yml @@ -0,0 +1,62 @@ +name: Pre-release for Polygon ZkEVM + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Polygon ZkEVM (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zkevm:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm + + - name: Build and push Docker image for Polygon ZkEVM (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zkevm:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-rootstock.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-rootstock.yml new file mode 100644 index 0000000..fc3af1f --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-rootstock.yml @@ -0,0 +1,62 @@ +name: Pre-release for Rootstock + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Rootstock (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-rsk:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=rsk + + - name: Build and push Docker image for Rootstock (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-rsk:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=rsk diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-scroll.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-scroll.yml new file mode 100644 index 0000000..565438c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-scroll.yml @@ -0,0 +1,62 @@ +name: Pre-release for Scroll + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Scroll (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-scroll:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll + + - name: Build and push Docker image for Scroll (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-scroll:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zilliqa.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zilliqa.yml new file mode 100644 index 0000000..3e95ea0 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zilliqa.yml @@ -0,0 +1,62 @@ +name: Pre-release for Zilliqa + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zilliqa:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zilliqa + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zilliqa:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zilliqa diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zksync.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zksync.yml new file mode 100644 index 0000000..9ad8a1b --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release-zksync.yml @@ -0,0 +1,62 @@ +name: Pre-release for ZkSync + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for ZkSync (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zksync:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync + + - name: Build and push Docker image for ZkSync (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zksync:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release.yml new file mode 100644 index 0000000..41f1a39 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/pre-release.yml @@ -0,0 +1,74 @@ +name: Pre-release + +on: + workflow_dispatch: + inputs: + number: + type: number + required: true + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build & Push Core Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:master, ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build & Push Core Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}-alpha.${{ inputs.number }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-custom-build.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-custom-build.yml new file mode 100644 index 0000000..232975f --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-custom-build.yml @@ -0,0 +1,54 @@ +name: Publish Custom Base Docker image (master + some commit(s)) + +on: + workflow_dispatch: + push: + branches: + - custom-build +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-postrelease-custom-build-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-postrelease-custom-build-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-every-push.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-every-push.yml new file mode 100644 index 0000000..9510bee --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-every-push.yml @@ -0,0 +1,116 @@ +name: Publish Docker image on every push to master branch + +on: + push: + branches: + - master + paths-ignore: + - 'CHANGELOG.md' + - '**/README.md' + - 'docker-compose/*' +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + RELEASE_VERSION: 8.0.2 + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:master, ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}.commit.${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}.commit.${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build and push Docker image for frontend + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + tags: ghcr.io/blockscout/blockscout:frontend-main + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + SESSION_COOKIE_DOMAIN=k8s-dev.blockscout.com + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + deploy_e2e: + needs: push_to_registry + runs-on: ubuntu-latest + permissions: write-all + steps: + - name: Get Vault credentials + id: retrieve-vault-secrets + uses: hashicorp/vault-action@v2.4.1 + with: + url: https://vault.k8s.blockscout.com + role: ci-dev + path: github-jwt + method: jwt + tlsSkipVerify: false + exportToken: true + secrets: | + ci/data/dev/github token | WORKFLOW_TRIGGER_TOKEN ; + - name: Trigger deploy + uses: convictional/trigger-workflow-and-wait@v1.6.1 + with: + owner: blockscout + repo: deployment-values + github_token: ${{env.WORKFLOW_TRIGGER_TOKEN}} + workflow_file_name: deploy_blockscout.yaml + ref: main + wait_interval: 30 + client_payload: '{ "instance": "dev", "globalEnv": "e2e"}' diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-arbitrum.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-arbitrum.yml new file mode 100644 index 0000000..da97433 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-arbitrum.yml @@ -0,0 +1,57 @@ +name: Arbitrum Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-arbitrum +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: arbitrum + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-berachain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-berachain.yml new file mode 100644 index 0000000..edf4334 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-berachain.yml @@ -0,0 +1,57 @@ +name: Berachain Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-berachain +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: berachain + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-celo.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-celo.yml new file mode 100644 index 0000000..1e869a7 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-celo.yml @@ -0,0 +1,61 @@ +name: Celo Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-celo +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: celo + API_GRAPHQL_MAX_COMPLEXITY: 10400 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for CELO (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + API_GRAPHQL_MAX_COMPLEXITY=${{ env.API_GRAPHQL_MAX_COMPLEXITY }} + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} + + - name: Build and push Docker image for CELO (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + API_GRAPHQL_MAX_COMPLEXITY=${{ env.API_GRAPHQL_MAX_COMPLEXITY }} + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-core.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-core.yml new file mode 100644 index 0000000..671fe49 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-core.yml @@ -0,0 +1,39 @@ +name: POA Core Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-core +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: poa + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:latest, ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth-sepolia.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth-sepolia.yml new file mode 100644 index 0000000..e66cc53 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth-sepolia.yml @@ -0,0 +1,57 @@ +name: ETH Sepolia Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-eth-sepolia +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: eth-sepolia + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:latest, ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth.yml new file mode 100644 index 0000000..d1b877e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-eth.yml @@ -0,0 +1,57 @@ +name: ETH Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-eth +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: ethereum + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-filecoin.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-filecoin.yml new file mode 100644 index 0000000..9030fb4 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-filecoin.yml @@ -0,0 +1,56 @@ +name: Publish Docker image for specific chain branches + +on: + push: + branches: + - production-filecoin +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: filecoin + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Filecoin (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} + + - name: Build and push Docker image for Filecoin (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-fuse.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-fuse.yml new file mode 100644 index 0000000..a48aac6 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-fuse.yml @@ -0,0 +1,40 @@ +name: Fuse Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-fuse +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: fuse + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BRIDGED_TOKENS_ENABLED=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-gnosis-chain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-gnosis-chain.yml new file mode 100644 index 0000000..0226d10 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-gnosis-chain.yml @@ -0,0 +1,59 @@ +name: Gnosis Chain Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-xdai +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: xdai + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BRIDGED_TOKENS_ENABLED=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BRIDGED_TOKENS_ENABLED=true + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-l2-staging.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-l2-staging.yml new file mode 100644 index 0000000..ab1dfc7 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-l2-staging.yml @@ -0,0 +1,39 @@ +name: L2 staging Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - staging-l2 +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: optimism-l2-advanced + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:latest, ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-lukso.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-lukso.yml new file mode 100644 index 0000000..be70ef3 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-lukso.yml @@ -0,0 +1,39 @@ +name: LUKSO Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-lukso +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: lukso + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:latest, ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-optimism.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-optimism.yml new file mode 100644 index 0000000..2ac7984 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-optimism.yml @@ -0,0 +1,58 @@ +name: Optimism Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-optimism +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: optimism + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-rootstock.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-rootstock.yml new file mode 100644 index 0000000..747a887 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-rootstock.yml @@ -0,0 +1,40 @@ +name: Rootstock Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-rsk +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: rsk + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=rsk diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-scroll.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-scroll.yml new file mode 100644 index 0000000..15168c2 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-scroll.yml @@ -0,0 +1,58 @@ +name: Scroll Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-scroll +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: scroll + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-suave.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-suave.yml new file mode 100644 index 0000000..7cefb9c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-suave.yml @@ -0,0 +1,43 @@ +name: SUAVE Publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-suave +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: suave + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=suave diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zetachain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zetachain.yml new file mode 100644 index 0000000..c7d4076 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zetachain.yml @@ -0,0 +1,40 @@ +name: Zetachain publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-zetachain +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: zetachain + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zetachain diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zilliqa.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zilliqa.yml new file mode 100644 index 0000000..75bc869 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zilliqa.yml @@ -0,0 +1,59 @@ +name: Zilliqa publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-zilliqa +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: zilliqa + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=${{ env.DOCKER_CHAIN_NAME }} + + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zkevm.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zkevm.yml new file mode 100644 index 0000000..53e05c8 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zkevm.yml @@ -0,0 +1,58 @@ +name: Zkevm publish Docker image + +on: + workflow_dispatch: + push: + branches: + - production-zkevm +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: zkevm + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zksync.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zksync.yml new file mode 100644 index 0000000..88413af --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-for-zksync.yml @@ -0,0 +1,57 @@ +name: Zksync publish Docker image + +on: + push: + branches: + - production-zksync +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + DOCKER_CHAIN_NAME: zksync + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-${{ env.DOCKER_CHAIN_NAME }}:${{ env.RELEASE_VERSION }}-postrelease-${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-staging-on-demand.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-staging-on-demand.yml new file mode 100644 index 0000000..861d647 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-docker-image-staging-on-demand.yml @@ -0,0 +1,52 @@ +name: Publish Docker image to staging on demand + +on: + workflow_dispatch: + push: + branches: + - staging + paths-ignore: + - 'CHANGELOG.md' + - '**/README.md' + - 'docker-compose/*' +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + RELEASE_VERSION: 8.0.2 + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout-staging:latest, ghcr.io/blockscout/blockscout-staging:${{ env.RELEASE_VERSION }}.commit.${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/publish-regular-docker-image-on-demand.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-regular-docker-image-on-demand.yml new file mode 100644 index 0000000..6a7e81b --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/publish-regular-docker-image-on-demand.yml @@ -0,0 +1,67 @@ +name: Publish regular Docker image on demand + +on: + workflow_dispatch: +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + RELEASE_VERSION: 8.0.2 + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}.commit.${{ env.SHORT_SHA }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}.commit.${{ env.SHORT_SHA }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }}.+commit.${{ env.SHORT_SHA }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-arbitrum.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-arbitrum.yml new file mode 100644 index 0000000..f34e8ef --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-arbitrum.yml @@ -0,0 +1,60 @@ +name: Release for Arbitrum + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Arbitrum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-arbitrum:latest, ghcr.io/blockscout/blockscout-arbitrum:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum + + - name: Build and push Docker image for Arbitrum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-arbitrum:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=arbitrum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-berachain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-berachain.yml new file mode 100644 index 0000000..24c9460 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-berachain.yml @@ -0,0 +1,60 @@ +name: Release for Berachain + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Ethereum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-berachain:latest, ghcr.io/blockscout/blockscout-berachain:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain + + - name: Build and push Docker image for Ethereum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-berachain:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=berachain diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-celo.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-celo.yml new file mode 100644 index 0000000..e8a9617 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-celo.yml @@ -0,0 +1,64 @@ +name: Release for Celo + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + API_GRAPHQL_MAX_COMPLEXITY: 10400 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for CELO (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-celo:latest, ghcr.io/blockscout/blockscout-celo:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + API_GRAPHQL_MAX_COMPLEXITY=${{ env.API_GRAPHQL_MAX_COMPLEXITY }} + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=celo + + - name: Build and push Docker image for CELO (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-celo:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + API_GRAPHQL_MAX_COMPLEXITY=${{ env.API_GRAPHQL_MAX_COMPLEXITY }} + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=celo + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-eth.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-eth.yml new file mode 100644 index 0000000..57ae67e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-eth.yml @@ -0,0 +1,61 @@ +name: Release for Ethereum + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Ethereum (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-ethereum:latest, ghcr.io/blockscout/blockscout-ethereum:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + + - name: Build and push Docker image for Ethereum (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-ethereum:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=ethereum + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-filecoin.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-filecoin.yml new file mode 100644 index 0000000..56348f1 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-filecoin.yml @@ -0,0 +1,60 @@ +name: Release for Filecoin + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Filecoin (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-filecoin:latest, ghcr.io/blockscout/blockscout-filecoin:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=filecoin + + - name: Build and push Docker image for Filecoin (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-filecoin:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=filecoin diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-fuse.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-fuse.yml new file mode 100644 index 0000000..a7a4209 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-fuse.yml @@ -0,0 +1,60 @@ +name: Release for Fuse + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Fuse (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-fuse:latest, ghcr.io/blockscout/blockscout-fuse:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true + + - name: Build and push Docker image for Fuse (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-fuse:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-gnosis.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-gnosis.yml new file mode 100644 index 0000000..e691c8e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-gnosis.yml @@ -0,0 +1,62 @@ +name: Release for Gnosis Chain + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Gnosis chain (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-xdai:latest, ghcr.io/blockscout/blockscout-xdai:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true + CHAIN_TYPE=ethereum + + - name: Build and push Docker image for Gnosis chain (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-xdai:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + BRIDGED_TOKENS_ENABLED=true + CHAIN_TYPE=ethereum diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-optimism.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-optimism.yml new file mode 100644 index 0000000..207d80a --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-optimism.yml @@ -0,0 +1,60 @@ +name: Release for Optimism + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Optimism (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-optimism:latest, ghcr.io/blockscout/blockscout-optimism:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism + + - name: Build and push Docker image for Optimism (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-optimism:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=optimism diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-polygon-zkevm.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-polygon-zkevm.yml new file mode 100644 index 0000000..2ee5ef9 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-polygon-zkevm.yml @@ -0,0 +1,61 @@ +name: Release for Polygon zkEVM + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Polygon zkEVM (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zkevm:latest, ghcr.io/blockscout/blockscout-zkevm:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm + + - name: Build and push Docker image for Polygon zkEVM (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zkevm:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=polygon_zkevm + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-rootstock.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-rootstock.yml new file mode 100644 index 0000000..9554b7a --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-rootstock.yml @@ -0,0 +1,61 @@ +name: Release for Rootstock + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Rootstock (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-rsk:latest, ghcr.io/blockscout/blockscout-rsk:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=rsk + + - name: Build and push Docker image for Rootstock (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-rsk:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=rsk + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-scroll.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-scroll.yml new file mode 100644 index 0000000..29404c0 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-scroll.yml @@ -0,0 +1,61 @@ +name: Release for Scroll + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Scroll (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-scroll:latest, ghcr.io/blockscout/blockscout-scroll:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll + + - name: Build and push Docker image for Scroll (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-scroll:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=scroll + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-suave.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-suave.yml new file mode 100644 index 0000000..1abddee --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-suave.yml @@ -0,0 +1,60 @@ +name: Release for SUAVE + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for SUAVE (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-suave:latest, ghcr.io/blockscout/blockscout-suave:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=suave + + - name: Build and push Docker image for SUAVE (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-suave:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=suave diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-zetachain.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zetachain.yml new file mode 100644 index 0000000..53ce112 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zetachain.yml @@ -0,0 +1,60 @@ +name: Release for Zetachain + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for Zetachain (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zetachain:latest, ghcr.io/blockscout/blockscout-zetachain:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zetachain + + - name: Build and push Docker image for Zetachain (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zetachain:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zetachain diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-zilliqa.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zilliqa.yml new file mode 100644 index 0000000..d88514d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zilliqa.yml @@ -0,0 +1,62 @@ +name: Release for Zilliqa + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zilliqa:latest, ghcr.io/blockscout/blockscout-zilliqa:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zilliqa + + - name: Build and push Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zilliqa:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zilliqa + + diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release-zksync.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zksync.yml new file mode 100644 index 0000000..cd95e5d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release-zksync.yml @@ -0,0 +1,60 @@ +name: Release for ZkSync + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build and push Docker image for ZkSync (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zksync:latest, ghcr.io/blockscout/blockscout-zksync:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync + + - name: Build and push Docker image for ZkSync (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + tags: ghcr.io/blockscout/blockscout-zksync:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + CHAIN_TYPE=zksync diff --git a/sz-poc-offsite-2025/blockscout/.github/workflows/release.yml b/sz-poc-offsite-2025/blockscout/.github/workflows/release.yml new file mode 100644 index 0000000..5e4f2fd --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.github/workflows/release.yml @@ -0,0 +1,149 @@ +name: Release + +on: + workflow_dispatch: + release: + types: [published] + +env: + OTP_VERSION: ${{ vars.OTP_VERSION }} + ELIXIR_VERSION: ${{ vars.ELIXIR_VERSION }} + +jobs: + push_to_registry: + name: Push Docker image to GitHub Container Registry + runs-on: ubuntu-latest + env: + RELEASE_VERSION: 8.0.2 + steps: + - uses: actions/checkout@v4 + - name: Setup repo + uses: ./.github/actions/setup-repo + id: setup + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + docker-remote-multi-platform: true + docker-arm-host: ${{ secrets.ARM_RUNNER_HOSTNAME }} + docker-arm-host-key: ${{ secrets.ARM_RUNNER_KEY }} + + - name: Build & Push Core Docker image (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:latest, ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }} + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + - name: Build & Push Core Docker image (indexer) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-indexer + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DISABLE_API=true + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + + - name: Build & Push Docker image with an old UI (indexer + API) + uses: docker/build-push-action@v6 + with: + context: . + file: ./docker/oldUI.Dockerfile + push: true + cache-from: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache + cache-to: type=registry,ref=ghcr.io/blockscout/blockscout:buildcache,mode=max + tags: ghcr.io/blockscout/blockscout:${{ env.RELEASE_VERSION }}-with-old-ui + labels: ${{ steps.setup.outputs.docker-labels }} + platforms: | + linux/amd64 + linux/arm64/v8 + build-args: | + DECODE_NOT_A_CONTRACT_CALLS=false + MIXPANEL_URL= + MIXPANEL_TOKEN= + AMPLITUDE_URL= + AMPLITUDE_API_KEY= + BLOCKSCOUT_VERSION=v${{ env.RELEASE_VERSION }} + RELEASE_VERSION=${{ env.RELEASE_VERSION }} + + # - name: Send release announcement to Slack workflow + # id: slack + # uses: slackapi/slack-github-action@v1.24.0 + # with: + # payload: | + # { + # "release-version": "${{ env.RELEASE_VERSION }}", + # "release-link": "https://github.com/blockscout/blockscout/releases/tag/v${{ env.RELEASE_VERSION }}" + # } + # env: + # SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + + # merge-master-after-release: + # name: Merge 'master' to specific branch after release + # runs-on: ubuntu-latest + # env: + # BRANCHES: | + # production-core + # production-sokol + # production-eth-experimental + # production-eth-goerli + # production-lukso + # production-xdai + # production-polygon-supernets + # production-rsk + # production-immutable + # steps: + # - uses: actions/checkout@v4 + # - name: Set Git config + # run: | + # git config --local user.email "actions@github.com" + # git config --local user.name "Github Actions" + # - name: Merge master back after release + # run: | + # git fetch --unshallow + # touch errors.txt + # for branch in $BRANCHES; + # do + # git reset --merge + # git checkout master + # git fetch origin + # echo $branch + # git ls-remote --exit-code --heads origin $branch || { echo $branch >> errors.txt; continue; } + # echo "Merge 'master' to $branch" + # git checkout $branch + # git pull || { echo $branch >> errors.txt; continue; } + # git merge --no-ff master -m "Auto-merge master back to $branch" || { echo $branch >> errors.txt; continue; } + # git push || { echo $branch >> errors.txt; continue; } + # git checkout master; + # done + # [ -s errors.txt ] && echo "There are problems with merging 'master' to branches:" || echo "Errors file is empty" + # cat errors.txt + # [ ! -s errors.txt ] diff --git a/sz-poc-offsite-2025/blockscout/.gitignore b/sz-poc-offsite-2025/blockscout/.gitignore new file mode 100644 index 0000000..1654528 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.gitignore @@ -0,0 +1,77 @@ +# App artifacts +/_build +/apps/*/cover +/apps/*/logs +/cover +/db +/deps +/doc +/*.ez +/logs + +# mix dialyzer artifacts +/priv/plts + +# Generated on crash by the VM +erl_crash.dump +dump.rdb + +# Generated on crash by NPM +npm-debug.log + +# Static artifacts +/apps/**/node_modules + +# Since we are building assets from assets/, +# we ignore priv/static. You may want to comment +# this depending on your deployment strategy. +/apps/*/priv/static/ + +# Files matching config/*.secret.exs pattern contain sensitive +# data and you should not commit them into version control. +# +# Alternatively, you may comment the line below and commit the +# secrets files as long as you replace their contents by environment +# variables. +/apps/*/config/*.secret.exs + +# Wallaby screenshots +screenshots/ + +# Sobelow +.sobelow + +# osx +.DS_Store +dump.rdb + +# mix phx.gen.cert self-signed certs for dev +/apps/block_scout_web/priv/cert + +/docker-compose/services/blockscout-db-data +/docker-compose/services/stats-db-data +/docker-compose/services/redis-data +/docker-compose/services/logs +/docker-compose/tmp + +.idea/ +*.iml + +.vscode +.cursorignore +.cursorrules +.elixir_ls + +**.dec** + +*.env.example +*.env.local +*.env.staging +.devcontainer/.blockscout_config* + +# dets tables +queue_storage +tasks_in_progress +/dets + +/temp \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.pairs b/sz-poc-offsite-2025/blockscout/.pairs new file mode 100644 index 0000000..e40bd6e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.pairs @@ -0,0 +1,13 @@ +pairs: + cj: CJ Bryan; cj + dr: Doc Ritezel; doc + mo: Matt Olenick; matto + db: Derek Barnes; dgb + rdwb: Desmond Bowe; des + +email: + prefix: pair + domain: ministryofvelocity.com + no_solo_prefix: true + +global: true diff --git a/sz-poc-offsite-2025/blockscout/.pre-commit-config.yaml b/sz-poc-offsite-2025/blockscout/.pre-commit-config.yaml new file mode 100644 index 0000000..505db04 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.pre-commit-config.yaml @@ -0,0 +1,5 @@ +repos: + - repo: https://github.com/gitleaks/gitleaks + rev: v8.17.0 + hooks: + - id: gitleaks \ No newline at end of file diff --git a/sz-poc-offsite-2025/blockscout/.tool-versions b/sz-poc-offsite-2025/blockscout/.tool-versions new file mode 100644 index 0000000..639a1a0 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/.tool-versions @@ -0,0 +1,3 @@ +elixir 1.17.3-otp-27 +erlang 27.1 +nodejs 20.17.0 diff --git a/sz-poc-offsite-2025/blockscout/CHANGELOG.md b/sz-poc-offsite-2025/blockscout/CHANGELOG.md new file mode 100644 index 0000000..966ed4e --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/CHANGELOG.md @@ -0,0 +1,4917 @@ +# Changelog + +## 8.0.2 + +### 🐛 Bug Fixes + +- Rename left props in API v2 with new naming convention ([#12314](https://github.com/blockscout/blockscout/issues/12314)) +- Temporary disable PendingTransactionOperation ([#12312](https://github.com/blockscout/blockscout/issues/12312)) +- Add `bash` to `builder-deps` build stage ([#12316](https://github.com/blockscout/blockscout/issues/12316)) +- Build on macos ([#12308](https://github.com/blockscout/blockscout/issues/12308)) + +### ⚙️ Miscellaneous Tasks + +- Add Scroll Euclid upgrade support ([#12294](https://github.com/blockscout/blockscout/issues/12294)) + +## 8.0.1 + +### 🐛 Bug Fixes + +- Fix CSV export "to" range to include the whole day in all cases ([#12286](https://github.com/blockscout/blockscout/pull/12286)) +- Return compatibility with previous version of health endpoint([#12280](https://github.com/blockscout/blockscout/pull/12280)) +- Unbind import from compile-time chain_type ([#12277](https://github.com/blockscout/blockscout/pull/12277)) +- Read `CHAIN_TYPE` and `MUD_INDEXER_ENABLED` envs in runtime config ([#12270](https://github.com/blockscout/blockscout/issues/12270)) + +### ⚙️ Miscellaneous Tasks + +- Decrease PBO to PTO migration batch size ([#12279](https://github.com/blockscout/blockscout/pull/12279)) +- Decrease PendingOperationsHelper blocks_batch_size ([#12276](https://github.com/blockscout/blockscout/pull/12276)) +- Update docker compose to use ghcr.io images ([#12177](https://github.com/blockscout/blockscout/issues/12177)) + +## 8.0.0 + +### 🚀 Features + +- Rate limiter for on-demand fetchers ([#12218](https://github.com/blockscout/blockscout/issues/12218)) +- Add average batch time (L2) to prometheus metrics ([#12217](https://github.com/blockscout/blockscout/issues/12217)) +- Contract creation tx block number binary search ([#10530](https://github.com/blockscout/blockscout/issues/10530)) +- Enhance health endpoint logic: track L2-rollup batches health ([#11888](https://github.com/blockscout/blockscout/issues/11888)) +- Universal API Proxy ([#12119](https://github.com/blockscout/blockscout/issues/12119)) +- Add sorting by tx count and balance to `/api/v2/addresses` ([#12168](https://github.com/blockscout/blockscout/issues/12168)) +- Support OP interop messages ([#11903](https://github.com/blockscout/blockscout/issues/11903)) +- Store and validate metadata_url ([#12102](https://github.com/blockscout/blockscout/issues/12102)) +- Captcha scoped bypass token for token instance metadata refetch ([#12147](https://github.com/blockscout/blockscout/issues/12147)) +- Add filter by `type` and `call_type` to `/api/v2/blocks/{:block_hash}/internal-transactions` ([#11968](https://github.com/blockscout/blockscout/issues/11968)) +- ERC-7760 proxy type support ([#12057](https://github.com/blockscout/blockscout/issues/12057)) +- Extend scam tokens feature on other endpoints ([#11975](https://github.com/blockscout/blockscout/issues/11975)) +- JSON RPC metrics ([#12070](https://github.com/blockscout/blockscout/issues/12070)) +- Add search by transaction hash capability at api/v2/internal-transactions endpoint ([#12025](https://github.com/blockscout/blockscout/issues/12025)) +- Add ENS and metadata preload to /api/v2/proxy/metadata/addresses ([#11962](https://github.com/blockscout/blockscout/issues/11962)) +- Zilliqa stakers API ([#11615](https://github.com/blockscout/blockscout/issues/11615)) +- Refine setting of certified flag on smart-contracts ([#11855](https://github.com/blockscout/blockscout/issues/11855)) +- Add PendingTransactionOperation ([#11157](https://github.com/blockscout/blockscout/issues/11157)) +- Allow from_period and to_period to be timestamps in CSV export functionality ([#11862](https://github.com/blockscout/blockscout/issues/11862)) +- Add support of ResolvedDelegateProxy proxy pattern ([#11720](https://github.com/blockscout/blockscout/issues/11720)) + +### 🐛 Bug Fixes + +- Limit max import concurrency ([#12261](https://github.com/blockscout/blockscout/pull/12261)) +- CSV export: download items for the given day if from / to period are equal ([#12260](https://github.com/blockscout/blockscout/pull/12260)) +- Upgrade missing balanceOf token condition ([#12254](https://github.com/blockscout/blockscout/pull/12254)) +- Add missing load of health_latest_batch_average_time_from_db ([#12240](https://github.com/blockscout/blockscout/pull/12240)) +- Handle unconfigured coin fetcher ETS access ([#12228](https://github.com/blockscout/blockscout/pull/12228)) +- Negate condition for language check in solidityscan controller ([#12222](https://github.com/blockscout/blockscout/pull/12222)) +- Look up sources for partially verified smart contracts ([#12221](https://github.com/blockscout/blockscout/pull/12221)) +- BufferedTask-based approach for fetching Arbitrum-specific settlement info ([#12192](https://github.com/blockscout/blockscout/pull/12192)) +- Contract creation transaction associations and bytecode twin detection ([#12086](https://github.com/blockscout/blockscout/issues/12086)) +- Improve background migrations + new `Indexer.Migrator.RecoveryWETHTokenTransfers` ([#12065](https://github.com/blockscout/blockscout/issues/12065)) +- Update docker cache references to use ghcr.io ([#12178](https://github.com/blockscout/blockscout/issues/12178)) +- Add blob and authorization list info to ETH RPC API ([#12150](https://github.com/blockscout/blockscout/issues/12150)) +- Fix Stability web test ([#12171](https://github.com/blockscout/blockscout/issues/12171)) +- Fix Rootstock failed tests ([#12169](https://github.com/blockscout/blockscout/issues/12169)) +- Unify Block Range Collector behavior for undefined and single range ([#12153](https://github.com/blockscout/blockscout/issues/12153)) +- Signed_authorizations table migrate nonce to numeric(20,0) ([#12157](https://github.com/blockscout/blockscout/issues/12157)) +- Refactor smart-contract API v2 endpoint output ([#12076](https://github.com/blockscout/blockscout/issues/12076)) +- Managing gas usage sum cache and address count cache ([#12149](https://github.com/blockscout/blockscout/issues/12149)) +- Web3 wallet login on Rootstock ([#12121](https://github.com/blockscout/blockscout/issues/12121)) +- Refactor a query to get missing confirmation for Arbitrum blocks ([#11914](https://github.com/blockscout/blockscout/issues/11914)) +- Fix error in old UI ([#12112](https://github.com/blockscout/blockscout/issues/12112)) +- OnDemand fetchers memory consumption for api mode ([#12082](https://github.com/blockscout/blockscout/issues/12082)) +- Implement DA record deduplication for Arbitrum batch processing ([#12095](https://github.com/blockscout/blockscout/issues/12095)) +- Empty contract code addresses ([#12023](https://github.com/blockscout/blockscout/issues/12023)) +- Unify response for single and batch 1155 transfer in RPC API ([#12083](https://github.com/blockscout/blockscout/issues/12083)) +- Is_verified for verified eip7702 proxies ([#12033](https://github.com/blockscout/blockscout/issues/12033)) +- Recovered functionality of Arbitrum batch fetcher ([#12059](https://github.com/blockscout/blockscout/issues/12059)) +- Fix flaking test ([#12013](https://github.com/blockscout/blockscout/issues/12013)) +- Confirmations of Arbitrum blocks near genesis ([#11790](https://github.com/blockscout/blockscout/issues/11790)) +- Fix finding of first block to index ([#11875](https://github.com/blockscout/blockscout/issues/11875)) +- Async fetch internal transactions from reindex migration ([#11959](https://github.com/blockscout/blockscout/issues/11959)) +- Fix Indexer.Fetcher.ContractCode unhandled error ([#11873](https://github.com/blockscout/blockscout/issues/11873)) + +### 🚜 Refactor + +- Consistency with the core application in properties namings in rollups-related API endpoints ([#12055](https://github.com/blockscout/blockscout/issues/12055)) +- Refactor market related code ([#11844](https://github.com/blockscout/blockscout/pull/11844)) + +### ⚡ Performance + +- Optimize watchlist query ([#12264](https://github.com/blockscout/blockscout/pull/12264)) +- Add index for slow `/api/v2/addresses?sort=transactions_count&order=asc` ([#12230](https://github.com/blockscout/blockscout/pull/12230)) +- `/api/v2/smart-contracts` endpoint ([#12060](https://github.com/blockscout/blockscout/issues/12060)) +- Optimize query for user token transfers list filtered by token ([#12039](https://github.com/blockscout/blockscout/issues/12039)) +- Improve watchlist rendering performance ([#11999](https://github.com/blockscout/blockscout/issues/11999)) + +### ⚙️ Miscellaneous Tasks + +- Add typed_ecto_schema to release ([#12255](https://github.com/blockscout/blockscout/pull/12255)) +- Suppress logging for expected 404 errors in account abstraction ([#12242](https://github.com/blockscout/blockscout/pull/12242)) +- Upgrade on demand balances fetchers ([#12104](https://github.com/blockscout/blockscout/pull/12104)) +- Migrate images to ghcr.io ([#12128](https://github.com/blockscout/blockscout/issues/12128)) +- Don't send transaction interpretation request for failed tx ([#12164](https://github.com/blockscout/blockscout/issues/12164)) +- Move `redstone` chain type to runtime ([#12124](https://github.com/blockscout/blockscout/issues/12124)) +- Move `DISABLE_INDEXER` option to runtime ([#12139](https://github.com/blockscout/blockscout/issues/12139)) +- Drop transactions index duplicates ([#12144](https://github.com/blockscout/blockscout/issues/12144)) +- CDN improvement: batch DB upsert ([#11918](https://github.com/blockscout/blockscout/issues/11918)) +- Partially move chain types to runtime ([#12114](https://github.com/blockscout/blockscout/issues/12114)) +- Chain counters refactoring and setup persistency for global counters in the DB ([#11849](https://github.com/blockscout/blockscout/issues/11849)) +- Remove legacy decompiled contracts API ([#11998](https://github.com/blockscout/blockscout/issues/11998)) +- Eliminate intercept for V2 socket channels ([#12003](https://github.com/blockscout/blockscout/issues/12003)) +- Treat `SHRINK_INTERNAL_TRANSACTIONS_ENABLED` as runtime env ([#12110](https://github.com/blockscout/blockscout/issues/12110)) +- Docker compose reduce env output ([#12111](https://github.com/blockscout/blockscout/issues/12111)) +- Replaced the link to the blockscout badge ([#12106](https://github.com/blockscout/blockscout/issues/12106)) +- Remove default JSON RPC endpoint ([#12071](https://github.com/blockscout/blockscout/issues/12071)) +- Remove token object from API v2 api/v2/tokens/:hash/holders endpoint ([#12022](https://github.com/blockscout/blockscout/issues/12022)) +- Remove Read/Write smart-contract API v2 endpoints ([#12026](https://github.com/blockscout/blockscout/issues/12026)) +- Use DB replica, if it's enabled, for proxy-related queries ([#12020](https://github.com/blockscout/blockscout/issues/12020)) +- Ganache -> Anvil JSON RPC Variant ([#12066](https://github.com/blockscout/blockscout/issues/12066)) +- Remove `is_vyper_contract` from the `/api/v2/smart-contracts/{address_hash}` endpoint response ([#11823](https://github.com/blockscout/blockscout/issues/11823)) +- Eliminate warnings in `epoch_logs.ex` ([#12027](https://github.com/blockscout/blockscout/issues/12027)) +- Migrate to `language` enum field in `smart_contracts` table ([#11813](https://github.com/blockscout/blockscout/issues/11813)) +- Fetch epoch logs and rewards until `CELO_L2_MIGRATION_BLOCK` ([#11949](https://github.com/blockscout/blockscout/issues/11949)) +- GraphQL introspection plug ([#11843](https://github.com/blockscout/blockscout/issues/11843)) +- Remove duplicate endpoints for 3d party proxies ([#11940](https://github.com/blockscout/blockscout/issues/11940)) +- Limit number of implementations proxy before insertion into the DB ([#11882](https://github.com/blockscout/blockscout/issues/11882)) + +### New ENV variables + +| Variable | Description | Parameters | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `HEALTH_MONITOR_CHECK_INTERVAL` | Interval between health stats collection. [Time format](backend-env-variables.md#time-format). Implemented in [#11888](https://github.com/blockscout/blockscout/pull/11888/) |

Version: v8.0.0+
Default: 1m
Applications: API, Indexer

| +| `HEALTH_MONITOR_BLOCKS_PERIOD` | New blocks indexed max delay in /health API endpoint. [Time format](backend-env-variables.md#time-format). Implemented in [#11888](https://github.com/blockscout/blockscout/pull/11888/) |

Version: v8.0.0+
Default: 5m
Applications: API, Indexer

| +| `HEALTH_MONITOR_BATCHES_PERIOD` | New batches indexed max delay in /health API endpoint. [Time format](backend-env-variables.md#time-format). Implemented in [#11888](https://github.com/blockscout/blockscout/pull/11888/) |

Version: v8.0.0+
Default: 4h
Applications: API, Indexer

| +| `INDEXER_TOKEN_INSTANCE_CIDR_BLACKLIST` | List of IP addresses in CIDR format to block when fetching token instance metadata. Example: `"0.0.0.0/32,192.168.0.0/16"`. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_TOKEN_INSTANCE_HOST_FILTERING_ENABLED` | If `false`, the URL from which metadata is fetched will not be resolved to an IP address, and the IP address will not be checked against the blacklist. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: true
Applications: Indexer

| +| `INDEXER_TOKEN_INSTANCE_ALLOWED_URI_PROTOCOLS` | List of allowed URI protocols (schemes) for requests when fetching token instance metadata. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: http,https
Applications: Indexer

| +| `MIGRATION_SMART_CONTRACT_LANGUAGE_DISABLED` | If set to `true`, the migration to the `language` field in the `smart_contracts` table will not start. If set to `false`, the migration proceeds as normal. Implemented in [#11813](https://github.com/blockscout/blockscout/pull/11813). |

Version: v8.0.0+
Default: false
Applications: Indexer

| +| `MIGRATION_SMART_CONTRACT_LANGUAGE_BATCH_SIZE` | Defines the number of records to be processed in each batch when migrating the `language` field in the `smart_contracts` table. Implemented in [#11813](https://github.com/blockscout/blockscout/pull/11813). |

Version: v8.0.0+
Default: 100
Applications: Indexer

| +| `MIGRATION_SMART_CONTRACT_LANGUAGE_CONCURRENCY` | Specifies how many concurrent processes can handle the `language` field migration. Implemented in [#11813](https://github.com/blockscout/blockscout/pull/11813). |

Version: v8.0.0+
Default: 1
Applications: Indexer

| +| `MIGRATION_BACKFILL_METADATA_URL_DISABLED` | If set to `true`, the backfiller of `metadata_url` field in the `token_instances` table will not start. If set to `false`, the migration proceeds as normal. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: false
Applications: Indexer

| +| `MIGRATION_BACKFILL_METADATA_URL_BATCH_SIZE` | Defines the number of records to be processed in each batch when backfilling the `metadata_url` field in the `token_instances` table. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: 100
Applications: Indexer

| +| `MIGRATION_BACKFILL_METADATA_URL_CONCURRENCY` | Specifies how many concurrent processes can handle the `metadata_url` field backfilling. Implemented in [#12102](https://github.com/blockscout/blockscout/pull/12102). |

Version: v8.0.0+
Default: 5
Applications: Indexer

| +| `MIGRATION_RECOVERY_WETH_TOKEN_TRANSFERS_CONCURRENCY` | Specifies how many concurrent processes can handle the recovery WETH token transfers migration. Implemented in [#12065](https://github.com/blockscout/blockscout/pull/12065). |

Version: v8.0.0+
Default: 5
Applications: Indexer

| +| `MIGRATION_RECOVERY_WETH_TOKEN_TRANSFERS_BATCH_SIZE` | Defines the number of records to be processed in each batch when recovery WETH token transfers. Implemented in [#12065](https://github.com/blockscout/blockscout/pull/12065). |

Version: v8.0.0+
Default: 50
Applications: Indexer

| +| `MIGRATION_RECOVERY_WETH_TOKEN_TRANSFERS_TIMEOUT` | Defines the timeout between processing each batch (`batch_size` * `concurrency`) in the recovery WETH token transfers migration. Follows the [time format](backend-env-variables.md#time-format). Implemented in [#12065](https://github.com/blockscout/blockscout/pull/12065). |

Version: v8.0.0+
Default: 0s
Applications: Indexer

| +| `MIGRATION_RECOVERY_WETH_TOKEN_TRANSFERS_BLOCKS_BATCH_SIZE` | Specifies the block range size selected for the recovery of WETH token transfer migration. Implemented in [#12065](https://github.com/blockscout/blockscout/pull/12065). |

Version: v8.0.0+
Default: 100000
Applications: Indexer

| +| `MIGRATION_RECOVERY_WETH_TOKEN_TRANSFERS_HIGH_VERBOSITY` | If set to `true`, enables high verbosity logging (logs each transaction hash, where missed transfers were restored) during the recovery of WETH token transfer migration. Implemented in [#12065](https://github.com/blockscout/blockscout/pull/12065). |

Version: v8.0.0+
Default: true
Applications: Indexer

| +| `CACHE_ADDRESS_COUNT_PERIOD` | Interval for restarting the task that calculates the total number of addresses. |

Version: v8.0.0+
Default: 30m
Applications: API, Indexer

| +| `RE_CAPTCHA_TOKEN_INSTANCE_REFETCH_METADATA_SCOPED_BYPASS_TOKEN` | API key that allows to skip reCAPTCHA check for requests to `/api/v2/tokens/{token_hash}/instances/{token_id}/refetch-metadata` endpoint. Implemented in [#12147](https://github.com/blockscout/blockscout/pull/12147) |

Version: v8.0.0+
Default: (empty)
Applications: API

| +| `INDEXER_ARBITRUM_BATCHES_TRACKING_FAILURE_THRESHOLD` | The time threshold for transaction batch monitoring tasks. If a task has not run successfully within this threshold, it is marked as failed and enters a cooldown period before retrying. Implemented in [#12192](https://github.com/blockscout/blockscout/pull/12192). |

Version: v8.0.0+
Default: 10m
Applications: Indexer

| +| `RATE_LIMITER_REDIS_URL` | Redis DB URL for rate limiter. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: (empty)
Applications: API

| +| `RATE_LIMITER_ON_DEMAND_TIME_INTERVAL` | Time interval of rate limit for on-demand fetchers. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: 5s
Applications: API

| +| `RATE_LIMITER_ON_DEMAND_LIMIT_BY_IP` | Rate limit for an IP address for on-demand fetcher call. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: 100
Applications: API

| +| `RATE_LIMITER_ON_DEMAND_EXPONENTIAL_TIMEOUT_COEFF` | Coefficient to calculate exponential timeout for on-demand rate limit. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: 100
Applications: API

| +| `RATE_LIMITER_ON_DEMAND_MAX_BAN_INTERVAL` | Max time an IP address can be banned from on-demand fetcher calls. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: 1h
Applications: API

| +| `RATE_LIMITER_ON_DEMAND_LIMITATION_PERIOD` | Time after which the number of bans for the IP address will be reset. Implemented in [#12218](https://github.com/blockscout/blockscout/pull/12218) |

Version: v8.0.0+
Default: 1h
Applications: API

| +| `DISABLE_MARKET` | Disables all fetchers and any market data displaying. Setting this to `true` will disable all market-related functionality. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: false
Applications: API, Indexer

| +| `MARKET_NATIVE_COIN_SOURCE` | Source for realtime native coin price fetching. Possible values are: `coin_gecko`, `coin_market_cap`, `crypto_rank`, or `mobula`. Useful when multiple coin IDs are configured and you want to explicitly select the source. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: coin_gecko
Applications: API

| +| `MARKET_SECONDARY_COIN_SOURCE` | Source for realtime secondary coin fetching. Possible values are: `coin_gecko`, `coin_market_cap`, `crypto_rank`, or `mobula`. Useful when multiple secondary coin IDs are configured. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: coin_gecko
Applications: API

| +| `MARKET_TOKENS_SOURCE` | Sets the source for tokens price fetching. Available values are `coin_gecko`, `crypto_rank`, `mobula`. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: coin_gecko
Applications: Indexer

| +| `MARKET_NATIVE_COIN_HISTORY_SOURCE` | Sets the source for price history fetching. Available values are `crypto_compare`, `coin_gecko`, `mobula`, `coin_market_cap` and `crypto_rank`. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: crypto_compare
Applications: Indexer

| +| `MARKET_SECONDARY_COIN_HISTORY_SOURCE` | Sets the source for secondary coin price history fetching. Available values are `crypto_compare`, `coin_gecko`, `mobula`, `coin_market_cap` and `crypto_rank`. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: crypto_compare
Applications: Indexer

| +| `MARKET_MARKET_CAP_HISTORY_SOURCE` | Sets the source for market cap history fetching. Available values are `coin_gecko` and `coin_market_cap`. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: coin_gecko
Applications: Indexer

| +| `MARKET_TVL_HISTORY_SOURCE` | Sets the source for TVL history fetching. Available value is `defillama`. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: defillama
Applications: Indexer

| +| `MARKET_COINGECKO_PLATFORM_ID` | [CoinGecko](https://www.coingecko.com/) platform id for which token prices are fetched, see full list in [`/asset_platforms`](https://api.coingecko.com/api/v3/asset_platforms) endpoint. Examples: "ethereum", "optimistic-ethereum". Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: ethereum
Applications: Indexer

| +| `MARKET_COINGECKO_BASE_URL` | If set, overrides the Coingecko base URL. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://api.coingecko.com/api/v3
Applications: API, Indexer

| +| `MARKET_COINGECKO_BASE_PRO_URL` | If set, overrides the Coingecko Pro base URL. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://pro-api.coingecko.com/api/v3
Applications: API, Indexer

| +| `MARKET_COINGECKO_API_KEY` | CoinGecko API key. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COINGECKO_COIN_ID` | Sets CoinGecko coin ID. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COINGECKO_SECONDARY_COIN_ID` | Sets CoinGecko coin ID for secondary coin market chart. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COINMARKETCAP_BASE_URL` | If set, overrides the CoinMarketCap base URL (Free and Pro). Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://pro-api.coinmarketcap.com/v2
Applications: API, Indexer

| +| `MARKET_COINMARKETCAP_API_KEY` | CoinMarketCap API key. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COINMARKETCAP_COIN_ID` | CoinMarketCap coin id. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COINMARKETCAP_SECONDARY_COIN_ID` | CoinMarketCap coin id for secondary coin. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_CRYPTOCOMPARE_BASE_URL` | If set, overrides the CryptoCompare base URL. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://min-api.cryptocompare.com
Applications: API, Indexer

| +| `MARKET_CRYPTOCOMPARE_COIN_SYMBOL` | CryptoCompare coin symbol for native coin (e.g., "OP" for Optimism). CryptoCompare uses symbols instead of IDs. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `MARKET_CRYPTOCOMPARE_SECONDARY_COIN_SYMBOL`| CryptoCompare coin symbol for secondary coin market chart. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `MARKET_CRYPTORANK_PLATFORM_ID` | Sets Cryptorank platform ID. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `MARKET_CRYPTORANK_BASE_URL` | If set, overrides the Cryptorank API url. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://api.cryptorank.io/v1/
Applications: API, Indexer

| +| `MARKET_CRYPTORANK_API_KEY` | Cryptorank API key. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_CRYPTORANK_COIN_ID` | Sets Cryptorank coin ID. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_CRYPTORANK_SECONDARY_COIN_ID` | Sets Cryptorank coin ID for secondary coin. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_DEFILLAMA_COIN_ID` | DefiLlama coin id. Use the `name` field from the `/v2/chains` endpoint response (e.g., "OP Mainnet" for Optimism). Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `MARKET_MOBULA_PLATFORM_ID` | Mobula platform ID. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: Indexer

| +| `MARKET_MOBULA_BASE_URL` | If set, overrides the Mobula API base URL. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: https://api.mobula.io/api/1
Applications: API, Indexer

| +| `MARKET_MOBULA_API_KEY` | Mobula API key. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_MOBULA_COIN_ID` | Set Mobula coin ID. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_MOBULA_SECONDARY_COIN_ID` | Set Mobula coin ID for secondary coin. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: (empty)
Applications: API, Indexer

| +| `MARKET_COIN_FETCHER_ENABLED` | If `false` disables fetching of realtime native coin price. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: true
Applications: API

| +| `MARKET_COIN_CACHE_PERIOD` | Cache period for coin exchange rates. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: 10m
Applications: API

| +| `MARKET_TOKENS_FETCHER_ENABLED` | If `false` disables fetching of token prices. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: true
Applications: Indexer

| +| `MARKET_TOKENS_INTERVAL` | Interval between batch requests of token prices. Can be decreased in order to fetch prices faster if you have pro rate limit. [Time format](backend-env-variables.md#time-format). Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: 10s
Applications: Indexer

| +| `MARKET_TOKENS_REFETCH_INTERVAL` | Interval between refetching token prices, responsible for the relevance of prices. [Time format](backend-env-variables.md#time-format). Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: 1h
Applications: Indexer

| +| `MARKET_TOKENS_MAX_BATCH_SIZE` | Batch size of a single token price request. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: 500
Applications: Indexer

| +| `MARKET_HISTORY_FETCHER_ENABLED` | If `false` disables fetching of marked data history. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: true
Applications: Indexer

| +| `MARKET_HISTORY_FIRST_FETCH_DAY_COUNT` | Initial number of days to fetch for market history. Implemented in [#11844](https://github.com/blockscout/blockscout/pull/11844). |

Version: v8.0.0+
Default: 365
Applications: Indexer

| + +### Deprecated ENV variables + +| Variable | Required | Description | Default | Version | Need recompile | Deprecated in Version | +| ----------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------- | -------------- | --------------------- | +| `CACHE_ADDRESS_WITH_BALANCES_UPDATE_INTERVAL` | | Interval to restart the task which calculates addresses with balances. | 30m | v4.1.3+ | | v8.0.0 +| `HEALTHY_BLOCKS_PERIOD` | | New blocks indexed max delay in /health API endpoint. [Time format](env-variables.md#time-format). Implemented in [#2294](https://github.com/blockscout/blockscout/pull/2294/) | 5m | v2.0.2+ | | v8.0.0 | + +## 7.0.2 + +### ⚡ Performance + +- Logs list decoding: Accumulate ABI for unique address hashes ([#11967](https://github.com/blockscout/blockscout/pull/11967)) +- Logs list decoding: Use Sig provider microservice batched request ([#11956](https://github.com/blockscout/blockscout/issues/11956), [#11963](https://github.com/blockscout/blockscout/issues/11963)) +- Transactions list: Don't fetch revert reason for txs list ([#11935](https://github.com/blockscout/blockscout/issues/11935)) + +## 7.0.1 + +### 🐛 Bug Fixes + +- Show scam ENS in search ([#11933](https://github.com/blockscout/blockscout/issues/11933)) +- Show scam EOA in search ([#11932](https://github.com/blockscout/blockscout/issues/11932)) +- Replace unique filecoin addresses indexes with not unique ([#11905](https://github.com/blockscout/blockscout/issues/11905)) +- Render token transfers from celo epoch logs ([#11915](https://github.com/blockscout/blockscout/issues/11915)) + +## 7.0.0 + +### 🚀 Features + +- NFT collection trigger refetch Admin API endpoint ([#10263](https://github.com/blockscout/blockscout/issues/10263)) +- Improve NFT sanitizers ([#11543](https://github.com/blockscout/blockscout/issues/11543)) +- Add new endpoint /api/v2/proxy/account-abstraction/status ([#11784](https://github.com/blockscout/blockscout/issues/11784)) +- Adds support for NeonVM linked Solana transactions ([#11667](https://github.com/blockscout/blockscout/issues/11667)) ([#11736](https://github.com/blockscout/blockscout/issues/11736)) +- Enable /api/v2/internal-transactions endpoint ([#11792](https://github.com/blockscout/blockscout/issues/11792)) +- Integrate metadata tags to search ([#11719](https://github.com/blockscout/blockscout/issues/11719)) +- Add Arweave NFT image link parsing support ([#11565](https://github.com/blockscout/blockscout/issues/11565)) +- Disable re-verification from partial to partial match by default ([#11737](https://github.com/blockscout/blockscout/issues/11737)) +- DB Index heavy operations processing module ([#11604](https://github.com/blockscout/blockscout/issues/11604)) +- Multiple strategies for filecoin address info fetching ([#11412](https://github.com/blockscout/blockscout/issues/11412)) +- Preload NFT to token transfers ([#11756](https://github.com/blockscout/blockscout/issues/11756)) +- Add show_scam_tokens cookie ([#11747](https://github.com/blockscout/blockscout/issues/11747)) +- Add ENS and metadata preload to /api/v2/tokens/{hash}/instances ([#11760](https://github.com/blockscout/blockscout/issues/11760)) +- Return 200 on addresses which are not present in DB ([#11506](https://github.com/blockscout/blockscout/issues/11506)) +- Enhance txlistinternal API v1: make transaction hash and address hash not mandatory ([#11717](https://github.com/blockscout/blockscout/issues/11717)) +- Backfill for Arbitrum-specific information in blocks and transactions ([#11163](https://github.com/blockscout/blockscout/issues/11163)) +- Ignore events older than 24 hours in Explorer.Account.Notifier.… ([#11654](https://github.com/blockscout/blockscout/issues/11654)) +- Add timeout env for proxy metadata requests ([#11656](https://github.com/blockscout/blockscout/issues/11656)) +- Support filecoin addresses in search ([#11499](https://github.com/blockscout/blockscout/issues/11499)) +- Return error on verification if address is not a smart contract ([#11504](https://github.com/blockscout/blockscout/issues/11504)) + +### 🐛 Bug Fixes + +- Add BRIDGED_TOKENS_ENABLED to custom Gnosis chain docker images ([#11895](https://github.com/blockscout/blockscout/pull/11895)) +- Fix /verified-contracts in old UI ([#11854](https://github.com/blockscout/blockscout/pull/11854)) +- Cleanup token instance metadata on nft collection metadata refetch ([#11848](https://github.com/blockscout/blockscout/pull/11848)) +- Allow skip fiat_value in /api/v2/addresses/{hash}/tokens endpoint ([#11837](https://github.com/blockscout/blockscout/pull/11837)) +- Handle invalid BLACKFORT_VALIDATOR_API_URL ([#11812](https://github.com/blockscout/blockscout/issues/11812)) +- Fix scam addresses ban in quick search ([#11810](https://github.com/blockscout/blockscout/issues/11810)) +- Handle case when `epoch_distribution` is `nil` ([#11807](https://github.com/blockscout/blockscout/issues/11807)) +- Strict mode for timestamp to block number conversion ([#11633](https://github.com/blockscout/blockscout/issues/11633)) +- Don't store ipfs gateway in metadata ([#11673](https://github.com/blockscout/blockscout/issues/11673)) +- Use 0 as a default for v field in transactions ([#11800](https://github.com/blockscout/blockscout/issues/11800)) +- Fix tests ([#11805](https://github.com/blockscout/blockscout/issues/11805)) +- Use safe field access in CurrentTokenBalances.should_update?/2 ([#11804](https://github.com/blockscout/blockscout/issues/11804)) +- Run Neon tests on neon chain type only ([#11802](https://github.com/blockscout/blockscout/issues/11802)) +- Sanitize addresses of smart contracts having `verified` set to `false` ([#11727](https://github.com/blockscout/blockscout/issues/11727)) +- Celestia info parsing ([#11678](https://github.com/blockscout/blockscout/issues/11678)) +- `EIP1559ConfigUpdate` and `Indexer.Block.Realtime.Fetcher` fetchers were unstable for L2 reorgs, `brotli` lib was replaced ([#11714](https://github.com/blockscout/blockscout/issues/11714)) +- Add traceable blocks filtering to contract code fetcher ([#11700](https://github.com/blockscout/blockscout/issues/11700)) +- Improve token metadata update process ([#11710](https://github.com/blockscout/blockscout/issues/11710)) +- Add typeless handler for call_tracer ([#11766](https://github.com/blockscout/blockscout/issues/11766)) +- Add consensus filter to reindex internal transactions migration ([#11732](https://github.com/blockscout/blockscout/issues/11732)) +- Add error handling to chunked json rpc decode json ([#11734](https://github.com/blockscout/blockscout/issues/11734)) +- New methods submitting Arbitrum batches supported ([#11731](https://github.com/blockscout/blockscout/issues/11731)) +- Don't fail on pending transactions in Explorer.Account.Notifier.Notify ([#11724](https://github.com/blockscout/blockscout/issues/11724)) +- Add flat value to BoundInterval increase/decrease ([#11708](https://github.com/blockscout/blockscout/issues/11708)) +- Add missing condition to reindex internal transactions migration ([#11709](https://github.com/blockscout/blockscout/issues/11709)) +- Add 'yParity' alias ([#11642](https://github.com/blockscout/blockscout/issues/11642)) +- Fix address coin balances transformer ([#11627](https://github.com/blockscout/blockscout/issues/11627)) +- Improve session handling in account v2 ([#11420](https://github.com/blockscout/blockscout/issues/11420)) +- Add /metrics handler for indexer mode ([#11672](https://github.com/blockscout/blockscout/issues/11672)) +- Ease SQL query for EIP1559ConfigUpdate fetcher ([#11659](https://github.com/blockscout/blockscout/issues/11659)) +- Fix enoent in Indexer.NFTMediaHandler.Queue ([#11653](https://github.com/blockscout/blockscout/issues/11653)) +- Add function clause for wrong first trace result format ([#11655](https://github.com/blockscout/blockscout/issues/11655)) +- Intercept error during DB drop ([#11618](https://github.com/blockscout/blockscout/issues/11618)) +- Update EmptyBlocksSanitizer logic due to refetch_needed field ([#11660](https://github.com/blockscout/blockscout/issues/11660)) + +### 🚜 Refactor + +- All env variables related to DB migration processes now have "MIGRATION_" prefix ([#11798](https://github.com/blockscout/blockscout/issues/11798)) + +### ⚡ Performance + +- Smart contracts list query ([#11733](https://github.com/blockscout/blockscout/issues/11733)) + +### ⚙️ Miscellaneous Tasks + +- Runtime variable to manage chain spec processing delay ([#11874](https://github.com/blockscout/blockscout/pull/11874)) +- Replace composite id types usage ([#11861](https://github.com/blockscout/blockscout/pull/11861)) +- Correct the docker compose command for running an external frontend in README.md ([#11838](https://github.com/blockscout/blockscout/pull/11838)) +- Update link to the list of chains in README.md ([#11829](https://github.com/blockscout/blockscout/pull/11829)) +- Create /api/v2/proxy/3dparty/ root path for 3dparty proxy API endpoints ([#11808](https://github.com/blockscout/blockscout/issues/11808)) +- Mention WC Project ID in common-frontend.env ([#11799](https://github.com/blockscout/blockscout/issues/11799)) +- Remove api v1 health endpoints ([#11573](https://github.com/blockscout/blockscout/issues/11573)) +- Add env var for realtime fetcher polling period ([#11783](https://github.com/blockscout/blockscout/issues/11783)) +- Refactor composite keys filtering ([#11473](https://github.com/blockscout/blockscout/issues/11473)) +- Upsert token instances by batches ([#11685](https://github.com/blockscout/blockscout/issues/11685)) +- Fix spelling in some modules ([#11791](https://github.com/blockscout/blockscout/issues/11791)) +- Update Twitter URL to x.com format ([#11761](https://github.com/blockscout/blockscout/issues/11761)) +- Reduce the number of queries for token type ([#11674](https://github.com/blockscout/blockscout/issues/11674)) +- Increase verbosity of error logs in TokenInstanceMetadataRefetch ([#11758](https://github.com/blockscout/blockscout/issues/11758)) +- Support snake case in ImportController ([#11501](https://github.com/blockscout/blockscout/issues/11501)) +- Pass chain id to Transaction Interpretation service ([#11745](https://github.com/blockscout/blockscout/issues/11745)) +- Deprecating of CHECKSUM_FUNCTION variable ([#10480](https://github.com/blockscout/blockscout/issues/10480)) +- Arbitrum claiming enhancements ([#11552](https://github.com/blockscout/blockscout/issues/11552)) +- Fix text in the template and update localization files ([#11715](https://github.com/blockscout/blockscout/issues/11715)) +- Decrease catchup interval ([#11626](https://github.com/blockscout/blockscout/issues/11626)) + +### New ENV variables + +| Variable | Description | Parameters | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `INDEXER_DISABLE_TOKEN_INSTANCE_REFETCH_FETCHER` | If `true`, the Token instance fetcher, which re-fetches NFT collections marked to refetch, doesn't run. Implemented in [#10263](https://github.com/blockscout/blockscout/pull/10263). |

Version: v7.0.0+
Default: false
Applications: Indexer

| +| `INDEXER_REALTIME_FETCHER_POLLING_PERIOD` | Period between polling the `latest` block in realtime fetcher. [Time format](backend-env-variables.md#time-format). Implemented in [#11783](https://github.com/blockscout/blockscout/pull/11783) |

Version: v7.0.0+
Default: (empty)
Applications: Indexer

| +| `MIGRATION_SHRINK_INTERNAL_TRANSACTIONS_BATCH_SIZE` | Batch size of the shrink internal transactions migration. _Note_: before release "v6.8.0", the default value was 1000. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567), changed default value in [#10689](https://github.com/blockscout/blockscout/pull/10689). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: API, Indexer

| +| `MIGRATION_SHRINK_INTERNAL_TRANSACTIONS_CONCURRENCY` | Concurrency of the shrink internal transactions migration. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 10
Applications: API, Indexer

| +| `MIGRATION_TOKEN_INSTANCE_OWNER_CONCURRENCY` | Concurrency of new fields backfiller implemented in [#8386](https://github.com/blockscout/blockscout/pull/8386). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 5
Applications: API, Indexer

| +| `MIGRATION_TOKEN_INSTANCE_OWNER_BATCH_SIZE` | Batch size of new fields backfiller implemented in [#8386](https://github.com/blockscout/blockscout/pull/8386). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 50
Applications: API, Indexer

| +| `MIGRATION_TOKEN_INSTANCE_OWNER_ENABLED` | Enable of backfiller from [#8386](https://github.com/blockscout/blockscout/pull/8386) implemented in [#8752](https://github.com/blockscout/blockscout/pull/8752). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: false
Applications: API, Indexer

| +| `MIGRATION_TRANSACTIONS_TABLE_DENORMALIZATION_BATCH_SIZE` | Number of transactions to denormalize (add block timestamp and consensus) in the batch. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 500
Applications: API, Indexer

| +| `MIGRATION_TRANSACTIONS_TABLE_DENORMALIZATION_CONCURRENCY` | Number of parallel denormalization transaction batches processing. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 10
Applications: API, Indexer

| +| `MIGRATION_TOKEN_TRANSFER_TOKEN_TYPE_BATCH_SIZE` | Number of token transfers to denormalize (add token\_type) in the batch. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: API, Indexer

| +| `MIGRATION_TOKEN_TRANSFER_TOKEN_TYPE_CONCURRENCY` | Number of parallel denormalization token transfer batches processing. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_NFT_BATCH_SIZE` | Number of token transfers to sanitize in the batch. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_NFT_CONCURRENCY` | Number of parallel sanitizing token transfer batches processing. Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_NFT_TIMEOUT` | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 0
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_WETH_BATCH_SIZE` | Number of token transfers to sanitize in the batch. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_WETH_CONCURRENCY` | Number of parallel sanitizing token transfer batches processing. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_INCORRECT_WETH_TIMEOUT` | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 0
Applications: API, Indexer

| +| `MIGRATION_REINDEX_INTERNAL_TRANSACTIONS_STATUS_BATCH_SIZE` | Number of internal transactions to reindex in the batch. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: API, Indexer

| +| `MIGRATION_REINDEX_INTERNAL_TRANSACTIONS_STATUS_CONCURRENCY` | Number of parallel reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_REINDEX_INTERNAL_TRANSACTIONS_STATUS_TIMEOUT` | Timeout between reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358). Renamed in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 0
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_VERIFIED_ADDRESSES_DISABLED` | Concurrency of the sanitize verified addresses migration. Implemented in [#11727](https://github.com/blockscout/blockscout/pull/11727). |

Version: v7.0.0+
Default: false
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_VERIFIED_ADDRESSES_BATCH_SIZE` | Concurrency of the sanitize verified addresses migration. Implemented in [#11727](https://github.com/blockscout/blockscout/pull/11727). |

Version: v7.0.0+
Default: 500
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_VERIFIED_ADDRESSES_CONCURRENCY` | Concurrency of the sanitize verified addresses migration. Implemented in [#11727](https://github.com/blockscout/blockscout/pull/11727). |

Version: v7.0.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_SANITIZE_VERIFIED_ADDRESSES_TIMEOUT` | Timeout between batches processing in sanitize verified addresses migration. [Time format](backend-env-variables.md#time-format). Implemented in [#11727](https://github.com/blockscout/blockscout/pull/11727). |

Version: v7.0.0+
Default: 0s
Applications: API, Indexer

| +| `MIGRATION_HEAVY_INDEX_OPERATIONS_CHECK_INTERVAL` | Interval between status checks of heavy db operation like index creation or dropping. [Time format](backend-env-variables.md#time-format). Implemented in [#11604](https://github.com/blockscout/blockscout/pull/11604) |

Version: v7.0.0+
Default: 10m
Applications: API, Indexer

| +| `MIGRATION_TOKEN_INSTANCE_ERC_1155_SANITIZE_CONCURRENCY` | Concurrency for `erc-1155-sanitize` token instance fetcher. Implemented in [#9226](https://github.com/blockscout/blockscout/pull/9226). Default value and name changed in [#11543](https://github.com/blockscout/blockscout/pull/11543) |

Version: v7.0.0+
Default: 1
Applications: Indexer

| +| `MIGRATION_TOKEN_INSTANCE_ERC_721_SANITIZE_CONCURRENCY` | Concurrency for `erc-721-sanitize` token instance fetcher. Implemented in [#9226](https://github.com/blockscout/blockscout/pull/9226). Name changed in [#11543](https://github.com/blockscout/blockscout/pull/11543) |

Version: v7.0.0+
Default: 2
Applications: Indexer

| +| `MIGRATION_TOKEN_INSTANCE_ERC_1155_SANITIZE_BATCH_SIZE` | Batch size for `erc-1155-sanitize` token instance fetcher. Implemented in [#9226](https://github.com/blockscout/blockscout/pull/9226). Default value and name changed in [#11543](https://github.com/blockscout/blockscout/pull/11543) |

Version: v7.0.0+
Default: 500
Applications: Indexer

| +| `MIGRATION_TOKEN_INSTANCE_ERC_721_SANITIZE_BATCH_SIZE` | Batch size for `erc-721-sanitize` token instance fetcher. Implemented in [#9226](https://github.com/blockscout/blockscout/pull/9226). Default value and name changed in [#11543](https://github.com/blockscout/blockscout/pull/11543) |

Version: v7.0.0+
Default: 50
Applications: Indexer

| +| `MIGRATION_TOKEN_INSTANCE_ERC_721_SANITIZE_TOKENS_BATCH_SIZE`| Tokens batch size for `erc-721-sanitize` token instance fetcher. Implemented in [#9226](https://github.com/blockscout/blockscout/pull/9226). Name changed in [#11543](https://github.com/blockscout/blockscout/pull/11543) |

Version: v7.0.0+
Default: 100
Applications: Indexer

| +| `CONTRACT_ENABLE_PARTIAL_REVERIFICATION` | Toggle for enabling re-verification from partial to partial match. Implemented in [#11737](https://github.com/blockscout/blockscout/pull/11737) |

Version: v7.0.0+
Default: false
Applications: API

| +| `INDEXER_ARBITRUM_DATA_BACKFILL_ENABLED` | Enables a process to backfill the blocks and transaction with Arbitrum specific data. This should only be enabled for Arbitrum chains where blocks were indexed before upgrading to a version that includes Arbitrum-specific data indexing features. Implemented in [#11163](https://github.com/blockscout/blockscout/pull/11163). |

Version: v7.0.0+
Default: false
Applications: Indexer

| +| `INDEXER_ARBITRUM_DATA_BACKFILL_UNINDEXED_BLOCKS_RECHECK_INTERVAL` | The number of L2 blocks to look back in one iteration of the backfill process. Implemented in [#11163](https://github.com/blockscout/blockscout/pull/11163). |

Version: v7.0.0+
Default: 120s
Applications: Indexer

| +| `INDEXER_ARBITRUM_DATA_BACKFILL_BLOCKS_DEPTH` | Interval to retry the backfill task for unindexed blocks. Implemented in [#11163](https://github.com/blockscout/blockscout/pull/11163). |

Version: v7.0.0+
Default: 500
Applications: Indexer

| +| `MIGRATION_ARBITRUM_DA_RECORDS_NORMALIZATION_BATCH_SIZE` | Specifies the number of address records processed per batch during normalization of batch-to-blob associations by moving them from arbitrum_da_multi_purpose to a dedicated arbitrum_batches_to_da_blobs table. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 500
Applications: Indexer

| +| `MIGRATION_ARBITRUM_DA_RECORDS_NORMALIZATION_CONCURRENCY` | Specifies the number of concurrent processes used during normalization of batch-to-blob associations by moving them from arbitrum_da_multi_purpose to a dedicated arbitrum_batches_to_da_blobs table. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: Indexer

| +| `FILFOX_API_BASE_URL` | [Filfox API](https://filfox.info/api/v1/docs/static/index.html) base URL. Implemented in [#11412](https://github.com/blockscout/blockscout/pull/11412). |

Version: v7.0.0+
Default: https://filfox.info/api/v1
Applications: Indexer

| +| `MIGRATION_FILECOIN_PENDING_ADDRESS_OPERATIONS_BATCH_SIZE` | Specifies the number of address records processed per batch during the backfill of pending address fetch operations. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 100
Applications: Indexer

| +| `MIGRATION_FILECOIN_PENDING_ADDRESS_OPERATIONS_CONCURRENCY` | Specifies the number of concurrent processes used during the backfill of pending address fetch operations. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). |

Version: v7.0.0+
Default: 1
Applications: Indexer

| +| `MICROSERVICE_METADATA_PROXY_REQUESTS_TIMEOUT` | Timeout for request forwarding from `/api/v2/proxy/metadata/`. Implemented in [#11656](https://github.com/blockscout/blockscout/pull/11656) |

Version: v7.0.0+
Default: 30s
Applications: API

| +| `CHAIN_SPEC_PROCESSING_DELAY` | Chain specification path processing delay. [Time format](backend-env-variables.md#time-format). Implemented in [#11874](https://github.com/blockscout/blockscout/pull/11874). |

Version: v7.0.0+
Default: 15s
Applications: API, Indexer

| + +### Deprecated ENV variables + +| Variable | Required | Description | Default | Version | Need recompile | Deprecated in Version | +| ----------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------- | -------------- | --------------------- | +| `CHECKSUM_FUNCTION` | | Defines checksum address function. 2 available values: `rsk`, `eth` | `eth` | v2.0.1+ | | v7.0.0 | +| `TOKEN_ID_MIGRATION_FIRST_BLOCK` | | Bottom block for token id migration. Implemented in [#6391](https://github.com/blockscout/blockscout/pull/6391) | 0 | v5.0.0+ | | v7.0.0 +| `TOKEN_ID_MIGRATION_CONCURRENCY` | | Number of workers performing the token id migration. Implemented in [#6391](https://github.com/blockscout/blockscout/pull/6391) | 1 | v5.0.0+ | | v7.0.0 +| `TOKEN_ID_MIGRATION_BATCH_SIZE` | | Interval of token transfer block numbers processed by a token id migration worker at a time. Implemented in [#6391](https://github.com/blockscout/blockscout/pull/6391) | 500 | v5.0.0+ | | v7.0.0 +| `SHRINK_INTERNAL_TRANSACTIONS_BATCH_SIZE` | | Batch size of the shrink internal transactions migration. _Note_: before release "v6.8.0", the default value was 1000. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567), changed default value in [#10689](https://github.com/blockscout/blockscout/pull/10689). | 100 | v6.8.0+ | | v7.0.0 +| `SHRINK_INTERNAL_TRANSACTIONS_CONCURRENCY` | | Concurrency of the shrink internal transactions migration. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567). | 10 | v6.8.0+ | | v7.0.0 +| `TOKEN_INSTANCE_OWNER_MIGRATION_CONCURRENCY` | | Concurrency of new fields backfiller implemented in [#8386](https://github.com/blockscout/blockscout/pull/8386) | 5 | v5.3.0+ | | v7.0.0 +| `TOKEN_INSTANCE_OWNER_MIGRATION_BATCH_SIZE` | | Batch size of new fields backfiller implemented in [#8386](https://github.com/blockscout/blockscout/pull/8386) | 50 | v5.3.0+ | | v7.0.0 +| `TOKEN_INSTANCE_OWNER_MIGRATION_ENABLED` | | Enable of backfiller from [#8386](https://github.com/blockscout/blockscout/pull/8386) implemented in [#8752](https://github.com/blockscout/blockscout/pull/8752) | false | v5.3.2+ | | v7.0.0 +| `DENORMALIZATION_MIGRATION_BATCH_SIZE` | | Number of transactions to denormalize (add block timestamp and consensus) in the batch. | 500 | v6.0.0+ | | v7.0.0 +| `DENORMALIZATION_MIGRATION_CONCURRENCY` | | Number of parallel denormalization transaction batches processing. | 10 | v6.0.0+ | | v7.0.0 +| `TOKEN_TRANSFER_TOKEN_TYPE_MIGRATION_BATCH_SIZE` | | Number of token transfers to denormalize (add token\_type) in the batch. | 100 | v6.3.0+ | | v7.0.0 +| `TOKEN_TRANSFER_TOKEN_TYPE_MIGRATION_CONCURRENCY` | | Number of parallel denormalization token transfer batches processing. | 1 | v6.3.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_NFT_BATCH_SIZE` | | Number of token transfers to sanitize in the batch. | 100 | v6.3.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_NFT_CONCURRENCY` | | Number of parallel sanitizing token transfer batches processing. | 1 | v6.3.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_NFT_TIMEOUT` | | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) | 0 | v6.10.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_WETH_BATCH_SIZE` | | Number of token transfers to sanitize in the batch. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) | 100 | v6.8.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_WETH_CONCURRENCY` | | Number of parallel sanitizing token transfer batches processing. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) | 1 | v6.8.0+ | | v7.0.0 +| `SANITIZE_INCORRECT_WETH_TIMEOUT` | | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) | 0 | v6.10.0+ | | v7.0.0 +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_BATCH_SIZE` | | Number of internal transactions to reindex in the batch. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) | 100 | v6.10.0+ | | v7.0.0 +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_CONCURRENCY` | | Number of parallel reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) | 1 | v6.10.0+ | | v7.0.0 +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_TIMEOUT` | | Timeout between reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) | 0 | v6.10.0+ | | v7.0.0 +| `FILECOIN_PENDING_ADDRESS_OPERATIONS_MIGRATION_BATCH_SIZE` | | Specifies the number of address records processed per batch during the backfill of pending address fetch operations. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). | 100 | v6.9.0+ | | v7.0.0 +| `FILECOIN_PENDING_ADDRESS_OPERATIONS_MIGRATION_CONCURRENCY` | | Specifies the number of concurrent processes used during the backfill of pending address fetch operations. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). | 1 | v6.9.0+ | | v7.0.0 +| `ARBITRUM_DA_RECORDS_NORMALIZATION_MIGRATION_BATCH_SIZE` | | Specifies the number of address records processed per batch during normalization of batch-to-blob associations by moving them from arbitrum_da_multi_purpose to a dedicated arbitrum_batches_to_da_blobs table. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). | 500 | v6.10.1+ | | v7.0.0 +| `ARBITRUM_DA_RECORDS_NORMALIZATION_MIGRATION_CONCURRENCY` | | Specifies the number of concurrent processes used during normalization of batch-to-blob associations by moving them from arbitrum_da_multi_purpose to a dedicated arbitrum_batches_to_da_blobs table. Implemented in [#11798](https://github.com/blockscout/blockscout/pull/11798). | 1 | v6.10.1+ | | v7.0.0 + + +## 6.10.2 + +### ⚙️ Miscellaneous Tasks + +- Add captcha to account wallet login as well ([#11682](https://github.com/blockscout/blockscout/issues/11682)) + +### New ENV Variables + +| Variable | Description | Parameters | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `RE_CAPTCHA_BYPASS_TOKEN` | Bypass token that allows to skip reCAPTCHA check. Implemented in [#11682](https://github.com/blockscout/blockscout/pull/11682) |

Version: v6.10.2+
Default: (empty)
Applications: API

+ +## 6.10.1 + +### 🚀 Features + +- Support OP Holocene upgrade ([#11355](https://github.com/blockscout/blockscout/issues/11355)) +- Add active DB connections metric ([#11321](https://github.com/blockscout/blockscout/issues/11321)) +- Add protocol icon to the search result ([#11478](https://github.com/blockscout/blockscout/issues/11478)) + +### 🐛 Bug Fixes + +- Remove unnecessary internal transactions preload ([#11643](https://github.com/blockscout/blockscout/issues/11643)) +- Fix bug in Indexer.Fetcher.EmptyBlocksSanitizer module ([#11636](https://github.com/blockscout/blockscout/pull/11636)) +- Multichain search: process address in chunks ([#11632](https://github.com/blockscout/blockscout/issues/11632)) +- Fix transactions deadlock ([#11623](https://github.com/blockscout/blockscout/issues/11623)) +- Fix tokens and transactions deadlocks ([#11620](https://github.com/blockscout/blockscout/issues/11620)) +- Order address names to return the latest non-primary ([#11612](https://github.com/blockscout/blockscout/issues/11612)) +- Rename tx_burnt_fee prop in API v2 endpoint ([#11563](https://github.com/blockscout/blockscout/issues/11563)) +- Celo fee handler ([#11387](https://github.com/blockscout/blockscout/issues/11387)) +- Fix addresses deadlock ([#11616](https://github.com/blockscout/blockscout/issues/11616)) +- Besu raw trace ([#11413](https://github.com/blockscout/blockscout/issues/11413)) +- Fix tokens deadlock ([#11603](https://github.com/blockscout/blockscout/issues/11603)) +- Set timeout: :infinity for PendingTransactionsSanitizer delete ([#11600](https://github.com/blockscout/blockscout/issues/11600)) +- Fixed Missing Closing Quotation Marks in sed Expressions Update version_bump.sh ([#11574](https://github.com/blockscout/blockscout/issues/11574)) +- The same DA blobs for different Arbitrum batches ([#11485](https://github.com/blockscout/blockscout/issues/11485)) +- Extended list of apps in the devcontainer helper script ([#11396](https://github.com/blockscout/blockscout/issues/11396)) +- Fix MarketHistory test ([#11547](https://github.com/blockscout/blockscout/issues/11547)) +- Advanced-filters csv format ([#11494](https://github.com/blockscout/blockscout/issues/11494)) +- Fix verifyproxycontract endpoint ([#11523](https://github.com/blockscout/blockscout/issues/11523)) +- Fix minor grammatical issue Update README.md ([#11544](https://github.com/blockscout/blockscout/issues/11544)) + +### 📚 Documentation + +- Typo fix Update README.md ([#11595](https://github.com/blockscout/blockscout/issues/11595)) +- Typo fix Update CODE_OF_CONDUCT.md ([#11572](https://github.com/blockscout/blockscout/issues/11572)) +- Fix minor grammar and phrasing inconsistencies Update README.md ([#11548](https://github.com/blockscout/blockscout/issues/11548)) +- Fixed incorrect usage of -d flag in stop containers command Update README.md ([#11522](https://github.com/blockscout/blockscout/issues/11522)) + +### ⚡ Performance + +- Implement batched requests and DB upsert operations Indexer.Fetcher.EmptyBlocksSanitizer module ([#11555](https://github.com/blockscout/blockscout/issues/11555)) + +### ⚙️ Miscellaneous Tasks + +- Remove unused Explorer.Token.InstanceOwnerReader module ([#11570](https://github.com/blockscout/blockscout/issues/11570)) +- Optimize coin balances deriving ([#11613](https://github.com/blockscout/blockscout/issues/11613)) +- Fix typo Update CHANGELOG.md ([#11607](https://github.com/blockscout/blockscout/issues/11607)) +- Add env variable for PendingTransactionsSanitizer interval ([#11601](https://github.com/blockscout/blockscout/issues/11601)) +- Documentation for Explorer.Chain.Transaction.History.Historian ([#11397](https://github.com/blockscout/blockscout/issues/11397)) +- Extend error message on updating token balance with token id ([#11524](https://github.com/blockscout/blockscout/issues/11524)) + +### New ENV Variables + +| Variable | Description | Parameters | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| `INDEXER_PENDING_TRANSACTIONS_SANITIZER_INTERVAL` | Interval between pending transactions sanitizing. Implemented in [#11601](https://github.com/blockscout/blockscout/pull/11601). |

Version: v6.10.1
Default: 1h
Applications: Indexer

| + +## 6.10.0 + +### 🚀 Features + +- Addresses blacklist support ([#11417](https://github.com/blockscout/blockscout/issues/11417)) +- Multichain search DB filling ([#11139](https://github.com/blockscout/blockscout/issues/11139)) +- Zilliqa scilla transactions and smart contracts ([#11069](https://github.com/blockscout/blockscout/issues/11069)) +- CDN ([#10675](https://github.com/blockscout/blockscout/issues/10675)) +- Arbitrum L2->L1 message claiming ([#10804](https://github.com/blockscout/blockscout/issues/10804)) +- Add is_banned to token_instances table ([#11235](https://github.com/blockscout/blockscout/issues/11235)) +- Add CSV export of epoch transactions for address ([#11195](https://github.com/blockscout/blockscout/issues/11195)) +- Add request to /cache/{tx_hash} of transaction interpreter ([#11279](https://github.com/blockscout/blockscout/issues/11279)) +- Switch DB requests from replica to master in case of replica inaccessibility ([#11020](https://github.com/blockscout/blockscout/issues/11020)) +- Add gzip encoding option ([#11292](https://github.com/blockscout/blockscout/issues/11292)) +- Add Stylus verification support ([#11183](https://github.com/blockscout/blockscout/issues/11183)) +- Multiple json rpc urls ([#10934](https://github.com/blockscout/blockscout/issues/10934)) +- Gas prices with base fee if no transactions ([#11132](https://github.com/blockscout/blockscout/issues/11132)) +- Zilliqa consensus data related to block ([#10699](https://github.com/blockscout/blockscout/issues/10699)) +- Add filecoin robust addresses to proxy implementations ([#11102](https://github.com/blockscout/blockscout/issues/11102)) + +### 🐛 Bug Fixes + +- Limit max decimals value ([#11493](https://github.com/blockscout/blockscout/issues/11493)) +- Ignore unknown transaction receipt fields ([#11492](https://github.com/blockscout/blockscout/issues/11492)) +- Fixed issue in db request (l2_to_l1_message_by_id/2) ([#11481](https://github.com/blockscout/blockscout/issues/11481)) +- Handle float time in compose_gas_price/5 ([#11476](https://github.com/blockscout/blockscout/issues/11476)) +- Fix 500 on disabled metadata service ([#11443](https://github.com/blockscout/blockscout/issues/11443)) +- Fix get_media_url_from_metadata_for_nft_media_handler/1 ([#11437](https://github.com/blockscout/blockscout/issues/11437)) +- Fix check-redirect for ENS ([#11435](https://github.com/blockscout/blockscout/issues/11435)) +- Refactor CDN upload functions, prevent saving partially uploaded thumbnails ([#11400](https://github.com/blockscout/blockscout/issues/11400)) +- Take into account several proofs in OP Withdrawals ([#11399](https://github.com/blockscout/blockscout/issues/11399)) +- Handle "null" in paging options ([#11388](https://github.com/blockscout/blockscout/issues/11388)) +- Fix search timeout ([#11277](https://github.com/blockscout/blockscout/issues/11277)) +- Fix Noves.fi endpoints for bulk transactions ([#11375](https://github.com/blockscout/blockscout/issues/11375)) +- Fix docker container build after adding NFT media handler ([#11373](https://github.com/blockscout/blockscout/issues/11373)) +- Handle simultaneous account entities creation ([#11341](https://github.com/blockscout/blockscout/issues/11341)) +- Websocket configuration ([#11357](https://github.com/blockscout/blockscout/issues/11357)) +- 403 instead of 404 on wrong captcha in api/v1 ([#11348](https://github.com/blockscout/blockscout/issues/11348)) +- Upgrade fallback urls propagation ([#11331](https://github.com/blockscout/blockscout/issues/11331)) +- Add utils to dockerfile ([#11345](https://github.com/blockscout/blockscout/issues/11345)) +- Fix log decoding bug ([#11266](https://github.com/blockscout/blockscout/issues/11266)) +- Return 404 instead of 200 for nonexistent NFT ([#11280](https://github.com/blockscout/blockscout/issues/11280)) +- Fix metrics modules warnings ([#11340](https://github.com/blockscout/blockscout/issues/11340)) +- Handle entries with not specified `retries_count` ([#11206](https://github.com/blockscout/blockscout/issues/11206)) +- Get rid of scientific notation in CSV token holders export ([#11281](https://github.com/blockscout/blockscout/issues/11281)) +- Wrong usage of env in TokenInstanceMetadataRefetch ([#11317](https://github.com/blockscout/blockscout/issues/11317)) +- Rework initialization of the `RollupL1ReorgMonitor` and fix `read_system_config` for fallback cases ([#11275](https://github.com/blockscout/blockscout/issues/11275)) +- Eth_getLogs paging ([#11248](https://github.com/blockscout/blockscout/issues/11248)) +- Handle excessive otp confirmations ([#11244](https://github.com/blockscout/blockscout/issues/11244)) +- Check if flash is fetched before getting it in app.html ([#11270](https://github.com/blockscout/blockscout/issues/11270)) +- Multiple json rpc urls fixes ([#11264](https://github.com/blockscout/blockscout/issues/11264)) +- Handle eth rpc request without params ([#11269](https://github.com/blockscout/blockscout/issues/11269)) +- Fixate 6.9.2 as the latest release ([#11265](https://github.com/blockscout/blockscout/issues/11265)) +- Fix ETH JSON RPC deriving for Stylus verification ([#11247](https://github.com/blockscout/blockscout/issues/11247)) +- Fix fake json_rpc_named_arguments for multiple urls usage ([#11243](https://github.com/blockscout/blockscout/issues/11243)) +- Handle simultaneous api key creation ([#11233](https://github.com/blockscout/blockscout/issues/11233)) +- Fixate 6.9.1 as the latest release in master branch +- Invalid metadata requests ([#11210](https://github.com/blockscout/blockscout/issues/11210)) +- *(nginx-conf)* Redirect `/api-docs` to frontend. ([#11202](https://github.com/blockscout/blockscout/issues/11202)) +- Fix failed filecoin tests ([#11187](https://github.com/blockscout/blockscout/issues/11187)) +- Fix missing `signers` field in nested quorum certificate ([#11185](https://github.com/blockscout/blockscout/issues/11185)) +- Return `l1_tx_hashes` in the response of /batches/da/celestia/... API endpoint ([#11184](https://github.com/blockscout/blockscout/issues/11184)) +- Omit pbo for blocks lower than trace first block for indexing status ([#11053](https://github.com/blockscout/blockscout/issues/11053)) +- Update overview.html.eex ([#11094](https://github.com/blockscout/blockscout/issues/11094)) +- Fix sitemap timeout; optimize OrderedCache preloads ([#11131](https://github.com/blockscout/blockscout/issues/11131)) + +### 🚜 Refactor + +- Cspell configuration ([#11146](https://github.com/blockscout/blockscout/issues/11146)) + +### ⚡ Performance + +- Advanced filters optimization ([#11186](https://github.com/blockscout/blockscout/issues/11186)) + +### ⚙️ Miscellaneous Tasks + +- Return old response format in /api/v1/health endpoint ([#11511](https://github.com/blockscout/blockscout/issues/11511)) +- Rename blob_tx_count per naming conventions ([#11438](https://github.com/blockscout/blockscout/issues/11438)) +- Follow updated response schema in interpreter microservice ([#11402](https://github.com/blockscout/blockscout/issues/11402)) +- Remove raise in case if ETHEREUM_JSONRPC_HTTP_URL is not provided ([#11392](https://github.com/blockscout/blockscout/issues/11392)) +- Optimize tokens import ([#11389](https://github.com/blockscout/blockscout/issues/11389)) +- Remove beta suffix from releases ([#11376](https://github.com/blockscout/blockscout/issues/11376)) +- Background migrations timeout ([#11358](https://github.com/blockscout/blockscout/issues/11358)) +- Remove obsolete compile-time vars ([#11336](https://github.com/blockscout/blockscout/issues/11336)) +- Fixate Postgres 17 version in Docker compose and Github Actions workflows ([#11334](https://github.com/blockscout/blockscout/issues/11334)) +- Remove shorthands-duplicates from API responses ([#11319](https://github.com/blockscout/blockscout/issues/11319)) +- Refactor compile time envs usage ([#11148](https://github.com/blockscout/blockscout/issues/11148)) +- Refactor Dockerfile ([#11130](https://github.com/blockscout/blockscout/issues/11130)) +- Refactor import stages ([#11013](https://github.com/blockscout/blockscout/issues/11013)) +- Optimize CurrentTokenBalances import runner ([#11191](https://github.com/blockscout/blockscout/issues/11191)) +- Fix watchlist address flaking test ([#11242](https://github.com/blockscout/blockscout/issues/11242)) +- OP modules improvements ([#11073](https://github.com/blockscout/blockscout/issues/11073)) +- Invalid association `token_transfers` ([#11204](https://github.com/blockscout/blockscout/issues/11204)) +- Update Github Actions packages versions ([#11144](https://github.com/blockscout/blockscout/issues/11144)) +- Convenient way to manage known_hosts within devcontainer ([#11091](https://github.com/blockscout/blockscout/issues/11091)) +- Add docker compose file without microservices ([#11097](https://github.com/blockscout/blockscout/issues/11097)) + +### New ENV Variables + +| Variable | Description | Parameters | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| `ETHEREUM_JSONRPC_HTTP_URLS` | Analogue of `ETHEREUM_JSONRPC_HTTP_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_FALLBACK_HTTP_URLS` | Analogue of `ETHEREUM_JSONRPC_FALLBACK_HTTP_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_TRACE_URLS` | Analogue of `ETHEREUM_JSONRPC_TRACE_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_FALLBACK_TRACE_URLS` | Analogue of `ETHEREUM_JSONRPC_FALLBACK_TRACE_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_ETH_CALL_URLS` | Analogue of `ETHEREUM_JSONRPC_ETH_CALL_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_FALLBACK_ETH_CALL_URLS` | Analogue of `ETHEREUM_JSONRPC_FALLBACK_ETH_CALL_URL` for multiple values. Implemented in [#10934](https://github.com/blockscout/blockscout/pull/10934) |

Version: v6.10.0+
Default: (empty)
Applications: API, Indexer

| +| `ETHEREUM_JSONRPC_HTTP_GZIP_ENABLED` | If `true`, then send gzip encoding header and expect encoding in response. Implemented in [#11292](https://github.com/blockscout/blockscout/pull/11292). |

Version: v6.10.0+
Default: false
Applications: API, Indexer

| +| `REPLICA_MAX_LAG` | Defines the max lag for read-only replica. If the actual lag is higher than this, replica is considered unavailable and all requests to it are redirected to main DB. Implemented in [#11020](https://github.com/blockscout/blockscout/pull/11020) |

Version: v6.10.0+
Default: 5m
Applications: API

| +| `SANITIZE_INCORRECT_NFT_TIMEOUT` | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) |

Version: v6.10.0+
Default: 0
Applications: API, Indexer

| +| `SANITIZE_INCORRECT_WETH_TIMEOUT` | Timeout between sanitizing token transfer batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) |

Version: v6.10.0+
Default: 0
Applications: API, Indexer

| +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_BATCH_SIZE` | Number of internal transactions to reindex in the batch. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) |

Version: v6.10.0+
Default: 100
Applications: API, Indexer

| +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_CONCURRENCY` | Number of parallel reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) |

Version: v6.10.0+
Default: 1
Applications: API, Indexer

| +| `REINDEX_INTERNAL_TRANSACTIONS_STATUS_TIMEOUT` | Timeout between reindexing internal transaction batches processing. Implemented in [#11358](https://github.com/blockscout/blockscout/pull/11358) |

Version: v6.10.0+
Default: 0
Applications: API, Indexer

| +| `NFT_MEDIA_HANDLER_AWS_ACCESS_KEY_ID` | S3 API Access Key ID |

Version: v6.10.0+
Default: (empty)
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_AWS_SECRET_ACCESS_KEY` | S3 API Secret Access Key |

Version: v6.10.0+
Default: (empty)
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_AWS_BUCKET_HOST` | S3 API URL |

Version: v6.10.0+
Default: (empty)
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_AWS_BUCKET_NAME` | S3 bucket name |

Version: v6.10.0+
Default: (empty)
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_AWS_PUBLIC_BUCKET_URL` | Public S3 bucket URL |

Version: v6.10.0+
Default: (empty)
Applications: API

| +| `NFT_MEDIA_HANDLER_ENABLED` | if `true`, CDN feature enabled |

Version: v6.10.0+
Default: false
Applications: Indexer, NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_REMOTE_DISPATCHER_NODE_MODE_ENABLED` | if `true`, nft media handler is supposed to run separately. |

Version: v6.10.0+
Default: false
Applications: Indexer, NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_IS_WORKER` | if `true`, and `NFT_MEDIA_HANDLER_REMOTE_DISPATCHER_NODE_MODE_ENABLED=true` will be started only nft_media_handler app |

Version: v6.10.0+
Default: false
Applications: Indexer, NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_NODES_MAP` | String in json map format, where key is erlang node and value is folder in R2/S3 bucket, example: `"{\"producer@172.18.0.4\": \"/folder_1\"}"`. If nft_media_handler runs in one pod with indexer, map should contain `self` key |

Version: v6.10.0+
Default: (empty)
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_WORKER_CONCURRENCY` | Concurrency of media handling (resizing/uploading) |

Version: v6.10.0+
Default: 10
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_WORKER_BATCH_SIZE` | Number of url processed by one async task |

Version: v6.10.0+
Default: 10
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_WORKER_SPAWN_TASKS_TIMEOUT` | Timeout before spawn new task |

Version: v6.10.0+
Default: 100ms
Applications: NFT_MEDIA_HANDLER

| +| `NFT_MEDIA_HANDLER_BACKFILL_ENABLED` | If `true`, unprocessed token instances from DB will be processed via nft_media_handler |

Version: v6.10.0+
Default: false
Applications: Indexer

| +| `NFT_MEDIA_HANDLER_BACKFILL_QUEUE_SIZE` | Max size of backfill queue |

Version: v6.10.0+
Default: 1000
Applications: Indexer

| +| `NFT_MEDIA_HANDLER_BACKFILL_ENQUEUE_BUSY_WAITING_TIMEOUT` | Timeout before new attempt to append item to backfill queue if it's full |

Version: v6.10.0+
Default: 1s
Applications: Indexer

| +| `NFT_MEDIA_HANDLER_CACHE_UNIQUENESS_MAX_SIZE` | Max size of cache, where stored already uploaded token instances media |

Version: v6.10.0+
Default: 100_000
Applications: Indexer

| +| `ADDRESSES_BLACKLIST` | A comma-separated list of addresses to enable restricted access to them. |

Version: v6.10.0+
Default: (empty)
Applications: API

| +| `ADDRESSES_BLACKLIST_KEY` | A key to access blacklisted addresses (either by `ADDRESSES_BLACKLIST` or by blacklist provider). Can be passed via query param to the page's URL: `?key=...` |

Version: v6.10.0+
Default: (empty)
Applications: API

| +| `ADDRESSES_BLACKLIST_PROVIDER` | Blacklist provider type, available options: `blockaid` |

Version: v6.10.0+
Default: blockaid
Applications: API

| +| `ADDRESSES_BLACKLIST_URL` | URL to fetch blacklist from |

Version: v6.10.0+
Default: (empty)
Applications: API

| +| `ADDRESSES_BLACKLIST_UPDATE_INTERVAL` | Interval between scheduled updates of blacklist |

Version: v6.10.0+
Default: 15m
Applications: API

| +| `ADDRESSES_BLACKLIST_RETRY_INTERVAL` | Time to wait before new attempt of blacklist fetching, after abnormal termination of fetching task |

Version: v6.10.0+
Default: 5s
Applications: API

| +| `MICROSERVICE_MULTICHAIN_SEARCH_URL` | Multichain Search Service API URL. Integration is enabled, if this variable value contains valid URL. Implemented in [#11139](https://github.com/blockscout/blockscout/pull/11139) |

Version: master
Default: (empty)
Applications: API, Indexer

| +| `MICROSERVICE_MULTICHAIN_SEARCH_API_KEY` | Multichain Search Service API key. Implemented in [#11139](https://github.com/blockscout/blockscout/pull/11139) |

Version: master
Default: (empty)
Applications: API, Indexer

| +| `MIGRATION_BACKFILL_MULTICHAIN_SEARCH_BATCH_SIZE` | Batch size of backfilling Multichain Search Service DB. Implemented in [#11139](https://github.com/blockscout/blockscout/pull/11139) |

Version: master
Default: (empty)
Applications: Indexer

| + +### Deprecated ENV Variables + + +| Variable | Required | Description | Default | Version | Need recompile | Deprecated in Version | +| ----------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------- | -------------- | --------------------- | +| `RESTRICTED_LIST` | | A comma-separated list of addresses to enable restricted access to them. | (empty) | v3.3.3+ | | v6.10.0 | +| `RESTRICTED_LIST_KEY` | | A key to access addresses listed in`RESTRICTED_LIST` variable. Can be passed via query param to the page's URL: `?key=...` | (empty) | v3.3.3+ | | v6.10.0 | + +## 6.9.2 + +### 🚀 Features + +- Xname app proxy ([#11010](https://github.com/blockscout/blockscout/issues/11010)) + +| Variable | Description | Parameters | +| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | +| `XNAME_BASE_API_URL` | [Xname API](https://xname.app/) base URL. Implemented in [#11010](https://github.com/blockscout/blockscout/pull/11010). |

Version: v6.9.2+
Default: https://gateway.xname.app
Applications: API

| +| `XNAME_API_TOKEN` | [Xname API](https://xname.app/) token. Implemented in [#11010](https://github.com/blockscout/blockscout/pull/11010). |

Version: v6.9.2+
Default: (empty)
Applications: API

+ +## 6.9.1 + +### 🐛 Bug Fixes + +- Add `auth0-forwarded-for` header in auth0 ([#11178](https://github.com/blockscout/blockscout/issues/11178)) + +### ⚙️ Miscellaneous Tasks + +- Extend recaptcha logging ([#11182](https://github.com/blockscout/blockscout/issues/11182)) + + +| Variable | Description | Parameters | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| `RE_CAPTCHA_SCORE_THRESHOLD`| Changes reCAPTCHA score threshold. Implemented in [#11182](https://github.com/blockscout/blockscout/pull/11182) |

Version: v6.9.1+
Default: 0.5
Applications: API

| + +## 6.9.0 + +### 🚀 Features + +- Support zksync foundry verification ([#11037](https://github.com/blockscout/blockscout/issues/11037)) +- Address transactions block number sorting ([#11035](https://github.com/blockscout/blockscout/issues/11035)) +- Scroll rollup: L1 fee parameters in API, `queueIndex` for L2 transactions, and L1 <->L2 messages ([#10484](https://github.com/blockscout/blockscout/issues/10484)) +- Account V2 ([#10706](https://github.com/blockscout/blockscout/issues/10706)) +- Allow to provide DB schema other than public ([#10946](https://github.com/blockscout/blockscout/issues/10946)) +- Add missing filecoin robust addresses ([#10935](https://github.com/blockscout/blockscout/issues/10935)) +- EIP-7702 support ([#10870](https://github.com/blockscout/blockscout/issues/10870)) +- Open access to re-fetch metadata button for token instances without metadata initially fetched ([#10878](https://github.com/blockscout/blockscout/issues/10878)) +- Support snake_case in metadata service ([#10722](https://github.com/blockscout/blockscout/issues/10722)) +- Token transfers list API v2 endpoint ([#10801](https://github.com/blockscout/blockscout/issues/10801)) +- Send archive balances requests to trace url ([#10820](https://github.com/blockscout/blockscout/issues/10820)) +- Add metadata info to tx interpreter request ([#10823](https://github.com/blockscout/blockscout/issues/10823)) +- Api for querying mud systems abi ([#10829](https://github.com/blockscout/blockscout/issues/10829)) +- Arbitrum L1-to-L2 messages with hashed message id ([#10751](https://github.com/blockscout/blockscout/issues/10751)) +- Support CoinMarketCap format in token supply stats ([#10853](https://github.com/blockscout/blockscout/issues/10853)) +- Address scam badge flag ([#10763](https://github.com/blockscout/blockscout/issues/10763)) +- Add verbosity to GraphQL token transfers query ([#10770](https://github.com/blockscout/blockscout/issues/10770)) +- (celo) include token information in API response for address epoch rewards ([#10831](https://github.com/blockscout/blockscout/issues/10831)) +- Add Blackfort validators ([#10744](https://github.com/blockscout/blockscout/issues/10744)) +- Retry ERC-1155 token instance metadata fetch from baseURI + tokenID ([#10766](https://github.com/blockscout/blockscout/issues/10766)) + +### 🐛 Bug Fixes + +- Fix tokennfttx API v1 endpoint ([#11083](https://github.com/blockscout/blockscout/issues/11083)) +- Fix contract codes fetching for zksync chain type ([#11055](https://github.com/blockscout/blockscout/issues/11055)) +- Filter non-traceable blocks before inserting them to internal txs fetcher queue ([#11074](https://github.com/blockscout/blockscout/issues/11074)) +- Import blocks before coin balances ([#11049](https://github.com/blockscout/blockscout/issues/11049)) +- Abi cache for non-proxied addresses ([#11065](https://github.com/blockscout/blockscout/issues/11065)) +- Celo collated gas price issue ([#11067](https://github.com/blockscout/blockscout/issues/11067)) +- Indexer memory limit for api instance ([#11066](https://github.com/blockscout/blockscout/issues/11066)) +- Fix scam badge value in some API endpoints ([#11054](https://github.com/blockscout/blockscout/issues/11054)) +- Divide by `10^decimals` when calculating token supply in CMC format ([#11036](https://github.com/blockscout/blockscout/issues/11036)) +- Rename zksync l1/l2 _tx_count columns ([#11051](https://github.com/blockscout/blockscout/issues/11051)) +- Bugs introduced in calldata decoding optimizations ([#11025](https://github.com/blockscout/blockscout/issues/11025)) +- Handle stalled async task in MapCache ([#11015](https://github.com/blockscout/blockscout/issues/11015)) +- Add tx_count, tx_types props in the response of address API v2 endpoints for compatibility with current version of the frontend ([#11012](https://github.com/blockscout/blockscout/issues/11012)) +- Chart API: add compatibility with the current frontend ([#11008](https://github.com/blockscout/blockscout/issues/11008)) +- Fix failed tests ([#11000](https://github.com/blockscout/blockscout/issues/11000)) +- Add compatibility with current frontend for some public props ([#10998](https://github.com/blockscout/blockscout/issues/10998)) +- Process foreign key violation in scam addresses assigning functionality ([#10977](https://github.com/blockscout/blockscout/issues/10977)) +- Handle import exceptions in MassiveBlocksFetcher ([#10993](https://github.com/blockscout/blockscout/issues/10993)) +- Workaround for repeating logIndex ([#10880](https://github.com/blockscout/blockscout/issues/10880)) +- Filter out nil implementations from combine_proxy_implementation_addresses_map function result ([#10943](https://github.com/blockscout/blockscout/issues/10943)) +- Delete incorrect coin balances on reorg ([#10879](https://github.com/blockscout/blockscout/issues/10879)) +- Handle delegatecall in state changes ([#10906](https://github.com/blockscout/blockscout/issues/10906)) +- Fix env. variables link in README.md ([#10898](https://github.com/blockscout/blockscout/issues/10898)) +- Add missing block timestamp in election rewards for address response ([#10907](https://github.com/blockscout/blockscout/issues/10907)) +- Add missing build arg to celo workflow ([#10895](https://github.com/blockscout/blockscout/issues/10895)) +- Do not include unrelated token transfers in `tokenTransferTxs` ([#10889](https://github.com/blockscout/blockscout/issues/10889)) +- Fix get current user in app template ([#10844](https://github.com/blockscout/blockscout/issues/10844)) +- Set `API_GRAPHQL_MAX_COMPLEXITY` in build action ([#10843](https://github.com/blockscout/blockscout/issues/10843)) +- Disable archive balances only if latest block is available ([#10851](https://github.com/blockscout/blockscout/issues/10851)) +- Dialyzer warning ([#10845](https://github.com/blockscout/blockscout/issues/10845)) +- Decode revert reason by decoding candidates from the DB ([#10827](https://github.com/blockscout/blockscout/issues/10827)) +- Filecoin stuck pending address operations ([#10832](https://github.com/blockscout/blockscout/issues/10832)) +- Sanitize replaced transactions migration ([#10784](https://github.com/blockscout/blockscout/issues/10784)) +- Repair /metrics endpoint ([#10813](https://github.com/blockscout/blockscout/issues/10813)) +- Revert the deletion of deriving current token balances ([#10811](https://github.com/blockscout/blockscout/issues/10811)) +- Clear null round blocks from missing block ranges ([#10805](https://github.com/blockscout/blockscout/issues/10805)) +- Decode addresses as checksummed ([#10777](https://github.com/blockscout/blockscout/issues/10777)) +- Preload additional sources for bytecode twin smart-contract ([#10692](https://github.com/blockscout/blockscout/issues/10692)) +- Set min query length in the search API endpoints ([#10698](https://github.com/blockscout/blockscout/issues/10698)) +- Proper handling of old batches on Arbitrum Nova ([#10786](https://github.com/blockscout/blockscout/issues/10786)) +- Get rid of heavy DB query to start Arbitrum missed messages discovery process ([#10767](https://github.com/blockscout/blockscout/issues/10767)) +- Revisited approach to choose L1 blocks to discover missing Arbitrum batches ([#10757](https://github.com/blockscout/blockscout/issues/10757)) +- Fix account db repo definition ([#10714](https://github.com/blockscout/blockscout/issues/10714)) +- Allow string IDs in JSON RPC requests ([#10759](https://github.com/blockscout/blockscout/issues/10759)) +- Filter out tokens with skip_metadata: true from token fetcher ([#10736](https://github.com/blockscout/blockscout/issues/10736)) + +### 🚜 Refactor + +- Fixate naming convention for "transaction" and "block number" entities ([#10913](https://github.com/blockscout/blockscout/issues/10913)) +- Use middleware to check if GraphQL API is enabled ([#10772](https://github.com/blockscout/blockscout/issues/10772)) + +### ⚡ Performance + +- Fix performance of Explorer.Counters.Transactions24hStats.consolidate/0 function ([#11082](https://github.com/blockscout/blockscout/issues/11082)) +- Optimize advanced filters ([#10463](https://github.com/blockscout/blockscout/issues/10463)) +- Refactor tx data decoding with fewer DB queries ([#10842](https://github.com/blockscout/blockscout/issues/10842)) + +### ⚙️ Miscellaneous Tasks + +- Update version bump script +- Remove deprecated single implementation property of the smart-contract from the API response ([#10715](https://github.com/blockscout/blockscout/issues/10715)) +- Set indexer memory limit based on system info as a fallback ([#10697](https://github.com/blockscout/blockscout/issues/10697)) +- Set user agent to metadata requests ([#10834](https://github.com/blockscout/blockscout/issues/10834)) +- Reverse internal transactions fetching order ([#10912](https://github.com/blockscout/blockscout/issues/10912)) +- Remove unused fetch_and_lock_by_hashes/1 public function +- Add shrink int txs docker image build for Celo chain type ([#10894](https://github.com/blockscout/blockscout/issues/10894)) +- Ability to work with Blockscout code base within a VSCode devcontainer ([#10838](https://github.com/blockscout/blockscout/issues/10838)) +- Add version bump script ([#10871](https://github.com/blockscout/blockscout/issues/10871)) +- Bump elixir to 1.17.3 and Erlang OTP to 27.1 ([#10284](https://github.com/blockscout/blockscout/issues/10284)) +- Reindex incorrect internal transactions migration ([#10654](https://github.com/blockscout/blockscout/issues/10654)) +- Remove old UI from base Docker image ([#10828](https://github.com/blockscout/blockscout/issues/10828)) +- Add primary key to address_tags table ([#10818](https://github.com/blockscout/blockscout/issues/10818)) +- Refactor OrderedCache preloads ([#10803](https://github.com/blockscout/blockscout/issues/10803)) +- Support non-unique log index for rsk chain type ([#10807](https://github.com/blockscout/blockscout/issues/10807)) +- Add missing symbols ([#10749](https://github.com/blockscout/blockscout/issues/10749)) + +### New ENV Variables + +| Variable | Description | Parameters | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| `INDEXER_SYSTEM_MEMORY_PERCENTAGE` | Percentage of total memory available to the VM that an application can use if `INDEXER_MEMORY_LIMIT` is not set. Implemented in [#10697](https://github.com/blockscout/blockscout/pull/10697). |

Version: v6.9.0+
Default: 60
Applications: Indexer

| +| `INDEXER_TOKEN_BALANCES_EXPONENTIAL_TIMEOUT_COEFF` | Coefficient to calculate exponential timeout. Implemented in [#10694](https://github.com/blockscout/blockscout/pull/10694). |

Version: v6.9.0+
Default: 100
Applications: Indexer

| +| `INDEXER_INTERNAL_TRANSACTIONS_FETCH_ORDER` | Order of fetching internal transactions from node. Possible values: `asc`, `desc`. Implemented in [#10912](https://github.com/blockscout/blockscout/pull/10912) |

Version: v6.9.0+
Default: asc
Applications: Indexer

| +| `HIDE_SCAM_ADDRESSES` | Hides address of EOA/smart-contract/token from search results if the value is `true` and "scam" badge is assigned to that address. Implemented in [#10763](https://github.com/blockscout/blockscout/pull/10763) |

Version: v6.9.0+
Default: (empty)
Applications: API

| +| `RE_CAPTCHA_CHECK_HOSTNAME` | Disable reCAPTCHA hostname check. More details on [reCaptcha docs](https://developers.google.com/recaptcha/docs/domain\_validation). Implemented in [#10706](https://github.com/blockscout/blockscout/pull/10706) |

Version: v6.9.0+
Default: false
Applications: API

| +| `ACCOUNT_OTP_RESEND_INTERVAL` | Time before resending otp email. Implemented in [#10706](https://github.com/blockscout/blockscout/pull/10706). |

Version: v6.9.0+
Default: 1m
Applications: API

| +| `INDEXER_SCROLL_L1_RPC` | The RPC endpoint for L1 used to fetch Deposit and Withdrawal messages. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L1_CHAIN_CONTRACT` | The address of ScrollChain contract on L1. Used to fetch batch and bundle events. Implemented in [#10819](https://github.com/blockscout/blockscout/pull/10819). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L1_BATCH_START_BLOCK` | The number of a start block on L1 to index L1 batches and bundles. If the table of batches is not empty, the process will continue indexing from the last indexed batch. Implemented in [#10819](https://github.com/blockscout/blockscout/pull/10819). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L1_MESSENGER_CONTRACT` | The address of L1 Scroll Messenger contract on L1 used to fetch Deposit and Withdrawal messages. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L1_MESSENGER_START_BLOCK` | The number of a start block on L1 to index L1 bridge messages. If the table of bridge operations is not empty, the process will continue indexing from the last indexed L1 message. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L2_MESSENGER_CONTRACT` | The address of L2 Scroll Messenger contract on L2 used to fetch Deposit and Withdrawal messages. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L2_MESSENGER_START_BLOCK` | The number of a start block on L2 to index L2 bridge messages. If the table of bridge operations is not empty, the process will continue indexing from the last indexed L2 message. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `FIRST_BLOCK`
Applications: Indexer

| +| `INDEXER_SCROLL_L2_GAS_ORACLE_CONTRACT` | The address of L1 Gas Oracle contract on L2. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `INDEXER_SCROLL_L1_ETH_GET_LOGS_RANGE_SIZE` | Block range size for eth\_getLogs request in Scroll indexer modules for Layer 1. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `250`
Applications: Indexer

| +| `INDEXER_SCROLL_L2_ETH_GET_LOGS_RANGE_SIZE` | Block range size for eth\_getLogs request in Scroll indexer modules for Layer 2. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `1000`
Applications: Indexer

| +| `SCROLL_L2_CURIE_UPGRADE_BLOCK` | L2 block number of the Curie upgrade. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_SCALAR_INIT` | Initial value for `scalar` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_OVERHEAD_INIT` | Initial value for `overhead` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_COMMIT_SCALAR_INIT` | Initial value for `commit_scalar` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_BLOB_SCALAR_INIT` | Initial value for `blob_scalar` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_BASE_FEE_INIT` | Initial value for `l1_base_fee` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `SCROLL_L1_BLOB_BASE_FEE_INIT` | Initial value for `l1_blob_base_fee` parameter. Implemented in [#10484](https://github.com/blockscout/blockscout/pull/10484). |

Version: v6.9.0+
Default: `0`
Applications: API

| +| `INDEXER_OPTIMISM_L1_DEPOSITS_TRANSACTION_TYPE` | Defines OP Deposit transaction type (numeric value) which is needed for correct L2 transaction hash calculation by the Deposits indexing module. Implemented in [#10674](https://github.com/blockscout/blockscout/pull/10674). |

Version: v6.9.0+
Default: 126
Applications: Indexer

| +| `INDEXER_DISABLE_CELO_VALIDATOR_GROUP_VOTES_FETCHER` | If set to `true`, the validator group votes fetcher will not be started. Implemented in [#10673](https://github.com/blockscout/blockscout/pull/10673). |

Version: v6.9.0+
Default: false
Applications: Indexer

| +| `FILECOIN_NETWORK_PREFIX` | Specifies the expected network prefix for Filecoin addresses. For more details, refer to the [Filecoin Spec](https://spec.filecoin.io/appendix/address/#section-appendix.address.network-prefix). Available values: `f` (for the mainnet), `t` (for testnets). Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: f
Applications: API, Indexer

| +| `BERYX_API_TOKEN` | [Beryx API](https://docs.zondax.ch/beryx-api) token, used for retrieving Filecoin native addressing information. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Required: ✅
Version: v6.9.0+
Default: (empty)
Applications: Indexer

| +| `BERYX_API_BASE_URL` | [Beryx API](https://docs.zondax.ch/beryx-api) base URL. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: https://api.zondax.ch/fil/data/v3/mainnet
Applications: Indexer

| +| `INDEXER_DISABLE_FILECOIN_ADDRESS_INFO_FETCHER` | When set to `true`, Filecoin native addressing information will not be fetched, but addresses pending fetch will still be recorded in the database. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: false
Applications: Indexer

| +| `INDEXER_FILECOIN_ADDRESS_INFO_CONCURRENCY` | Sets the maximum number of concurrent requests made to fetch Filecoin native addressing information. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: 1
Applications: Indexer

| +| `FILECOIN_PENDING_ADDRESS_OPERATIONS_MIGRATION_BATCH_SIZE` | Specifies the number of address records processed per batch during the backfill of pending address fetch operations. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: 100
Applications: Indexer

| +| `FILECOIN_PENDING_ADDRESS_OPERATIONS_MIGRATION_CONCURRENCY` | Specifies the number of concurrent processes used during the backfill of pending address fetch operations. Implemented in [#10468](https://github.com/blockscout/blockscout/pull/10468). |

Version: v6.9.0+
Default: 1
Applications: Indexer

| +| `BLACKFORT_VALIDATOR_API_URL` | Variable to define the URL of the Blackfort Validator API. Implemented in [#10744](https://github.com/blockscout/blockscout/pull/10744). |

Version: v6.9.0+
Default: (empty)
Applications: API, Indexer

| + +## 6.8.1 + +### 🚀 Features + +- Add `INDEXER_OPTIMISM_L1_DEPOSITS_TRANSACTION_TYPE` env variable ([#10674](https://github.com/blockscout/blockscout/issues/10674)) +- Support for filecoin native addresses ([#10468](https://github.com/blockscout/blockscout/issues/10468)) + +### 🐛 Bug Fixes + +- Decoding of zero fields in mud ([#10764](https://github.com/blockscout/blockscout/issues/10764)) +- Insert coin balances placeholders in internal transactions fetcher ([#10603](https://github.com/blockscout/blockscout/issues/10603)) +- Avoid key violation error in `Indexer.Fetcher.Optimism.TxnBatch` ([#10752](https://github.com/blockscout/blockscout/issues/10752)) +- Fix empty current token balances ([#10745](https://github.com/blockscout/blockscout/issues/10745)) +- Allow disabling group votes fetcher independently of epoch block fetcher ([#10673](https://github.com/blockscout/blockscout/issues/10673)) +- Fix gettext usage warning ([#10693](https://github.com/blockscout/blockscout/issues/10693)) +- Truncate token symbol in Explorer.Chain.PolygonZkevm.BridgeL1Token ([#10688](https://github.com/blockscout/blockscout/issues/10688)) + +### ⚡ Performance + +- Improve performance of transactions list page ([#10734](https://github.com/blockscout/blockscout/issues/10734)) + +### ⚙️ Miscellaneous Tasks + +- Add meta to migrations_status ([#10678](https://github.com/blockscout/blockscout/issues/10678)) +- Token balances fetcher slow queue ([#10694](https://github.com/blockscout/blockscout/issues/10694)) +- Shrink sample response for the trace in Filecoin chain type +- Extend missing balanceOf function with :unable_to_decode error ([#10713](https://github.com/blockscout/blockscout/issues/10713)) +- Fix flaking explorer tests ([#10676](https://github.com/blockscout/blockscout/issues/10676)) +- Change shrink internal transactions migration default batch_size ([#10689](https://github.com/blockscout/blockscout/issues/10689)) + +## 6.8.0 + +### 🚀 Features + +- Detect Diamond proxy pattern on unverified proxy smart-contract ([#10665](https://github.com/blockscout/blockscout/pull/10665)) +- Support smart-contract verification in zkSync ([#10500](https://github.com/blockscout/blockscout/issues/10500)) +- Add icon for secondary coin ([#10241](https://github.com/blockscout/blockscout/issues/10241)) +- Integrate Cryptorank API ([#10550](https://github.com/blockscout/blockscout/issues/10550)) +- Enhance /api/v2/smart-contracts/:hash API endpoint ([#10558](https://github.com/blockscout/blockscout/issues/10558)) +- Add method name to transactions CSV export ([#10579](https://github.com/blockscout/blockscout/issues/10579)) +- Add /api/v2/proxy/metadata/addresses endpoint ([#10585](https://github.com/blockscout/blockscout/issues/10585)) +- More descriptive status for Arbitrum message for the transaction view ([#10593](https://github.com/blockscout/blockscout/issues/10593)) +- Add internal_transactions to Tx interpreter request ([#10347](https://github.com/blockscout/blockscout/issues/10347)) +- Add token decimals to token transfers CSV export ([#10589](https://github.com/blockscout/blockscout/issues/10589)) +- Add DELETE /api/v2/import/token-info method ([#10580](https://github.com/blockscout/blockscout/issues/10580)) +- Add block number to token transfer object in API v2 endpoint ([#10591](https://github.com/blockscout/blockscout/issues/10591)) +- L1 tx associated with Arbitrum message in /api/v2/transactions/{txHash} ([#10590](https://github.com/blockscout/blockscout/issues/10590)) +- No rate limit API key ([#10515](https://github.com/blockscout/blockscout/issues/10515)) +- Support for `:celo` chain type ([#10564](https://github.com/blockscout/blockscout/issues/10564)) +- Public IPFS gateway URL ([#10511](https://github.com/blockscout/blockscout/issues/10511)) +- Add CSV_EXPORT_LIMIT env ([#10497](https://github.com/blockscout/blockscout/issues/10497)) +- Backfiller for omitted WETH transfers ([#10466](https://github.com/blockscout/blockscout/issues/10466)) +- Add INDEXER_DISABLE_REPLACED_TRANSACTION_FETCHER env ([#10485](https://github.com/blockscout/blockscout/issues/10485)) +- Revisited approach to catchup missed Arbitrum messages ([#10374](https://github.com/blockscout/blockscout/issues/10374)) +- Missing Arbitrum batches re-discovery ([#10446](https://github.com/blockscout/blockscout/issues/10446)) +- Add memory metrics for OnDemand fetchers ([#10425](https://github.com/blockscout/blockscout/issues/10425)) +- Add Celestia blobs support to Optimism batches fetcher ([#10199](https://github.com/blockscout/blockscout/issues/10199)) +- AnyTrust and Celestia support as DA for Arbitrum batches ([#10144](https://github.com/blockscout/blockscout/issues/10144)) +- Broadcast updates about new Arbitrum batches and L1-L2 messages through WebSocket ([#10272](https://github.com/blockscout/blockscout/issues/10272)) + +### 🐛 Bug Fixes + +- Logs list serialization ([#10565](https://github.com/blockscout/blockscout/issues/10565)) +- nil in OrderedCache ([#10647](https://github.com/blockscout/blockscout/pull/10647)) +- Fix for metadata detection at ipfs protocol([#10646](https://github.com/blockscout/blockscout/pull/10646)) +- Fix bug in update_replaced_transactions query ([#10634](https://github.com/blockscout/blockscout/issues/10634)) +- Fix mode dependent processes starting ([#10641](https://github.com/blockscout/blockscout/issues/10641)) +- Better detection IPFS links in NFT metadata fetcher ([#10638](https://github.com/blockscout/blockscout/issues/10638)) +- Change mode env name ([#10636](https://github.com/blockscout/blockscout/issues/10636)) +- Proper default value of gas used for dropped Arbitrum transactions ([#10619](https://github.com/blockscout/blockscout/issues/10619)) +- Fix fetch_first_trace tests ([#10618](https://github.com/blockscout/blockscout/issues/10618)) +- Add SHRINK_INTERNAL_TRANSACTIONS_ENABLED arg to Dockerfile ([#10616](https://github.com/blockscout/blockscout/issues/10616)) +- Fix raw-trace test ([#10606](https://github.com/blockscout/blockscout/issues/10606)) +- Fix internal transaction validation ([#10443](https://github.com/blockscout/blockscout/issues/10443)) +- Fix internal transactions runner test for zetachain ([#10576](https://github.com/blockscout/blockscout/issues/10576)) +- Filter out incorrect L1-to-L2 Arbitrum messages ([#10570](https://github.com/blockscout/blockscout/issues/10570)) +- Fetch contract methods decoding candidates sorted by inserted_at ([#10529](https://github.com/blockscout/blockscout/issues/10529)) +- Sanitize topic value before making db query ([#10481](https://github.com/blockscout/blockscout/issues/10481)) +- Fix :checkout_timeout error on NFT fetching ([#10429](https://github.com/blockscout/blockscout/issues/10429)) +- Proper handling confirmations for Arbitrum rollup block in the middle of a batch ([#10482](https://github.com/blockscout/blockscout/issues/10482)) +- Sanitize contractURI response ([#10479](https://github.com/blockscout/blockscout/issues/10479)) +- Use token_type from tt instead of token ([#10555](https://github.com/blockscout/blockscout/issues/10555)) +- Non-consensus logs in JSON RPC and ETH RPC APIs ([#10545](https://github.com/blockscout/blockscout/issues/10545)) +- Fix address_to_logs consensus filtering ([#10528](https://github.com/blockscout/blockscout/issues/10528)) +- Error on internal transactions CSV export ([#10495](https://github.com/blockscout/blockscout/issues/10495)) +- Extend block search range for `getblocknobytime` method ([#10475](https://github.com/blockscout/blockscout/issues/10475)) +- Move recon dep to explorer mix.exs ([#10487](https://github.com/blockscout/blockscout/issues/10487)) +- Add missing condition to fetch_min_missing_block_cache ([#10478](https://github.com/blockscout/blockscout/issues/10478)) +- Mud api format fixes ([#10362](https://github.com/blockscout/blockscout/issues/10362)) +- Add no overlapping constraint to missing_block_ranges ([#10449](https://github.com/blockscout/blockscout/issues/10449)) +- Avoid infinite loop during batch block range binary search ([#10436](https://github.com/blockscout/blockscout/issues/10436)) +- Fix "key :bytes not found in: nil" issue ([#10435](https://github.com/blockscout/blockscout/issues/10435)) +- Missing clauses in MetadataPreloader functions ([#10439](https://github.com/blockscout/blockscout/issues/10439)) +- Code compiler test ([#10454](https://github.com/blockscout/blockscout/issues/10454)) +- Include internal transactions in state change ([#10210](https://github.com/blockscout/blockscout/issues/10210)) +- Race condition in cache tests ([#10441](https://github.com/blockscout/blockscout/issues/10441)) +- Fix on-demand fetchers metrics ([#10431](https://github.com/blockscout/blockscout/issues/10431)) +- Transactions and token transfers block_consensus ([#10285](https://github.com/blockscout/blockscout/issues/10285)) +- Allow fetching image from properties -> image prop in token instance metadata ([#10380](https://github.com/blockscout/blockscout/issues/10380)) +- Filter out internal transactions belonging to reorg ([#10330](https://github.com/blockscout/blockscout/issues/10330)) +- Fix logs sorting in API v1 ([#10405](https://github.com/blockscout/blockscout/issues/10405)) +- Fix flickering transaction_estimated_count/1 test ([#10403](https://github.com/blockscout/blockscout/issues/10403)) +- Fix flickering "updates cache if initial value is zero" tests ([#10402](https://github.com/blockscout/blockscout/issues/10402)) +- /addresses empty list flickering test fix ([#10400](https://github.com/blockscout/blockscout/issues/10400)) +- Fix missing expectation in mock_beacon_storage_pointer_request ([#10399](https://github.com/blockscout/blockscout/issues/10399)) +- Fix /stats/charts/market test ([#10392](https://github.com/blockscout/blockscout/issues/10392)) +- Alternative way to detect blocks range for ArbitrumOne batches ([#10295](https://github.com/blockscout/blockscout/issues/10295)) +- Fix exchange rate flickering test ([#10383](https://github.com/blockscout/blockscout/issues/10383)) +- Fix gas price oracle flickering test ([#10381](https://github.com/blockscout/blockscout/issues/10381)) +- Fix address controller flickering test ([#10382](https://github.com/blockscout/blockscout/issues/10382)) +- Empty revert reasons in geth variant ([#10243](https://github.com/blockscout/blockscout/issues/10243)) +- Proper handling for re-discovered Arbitrum batches ([#10326](https://github.com/blockscout/blockscout/issues/10326)) +- Proper lookup of confirmed Arbitrum cross-chain messages ([#10322](https://github.com/blockscout/blockscout/issues/10322)) +- Indexer first block usage to halt Arbitrum missed messages discovery ([#10280](https://github.com/blockscout/blockscout/issues/10280)) + +### 📚 Documentation + +- Refine PR template +- Move note in README.md higher for visibility ([#10450](https://github.com/blockscout/blockscout/issues/10450)) + +### ⚡ Performance + +- Speed up worlds list query ([#10556](https://github.com/blockscout/blockscout/issues/10556)) +- Reduce LookUpSmartContractSourcesOnDemand fetcher footprint ([#10457](https://github.com/blockscout/blockscout/issues/10457)) + +### ⚙️ Miscellaneous Tasks + +- Make Dockerfile use specified user with uid/gid ([#10070](https://github.com/blockscout/blockscout/pull/10070)) +- Run shrink internal transactions migration for indexer instance only ([#10631](https://github.com/blockscout/blockscout/issues/10631)) +- Shrink internal transactions ([#10567](https://github.com/blockscout/blockscout/issues/10567)) +- Upgrade WS client ([#10407](https://github.com/blockscout/blockscout/issues/10407)) +- Add API endpoint for OP batch blocks ([#10566](https://github.com/blockscout/blockscout/issues/10566)) +- Public metrics config API endpoint ([#10568](https://github.com/blockscout/blockscout/issues/10568)) +- Add workflow to generate separate pre-release indexer/API images for Arbitrum +- Fix some comments ([#10519](https://github.com/blockscout/blockscout/issues/10519)) +- Set Geth as default JSON RPC Variant ([#10509](https://github.com/blockscout/blockscout/issues/10509)) +- Return ex_abi core lib dependency ([#10470](https://github.com/blockscout/blockscout/issues/10470)) +- Add recon dependency ([#10486](https://github.com/blockscout/blockscout/issues/10486)) +- Manage Solidityscan platform id via runtime variable ([#10473](https://github.com/blockscout/blockscout/issues/10473)) +- Add test for broadcasting fetched_bytecode message ([#10244](https://github.com/blockscout/blockscout/issues/10244)) +- Disable public metrics by default, set 1 day as default period of update ([#10469](https://github.com/blockscout/blockscout/issues/10469)) +- Move eth_bytecode_db_lookup_started event to smart contract related event handler ([#10462](https://github.com/blockscout/blockscout/issues/10462)) +- Token transfers broadcast optimization ([#10465](https://github.com/blockscout/blockscout/issues/10465)) +- Remove catchup sequence logic ([#10415](https://github.com/blockscout/blockscout/issues/10415)) +- Remove single implementation name, address from API v2 response ([#10390](https://github.com/blockscout/blockscout/issues/10390)) +- Refactor init functions to use continue if needed ([#10300](https://github.com/blockscout/blockscout/issues/10300)) +- Update buildkit builders ([#10377](https://github.com/blockscout/blockscout/issues/10377)) + +### New ENV Variables + +| Variable | Description | Parameters | +| ------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------- | +| `ETHEREUM_JSONRPC_FALLBACK_WS_URL` | The fallback WebSockets RPC endpoint used to subscribe to the `newHeads` subscription alerting the indexer to fetch new blocks. Implemented in [#10407](https://github.com/blockscout/blockscout/pull/10407). |

Version: v6.8.0+
Default: (empty)
Applications: Indexer

| +| `ETHEREUM_JSONRPC_WS_RETRY_INTERVAL` | The interval between retries of connecting to WebSocket RPC endpoint after the previous attempt is failed. Implemented in [#10407](https://github.com/blockscout/blockscout/pull/10407). |

Version: v6.8.0+
Default: 1m
Applications: Indexer

| +| `DATABASE_EVENT_URL` | Variable to define the Postgres Database endpoint that will be used by event listener process. Applicable for separate indexer and API setup. More info in related PR. Implemented in [#10164](https://github.com/blockscout/blockscout/pull/10164). |

Version: v6.8.0+
Default: (empty)
Applications: API

| +| `PUBLIC_METRICS_ENABLED` | Variable to enable running queries at /public-metrics endpoint. Implemented in [#10469](https://github.com/blockscout/blockscout/pull/10469). |

Version: v6.8.0+
Default: false
Applications: API

| +| `PUBLIC_METRICS_UPDATE_PERIOD_HOURS` | Public metrics update period in hours at /public-metrics endpoint. Implemented in [#10469](https://github.com/blockscout/blockscout/pull/10469). |

Version: v6.8.0+
Default: 24
Applications: API

| +| `SHRINK_INTERNAL_TRANSACTIONS_ENABLED` | Variable to enable internal transactions shrinking logic. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567). |

Version: v6.8.0+
Default: false
Applications: API, Indexer

| +| `SHRINK_INTERNAL_TRANSACTIONS_BATCH_SIZE` | Batch size of the shrink internal transactions migration. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567). |

Version: v6.8.0+
Default: 1000
Applications: API, Indexer

| +| `SHRINK_INTERNAL_TRANSACTIONS_CONCURRENCY` | Concurrency of the shrink internal transactions migration. Implemented in [#10567](https://github.com/blockscout/blockscout/pull/10567). |

Version: v6.8.0+
Default: 1
Applications: API, Indexer

| +| `IPFS_PUBLIC_GATEWAY_URL` | IPFS public gateway url which is used by frontend to display IPFS resources such as token instance image. |

Version: v6.8.0+
Default: https://ipfs.io/ipfs
Applications: API

| +| `INDEXER_TOKEN_INSTANCE_RETRY_MAX_REFETCH_INTERVAL` | Maximum interval between attempts to fetch token instance metadata. [Time format](backend-env-variables.md#time-format). Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). |

Version: v6.8.0+
Default: 168h
Applications: Indexer

| +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_BASE` | Base to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). |

Version: v6.8.0+
Default: 2
Applications: Indexer

| +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_COEFF` | Coefficient to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). |

Version: v6.8.0+
Default: 100
Applications: Indexer

| +| `MISSING_BALANCE_OF_TOKENS_WINDOW_SIZE` | Minimal blocks count until the next token balance request will be executed for tokens that doesn't implement `balanceOf` function. Implemented in [#10142](https://github.com/blockscout/blockscout/pull/10142) |

Version: v6.8.0+
Default: 100
Applications: Indexer

| +| `ETHEREUM_JSONRPC_GETH_ALLOW_EMPTY_TRACES` | Allow transactions to not have internal transactions. Implemented in [#10200](https://github.com/blockscout/blockscout/pull/10200) |

Version: v6.8.0+
Default: false
Applications: Indexer

| +| `INDEXER_DISABLE_REPLACED_TRANSACTION_FETCHER` | If `true`, `Indexer.Fetcher.ReplacedTransaction` fetcher doesn't run |

Version: v6.8.0+
Default: false
Applications: Indexer

| +| `SANITIZE_INCORRECT_WETH_BATCH_SIZE` | Number of token transfers to sanitize in the batch. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) |

Version: v6.8.0+
Default: 100
Applications: API, Indexer

| +| `SANITIZE_INCORRECT_WETH_CONCURRENCY` | Number of parallel sanitizing token transfer batches processing. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) |

Version: v6.8.0+
Default: 1
Applications: API, Indexer

| +| `MIGRATION_RESTORE_OMITTED_WETH_TOKEN_TRANSFERS_BATCH_SIZE` | Number of logs to process in the batch. Implemented in [#10466](https://github.com/blockscout/blockscout/pull/10466) |

Version: v6.8.0+
Default: 50
Applications: API, Indexer

| +| `MIGRATION_RESTORE_OMITTED_WETH_TOKEN_TRANSFERS_CONCURRENCY`| Number of parallel logs batches processing. Implemented in [#10466](https://github.com/blockscout/blockscout/pull/10466) |

Version: v6.8.0+
Default: 5
Applications: API, Indexer

| +| `MIGRATION_RESTORE_OMITTED_WETH_TOKEN_TRANSFERS_TIMEOUT` | Time interval between checks if queue is not empty. The same timeout multiplied by 2 used between checks if queue is not full. Implemented in [#10466](https://github.com/blockscout/blockscout/pull/10466) |

Version: v6.8.0+
Default: 250ms
Applications: API, Indexer

| +| `EXCHANGE_RATES_SOURCE` | Source for native coin and tokens price fetching. Possible values are: `coin_gecko`, `coin_market_cap` or `mobula`. |

Version: v6.8.0+
Default: coin_gecko
Applications: API, Indexer

| +| `EXCHANGE_RATES_SECONDARY_COIN_SOURCE` | Source for secondary coin fetching. Possible values are: `coin_gecko`, `coin_market_cap` or `mobula`. |

Version: v6.8.0+
Default: coin_gecko
Applications: API, Indexer

| +| `TOKEN_EXCHANGE_RATES_SOURCE` | Sets the source for tokens price fetching. Available values are `coin_gecko`, `cryptorank`. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: coin_gecko
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_SECONDARY_COIN_ID` | Sets Cryptorank coin ID for secondary coin market chart. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: (empty)
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_PLATFORM_ID` | Sets Cryptorank platform ID. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: (empty)
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_BASE_URL` | If set, overrides the Cryptorank API url. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: https://api.cryptorank.io/v1/
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_API_KEY` | Cryptorank API key. Current implementation uses dedicated beta Cryptorank API endpoint. If you want to integrate Cryptorank price fetching you should contact Cryptorank to receive an API key. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: (empty)
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_COIN_ID` | Sets Cryptorank coin ID. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: (empty)
Applications: API, Indexer

| +| `EXCHANGE_RATES_CRYPTORANK_LIMIT` | Sets the maximum number of token prices returned in a single request. Implemented in [#10550](https://github.com/blockscout/blockscout/pull/10550). |

Version: v6.8.0+
Default: 1000
Applications: API, Indexer

| +| `WHITELISTED_WETH_CONTRACTS` | Comma-separated list of smart-contract address hashes of WETH-like tokens which deposit and withdrawal events you'd like to index. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) |

Version: v6.8.0+
Default: (empty)
Applications: API, Indexer

| +| `API_NO_RATE_LIMIT_API_KEY` | API key with no rate limit. Implemented in [#10515](https://github.com/blockscout/blockscout/pull/10515) |

Version: v6.8.0+
Default: (empty)
Applications: API

| + +## 6.7.2 + +### 🐛 Bug Fixes + +- Apply Ecto set explicit ssl_opts: [verify: :verify_none] to all prod repos ([#10369](https://github.com/blockscout/blockscout/issues/10369)) +- Fix slow internal transactions query ([#10346](https://github.com/blockscout/blockscout/issues/10346)) +- Don't execute update query for empty list ([#10344](https://github.com/blockscout/blockscout/issues/10344)) +- Add rescue on tx revert reason fetching ([#10366](https://github.com/blockscout/blockscout/issues/10366)) +- Reth compatibility ([#10335](https://github.com/blockscout/blockscout/issues/10335)) +- Public metrics enabling ([#10365](https://github.com/blockscout/blockscout/issues/10365)) +- Flaky market test ([#10262](https://github.com/blockscout/blockscout/issues/10262)) + +### ⚙️ Miscellaneous Tasks + +- Bump elixir to 1.16.3 and Erlang OTP to 26.2.5.1 ([#9256](https://github.com/blockscout/blockscout/issues/9256)) + +## 6.7.1 + +### 🐛 Bug Fixes + +- Fix to_string error ([#10319](https://github.com/blockscout/blockscout/issues/10319)) +- Fix bridged tokens ([#10318](https://github.com/blockscout/blockscout/issues/10318)) +- Missing onlyTopCall option on some geth networks ([#10309](https://github.com/blockscout/blockscout/issues/10309)) + +## 6.7.0 + +### 🚀 Features + +- Public metrics toggler ([#10279](https://github.com/blockscout/blockscout/issues/10279)) +- Chain & explorer Prometheus metrics ([#10063](https://github.com/blockscout/blockscout/issues/10063)) +- API endpoint to re-fetch token instance metadata ([#10097](https://github.com/blockscout/blockscout/issues/10097)) +- *(ci)* Use remote arm64 builder ([#9468](https://github.com/blockscout/blockscout/issues/9468)) +- Adding Mobula price source ([#9971](https://github.com/blockscout/blockscout/issues/9971)) +- Get ERC-1155 token name from contractURI getter fallback ([#10187](https://github.com/blockscout/blockscout/issues/10187)) +- Push relevant entries to the front of bound queue ([#10193](https://github.com/blockscout/blockscout/issues/10193)) +- Add feature toggle for WETH filtering ([#10208](https://github.com/blockscout/blockscout/issues/10208)) +- Batch read methods requests ([#10192](https://github.com/blockscout/blockscout/issues/10192)) +- Set dynamic ttl of cache modules derived from MapCache ([#10109](https://github.com/blockscout/blockscout/issues/10109)) +- Add Fee column to Internal transactions CSV export ([#10204](https://github.com/blockscout/blockscout/issues/10204)) +- Add window between balance fetch retries for missing balanceOf tokens ([#10142](https://github.com/blockscout/blockscout/issues/10142)) +- Indexer for cross level messages on Arbitrum ([#9312](https://github.com/blockscout/blockscout/issues/9312)) + +### 🐛 Bug Fixes + +- Add token instances preloads ([#10288](https://github.com/blockscout/blockscout/issues/10288)) +- Set timeout in seconds ([#10283](https://github.com/blockscout/blockscout/issues/10283)) +- Fix ci setup repo error ([#10277](https://github.com/blockscout/blockscout/issues/10277)) +- `getsourcecode` in API v1 for verified proxy ([#10273](https://github.com/blockscout/blockscout/issues/10273)) +- Add preloads for tx summary endpoint ([#10261](https://github.com/blockscout/blockscout/issues/10261)) +- Add preloads to summary and tokens endpoints ([#10259](https://github.com/blockscout/blockscout/issues/10259)) +- Advanced filter contract creation transaction ([#10257](https://github.com/blockscout/blockscout/issues/10257)) +- Proper hex-encoded transaction hash recognition in ZkSync batches status checker ([#10255](https://github.com/blockscout/blockscout/issues/10255)) +- Pipe through api_v2_no_forgery_protect POST requests in SmartContractsApiV2Router +- Fix possible unknown UID bug ([#10240](https://github.com/blockscout/blockscout/issues/10240)) +- Batch transactions view recovered and support of proofs through ZkSync Hyperchain ([#10234](https://github.com/blockscout/blockscout/issues/10234)) +- Fix nil abi issue in get_naive_implementation_abi and get_master_copy_pattern methods ([#10239](https://github.com/blockscout/blockscout/issues/10239)) +- Add smart contracts preloads to from_address ([#10236](https://github.com/blockscout/blockscout/issues/10236)) +- Add proxy_implementations preloads ([#10225](https://github.com/blockscout/blockscout/issues/10225)) +- Cannot truncate chardata ([#10227](https://github.com/blockscout/blockscout/issues/10227)) +- ERC-1155 tokens metadata retrieve ([#10231](https://github.com/blockscout/blockscout/issues/10231)) +- Replace empty arg names with argN ([#9748](https://github.com/blockscout/blockscout/issues/9748)) +- Fix unknown UID bug ([#10226](https://github.com/blockscout/blockscout/issues/10226)) +- Fixed the field name ([#10216](https://github.com/blockscout/blockscout/issues/10216)) +- Excessive logging for Arbitrum batches confirmations ([#10205](https://github.com/blockscout/blockscout/issues/10205)) +- Filter WETH transfers in indexer + migration to delete historical incorrect WETH transfers ([#10134](https://github.com/blockscout/blockscout/issues/10134)) +- Fix flaky test +- Resolve flaky address_controller test for web +- Add the ability to allow empty traces ([#10200](https://github.com/blockscout/blockscout/issues/10200)) +- Move auth routes to general router ([#10153](https://github.com/blockscout/blockscout/issues/10153)) +- Add a separate db url for events listener ([#10164](https://github.com/blockscout/blockscout/issues/10164)) +- Fix Retry NFT fetcher ([#10146](https://github.com/blockscout/blockscout/issues/10146)) +- Add missing preloads to tokens endpoints ([#10072](https://github.com/blockscout/blockscout/issues/10072)) +- Missing nil case for revert reason ([#10136](https://github.com/blockscout/blockscout/issues/10136)) +- Hotfix for Indexer.Fetcher.Optimism.WithdrawalEvent and EthereumJSONRPC.Receipt ([#10130](https://github.com/blockscout/blockscout/issues/10130)) + +### 🚜 Refactor + +- Remove hardcoded numResults from fetch_pending_transactions_besu ([#10117](https://github.com/blockscout/blockscout/issues/10117)) + +### ⚡ Performance + +- Replace individual queries with ecto preload ([#10203](https://github.com/blockscout/blockscout/issues/10203)) + +### ⚙️ Miscellaneous Tasks + +- Refactor PendingTransactionsSanitizer to use batched requests ([#10101](https://github.com/blockscout/blockscout/issues/10101)) +- Exclude write methods from read tabs ([#10111](https://github.com/blockscout/blockscout/issues/10111)) +- Return is verified=true for verified minimal proxy pattern ([#10132](https://github.com/blockscout/blockscout/issues/10132)) +- Bump ecto_sql from 3.11.1 to 3.11.2 + +### New ENV Variables + +| Variable | Required | Description | Default | Version | Need recompile | Application | +| -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------- | -------------- | --- | +| `DATABASE_EVENT_URL` | | Variable to define the Postgres Database endpoint that will be used by event listener process. Applicable for separate indexer and API setup. More info in related PR. Implemented in [#10164](https://github.com/blockscout/blockscout/pull/10164). | (empty) | v6.7.0+ | | API | +| `INDEXER_TOKEN_INSTANCE_RETRY_MAX_REFETCH_INTERVAL` | | Maximum interval between attempts to fetch token instance metadata. [Time format](env-variables.md#time-format). Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `168h` | v6.7.0+ | | Indexer | +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_BASE` | | Base to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `2` | v6.7.0+ | | Indexer | +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_COEFF` | | Coefficient to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `100` | v6.7.0+ | | Indexer | +| `MISSING_BALANCE_OF_TOKENS_WINDOW_SIZE` | | Minimal blocks count until the next token balance request will be executed for tokens that doesn't implement `balanceOf` function. Implemented in [#10142](https://github.com/blockscout/blockscout/pull/10142) | 100 | v6.7.0+ | | Indexer | +| `ETHEREUM_JSONRPC_GETH_ALLOW_EMPTY_TRACES` | | Allow transactions to not have internal transactions. Implemented in [#10200](https://github.com/blockscout/blockscout/pull/10200) | `false` | v6.7.0+ | | Indexer | +| `SANITIZE_INCORRECT_WETH_BATCH_SIZE` | | Number of token transfers to sanitize in the batch. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) | 100 | v6.7.0+ | | API, Indexer | +| `SANITIZE_INCORRECT_WETH_CONCURRENCY` | | Number of parallel sanitizing token transfer batches processing. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) | 1 | v6.7.0+ | | API, Indexer | +| `EXCHANGE_RATES_MOBULA_SECONDARY_COIN_ID` | | Explicitly set Mobula coin ID for secondary coin market chart. | (empty) | v6.7.0+ | | API, Indexer | +| `EXCHANGE_RATES_MOBULA_API_KEY` | | Mobula API key. | (empty) | v6.7.0+ | | API, Indexer | +| `EXCHANGE_RATES_MOBULA_CHAIN_ID` | | [Mobula](https://www.mobula.io/) chain id for which token prices are fetched, see full list in the [`Documentation`](https://docs.mobula.io/blockchains/intro-blockchains). | ethereum | v6.7.0+ | | API, Indexer | +| `TOKEN_INSTANCE_METADATA_REFETCH_ON_DEMAND_FETCHER_THRESHOLD` | | An initial threshold (for exponential backoff) to re-fetch token instance's metadata on-demand. [Time format](env-variables.md#time-format). Implemented in [#10097](https://github.com/blockscout/blockscout/pull/10097). | 5s | v6.7.0+ | | API, Indexer | +| `WHITELISTED_WETH_CONTRACTS` | | Comma-separated list of smart-contract addresses hashes of WETH-like tokens which deposit and withdrawal events you'd like to index. Implemented in [#10134](https://github.com/blockscout/blockscout/pull/10134) | (empty) | v6.7.0+ | | API, Indexer| +| `WETH_TOKEN_TRANSFERS_FILTERING_ENABLED` | | Toggle for WETH token transfers filtering which was introduced in [#10134](https://github.com/blockscout/blockscout/pull/10134). Implemented in [#10208](https://github.com/blockscout/blockscout/pull/10208) | false | v6.7.0+ | | API, Indexer| + +## 6.6.0 + +### 🚀 Features + +- Implement fetch_first_trace for Geth ([#10087](https://github.com/blockscout/blockscout/issues/10087)) +- Add optional retry of NFT metadata fetch in Indexer.Fetcher.Tok… ([#10036](https://github.com/blockscout/blockscout/issues/10036)) +- Blueprint contracts support ([#10058](https://github.com/blockscout/blockscout/issues/10058)) +- Clone with immutable arguments proxy pattern ([#10039](https://github.com/blockscout/blockscout/issues/10039)) +- Improve retry NFT fetcher ([#10027](https://github.com/blockscout/blockscout/issues/10027)) +- MUD API support ([#9869](https://github.com/blockscout/blockscout/issues/9869)) +- Diamond proxy (EIP-2535) support ([#10034](https://github.com/blockscout/blockscout/issues/10034)) +- Add user ops indexer to docker compose configs ([#10010](https://github.com/blockscout/blockscout/issues/10010)) +- Save smart-contract proxy type in the DB ([#10033](https://github.com/blockscout/blockscout/issues/10033)) +- Detect EIP-1967 proxy pattern on unverified smart-contracts ([#9864](https://github.com/blockscout/blockscout/issues/9864)) +- Omit balanceOf requests for tokens that doesn't support it ([#10018](https://github.com/blockscout/blockscout/issues/10018)) +- Precompiled contracts ABI import ([#9899](https://github.com/blockscout/blockscout/issues/9899)) +- Add ENS category to search result; Add ENS to check-redirect ([#9779](https://github.com/blockscout/blockscout/issues/9779)) + +### 🐛 Bug Fixes + +- Fix certified flag in the search API v2 endpoint ([#10094](https://github.com/blockscout/blockscout/issues/10094)) +- Update Vyper inner compilers list to support all compilers ([#10091](https://github.com/blockscout/blockscout/issues/10091)) +- Add healthcheck endpoints for indexer-only setup ([#10076](https://github.com/blockscout/blockscout/issues/10076)) +- Rework revert_reason ([#9212](https://github.com/blockscout/blockscout/issues/9212)) +- Eliminate from_address_hash == #{address_hash} clause for transactions query in case of smart-contracts ([#9469](https://github.com/blockscout/blockscout/issues/9469)) +- Separate indexer setup ([#10032](https://github.com/blockscout/blockscout/issues/10032)) +- Disallow batched queries in GraphQL endpoint ([#10050](https://github.com/blockscout/blockscout/issues/10050)) +- Vyper contracts re-verification ([#10053](https://github.com/blockscout/blockscout/issues/10053)) +- Fix Unknown UID bug at smart-contract verification ([#9986](https://github.com/blockscout/blockscout/issues/9986)) +- Search for long integers ([#9651](https://github.com/blockscout/blockscout/issues/9651)) +- Don't put error to NFT metadata ([#9940](https://github.com/blockscout/blockscout/issues/9940)) +- Handle DB unavailability by PolygonZkevm.TransactionBatch fetcher ([#10031](https://github.com/blockscout/blockscout/issues/10031)) +- Fix WebSocketClient reconnect ([#9937](https://github.com/blockscout/blockscout/issues/9937)) +- Fix incorrect image_url parsing from NFT meta ([#9956](https://github.com/blockscout/blockscout/issues/9956)) + +### 🚜 Refactor + +- Improve response of address API to return multiple implementations for Diamond proxy ([#10113](https://github.com/blockscout/blockscout/pull/10113)) +- Refactor get_additional_sources/4 -> get_additional_sources/3 ([#10046](https://github.com/blockscout/blockscout/issues/10046)) +- Test database config ([#9662](https://github.com/blockscout/blockscout/issues/9662)) + +### ⚙️ Miscellaneous Tasks + +- Update hackney pool size: add new fetchers accounting ([#9941](https://github.com/blockscout/blockscout/issues/9941)) +- Bump credo from 1.7.5 to 1.7.6 ([#10060](https://github.com/blockscout/blockscout/issues/10060)) +- Bump redix from 1.5.0 to 1.5.1 ([#10059](https://github.com/blockscout/blockscout/issues/10059)) +- Bump ex_doc from 0.32.1 to 0.32.2 ([#10061](https://github.com/blockscout/blockscout/issues/10061)) +- Remove `has_methods` from `/addresses` ([#10051](https://github.com/blockscout/blockscout/issues/10051)) +- Add support of Blast-specific L1 OP withdrawal events ([#10049](https://github.com/blockscout/blockscout/issues/10049)) +- Update outdated links to ETH JSON RPC Specification in docstrings ([#10041](https://github.com/blockscout/blockscout/issues/10041)) +- Migrate to GET variant of {{metadata_url}}/api/v1/metadata ([#9994](https://github.com/blockscout/blockscout/issues/9994)) +- Bump ex_cldr_numbers from 2.32.4 to 2.33.1 ([#9978](https://github.com/blockscout/blockscout/issues/9978)) +- Bump ex_cldr from 2.38.0 to 2.38.1 ([#10009](https://github.com/blockscout/blockscout/issues/10009)) +- Bump ex_cldr_units from 3.16.5 to 3.17.0 ([#9931](https://github.com/blockscout/blockscout/issues/9931)) +- Bump style-loader in /apps/block_scout_web/assets ([#9995](https://github.com/blockscout/blockscout/issues/9995)) +- Bump mini-css-extract-plugin in /apps/block_scout_web/assets ([#9997](https://github.com/blockscout/blockscout/issues/9997)) +- Bump @babel/preset-env in /apps/block_scout_web/assets ([#9999](https://github.com/blockscout/blockscout/issues/9999)) +- Bump @amplitude/analytics-browser in /apps/block_scout_web/assets ([#10001](https://github.com/blockscout/blockscout/issues/10001)) +- Bump css-loader in /apps/block_scout_web/assets ([#10003](https://github.com/blockscout/blockscout/issues/10003)) +- Bump sweetalert2 in /apps/block_scout_web/assets ([#9998](https://github.com/blockscout/blockscout/issues/9998)) +- Bump mixpanel-browser in /apps/block_scout_web/assets ([#10000](https://github.com/blockscout/blockscout/issues/10000)) +- Bump @fortawesome/fontawesome-free ([#10002](https://github.com/blockscout/blockscout/issues/10002)) +- Bump @babel/core in /apps/block_scout_web/assets ([#9996](https://github.com/blockscout/blockscout/issues/9996)) +- Enhance indexer memory metrics ([#9984](https://github.com/blockscout/blockscout/issues/9984)) +- Bump redix from 1.4.1 to 1.5.0 ([#9977](https://github.com/blockscout/blockscout/issues/9977)) +- Bump floki from 0.36.1 to 0.36.2 ([#9979](https://github.com/blockscout/blockscout/issues/9979)) +- (old UI) Replace old Twitter icon with new 'X' ([#9641](https://github.com/blockscout/blockscout/issues/9641)) + +### New ENV Variables + +| Variable | Required | Description | Default | Version | Need recompile | +| -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ------- | -------------- | +| `DISABLE_API` | | If `true`, endpoint is not started. Set this if you want to use an indexer-only setup. Implemented in [#10032](https://github.com/blockscout/blockscout/pull/10032) | `false` | v6.6.0+ | | +| `INDEXER_TOKEN_INSTANCE_RETRY_MAX_REFETCH_INTERVAL` | | Maximum interval between attempts to fetch token instance metadata. [Time format](env-variables.md#time-format). Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `168h` | v6.6.0+ | +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_BASE` | | Base to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `2` | v6.6.0+ | +| `INDEXER_TOKEN_INSTANCE_RETRY_EXPONENTIAL_TIMEOUT_COEFF` | | Coefficient to calculate exponential timeout. Implemented in [#10027](https://github.com/blockscout/blockscout/pull/10027). | `100` | v6.6.0+ | +| `INDEXER_TOKEN_INSTANCE_REALTIME_RETRY_ENABLED` | | If `true`, `realtime` token instance fetcher will retry once on 404 and 500 error. Implemented in [#10036](https://github.com/blockscout/blockscout/pull/10036). | `false` | v6.6.0+ | +| `INDEXER_TOKEN_INSTANCE_REALTIME_RETRY_TIMEOUT` | | Timeout for retry set by `INDEXER_TOKEN_INSTANCE_REALTIME_RETRY_ENABLED`. [Time format](env-variables.md#time-format). Implemented in [#10036](https://github.com/blockscout/blockscout/pull/10036). | `5s` | v6.6.0+ | +| `TEST_DATABASE_URL` | | Variable to define the endpoint of the Postgres Database that is used during testing. Implemented in [#9662](https://github.com/blockscout/blockscout/pull/9662). | (empty) | v6.6.0+ | | +| `TEST_DATABASE_READ_ONLY_API_URL` | | Variable to define the endpoint of the Postgres Database read-only replica that is used during testing. If it is provided, most of the read queries from API v2 and UI would go through this endpoint. Implemented in [#9662](https://github.com/blockscout/blockscout/pull/9662). | (empty) | v6.6.0+ | | +| `MUD_INDEXER_ENABLED` | | If `true`, integration with [MUD](https://mud.dev/services/indexer#schemaless-indexing-with-postgresql-via-docker) is enabled. Implemented in [#9869](https://github.com/blockscout/blockscout/pull/9869) | (empty) | v6.6.0+ | | +| `MUD_DATABASE_URL` | | MUD indexer DB connection URL. | value from `DATABASE_URL` | v6.6.0+ | | +| `MUD_POOL_SIZE` | | MUD indexer DB `pool_size` | 50 | v6.6.0+ | | + +### Deprecated ENV Variables + +| Variable | Required | Description | Default | Version | Need recompile | Deprecated in Version | +| ----------------------------------------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- | -------- | -------------- | --------------------- | +| `INDEXER_TOKEN_INSTANCE_RETRY_REFETCH_INTERVAL` | | Interval between attempts to fetch token instance metadata. [Time format](env-variables.md#time-format). Implemented in [#7286](https://github.com/blockscout/blockscout/pull/7286). | `24h` | v5.1.4+ | | v6.6.0 | +| `INDEXER_INTERNAL_TRANSACTIONS_INDEXING_FINISHED_THRESHOLD` | | In the case when the 1st tx in the chain already has internal transactions, If the number of blocks in pending\_block\_operations is less than the value in this env var, Blockscout will consider, that indexing of internal transactions finished, otherwise, it will consider, that indexing is still taking place and the indexing banner will appear at the top. Implemented in [#7576](https://github.com/blockscout/blockscout/pull/7576). | 1000 | v5.2.0+ | | v6.6.0 | + +## 6.5.0 + +### 🚀 Features + +- Certified smart contracts ([#9910](https://github.com/blockscout/blockscout/issues/9910)) +- Exit on provided invalid CHAIN_TYPE ([#9904](https://github.com/blockscout/blockscout/issues/9904)) +- IPFS gateway URL extra params ([#9898](https://github.com/blockscout/blockscout/issues/9898)) +- Zerion API proxy ([#9896](https://github.com/blockscout/blockscout/issues/9896)) +- Support Optimism Fault Proofs ([#9892](https://github.com/blockscout/blockscout/issues/9892)) +- Return number of days in address's coin-balance-history-by-day API v2 endpoint ([#9806](https://github.com/blockscout/blockscout/issues/9806)) +- Allow the use of Coingecko demo account ([#9835](https://github.com/blockscout/blockscout/issues/9835)) + +### 🐛 Bug Fixes + +- Set refetch_needed: false on block import ([#9953](https://github.com/blockscout/blockscout/issues/9953)) +- `GAS_PRICE_ORACLE_NUM_OF_BLOCKS` calculation ([#9943](https://github.com/blockscout/blockscout/issues/9943)) +- Handle "null" filter in api/v1/logs-csv ([#9933](https://github.com/blockscout/blockscout/issues/9933)) +- Fix metadata preload ([#9925](https://github.com/blockscout/blockscout/issues/9925)) +- `coin_price_change_percentage` calculation ([#9774](https://github.com/blockscout/blockscout/issues/9774)) +- Remove backend dependency in microservices.yml ([#9905](https://github.com/blockscout/blockscout/issues/9905)) +- Expand memory only if it was shrunk ([#9907](https://github.com/blockscout/blockscout/issues/9907)) +- Coin balances fetcher error logging ([#9902](https://github.com/blockscout/blockscout/issues/9902)) +- Refactor catchup rudimentaries + fix graceful shutdown ([#9729](https://github.com/blockscout/blockscout/issues/9729)) +- Handle transactions with `gas_price` set to `nil` in `transaction_revert_reason/2` ([#9647](https://github.com/blockscout/blockscout/issues/9647)) +- Correct processing of sized array to view in API v2 ([#9854](https://github.com/blockscout/blockscout/issues/9854)) +- Broadcast realtime coin balances ([#9804](https://github.com/blockscout/blockscout/issues/9804)) +- Disable BlockReward fetcher for unsupported variants ([#9859](https://github.com/blockscout/blockscout/issues/9859)) +- Add non-unique log_index support in update_token_instances_owner ([#9862](https://github.com/blockscout/blockscout/issues/9862)) + +### ⚡ Performance + +- Paging function edge cases fix ([#9820](https://github.com/blockscout/blockscout/issues/9820)) +- Adjust unfetched_address_token_balances_index to fit all bound query conditions ([#9912](https://github.com/blockscout/blockscout/issues/9912)) +- Enhance index for token holders list ([#9816](https://github.com/blockscout/blockscout/issues/9816)) +- Improve performance of token page transfers tab ([#9809](https://github.com/blockscout/blockscout/issues/9809)) + +### ⚙️ Miscellaneous Tasks + +- Fix some typos in comments ([#9900](https://github.com/blockscout/blockscout/issues/9900)) +- Add queue expanding logic to memory monitor ([#9870](https://github.com/blockscout/blockscout/issues/9870)) +- Bump ex_doc from 0.31.2 to 0.32.1 ([#9889](https://github.com/blockscout/blockscout/issues/9889)) +- Separate reorgs from blocks that just need refetch ([#9674](https://github.com/blockscout/blockscout/issues/9674)) +- Unknown token in email template ([#9883](https://github.com/blockscout/blockscout/issues/9883)) +- Bump tesla from 1.8.0 to 1.9.0 ([#9886](https://github.com/blockscout/blockscout/issues/9886)) +- Bump logger_file_backend from 0.0.13 to 0.0.14 ([#9885](https://github.com/blockscout/blockscout/issues/9885)) +- Bump cloak_ecto from 1.2.0 to 1.3.0 ([#9890](https://github.com/blockscout/blockscout/issues/9890)) +- Bump ex_secp256k1 from 0.7.2 to 0.7.3 ([#9888](https://github.com/blockscout/blockscout/issues/9888)) +- Bump ex_cldr_units from 3.16.4 to 3.16.5 ([#9884](https://github.com/blockscout/blockscout/issues/9884)) +- Move `has_methods_*` fields to `/smart-contracts` endpoint response ([#9599](https://github.com/blockscout/blockscout/issues/9599)) +- Add metrics for realtime event handlers queue length ([#9822](https://github.com/blockscout/blockscout/issues/9822)) +- Increase MissingRangesCollector past check interval after the first cycle ([#9872](https://github.com/blockscout/blockscout/issues/9872)) +- Reduce number of warnings in web tests ([#9851](https://github.com/blockscout/blockscout/issues/9851)) +- Fix some typos in comments ([#9838](https://github.com/blockscout/blockscout/issues/9838)) +- Bump ex_abi from 0.7.1 to 0.7.2 ([#9841](https://github.com/blockscout/blockscout/issues/9841)) +- Remove /config/json-rpc-url API endpoint ([#9798](https://github.com/blockscout/blockscout/issues/9798)) +- Bump junit_formatter from 3.3.1 to 3.4.0 ([#9842](https://github.com/blockscout/blockscout/issues/9842)) +- Bump number from 1.0.4 to 1.0.5 ([#9843](https://github.com/blockscout/blockscout/issues/9843)) +- Bump absinthe_phoenix from 2.0.2 to 2.0.3 ([#9840](https://github.com/blockscout/blockscout/issues/9840)) +- Bump plug_cowboy from 2.7.0 to 2.7.1 ([#9844](https://github.com/blockscout/blockscout/issues/9844)) + +## 6.4.0 + +### 🚀 Features + +- Secondary coin price in `api/v2/stats` ([#9777](https://github.com/blockscout/blockscout/issues/9777)) +- Add /api/v2/blocks/{hash_or_number}/internal-transactions endpoint ([#9668](https://github.com/blockscout/blockscout/issues/9668)) +- Integrate Metadata microservice ([#9706](https://github.com/blockscout/blockscout/issues/9706)) +- Support verifier alliance and eth-bytecode-db v1.7.0 changes ([#9724](https://github.com/blockscout/blockscout/issues/9724)) +- Add rate limits to graphQL API ([#9771](https://github.com/blockscout/blockscout/issues/9771)) +- Support for internal user operation calldata decoded by microservice ([#9776](https://github.com/blockscout/blockscout/issues/9776)) +- Internal txs fetching for Arbitrum ([#9737](https://github.com/blockscout/blockscout/issues/9737)) +- Allow for custom base_url for fetching prices ([#9679](https://github.com/blockscout/blockscout/issues/9679)) +- Contract code on-demand fetcher ([#9708](https://github.com/blockscout/blockscout/issues/9708)) +- Add /api/v2/tokens/:address_hash_param/holders/csv endpoint ([#9722](https://github.com/blockscout/blockscout/issues/9722)) +- Support the 2nd version of L2<->L1 Polygon zkEVM Bridge ([#9637](https://github.com/blockscout/blockscout/issues/9637)) +- GraphQL management env vars ([#9751](https://github.com/blockscout/blockscout/issues/9751)) +- Improvements in zksync batch related transactions requests ([#9680](https://github.com/blockscout/blockscout/issues/9680)) +- Add trying to decode internal calldata for user ops ([#9675](https://github.com/blockscout/blockscout/issues/9675)) + +### 🐛 Bug Fixes + +- Apply quantity_to_integer/1 to effectiveGasPrice ([#9812](https://github.com/blockscout/blockscout/issues/9812)) +- Replace tx gas_price with effectiveGasPrice from receipt ([#9733](https://github.com/blockscout/blockscout/issues/9733)) +- Fetching GraphQL schema by GraphiQL IDE ([#9630](https://github.com/blockscout/blockscout/issues/9630)) +- Add block range check into OP Withdrawals fetcher ([#9770](https://github.com/blockscout/blockscout/issues/9770)) +- Update token's holder_count in the db from ETS module ([#9623](https://github.com/blockscout/blockscout/issues/9623)) +- Fix UTF-8 json handling in NFT metadata fetching ([#9707](https://github.com/blockscout/blockscout/issues/9707)) +- Separate ZkSync and ZkEvm readers in API controller ([#9749](https://github.com/blockscout/blockscout/issues/9749)) +- Add missing preloads ([#9520](https://github.com/blockscout/blockscout/issues/9520)) +- Change CoinGecko token image attribute priority ([#9671](https://github.com/blockscout/blockscout/issues/9671)) +- Fix Geth block tracing errors handling ([#9672](https://github.com/blockscout/blockscout/issues/9672)) +- Erc-404 token transfers null value ([#9698](https://github.com/blockscout/blockscout/issues/9698)) +- Erc-404 type stored in token balances tables ([#9700](https://github.com/blockscout/blockscout/issues/9700)) + +### 🚜 Refactor + +- `Enum.count` to `Enum.empty?` ([#9666](https://github.com/blockscout/blockscout/issues/9666)) + +### ⚡ Performance + +- Add EIP4844 blob transactions index ([#9661](https://github.com/blockscout/blockscout/issues/9661)) + +### ⚙️ Miscellaneous Tasks + +- Rework chain type matrix in CI runs ([#9704](https://github.com/blockscout/blockscout/issues/9704)) +- Exclude latest tag update from alpha releases ([#9800](https://github.com/blockscout/blockscout/issues/9800)) +- Reduce default API v1 limit by key 50 -> 10 ([#9799](https://github.com/blockscout/blockscout/issues/9799)) +- Bump autoprefixer in /apps/block_scout_web/assets ([#9786](https://github.com/blockscout/blockscout/issues/9786)) +- Remove /api/account/v1 path ([#9660](https://github.com/blockscout/blockscout/issues/9660)) +- Bump sass from 1.71.1 to 1.72.0 in /apps/block_scout_web/assets ([#9780](https://github.com/blockscout/blockscout/issues/9780)) +- Bump @babel/core in /apps/block_scout_web/assets ([#9782](https://github.com/blockscout/blockscout/issues/9782)) +- Bump webpack in /apps/block_scout_web/assets ([#9787](https://github.com/blockscout/blockscout/issues/9787)) +- Bump postcss in /apps/block_scout_web/assets ([#9785](https://github.com/blockscout/blockscout/issues/9785)) +- Bump @amplitude/analytics-browser in /apps/block_scout_web/assets ([#9788](https://github.com/blockscout/blockscout/issues/9788)) +- Bump solc from 0.8.24 to 0.8.25 in /apps/explorer ([#9789](https://github.com/blockscout/blockscout/issues/9789)) +- Bump sweetalert2 in /apps/block_scout_web/assets ([#9783](https://github.com/blockscout/blockscout/issues/9783)) +- Bump @babel/preset-env in /apps/block_scout_web/assets ([#9784](https://github.com/blockscout/blockscout/issues/9784)) +- Bump core-js in /apps/block_scout_web/assets ([#9781](https://github.com/blockscout/blockscout/issues/9781)) +- Enable Rust sc-verifier microservice by default ([#9752](https://github.com/blockscout/blockscout/issues/9752)) +- Temporarily ignore OP batches written to Celestia ([#9734](https://github.com/blockscout/blockscout/issues/9734)) +- Bump cldr_utils from 2.24.2 to 2.25.0 ([#9723](https://github.com/blockscout/blockscout/issues/9723)) +- Bump express in /apps/block_scout_web/assets ([#9725](https://github.com/blockscout/blockscout/issues/9725)) +- Bump bureaucrat from 0.2.9 to 0.2.10 ([#9669](https://github.com/blockscout/blockscout/issues/9669)) +- Fix typos ([#9693](https://github.com/blockscout/blockscout/issues/9693)) +- Bump follow-redirects from 1.15.4 to 1.15.6 in /apps/explorer ([#9648](https://github.com/blockscout/blockscout/issues/9648)) +- Bump floki from 0.36.0 to 0.36.1 ([#9670](https://github.com/blockscout/blockscout/issues/9670)) +- Use git-cliff changelog generator ([#9687](https://github.com/blockscout/blockscout/issues/9687)) + +## 6.3.0 + +### Features + +- [#9631](https://github.com/blockscout/blockscout/pull/9631) - Initial support of zksync chain type +- [#9532](https://github.com/blockscout/blockscout/pull/9532) - Add last output root size counter +- [#9511](https://github.com/blockscout/blockscout/pull/9511) - Separate errors by type in EndpointAvailabilityObserver +- [#9490](https://github.com/blockscout/blockscout/pull/9490), [#9644](https://github.com/blockscout/blockscout/pull/9644) - Add blob transaction counter and filter in block view +- [#9486](https://github.com/blockscout/blockscout/pull/9486) - Massive blocks fetcher +- [#9483](https://github.com/blockscout/blockscout/pull/9483) - Add secondary coin and transaction stats +- [#9473](https://github.com/blockscout/blockscout/pull/9473) - Add user_op interpretation +- [#9461](https://github.com/blockscout/blockscout/pull/9461) - Fetch blocks without internal transactions backwards +- [#9460](https://github.com/blockscout/blockscout/pull/9460) - Optimism chain type +- [#9409](https://github.com/blockscout/blockscout/pull/9409) - ETH JSON RPC extension +- [#9390](https://github.com/blockscout/blockscout/pull/9390) - Add stability validators +- [#8702](https://github.com/blockscout/blockscout/pull/8702) - Add OP withdrawal status to transaction page in API +- [#7200](https://github.com/blockscout/blockscout/pull/7200) - Add Optimism BedRock Deposits to the main page in API +- [#6980](https://github.com/blockscout/blockscout/pull/6980) - Add Optimism BedRock support (Txn Batches, Output Roots, Deposits, Withdrawals) + +### Fixes + +- [#9654](https://github.com/blockscout/blockscout/pull/9654) - Send timeout param in debug_traceBlockByNumber request +- [#9653](https://github.com/blockscout/blockscout/pull/9653) - Tokens import improvements +- [#9652](https://github.com/blockscout/blockscout/pull/9652) - Remove duplicated tx hashes while indexing OP batches +- [#9646](https://github.com/blockscout/blockscout/pull/9646) - Hotfix for Optimism Ecotone batch blobs indexing +- [#9640](https://github.com/blockscout/blockscout/pull/9640) - Fix no function clause matching in `BENS.item_to_address_hash_strings/1` +- [#9638](https://github.com/blockscout/blockscout/pull/9638) - Do not broadcast coin balance changes with empty value/delta +- [#9635](https://github.com/blockscout/blockscout/pull/9635) - Reset missing ranges collector to max number after the cycle is done +- [#9629](https://github.com/blockscout/blockscout/pull/9629) - Don't insert pbo for not inserted blocks +- [#9620](https://github.com/blockscout/blockscout/pull/9620) - Fix infinite retries for orphaned blobs +- [#9601](https://github.com/blockscout/blockscout/pull/9601) - Fix token instance transform for some unconventional tokens +- [#9597](https://github.com/blockscout/blockscout/pull/9597) - Update token transfers block_consensus by block_number +- [#9596](https://github.com/blockscout/blockscout/pull/9596) - Fix logging +- [#9585](https://github.com/blockscout/blockscout/pull/9585) - Fix Geth block internal transactions fetching +- [#9576](https://github.com/blockscout/blockscout/pull/9576) - Rewrite query for token transfers on address to eliminate "or" +- [#9572](https://github.com/blockscout/blockscout/pull/9572) - Fix Shibarium L1 fetcher +- [#9563](https://github.com/blockscout/blockscout/pull/9563) - Fix timestamp handler for unfinalized zkEVM batches +- [#9560](https://github.com/blockscout/blockscout/pull/9560) - Fix fetch pending transaction for hyperledger besu client +- [#9555](https://github.com/blockscout/blockscout/pull/9555) - Fix EIP-1967 beacon proxy pattern detection +- [#9529](https://github.com/blockscout/blockscout/pull/9529) - Fix `MAX_SAFE_INTEGER` frontend bug +- [#9518](https://github.com/blockscout/blockscout/pull/9518), [#9628](https://github.com/blockscout/blockscout/pull/9628) - Fix MultipleResultsError in `smart_contract_creation_tx_bytecode/1` +- [#9514](https://github.com/blockscout/blockscout/pull/9514) - Fix missing `0x` prefix for `blockNumber`, `logIndex`, `transactionIndex` and remove `transactionLogIndex` in `eth_getLogs` response. +- [#9510](https://github.com/blockscout/blockscout/pull/9510) - Fix WS false 0 token balances +- [#9512](https://github.com/blockscout/blockscout/pull/9512) - Docker-compose 2.24.6 compatibility +- [#9407](https://github.com/blockscout/blockscout/pull/9407) - ERC-404 basic support +- [#9262](https://github.com/blockscout/blockscout/pull/9262) - Fix withdrawal status +- [#9123](https://github.com/blockscout/blockscout/pull/9123) - Fixes in Optimism due to changed log topics type +- [#8831](https://github.com/blockscout/blockscout/pull/8831) - Return all OP Withdrawals bound to L2 transaction +- [#8822](https://github.com/blockscout/blockscout/pull/8822) - Hotfix for optimism_withdrawal_transaction_status function +- [#8811](https://github.com/blockscout/blockscout/pull/8811) - Consider consensus block only when retrieving OP withdrawal transaction status +- [#8364](https://github.com/blockscout/blockscout/pull/8364) - Fix API v2 for OP Withdrawals +- [#8229](https://github.com/blockscout/blockscout/pull/8229) - Fix Indexer.Fetcher.OptimismTxnBatch +- [#8208](https://github.com/blockscout/blockscout/pull/8208) - Ignore invalid frame by OP transaction batches module +- [#8122](https://github.com/blockscout/blockscout/pull/8122) - Ignore previously handled frame by OP transaction batches module +- [#7827](https://github.com/blockscout/blockscout/pull/7827) - Fix transaction batches module for L2 OP stack +- [#7776](https://github.com/blockscout/blockscout/pull/7776) - Fix transactions ordering in Indexer.Fetcher.OptimismTxnBatch +- [#7219](https://github.com/blockscout/blockscout/pull/7219) - Output L1 fields in API v2 for transaction page and fix transaction fee calculation +- [#6699](https://github.com/blockscout/blockscout/pull/6699) - L1 tx fields fix for Goerli Optimism BedRock update + +### Chore + +- [#9622](https://github.com/blockscout/blockscout/pull/9622) - Add alternative `hex.pm` mirrors +- [#9571](https://github.com/blockscout/blockscout/pull/9571) - Support Optimism Ecotone upgrade by Indexer.Fetcher.Optimism.TxnBatch module +- [#9562](https://github.com/blockscout/blockscout/pull/9562) - Add cancun evm version +- [#9506](https://github.com/blockscout/blockscout/pull/9506) - API v1 bridgedtokenlist endpoint +- [#9260](https://github.com/blockscout/blockscout/pull/9260) - Optimism Delta upgrade support by Indexer.Fetcher.OptimismTxnBatch module +- [#8740](https://github.com/blockscout/blockscout/pull/8740) - Add delay to Indexer.Fetcher.OptimismTxnBatch module initialization + +
+ Dependencies version bumps + +- [#9544](https://github.com/blockscout/blockscout/pull/9544) - Bump @babel/core from 7.23.9 to 7.24.0 in /apps/block_scout_web/assets +- [#9537](https://github.com/blockscout/blockscout/pull/9537) - Bump logger_json from 5.1.3 to 5.1.4 +- [#9550](https://github.com/blockscout/blockscout/pull/9550) - Bump xss from 1.0.14 to 1.0.15 in /apps/block_scout_web/assets +- [#9539](https://github.com/blockscout/blockscout/pull/9539) - Bump floki from 0.35.4 to 0.36.0 +- [#9551](https://github.com/blockscout/blockscout/pull/9551) - Bump @amplitude/analytics-browser from 2.5.1 to 2.5.2 in /apps/block_scout_web/assets +- [#9547](https://github.com/blockscout/blockscout/pull/9547) - Bump @babel/preset-env from 7.23.9 to 7.24.0 in /apps/block_scout_web/assets +- [#9549](https://github.com/blockscout/blockscout/pull/9549) - Bump postcss-loader from 8.1.0 to 8.1.1 in /apps/block_scout_web/assets +- [#9542](https://github.com/blockscout/blockscout/pull/9542) - Bump phoenix_ecto from 4.4.3 to 4.5.0 +- [#9546](https://github.com/blockscout/blockscout/pull/9546) - https://github.com/blockscout/blockscout/pull/9546 +- [#9545](https://github.com/blockscout/blockscout/pull/9545) - Bump chart.js from 4.4.1 to 4.4.2 in /apps/block_scout_web/assets +- [#9540](https://github.com/blockscout/blockscout/pull/9540) - Bump postgrex from 0.17.4 to 0.17.5 +- [#9543](https://github.com/blockscout/blockscout/pull/9543) - Bump ueberauth from 0.10.7 to 0.10.8 +- [#9538](https://github.com/blockscout/blockscout/pull/9538) - Bump credo from 1.7.4 to 1.7.5 +- [#9607](https://github.com/blockscout/blockscout/pull/9607) - Bump redix from 1.3.0 to 1.4.1 +- [#9606](https://github.com/blockscout/blockscout/pull/9606) - Bump ecto from 3.11.1 to 3.11.2 +- [#9605](https://github.com/blockscout/blockscout/pull/9605) - Bump ex_doc from 0.31.1 to 0.31.2 +- [#9604](https://github.com/blockscout/blockscout/pull/9604) - Bump phoenix_ecto from 4.5.0 to 4.5.1 + +
+ +## 6.2.2 + +### Features + +### Fixes + +- [#9505](https://github.com/blockscout/blockscout/pull/9505) - Add env vars for NFT sanitize migration + +### Chore + +- [#9487](https://github.com/blockscout/blockscout/pull/9487) - Add tsvector index on smart_contracts.name + +
+ Dependencies version bumps + +
+ +## 6.2.1 + +### Features + +### Fixes + +- [#9591](https://github.com/blockscout/blockscout/pull/9591) - Fix duplicated results in `methods-read` endpoint +- [#9502](https://github.com/blockscout/blockscout/pull/9502) - Add batch_size and concurrency envs for tt token type migration +- [#9493](https://github.com/blockscout/blockscout/pull/9493) - Fix API response for unknown blob hashes +- [#9484](https://github.com/blockscout/blockscout/pull/9484) - Fix read contract error +- [#9426](https://github.com/blockscout/blockscout/pull/9426) - Fix tabs counter cache bug + +### Chore + +
+ Dependencies version bumps + +- [#9478](https://github.com/blockscout/blockscout/pull/9478) - Bump floki from 0.35.3 to 0.35.4 +- [#9477](https://github.com/blockscout/blockscout/pull/9477) - Bump hammer from 6.2.0 to 6.2.1 +- [#9476](https://github.com/blockscout/blockscout/pull/9476) - Bump eslint from 8.56.0 to 8.57.0 in /apps/block_scout_web/assets +- [#9475](https://github.com/blockscout/blockscout/pull/9475) - Bump @amplitude/analytics-browser from 2.4.1 to 2.5.1 in /apps/block_scout_web/assets +- [#9474](https://github.com/blockscout/blockscout/pull/9474) - Bump sass from 1.71.0 to 1.71.1 in /apps/block_scout_web/assets +- [#9492](https://github.com/blockscout/blockscout/pull/9492) - Bump es5-ext from 0.10.62 to 0.10.64 in /apps/block_scout_web/assets + +
+ +## 6.2.0 + +### Features + +- [#9441](https://github.com/blockscout/blockscout/pull/9441) - Update BENS integration: change endpoint for resolving address in search +- [#9437](https://github.com/blockscout/blockscout/pull/9437) - Add Enum.uniq before sanitizing token transfers +- [#9403](https://github.com/blockscout/blockscout/pull/9403) - Null round handling +- [#9401](https://github.com/blockscout/blockscout/pull/9401) - Eliminate incorrect token transfers with empty token_ids +- [#9396](https://github.com/blockscout/blockscout/pull/9396) - More-Minimal Proxy support +- [#9386](https://github.com/blockscout/blockscout/pull/9386) - Filecoin JSON RPC variant +- [#9379](https://github.com/blockscout/blockscout/pull/9379) - Filter non-traceable transactions for zetachain +- [#9364](https://github.com/blockscout/blockscout/pull/9364) - Fix using of startblock/endblock in API v1 list endpoints: txlist, txlistinternal, tokentx +- [#9360](https://github.com/blockscout/blockscout/pull/9360) - Move missing ranges sanitize to a separate background migration +- [#9351](https://github.com/blockscout/blockscout/pull/9351) - Noves.fi: add proxy endpoint for describeTxs endpoint +- [#9282](https://github.com/blockscout/blockscout/pull/9282) - Add `license_type` to smart contracts +- [#9202](https://github.com/blockscout/blockscout/pull/9202) - Add base and priority fee to gas oracle response +- [#9182](https://github.com/blockscout/blockscout/pull/9182) - Fetch coin balances in async mode in realtime fetcher +- [#9168](https://github.com/blockscout/blockscout/pull/9168) - Support EIP4844 blobs indexing & API +- [#9098](https://github.com/blockscout/blockscout/pull/9098) - Polygon zkEVM Bridge indexer and API v2 extension + +### Fixes + +- [#9444](https://github.com/blockscout/blockscout/pull/9444) - Fix quick search bug +- [#9440](https://github.com/blockscout/blockscout/pull/9440) - Add `debug_traceBlockByNumber` to `method_to_url` +- [#9387](https://github.com/blockscout/blockscout/pull/9387) - Filter out Vyper contracts in Solidityscan API endpoint +- [#9377](https://github.com/blockscout/blockscout/pull/9377) - Speed up account abstraction proxy +- [#9371](https://github.com/blockscout/blockscout/pull/9371) - Filter empty values before token update +- [#9356](https://github.com/blockscout/blockscout/pull/9356) - Remove ERC-1155 logs params from coin balances params +- [#9346](https://github.com/blockscout/blockscout/pull/9346) - Process integer balance in genesis.json +- [#9317](https://github.com/blockscout/blockscout/pull/9317) - Include null gas price txs in fee calculations +- [#9315](https://github.com/blockscout/blockscout/pull/9315) - Fix manual uncle reward calculation +- [#9306](https://github.com/blockscout/blockscout/pull/9306) - Improve marking of failed internal transactions +- [#9305](https://github.com/blockscout/blockscout/pull/9305) - Add effective gas price calculation as fallback +- [#9300](https://github.com/blockscout/blockscout/pull/9300) - Fix read contract bug +- [#9226](https://github.com/blockscout/blockscout/pull/9226) - Split Indexer.Fetcher.TokenInstance.LegacySanitize + +### Chore + +- [#9439](https://github.com/blockscout/blockscout/pull/9439) - Solidityscan integration enhancements +- [#9398](https://github.com/blockscout/blockscout/pull/9398) - Improve elixir dependencies caching in CI +- [#9393](https://github.com/blockscout/blockscout/pull/9393) - Bump actions/cache to v4 +- [#9389](https://github.com/blockscout/blockscout/pull/9389) - Output user address as an object in API v2 for Shibarium +- [#9361](https://github.com/blockscout/blockscout/pull/9361) - Define BRIDGED_TOKENS_ENABLED env in Dockerfile +- [#9257](https://github.com/blockscout/blockscout/pull/9257) - Retry token instance metadata fetch from baseURI + tokenID +- [#8851](https://github.com/blockscout/blockscout/pull/8851) - Fix dialyzer and add TypedEctoSchema + +
+ Dependencies version bumps + +- [#9335](https://github.com/blockscout/blockscout/pull/9335) - Bump mini-css-extract-plugin from 2.7.7 to 2.8.0 in /apps/block_scout_web/assets +- [#9333](https://github.com/blockscout/blockscout/pull/9333) - Bump sweetalert2 from 11.10.3 to 11.10.5 in /apps/block_scout_web/assets +- [#9288](https://github.com/blockscout/blockscout/pull/9288) - Bump solc from 0.8.23 to 0.8.24 in /apps/explorer +- [#9287](https://github.com/blockscout/blockscout/pull/9287) - Bump @babel/preset-env from 7.23.8 to 7.23.9 in /apps/block_scout_web/assets +- [#9331](https://github.com/blockscout/blockscout/pull/9331) - Bump logger_json from 5.1.2 to 5.1.3 +- [#9330](https://github.com/blockscout/blockscout/pull/9330) - Bump hammer from 6.1.0 to 6.2.0 +- [#9294](https://github.com/blockscout/blockscout/pull/9294) - Bump exvcr from 0.15.0 to 0.15.1 +- [#9293](https://github.com/blockscout/blockscout/pull/9293) - Bump floki from 0.35.2 to 0.35.3 +- [#9338](https://github.com/blockscout/blockscout/pull/9338) - Bump postcss-loader from 8.0.0 to 8.1.0 in /apps/block_scout_web/assets +- [#9336](https://github.com/blockscout/blockscout/pull/9336) - Bump web3 from 1.10.3 to 1.10.4 in /apps/block_scout_web/assets +- [#9290](https://github.com/blockscout/blockscout/pull/9290) - Bump ex_doc from 0.31.0 to 0.31.1 +- [#9285](https://github.com/blockscout/blockscout/pull/9285) - Bump @amplitude/analytics-browser from 2.3.8 to 2.4.0 in /apps/block_scout_web/assets +- [#9283](https://github.com/blockscout/blockscout/pull/9283) - Bump @babel/core from 7.23.7 to 7.23.9 in /apps/block_scout_web/assets +- [#9337](https://github.com/blockscout/blockscout/pull/9337) - Bump css-loader from 6.9.1 to 6.10.0 in /apps/block_scout_web/assets +- [#9334](https://github.com/blockscout/blockscout/pull/9334) - Bump sass-loader from 14.0.0 to 14.1.0 in /apps/block_scout_web/assets +- [#9339](https://github.com/blockscout/blockscout/pull/9339) - Bump webpack from 5.89.0 to 5.90.1 in /apps/block_scout_web/assets +- [#9383](https://github.com/blockscout/blockscout/pull/9383) - Bump credo from 1.7.3 to 1.7.4 +- [#9384](https://github.com/blockscout/blockscout/pull/9384) - Bump postcss from 8.4.33 to 8.4.35 in /apps/block_scout_web/assets +- [#9385](https://github.com/blockscout/blockscout/pull/9385) - Bump mixpanel-browser from 2.48.1 to 2.49.0 in /apps/block_scout_web/assets +- [#9423](https://github.com/blockscout/blockscout/pull/9423) - Bump @amplitude/analytics-browser from 2.4.0 to 2.4.1 in /apps/block_scout_web/assets +- [#9422](https://github.com/blockscout/blockscout/pull/9422) - Bump core-js from 3.35.1 to 3.36.0 in /apps/block_scout_web/assets +- [#9424](https://github.com/blockscout/blockscout/pull/9424) - Bump webpack from 5.90.1 to 5.90.3 in /apps/block_scout_web/assets +- [#9425](https://github.com/blockscout/blockscout/pull/9425) - Bump sass-loader from 14.1.0 to 14.1.1 in /apps/block_scout_web/assets +- [#9421](https://github.com/blockscout/blockscout/pull/9421) - Bump sass from 1.70.0 to 1.71.0 in /apps/block_scout_web/assets + +
+ +## 6.1.0 + +### Features + +- [#9189](https://github.com/blockscout/blockscout/pull/9189) - User operations in the search +- [#9169](https://github.com/blockscout/blockscout/pull/9169) - Add bridged tokens functionality to master branch +- [#9158](https://github.com/blockscout/blockscout/pull/9158) - Increase shared memory for PostgreSQL containers +- [#9155](https://github.com/blockscout/blockscout/pull/9155) - Allow bypassing avg block time in proxy implementation re-fetch ttl calculation +- [#9148](https://github.com/blockscout/blockscout/pull/9148) - Add `/api/v2/utils/decode-calldata` +- [#9145](https://github.com/blockscout/blockscout/pull/9145), [#9309](https://github.com/blockscout/blockscout/pull/9309) - Proxy for Account abstraction microservice +- [#9132](https://github.com/blockscout/blockscout/pull/9132) - Fetch token image from CoinGecko +- [#9131](https://github.com/blockscout/blockscout/pull/9131) - Merge addresses stage with address referencing +- [#9120](https://github.com/blockscout/blockscout/pull/9120) - Add GET and POST `/api/v2/smart-contracts/:address_hash/audit-reports` +- [#9072](https://github.com/blockscout/blockscout/pull/9072) - Add tracing by block logic for geth +- [#9185](https://github.com/blockscout/blockscout/pull/9185), [#9068](https://github.com/blockscout/blockscout/pull/9068) - New RPC API v1 endpoints +- [#9056](https://github.com/blockscout/blockscout/pull/9056) - Noves.fi API proxy + +### Fixes + +- [#9275](https://github.com/blockscout/blockscout/pull/9275) - Tx summary endpoint fixes +- [#9261](https://github.com/blockscout/blockscout/pull/9261) - Fix pending transactions sanitizer +- [#9253](https://github.com/blockscout/blockscout/pull/9253) - Don't fetch first trace for pending transactions +- [#9241](https://github.com/blockscout/blockscout/pull/9241) - Fix log decoding bug +- [#9234](https://github.com/blockscout/blockscout/pull/9234) - Add missing filters by non-pending transactions +- [#9229](https://github.com/blockscout/blockscout/pull/9229) - Add missing filter to txlist query +- [#9195](https://github.com/blockscout/blockscout/pull/9195) - API v1 allow multiple slashes in the path before "api" +- [#9187](https://github.com/blockscout/blockscout/pull/9187) - Fix Internal Server Error on request for nonexistent token instance +- [#9178](https://github.com/blockscout/blockscout/pull/9178) - Change internal txs tracer type to opcode for Hardhat node +- [#9173](https://github.com/blockscout/blockscout/pull/9173) - Exclude genesis block from average block time calculation +- [#9143](https://github.com/blockscout/blockscout/pull/9143) - Handle nil token_ids in token transfers on render +- [#9139](https://github.com/blockscout/blockscout/pull/9139) - TokenBalanceOnDemand fixes +- [#9125](https://github.com/blockscout/blockscout/pull/9125) - Fix Explorer.Chain.Cache.GasPriceOracle.merge_fees +- [#9124](https://github.com/blockscout/blockscout/pull/9124) - EIP-1167 display multiple sources of implementation +- [#9110](https://github.com/blockscout/blockscout/pull/9110) - Improve update_in in gas tracker +- [#9109](https://github.com/blockscout/blockscout/pull/9109) - Return current exchange rate in api/v2/stats +- [#9102](https://github.com/blockscout/blockscout/pull/9102) - Fix some log topics for Suave and Polygon Edge +- [#9075](https://github.com/blockscout/blockscout/pull/9075) - Fix fetching contract codes +- [#9073](https://github.com/blockscout/blockscout/pull/9073) - Allow payable function with output appear in the Read tab +- [#9069](https://github.com/blockscout/blockscout/pull/9069) - Fetch realtime coin balances only for addresses for which it has changed + +### Chore + +- [#9323](https://github.com/blockscout/blockscout/pull/9323) - Change index creation to concurrent +- [#9322](https://github.com/blockscout/blockscout/pull/9322) - Create repo setup actions +- [#9303](https://github.com/blockscout/blockscout/pull/9303) - Add workflow for Shibarium +- [#9233](https://github.com/blockscout/blockscout/pull/9233) - "cataloged" index on tokens table +- [#9198](https://github.com/blockscout/blockscout/pull/9198) - Make Postgres@15 default option +- [#9197](https://github.com/blockscout/blockscout/pull/9197) - Add `MARKET_HISTORY_FETCH_INTERVAL` env +- [#9196](https://github.com/blockscout/blockscout/pull/9196) - Compatibility with docker-compose 2.24 +- [#9193](https://github.com/blockscout/blockscout/pull/9193) - Equalize elixir stack versions +- [#9153](https://github.com/blockscout/blockscout/pull/9153) - Enhanced unfetched token balances index + +
+ Dependencies version bumps + +- [#9119](https://github.com/blockscout/blockscout/pull/9119) - Bump sass from 1.69.6 to 1.69.7 in /apps/block_scout_web/assets +- [#9126](https://github.com/blockscout/blockscout/pull/9126) - Bump follow-redirects from 1.14.8 to 1.15.4 in /apps/explorer +- [#9116](https://github.com/blockscout/blockscout/pull/9116) - Bump ueberauth from 0.10.5 to 0.10.7 +- [#9118](https://github.com/blockscout/blockscout/pull/9118) - Bump postcss from 8.4.32 to 8.4.33 in /apps/block_scout_web/assets +- [#9161](https://github.com/blockscout/blockscout/pull/9161) - Bump sass-loader from 13.3.3 to 14.0.0 in /apps/block_scout_web/assets +- [#9160](https://github.com/blockscout/blockscout/pull/9160) - Bump copy-webpack-plugin from 11.0.0 to 12.0.1 in /apps/block_scout_web/assets +- [#9165](https://github.com/blockscout/blockscout/pull/9165) - Bump sweetalert2 from 11.10.2 to 11.10.3 in /apps/block_scout_web/assets +- [#9163](https://github.com/blockscout/blockscout/pull/9163) - Bump mini-css-extract-plugin from 2.7.6 to 2.7.7 in /apps/block_scout_web/assets +- [#9159](https://github.com/blockscout/blockscout/pull/9159) - Bump @babel/preset-env from 7.23.7 to 7.23.8 in /apps/block_scout_web/assets +- [#9162](https://github.com/blockscout/blockscout/pull/9162) - Bump style-loader from 3.3.3 to 3.3.4 in /apps/block_scout_web/assets +- [#9164](https://github.com/blockscout/blockscout/pull/9164) - Bump css-loader from 6.8.1 to 6.9.0 in /apps/block_scout_web/assets +- [#8686](https://github.com/blockscout/blockscout/pull/8686) - Bump dialyxir from 1.4.1 to 1.4.2 +- [#8861](https://github.com/blockscout/blockscout/pull/8861) - Bump briefly from 51dfe7f to 4836ba3 +- [#9117](https://github.com/blockscout/blockscout/pull/9117) - Bump credo from 1.7.1 to 1.7.3 +- [#9222](https://github.com/blockscout/blockscout/pull/9222) - Bump dialyxir from 1.4.2 to 1.4.3 +- [#9219](https://github.com/blockscout/blockscout/pull/9219) - Bump sass from 1.69.7 to 1.70.0 in /apps/block_scout_web/assets +- [#9224](https://github.com/blockscout/blockscout/pull/9224) - Bump ex_cldr_numbers from 2.32.3 to 2.32.4 +- [#9220](https://github.com/blockscout/blockscout/pull/9220) - Bump copy-webpack-plugin from 12.0.1 to 12.0.2 in /apps/block_scout_web/assets +- [#9216](https://github.com/blockscout/blockscout/pull/9216) - Bump core-js from 3.35.0 to 3.35.1 in /apps/block_scout_web/assets +- [#9218](https://github.com/blockscout/blockscout/pull/9218) - Bump postcss-loader from 7.3.4 to 8.0.0 in /apps/block_scout_web/assets +- [#9223](https://github.com/blockscout/blockscout/pull/9223) - Bump plug_cowboy from 2.6.1 to 2.6.2 +- [#9217](https://github.com/blockscout/blockscout/pull/9217) - Bump css-loader from 6.9.0 to 6.9.1 in /apps/block_scout_web/assets +- [#9215](https://github.com/blockscout/blockscout/pull/9215) - Bump css-minimizer-webpack-plugin from 5.0.1 to 6.0.0 in /apps/block_scout_web/assets +- [#9221](https://github.com/blockscout/blockscout/pull/9221) - Bump autoprefixer from 10.4.16 to 10.4.17 in /apps/block_scout_web/assets + +
+ +## 6.0.0 + +### Features + +- [#9112](https://github.com/blockscout/blockscout/pull/9112) - Add specific url for eth_call +- [#9044](https://github.com/blockscout/blockscout/pull/9044) - Expand gas price oracle functionality + +### Fixes + +- [#9113](https://github.com/blockscout/blockscout/pull/9113) - Fix migrators cache updating +- [#9101](https://github.com/blockscout/blockscout/pull/9101) - Fix migration_finished? logic +- [#9062](https://github.com/blockscout/blockscout/pull/9062) - Fix blockscout-ens integration +- [#9061](https://github.com/blockscout/blockscout/pull/9061) - Arbitrum allow tx receipt gasUsedForL1 field +- [#8812](https://github.com/blockscout/blockscout/pull/8812) - Update existing tokens type if got transfer with higher type priority + +### Chore + +- [#9055](https://github.com/blockscout/blockscout/pull/9055) - Add ASC indices for logs, token transfers, transactions +- [#9038](https://github.com/blockscout/blockscout/pull/9038) - Token type filling migrations +- [#9009](https://github.com/blockscout/blockscout/pull/9009) - Index for block refetch_needed +- [#9007](https://github.com/blockscout/blockscout/pull/9007) - Drop logs type index +- [#9006](https://github.com/blockscout/blockscout/pull/9006) - Drop unused indexes on address_current_token_balances table +- [#9005](https://github.com/blockscout/blockscout/pull/9005) - Drop unused token_id column from token_transfers table and indexes based on this column +- [#9000](https://github.com/blockscout/blockscout/pull/9000) - Change log topic type in the DB to bytea +- [#8996](https://github.com/blockscout/blockscout/pull/8996) - Refine token transfers token ids index +- [#8776](https://github.com/blockscout/blockscout/pull/8776) - DB denormalization: block consensus and timestamp in transaction table + +
+ Dependencies version bumps + +- [#9059](https://github.com/blockscout/blockscout/pull/9059) - Bump redux from 5.0.0 to 5.0.1 in /apps/block_scout_web/assets +- [#9057](https://github.com/blockscout/blockscout/pull/9057) - Bump benchee from 1.2.0 to 1.3.0 +- [#9060](https://github.com/blockscout/blockscout/pull/9060) - Bump @amplitude/analytics-browser from 2.3.7 to 2.3.8 in /apps/block_scout_web/assets +- [#9084](https://github.com/blockscout/blockscout/pull/9084) - Bump @babel/preset-env from 7.23.6 to 7.23.7 in /apps/block_scout_web/assets +- [#9083](https://github.com/blockscout/blockscout/pull/9083) - Bump @babel/core from 7.23.6 to 7.23.7 in /apps/block_scout_web/assets +- [#9086](https://github.com/blockscout/blockscout/pull/9086) - Bump core-js from 3.34.0 to 3.35.0 in /apps/block_scout_web/assets +- [#9081](https://github.com/blockscout/blockscout/pull/9081) - Bump sweetalert2 from 11.10.1 to 11.10.2 in /apps/block_scout_web/assets +- [#9085](https://github.com/blockscout/blockscout/pull/9085) - Bump moment from 2.29.4 to 2.30.1 in /apps/block_scout_web/assets +- [#9087](https://github.com/blockscout/blockscout/pull/9087) - Bump postcss-loader from 7.3.3 to 7.3.4 in /apps/block_scout_web/assets +- [#9082](https://github.com/blockscout/blockscout/pull/9082) - Bump sass-loader from 13.3.2 to 13.3.3 in /apps/block_scout_web/assets +- [#9088](https://github.com/blockscout/blockscout/pull/9088) - Bump sass from 1.69.5 to 1.69.6 in /apps/block_scout_web/assets + +
+ +## 5.4.0-beta + +### Features + +- [#9018](https://github.com/blockscout/blockscout/pull/9018) - Add SmartContractRealtimeEventHandler +- [#8997](https://github.com/blockscout/blockscout/pull/8997) - Isolate throttable error count by request method +- [#8975](https://github.com/blockscout/blockscout/pull/8975) - Add EIP-4844 compatibility (not full support yet) +- [#8972](https://github.com/blockscout/blockscout/pull/8972) - BENS integration +- [#8960](https://github.com/blockscout/blockscout/pull/8960) - TRACE_BLOCK_RANGES env var +- [#8957](https://github.com/blockscout/blockscout/pull/8957) - Add Tx Interpreter Service integration +- [#8929](https://github.com/blockscout/blockscout/pull/8929) - Shibarium Bridge indexer and API v2 extension + +### Fixes + +- [#9039](https://github.com/blockscout/blockscout/pull/9039) - Fix tx input decoding in tx summary microservice request +- [#9035](https://github.com/blockscout/blockscout/pull/9035) - Handle Postgrex errors on NFT import +- [#9015](https://github.com/blockscout/blockscout/pull/9015) - Optimize NFT owner preload +- [#9013](https://github.com/blockscout/blockscout/pull/9013) - Speed up `Indexer.Fetcher.TokenInstance.LegacySanitize` +- [#8969](https://github.com/blockscout/blockscout/pull/8969) - Support legacy paging options for address transaction endpoint +- [#8965](https://github.com/blockscout/blockscout/pull/8965) - Set poll: false for internal transactions fetcher +- [#8955](https://github.com/blockscout/blockscout/pull/8955) - Remove daily balances updating from BlockReward fetcher +- [#8846](https://github.com/blockscout/blockscout/pull/8846) - Handle nil gas_price at address view + +### Chore + +- [#9094](https://github.com/blockscout/blockscout/pull/9094) - Improve exchange rates logging +- [#9014](https://github.com/blockscout/blockscout/pull/9014) - Decrease amount of NFT in address collection: 15 -> 9 +- [#8994](https://github.com/blockscout/blockscout/pull/8994) - Refactor transactions event preloads +- [#8991](https://github.com/blockscout/blockscout/pull/8991) - Manage DB queue target via runtime env var + +
+ Dependencies version bumps + +- [#8986](https://github.com/blockscout/blockscout/pull/8986) - Bump chart.js from 4.4.0 to 4.4.1 in /apps/block_scout_web/assets +- [#8982](https://github.com/blockscout/blockscout/pull/8982) - Bump ex_doc from 0.30.9 to 0.31.0 +- [#8987](https://github.com/blockscout/blockscout/pull/8987) - Bump @babel/preset-env from 7.23.5 to 7.23.6 in /apps/block_scout_web/assets +- [#8984](https://github.com/blockscout/blockscout/pull/8984) - Bump ecto_sql from 3.11.0 to 3.11.1 +- [#8988](https://github.com/blockscout/blockscout/pull/8988) - Bump core-js from 3.33.3 to 3.34.0 in /apps/block_scout_web/assets +- [#8980](https://github.com/blockscout/blockscout/pull/8980) - Bump exvcr from 0.14.4 to 0.15.0 +- [#8985](https://github.com/blockscout/blockscout/pull/8985) - Bump @babel/core from 7.23.5 to 7.23.6 in /apps/block_scout_web/assets +- [#9020](https://github.com/blockscout/blockscout/pull/9020) - Bump eslint-plugin-import from 2.29.0 to 2.29.1 in /apps/block_scout_web/assets +- [#9021](https://github.com/blockscout/blockscout/pull/9021) - Bump eslint from 8.55.0 to 8.56.0 in /apps/block_scout_web/assets +- [#9019](https://github.com/blockscout/blockscout/pull/9019) - Bump @amplitude/analytics-browser from 2.3.6 to 2.3.7 in /apps/block_scout_web/assets + +
+ +## 5.3.3-beta + +### Features + +- [#8966](https://github.com/blockscout/blockscout/pull/8966) - Add `ACCOUNT_WATCHLIST_NOTIFICATIONS_LIMIT_FOR_30_DAYS` +- [#8908](https://github.com/blockscout/blockscout/pull/8908) - Solidityscan report API endpoint +- [#8900](https://github.com/blockscout/blockscout/pull/8900) - Add Compound proxy contract pattern +- [#8611](https://github.com/blockscout/blockscout/pull/8611) - Implement sorting of smart contracts, address transactions + +### Fixes + +- [#8959](https://github.com/blockscout/blockscout/pull/8959) - Skip failed instances in Token Instance Owner migrator +- [#8924](https://github.com/blockscout/blockscout/pull/8924) - Delete invalid current token balances in OnDemand fetcher +- [#8922](https://github.com/blockscout/blockscout/pull/8922) - Allow call type to be in lowercase +- [#8917](https://github.com/blockscout/blockscout/pull/8917) - Proxy detection hotfix in API v2 +- [#8915](https://github.com/blockscout/blockscout/pull/8915) - smart-contract: delete embeds_many relation on replace +- [#8906](https://github.com/blockscout/blockscout/pull/8906) - Fix abi encoded string argument +- [#8898](https://github.com/blockscout/blockscout/pull/8898) - Enhance method decoding by candidates from DB +- [#8882](https://github.com/blockscout/blockscout/pull/8882) - Change order of proxy contracts patterns detection: existing popular EIPs to the top of the list +- [#8707](https://github.com/blockscout/blockscout/pull/8707) - Fix native coin exchange rate with `EXCHANGE_RATES_COINGECKO_COIN_ID` + +### Chore + +- [#8956](https://github.com/blockscout/blockscout/pull/8956) - Refine docker-compose config structure +- [#8911](https://github.com/blockscout/blockscout/pull/8911) - Set client_connection_check_interval for main Postgres DB in docker-compose setup + +
+ Dependencies version bumps + +- [#8863](https://github.com/blockscout/blockscout/pull/8863) - Bump core-js from 3.33.2 to 3.33.3 in /apps/block_scout_web/assets +- [#8864](https://github.com/blockscout/blockscout/pull/8864) - Bump @amplitude/analytics-browser from 2.3.3 to 2.3.5 in /apps/block_scout_web/assets +- [#8860](https://github.com/blockscout/blockscout/pull/8860) - Bump ecto_sql from 3.10.2 to 3.11.0 +- [#8896](https://github.com/blockscout/blockscout/pull/8896) - Bump httpoison from 2.2.0 to 2.2.1 +- [#8867](https://github.com/blockscout/blockscout/pull/8867) - Bump mixpanel-browser from 2.47.0 to 2.48.1 in /apps/block_scout_web/assets +- [#8865](https://github.com/blockscout/blockscout/pull/8865) - Bump eslint from 8.53.0 to 8.54.0 in /apps/block_scout_web/assets +- [#8866](https://github.com/blockscout/blockscout/pull/8866) - Bump sweetalert2 from 11.9.0 to 11.10.1 in /apps/block_scout_web/assets +- [#8897](https://github.com/blockscout/blockscout/pull/8897) - Bump prometheus from 4.10.0 to 4.11.0 +- [#8859](https://github.com/blockscout/blockscout/pull/8859) - Bump absinthe from 1.7.5 to 1.7.6 +- [#8858](https://github.com/blockscout/blockscout/pull/8858) - Bump ex_json_schema from 0.10.1 to 0.10.2 +- [#8943](https://github.com/blockscout/blockscout/pull/8943) - Bump postgrex from 0.17.3 to 0.17.4 +- [#8939](https://github.com/blockscout/blockscout/pull/8939) - Bump @babel/core from 7.23.3 to 7.23.5 in /apps/block_scout_web/assets +- [#8936](https://github.com/blockscout/blockscout/pull/8936) - Bump eslint from 8.54.0 to 8.55.0 in /apps/block_scout_web/assets +- [#8940](https://github.com/blockscout/blockscout/pull/8940) - Bump photoswipe from 5.4.2 to 5.4.3 in /apps/block_scout_web/assets +- [#8938](https://github.com/blockscout/blockscout/pull/8938) - Bump @babel/preset-env from 7.23.3 to 7.23.5 in /apps/block_scout_web/assets +- [#8935](https://github.com/blockscout/blockscout/pull/8935) - Bump @amplitude/analytics-browser from 2.3.5 to 2.3.6 in /apps/block_scout_web/assets +- [#8937](https://github.com/blockscout/blockscout/pull/8937) - Bump redux from 4.2.1 to 5.0.0 in /apps/block_scout_web/assets +- [#8942](https://github.com/blockscout/blockscout/pull/8942) - Bump gettext from 0.23.1 to 0.24.0 +- [#8934](https://github.com/blockscout/blockscout/pull/8934) - Bump @fortawesome/fontawesome-free from 6.4.2 to 6.5.1 in /apps/block_scout_web/assets +- [#8933](https://github.com/blockscout/blockscout/pull/8933) - Bump postcss from 8.4.31 to 8.4.32 in /apps/block_scout_web/assets + +
+ +## 5.3.2-beta + +### Features + +- [#8848](https://github.com/blockscout/blockscout/pull/8848) - Add MainPageRealtimeEventHandler +- [#8821](https://github.com/blockscout/blockscout/pull/8821) - Add new events to addresses channel: `eth_bytecode_db_lookup_started` and `smart_contract_was_not_verified` +- [#8795](https://github.com/blockscout/blockscout/pull/8795) - Disable catchup indexer by env +- [#8768](https://github.com/blockscout/blockscout/pull/8768) - Add possibility to search tokens by address hash +- [#8750](https://github.com/blockscout/blockscout/pull/8750) - Support new eth-bytecode-db request metadata fields +- [#8634](https://github.com/blockscout/blockscout/pull/8634) - API v2: NFT for address +- [#8609](https://github.com/blockscout/blockscout/pull/8609) - Change logs format to JSON; Add endpoint url to the block_scout_web logging +- [#8558](https://github.com/blockscout/blockscout/pull/8558) - Add CoinBalanceDailyUpdater + +### Fixes + +- [#8891](https://github.com/blockscout/blockscout/pull/8891) - Fix average block time +- [#8869](https://github.com/blockscout/blockscout/pull/8869) - Limit TokenBalance fetcher timeout +- [#8855](https://github.com/blockscout/blockscout/pull/8855) - All transactions count at top addresses page +- [#8836](https://github.com/blockscout/blockscout/pull/8836) - Safe token update +- [#8814](https://github.com/blockscout/blockscout/pull/8814) - Improve performance for EOA addresses in `/api/v2/addresses/{address_hash}` +- [#8813](https://github.com/blockscout/blockscout/pull/8813) - Force verify twin contracts on `/api/v2/import/smart-contracts/{address_hash}` +- [#8784](https://github.com/blockscout/blockscout/pull/8784) - Fix Indexer.Transform.Addresses for non-Suave setup +- [#8770](https://github.com/blockscout/blockscout/pull/8770) - Fix for eth_getbalance API v1 endpoint when requesting latest tag +- [#8765](https://github.com/blockscout/blockscout/pull/8765) - Fix for tvl update in market history when row already exists +- [#8759](https://github.com/blockscout/blockscout/pull/8759) - Gnosis safe proxy via singleton input +- [#8752](https://github.com/blockscout/blockscout/pull/8752) - Add `TOKEN_INSTANCE_OWNER_MIGRATION_ENABLED` env +- [#8724](https://github.com/blockscout/blockscout/pull/8724) - Fix flaky account notifier test + +### Chore + +- [#8832](https://github.com/blockscout/blockscout/pull/8832) - Log more details in regards 413 error +- [#8807](https://github.com/blockscout/blockscout/pull/8807) - Smart-contract proxy detection refactoring +- [#8802](https://github.com/blockscout/blockscout/pull/8802) - Enable API v2 by default +- [#8742](https://github.com/blockscout/blockscout/pull/8742) - Merge rsk branch into the master branch +- [#8728](https://github.com/blockscout/blockscout/pull/8728) - Remove repos_list (default value for ecto repos) from Explorer.ReleaseTasks + +
+ Dependencies version bumps + +- [#8727](https://github.com/blockscout/blockscout/pull/8727) - Bump browserify-sign from 4.2.1 to 4.2.2 in /apps/block_scout_web/assets +- [#8748](https://github.com/blockscout/blockscout/pull/8748) - Bump sweetalert2 from 11.7.32 to 11.9.0 in /apps/block_scout_web/assets +- [#8747](https://github.com/blockscout/blockscout/pull/8747) - Bump core-js from 3.33.1 to 3.33.2 in /apps/block_scout_web/assets +- [#8743](https://github.com/blockscout/blockscout/pull/8743) - Bump solc from 0.8.21 to 0.8.22 in /apps/explorer +- [#8745](https://github.com/blockscout/blockscout/pull/8745) - Bump tesla from 1.7.0 to 1.8.0 +- [#8749](https://github.com/blockscout/blockscout/pull/8749) - Bump sass from 1.69.4 to 1.69.5 in /apps/block_scout_web/assets +- [#8744](https://github.com/blockscout/blockscout/pull/8744) - Bump phoenix_ecto from 4.4.2 to 4.4.3 +- [#8746](https://github.com/blockscout/blockscout/pull/8746) - Bump floki from 0.35.1 to 0.35.2 +- [#8793](https://github.com/blockscout/blockscout/pull/8793) - Bump eslint from 8.52.0 to 8.53.0 in /apps/block_scout_web/assets +- [#8792](https://github.com/blockscout/blockscout/pull/8792) - Bump cldr_utils from 2.24.1 to 2.24.2 +- [#8787](https://github.com/blockscout/blockscout/pull/8787) - Bump ex_cldr_numbers from 2.32.2 to 2.32.3 +- [#8790](https://github.com/blockscout/blockscout/pull/8790) - Bump ex_abi from 0.6.3 to 0.6.4 +- [#8788](https://github.com/blockscout/blockscout/pull/8788) - Bump ex_cldr_units from 3.16.3 to 3.16.4 +- [#8827](https://github.com/blockscout/blockscout/pull/8827) - Bump @babel/core from 7.23.2 to 7.23.3 in /apps/block_scout_web/assets +- [#8823](https://github.com/blockscout/blockscout/pull/8823) - Bump benchee from 1.1.0 to 1.2.0 +- [#8826](https://github.com/blockscout/blockscout/pull/8826) - Bump luxon from 3.4.3 to 3.4.4 in /apps/block_scout_web/assets +- [#8824](https://github.com/blockscout/blockscout/pull/8824) - Bump httpoison from 2.1.0 to 2.2.0 +- [#8828](https://github.com/blockscout/blockscout/pull/8828) - Bump @babel/preset-env from 7.23.2 to 7.23.3 in /apps/block_scout_web/assets +- [#8825](https://github.com/blockscout/blockscout/pull/8825) - Bump solc from 0.8.22 to 0.8.23 in /apps/explorer + +
+ +## 5.3.1-beta + +### Features + +- [#8717](https://github.com/blockscout/blockscout/pull/8717) - Save GasPriceOracle old prices as a fallback +- [#8696](https://github.com/blockscout/blockscout/pull/8696) - Support tokenSymbol and tokenName in `/api/v2/import/token-info` +- [#8673](https://github.com/blockscout/blockscout/pull/8673) - Add a window for balances fetching from non-archive node +- [#8651](https://github.com/blockscout/blockscout/pull/8651) - Add `stability_fee` for CHAIN_TYPE=stability +- [#8556](https://github.com/blockscout/blockscout/pull/8556) - Suave functional +- [#8528](https://github.com/blockscout/blockscout/pull/8528) - Account: add pagination + envs for limits +- [#7584](https://github.com/blockscout/blockscout/pull/7584) - Add Polygon zkEVM batches fetcher + +### Fixes + +- [#8714](https://github.com/blockscout/blockscout/pull/8714) - Fix sourcify check +- [#8708](https://github.com/blockscout/blockscout/pull/8708) - CoinBalanceHistory tab: show also tx with gasPrice & gasUsed > 0 +- [#8706](https://github.com/blockscout/blockscout/pull/8706) - Add address name updating on contract re-verification +- [#8705](https://github.com/blockscout/blockscout/pull/8705) - Fix sourcify enabled flag +- [#8695](https://github.com/blockscout/blockscout/pull/8695), [#8755](https://github.com/blockscout/blockscout/pull/8755) - Don't override internal transaction error if it's present already +- [#8685](https://github.com/blockscout/blockscout/pull/8685) - Fix db pool size exceeds Postgres max connections +- [#8678](https://github.com/blockscout/blockscout/pull/8678) - Fix `is_verified` for `/addresses` and `/smart-contracts` + +### Chore + +- [#8715](https://github.com/blockscout/blockscout/pull/8715) - Rename `wrapped` field to `requestRecord` for Suave + +
+ Dependencies version bumps + +- [#8683](https://github.com/blockscout/blockscout/pull/8683) - Bump eslint from 8.51.0 to 8.52.0 in /apps/block_scout_web/assets +- [#8689](https://github.com/blockscout/blockscout/pull/8689) - Bump ex_abi from 0.6.2 to 0.6.3 +- [#8682](https://github.com/blockscout/blockscout/pull/8682) - Bump core-js from 3.33.0 to 3.33.1 in /apps/block_scout_web/assets +- [#8680](https://github.com/blockscout/blockscout/pull/8680) - Bump web3 from 1.10.2 to 1.10.3 in /apps/block_scout_web/assets +- [#8681](https://github.com/blockscout/blockscout/pull/8681) - Bump eslint-plugin-import from 2.28.1 to 2.29.0 in /apps/block_scout_web/assets +- [#8684](https://github.com/blockscout/blockscout/pull/8684) - Bump @amplitude/analytics-browser from 2.3.2 to 2.3.3 in /apps/block_scout_web/assets +- [#8679](https://github.com/blockscout/blockscout/pull/8679) - Bump sass from 1.69.3 to 1.69.4 in /apps/block_scout_web/assets +- [#8687](https://github.com/blockscout/blockscout/pull/8687) - Bump floki from 0.35.0 to 0.35.1 +- [#8693](https://github.com/blockscout/blockscout/pull/8693) - Bump redix from 1.2.3 to 1.3.0 +- [#8688](https://github.com/blockscout/blockscout/pull/8688) - Bump ex_doc from 0.30.7 to 0.30.9 + +
+ +## 5.3.0-beta + +### Features + +- [#8512](https://github.com/blockscout/blockscout/pull/8512) - Add caching and improve `/tabs-counters` performance +- [#8472](https://github.com/blockscout/blockscout/pull/8472) - Integrate `/api/v2/bytecodes/sources:search-all` of `eth_bytecode_db` +- [#8589](https://github.com/blockscout/blockscout/pull/8589) - DefiLlama TVL source +- [#8544](https://github.com/blockscout/blockscout/pull/8544) - Fix `nil` `"structLogs"` +- [#8583](https://github.com/blockscout/blockscout/pull/8583) - Add stats widget for rootstock +- [#8542](https://github.com/blockscout/blockscout/pull/8542) - Add tracing for rootstock +- [#8561](https://github.com/blockscout/blockscout/pull/8561), [#8564](https://github.com/blockscout/blockscout/pull/8564) - Get historical market cap data from CoinGecko +- [#8543](https://github.com/blockscout/blockscout/pull/8543) - Fix polygon tracer +- [#8386](https://github.com/blockscout/blockscout/pull/8386) - Add `owner_address_hash` to the `token_instances` +- [#8530](https://github.com/blockscout/blockscout/pull/8530) - Add `block_type` to search results +- [#8180](https://github.com/blockscout/blockscout/pull/8180) - Deposits and Withdrawals for Polygon Edge +- [#7996](https://github.com/blockscout/blockscout/pull/7996) - Add CoinBalance fetcher init query limit +- [#8658](https://github.com/blockscout/blockscout/pull/8658) - Remove block consensus on import fail +- [#8575](https://github.com/blockscout/blockscout/pull/8575) - Filter token transfers on coin balances updates + +### Fixes + +- [#8661](https://github.com/blockscout/blockscout/pull/8661) - arm64-compatible docker image +- [#8649](https://github.com/blockscout/blockscout/pull/8649) - Set max 30sec JSON RPC poll frequency for realtime fetcher when WS is disabled +- [#8614](https://github.com/blockscout/blockscout/pull/8614) - Disable market history cataloger fetcher when exchange rates are disabled +- [#8613](https://github.com/blockscout/blockscout/pull/8613) - Refactor parsing of FIRST_BLOCK, LAST_BLOCK, TRACE_FIRST_BLOCK, TRACE_LAST_BLOCK env variables +- [#8572](https://github.com/blockscout/blockscout/pull/8572) - Refactor docker-compose config +- [#8552](https://github.com/blockscout/blockscout/pull/8552) - Add CHAIN_TYPE build arg to Dockerfile +- [#8550](https://github.com/blockscout/blockscout/pull/8550) - Sanitize paging params +- [#8515](https://github.com/blockscout/blockscout/pull/8515) - Fix `:error.types/0 is undefined` warning +- [#7959](https://github.com/blockscout/blockscout/pull/7959) - Fix empty batch transfers handling +- [#8513](https://github.com/blockscout/blockscout/pull/8513) - Don't override transaction status +- [#8620](https://github.com/blockscout/blockscout/pull/8620) - Fix the display of icons +- [#8594](https://github.com/blockscout/blockscout/pull/8594) - Fix TokenBalance fetcher retry logic + +### Chore + +- [#8584](https://github.com/blockscout/blockscout/pull/8584) - Store chain together with cookie hash in Redis +- [#8579](https://github.com/blockscout/blockscout/pull/8579), [#8590](https://github.com/blockscout/blockscout/pull/8590) - IPFS gateway URL runtime env variable +- [#8573](https://github.com/blockscout/blockscout/pull/8573) - Update Nginx to proxy all frontend paths +- [#8290](https://github.com/blockscout/blockscout/pull/8290) - Update Chromedriver version +- [#8536](https://github.com/blockscout/blockscout/pull/8536), [#8537](https://github.com/blockscout/blockscout/pull/8537), [#8540](https://github.com/blockscout/blockscout/pull/8540), [#8557](https://github.com/blockscout/blockscout/pull/8557) - New issue template +- [#8529](https://github.com/blockscout/blockscout/pull/8529) - Move PolygonEdge-related migration to the corresponding ecto repository +- [#8504](https://github.com/blockscout/blockscout/pull/8504) - Deploy new UI through Makefile +- [#8501](https://github.com/blockscout/blockscout/pull/8501) - Conceal secondary ports in docker compose setup + +
+ Dependencies version bumps + +- [#8508](https://github.com/blockscout/blockscout/pull/8508) - Bump sass from 1.67.0 to 1.68.0 in /apps/block_scout_web/assets +- [#8509](https://github.com/blockscout/blockscout/pull/8509) - Bump autoprefixer from 10.4.15 to 10.4.16 in /apps/block_scout_web/assets +- [#8511](https://github.com/blockscout/blockscout/pull/8511) - Bump mox from 1.0.2 to 1.1.0 +- [#8532](https://github.com/blockscout/blockscout/pull/8532) - Bump eslint from 8.49.0 to 8.50.0 in /apps/block_scout_web/assets +- [#8533](https://github.com/blockscout/blockscout/pull/8533) - Bump sweetalert2 from 11.7.28 to 11.7.29 in /apps/block_scout_web/assets +- [#8531](https://github.com/blockscout/blockscout/pull/8531) - Bump ex_cldr_units from 3.16.2 to 3.16.3 +- [#8534](https://github.com/blockscout/blockscout/pull/8534) - Bump @babel/core from 7.22.20 to 7.23.0 in /apps/block_scout_web/assets +- [#8546](https://github.com/blockscout/blockscout/pull/8546) - Bump sweetalert2 from 11.7.29 to 11.7.31 in /apps/block_scout_web/assets +- [#8553](https://github.com/blockscout/blockscout/pull/8553) - Bump @amplitude/analytics-browser from 2.3.1 to 2.3.2 in /apps/block_scout_web/assets +- [#8554](https://github.com/blockscout/blockscout/pull/8554) - https://github.com/blockscout/blockscout/pull/8554 +- [#8547](https://github.com/blockscout/blockscout/pull/8547) - Bump briefly from 678a376 to 51dfe7f +- [#8567](https://github.com/blockscout/blockscout/pull/8567) - Bump photoswipe from 5.4.1 to 5.4.2 in /apps/block_scout_web/assets +- [#8566](https://github.com/blockscout/blockscout/pull/8566) - Bump postcss from 8.4.30 to 8.4.31 in /apps/block_scout_web/assets +- [#7575](https://github.com/blockscout/blockscout/pull/7575) - Bump css-loader from 5.2.7 to 6.8.1 in /apps/block_scout_web/assets +- [#8569](https://github.com/blockscout/blockscout/pull/8569) - Bump web3 from 1.10.0 to 1.10.2 in /apps/block_scout_web/assets +- [#8570](https://github.com/blockscout/blockscout/pull/8570) - Bump core-js from 3.32.2 to 3.33.0 in /apps/block_scout_web/assets +- [#8581](https://github.com/blockscout/blockscout/pull/8581) - Bump credo from 1.7.0 to 1.7.1 +- [#8607](https://github.com/blockscout/blockscout/pull/8607) - Bump sass from 1.68.0 to 1.69.0 in /apps/block_scout_web/assets +- [#8606](https://github.com/blockscout/blockscout/pull/8606) - Bump highlight.js from 11.8.0 to 11.9.0 in /apps/block_scout_web/assets +- [#8605](https://github.com/blockscout/blockscout/pull/8605) - Bump eslint from 8.50.0 to 8.51.0 in /apps/block_scout_web/assets +- [#8608](https://github.com/blockscout/blockscout/pull/8608) - Bump sweetalert2 from 11.7.31 to 11.7.32 in /apps/block_scout_web/assets +- [#8510](https://github.com/blockscout/blockscout/pull/8510) - Bump hackney from 1.18.1 to 1.19.1 +- [#8637](https://github.com/blockscout/blockscout/pull/8637) - Bump @babel/preset-env from 7.22.20 to 7.23.2 in /apps/block_scout_web/assets +- [#8639](https://github.com/blockscout/blockscout/pull/8639) - Bump sass from 1.69.0 to 1.69.3 in /apps/block_scout_web/assets +- [#8643](https://github.com/blockscout/blockscout/pull/8643) - Bump floki from 0.34.3 to 0.35.0 +- [#8641](https://github.com/blockscout/blockscout/pull/8641) - Bump ex_cldr from 2.37.2 to 2.37.4 +- [#8646](https://github.com/blockscout/blockscout/pull/8646) - Bump @babel/traverse from 7.23.0 to 7.23.2 in /apps/block_scout_web/assets +- [#8636](https://github.com/blockscout/blockscout/pull/8636) - Bump @babel/core from 7.23.0 to 7.23.2 in /apps/block_scout_web/assets +- [#8645](https://github.com/blockscout/blockscout/pull/8645) - Bump ex_doc from 0.30.6 to 0.30.7 +- [#8638](https://github.com/blockscout/blockscout/pull/8638) - Bump webpack from 5.88.2 to 5.89.0 in /apps/block_scout_web/assets +- [#8640](https://github.com/blockscout/blockscout/pull/8640) - Bump hackney from 1.19.1 to 1.20.1 + +
+ +## 5.2.3-beta + +### Features + +- [#8382](https://github.com/blockscout/blockscout/pull/8382) - Add sitemap.xml +- [#8313](https://github.com/blockscout/blockscout/pull/8313) - Add batches to TokenInstance fetchers +- [#8285](https://github.com/blockscout/blockscout/pull/8285), [#8399](https://github.com/blockscout/blockscout/pull/8399) - Add CG/CMC coin price sources +- [#8181](https://github.com/blockscout/blockscout/pull/8181) - Insert current token balances placeholders along with historical +- [#8210](https://github.com/blockscout/blockscout/pull/8210) - Drop address foreign keys +- [#8292](https://github.com/blockscout/blockscout/pull/8292) - Add ETHEREUM_JSONRPC_WAIT_PER_TIMEOUT env var +- [#8269](https://github.com/blockscout/blockscout/pull/8269) - Don't push back to sequence on catchup exception +- [#8362](https://github.com/blockscout/blockscout/pull/8362), [#8398](https://github.com/blockscout/blockscout/pull/8398) - Drop token balances tokens foreign key + +### Fixes + +- [#8446](https://github.com/blockscout/blockscout/pull/8446) - Fix market cap calculation in case of CMC +- [#8431](https://github.com/blockscout/blockscout/pull/8431) - Fix contracts' output decoding +- [#8354](https://github.com/blockscout/blockscout/pull/8354) - Hotfix for proper addresses' tokens displaying +- [#8350](https://github.com/blockscout/blockscout/pull/8350) - Add Base Mainnet support for tx actions +- [#8282](https://github.com/blockscout/blockscout/pull/8282) - NFT fetcher improvements +- [#8287](https://github.com/blockscout/blockscout/pull/8287) - Add separate hackney pool for TokenInstance fetchers +- [#8293](https://github.com/blockscout/blockscout/pull/8293) - Add ETHEREUM_JSONRPC_TRACE_URL for Geth in docker-compose.yml +- [#8240](https://github.com/blockscout/blockscout/pull/8240) - Refactor and fix paging params in API v2 +- [#8242](https://github.com/blockscout/blockscout/pull/8242) - Fixing visualizer service CORS issue when running docker-compose +- [#8355](https://github.com/blockscout/blockscout/pull/8355) - Fix current token balances redefining +- [#8338](https://github.com/blockscout/blockscout/pull/8338) - Fix reorgs query +- [#8413](https://github.com/blockscout/blockscout/pull/8413) - Put error in last call for STOP opcode +- [#8447](https://github.com/blockscout/blockscout/pull/8447) - Fix reorg transactions + +### Chore + +- [#8494](https://github.com/blockscout/blockscout/pull/8494) - Add release announcement in Slack +- [#8493](https://github.com/blockscout/blockscout/pull/8493) - Fix arm docker image build +- [#8478](https://github.com/blockscout/blockscout/pull/8478) - Set integration with Blockscout's eth bytecode DB endpoint by default and other enhancements +- [#8442](https://github.com/blockscout/blockscout/pull/8442) - Unify burn address definition +- [#8321](https://github.com/blockscout/blockscout/pull/8321) - Add curl into resulting Docker image +- [#8319](https://github.com/blockscout/blockscout/pull/8319) - Add MIX_ENV: 'prod' to docker-compose +- [#8281](https://github.com/blockscout/blockscout/pull/8281) - Planned removal of duplicate API endpoints: for CSV export and GraphQL + +
+ Dependencies version bumps + +- [#8244](https://github.com/blockscout/blockscout/pull/8244) - Bump core-js from 3.32.0 to 3.32.1 in /apps/block_scout_web/assets +- [#8243](https://github.com/blockscout/blockscout/pull/8243) - Bump sass from 1.65.1 to 1.66.0 in /apps/block_scout_web/assets +- [#8259](https://github.com/blockscout/blockscout/pull/8259) - Bump sweetalert2 from 11.7.23 to 11.7.27 in /apps/block_scout_web/assets +- [#8258](https://github.com/blockscout/blockscout/pull/8258) - Bump sass from 1.66.0 to 1.66.1 in /apps/block_scout_web/assets +- [#8260](https://github.com/blockscout/blockscout/pull/8260) - Bump jest from 29.6.2 to 29.6.3 in /apps/block_scout_web/assets +- [#8261](https://github.com/blockscout/blockscout/pull/8261) - Bump eslint-plugin-import from 2.28.0 to 2.28.1 in /apps/block_scout_web/assets +- [#8262](https://github.com/blockscout/blockscout/pull/8262) - Bump jest-environment-jsdom from 29.6.2 to 29.6.3 in /apps/block_scout_web/assets +- [#8275](https://github.com/blockscout/blockscout/pull/8275) - Bump ecto_sql from 3.10.1 to 3.10.2 +- [#8284](https://github.com/blockscout/blockscout/pull/8284) - Bump luxon from 3.4.0 to 3.4.1 in /apps/block_scout_web/assets +- [#8294](https://github.com/blockscout/blockscout/pull/8294) - Bump chart.js from 4.3.3 to 4.4.0 in /apps/block_scout_web/assets +- [#8295](https://github.com/blockscout/blockscout/pull/8295) - Bump jest from 29.6.3 to 29.6.4 in /apps/block_scout_web/assets +- [#8296](https://github.com/blockscout/blockscout/pull/8296) - Bump jest-environment-jsdom from 29.6.3 to 29.6.4 in /apps/block_scout_web/assets +- [#8297](https://github.com/blockscout/blockscout/pull/8297) - Bump @babel/core from 7.22.10 to 7.22.11 in /apps/block_scout_web/assets +- [#8305](https://github.com/blockscout/blockscout/pull/8305) - Bump @amplitude/analytics-browser from 2.2.0 to 2.2.1 in /apps/block_scout_web/assets +- [#8342](https://github.com/blockscout/blockscout/pull/8342) - Bump postgrex from 0.17.2 to 0.17.3 +- [#8341](https://github.com/blockscout/blockscout/pull/8341) - Bump hackney from 1.18.1 to 1.18.2 +- [#8343](https://github.com/blockscout/blockscout/pull/8343) - Bump @amplitude/analytics-browser from 2.2.1 to 2.2.2 in /apps/block_scout_web/assets +- [#8344](https://github.com/blockscout/blockscout/pull/8344) - Bump postcss from 8.4.28 to 8.4.29 in /apps/block_scout_web/assets +- [#8330](https://github.com/blockscout/blockscout/pull/8330) - Bump bignumber.js from 9.1.1 to 9.1.2 in /apps/block_scout_web/assets +- [#8332](https://github.com/blockscout/blockscout/pull/8332) - Bump jquery from 3.7.0 to 3.7.1 in /apps/block_scout_web/assets +- [#8329](https://github.com/blockscout/blockscout/pull/8329) - Bump viewerjs from 1.11.4 to 1.11.5 in /apps/block_scout_web/assets +- [#8328](https://github.com/blockscout/blockscout/pull/8328) - Bump eslint from 8.47.0 to 8.48.0 in /apps/block_scout_web/assets +- [#8325](https://github.com/blockscout/blockscout/pull/8325) - Bump exvcr from 0.14.3 to 0.14.4 +- [#8323](https://github.com/blockscout/blockscout/pull/8323) - Bump ex_doc from 0.30.5 to 0.30.6 +- [#8322](https://github.com/blockscout/blockscout/pull/8322) - Bump dialyxir from 1.3.0 to 1.4.0 +- [#8326](https://github.com/blockscout/blockscout/pull/8326) - Bump comeonin from 5.3.3 to 5.4.0 +- [#8331](https://github.com/blockscout/blockscout/pull/8331) - Bump luxon from 3.4.1 to 3.4.2 in /apps/block_scout_web/assets +- [#8324](https://github.com/blockscout/blockscout/pull/8324) - Bump spandex_datadog from 1.3.0 to 1.4.0 +- [#8327](https://github.com/blockscout/blockscout/pull/8327) - Bump bcrypt_elixir from 3.0.1 to 3.1.0 +- [#8358](https://github.com/blockscout/blockscout/pull/8358) - Bump @babel/preset-env from 7.22.10 to 7.22.14 in /apps/block_scout_web/assets +- [#8365](https://github.com/blockscout/blockscout/pull/8365) - Bump dialyxir from 1.4.0 to 1.4.1 +- [#8374](https://github.com/blockscout/blockscout/pull/8374) - Bump @amplitude/analytics-browser from 2.2.2 to 2.2.3 in /apps/block_scout_web/assets +- [#8373](https://github.com/blockscout/blockscout/pull/8373) - Bump ex_secp256k1 from 0.7.0 to 0.7.1 +- [#8391](https://github.com/blockscout/blockscout/pull/8391) - Bump @babel/preset-env from 7.22.14 to 7.22.15 in /apps/block_scout_web/assets +- [#8390](https://github.com/blockscout/blockscout/pull/8390) - Bump photoswipe from 5.3.8 to 5.3.9 in /apps/block_scout_web/assets +- [#8389](https://github.com/blockscout/blockscout/pull/8389) - Bump @babel/core from 7.22.11 to 7.22.15 in /apps/block_scout_web/assets +- [#8392](https://github.com/blockscout/blockscout/pull/8392) - Bump ex_cldr_numbers from 2.31.3 to 2.32.0 +- [#8400](https://github.com/blockscout/blockscout/pull/8400) - Bump ex_secp256k1 from 0.7.1 to 0.7.2 +- [#8405](https://github.com/blockscout/blockscout/pull/8405) - Bump luxon from 3.4.2 to 3.4.3 in /apps/block_scout_web/assets +- [#8404](https://github.com/blockscout/blockscout/pull/8404) - Bump ex_abi from 0.6.0 to 0.6.1 +- [#8410](https://github.com/blockscout/blockscout/pull/8410) - Bump core-js from 3.32.1 to 3.32.2 in /apps/block_scout_web/assets +- [#8418](https://github.com/blockscout/blockscout/pull/8418) - Bump url from 0.11.1 to 0.11.2 in /apps/block_scout_web/assets +- [#8416](https://github.com/blockscout/blockscout/pull/8416) - Bump @babel/core from 7.22.15 to 7.22.17 in /apps/block_scout_web/assets +- [#8419](https://github.com/blockscout/blockscout/pull/8419) - Bump assert from 2.0.0 to 2.1.0 in /apps/block_scout_web/assets +- [#8417](https://github.com/blockscout/blockscout/pull/8417) - Bump photoswipe from 5.3.9 to 5.4.0 in /apps/block_scout_web/assets +- [#8441](https://github.com/blockscout/blockscout/pull/8441) - Bump eslint from 8.48.0 to 8.49.0 in /apps/block_scout_web/assets +- [#8439](https://github.com/blockscout/blockscout/pull/8439) - Bump ex_cldr_numbers from 2.32.0 to 2.32.1 +- [#8444](https://github.com/blockscout/blockscout/pull/8444) - Bump ex_cldr_numbers from 2.32.1 to 2.32.2 +- [#8445](https://github.com/blockscout/blockscout/pull/8445) - Bump ex_abi from 0.6.1 to 0.6.2 +- [#8450](https://github.com/blockscout/blockscout/pull/8450) - Bump jest-environment-jsdom from 29.6.4 to 29.7.0 in /apps/block_scout_web/assets +- [#8451](https://github.com/blockscout/blockscout/pull/8451) - Bump jest from 29.6.4 to 29.7.0 in /apps/block_scout_web/assets +- [#8463](https://github.com/blockscout/blockscout/pull/8463) - Bump sass from 1.66.1 to 1.67.0 in /apps/block_scout_web/assets +- [#8464](https://github.com/blockscout/blockscout/pull/8464) - Bump @babel/core from 7.22.17 to 7.22.19 in /apps/block_scout_web/assets +- [#8462](https://github.com/blockscout/blockscout/pull/8462) - Bump sweetalert2 from 11.7.27 to 11.7.28 in /apps/block_scout_web/assets +- [#8479](https://github.com/blockscout/blockscout/pull/8479) - Bump photoswipe from 5.4.0 to 5.4.1 in /apps/block_scout_web/assets +- [#8483](https://github.com/blockscout/blockscout/pull/8483) - Bump @amplitude/analytics-browser from 2.2.3 to 2.3.1 in /apps/block_scout_web/assets +- [#8481](https://github.com/blockscout/blockscout/pull/8481) - Bump @babel/preset-env from 7.22.15 to 7.22.20 in /apps/block_scout_web/assets +- [#8480](https://github.com/blockscout/blockscout/pull/8480) - Bump @babel/core from 7.22.19 to 7.22.20 in /apps/block_scout_web/assets +- [#8482](https://github.com/blockscout/blockscout/pull/8482) - Bump viewerjs from 1.11.5 to 1.11.6 in /apps/block_scout_web/assets +- [#8489](https://github.com/blockscout/blockscout/pull/8489) - Bump postcss from 8.4.29 to 8.4.30 in /apps/block_scout_web/assets + +
+ +## 5.2.2-beta + +### Features + +- [#8218](https://github.com/blockscout/blockscout/pull/8218) - Add `/api/v2/search/quick` method +- [#8202](https://github.com/blockscout/blockscout/pull/8202) - Add `/api/v2/addresses/:address_hash/tabs-counters` endpoint +- [#8156](https://github.com/blockscout/blockscout/pull/8156) - Add `is_verified_via_admin_panel` property to tokens table +- [#8165](https://github.com/blockscout/blockscout/pull/8165), [#8201](https://github.com/blockscout/blockscout/pull/8201) - Add broadcast of updated address_current_token_balances +- [#7952](https://github.com/blockscout/blockscout/pull/7952) - Add parsing constructor arguments for sourcify contracts +- [#6190](https://github.com/blockscout/blockscout/pull/6190) - Add EIP-1559 support to gas price oracle +- [#7977](https://github.com/blockscout/blockscout/pull/7977) - GraphQL: extend schema with new field for existing objects +- [#8158](https://github.com/blockscout/blockscout/pull/8158), [#8164](https://github.com/blockscout/blockscout/pull/8164) - Include unfetched balances in TokenBalanceOnDemand fetcher + +### Fixes + +- [#8233](https://github.com/blockscout/blockscout/pull/8233) - Fix API v2 broken tx response +- [#8147](https://github.com/blockscout/blockscout/pull/8147) - Switch sourcify tests from POA Sokol to Gnosis Chiado +- [#8145](https://github.com/blockscout/blockscout/pull/8145) - Handle negative holders count in API v2 +- [#8040](https://github.com/blockscout/blockscout/pull/8040) - Resolve issue with Docker image for Mac M1/M2 +- [#8060](https://github.com/blockscout/blockscout/pull/8060) - Fix eth_getLogs API endpoint +- [#8082](https://github.com/blockscout/blockscout/pull/8082), [#8088](https://github.com/blockscout/blockscout/pull/8088) - Fix Rootstock charts API +- [#7992](https://github.com/blockscout/blockscout/pull/7992) - Fix missing range insert +- [#8022](https://github.com/blockscout/blockscout/pull/8022) - Don't add reorg block number to missing blocks + +### Chore + +- [#8222](https://github.com/blockscout/blockscout/pull/8222) - docker-compose for new UI with external backend +- [#8177](https://github.com/blockscout/blockscout/pull/8177) - Refactor address counter functions +- [#8183](https://github.com/blockscout/blockscout/pull/8183) - Update frontend envs in order to pass their validation +- [#8167](https://github.com/blockscout/blockscout/pull/8167) - Manage concurrency for Token and TokenBalance fetcher +- [#8179](https://github.com/blockscout/blockscout/pull/8179) - Enhance nginx config +- [#8146](https://github.com/blockscout/blockscout/pull/8146) - Add method_id to write methods in API v2 response +- [#8105](https://github.com/blockscout/blockscout/pull/8105) - Extend API v1 with endpoints used by new UI +- [#8104](https://github.com/blockscout/blockscout/pull/8104) - remove "TODO" from API v2 response +- [#8100](https://github.com/blockscout/blockscout/pull/8100), [#8103](https://github.com/blockscout/blockscout/pull/8103) - Extend docker-compose configs with new config when front is running externally +- [#8012](https://github.com/blockscout/blockscout/pull/8012) - API v2 smart-contract verification extended logging + +
+ Dependencies version bumps + +- [#7980](https://github.com/blockscout/blockscout/pull/7980) - Bump solc from 0.8.20 to 0.8.21 in /apps/explorer +- [#7986](https://github.com/blockscout/blockscout/pull/7986) - Bump sass from 1.63.6 to 1.64.0 in /apps/block_scout_web/assets +- [#8030](https://github.com/blockscout/blockscout/pull/8030) - Bump sweetalert2 from 11.7.18 to 11.7.20 in /apps/block_scout_web/assets +- [#8029](https://github.com/blockscout/blockscout/pull/8029) - Bump viewerjs from 1.11.3 to 1.11.4 in /apps/block_scout_web/assets +- [#8028](https://github.com/blockscout/blockscout/pull/8028) - Bump sass from 1.64.0 to 1.64.1 in /apps/block_scout_web/assets +- [#8026](https://github.com/blockscout/blockscout/pull/8026) - Bump dataloader from 1.0.10 to 1.0.11 +- [#8036](https://github.com/blockscout/blockscout/pull/8036) - Bump ex_cldr_numbers from 2.31.1 to 2.31.3 +- [#8027](https://github.com/blockscout/blockscout/pull/8027) - Bump absinthe from 1.7.4 to 1.7.5 +- [#8035](https://github.com/blockscout/blockscout/pull/8035) - Bump wallaby from 0.30.4 to 0.30.5 +- [#8038](https://github.com/blockscout/blockscout/pull/8038) - Bump chart.js from 4.3.0 to 4.3.1 in /apps/block_scout_web/assets +- [#8047](https://github.com/blockscout/blockscout/pull/8047) - Bump chart.js from 4.3.1 to 4.3.2 in /apps/block_scout_web/assets +- [#8000](https://github.com/blockscout/blockscout/pull/8000) - Bump postcss from 8.4.26 to 8.4.27 in /apps/block_scout_web/assets +- [#8052](https://github.com/blockscout/blockscout/pull/8052) - Bump @amplitude/analytics-browser from 2.1.2 to 2.1.3 in /apps/block_scout_web/assets +- [#8054](https://github.com/blockscout/blockscout/pull/8054) - Bump jest-environment-jsdom from 29.6.1 to 29.6.2 in /apps/block_scout_web/assets +- [#8063](https://github.com/blockscout/blockscout/pull/8063) - Bump eslint from 8.45.0 to 8.46.0 in /apps/block_scout_web/assets +- [#8066](https://github.com/blockscout/blockscout/pull/8066) - Bump ex_json_schema from 0.9.3 to 0.10.1 +- [#8064](https://github.com/blockscout/blockscout/pull/8064) - Bump core-js from 3.31.1 to 3.32.0 in /apps/block_scout_web/assets +- [#8053](https://github.com/blockscout/blockscout/pull/8053) - Bump jest from 29.6.1 to 29.6.2 in /apps/block_scout_web/assets +- [#8065](https://github.com/blockscout/blockscout/pull/8065) - Bump eslint-plugin-import from 2.27.5 to 2.28.0 in /apps/block_scout_web/assets +- [#8092](https://github.com/blockscout/blockscout/pull/8092) - Bump exvcr from 0.14.1 to 0.14.2 +- [#8091](https://github.com/blockscout/blockscout/pull/8091) - Bump sass from 1.64.1 to 1.64.2 in /apps/block_scout_web/assets +- [#8114](https://github.com/blockscout/blockscout/pull/8114) - Bump ex_doc from 0.30.3 to 0.30.4 +- [#8115](https://github.com/blockscout/blockscout/pull/8115) - Bump chart.js from 4.3.2 to 4.3.3 in /apps/block_scout_web/assets +- [#8116](https://github.com/blockscout/blockscout/pull/8116) - Bump @fortawesome/fontawesome-free from 6.4.0 to 6.4.2 in /apps/block_scout_web/assets +- [#8142](https://github.com/blockscout/blockscout/pull/8142) - Bump sobelow from 0.12.2 to 0.13.0 +- [#8141](https://github.com/blockscout/blockscout/pull/8141) - Bump @babel/core from 7.22.9 to 7.22.10 in /apps/block_scout_web/assets +- [#8140](https://github.com/blockscout/blockscout/pull/8140) - Bump @babel/preset-env from 7.22.9 to 7.22.10 in /apps/block_scout_web/assets +- [#8160](https://github.com/blockscout/blockscout/pull/8160) - Bump exvcr from 0.14.2 to 0.14.3 +- [#8159](https://github.com/blockscout/blockscout/pull/8159) - Bump luxon from 3.3.0 to 3.4.0 in /apps/block_scout_web/assets +- [#8169](https://github.com/blockscout/blockscout/pull/8169) - Bump sass from 1.64.2 to 1.65.1 in /apps/block_scout_web/assets +- [#8170](https://github.com/blockscout/blockscout/pull/8170) - Bump sweetalert2 from 11.7.20 to 11.7.22 in /apps/block_scout_web/assets +- [#8188](https://github.com/blockscout/blockscout/pull/8188) - Bump eslint from 8.46.0 to 8.47.0 in /apps/block_scout_web/assets +- [#8204](https://github.com/blockscout/blockscout/pull/8204) - Bump ex_doc from 0.30.4 to 0.30.5 +- [#8207](https://github.com/blockscout/blockscout/pull/8207) - Bump wallaby from 0.30.5 to 0.30.6 +- [#8212](https://github.com/blockscout/blockscout/pull/8212) - Bump sweetalert2 from 11.7.22 to 11.7.23 in /apps/block_scout_web/assets +- [#8203](https://github.com/blockscout/blockscout/pull/8203) - Bump autoprefixer from 10.4.14 to 10.4.15 in /apps/block_scout_web/assets +- [#8214](https://github.com/blockscout/blockscout/pull/8214) - Bump @amplitude/analytics-browser from 2.1.3 to 2.2.0 in /apps/block_scout_web/assets +- [#8225](https://github.com/blockscout/blockscout/pull/8225) - Bump postcss from 8.4.27 to 8.4.28 in /apps/block_scout_web/assets +- [#8224](https://github.com/blockscout/blockscout/pull/8224) - Bump gettext from 0.22.3 to 0.23.1 + +
+ +## 5.2.1-beta + +### Features + +- [#7970](https://github.com/blockscout/blockscout/pull/7970) - Search improvements: add sorting +- [#7771](https://github.com/blockscout/blockscout/pull/7771) - CSV export: speed up +- [#7962](https://github.com/blockscout/blockscout/pull/7962) - Allow indicate CMC id of the coin through env var +- [#7946](https://github.com/blockscout/blockscout/pull/7946) - API v2 rate limit: Put token to cookies & change /api/v2/key method +- [#7888](https://github.com/blockscout/blockscout/pull/7888) - Add token balances info to watchlist address response +- [#7898](https://github.com/blockscout/blockscout/pull/7898) - Add possibility to add extra headers with JSON RPC URL +- [#7836](https://github.com/blockscout/blockscout/pull/7836) - Improve unverified email flow +- [#7784](https://github.com/blockscout/blockscout/pull/7784) - Search improvements: Add new fields, light refactoring +- [#7811](https://github.com/blockscout/blockscout/pull/7811) - Filter addresses before insertion +- [#7895](https://github.com/blockscout/blockscout/pull/7895) - API v2: Add sorting to tokens page +- [#7859](https://github.com/blockscout/blockscout/pull/7859) - Add TokenTotalSupplyUpdater +- [#7873](https://github.com/blockscout/blockscout/pull/7873) - Chunk realtime balances requests +- [#7927](https://github.com/blockscout/blockscout/pull/7927) - Delete token balances only for blocks that lost consensus +- [#7947](https://github.com/blockscout/blockscout/pull/7947) - Improve locks acquiring + +### Fixes + +- [#8187](https://github.com/blockscout/blockscout/pull/8187) - API v1 500 error convert to 404, if requested path is incorrect +- [#7852](https://github.com/blockscout/blockscout/pull/7852) - Token balances refactoring & fixes +- [#7872](https://github.com/blockscout/blockscout/pull/7872) - Fix pending gas price in pending tx +- [#7875](https://github.com/blockscout/blockscout/pull/7875) - Fix twin compiler version +- [#7825](https://github.com/blockscout/blockscout/pull/7825) - Fix nginx config for the new frontend websockets +- [#7772](https://github.com/blockscout/blockscout/pull/7772) - Fix parsing of database password period(s) +- [#7803](https://github.com/blockscout/blockscout/pull/7803) - Fix additional sources and interfaces, save names for vyper contracts +- [#7758](https://github.com/blockscout/blockscout/pull/7758) - Remove limit for configurable fetchers +- [#7764](https://github.com/blockscout/blockscout/pull/7764) - Fix missing ranges insertion and deletion logic +- [#7843](https://github.com/blockscout/blockscout/pull/7843) - Fix created_contract_code_indexed_at updating +- [#7855](https://github.com/blockscout/blockscout/pull/7855) - Handle internal transactions unique_violation +- [#7899](https://github.com/blockscout/blockscout/pull/7899) - Fix catchup numbers_to_ranges function +- [#7951](https://github.com/blockscout/blockscout/pull/7951) - Fix TX url in email notifications on mainnet + +### Chore + +- [#7963](https://github.com/blockscout/blockscout/pull/7963) - Op Stack: ignore depositNonce +- [#7954](https://github.com/blockscout/blockscout/pull/7954) - Enhance Account Explorer.Account.Notifier.Email module tests +- [#7950](https://github.com/blockscout/blockscout/pull/7950) - Add GA CI for Eth Goerli chain +- [#7934](https://github.com/blockscout/blockscout/pull/7934), [#7936](https://github.com/blockscout/blockscout/pull/7936) - Explicitly set consensus == true in queries (convenient for search), remove logger requirements, where it is not used anymore +- [#7901](https://github.com/blockscout/blockscout/pull/7901) - Fix Docker image build +- [#7890](https://github.com/blockscout/blockscout/pull/7890), [#7918](https://github.com/blockscout/blockscout/pull/7918) - Resolve warning: Application.get_env/2 is discouraged in the module body, use Application.compile_env/3 instead +- [#7863](https://github.com/blockscout/blockscout/pull/7863) - Add max_age for account sessions +- [#7841](https://github.com/blockscout/blockscout/pull/7841) - CORS setup for docker-compose config with new frontend +- [#7832](https://github.com/blockscout/blockscout/pull/7832), [#7891](https://github.com/blockscout/blockscout/pull/7891) - API v2: Add block_number, block_hash to logs +- [#7789](https://github.com/blockscout/blockscout/pull/7789) - Fix test warnings; Fix name of `MICROSERVICE_ETH_BYTECODE_DB_INTERVAL_BETWEEN_LOOKUPS` env variable +- [#7819](https://github.com/blockscout/blockscout/pull/7819) - Add logging for unknown error verification result +- [#7781](https://github.com/blockscout/blockscout/pull/7781) - Add `/api/v1/health/liveness` and `/api/v1/health/readiness` + +
+ Dependencies version bumps + +- [#7759](https://github.com/blockscout/blockscout/pull/7759) - Bump sass from 1.63.4 to 1.63.5 in /apps/block_scout_web/assets +- [#7760](https://github.com/blockscout/blockscout/pull/7760) - Bump @amplitude/analytics-browser from 2.0.0 to 2.0.1 in /apps/block_scout_web/assets +- [#7762](https://github.com/blockscout/blockscout/pull/7762) - Bump webpack from 5.87.0 to 5.88.0 in /apps/block_scout_web/assets +- [#7769](https://github.com/blockscout/blockscout/pull/7769) - Bump sass from 1.63.5 to 1.63.6 in /apps/block_scout_web/assets +- [#7805](https://github.com/blockscout/blockscout/pull/7805) - Bump ssl_verify_fun from 1.1.6 to 1.1.7 +- [#7812](https://github.com/blockscout/blockscout/pull/7812) - Bump webpack from 5.88.0 to 5.88.1 in /apps/block_scout_web/assets +- [#7770](https://github.com/blockscout/blockscout/pull/7770) - Bump @amplitude/analytics-browser from 2.0.1 to 2.1.0 in /apps/block_scout_web/assets +- [#7821](https://github.com/blockscout/blockscout/pull/7821) - Bump absinthe from 1.7.1 to 1.7.3 +- [#7823](https://github.com/blockscout/blockscout/pull/7823) - Bump @amplitude/analytics-browser from 2.1.0 to 2.1.1 in /apps/block_scout_web/assets +- [#7838](https://github.com/blockscout/blockscout/pull/7838) - Bump gettext from 0.22.2 to 0.22.3 +- [#7840](https://github.com/blockscout/blockscout/pull/7840) - Bump eslint from 8.43.0 to 8.44.0 in /apps/block_scout_web/assets +- [#7839](https://github.com/blockscout/blockscout/pull/7839) - Bump photoswipe from 5.3.7 to 5.3.8 in /apps/block_scout_web/assets +- [#7850](https://github.com/blockscout/blockscout/pull/7850) - Bump jest-environment-jsdom from 29.5.0 to 29.6.0 in /apps/block_scout_web/assets +- [#7848](https://github.com/blockscout/blockscout/pull/7848) - Bump @amplitude/analytics-browser from 2.1.1 to 2.1.2 in /apps/block_scout_web/assets +- [#7847](https://github.com/blockscout/blockscout/pull/7847) - Bump @babel/core from 7.22.5 to 7.22.6 in /apps/block_scout_web/assets +- [#7846](https://github.com/blockscout/blockscout/pull/7846) - Bump @babel/preset-env from 7.22.5 to 7.22.6 in /apps/block_scout_web/assets +- [#7856](https://github.com/blockscout/blockscout/pull/7856) - Bump ex_cldr from 2.37.1 to 2.37.2 +- [#7870](https://github.com/blockscout/blockscout/pull/7870) - Bump jest from 29.5.0 to 29.6.1 in /apps/block_scout_web/assets +- [#7867](https://github.com/blockscout/blockscout/pull/7867) - Bump postcss from 8.4.24 to 8.4.25 in /apps/block_scout_web/assets +- [#7871](https://github.com/blockscout/blockscout/pull/7871) - Bump @babel/core from 7.22.6 to 7.22.8 in /apps/block_scout_web/assets +- [#7868](https://github.com/blockscout/blockscout/pull/7868) - Bump jest-environment-jsdom from 29.6.0 to 29.6.1 in /apps/block_scout_web/assets +- [#7866](https://github.com/blockscout/blockscout/pull/7866) - Bump @babel/preset-env from 7.22.6 to 7.22.7 in /apps/block_scout_web/assets +- [#7869](https://github.com/blockscout/blockscout/pull/7869) - Bump core-js from 3.31.0 to 3.31.1 in /apps/block_scout_web/assets +- [#7884](https://github.com/blockscout/blockscout/pull/7884) - Bump ecto from 3.10.2 to 3.10.3 +- [#7882](https://github.com/blockscout/blockscout/pull/7882) - Bump jason from 1.4.0 to 1.4.1 +- [#7880](https://github.com/blockscout/blockscout/pull/7880) - Bump absinthe from 1.7.3 to 1.7.4 +- [#7879](https://github.com/blockscout/blockscout/pull/7879) - Bump babel-loader from 9.1.2 to 9.1.3 in /apps/block_scout_web/assets +- [#7881](https://github.com/blockscout/blockscout/pull/7881) - Bump ex_cldr_numbers from 2.31.1 to 2.31.2 +- [#7883](https://github.com/blockscout/blockscout/pull/7883) - Bump ex_doc from 0.29.4 to 0.30.1 +- [#7916](https://github.com/blockscout/blockscout/pull/7916) - Bump semver from 5.7.1 to 5.7.2 in /apps/explorer +- [#7912](https://github.com/blockscout/blockscout/pull/7912) - Bump sweetalert2 from 11.7.12 to 11.7.16 in /apps/block_scout_web/assets +- [#7913](https://github.com/blockscout/blockscout/pull/7913) - Bump ex_doc from 0.30.1 to 0.30.2 +- [#7923](https://github.com/blockscout/blockscout/pull/7923) - Bump postgrex from 0.17.1 to 0.17.2 +- [#7921](https://github.com/blockscout/blockscout/pull/7921) - Bump @babel/preset-env from 7.22.7 to 7.22.9 in /apps/block_scout_web/assets +- [#7922](https://github.com/blockscout/blockscout/pull/7922) - Bump @babel/core from 7.22.8 to 7.22.9 in /apps/block_scout_web/assets +- [#7931](https://github.com/blockscout/blockscout/pull/7931) - Bump wallaby from 0.30.3 to 0.30.4 +- [#7940](https://github.com/blockscout/blockscout/pull/7940) - Bump postcss from 8.4.25 to 8.4.26 in /apps/block_scout_web/assets +- [#7939](https://github.com/blockscout/blockscout/pull/7939) - Bump eslint from 8.44.0 to 8.45.0 in /apps/block_scout_web/assets +- [#7955](https://github.com/blockscout/blockscout/pull/7955) - Bump sweetalert2 from 11.7.16 to 11.7.18 in /apps/block_scout_web/assets +- [#7958](https://github.com/blockscout/blockscout/pull/7958) - Bump ex_doc from 0.30.2 to 0.30.3 +- [#7965](https://github.com/blockscout/blockscout/pull/7965) - Bump webpack from 5.88.1 to 5.88.2 in /apps/block_scout_web/assets +- [#7972](https://github.com/blockscout/blockscout/pull/7972) - Bump word-wrap from 1.2.3 to 1.2.4 in /apps/block_scout_web/assets + +
+ +## 5.2.0-beta + +### Features + +- [#7502](https://github.com/blockscout/blockscout/pull/7502) - Improve performance of some methods, endpoints and SQL queries +- [#7665](https://github.com/blockscout/blockscout/pull/7665) - Add standard-json vyper verification +- [#7685](https://github.com/blockscout/blockscout/pull/7685) - Add yul filter and "language" field for smart contracts +- [#7653](https://github.com/blockscout/blockscout/pull/7653) - Add support for DEPOSIT and WITHDRAW token transfer event in older contracts +- [#7628](https://github.com/blockscout/blockscout/pull/7628) - Support partially verified property from verifier MS; Add property to track contracts automatically verified via eth-bytecode-db +- [#7603](https://github.com/blockscout/blockscout/pull/7603) - Add Polygon Edge and optimism genesis files support +- [#7585](https://github.com/blockscout/blockscout/pull/7585) - Store and display native coin market cap from the DB +- [#7513](https://github.com/blockscout/blockscout/pull/7513) - Add Polygon Edge support +- [#7532](https://github.com/blockscout/blockscout/pull/7532) - Handle empty id in json rpc responses +- [#7544](https://github.com/blockscout/blockscout/pull/7544) - Add ERC-1155 signatures to uncataloged_token_transfer_block_numbers +- [#7363](https://github.com/blockscout/blockscout/pull/7363) - CSV export filters +- [#7697](https://github.com/blockscout/blockscout/pull/7697) - Limit fetchers init tasks + +### Fixes + +- [#7712](https://github.com/blockscout/blockscout/pull/7712) - Transaction actions import fix +- [#7709](https://github.com/blockscout/blockscout/pull/7709) - Contract args displaying bug +- [#7654](https://github.com/blockscout/blockscout/pull/7654) - Optimize exchange rates requests rate +- [#7636](https://github.com/blockscout/blockscout/pull/7636) - Remove receive from read methods +- [#7635](https://github.com/blockscout/blockscout/pull/7635) - Fix single 1155 transfer displaying +- [#7629](https://github.com/blockscout/blockscout/pull/7629) - Fix NFT fetcher +- [#7614](https://github.com/blockscout/blockscout/pull/7614) - API and smart-contracts fixes and improvements +- [#7611](https://github.com/blockscout/blockscout/pull/7611) - Fix tokens pagination +- [#7566](https://github.com/blockscout/blockscout/pull/7566) - Account: check composed email before sending +- [#7564](https://github.com/blockscout/blockscout/pull/7564) - Return contract type in address view +- [#7562](https://github.com/blockscout/blockscout/pull/7562) - Remove fallback from Read methods +- [#7537](https://github.com/blockscout/blockscout/pull/7537), [#7553](https://github.com/blockscout/blockscout/pull/7553) - Withdrawals fixes and improvements +- [#7546](https://github.com/blockscout/blockscout/pull/7546) - API v2: fix today coin price (use in-memory or cached in DB value) +- [#7545](https://github.com/blockscout/blockscout/pull/7545) - API v2: Check if cached exchange rate is empty before replacing DB value in stats API +- [#7516](https://github.com/blockscout/blockscout/pull/7516) - Fix shrinking logo in Safari +- [#7590](https://github.com/blockscout/blockscout/pull/7590) - Drop genesis block in internal transactions fetcher +- [#7639](https://github.com/blockscout/blockscout/pull/7639) - Fix contract creation transactions +- [#7724](https://github.com/blockscout/blockscout/pull/7724), [#7753](https://github.com/blockscout/blockscout/pull/7753) - Move MissingRangesCollector init logic to handle_continue +- [#7751](https://github.com/blockscout/blockscout/pull/7751) - Add missing method_to_url params for trace transactions + +### Chore + +- [#7699](https://github.com/blockscout/blockscout/pull/7699) - Add block_number index for address_coin_balances table +- [#7666](https://github.com/blockscout/blockscout/pull/7666), [#7740](https://github.com/blockscout/blockscout/pull/7740), [#7741](https://github.com/blockscout/blockscout/pull/7741) - Search label query +- [#7644](https://github.com/blockscout/blockscout/pull/7644) - Publish docker images CI for prod/staging branches +- [#7594](https://github.com/blockscout/blockscout/pull/7594) - Stats service support in docker-compose config with new frontend +- [#7576](https://github.com/blockscout/blockscout/pull/7576) - Check left blocks in pending block operations in order to decide, if we need to display indexing int tx banner at the top +- [#7543](https://github.com/blockscout/blockscout/pull/7543) - Allow hyphen in DB username + +
+ Dependencies version bumps + +- [#7518](https://github.com/blockscout/blockscout/pull/7518) - Bump mini-css-extract-plugin from 2.7.5 to 2.7.6 in /apps/block_scout_web/assets +- [#7519](https://github.com/blockscout/blockscout/pull/7519) - Bump style-loader from 3.3.2 to 3.3.3 in /apps/block_scout_web/assets +- [#7505](https://github.com/blockscout/blockscout/pull/7505) - Bump webpack from 5.83.0 to 5.83.1 in /apps/block_scout_web/assets +- [#7533](https://github.com/blockscout/blockscout/pull/7533) - Bump sass-loader from 13.2.2 to 13.3.0 in /apps/block_scout_web/assets +- [#7534](https://github.com/blockscout/blockscout/pull/7534) - Bump eslint from 8.40.0 to 8.41.0 in /apps/block_scout_web/assets +- [#7541](https://github.com/blockscout/blockscout/pull/7541) - Bump cldr_utils from 2.23.1 to 2.24.0 +- [#7542](https://github.com/blockscout/blockscout/pull/7542) - Bump ex_cldr_units from 3.16.0 to 3.16.1 +- [#7548](https://github.com/blockscout/blockscout/pull/7548) - Bump briefly from 20d1318 to 678a376 +- [#7547](https://github.com/blockscout/blockscout/pull/7547) - Bump webpack from 5.83.1 to 5.84.0 in /apps/block_scout_web/assets +- [#7554](https://github.com/blockscout/blockscout/pull/7554) - Bump webpack from 5.84.0 to 5.84.1 in /apps/block_scout_web/assets +- [#7568](https://github.com/blockscout/blockscout/pull/7568) - Bump @babel/core from 7.21.8 to 7.22.1 in /apps/block_scout_web/assets +- [#7569](https://github.com/blockscout/blockscout/pull/7569) - Bump postcss-loader from 7.3.0 to 7.3.1 in /apps/block_scout_web/assets +- [#7570](https://github.com/blockscout/blockscout/pull/7570) - Bump number from 1.0.3 to 1.0.4 +- [#7567](https://github.com/blockscout/blockscout/pull/7567) - Bump @babel/preset-env from 7.21.5 to 7.22.2 in /apps/block_scout_web/assets +- [#7582](https://github.com/blockscout/blockscout/pull/7582) - Bump eslint-config-standard from 17.0.0 to 17.1.0 in /apps/block_scout_web/assets +- [#7581](https://github.com/blockscout/blockscout/pull/7581) - Bump sass-loader from 13.3.0 to 13.3.1 in /apps/block_scout_web/assets +- [#7578](https://github.com/blockscout/blockscout/pull/7578) - Bump @babel/preset-env from 7.22.2 to 7.22.4 in /apps/block_scout_web/assets +- [#7577](https://github.com/blockscout/blockscout/pull/7577) - Bump postcss-loader from 7.3.1 to 7.3.2 in /apps/block_scout_web/assets +- [#7579](https://github.com/blockscout/blockscout/pull/7579) - Bump sweetalert2 from 11.7.5 to 11.7.8 in /apps/block_scout_web/assets +- [#7591](https://github.com/blockscout/blockscout/pull/7591) - Bump sweetalert2 from 11.7.8 to 11.7.9 in /apps/block_scout_web/assets +- [#7593](https://github.com/blockscout/blockscout/pull/7593) - Bump ex_json_schema from 0.9.2 to 0.9.3 +- [#7580](https://github.com/blockscout/blockscout/pull/7580) - Bump postcss from 8.4.23 to 8.4.24 in /apps/block_scout_web/assets +- [#7601](https://github.com/blockscout/blockscout/pull/7601) - Bump sweetalert2 from 11.7.9 to 11.7.10 in /apps/block_scout_web/assets +- [#7602](https://github.com/blockscout/blockscout/pull/7602) - Bump mime from 2.0.3 to 2.0.4 +- [#7618](https://github.com/blockscout/blockscout/pull/7618) - Bump gettext from 0.22.1 to 0.22.2 +- [#7617](https://github.com/blockscout/blockscout/pull/7617) - Bump @amplitude/analytics-browser from 1.10.3 to 1.10.4 in /apps/block_scout_web/assets +- [#7609](https://github.com/blockscout/blockscout/pull/7609) - Bump webpack from 5.84.1 to 5.85.0 in /apps/block_scout_web/assets +- [#7610](https://github.com/blockscout/blockscout/pull/7610) - Bump mime from 2.0.4 to 2.0.5 +- [#7634](https://github.com/blockscout/blockscout/pull/7634) - Bump eslint from 8.41.0 to 8.42.0 in /apps/block_scout_web/assets +- [#7633](https://github.com/blockscout/blockscout/pull/7633) - Bump floki from 0.34.2 to 0.34.3 +- [#7631](https://github.com/blockscout/blockscout/pull/7631) - Bump phoenix_ecto from 4.4.1 to 4.4.2 +- [#7630](https://github.com/blockscout/blockscout/pull/7630) - Bump webpack-cli from 5.1.1 to 5.1.3 in /apps/block_scout_web/assets +- [#7632](https://github.com/blockscout/blockscout/pull/7632) - Bump webpack from 5.85.0 to 5.85.1 in /apps/block_scout_web/assets +- [#7646](https://github.com/blockscout/blockscout/pull/7646) - Bump sweetalert2 from 11.7.10 to 11.7.11 in /apps/block_scout_web/assets +- [#7647](https://github.com/blockscout/blockscout/pull/7647) - Bump @amplitude/analytics-browser from 1.10.4 to 1.10.6 in /apps/block_scout_web/assets +- [#7659](https://github.com/blockscout/blockscout/pull/7659) - Bump webpack-cli from 5.1.3 to 5.1.4 in /apps/block_scout_web/assets +- [#7658](https://github.com/blockscout/blockscout/pull/7658) - Bump @amplitude/analytics-browser from 1.10.6 to 1.10.7 in /apps/block_scout_web/assets +- [#7657](https://github.com/blockscout/blockscout/pull/7657) - Bump webpack from 5.85.1 to 5.86.0 in /apps/block_scout_web/assets +- [#7672](https://github.com/blockscout/blockscout/pull/7672) - Bump @babel/preset-env from 7.22.4 to 7.22.5 in /apps/block_scout_web/assets +- [#7674](https://github.com/blockscout/blockscout/pull/7674) - Bump ecto from 3.10.1 to 3.10.2 +- [#7673](https://github.com/blockscout/blockscout/pull/7673) - Bump @babel/core from 7.22.1 to 7.22.5 in /apps/block_scout_web/assets +- [#7671](https://github.com/blockscout/blockscout/pull/7671) - Bump sass from 1.62.1 to 1.63.2 in /apps/block_scout_web/assets +- [#7681](https://github.com/blockscout/blockscout/pull/7681) - Bump sweetalert2 from 11.7.11 to 11.7.12 in /apps/block_scout_web/assets +- [#7679](https://github.com/blockscout/blockscout/pull/7679) - Bump @amplitude/analytics-browser from 1.10.7 to 1.10.8 in /apps/block_scout_web/assets +- [#7680](https://github.com/blockscout/blockscout/pull/7680) - Bump sass from 1.63.2 to 1.63.3 in /apps/block_scout_web/assets +- [#7693](https://github.com/blockscout/blockscout/pull/7693) - Bump sass-loader from 13.3.1 to 13.3.2 in /apps/block_scout_web/assets +- [#7692](https://github.com/blockscout/blockscout/pull/7692) - Bump postcss-loader from 7.3.2 to 7.3.3 in /apps/block_scout_web/assets +- [#7691](https://github.com/blockscout/blockscout/pull/7691) - Bump url from 0.11.0 to 0.11.1 in /apps/block_scout_web/assets +- [#7690](https://github.com/blockscout/blockscout/pull/7690) - Bump core-js from 3.30.2 to 3.31.0 in /apps/block_scout_web/assets +- [#7701](https://github.com/blockscout/blockscout/pull/7701) - Bump css-minimizer-webpack-plugin from 5.0.0 to 5.0.1 in /apps/block_scout_web/assets +- [#7702](https://github.com/blockscout/blockscout/pull/7702) - Bump @amplitude/analytics-browser from 1.10.8 to 1.11.0 in /apps/block_scout_web/assets +- [#7708](https://github.com/blockscout/blockscout/pull/7708) - Bump phoenix_pubsub from 2.1.2 to 2.1.3 +- [#7707](https://github.com/blockscout/blockscout/pull/7707) - Bump @amplitude/analytics-browser from 1.11.0 to 2.0.0 in /apps/block_scout_web/assets +- [#7706](https://github.com/blockscout/blockscout/pull/7706) - Bump webpack from 5.86.0 to 5.87.0 in /apps/block_scout_web/assets +- [#7705](https://github.com/blockscout/blockscout/pull/7705) - Bump sass from 1.63.3 to 1.63.4 in /apps/block_scout_web/assets +- [#7714](https://github.com/blockscout/blockscout/pull/7714) - Bump ex_cldr_units from 3.16.1 to 3.16.2 +- [#7748](https://github.com/blockscout/blockscout/pull/7748) - Bump mock from 0.3.7 to 0.3.8 +- [#7746](https://github.com/blockscout/blockscout/pull/7746) - Bump eslint from 8.42.0 to 8.43.0 in /apps/block_scout_web/assets +- [#7747](https://github.com/blockscout/blockscout/pull/7747) - Bump cldr_utils from 2.24.0 to 2.24.1 + +
+ +## 5.1.5-beta + +### Features + +- [#7439](https://github.com/blockscout/blockscout/pull/7439) - Define batch size for token balance fetcher via runtime env var +- [#7298](https://github.com/blockscout/blockscout/pull/7298) - Add changes to support force email verification +- [#7422](https://github.com/blockscout/blockscout/pull/7422) - Refactor state changes +- [#7416](https://github.com/blockscout/blockscout/pull/7416) - Add option to disable reCAPTCHA +- [#6694](https://github.com/blockscout/blockscout/pull/6694) - Add withdrawals support (EIP-4895) +- [#7355](https://github.com/blockscout/blockscout/pull/7355) - Add endpoint for token info import +- [#7393](https://github.com/blockscout/blockscout/pull/7393) - Realtime fetcher max gap +- [#7436](https://github.com/blockscout/blockscout/pull/7436) - TokenBalanceOnDemand ERC-1155 support +- [#7469](https://github.com/blockscout/blockscout/pull/7469), [#7485](https://github.com/blockscout/blockscout/pull/7485), [#7493](https://github.com/blockscout/blockscout/pull/7493) - Clear missing block ranges after every success import +- [#7489](https://github.com/blockscout/blockscout/pull/7489) - INDEXER_CATCHUP_BLOCK_INTERVAL env var + +### Fixes + +- [#7490](https://github.com/blockscout/blockscout/pull/7490) - Fix pending txs is not a map +- [#7474](https://github.com/blockscout/blockscout/pull/7474) - Websocket v2 improvements +- [#7472](https://github.com/blockscout/blockscout/pull/7472) - Fix RE_CAPTCHA_DISABLED variable parsing +- [#7391](https://github.com/blockscout/blockscout/pull/7391) - Fix: cannot read properties of null (reading 'value') +- [#7377](https://github.com/blockscout/blockscout/pull/7377), [#7454](https://github.com/blockscout/blockscout/pull/7454) - API v2 improvements + +### Chore + +- [#7496](https://github.com/blockscout/blockscout/pull/7496) - API v2: Pass backend version to the frontend +- [#7468](https://github.com/blockscout/blockscout/pull/7468) - Refactoring queries with blocks +- [#7435](https://github.com/blockscout/blockscout/pull/7435) - Add `.exs` and `.eex` checking in cspell +- [#7450](https://github.com/blockscout/blockscout/pull/7450) - Resolve unresponsive navbar in verification form page +- [#7449](https://github.com/blockscout/blockscout/pull/7449) - Actualize docker-compose readme and use latest tags instead main +- [#7417](https://github.com/blockscout/blockscout/pull/7417) - Docker compose for frontend +- [#7349](https://github.com/blockscout/blockscout/pull/7349) - Proxy pattern with getImplementation() +- [#7360](https://github.com/blockscout/blockscout/pull/7360) - Manage visibility of indexing progress alert + +
+ Dependencies version bumps + +- [#7351](https://github.com/blockscout/blockscout/pull/7351) - Bump decimal from 2.0.0 to 2.1.1 +- [#7356](https://github.com/blockscout/blockscout/pull/7356) - Bump @amplitude/analytics-browser from 1.10.0 to 1.10.1 in /apps/block_scout_web/assets +- [#7366](https://github.com/blockscout/blockscout/pull/7366) - Bump mixpanel-browser from 2.46.0 to 2.47.0 in /apps/block_scout_web/assets +- [#7365](https://github.com/blockscout/blockscout/pull/7365) - Bump @amplitude/analytics-browser from 1.10.1 to 1.10.2 in /apps/block_scout_web/assets +- [#7368](https://github.com/blockscout/blockscout/pull/7368) - Bump cowboy from 2.9.0 to 2.10.0 +- [#7370](https://github.com/blockscout/blockscout/pull/7370) - Bump ex_cldr_units from 3.15.0 to 3.16.0 +- [#7364](https://github.com/blockscout/blockscout/pull/7364) - Bump chart.js from 4.2.1 to 4.3.0 in /apps/block_scout_web/assets +- [#7382](https://github.com/blockscout/blockscout/pull/7382) - Bump @babel/preset-env from 7.21.4 to 7.21.5 in /apps/block_scout_web/assets +- [#7381](https://github.com/blockscout/blockscout/pull/7381) - Bump highlight.js from 11.7.0 to 11.8.0 in /apps/block_scout_web/assets +- [#7379](https://github.com/blockscout/blockscout/pull/7379) - Bump @babel/core from 7.21.4 to 7.21.5 in /apps/block_scout_web/assets +- [#7380](https://github.com/blockscout/blockscout/pull/7380) - Bump postcss-loader from 7.2.4 to 7.3.0 in /apps/block_scout_web/assets +- [#7395](https://github.com/blockscout/blockscout/pull/7395) - Bump @babel/core from 7.21.5 to 7.21.8 in /apps/block_scout_web/assets +- [#7402](https://github.com/blockscout/blockscout/pull/7402) - Bump webpack from 5.81.0 to 5.82.0 in /apps/block_scout_web/assets +- [#7411](https://github.com/blockscout/blockscout/pull/7411) - Bump cldr_utils from 2.22.0 to 2.23.1 +- [#7409](https://github.com/blockscout/blockscout/pull/7409) - Bump @amplitude/analytics-browser from 1.10.2 to 1.10.3 in /apps/block_scout_web/assets +- [#7410](https://github.com/blockscout/blockscout/pull/7410) - Bump sweetalert2 from 11.7.3 to 11.7.5 in /apps/block_scout_web/assets +- [#7434](https://github.com/blockscout/blockscout/pull/7434) - Bump ex_cldr from 2.37.0 to 2.37.1 +- [#7433](https://github.com/blockscout/blockscout/pull/7433) - Bump eslint from 8.39.0 to 8.40.0 in /apps/block_scout_web/assets +- [#7432](https://github.com/blockscout/blockscout/pull/7432) - Bump tesla from 1.6.0 to 1.6.1 +- [#7431](https://github.com/blockscout/blockscout/pull/7431) - Bump webpack-cli from 5.0.2 to 5.1.0 in /apps/block_scout_web/assets +- [#7430](https://github.com/blockscout/blockscout/pull/7430) - Bump core-js from 3.30.1 to 3.30.2 in /apps/block_scout_web/assets +- [#7443](https://github.com/blockscout/blockscout/pull/7443) - Bump webpack-cli from 5.1.0 to 5.1.1 in /apps/block_scout_web/assets +- [#7457](https://github.com/blockscout/blockscout/pull/7457) - Bump web3 from 1.9.0 to 1.10.0 in /apps/block_scout_web/assets +- [#7456](https://github.com/blockscout/blockscout/pull/7456) - Bump webpack from 5.82.0 to 5.82.1 in /apps/block_scout_web/assets +- [#7458](https://github.com/blockscout/blockscout/pull/7458) - Bump phoenix_ecto from 4.4.0 to 4.4.1 +- [#7455](https://github.com/blockscout/blockscout/pull/7455) - Bump solc from 0.8.19 to 0.8.20 in /apps/explorer +- [#7460](https://github.com/blockscout/blockscout/pull/7460) - Bump jquery from 3.6.4 to 3.7.0 in /apps/block_scout_web/assets +- [#7488](https://github.com/blockscout/blockscout/pull/7488) - Bump exvcr from 0.13.5 to 0.14.1 +- [#7486](https://github.com/blockscout/blockscout/pull/7486) - Bump redix from 1.2.2 to 1.2.3 +- [#7487](https://github.com/blockscout/blockscout/pull/7487) - Bump tesla from 1.6.1 to 1.7.0 +- [#7494](https://github.com/blockscout/blockscout/pull/7494) - Bump webpack from 5.82.1 to 5.83.0 in /apps/block_scout_web/assets +- [#7495](https://github.com/blockscout/blockscout/pull/7495) - Bump ex_cldr_numbers from 2.31.0 to 2.31.1 + +
+ +## 5.1.4-beta + +### Features + +- [#7273](https://github.com/blockscout/blockscout/pull/7273) - Support reCAPTCHA v3 in CSV export page +- [#7345](https://github.com/blockscout/blockscout/pull/7345) - Manage telegram link and its visibility in the footer +- [#7313](https://github.com/blockscout/blockscout/pull/7313) - API v2 new endpoints: watchlist transactions +- [#7286](https://github.com/blockscout/blockscout/pull/7286) - Split token instance fetcher +- [#7246](https://github.com/blockscout/blockscout/pull/7246) - Fallback JSON RPC option +- [#7329](https://github.com/blockscout/blockscout/pull/7329) - Delete pending block operations for empty blocks + +### Fixes + +- [#7317](https://github.com/blockscout/blockscout/pull/7317) - Fix tokensupply API v1 endpoint: handle nil total_supply +- [#7290](https://github.com/blockscout/blockscout/pull/7290) - Allow nil gas price for pending tx (Erigon node case) +- [#7288](https://github.com/blockscout/blockscout/pull/7288) - API v2 improvements: Fix tx type for pending contract creation; Remove owner for not unique ERC-1155 token instances +- [#7283](https://github.com/blockscout/blockscout/pull/7283) - Fix status for dropped/replaced tx +- [#7270](https://github.com/blockscout/blockscout/pull/7270) - Fix default `TOKEN_EXCHANGE_RATE_REFETCH_INTERVAL` +- [#7276](https://github.com/blockscout/blockscout/pull/7276) - Convert 99+% of int txs indexing into 100% in order to hide top indexing banner +- [#7282](https://github.com/blockscout/blockscout/pull/7282) - Add not found transaction error case +- [#7305](https://github.com/blockscout/blockscout/pull/7305) - Reset MissingRangesCollector min_fetched_block_number + +### Chore + +- [#7343](https://github.com/blockscout/blockscout/pull/7343) - Management flexibility of charts dashboard on the main page +- [#7337](https://github.com/blockscout/blockscout/pull/7337) - Account: derive Auth0 logout urls from existing envs +- [#7332](https://github.com/blockscout/blockscout/pull/7332) - Add volume for Postgres Docker containers DB +- [#7328](https://github.com/blockscout/blockscout/pull/7328) - Update Docker image tag latest with release only +- [#7312](https://github.com/blockscout/blockscout/pull/7312) - Add configs for Uniswap v3 transaction actions to index them on Base Goerli +- [#7310](https://github.com/blockscout/blockscout/pull/7310) - Reducing resource consumption on bs-indexer-eth-goerli environment +- [#7297](https://github.com/blockscout/blockscout/pull/7297) - Use tracing JSONRPC URL in case of debug_traceTransaction method +- [#7292](https://github.com/blockscout/blockscout/pull/7292) - Allow Node 16+ version + +
+ Dependencies version bumps + +- [#7257](https://github.com/blockscout/blockscout/pull/7257) - Bump ecto_sql from 3.10.0 to 3.10.1 +- [#7265](https://github.com/blockscout/blockscout/pull/7265) - Bump ecto from 3.10.0 to 3.10.1 +- [#7263](https://github.com/blockscout/blockscout/pull/7263) - Bump sass from 1.61.0 to 1.62.0 in /apps/block_scout_web/assets +- [#7264](https://github.com/blockscout/blockscout/pull/7264) - Bump webpack from 5.78.0 to 5.79.0 in /apps/block_scout_web/assets +- [#7274](https://github.com/blockscout/blockscout/pull/7274) - Bump postgrex from 0.17.0 to 0.17.1 +- [#7277](https://github.com/blockscout/blockscout/pull/7277) - Bump core-js from 3.30.0 to 3.30.1 in /apps/block_scout_web/assets +- [#7295](https://github.com/blockscout/blockscout/pull/7295) - Bump postcss from 8.4.21 to 8.4.22 in /apps/block_scout_web/assets +- [#7303](https://github.com/blockscout/blockscout/pull/7303) - Bump redix from 1.2.1 to 1.2.2 +- [#7302](https://github.com/blockscout/blockscout/pull/7302) - Bump webpack from 5.79.0 to 5.80.0 in /apps/block_scout_web/assets +- [#7307](https://github.com/blockscout/blockscout/pull/7307) - Bump postcss from 8.4.22 to 8.4.23 in /apps/block_scout_web/assets +- [#7321](https://github.com/blockscout/blockscout/pull/7321) - Bump webpack-cli from 5.0.1 to 5.0.2 in /apps/block_scout_web/assets +- [#7320](https://github.com/blockscout/blockscout/pull/7320) - Bump js-cookie from 3.0.1 to 3.0.4 in /apps/block_scout_web/assets +- [#7333](https://github.com/blockscout/blockscout/pull/7333) - Bump js-cookie from 3.0.4 to 3.0.5 in /apps/block_scout_web/assets +- [#7334](https://github.com/blockscout/blockscout/pull/7334) - Bump eslint from 8.38.0 to 8.39.0 in /apps/block_scout_web/assets +- [#7344](https://github.com/blockscout/blockscout/pull/7344) - Bump @amplitude/analytics-browser from 1.9.4 to 1.10.0 in /apps/block_scout_web/assets +- [#7347](https://github.com/blockscout/blockscout/pull/7347) - Bump webpack from 5.80.0 to 5.81.0 in /apps/block_scout_web/assets +- [#7348](https://github.com/blockscout/blockscout/pull/7348) - Bump sass from 1.62.0 to 1.62.1 in /apps/block_scout_web/assets + +
+ +## 5.1.3-beta + +### Features + +- [#7253](https://github.com/blockscout/blockscout/pull/7253) - Add `EIP_1559_ELASTICITY_MULTIPLIER` env variable +- [#7187](https://github.com/blockscout/blockscout/pull/7187) - Integrate [Eth Bytecode DB](https://github.com/blockscout/blockscout-rs/tree/main/eth-bytecode-db/eth-bytecode-db) +- [#7185](https://github.com/blockscout/blockscout/pull/7185) - Aave v3 transaction actions indexer +- [#7148](https://github.com/blockscout/blockscout/pull/7148), [#7244](https://github.com/blockscout/blockscout/pull/7244) - API v2 improvements: API rate limiting, `/tokens/{address_hash}/instances/{token_id}/holders` and other changes + +### Fixes + +- [#7242](https://github.com/blockscout/blockscout/pull/7242) - Fix daily txs chart +- [#7210](https://github.com/blockscout/blockscout/pull/7210) - Fix Makefile docker image build +- [#7203](https://github.com/blockscout/blockscout/pull/7203) - Fix write contract functionality for multidimensional arrays case +- [#7186](https://github.com/blockscout/blockscout/pull/7186) - Fix build from Dockerfile +- [#7255](https://github.com/blockscout/blockscout/pull/7255) - Fix MissingRangesCollector max block number fetching + +### Chore + +- [#7254](https://github.com/blockscout/blockscout/pull/7254) - Rename env vars related for the integration with microservices +- [#7107](https://github.com/blockscout/blockscout/pull/7107) - Tx actions: remove excess delete_all calls and remake a cache +- [#7201](https://github.com/blockscout/blockscout/pull/7201) - Remove rust, cargo from dependencies since the latest version of ex_keccak is using precompiled rust + +
+ Dependencies version bumps + +- [#7183](https://github.com/blockscout/blockscout/pull/7183) - Bump sobelow from 0.11.1 to 0.12.1 +- [#7188](https://github.com/blockscout/blockscout/pull/7188) - Bump @babel/preset-env from 7.20.2 to 7.21.4 in /apps/block_scout_web/assets +- [#7190](https://github.com/blockscout/blockscout/pull/7190) - Bump @amplitude/analytics-browser from 1.9.1 to 1.9.2 in /apps/block_scout_web/assets +- [#7189](https://github.com/blockscout/blockscout/pull/7189) - Bump @babel/core from 7.21.3 to 7.21.4 in /apps/block_scout_web/assets +- [#7206](https://github.com/blockscout/blockscout/pull/7206) - Bump tesla from 1.5.1 to 1.6.0 +- [#7207](https://github.com/blockscout/blockscout/pull/7207) - Bump sobelow from 0.12.1 to 0.12.2 +- [#7205](https://github.com/blockscout/blockscout/pull/7205) - Bump @amplitude/analytics-browser from 1.9.2 to 1.9.3 in /apps/block_scout_web/assets +- [#7204](https://github.com/blockscout/blockscout/pull/7204) - Bump postcss-loader from 7.1.0 to 7.2.1 in /apps/block_scout_web/assets +- [#7214](https://github.com/blockscout/blockscout/pull/7214) - Bump core-js from 3.29.1 to 3.30.0 in /apps/block_scout_web/assets +- [#7215](https://github.com/blockscout/blockscout/pull/7215) - Bump postcss-loader from 7.2.1 to 7.2.4 in /apps/block_scout_web/assets +- [#7220](https://github.com/blockscout/blockscout/pull/7220) - Bump wallaby from 0.30.2 to 0.30.3 +- [#7236](https://github.com/blockscout/blockscout/pull/7236) - Bump sass from 1.60.0 to 1.61.0 in /apps/block_scout_web/assets +- [#7235](https://github.com/blockscout/blockscout/pull/7235) - Bump @amplitude/analytics-browser from 1.9.3 to 1.9.4 in /apps/block_scout_web/assets +- [#7224](https://github.com/blockscout/blockscout/pull/7224) - Bump webpack from 5.77.0 to 5.78.0 in /apps/block_scout_web/assets +- [#7245](https://github.com/blockscout/blockscout/pull/7245) - Bump eslint from 8.37.0 to 8.38.0 in /apps/block_scout_web/assets +- [#7250](https://github.com/blockscout/blockscout/pull/7250) - Bump dialyxir from 1.2.0 to 1.3.0 + +
+ +## 5.1.2-beta + +### Features + +- [#6925](https://github.com/blockscout/blockscout/pull/6925) - Rework token price fetching mechanism and sort token balances by fiat value +- [#7068](https://github.com/blockscout/blockscout/pull/7068) - Add authenticate endpoint +- [#6990](https://github.com/blockscout/blockscout/pull/6990) - Improved http requests logging, batch transfers pagination; New API v2 endpoint `/smart-contracts/counters`; And some refactoring +- [#7089](https://github.com/blockscout/blockscout/pull/7089) - ETHEREUM_JSONRPC_HTTP_TIMEOUT env variable + +### Fixes + +- [#7243](https://github.com/blockscout/blockscout/pull/7243) - Fix Elixir tracer to work with polygon edge +- [#7162](https://github.com/blockscout/blockscout/pull/7162) - Hide indexing alert, if internal transactions indexer disabled +- [#7096](https://github.com/blockscout/blockscout/pull/7096) - Hide indexing alert, if indexer disabled +- [#7102](https://github.com/blockscout/blockscout/pull/7102) - Set infinity timeout timestamp_to_block_number query +- [#7091](https://github.com/blockscout/blockscout/pull/7091) - Fix custom ABI +- [#7087](https://github.com/blockscout/blockscout/pull/7087) - Allow URI special symbols in `DATABASE_URL` +- [#7062](https://github.com/blockscout/blockscout/pull/7062) - Save block count in the DB when calculated in Cache module +- [#7008](https://github.com/blockscout/blockscout/pull/7008) - Fetch image/video content from IPFS link +- [#7007](https://github.com/blockscout/blockscout/pull/7007), [#7031](https://github.com/blockscout/blockscout/pull/7031), [#7058](https://github.com/blockscout/blockscout/pull/7058), [#7061](https://github.com/blockscout/blockscout/pull/7061), [#7067](https://github.com/blockscout/blockscout/pull/7067) - Token instance fetcher fixes +- [#7009](https://github.com/blockscout/blockscout/pull/7009) - Fix updating coin balances with empty value +- [#7055](https://github.com/blockscout/blockscout/pull/7055) - Set updated_at on token update even if there are no changes +- [#7080](https://github.com/blockscout/blockscout/pull/7080) - Deduplicate second degree relations before insert +- [#7161](https://github.com/blockscout/blockscout/pull/7161) - Treat "" as empty value while parsing env vars +- [#7135](https://github.com/blockscout/blockscout/pull/7135) - Block reorg fixes + +### Chore + +- [#7147](https://github.com/blockscout/blockscout/pull/7147) - Add missing GAS_PRICE_ORACLE_ vars to Makefile +- [#7144](https://github.com/blockscout/blockscout/pull/7144) - Update Blockscout logo +- [#7136](https://github.com/blockscout/blockscout/pull/7136) - Add release link or commit hash to docker images +- [#7097](https://github.com/blockscout/blockscout/pull/7097) - Force display token instance page +- [#7119](https://github.com/blockscout/blockscout/pull/7119), [#7149](https://github.com/blockscout/blockscout/pull/7149) - Refactor runtime config +- [#7072](https://github.com/blockscout/blockscout/pull/7072) - Add a separate docker compose for geth with clique consensus +- [#7056](https://github.com/blockscout/blockscout/pull/7056) - Add path_helper in interact.js +- [#7040](https://github.com/blockscout/blockscout/pull/7040) - Use alias BlockScoutWeb.Cldr.Number +- [#7037](https://github.com/blockscout/blockscout/pull/7037) - Define common function for "reltuples" query +- [#7034](https://github.com/blockscout/blockscout/pull/7034) - Resolve "Unexpected var, use let or const instead" +- [#7014](https://github.com/blockscout/blockscout/pull/7014), [#7036](https://github.com/blockscout/blockscout/pull/7036), [7041](https://github.com/blockscout/blockscout/pull/7041) - Fix spell in namings, add spell checking in CI +- [#7012](https://github.com/blockscout/blockscout/pull/7012) - Refactor socket.js +- [#6960](https://github.com/blockscout/blockscout/pull/6960) - Add deploy + workflow for testing (bs-indexers-ethereum-goerli) +- [#6989](https://github.com/blockscout/blockscout/pull/6989) - Update bitwalker/alpine-elixir-phoenix: 1.13 -> 1.14 +- [#6987](https://github.com/blockscout/blockscout/pull/6987) - Change tx actions warning importance + +
+ Dependencies version bumps + +- [6997](https://github.com/blockscout/blockscout/pull/6997) - Bump sweetalert2 from 11.7.2 to 11.7.3 in /apps/block_scout_web/assets +- [6999](https://github.com/blockscout/blockscout/pull/6999) - Bump @amplitude/analytics-browser from 1.8.0 to 1.9.0 in /apps/block_scout_web/assets +- [7000](https://github.com/blockscout/blockscout/pull/7000) - Bump eslint from 8.34.0 to 8.35.0 in /apps/block_scout_web/assets +- [7001](https://github.com/blockscout/blockscout/pull/7001) - Bump core-js from 3.28.0 to 3.29.0 in /apps/block_scout_web/assets +- [7002](https://github.com/blockscout/blockscout/pull/7002) - Bump floki from 0.34.1 to 0.34.2 +- [7004](https://github.com/blockscout/blockscout/pull/7004) - Bump ex_cldr from 2.34.1 to 2.34.2 +- [7011](https://github.com/blockscout/blockscout/pull/7011) - Bump ex_doc from 0.29.1 to 0.29.2 +- [7026](https://github.com/blockscout/blockscout/pull/7026) - Bump @amplitude/analytics-browser from 1.9.0 to 1.9.1 in /apps/block_scout_web/assets +- [7029](https://github.com/blockscout/blockscout/pull/7029) - Bump jest from 29.4.3 to 29.5.0 in /apps/block_scout_web/assets +- [7028](https://github.com/blockscout/blockscout/pull/7028) - Bump luxon from 3.2.1 to 3.3.0 in /apps/block_scout_web/assets +- [7027](https://github.com/blockscout/blockscout/pull/7027) - Bump jest-environment-jsdom from 29.4.3 to 29.5.0 in /apps/block_scout_web/assets +- [7030](https://github.com/blockscout/blockscout/pull/7030) - Bump viewerjs from 1.11.2 to 1.11.3 in /apps/block_scout_web/assets +- [7042](https://github.com/blockscout/blockscout/pull/7042) - Bump ex_cldr_numbers from 2.29.0 to 2.30.0 +- [7048](https://github.com/blockscout/blockscout/pull/7048) - Bump webpack from 5.75.0 to 5.76.0 in /apps/block_scout_web/assets +- [7049](https://github.com/blockscout/blockscout/pull/7049) - Bump jquery from 3.6.3 to 3.6.4 in /apps/block_scout_web/assets +- [7050](https://github.com/blockscout/blockscout/pull/7050) - Bump mini-css-extract-plugin from 2.7.2 to 2.7.3 in /apps/block_scout_web/assets +- [7063](https://github.com/blockscout/blockscout/pull/7063) - Bump autoprefixer from 10.4.13 to 10.4.14 in /apps/block_scout_web/assets +- [7064](https://github.com/blockscout/blockscout/pull/7064) - Bump ueberauth from 0.10.3 to 0.10.5 +- [7074](https://github.com/blockscout/blockscout/pull/7074) - Bump core-js from 3.29.0 to 3.29.1 in /apps/block_scout_web/assets +- [7078](https://github.com/blockscout/blockscout/pull/7078) - Bump ex_cldr from 2.35.1 to 2.36.0 +- [7075](https://github.com/blockscout/blockscout/pull/7075) - Bump webpack from 5.76.0 to 5.76.1 in /apps/block_scout_web/assets +- [7077](https://github.com/blockscout/blockscout/pull/7077) - Bump wallaby from 0.30.1 to 0.30.2 +- [7073](https://github.com/blockscout/blockscout/pull/7073) - Bump sass from 1.58.3 to 1.59.2 in /apps/block_scout_web/assets +- [7076](https://github.com/blockscout/blockscout/pull/7076) - Bump eslint from 8.35.0 to 8.36.0 in /apps/block_scout_web/assets +- [7082](https://github.com/blockscout/blockscout/pull/7082) - Bump @babel/core from 7.21.0 to 7.21.3 in /apps/block_scout_web/assets +- [7083](https://github.com/blockscout/blockscout/pull/7083) - Bump style-loader from 3.3.1 to 3.3.2 in /apps/block_scout_web/assets +- [7086](https://github.com/blockscout/blockscout/pull/7086) - Bump sass from 1.59.2 to 1.59.3 in /apps/block_scout_web/assets +- [7092](https://github.com/blockscout/blockscout/pull/7092) - Bump mini-css-extract-plugin from 2.7.3 to 2.7.4 in /apps/block_scout_web/assets +- [7094](https://github.com/blockscout/blockscout/pull/7094) - Bump webpack from 5.76.1 to 5.76.2 in /apps/block_scout_web/assets +- [7095](https://github.com/blockscout/blockscout/pull/7095) - Bump plug_cowboy from 2.6.0 to 2.6.1 +- [7093](https://github.com/blockscout/blockscout/pull/7093) - Bump postcss-loader from 7.0.2 to 7.1.0 in /apps/block_scout_web/assets +- [7100](https://github.com/blockscout/blockscout/pull/7100) - Bump mini-css-extract-plugin from 2.7.4 to 2.7.5 in /apps/block_scout_web/assets +- [7101](https://github.com/blockscout/blockscout/pull/7101) - Bump ex_doc from 0.29.2 to 0.29.3 +- [7113](https://github.com/blockscout/blockscout/pull/7113) - Bump sass-loader from 13.2.0 to 13.2.1 in /apps/block_scout_web/assets +- [7114](https://github.com/blockscout/blockscout/pull/7114) - Bump web3 from 1.8.2 to 1.9.0 in /apps/block_scout_web/assets +- [7117](https://github.com/blockscout/blockscout/pull/7117) - Bump flow from 1.2.3 to 1.2.4 +- [7127](https://github.com/blockscout/blockscout/pull/7127) - Bump webpack from 5.76.2 to 5.76.3 in /apps/block_scout_web/assets +- [7128](https://github.com/blockscout/blockscout/pull/7128) - Bump ecto from 3.9.4 to 3.9.5 +- [7129](https://github.com/blockscout/blockscout/pull/7129) - Bump ex_abi from 0.5.16 to 0.6.0 +- [7118](https://github.com/blockscout/blockscout/pull/7118) - Bump credo from 1.6.7 to 1.7.0 +- [7151](https://github.com/blockscout/blockscout/pull/7151) - Bump mixpanel-browser from 2.45.0 to 2.46.0 in /apps/block_scout_web/assets +- [7156](https://github.com/blockscout/blockscout/pull/7156) - Bump cldr_utils from 2.21.0 to 2.22.0 +- [7155](https://github.com/blockscout/blockscout/pull/7155) - Bump timex from 3.7.9 to 3.7.11 +- [7154](https://github.com/blockscout/blockscout/pull/7154) - Bump sass-loader from 13.2.1 to 13.2.2 in /apps/block_scout_web/assets +- [7152](https://github.com/blockscout/blockscout/pull/7152) - Bump @fortawesome/fontawesome-free from 6.3.0 to 6.4.0 in /apps/block_scout_web/assets +- [7153](https://github.com/blockscout/blockscout/pull/7153) - Bump sass from 1.59.3 to 1.60.0 in /apps/block_scout_web/assets +- [7159](https://github.com/blockscout/blockscout/pull/7159) - Bump ex_cldr_numbers from 2.30.0 to 2.30.1 +- [7158](https://github.com/blockscout/blockscout/pull/7158) - Bump css-minimizer-webpack-plugin from 4.2.2 to 5.0.0 in /apps/block_scout_web/assets +- [7165](https://github.com/blockscout/blockscout/pull/7165) - Bump ex_doc from 0.29.3 to 0.29.4 +- [7164](https://github.com/blockscout/blockscout/pull/7164) - Bump photoswipe from 5.3.6 to 5.3.7 in /apps/block_scout_web/assets +- [7167](https://github.com/blockscout/blockscout/pull/7167) - Bump webpack from 5.76.3 to 5.77.0 in /apps/block_scout_web/assets +- [7166](https://github.com/blockscout/blockscout/pull/7166) - Bump eslint from 8.36.0 to 8.37.0 in /apps/block_scout_web/assets + +
+ +## 5.1.1-beta + +### Features + +- [#6973](https://github.com/blockscout/blockscout/pull/6973) - API v2: `/smart-contracts` and `/state-changes` endpoints +- [#6897](https://github.com/blockscout/blockscout/pull/6897) - Support basic auth in JSON RPC endpoint +- [#6908](https://github.com/blockscout/blockscout/pull/6908) - Allow disable API rate limit +- [#6951](https://github.com/blockscout/blockscout/pull/6951), [#6958](https://github.com/blockscout/blockscout/pull/6958), [#6991](https://github.com/blockscout/blockscout/pull/6991) - Set poll: true for TokenInstance fetcher +- [#5720](https://github.com/blockscout/blockscout/pull/5720) - Fetchers graceful shutdown + +### Fixes + +- [#6933](https://github.com/blockscout/blockscout/pull/6933) - Extract blocking UI requests to separate GenServers +- [#6953](https://github.com/blockscout/blockscout/pull/6953) - reCAPTCHA dark mode +- [#6940](https://github.com/blockscout/blockscout/pull/6940) - Reduce ttl_check_interval for cache module +- [#6941](https://github.com/blockscout/blockscout/pull/6941) - Sanitize search query before displaying +- [#6912](https://github.com/blockscout/blockscout/pull/6912) - Docker compose fix exposed ports +- [#6913](https://github.com/blockscout/blockscout/pull/6913) - Fix an error occurred when decoding base64 encoded json +- [#6911](https://github.com/blockscout/blockscout/pull/6911) - Fix bugs in verification API v2 +- [#6903](https://github.com/blockscout/blockscout/pull/6903), [#6937](https://github.com/blockscout/blockscout/pull/6937), [#6961](https://github.com/blockscout/blockscout/pull/6961) - Fix indexed blocks value in "Indexing tokens" banner +- [#6891](https://github.com/blockscout/blockscout/pull/6891) - Fix read contract for geth +- [#6889](https://github.com/blockscout/blockscout/pull/6889) - Fix Internal Server Error on tx input decoding +- [#6893](https://github.com/blockscout/blockscout/pull/6893) - Fix token type definition for multiple interface tokens +- [#6922](https://github.com/blockscout/blockscout/pull/6922) - Fix WebSocketClient +- [#6501](https://github.com/blockscout/blockscout/pull/6501) - Fix wss connect + +### Chore + +- [#6981](https://github.com/blockscout/blockscout/pull/6981) - Token instance fetcher batch size and concurrency env vars +- [#6954](https://github.com/blockscout/blockscout/pull/6954), [#6979](https://github.com/blockscout/blockscout/pull/6979) - Move some compile time vars to runtime +- [#6952](https://github.com/blockscout/blockscout/pull/6952) - Manage BlockReward fetcher params +- [#6929](https://github.com/blockscout/blockscout/pull/6929) - Extend `INDEXER_MEMORY_LIMIT` env parsing +- [#6902](https://github.com/blockscout/blockscout/pull/6902) - Increase verification timeout to 120 seconds for microservice verification + +
+ Dependencies version bumps + +- [#6882](https://github.com/blockscout/blockscout/pull/6882) - Bump exvcr from 0.13.4 to 0.13.5 +- [#6883](https://github.com/blockscout/blockscout/pull/6883) - Bump floki from 0.34.0 to 0.34.1 +- [#6884](https://github.com/blockscout/blockscout/pull/6884) - Bump eslint from 8.33.0 to 8.34.0 in /apps/block_scout_web/assets +- [#6894](https://github.com/blockscout/blockscout/pull/6894) - Bump core-js from 3.27.2 to 3.28.0 in /apps/block_scout_web/assets +- [#6895](https://github.com/blockscout/blockscout/pull/6895) - Bump sass from 1.58.0 to 1.58.1 in /apps/block_scout_web/assets +- [#6905](https://github.com/blockscout/blockscout/pull/6905) - Bump jest-environment-jsdom from 29.4.2 to 29.4.3 in /apps/block_scout_web/assets +- [#6907](https://github.com/blockscout/blockscout/pull/6907) - Bump cbor from 1.0.0 to 1.0.1 +- [#6906](https://github.com/blockscout/blockscout/pull/6906) - Bump jest from 29.4.2 to 29.4.3 in /apps/block_scout_web/assets +- [#6917](https://github.com/blockscout/blockscout/pull/6917) - Bump tesla from 1.5.0 to 1.5.1 +- [#6930](https://github.com/blockscout/blockscout/pull/6930) - Bump sweetalert2 from 11.7.1 to 11.7.2 in /apps/block_scout_web/assets +- [#6942](https://github.com/blockscout/blockscout/pull/6942) - Bump @babel/core from 7.20.12 to 7.21.0 in /apps/block_scout_web/assets +- [#6943](https://github.com/blockscout/blockscout/pull/6943) - Bump gettext from 0.22.0 to 0.22.1 +- [#6944](https://github.com/blockscout/blockscout/pull/6944) - Bump sass from 1.58.1 to 1.58.3 in /apps/block_scout_web/assets +- [#6966](https://github.com/blockscout/blockscout/pull/6966) - Bump solc from 0.8.18 to 0.8.19 in /apps/explorer +- [#6967](https://github.com/blockscout/blockscout/pull/6967) - Bump photoswipe from 5.3.5 to 5.3.6 in /apps/block_scout_web/assets +- [#6968](https://github.com/blockscout/blockscout/pull/6968) - Bump ex_rlp from 0.5.5 to 0.6.0 + +
+ +## 5.1.0-beta + +### Features + +- [#6871](https://github.com/blockscout/blockscout/pull/6871) - Integrate new smart contract verifier version +- [#6838](https://github.com/blockscout/blockscout/pull/6838) - Disable dark mode env var +- [#6843](https://github.com/blockscout/blockscout/pull/6843) - Add env variable to hide Add to MM button +- [#6744](https://github.com/blockscout/blockscout/pull/6744) - API v2: smart contracts verification +- [#6763](https://github.com/blockscout/blockscout/pull/6763) - Permanent UI dark mode +- [#6721](https://github.com/blockscout/blockscout/pull/6721) - Implement fetching internal transactions from callTracer +- [#6541](https://github.com/blockscout/blockscout/pull/6541) - Integrate sig provider +- [#6712](https://github.com/blockscout/blockscout/pull/6712), [#6798](https://github.com/blockscout/blockscout/pull/6798) - API v2 update +- [#6582](https://github.com/blockscout/blockscout/pull/6582) - Transaction actions indexer +- [#6863](https://github.com/blockscout/blockscout/pull/6863) - Move OnDemand fetchers from indexer supervisor + +### Fixes + +- [#6864](https://github.com/blockscout/blockscout/pull/6864) - Fix pool checker in tx actions fetcher +- [#6860](https://github.com/blockscout/blockscout/pull/6860) - JSON RPC to CSP header +- [#6859](https://github.com/blockscout/blockscout/pull/6859) - Fix task restart in transaction actions fetcher +- [#6840](https://github.com/blockscout/blockscout/pull/6840) - Fix realtime block fetcher +- [#6831](https://github.com/blockscout/blockscout/pull/6831) - Copy of [#6028](https://github.com/blockscout/blockscout/pull/6028) +- [#6832](https://github.com/blockscout/blockscout/pull/6832) - Transaction actions fix +- [#6827](https://github.com/blockscout/blockscout/pull/6827) - Fix handling unknown calls from `callTracer` +- [#6793](https://github.com/blockscout/blockscout/pull/6793) - Change sig-provider default image tag to main +- [#6777](https://github.com/blockscout/blockscout/pull/6777) - Fix -1 transaction counter +- [#6746](https://github.com/blockscout/blockscout/pull/6746) - Fix -1 address counter +- [#6736](https://github.com/blockscout/blockscout/pull/6736) - Fix `/tokens` in old UI +- [#6705](https://github.com/blockscout/blockscout/pull/6705) - Fix `/smart-contracts` bugs in API v2 +- [#6740](https://github.com/blockscout/blockscout/pull/6740) - Fix tokens deadlock +- [#6759](https://github.com/blockscout/blockscout/pull/6759) - Add `jq` in docker image +- [#6779](https://github.com/blockscout/blockscout/pull/6779) - Fix missing ranges bounds clearing +- [#6652](https://github.com/blockscout/blockscout/pull/6652) - Fix geth transaction tracer + +### Chore + +- [#6877](https://github.com/blockscout/blockscout/pull/6877) - Docker-compose: increase default max connections and db pool size +- [#6853](https://github.com/blockscout/blockscout/pull/6853) - Fix 503 page +- [#6845](https://github.com/blockscout/blockscout/pull/6845) - Extract Docker-compose services into separate files +- [#6839](https://github.com/blockscout/blockscout/pull/6839) - Add cache to transaction actions parser +- [#6834](https://github.com/blockscout/blockscout/pull/6834) - Take into account FIRST_BLOCK in "Total blocks" counter on the main page +- [#6340](https://github.com/blockscout/blockscout/pull/6340) - Rollback to websocket_client 1.3.0 +- [#6786](https://github.com/blockscout/blockscout/pull/6786) - Refactor `try rescue` statements to keep stacktrace +- [#6695](https://github.com/blockscout/blockscout/pull/6695) - Process errors and warnings with enables check-js feature in VS code + +
+ Dependencies version bumps + +- [#6703](https://github.com/blockscout/blockscout/pull/6703) - Bump @amplitude/analytics-browser from 1.6.7 to 1.6.8 in /apps/block_scout_web/assets +- [#6716](https://github.com/blockscout/blockscout/pull/6716) - Bump prometheus from 4.9.1 to 4.10.0 +- [#6717](https://github.com/blockscout/blockscout/pull/6717) - Bump briefly from 13a9790 to 20d1318 +- [#6715](https://github.com/blockscout/blockscout/pull/6715) - Bump eslint-plugin-import from 2.26.0 to 2.27.4 in /apps/block_scout_web/assets +- [#6702](https://github.com/blockscout/blockscout/pull/6702) - Bump sweetalert2 from 11.6.16 to 11.7.0 in /apps/block_scout_web/assets +- [#6722](https://github.com/blockscout/blockscout/pull/6722) - Bump eslint from 8.31.0 to 8.32.0 in /apps/block_scout_web/assets +- [#6727](https://github.com/blockscout/blockscout/pull/6727) - Bump eslint-plugin-import from 2.27.4 to 2.27.5 in /apps/block_scout_web/assets +- [#6728](https://github.com/blockscout/blockscout/pull/6728) - Bump ex_cldr_numbers from 2.28.0 to 2.29.0 +- [#6732](https://github.com/blockscout/blockscout/pull/6732) - Bump chart.js from 4.1.2 to 4.2.0 in /apps/block_scout_web/assets +- [#6739](https://github.com/blockscout/blockscout/pull/6739) - Bump core-js from 3.27.1 to 3.27.2 in /apps/block_scout_web/assets +- [#6753](https://github.com/blockscout/blockscout/pull/6753) - Bump gettext from 0.21.0 to 0.22.0 +- [#6754](https://github.com/blockscout/blockscout/pull/6754) - Bump cookiejar from 2.1.3 to 2.1.4 in /apps/block_scout_web/assets +- [#6756](https://github.com/blockscout/blockscout/pull/6756) - Bump jest from 29.3.1 to 29.4.0 in /apps/block_scout_web/assets +- [#6757](https://github.com/blockscout/blockscout/pull/6757) - Bump jest-environment-jsdom from 29.3.1 to 29.4.0 in /apps/block_scout_web/assets +- [#6764](https://github.com/blockscout/blockscout/pull/6764) - Bump sweetalert2 from 11.7.0 to 11.7.1 in /apps/block_scout_web/assets +- [#6770](https://github.com/blockscout/blockscout/pull/6770) - Bump jest-environment-jsdom from 29.4.0 to 29.4.1 in /apps/block_scout_web/assets +- [#6773](https://github.com/blockscout/blockscout/pull/6773) - Bump ex_cldr from 2.34.0 to 2.34.1 +- [#6772](https://github.com/blockscout/blockscout/pull/6772) - Bump jest from 29.4.0 to 29.4.1 in /apps/block_scout_web/assets +- [#6771](https://github.com/blockscout/blockscout/pull/6771) - Bump web3modal from 1.9.11 to 1.9.12 in /apps/block_scout_web/assets +- [#6781](https://github.com/blockscout/blockscout/pull/6781) - Bump cldr_utils from 2.19.2 to 2.20.0 +- [#6789](https://github.com/blockscout/blockscout/pull/6789) - Bump eslint from 8.32.0 to 8.33.0 in /apps/block_scout_web/assets +- [#6790](https://github.com/blockscout/blockscout/pull/6790) - Bump redux from 4.2.0 to 4.2.1 in /apps/block_scout_web/assets +- [#6792](https://github.com/blockscout/blockscout/pull/6792) - Bump cldr_utils from 2.20.0 to 2.21.0 +- [#6788](https://github.com/blockscout/blockscout/pull/6788) - Bump web3 from 1.8.1 to 1.8.2 in /apps/block_scout_web/assets +- [#6802](https://github.com/blockscout/blockscout/pull/6802) - Bump @amplitude/analytics-browser from 1.6.8 to 1.7.0 in /apps/block_scout_web/assets +- [#6803](https://github.com/blockscout/blockscout/pull/6803) - Bump photoswipe from 5.3.4 to 5.3.5 in /apps/block_scout_web/assets +- [#6804](https://github.com/blockscout/blockscout/pull/6804) - Bump sass from 1.57.1 to 1.58.0 in /apps/block_scout_web/assets +- [#6807](https://github.com/blockscout/blockscout/pull/6807) - Bump absinthe from 1.7.0 to 1.7.1 +- [#6806](https://github.com/blockscout/blockscout/pull/6806) - Bump solc from 0.8.16 to 0.8.18 in /apps/explorer +- [#6814](https://github.com/blockscout/blockscout/pull/6814) - Bump @amplitude/analytics-browser from 1.7.0 to 1.7.1 in /apps/block_scout_web/assets +- [#6813](https://github.com/blockscout/blockscout/pull/6813) - Bump chartjs-adapter-luxon from 1.3.0 to 1.3.1 in /apps/block_scout_web/assets +- [#6846](https://github.com/blockscout/blockscout/pull/6846) - Bump jest from 29.4.1 to 29.4.2 in /apps/block_scout_web/assets +- [#6850](https://github.com/blockscout/blockscout/pull/6850) - Bump redix from 1.2.0 to 1.2.1 +- [#6849](https://github.com/blockscout/blockscout/pull/6849) - Bump jest-environment-jsdom from 29.4.1 to 29.4.2 in /apps/block_scout_web/assets +- [#6857](https://github.com/blockscout/blockscout/pull/6857) - Bump @amplitude/analytics-browser from 1.7.1 to 1.8.0 in /apps/block_scout_web/assets +- [#6847](https://github.com/blockscout/blockscout/pull/6847) - Bump @fortawesome/fontawesome-free from 6.2.1 to 6.3.0 in /apps/block_scout_web/assets +- [#6866](https://github.com/blockscout/blockscout/pull/6866) - Bump chart.js from 4.2.0 to 4.2.1 in /apps/block_scout_web/assets + +
+ +## 5.0.0-beta + +### Features + +- [#6092](https://github.com/blockscout/blockscout/pull/6092) - Blockscout Account functionality +- [#6324](https://github.com/blockscout/blockscout/pull/6324) - Add verified contracts list page +- [#6316](https://github.com/blockscout/blockscout/pull/6316) - Public tags functionality +- [#6444](https://github.com/blockscout/blockscout/pull/6444) - Add support for yul verification via rust microservice +- [#6073](https://github.com/blockscout/blockscout/pull/6073) - Add vyper support for rust verifier microservice integration +- [#6401](https://github.com/blockscout/blockscout/pull/6401) - Add Sol2Uml contract visualization +- [#6583](https://github.com/blockscout/blockscout/pull/6583), [#6687](https://github.com/blockscout/blockscout/pull/6687) - Missing ranges collector +- [#6574](https://github.com/blockscout/blockscout/pull/6574), [#6601](https://github.com/blockscout/blockscout/pull/6601) - Allow and manage insecure HTTP connection to the archive node +- [#6433](https://github.com/blockscout/blockscout/pull/6433), [#6698](https://github.com/blockscout/blockscout/pull/6698) - Update error pages +- [#6544](https://github.com/blockscout/blockscout/pull/6544) - API improvements +- [#5561](https://github.com/blockscout/blockscout/pull/5561), [#6523](https://github.com/blockscout/blockscout/pull/6523), [#6549](https://github.com/blockscout/blockscout/pull/6549) - Improve working with contracts implementations +- [#6481](https://github.com/blockscout/blockscout/pull/6481) - Smart contract verification improvements +- [#6440](https://github.com/blockscout/blockscout/pull/6440) - Add support for base64 encoded NFT metadata +- [#6407](https://github.com/blockscout/blockscout/pull/6407) - Indexed ratio for int txs fetching stage +- [#6379](https://github.com/blockscout/blockscout/pull/6379), [#6429](https://github.com/blockscout/blockscout/pull/6429), [#6642](https://github.com/blockscout/blockscout/pull/6642), [#6677](https://github.com/blockscout/blockscout/pull/6677) - API v2 for frontend +- [#6351](https://github.com/blockscout/blockscout/pull/6351) - Enable forum link env var +- [#6196](https://github.com/blockscout/blockscout/pull/6196) - INDEXER_CATCHUP_BLOCKS_BATCH_SIZE and INDEXER_CATCHUP_BLOCKS_CONCURRENCY env variables +- [#6187](https://github.com/blockscout/blockscout/pull/6187) - Filter by created time of verified contracts in listcontracts API endpoint +- [#6111](https://github.com/blockscout/blockscout/pull/6111) - Add Prometheus metrics to indexer +- [#6168](https://github.com/blockscout/blockscout/pull/6168) - Token instance fetcher checks instance owner and updates current token balance +- [#6209](https://github.com/blockscout/blockscout/pull/6209) - Add metrics for block import stages, runners, steps +- [#6257](https://github.com/blockscout/blockscout/pull/6257), [#6276](https://github.com/blockscout/blockscout/pull/6276) - DISABLE_TOKEN_INSTANCE_FETCHER env variable +- [#6391](https://github.com/blockscout/blockscout/pull/6391), [#6427](https://github.com/blockscout/blockscout/pull/6427) - TokenTransfer token_id -> token_ids migration +- [#6443](https://github.com/blockscout/blockscout/pull/6443) - Drop internal transactions order index +- [#6450](https://github.com/blockscout/blockscout/pull/6450) - INDEXER_INTERNAL_TRANSACTIONS_BATCH_SIZE and INDEXER_INTERNAL_TRANSACTIONS_CONCURRENCY env variables +- [#6454](https://github.com/blockscout/blockscout/pull/6454) - INDEXER_RECEIPTS_BATCH_SIZE, INDEXER_RECEIPTS_CONCURRENCY, INDEXER_COIN_BALANCES_BATCH_SIZE, INDEXER_COIN_BALANCES_CONCURRENCY env variables +- [#6476](https://github.com/blockscout/blockscout/pull/6476), [#6484](https://github.com/blockscout/blockscout/pull/6484) - Update token balances indexes +- [#6510](https://github.com/blockscout/blockscout/pull/6510) - Set consensus: false for blocks on int transaction foreign_key_violation +- [#6565](https://github.com/blockscout/blockscout/pull/6565) - Set restart: :permanent for permanent fetchers +- [#6568](https://github.com/blockscout/blockscout/pull/6568) - Drop unfetched_token_balances index +- [#6647](https://github.com/blockscout/blockscout/pull/6647) - Pending block operations update +- [#6542](https://github.com/blockscout/blockscout/pull/6542) - Init mixpanel and amplitude analytics +- [#6713](https://github.com/blockscout/blockscout/pull/6713) - Remove internal transactions deletion + +### Fixes + +- [#6676](https://github.com/blockscout/blockscout/pull/6676) - Fix `/smart-contracts` bugs in API v2 +- [#6603](https://github.com/blockscout/blockscout/pull/6603) - Add to MM button explorer URL fix +- [#6512](https://github.com/blockscout/blockscout/pull/6512) - Allow gasUsed in failed internal txs; Leave error field for staticcall +- [#6532](https://github.com/blockscout/blockscout/pull/6532) - Fix index creation migration +- [#6473](https://github.com/blockscout/blockscout/pull/6473) - Fix state changes for contract creation transactions +- [#6475](https://github.com/blockscout/blockscout/pull/6475) - Fix token name with unicode graphemes shortening +- [#6420](https://github.com/blockscout/blockscout/pull/6420) - Fix address logs search +- [#6390](https://github.com/blockscout/blockscout/pull/6390), [#6502](https://github.com/blockscout/blockscout/pull/6502), [#6511](https://github.com/blockscout/blockscout/pull/6511) - Fix transactions responses in API v2 +- [#6357](https://github.com/blockscout/blockscout/pull/6357), [#6409](https://github.com/blockscout/blockscout/pull/6409), [#6428](https://github.com/blockscout/blockscout/pull/6428) - Fix definitions of NETWORK_PATH, API_PATH, SOCKET_ROOT: process trailing slash +- [#6338](https://github.com/blockscout/blockscout/pull/6338) - Fix token search with space +- [#6329](https://github.com/blockscout/blockscout/pull/6329) - Prevent logger from truncating response from rust verifier service in case of an error +- [#6309](https://github.com/blockscout/blockscout/pull/6309) - Fix read contract bug and change address tx count +- [#6303](https://github.com/blockscout/blockscout/pull/6303) - Fix some UI bugs +- [#6243](https://github.com/blockscout/blockscout/pull/6243) - Fix freezes on `/blocks` page +- [#6162](https://github.com/blockscout/blockscout/pull/6162) - Extend token symbol type varchar(255) -> text +- [#6158](https://github.com/blockscout/blockscout/pull/6158) - Add missing clause for merge_twin_vyper_contract_with_changeset function +- [#6090](https://github.com/blockscout/blockscout/pull/6090) - Fix metadata fetching for ERC-1155 tokens instances +- [#6091](https://github.com/blockscout/blockscout/pull/6091) - Improve fetching media type for NFT +- [#6094](https://github.com/blockscout/blockscout/pull/6094) - Fix inconsistent behavior of `getsourcecode` method +- [#6105](https://github.com/blockscout/blockscout/pull/6105) - Fix some token transfers broadcasting +- [#6106](https://github.com/blockscout/blockscout/pull/6106) - Fix 500 response on `/coin-balance` for empty address +- [#6118](https://github.com/blockscout/blockscout/pull/6118) - Fix unfetched token balances +- [#6163](https://github.com/blockscout/blockscout/pull/6163) - Fix rate limit logs +- [#6223](https://github.com/blockscout/blockscout/pull/6223) - Fix coin_id test +- [#6336](https://github.com/blockscout/blockscout/pull/6336) - Fix sending request on each key in token search +- [#6327](https://github.com/blockscout/blockscout/pull/6327) - Fix and refactor address logs page and search +- [#6449](https://github.com/blockscout/blockscout/pull/6449) - Search min_missing_block_number from zero +- [#6492](https://github.com/blockscout/blockscout/pull/6492) - Remove token instance owner fetching +- [#6536](https://github.com/blockscout/blockscout/pull/6536) - Fix internal transactions query +- [#6550](https://github.com/blockscout/blockscout/pull/6550) - Query token transfers before updating +- [#6599](https://github.com/blockscout/blockscout/pull/6599) - unhandled division by zero +- [#6590](https://github.com/blockscout/blockscout/pull/6590) - ignore some receipt fields for metis + +### Chore + +- [#6607](https://github.com/blockscout/blockscout/pull/6607) - Run e2e tests after PR review +- [#6606](https://github.com/blockscout/blockscout/pull/6606) - Add ARG SESSION_COOKIE_DOMAIN to Dockerfile +- [#6600](https://github.com/blockscout/blockscout/pull/6600) - Token stub icon +- [#6588](https://github.com/blockscout/blockscout/pull/6588) - Add latest image build for frontend-main with specific build-args +- [#6584](https://github.com/blockscout/blockscout/pull/6584) - Vacuum package-lock.json +- [#6581](https://github.com/blockscout/blockscout/pull/6581) - Dark mode switcher localStorage to cookie in order to support new UI +- [#6572](https://github.com/blockscout/blockscout/pull/6572) - pending_block_operations table: remove fetch_internal_transactions column +- [#6387](https://github.com/blockscout/blockscout/pull/6387) - Fix errors in docker-build and e2e-tests workflows +- [#6325](https://github.com/blockscout/blockscout/pull/6325) - Set http_only attribute of account authorization cookie to false +- [#6343](https://github.com/blockscout/blockscout/pull/6343) - Docker-compose persistent logs +- [#6240](https://github.com/blockscout/blockscout/pull/6240) - Elixir 1.14 support +- [#6204](https://github.com/blockscout/blockscout/pull/6204) - Refactor contract libs render, CONTRACT_VERIFICATION_MAX_LIBRARIES, refactor parsing integer env vars in config +- [#6195](https://github.com/blockscout/blockscout/pull/6195) - Docker compose configs improvements: Redis container name and persistent storage +- [#6192](https://github.com/blockscout/blockscout/pull/6192), [#6207](https://github.com/blockscout/blockscout/pull/6207) - Hide Indexing Internal Transactions message, if INDEXER_DISABLE_INTERNAL_TRANSACTIONS_FETCHER=true +- [#6183](https://github.com/blockscout/blockscout/pull/6183) - Transparent coin name definition +- [#6155](https://github.com/blockscout/blockscout/pull/6155), [#6189](https://github.com/blockscout/blockscout/pull/6189) - Refactor Ethereum JSON RPC variants +- [#6125](https://github.com/blockscout/blockscout/pull/6125) - Rename obsolete "parity" EthereumJSONRPC.Variant to "nethermind" +- [#6124](https://github.com/blockscout/blockscout/pull/6124) - Docker compose: add config for Erigon +- [#6061](https://github.com/blockscout/blockscout/pull/6061) - Discord badge and updated permalink + +
+ Dependencies version bumps + +- [#6585](https://github.com/blockscout/blockscout/pull/6585) - Bump jquery from 3.6.1 to 3.6.2 in /apps/block_scout_web/assets +- [#6610](https://github.com/blockscout/blockscout/pull/6610) - Bump tesla from 1.4.4 to 1.5.0 +- [#6611](https://github.com/blockscout/blockscout/pull/6611) - Bump chart.js from 4.0.1 to 4.1.0 in /apps/block_scout_web/assets +- [#6618](https://github.com/blockscout/blockscout/pull/6618) - Bump chart.js from 4.1.0 to 4.1.1 in /apps/block_scout_web/assets +- [#6619](https://github.com/blockscout/blockscout/pull/6619) - Bump eslint from 8.29.0 to 8.30.0 in /apps/block_scout_web/assets +- [#6620](https://github.com/blockscout/blockscout/pull/6620) - Bump sass from 1.56.2 to 1.57.0 in /apps/block_scout_web/assets +- [#6626](https://github.com/blockscout/blockscout/pull/6626) - Bump @amplitude/analytics-browser from 1.6.1 to 1.6.6 in /apps/block_scout_web/assets +- [#6627](https://github.com/blockscout/blockscout/pull/6627) - Bump sass from 1.57.0 to 1.57.1 in /apps/block_scout_web/assets +- [#6628](https://github.com/blockscout/blockscout/pull/6628) - Bump sweetalert2 from 11.6.15 to 11.6.16 in /apps/block_scout_web/assets +- [#6631](https://github.com/blockscout/blockscout/pull/6631) - Bump jquery from 3.6.2 to 3.6.3 in /apps/block_scout_web/assets +- [#6633](https://github.com/blockscout/blockscout/pull/6633) - Bump ecto_sql from 3.9.1 to 3.9.2 +- [#6636](https://github.com/blockscout/blockscout/pull/6636) - Bump ecto from 3.9.3 to 3.9.4 +- [#6639](https://github.com/blockscout/blockscout/pull/6639) - Bump @amplitude/analytics-browser from 1.6.6 to 1.6.7 in /apps/block_scout_web/assets +- [#6640](https://github.com/blockscout/blockscout/pull/6640) - Bump @babel/core from 7.20.5 to 7.20.7 in /apps/block_scout_web/assets +- [#6653](https://github.com/blockscout/blockscout/pull/6653) - Bump luxon from 3.1.1 to 3.2.0 in /apps/block_scout_web/assets +- [#6654](https://github.com/blockscout/blockscout/pull/6654) - Bump flow from 1.2.0 to 1.2.1 +- [#6669](https://github.com/blockscout/blockscout/pull/6669) - Bump @babel/core from 7.20.7 to 7.20.12 in /apps/block_scout_web/assets +- [#6663](https://github.com/blockscout/blockscout/pull/6663) - Bump eslint from 8.30.0 to 8.31.0 in /apps/block_scout_web/assets +- [#6662](https://github.com/blockscout/blockscout/pull/6662) - Bump viewerjs from 1.11.1 to 1.11.2 in /apps/block_scout_web/assets +- [#6668](https://github.com/blockscout/blockscout/pull/6668) - Bump babel-loader from 9.1.0 to 9.1.2 in /apps/block_scout_web/assets +- [#6670](https://github.com/blockscout/blockscout/pull/6670) - Bump json5 from 1.0.1 to 1.0.2 in /apps/block_scout_web/assets +- [#6673](https://github.com/blockscout/blockscout/pull/6673) - Bump chart.js from 4.1.1 to 4.1.2 in /apps/block_scout_web/assets +- [#6674](https://github.com/blockscout/blockscout/pull/6674) - Bump luxon from 3.2.0 to 3.2.1 in /apps/block_scout_web/assets +- [#6675](https://github.com/blockscout/blockscout/pull/6675) - Bump web3modal from 1.9.10 to 1.9.11 in /apps/block_scout_web/assets +- [#6679](https://github.com/blockscout/blockscout/pull/6679) - Bump gettext from 0.20.0 to 0.21.0 +- [#6680](https://github.com/blockscout/blockscout/pull/6680) - Bump flow from 1.2.1 to 1.2.2 +- [#6689](https://github.com/blockscout/blockscout/pull/6689) - Bump postcss from 8.4.20 to 8.4.21 in /apps/block_scout_web/assets +- [#6690](https://github.com/blockscout/blockscout/pull/6690) - Bump bamboo from 2.2.0 to 2.3.0 +- [#6691](https://github.com/blockscout/blockscout/pull/6691) - Bump flow from 1.2.2 to 1.2.3 +- [#6696](https://github.com/blockscout/blockscout/pull/6696) - Bump briefly from 1dd66ee to 13a9790 +- [#6697](https://github.com/blockscout/blockscout/pull/6697) - Bump mime from 1.6.0 to 2.0.3 +- [#6053](https://github.com/blockscout/blockscout/pull/6053) - Bump jest-environment-jsdom from 29.0.1 to 29.0.2 in /apps/block_scout_web/assets +- [#6055](https://github.com/blockscout/blockscout/pull/6055) - Bump @babel/core from 7.18.13 to 7.19.0 in /apps/block_scout_web/assets +- [#6054](https://github.com/blockscout/blockscout/pull/6054) - Bump jest from 29.0.1 to 29.0.2 in /apps/block_scout_web/assets +- [#6056](https://github.com/blockscout/blockscout/pull/6056) - Bump @babel/preset-env from 7.18.10 to 7.19.0 in /apps/block_scout_web/assets +- [#6064](https://github.com/blockscout/blockscout/pull/6064) - Bump sweetalert2 from 11.4.29 to 11.4.31 in /apps/block_scout_web/assets +- [#6075](https://github.com/blockscout/blockscout/pull/6075) - Bump sweetalert2 from 11.4.31 to 11.4.32 in /apps/block_scout_web/assets +- [#6082](https://github.com/blockscout/blockscout/pull/6082) - Bump core-js from 3.25.0 to 3.25.1 in /apps/block_scout_web/assets +- [#6083](https://github.com/blockscout/blockscout/pull/6083) - Bump sass from 1.54.8 to 1.54.9 in /apps/block_scout_web/assets +- [#6095](https://github.com/blockscout/blockscout/pull/6095) - Bump jest-environment-jsdom from 29.0.2 to 29.0.3 in /apps/block_scout_web/assets +- [#6096](https://github.com/blockscout/blockscout/pull/6096) - Bump exvcr from 0.13.3 to 0.13.4 +- [#6101](https://github.com/blockscout/blockscout/pull/6101) - Bump ueberauth from 0.10.1 to 0.10.2 +- [#6102](https://github.com/blockscout/blockscout/pull/6102) - Bump eslint from 8.23.0 to 8.23.1 in /apps/block_scout_web/assets +- [#6098](https://github.com/blockscout/blockscout/pull/6098) - Bump ex_json_schema from 0.9.1 to 0.9.2 +- [#6097](https://github.com/blockscout/blockscout/pull/6097) - Bump autoprefixer from 10.4.8 to 10.4.9 in /apps/block_scout_web/assets +- [#6099](https://github.com/blockscout/blockscout/pull/6099) - Bump jest from 29.0.2 to 29.0.3 in /apps/block_scout_web/assets +- [#6103](https://github.com/blockscout/blockscout/pull/6103) - Bump css-minimizer-webpack-plugin from 4.0.0 to 4.1.0 in /apps/block_scout_web/assets +- [#6108](https://github.com/blockscout/blockscout/pull/6108) - Bump autoprefixer from 10.4.9 to 10.4.10 in /apps/block_scout_web/assets +- [#6116](https://github.com/blockscout/blockscout/pull/6116) - Bump autoprefixer from 10.4.10 to 10.4.11 in /apps/block_scout_web/assets +- [#6114](https://github.com/blockscout/blockscout/pull/6114) - Bump @babel/core from 7.19.0 to 7.19.1 in /apps/block_scout_web/assets +- [#6113](https://github.com/blockscout/blockscout/pull/6113) - Bump ueberauth from 0.10.2 to 0.10.3 +- [#6112](https://github.com/blockscout/blockscout/pull/6112) - Bump @babel/preset-env from 7.19.0 to 7.19.1 in /apps/block_scout_web/assets +- [#6115](https://github.com/blockscout/blockscout/pull/6115) - Bump web3 from 1.7.5 to 1.8.0 in /apps/block_scout_web/assets +- [#6117](https://github.com/blockscout/blockscout/pull/6117) - Bump sweetalert2 from 11.4.32 to 11.4.33 in /apps/block_scout_web/assets +- [#6119](https://github.com/blockscout/blockscout/pull/6119) - Bump scss-tokenizer from 0.3.0 to 0.4.3 in /apps/block_scout_web/assets +- [#6138](https://github.com/blockscout/blockscout/pull/6138) - Bump core-js from 3.25.1 to 3.25.2 in /apps/block_scout_web/assets +- [#6147](https://github.com/blockscout/blockscout/pull/6147) - Bump autoprefixer from 10.4.11 to 10.4.12 in /apps/block_scout_web/assets +- [#6151](https://github.com/blockscout/blockscout/pull/6151) - Bump sass from 1.54.9 to 1.55.0 in /apps/block_scout_web/assets +- [#6173](https://github.com/blockscout/blockscout/pull/6173) - Bump core-js from 3.25.2 to 3.25.3 in /apps/block_scout_web/assets +- [#6174](https://github.com/blockscout/blockscout/pull/6174) - Bump sweetalert2 from 11.4.33 to 11.4.34 in /apps/block_scout_web/assets +- [#6175](https://github.com/blockscout/blockscout/pull/6175) - Bump luxon from 3.0.3 to 3.0.4 in /apps/block_scout_web/assets +- [#6176](https://github.com/blockscout/blockscout/pull/6176) - Bump @babel/preset-env from 7.19.1 to 7.19.3 in /apps/block_scout_web/assets +- [#6177](https://github.com/blockscout/blockscout/pull/6177) - Bump @babel/core from 7.19.1 to 7.19.3 in /apps/block_scout_web/assets +- [#6178](https://github.com/blockscout/blockscout/pull/6178) - Bump eslint from 8.23.1 to 8.24.0 in /apps/block_scout_web/assets +- [#6184](https://github.com/blockscout/blockscout/pull/6184) - Bump jest from 29.0.3 to 29.1.1 in /apps/block_scout_web/assets +- [#6186](https://github.com/blockscout/blockscout/pull/6186) - Bump jest-environment-jsdom from 29.0.3 to 29.1.1 in /apps/block_scout_web/assets +- [#6185](https://github.com/blockscout/blockscout/pull/6185) - Bump sweetalert2 from 11.4.34 to 11.4.35 in /apps/block_scout_web/assets +- [#6146](https://github.com/blockscout/blockscout/pull/6146) - Bump websocket_client from 1.3.0 to 1.5.0 +- [#6191](https://github.com/blockscout/blockscout/pull/6191) - Bump css-minimizer-webpack-plugin from 4.1.0 to 4.2.0 in /apps/block_scout_web/assets +- [#6199](https://github.com/blockscout/blockscout/pull/6199) - Bump redix from 1.1.5 to 1.2.0 +- [#6213](https://github.com/blockscout/blockscout/pull/6213) - Bump sweetalert2 from 11.4.35 to 11.4.37 in /apps/block_scout_web/assets +- [#6214](https://github.com/blockscout/blockscout/pull/6214) - Bump jest-environment-jsdom from 29.1.1 to 29.1.2 in /apps/block_scout_web/assets +- [#6215](https://github.com/blockscout/blockscout/pull/6215) - Bump postcss from 8.4.16 to 8.4.17 in /apps/block_scout_web/assets +- [#6216](https://github.com/blockscout/blockscout/pull/6216) - Bump core-js from 3.25.3 to 3.25.5 in /apps/block_scout_web/assets +- [#6217](https://github.com/blockscout/blockscout/pull/6217) - Bump jest from 29.1.1 to 29.1.2 in /apps/block_scout_web/assets +- [#6229](https://github.com/blockscout/blockscout/pull/6229) - Bump sweetalert2 from 11.4.37 to 11.4.38 in /apps/block_scout_web/assets +- [#6232](https://github.com/blockscout/blockscout/pull/6232) - Bump css-minimizer-webpack-plugin from 4.2.0 to 4.2.1 in /apps/block_scout_web/assets +- [#6230](https://github.com/blockscout/blockscout/pull/6230) - Bump sass-loader from 13.0.2 to 13.1.0 in /apps/block_scout_web/assets +- [#6251](https://github.com/blockscout/blockscout/pull/6251) - Bump sweetalert2 from 11.4.38 to 11.5.1 in /apps/block_scout_web/assets +- [#6246](https://github.com/blockscout/blockscout/pull/6246) - Bump @babel/preset-env from 7.19.3 to 7.19.4 in /apps/block_scout_web/assets +- [#6247](https://github.com/blockscout/blockscout/pull/6247) - Bump ex_abi from 0.5.14 to 0.5.15 +- [#6248](https://github.com/blockscout/blockscout/pull/6248) - Bump eslint from 8.24.0 to 8.25.0 in /apps/block_scout_web/assets +- [#6255](https://github.com/blockscout/blockscout/pull/6255) - Bump postcss from 8.4.17 to 8.4.18 in /apps/block_scout_web/assets +- [#6256](https://github.com/blockscout/blockscout/pull/6256) - Bump css-minimizer-webpack-plugin from 4.2.1 to 4.2.2 in /apps/block_scout_web/assets +- [#6258](https://github.com/blockscout/blockscout/pull/6258) - Bump jest from 29.1.2 to 29.2.0 in /apps/block_scout_web/assets +- [#6259](https://github.com/blockscout/blockscout/pull/6259) - Bump jest-environment-jsdom from 29.1.2 to 29.2.0 in /apps/block_scout_web/assets +- [#6253](https://github.com/blockscout/blockscout/pull/6253) - Bump eslint-plugin-promise from 6.0.1 to 6.1.0 in /apps/block_scout_web/assets +- [#6279](https://github.com/blockscout/blockscout/pull/6279) - Bump util from 0.12.4 to 0.12.5 in /apps/block_scout_web/assets +- [#6280](https://github.com/blockscout/blockscout/pull/6280) - Bump ex_rlp from 0.5.4 to 0.5.5 +- [#6281](https://github.com/blockscout/blockscout/pull/6281) - Bump ex_abi from 0.5.15 to 0.5.16 +- [#6283](https://github.com/blockscout/blockscout/pull/6283) - Bump spandex_datadog from 1.2.0 to 1.3.0 +- [#6282](https://github.com/blockscout/blockscout/pull/6282) - Bump sweetalert2 from 11.5.1 to 11.5.2 in /apps/block_scout_web/assets +- [#6284](https://github.com/blockscout/blockscout/pull/6284) - Bump spandex_phoenix from 1.0.6 to 1.1.0 +- [#6298](https://github.com/blockscout/blockscout/pull/6298) - Bump jest-environment-jsdom from 29.2.0 to 29.2.1 in /apps/block_scout_web/assets +- [#6297](https://github.com/blockscout/blockscout/pull/6297) - Bump jest from 29.2.0 to 29.2.1 in /apps/block_scout_web/assets +- [#6254](https://github.com/blockscout/blockscout/pull/6254) - Bump ex_doc from 0.28.5 to 0.28.6 +- [#6314](https://github.com/blockscout/blockscout/pull/6314) - Bump @babel/core from 7.19.3 to 7.19.6 in /apps/block_scout_web/assets +- [#6313](https://github.com/blockscout/blockscout/pull/6313) - Bump ex_doc from 0.28.6 to 0.29.0 +- [#6305](https://github.com/blockscout/blockscout/pull/6305) - Bump sweetalert2 from 11.5.2 to 11.6.0 in /apps/block_scout_web/assets +- [#6312](https://github.com/blockscout/blockscout/pull/6312) - Bump eslint-plugin-promise from 6.1.0 to 6.1.1 in /apps/block_scout_web/assets +- [#6318](https://github.com/blockscout/blockscout/pull/6318) - Bump spandex from 3.1.0 to 3.2.0 +- [#6335](https://github.com/blockscout/blockscout/pull/6335) - Bump eslint from 8.25.0 to 8.26.0 in /apps/block_scout_web/assets +- [#6334](https://github.com/blockscout/blockscout/pull/6334) - Bump ex_cldr_numbers from 2.27.3 to 2.28.0 +- [#6333](https://github.com/blockscout/blockscout/pull/6333) - Bump core-js from 3.25.5 to 3.26.0 in /apps/block_scout_web/assets +- [#6332](https://github.com/blockscout/blockscout/pull/6332) - Bump ex_cldr from 2.33.2 to 2.34.0 +- [#6339](https://github.com/blockscout/blockscout/pull/6339) - Bump sweetalert2 from 11.6.0 to 11.6.2 in /apps/block_scout_web/assets +- [#6330](https://github.com/blockscout/blockscout/pull/6330) - Bump ex_cldr_units from 3.14.0 to 3.15.0 +- [#6341](https://github.com/blockscout/blockscout/pull/6341) - Bump jest-environment-jsdom from 29.2.1 to 29.2.2 in /apps/block_scout_web/assets +- [#6342](https://github.com/blockscout/blockscout/pull/6342) - Bump jest from 29.2.1 to 29.2.2 in /apps/block_scout_web/assets +- [#6359](https://github.com/blockscout/blockscout/pull/6359) - Bump babel-loader from 8.2.5 to 9.0.0 in /apps/block_scout_web/assets +- [#6360](https://github.com/blockscout/blockscout/pull/6360) - Bump sweetalert2 from 11.6.2 to 11.6.4 in /apps/block_scout_web/assets +- [#6363](https://github.com/blockscout/blockscout/pull/6363) - Bump autoprefixer from 10.4.12 to 10.4.13 in /apps/block_scout_web/assets +- [#6364](https://github.com/blockscout/blockscout/pull/6364) - Bump ueberauth_auth0 from 2.0.0 to 2.1.0 +- [#6372](https://github.com/blockscout/blockscout/pull/6372) - Bump babel-loader from 9.0.0 to 9.0.1 in /apps/block_scout_web/assets +- [#6374](https://github.com/blockscout/blockscout/pull/6374) - Bump plug_cowboy from 2.5.2 to 2.6.0 +- [#6373](https://github.com/blockscout/blockscout/pull/6373) - Bump luxon from 3.0.4 to 3.1.0 in /apps/block_scout_web/assets +- [#6375](https://github.com/blockscout/blockscout/pull/6375) - Bump sweetalert2 from 11.6.4 to 11.6.5 in /apps/block_scout_web/assets +- [#6393](https://github.com/blockscout/blockscout/pull/6393) - Bump babel-loader from 9.0.1 to 9.1.0 in /apps/block_scout_web/assets +- [#6417](https://github.com/blockscout/blockscout/pull/6417) - Bump loader-utils from 2.0.2 to 2.0.3 in /apps/block_scout_web/assets +- [#6410](https://github.com/blockscout/blockscout/pull/6410) - Bump sweetalert2 from 11.6.5 to 11.6.7 in /apps/block_scout_web/assets +- [#6411](https://github.com/blockscout/blockscout/pull/6411) - Bump eslint from 8.26.0 to 8.27.0 in /apps/block_scout_web/assets +- [#6412](https://github.com/blockscout/blockscout/pull/6412) - Bump sass from 1.55.0 to 1.56.0 in /apps/block_scout_web/assets +- [#6413](https://github.com/blockscout/blockscout/pull/6413) - Bump jest-environment-jsdom from 29.2.2 to 29.3.0 in /apps/block_scout_web/assets +- [#6414](https://github.com/blockscout/blockscout/pull/6414) - Bump @babel/core from 7.19.6 to 7.20.2 in /apps/block_scout_web/assets +- [#6416](https://github.com/blockscout/blockscout/pull/6416) - Bump @babel/preset-env from 7.19.4 to 7.20.2 in /apps/block_scout_web/assets +- [#6419](https://github.com/blockscout/blockscout/pull/6419) - Bump jest from 29.2.2 to 29.3.1 in /apps/block_scout_web/assets +- [#6421](https://github.com/blockscout/blockscout/pull/6421) - Bump webpack from 5.74.0 to 5.75.0 in /apps/block_scout_web/assets +- [#6423](https://github.com/blockscout/blockscout/pull/6423) - Bump jest-environment-jsdom from 29.3.0 to 29.3.1 in /apps/block_scout_web/assets +- [#6424](https://github.com/blockscout/blockscout/pull/6424) - Bump floki from 0.33.1 to 0.34.0 +- [#6422](https://github.com/blockscout/blockscout/pull/6422) - Bump sass from 1.56.0 to 1.56.1 in /apps/block_scout_web/assets +- [#6430](https://github.com/blockscout/blockscout/pull/6430) - Bump web3 from 1.8.0 to 1.8.1 in /apps/block_scout_web/assets +- [#6431](https://github.com/blockscout/blockscout/pull/6431) - Bump sweetalert2 from 11.6.7 to 11.6.8 in /apps/block_scout_web/assets +- [#6432](https://github.com/blockscout/blockscout/pull/6432) - Bump sass-loader from 13.1.0 to 13.2.0 in /apps/block_scout_web/assets +- [#6445](https://github.com/blockscout/blockscout/pull/6445) - Bump postcss from 8.4.18 to 8.4.19 in /apps/block_scout_web/assets +- [#6446](https://github.com/blockscout/blockscout/pull/6446) - Bump core-js from 3.26.0 to 3.26.1 in /apps/block_scout_web/assets +- [#6452](https://github.com/blockscout/blockscout/pull/6452) - Bump @fortawesome/fontawesome-free from 6.2.0 to 6.2.1 in /apps/block_scout_web/assets +- [#6456](https://github.com/blockscout/blockscout/pull/6456) - Bump loader-utils from 2.0.3 to 2.0.4 in /apps/block_scout_web/assets +- [#6462](https://github.com/blockscout/blockscout/pull/6462) - Bump chartjs-adapter-luxon from 1.2.0 to 1.2.1 in /apps/block_scout_web/assets +- [#6469](https://github.com/blockscout/blockscout/pull/6469) - Bump sweetalert2 from 11.6.8 to 11.6.9 in /apps/block_scout_web/assets +- [#6471](https://github.com/blockscout/blockscout/pull/6471) - Bump mini-css-extract-plugin from 2.6.1 to 2.7.0 in /apps/block_scout_web/assets +- [#6470](https://github.com/blockscout/blockscout/pull/6470) - Bump chart.js from 3.9.1 to 4.0.1 in /apps/block_scout_web/assets +- [#6472](https://github.com/blockscout/blockscout/pull/6472) - Bump webpack-cli from 4.10.0 to 5.0.0 in /apps/block_scout_web/assets +- [#6487](https://github.com/blockscout/blockscout/pull/6487) - Bump eslint from 8.27.0 to 8.28.0 in /apps/block_scout_web/assets +- [#6488](https://github.com/blockscout/blockscout/pull/6488) - Bump ex_doc from 0.29.0 to 0.29.1 +- [#6491](https://github.com/blockscout/blockscout/pull/6491) - Bump minimatch from 3.0.4 to 3.0.8 in /apps/block_scout_web/assets +- [#6479](https://github.com/blockscout/blockscout/pull/6479) - Bump ecto_sql from 3.9.0 to 3.9.1 +- [#6486](https://github.com/blockscout/blockscout/pull/6486) - Bump sweetalert2 from 11.6.9 to 11.6.10 in /apps/block_scout_web/assets +- [#6498](https://github.com/blockscout/blockscout/pull/6498) - Bump sweetalert2 from 11.6.10 to 11.6.13 in /apps/block_scout_web/assets +- [#6506](https://github.com/blockscout/blockscout/pull/6506) - Bump web3modal from 1.9.9 to 1.9.10 in /apps/block_scout_web/assets +- [#6505](https://github.com/blockscout/blockscout/pull/6505) - Bump highlight.js from 11.6.0 to 11.7.0 in /apps/block_scout_web/assets +- [#6504](https://github.com/blockscout/blockscout/pull/6504) - Bump sweetalert2 from 11.6.13 to 11.6.14 in /apps/block_scout_web/assets +- [#6507](https://github.com/blockscout/blockscout/pull/6507) - Bump remote_ip from 1.0.0 to 1.1.0 +- [#6497](https://github.com/blockscout/blockscout/pull/6497) - Bump chartjs-adapter-luxon from 1.2.1 to 1.3.0 in /apps/block_scout_web/assets +- [#6519](https://github.com/blockscout/blockscout/pull/6519) - Bump photoswipe from 5.3.3 to 5.3.4 in /apps/block_scout_web/assets +- [#6520](https://github.com/blockscout/blockscout/pull/6520) - Bump @babel/core from 7.20.2 to 7.20.5 in /apps/block_scout_web/assets +- [#6527](https://github.com/blockscout/blockscout/pull/6527) - Bump luxon from 3.1.0 to 3.1.1 in /apps/block_scout_web/assets +- [#6526](https://github.com/blockscout/blockscout/pull/6526) - Bump mini-css-extract-plugin from 2.7.0 to 2.7.1 in /apps/block_scout_web/assets +- [#6533](https://github.com/blockscout/blockscout/pull/6533) - Bump postcss-loader from 7.0.1 to 7.0.2 in /apps/block_scout_web/assets +- [#6534](https://github.com/blockscout/blockscout/pull/6534) - Bump sweetalert2 from 11.6.14 to 11.6.15 in /apps/block_scout_web/assets +- [#6539](https://github.com/blockscout/blockscout/pull/6539) - Bump decode-uri-component from 0.2.0 to 0.2.2 in /apps/block_scout_web/assets +- [#6555](https://github.com/blockscout/blockscout/pull/6555) - Bump bignumber.js from 9.1.0 to 9.1.1 in /apps/block_scout_web/assets +- [#6557](https://github.com/blockscout/blockscout/pull/6557) - Bump webpack-cli from 5.0.0 to 5.0.1 in /apps/block_scout_web/assets +- [#6558](https://github.com/blockscout/blockscout/pull/6558) - Bump eslint from 8.28.0 to 8.29.0 in /apps/block_scout_web/assets +- [#6556](https://github.com/blockscout/blockscout/pull/6556) - Bump mini-css-extract-plugin from 2.7.1 to 2.7.2 in /apps/block_scout_web/assets +- [#6562](https://github.com/blockscout/blockscout/pull/6562) - Bump qs from 6.5.2 to 6.5.3 in /apps/block_scout_web/assets +- [#6577](https://github.com/blockscout/blockscout/pull/6577) - Bump postcss from 8.4.19 to 8.4.20 in /apps/block_scout_web/assets +- [#6578](https://github.com/blockscout/blockscout/pull/6578) - Bump sass from 1.56.1 to 1.56.2 in /apps/block_scout_web/assets + +
+ +## 4.1.8-beta + +### Features + +- [#5968](https://github.com/blockscout/blockscout/pull/5968) - Add call type in the response of txlistinternal API method +- [#5860](https://github.com/blockscout/blockscout/pull/5860) - Integrate rust verifier micro-service ([blockscout-rs/verifier](https://github.com/blockscout/blockscout-rs/tree/main/verification)) +- [#6001](https://github.com/blockscout/blockscout/pull/6001) - Add ETHEREUM_JSONRPC_DISABLE_ARCHIVE_BALANCES env var that filters requests and query node only if the block quantity is "latest" +- [#5944](https://github.com/blockscout/blockscout/pull/5944) - Add tab with state changes to transaction page + +### Fixes + +- [#6038](https://github.com/blockscout/blockscout/pull/6038) - Extend token name from string to text type +- [#6037](https://github.com/blockscout/blockscout/pull/6037) - Fix order of results in txlistinternal API endpoint +- [#6036](https://github.com/blockscout/blockscout/pull/6036) - Fix address checksum on transaction page +- [#6032](https://github.com/blockscout/blockscout/pull/6032) - Sort by address.hash column in accountlist API endpoint +- [#6017](https://github.com/blockscout/blockscout/pull/6017), [#6028](https://github.com/blockscout/blockscout/pull/6028) - Move "contract interaction" and "Add chain to MM" env vars to runtime +- [#6012](https://github.com/blockscout/blockscout/pull/6012) - Fix display of estimated addresses counter on the main page +- [#5978](https://github.com/blockscout/blockscout/pull/5978) - Allow timestamp param in the log of eth_getTransactionReceipt method +- [#5977](https://github.com/blockscout/blockscout/pull/5977) - Fix address overview.html.eex in case of nil implementation address hash +- [#5975](https://github.com/blockscout/blockscout/pull/5975) - Fix CSV export of internal transactions +- [#5957](https://github.com/blockscout/blockscout/pull/5957) - Server-side reCAPTCHA check for CSV export +- [#5954](https://github.com/blockscout/blockscout/pull/5954) - Fix ace editor appearance +- [#5942](https://github.com/blockscout/blockscout/pull/5942), [#5945](https://github.com/blockscout/blockscout/pull/5945) - Fix nightly solidity versions filtering UX +- [#5904](https://github.com/blockscout/blockscout/pull/5904) - Enhance health API endpoint: better parsing HEALTHY_BLOCKS_PERIOD and use it in the response +- [#5903](https://github.com/blockscout/blockscout/pull/5903) - Disable compile env validation +- [#5887](https://github.com/blockscout/blockscout/pull/5887) - Added missing environment variables to Makefile container params +- [#5850](https://github.com/blockscout/blockscout/pull/5850) - Fix too large postgres notifications +- [#5809](https://github.com/blockscout/blockscout/pull/5809) - Fix 404 on `/metadata` page +- [#5807](https://github.com/blockscout/blockscout/pull/5807) - Update Makefile migrate command due to release build +- [#5786](https://github.com/blockscout/blockscout/pull/5786) - Replace `current_path` with `Controller.current_full_path` in two controllers +- [#5948](https://github.com/blockscout/blockscout/pull/5948) - Fix unexpected messages in `CoinBalanceOnDemand` +- [#6013](https://github.com/blockscout/blockscout/pull/6013) - Fix ERC-1155 tokens fetching +- [#6043](https://github.com/blockscout/blockscout/pull/6043) - Fix token instance fetching +- [#6093](https://github.com/blockscout/blockscout/pull/6093) - Fix Indexer.Fetcher.TokenInstance for ERC-1155 tokens + +### Chore + +- [#5921](https://github.com/blockscout/blockscout/pull/5921) - Bump briefly from 25942fb to 1dd66ee +- [#6033](https://github.com/blockscout/blockscout/pull/6033) - Bump sass from 1.54.7 to 1.54.8 in /apps/block_scout_web/assets +- [#6046](https://github.com/blockscout/blockscout/pull/6046) - Bump credo from 1.6.6 to 1.6.7 +- [#6045](https://github.com/blockscout/blockscout/pull/6045) - Re-use _btn_copy.html for raw trace page +- [#6035](https://github.com/blockscout/blockscout/pull/6035) - Hide copy btn if no raw trace +- [#6034](https://github.com/blockscout/blockscout/pull/6034) - Suppress empty sections in supported chain dropdown +- [#5939](https://github.com/blockscout/blockscout/pull/5939) - Bump sweetalert2 from 11.4.26 to 11.4.27 in /apps/block_scout_web/assets +- [#5938](https://github.com/blockscout/blockscout/pull/5938) - Bump xss from 1.0.13 to 1.0.14 in /apps/block_scout_web/assets +- [#5743](https://github.com/blockscout/blockscout/pull/5743) - Fixing tracer not found #5729 +- [#5952](https://github.com/blockscout/blockscout/pull/5952) - Bump sweetalert2 from 11.4.27 to 11.4.28 in /apps/block_scout_web/assets +- [#5955](https://github.com/blockscout/blockscout/pull/5955) - Bump ex_doc from 0.28.4 to 0.28.5 +- [#5956](https://github.com/blockscout/blockscout/pull/5956) - Bump bcrypt_elixir from 2.3.1 to 3.0.1 +- [#5964](https://github.com/blockscout/blockscout/pull/5964) - Bump sweetalert2 from 11.4.28 to 11.4.29 in /apps/block_scout_web/assets +- [#5966](https://github.com/blockscout/blockscout/pull/5966) - Bump sass from 1.54.4 to 1.54.5 in /apps/block_scout_web/assets +- [#5967](https://github.com/blockscout/blockscout/pull/5967) - Bump @babel/core from 7.18.10 to 7.18.13 in /apps/block_scout_web/assets +- [#5973](https://github.com/blockscout/blockscout/pull/5973) - Bump prometheus from 4.9.0 to 4.9.1 +- [#5974](https://github.com/blockscout/blockscout/pull/5974) - Bump cldr_utils from 2.19.0 to 2.19.1 +- [#5884](https://github.com/blockscout/blockscout/pull/5884) - Bump nimble_csv from 1.1.0 to 1.2.0 +- [#5984](https://github.com/blockscout/blockscout/pull/5984) - Bump jest from 28.1.3 to 29.0.0 in /apps/block_scout_web/assets +- [#5983](https://github.com/blockscout/blockscout/pull/5983) - Bump core-js from 3.24.1 to 3.25.0 in /apps/block_scout_web/assets +- [#5981](https://github.com/blockscout/blockscout/pull/5981) - Bump eslint-plugin-promise from 6.0.0 to 6.0.1 in /apps/block_scout_web/assets +- [#5982](https://github.com/blockscout/blockscout/pull/5982) - Bump jest-environment-jsdom from 28.1.3 to 29.0.0 in /apps/block_scout_web/assets +- [#5987](https://github.com/blockscout/blockscout/pull/5987) - Bump jest from 29.0.0 to 29.0.1 in /apps/block_scout_web/assets +- [#5988](https://github.com/blockscout/blockscout/pull/5988) - Bump jest-environment-jsdom from 29.0.0 to 29.0.1 in /apps/block_scout_web/assets +- [#5989](https://github.com/blockscout/blockscout/pull/5989) - Bump jquery from 3.6.0 to 3.6.1 in /apps/block_scout_web/assets +- [#5990](https://github.com/blockscout/blockscout/pull/5990) - Bump web3modal from 1.9.8 to 1.9.9 in /apps/block_scout_web/assets +- [#6004](https://github.com/blockscout/blockscout/pull/6004) - Bump luxon from 3.0.1 to 3.0.3 in /apps/block_scout_web/assets +- [#6005](https://github.com/blockscout/blockscout/pull/6005) - Bump ex_cldr from 2.33.1 to 2.33.2 +- [#6006](https://github.com/blockscout/blockscout/pull/6006) - Bump eslint from 8.22.0 to 8.23.0 in /apps/block_scout_web/assets +- [#6015](https://github.com/blockscout/blockscout/pull/6015) - Bump @fortawesome/fontawesome-free from 6.1.2 to 6.2.0 in /apps/block_scout_web/assets +- [#6021](https://github.com/blockscout/blockscout/pull/6021) - Bump sass from 1.54.5 to 1.54.7 in /apps/block_scout_web/assets +- [#6018](https://github.com/blockscout/blockscout/pull/6018) - Update chromedriver version +- [#5836](https://github.com/blockscout/blockscout/pull/5836) - Bump comeonin from 4.1.2 to 5.3.3 +- [#5869](https://github.com/blockscout/blockscout/pull/5869) - Bump reduce-reducers from 0.4.3 to 1.0.4 in /apps/block_scout_web/assets +- [#5919](https://github.com/blockscout/blockscout/pull/5919) - Bump floki from 0.32.1 to 0.33.1 +- [#5930](https://github.com/blockscout/blockscout/pull/5930) - Bump eslint from 8.21.0 to 8.22.0 in /apps/block_scout_web/assets +- [#5845](https://github.com/blockscout/blockscout/pull/5845) - Bump autoprefixer from 10.4.2 to 10.4.8 in /apps/block_scout_web/assets +- [#5877](https://github.com/blockscout/blockscout/pull/5877) - Bump eslint from 8.17.0 to 8.21.0 in /apps/block_scout_web/assets +- [#5875](https://github.com/blockscout/blockscout/pull/5875) - Bump sass from 1.49.8 to 1.54.3 in /apps/block_scout_web/assets +- [#5873](https://github.com/blockscout/blockscout/pull/5873) - Bump highlight.js from 11.4.0 to 11.6.0 in /apps/block_scout_web/assets +- [#5870](https://github.com/blockscout/blockscout/pull/5870) - Bump spandex_ecto from 0.6.2 to 0.7.0 +- [#5867](https://github.com/blockscout/blockscout/pull/5867) - Bump @babel/preset-env from 7.16.11 to 7.18.10 in /apps/block_scout_web/assets +- [#5876](https://github.com/blockscout/blockscout/pull/5876) - Bump bignumber.js from 9.0.2 to 9.1.0 in /apps/block_scout_web/assets +- [#5871](https://github.com/blockscout/blockscout/pull/5871) - Bump redux from 4.1.2 to 4.2.0 in /apps/block_scout_web/assets +- [#5868](https://github.com/blockscout/blockscout/pull/5868) - Bump ex_rlp from 0.5.3 to 0.5.4 +- [#5874](https://github.com/blockscout/blockscout/pull/5874) - Bump core-js from 3.20.3 to 3.24.1 in /apps/block_scout_web/assets +- [#5882](https://github.com/blockscout/blockscout/pull/5882) - Bump math from 0.3.1 to 0.7.0 +- [#5878](https://github.com/blockscout/blockscout/pull/5878) - Bump css-minimizer-webpack-plugin from 3.4.1 to 4.0.0 in /apps/block_scout_web/assets +- [#5883](https://github.com/blockscout/blockscout/pull/5883) - Bump postgrex from 0.15.10 to 0.15.13 +- [#5885](https://github.com/blockscout/blockscout/pull/5885) - Bump hammer from 6.0.0 to 6.1.0 +- [#5893](https://github.com/blockscout/blockscout/pull/5893) - Bump prometheus from 4.8.1 to 4.9.0 +- [#5892](https://github.com/blockscout/blockscout/pull/5892) - Bump babel-loader from 8.2.3 to 8.2.5 in /apps/block_scout_web/assets +- [#5890](https://github.com/blockscout/blockscout/pull/5890) - Bump sweetalert2 from 11.3.10 to 11.4.26 in /apps/block_scout_web/assets +- [#5889](https://github.com/blockscout/blockscout/pull/5889) - Bump sass from 1.54.3 to 1.54.4 in /apps/block_scout_web/assets +- [#5894](https://github.com/blockscout/blockscout/pull/5894) - Bump jest from 27.4.7 to 28.1.3 in /apps/block_scout_web/assets +- [#5865](https://github.com/blockscout/blockscout/pull/5865) - Bump timex from 3.7.1 to 3.7.9 +- [#5872](https://github.com/blockscout/blockscout/pull/5872) - Bump benchee from 0.13.2 to 0.99.0 +- [#5895](https://github.com/blockscout/blockscout/pull/5895) - Bump wallaby from 0.29.1 to 0.30.1 +- [#5905](https://github.com/blockscout/blockscout/pull/5905) - Bump absinthe from 1.6.5 to 1.6.8 +- [#5881](https://github.com/blockscout/blockscout/pull/5881) - Bump dataloader from 1.0.9 to 1.0.10 +- [#5909](https://github.com/blockscout/blockscout/pull/5909) - Bump junit_formatter from 3.3.0 to 3.3.1 +- [#5912](https://github.com/blockscout/blockscout/pull/5912) - Bump credo from 1.6.4 to 1.6.6 +- [#5911](https://github.com/blockscout/blockscout/pull/5911) - Bump absinthe_relay from 1.5.1 to 1.5.2 +- [#5915](https://github.com/blockscout/blockscout/pull/5915) - Bump flow from 0.15.0 to 1.2.0 +- [#5916](https://github.com/blockscout/blockscout/pull/5916) - Bump dialyxir from 1.1.0 to 1.2.0 +- [#5910](https://github.com/blockscout/blockscout/pull/5910) - Bump benchee from 0.99.0 to 1.1.0 +- [#5917](https://github.com/blockscout/blockscout/pull/5917) - Bump bypass from 1.0.0 to 2.1.0 +- [#5920](https://github.com/blockscout/blockscout/pull/5920) - Bump spandex_datadog from 1.1.0 to 1.2.0 +- [#5918](https://github.com/blockscout/blockscout/pull/5918) - Bump logger_file_backend from 0.0.12 to 0.0.13 +- [#5863](https://github.com/blockscout/blockscout/pull/5863) - Update Poison hex package +- [#5861](https://github.com/blockscout/blockscout/pull/5861) - Add cache for docker build +- [#5859](https://github.com/blockscout/blockscout/pull/5859) - Update ex_cldr hex packages +- [#5858](https://github.com/blockscout/blockscout/pull/5858) - Update CHANGELOG; revert update of css-loader; rename fontawesome icons selectors +- [#5811](https://github.com/blockscout/blockscout/pull/5811) - Bump chartjs-adapter-luxon from 1.1.0 to 1.2.0 in /apps/block_scout_web/assets +- [#5814](https://github.com/blockscout/blockscout/pull/5814) - Bump webpack from 5.69.1 to 5.74.0 in /apps/block_scout_web/assets +- [#5812](https://github.com/blockscout/blockscout/pull/5812) - Bump mini-css-extract-plugin from 2.5.3 to 2.6.1 in /apps/block_scout_web/assets +- [#5819](https://github.com/blockscout/blockscout/pull/5819) - Bump xss from 1.0.10 to 1.0.13 in /apps/block_scout_web/assets +- [#5818](https://github.com/blockscout/blockscout/pull/5818) - Bump @fortawesome/fontawesome-free from 6.0.0-beta3 to 6.1.2 in /apps/block_scout_web/assets +- [#5821](https://github.com/blockscout/blockscout/pull/5821) - Bump spandex from 3.0.3 to 3.1.0 +- [#5830](https://github.com/blockscout/blockscout/pull/5830) - Bump spandex_phoenix from 1.0.5 to 1.0.6 +- [#5825](https://github.com/blockscout/blockscout/pull/5825) - Bump postcss from 8.4.6 to 8.4.16 in /apps/block_scout_web/assets +- [#5816](https://github.com/blockscout/blockscout/pull/5816) - Bump webpack-cli from 4.9.2 to 4.10.0 in /apps/block_scout_web/assets +- [#5822](https://github.com/blockscout/blockscout/pull/5822) - Bump chart.js from 3.7.0 to 3.9.1 in /apps/block_scout_web/assets +- [#5829](https://github.com/blockscout/blockscout/pull/5829) - Bump mox from 0.5.2 to 1.0.2 +- [#5823](https://github.com/blockscout/blockscout/pull/5823) - Bump luxon from 2.4.0 to 3.0.1 in /apps/block_scout_web/assets +- [#5837](https://github.com/blockscout/blockscout/pull/5837) - Bump @walletconnect/web3-provider from 1.7.8 to 1.8.0 in /apps/block_scout_web/assets +- [#5840](https://github.com/blockscout/blockscout/pull/5840) - Bump web3modal from 1.9.5 to 1.9.8 in /apps/block_scout_web/assets +- [#5842](https://github.com/blockscout/blockscout/pull/5842) - Bump copy-webpack-plugin from 10.2.1 to 11.0.0 in /apps/block_scout_web/assets +- [#5835](https://github.com/blockscout/blockscout/pull/5835) - Bump tesla from 1.3.3 to 1.4.4 +- [#5841](https://github.com/blockscout/blockscout/pull/5841) - Bump sass-loader from 12.6.0 to 13.0.2 in /apps/block_scout_web/assets +- [#5844](https://github.com/blockscout/blockscout/pull/5844) - Bump postcss-loader from 6.2.1 to 7.0.1 in /apps/block_scout_web/assets +- [#5838](https://github.com/blockscout/blockscout/pull/5838) - Bump path-parser from 4.2.0 to 6.1.0 in /apps/block_scout_web/assets +- [#5843](https://github.com/blockscout/blockscout/pull/5843) - Bump @tarekraafat/autocomplete.js from 10.2.6 to 10.2.7 in /apps/block_scout_web/assets +- [#5834](https://github.com/blockscout/blockscout/pull/5834) - Bump clipboard from 2.0.9 to 2.0.11 in /apps/block_scout_web/assets +- [#5827](https://github.com/blockscout/blockscout/pull/5827) - Bump @babel/core from 7.16.12 to 7.18.10 in /apps/block_scout_web/assets +- [#5851](https://github.com/blockscout/blockscout/pull/5851) - Bump exvcr from 0.13.2 to 0.13.3 +- [#5824](https://github.com/blockscout/blockscout/pull/5824) - Bump ex_json_schema from 0.6.2 to 0.9.1 +- [#5849](https://github.com/blockscout/blockscout/pull/5849) - Bump gettext 0.18.2 -> 0.20.0 +- [#5806](https://github.com/blockscout/blockscout/pull/5806) - Update target Postgres version in Docker: 13 -> 14 + +## 4.1.7-beta + +### Features + +- [#5783](https://github.com/blockscout/blockscout/pull/5783) - Allow to setup multiple ranges of blocks to index + +### Fixes + +- [#5799](https://github.com/blockscout/blockscout/pull/5799) - Fix address_tokens_usd_sum function +- [#5798](https://github.com/blockscout/blockscout/pull/5798) - Copy explorer node_modules to result image +- [#5797](https://github.com/blockscout/blockscout/pull/5797) - Fix flickering token tooltip + +### Chore + +- [#5796](https://github.com/blockscout/blockscout/pull/5796) - Add job for e2e tests on every push to master + fix job "Merge 'master' to specific branch after release" + +## 4.1.6-beta + +### Features + +- [#5739](https://github.com/blockscout/blockscout/pull/5739) - Erigon archive node support +- [#5732](https://github.com/blockscout/blockscout/pull/5732) - Manage testnet label (right to the navbar logo) +- [#5699](https://github.com/blockscout/blockscout/pull/5699) - Switch to basic (non-pro) API endpoint for Coingecko requests, if API key is not provided +- [#5542](https://github.com/blockscout/blockscout/pull/5542) - Add `jq` in docker image +- [#5345](https://github.com/blockscout/blockscout/pull/5345) - Graphql: add user-selected ordering to transactions for address query + +### Fixes + +- [#5768](https://github.com/blockscout/blockscout/pull/5768) - Outstanding rows limit for missing blocks query (catchup fetcher) +- [#5737](https://github.com/blockscout/blockscout/pull/5737), [#5772](https://github.com/blockscout/blockscout/pull/5772) - Fix double requests; Fix token balances dropdown view +- [#5723](https://github.com/blockscout/blockscout/pull/5723) - Add nil clause for Data.to_string/1 +- [#5714](https://github.com/blockscout/blockscout/pull/5714) - Add clause for EthereumJSONRPC.Transaction.elixir_to_params/1 when gas_price is missing in the response +- [#5697](https://github.com/blockscout/blockscout/pull/5697) - Gas price oracle: ignore gas price rounding for values less than 0.01 +- [#5690](https://github.com/blockscout/blockscout/pull/5690) - Allow special characters for password in DB URL parser +- [#5778](https://github.com/blockscout/blockscout/pull/5778) - Allow hyphen in database name + +### Chore + +- [#5787](https://github.com/blockscout/blockscout/pull/5787) - Add job for merging master to specific branch after release +- [#5788](https://github.com/blockscout/blockscout/pull/5788) - Update Docker image on every push to master branch +- [#5736](https://github.com/blockscout/blockscout/pull/5736) - Remove obsolete network selector +- [#5730](https://github.com/blockscout/blockscout/pull/5730) - Add primary keys for DB tables where they do not exist +- [#5703](https://github.com/blockscout/blockscout/pull/5703) - Remove bridged tokens functionality from Blockscout core +- [#5700](https://github.com/blockscout/blockscout/pull/5700) - Remove Staking dapp logic from Blockscout core +- [#5696](https://github.com/blockscout/blockscout/pull/5696) - Update .tool-versions +- [#5695](https://github.com/blockscout/blockscout/pull/5695) - Decimal hex package update 1.9 -> 2.0 +- [#5684](https://github.com/blockscout/blockscout/pull/5684) - Block import timings logs + +## 4.1.5-beta + +### Features + +- [#5667](https://github.com/blockscout/blockscout/pull/5667) - Address page: scroll to selected tab's data + +### Fixes + +- [#5680](https://github.com/blockscout/blockscout/pull/5680) - Fix broken token icons; Disable animation in lists; Fix doubled requests for some pages +- [#5671](https://github.com/blockscout/blockscout/pull/5671) - Fix double requests for token exchange rates; Disable fetching `btc_value` by default (add `EXCHANGE_RATES_FETCH_BTC_VALUE` env variable); Add `CACHE_EXCHANGE_RATES_PERIOD` env variable +- [#5676](https://github.com/blockscout/blockscout/pull/5676) - Fix wrong miner address shown for post EIP-1559 block for clique network + +### Chore + +- [#5679](https://github.com/blockscout/blockscout/pull/5679) - Optimize query in fetch_min_missing_block_cache function +- [#5674](https://github.com/blockscout/blockscout/pull/5674) - Disable token holder refreshing +- [#5661](https://github.com/blockscout/blockscout/pull/5661) - Fixes yaml syntax for boolean env variables in docker compose + +## 4.1.4-beta + +### Features + +- [#5656](https://github.com/blockscout/blockscout/pull/5656) - Gas price oracle +- [#5613](https://github.com/blockscout/blockscout/pull/5613) - Exchange rates CoinMarketCap source module +- [#5588](https://github.com/blockscout/blockscout/pull/5588) - Add broadcasting of coin balance +- [#5560](https://github.com/blockscout/blockscout/pull/5560) - Manual fetch beneficiaries +- [#5479](https://github.com/blockscout/blockscout/pull/5479) - Remake of solidity verifier module; Verification UX improvements +- [#5540](https://github.com/blockscout/blockscout/pull/5540) - Tx page: scroll to selected tab's data + +### Fixes + +- [#5647](https://github.com/blockscout/blockscout/pull/5647) - Add handling for invalid Sourcify response +- [#5635](https://github.com/blockscout/blockscout/pull/5635) - Set CoinGecko source in exchange_rates_source function fix in case of token_bridge +- [#5629](https://github.com/blockscout/blockscout/pull/5629) - Fix empty coin balance for empty address +- [#5612](https://github.com/blockscout/blockscout/pull/5612) - Fix token transfers order +- [#5626](https://github.com/blockscout/blockscout/pull/5626) - Fix vyper compiler versions order +- [#5603](https://github.com/blockscout/blockscout/pull/5603) - Fix failing verification attempts +- [#5598](https://github.com/blockscout/blockscout/pull/5598) - Fix token dropdown +- [#5592](https://github.com/blockscout/blockscout/pull/5592) - Burn fees for legacy transactions +- [#5568](https://github.com/blockscout/blockscout/pull/5568) - Add regexp for ipfs checking +- [#5567](https://github.com/blockscout/blockscout/pull/5567) - Sanitize token name and symbol before insert into DB, display in the application +- [#5564](https://github.com/blockscout/blockscout/pull/5564) - Add fallback clauses to `string_to_..._hash` functions +- [#5538](https://github.com/blockscout/blockscout/pull/5538) - Fix internal transaction's tile bug + +### Chore + +- [#5660](https://github.com/blockscout/blockscout/pull/5660) - Display txs count chart by default, disable price chart by default, add chart titles +- [#5659](https://github.com/blockscout/blockscout/pull/5659) - Use chartjs-adapter-luxon instead chartjs-adapter-moment for charts +- [#5651](https://github.com/blockscout/blockscout/pull/5651), [#5657](https://github.com/blockscout/blockscout/pull/5657) - Gnosis chain rebranded theme and generalization of chart legend colors definition +- [#5640](https://github.com/blockscout/blockscout/pull/5640) - Clean up and fix tests, reduce amount of warnings +- [#5625](https://github.com/blockscout/blockscout/pull/5625) - Get rid of some redirects to checksummed address url +- [#5623](https://github.com/blockscout/blockscout/pull/5623) - Allow hyphen in DB password +- [#5543](https://github.com/blockscout/blockscout/pull/5543) - Increase max_restarts to 1_000 (from 3 by default) for explorer, block_scout_web supervisors +- [#5536](https://github.com/blockscout/blockscout/pull/5536) - NPM audit fix + +## 4.1.3-beta + +### Features + +- [#5515](https://github.com/blockscout/blockscout/pull/5515) - Integrate ace editor to display contract sources +- [#5505](https://github.com/blockscout/blockscout/pull/5505) - Manage debug_traceTransaction JSON RPC method timeout +- [#5491](https://github.com/blockscout/blockscout/pull/5491) - Sequential blocks broadcast on the main page +- [#5312](https://github.com/blockscout/blockscout/pull/5312) - Add OpenZeppelin proxy storage slot +- [#5302](https://github.com/blockscout/blockscout/pull/5302) - Add specific tx receipt fields for the GoQuorum client +- [#5268](https://github.com/blockscout/blockscout/pull/5268), [#5313](https://github.com/blockscout/blockscout/pull/5313) - Contract names display improvement + +### Fixes + +- [#5528](https://github.com/blockscout/blockscout/pull/5528) - Token balances fetcher retry +- [#5524](https://github.com/blockscout/blockscout/pull/5524) - ContractState module resistance to unresponsive archive node +- [#5513](https://github.com/blockscout/blockscout/pull/5513) - Do not fill pending blocks ops with block numbers below TRACE_FIRST_BLOCK +- [#5508](https://github.com/blockscout/blockscout/pull/5508) - Hide indexing banner if we fetched internal transactions from TRACE_FIRST_BLOCK +- [#5504](https://github.com/blockscout/blockscout/pull/5504) - Extend TRACE_FIRST_BLOCK env var to geth variant +- [#5488](https://github.com/blockscout/blockscout/pull/5488) - Split long contract output to multiple lines +- [#5487](https://github.com/blockscout/blockscout/pull/5487) - Fix array displaying in decoded constructor args +- [#5482](https://github.com/blockscout/blockscout/pull/5482) - Fix for querying of the contract read functions +- [#5455](https://github.com/blockscout/blockscout/pull/5455) - Fix unverified_smart_contract function: add md5 of bytecode to the changeset +- [#5454](https://github.com/blockscout/blockscout/pull/5454) - Docker: Fix the qemu-x86_64 signal 11 error on Apple Silicon +- [#5443](https://github.com/blockscout/blockscout/pull/5443) - Geth: display tx revert reason +- [#5420](https://github.com/blockscout/blockscout/pull/5420) - Deduplicate addresses and coin balances before inserting to the DB +- [#5416](https://github.com/blockscout/blockscout/pull/5416) - Fix getsourcecode for EOA addresses +- [#5413](https://github.com/blockscout/blockscout/pull/5413) - Fix params encoding for read contracts methods +- [#5411](https://github.com/blockscout/blockscout/pull/5411) - Fix character_not_in_repertoire error for tx revert reason +- [#5410](https://github.com/blockscout/blockscout/pull/5410) - Handle exited realtime fetcher +- [#5383](https://github.com/blockscout/blockscout/pull/5383) - Fix reload transactions button +- [#5381](https://github.com/blockscout/blockscout/pull/5381), [#5397](https://github.com/blockscout/blockscout/pull/5397) - Fix exchange rate broadcast error +- [#5375](https://github.com/blockscout/blockscout/pull/5375) - Fix pending transactions fetcher +- [#5374](https://github.com/blockscout/blockscout/pull/5374) - Return all ERC-1155's token instances in tokenList api endpoint +- [#5342](https://github.com/blockscout/blockscout/pull/5342) - Fix 500 error on NF token page with nil metadata +- [#5319](https://github.com/blockscout/blockscout/pull/5319), [#5357](https://github.com/blockscout/blockscout/pull/5357), [#5425](https://github.com/blockscout/blockscout/pull/5425) - Empty blocks sanitizer performance improvement +- [#5310](https://github.com/blockscout/blockscout/pull/5310) - Fix flash on reload in dark mode +- [#5306](https://github.com/blockscout/blockscout/pull/5306) - Fix indexer bug +- [#5300](https://github.com/blockscout/blockscout/pull/5300), [#5305](https://github.com/blockscout/blockscout/pull/5305) - Token instance page: general video improvements +- [#5136](https://github.com/blockscout/blockscout/pull/5136) - Improve contract verification +- [#5285](https://github.com/blockscout/blockscout/pull/5285) - Fix verified smart-contract bytecode twins feature +- [#5269](https://github.com/blockscout/blockscout/pull/5269) - Address Page: Fix implementation address align +- [#5264](https://github.com/blockscout/blockscout/pull/5264) - Fix bug with 500 response on `partial` sourcify status +- [#5263](https://github.com/blockscout/blockscout/pull/5263) - Fix bug with name absence for contract +- [#5259](https://github.com/blockscout/blockscout/pull/5259) - Fix `coin-balances/by-day` bug +- [#5239](https://github.com/blockscout/blockscout/pull/5239) - Add accounting for block rewards in `getblockreward` api method + +### Chore + +- [#5506](https://github.com/blockscout/blockscout/pull/5506) - Refactor config files +- [#5480](https://github.com/blockscout/blockscout/pull/5480) - Remove duplicate of balances_params_to_address_params function +- [#5473](https://github.com/blockscout/blockscout/pull/5473) - Refactor daily coin balances fetcher +- [#5458](https://github.com/blockscout/blockscout/pull/5458) - Decrease min safe polling period for realtime fetcher +- [#5456](https://github.com/blockscout/blockscout/pull/5456) - Ignore arbitrary block details fields for custom Ethereum clients +- [#5450](https://github.com/blockscout/blockscout/pull/5450) - Logging error in publishing of smart-contract +- [#5433](https://github.com/blockscout/blockscout/pull/5433) - Caching modules refactoring +- [#5419](https://github.com/blockscout/blockscout/pull/5419) - Add check if address exists for some api methods +- [#5408](https://github.com/blockscout/blockscout/pull/5408) - Update websocket_client hex package +- [#5407](https://github.com/blockscout/blockscout/pull/5407) - Update hackney, certifi, tzdata +- [#5369](https://github.com/blockscout/blockscout/pull/5369) - Manage indexer memory limit +- [#5368](https://github.com/blockscout/blockscout/pull/5368) - Refactoring from SourcifyFilePathBackfiller +- [#5367](https://github.com/blockscout/blockscout/pull/5367) - Resolve Prototype Pollution in minimist dependency +- [#5366](https://github.com/blockscout/blockscout/pull/5366) - Fix Vyper smart-contract verification form tooltips +- [#5348](https://github.com/blockscout/blockscout/pull/5348) - Block data for Avalanche: pass blockExtraData param +- [#5341](https://github.com/blockscout/blockscout/pull/5341) - Remove unused broadcasts +- [#5318](https://github.com/blockscout/blockscout/pull/5318) - Eliminate Jquery import from chart-loader.js +- [#5317](https://github.com/blockscout/blockscout/pull/5317) - NPM audit +- [#5303](https://github.com/blockscout/blockscout/pull/5303) - Besu: revertReason support in trace +- [#5301](https://github.com/blockscout/blockscout/pull/5301) - Allow specific block keys for sgb/ava +- [#5295](https://github.com/blockscout/blockscout/pull/5295) - CI pipeline: build and push Docker image to Docker Hub on every release +- [#5290](https://github.com/blockscout/blockscout/pull/5290) - Bump ex_doc from 0.25.2 to 0.28.2 +- [#5289](https://github.com/blockscout/blockscout/pull/5289) - Bump ex_abi from 1.5.9 to 1.5.11 +- [#5288](https://github.com/blockscout/blockscout/pull/5288) - Makefile: find exact container by name +- [#5287](https://github.com/blockscout/blockscout/pull/5287) - Docker: modify native token symbol +- [#5286](https://github.com/blockscout/blockscout/pull/5286) - Change namespace for one of the SmartContractViewTest test +- [#5260](https://github.com/blockscout/blockscout/pull/5260) - Makefile release task to prerelease and release task +- [#5082](https://github.com/blockscout/blockscout/pull/5082) - Elixir 1.12 -> 1.13 + +## 4.1.2-beta + +### Features + +- [#5232](https://github.com/blockscout/blockscout/pull/5232) - Contract Read Page: Add functions overloading support +- [#5220](https://github.com/blockscout/blockscout/pull/5220) - Add info about proxy contracts to api methods response +- [#5200](https://github.com/blockscout/blockscout/pull/5200) - Docker-compose configuration +- [#5105](https://github.com/blockscout/blockscout/pull/5105) - Redesign token page +- [#5016](https://github.com/blockscout/blockscout/pull/5016) - Add view for internal transactions error +- [#4690](https://github.com/blockscout/blockscout/pull/4690) - Improve pagination: introduce pagination with random access to pages; Integrate it to the Transactions List page + +### Fixes + +- [#5248](https://github.com/blockscout/blockscout/pull/5248) - Speedup query for getting verified smart-contract bytecode twin +- [#5241](https://github.com/blockscout/blockscout/pull/5241) - Fix DB hostname Regex pattern +- [#5216](https://github.com/blockscout/blockscout/pull/5216) - Add token-transfers-toggle.js to the `block_transaction/index.html.eex` +- [#5212](https://github.com/blockscout/blockscout/pull/5212) - Fix `gas_used` value bug +- [#5197](https://github.com/blockscout/blockscout/pull/5197) - Fix contract functions outputs +- [#5196](https://github.com/blockscout/blockscout/pull/5196) - Various Docker setup fixes +- [#5192](https://github.com/blockscout/blockscout/pull/5192) - Fix DATABASE_URL config parser +- [#5191](https://github.com/blockscout/blockscout/pull/5191) - Add empty view for new addresses +- [#5184](https://github.com/blockscout/blockscout/pull/5184) - eth_call method: remove from param from the request, if it is null +- [#5172](https://github.com/blockscout/blockscout/pull/5172), [#5182](https://github.com/blockscout/blockscout/pull/5182) - Reduced the size of js bundles +- [#5169](https://github.com/blockscout/blockscout/pull/5169) - Fix several UI bugs; Add tooltip to the prev/next block buttons +- [#5166](https://github.com/blockscout/blockscout/pull/5166), [#5198](https://github.com/blockscout/blockscout/pull/5198) - Fix contracts verification bugs +- [#5160](https://github.com/blockscout/blockscout/pull/5160) - Fix blocks validated hint +- [#5155](https://github.com/blockscout/blockscout/pull/5155) - Fix get_implementation_abi_from_proxy/2 implementation +- [#5154](https://github.com/blockscout/blockscout/pull/5154) - Fix token counters bug +- [#4862](https://github.com/blockscout/blockscout/pull/4862) - Fix internal transactions pagination + +### Chore + +- [#5230](https://github.com/blockscout/blockscout/pull/5230) - Contract verification forms refactoring +- [#5227](https://github.com/blockscout/blockscout/pull/5227) - Major update of css-loader npm package +- [#5226](https://github.com/blockscout/blockscout/pull/5226) - Update mini-css-extract-plugin, css-minimizer-webpack-plugin packages +- [#5224](https://github.com/blockscout/blockscout/pull/5224) - Webpack config refactoring +- [#5223](https://github.com/blockscout/blockscout/pull/5223) - Migrate fontawesome 5 -> 6 +- [#5202](https://github.com/blockscout/blockscout/pull/5202), [#5229](https://github.com/blockscout/blockscout/pull/5229) - Docker setup Makefile release/publish tasks +- [#5195](https://github.com/blockscout/blockscout/pull/5195) - Add Berlin, London to the list of default EVM versions +- [#5190](https://github.com/blockscout/blockscout/pull/5190) - Set 8545 as default port everywhere except Ganache JSON RPC variant +- [#5189](https://github.com/blockscout/blockscout/pull/5189) - ENV var to manage pending transactions fetcher switching off +- [#5171](https://github.com/blockscout/blockscout/pull/5171) - Replace lodash NPM package with tiny lodash modules +- [#5170](https://github.com/blockscout/blockscout/pull/5170) - Token price row name fix +- [#5153](https://github.com/blockscout/blockscout/pull/5153) - Discord link instead of Gitter +- [#5142](https://github.com/blockscout/blockscout/pull/5142) - Updated some outdated npm packages +- [#5140](https://github.com/blockscout/blockscout/pull/5140) - Babel minor and core-js major updates +- [#5139](https://github.com/blockscout/blockscout/pull/5139) - Eslint major update +- [#5138](https://github.com/blockscout/blockscout/pull/5138) - Webpack minor update +- [#5119](https://github.com/blockscout/blockscout/pull/5119) - Inventory controller refactoring +- [#5118](https://github.com/blockscout/blockscout/pull/5118) - Fix top navigation template + +## 4.1.1-beta + +### Features + +- [#5090](https://github.com/blockscout/blockscout/pull/5090) - Allotted rate limit by IP +- [#5080](https://github.com/blockscout/blockscout/pull/5080) - Allotted rate limit by a global API key + +### Fixes + +- [#5085](https://github.com/blockscout/blockscout/pull/5085) - Fix wallet style +- [#5088](https://github.com/blockscout/blockscout/pull/5088) - Store address transactions/token transfers in the DB +- [#5071](https://github.com/blockscout/blockscout/pull/5071) - Fix write page contract tuple input +- [#5066](https://github.com/blockscout/blockscout/pull/5066) - Fix read contract page bug +- [#5034](https://github.com/blockscout/blockscout/pull/5034) - Fix broken functions input at transaction page +- [#5025](https://github.com/blockscout/blockscout/pull/5025) - Add standard input JSON files validation +- [#5051](https://github.com/blockscout/blockscout/pull/5051) - Fix 500 response when ABI method was parsed as nil + +### Chore + +- [#5092](https://github.com/blockscout/blockscout/pull/5092) - Resolve vulnerable follow-redirects npm dep in ./apps/explorer +- [#5091](https://github.com/blockscout/blockscout/pull/5091) - Refactor search page template +- [#5081](https://github.com/blockscout/blockscout/pull/5081) - Add internal transactions fetcher disabled? config parameter +- [#5063](https://github.com/blockscout/blockscout/pull/5063) - Resolve moderate NPM vulnerabilities with npm audit tool +- [#5053](https://github.com/blockscout/blockscout/pull/5053) - Update ex_keccak lib + +## 4.1.0-beta + +### Features + +- [#5030](https://github.com/blockscout/blockscout/pull/5030) - API rate limiting +- [#4924](https://github.com/blockscout/blockscout/pull/4924) - Add daily bytecode verification to prevent metamorphic contracts vulnerability +- [#4908](https://github.com/blockscout/blockscout/pull/4908) - Add verification via standard JSON input +- [#5004](https://github.com/blockscout/blockscout/pull/5004) - Add ability to set up a separate DB endpoint for the API endpoints +- [#4989](https://github.com/blockscout/blockscout/pull/4989), [#4991](https://github.com/blockscout/blockscout/pull/4991) - Bridged tokens list API endpoint +- [#4931](https://github.com/blockscout/blockscout/pull/4931) - Web3 modal with Wallet Connect for Write contract page and Staking Dapp + +### Fixes + +- [#5045](https://github.com/blockscout/blockscout/pull/5045) - Contracts interaction improvements +- [#5032](https://github.com/blockscout/blockscout/pull/5032) - Fix token transfer csv export +- [#5020](https://github.com/blockscout/blockscout/pull/5020) - Token instance image display improvement +- [#5019](https://github.com/blockscout/blockscout/pull/5019) - Fix fetch_last_token_balance function termination +- [#5011](https://github.com/blockscout/blockscout/pull/5011) - Fix `0x0` implementation address +- [#5008](https://github.com/blockscout/blockscout/pull/5008) - Extend decimals cap in format_according_to_decimals up to 24 +- [#5005](https://github.com/blockscout/blockscout/pull/5005) - Fix falsy appearance `Connection Lost` warning on reload/switch page +- [#5003](https://github.com/blockscout/blockscout/pull/5003) - API router refactoring +- [#4992](https://github.com/blockscout/blockscout/pull/4992) - Fix `type` field in transactions after enabling 1559 +- [#4979](https://github.com/blockscout/blockscout/pull/4979), [#4993](https://github.com/blockscout/blockscout/pull/4993) - Store total gas_used in addresses table +- [#4977](https://github.com/blockscout/blockscout/pull/4977) - Export token transfers on address: include transfers on contract itself +- [#4976](https://github.com/blockscout/blockscout/pull/4976) - Handle :econnrefused in pending transactions fetcher +- [#4965](https://github.com/blockscout/blockscout/pull/4965) - Fix search field appearance on medium size screens +- [#4945](https://github.com/blockscout/blockscout/pull/4945) - Fix `Verify & Publish` button link +- [#4938](https://github.com/blockscout/blockscout/pull/4938) - Fix displaying of nested arrays for contracts read +- [#4888](https://github.com/blockscout/blockscout/pull/4888) - Fix fetch_top_tokens method: add nulls last for token holders desc order +- [#4867](https://github.com/blockscout/blockscout/pull/4867) - Fix bug in querying contracts method and improve contracts interactions + +### Chore + +- [#5047](https://github.com/blockscout/blockscout/pull/5047) - At contract write use wei precision +- [#5023](https://github.com/blockscout/blockscout/pull/5023) - Capability to leave an empty logo +- [#5018](https://github.com/blockscout/blockscout/pull/5018) - Resolve npm vulnerabilities via npm audix fix +- [#5014](https://github.com/blockscout/blockscout/pull/5014) - Separate FIRST_BLOCK and TRACE_FIRST_BLOCK option for blocks import and tracing methods +- [#4998](https://github.com/blockscout/blockscout/pull/4998) - API endpoints logger +- [#4983](https://github.com/blockscout/blockscout/pull/4983), [#5038](https://github.com/blockscout/blockscout/pull/5038) - Fix contract verification tests +- [#4861](https://github.com/blockscout/blockscout/pull/4861) - Add separate column for token icons + +## 4.0.0-beta + +### Features + +- [#4807](https://github.com/blockscout/blockscout/pull/4807) - Added support for BeaconProxy pattern +- [#4777](https://github.com/blockscout/blockscout/pull/4777), [#4791](https://github.com/blockscout/blockscout/pull/4791), [#4799](https://github.com/blockscout/blockscout/pull/4799), [#4847](https://github.com/blockscout/blockscout/pull/4847) - Added decoding revert reason +- [#4776](https://github.com/blockscout/blockscout/pull/4776) - Added view for unsuccessfully fetched values from read functions +- [#4761](https://github.com/blockscout/blockscout/pull/4761) - ERC-1155 support +- [#4739](https://github.com/blockscout/blockscout/pull/4739) - Improve logs and inputs decoding +- [#4747](https://github.com/blockscout/blockscout/pull/4747) - Advanced CSV export +- [#4745](https://github.com/blockscout/blockscout/pull/4745) - Vyper contracts verification +- [#4699](https://github.com/blockscout/blockscout/pull/4699), [#4793](https://github.com/blockscout/blockscout/pull/4793), [#4820](https://github.com/blockscout/blockscout/pull/4820), [#4827](https://github.com/blockscout/blockscout/pull/4827) - Address page face lifting +- [#4667](https://github.com/blockscout/blockscout/pull/4667) - Transaction Page: Add expand/collapse button for long contract method data +- [#4641](https://github.com/blockscout/blockscout/pull/4641), [#4733](https://github.com/blockscout/blockscout/pull/4733) - Improve Read Contract page logic +- [#4660](https://github.com/blockscout/blockscout/pull/4660) - Save Sourcify path instead of filename +- [#4656](https://github.com/blockscout/blockscout/pull/4656) - Open in Tenderly button +- [#4655](https://github.com/blockscout/blockscout/pull/4655), [#4676](https://github.com/blockscout/blockscout/pull/4676) - EIP-3091 support +- [#4621](https://github.com/blockscout/blockscout/pull/4621) - Add beacon contract address slot for proxy +- [#4625](https://github.com/blockscout/blockscout/pull/4625) - Contract address page: Add implementation link to the overview of proxy contracts +- [#4624](https://github.com/blockscout/blockscout/pull/4624) - Support HTML tags in alert message +- [#4608](https://github.com/blockscout/blockscout/pull/4608), [#4622](https://github.com/blockscout/blockscout/pull/4622) - Block Details page: Improved style of transactions button +- [#4596](https://github.com/blockscout/blockscout/pull/4596), [#4681](https://github.com/blockscout/blockscout/pull/4681), [#4693](https://github.com/blockscout/blockscout/pull/4693) - Display token icon for bridged with Mainnet tokens or identicons for other tokens +- [#4520](https://github.com/blockscout/blockscout/pull/4520) - Add support for EIP-1559 +- [#4593](https://github.com/blockscout/blockscout/pull/4593) - Add status in `Position` pane for txs have no block +- [#4579](https://github.com/blockscout/blockscout/pull/4579) - Write contract page: Resize inputs; Improve multiplier selector + +### Fixes + +- [#4857](https://github.com/blockscout/blockscout/pull/4857) - Fix `tx/raw-trace` Internal Server Error +- [#4854](https://github.com/blockscout/blockscout/pull/4854) - Fix infinite gas usage count loading +- [#4853](https://github.com/blockscout/blockscout/pull/4853) - Allow custom optimizations runs for contract verifications via API +- [#4840](https://github.com/blockscout/blockscout/pull/4840) - Replace Enum.dedup with Enum.uniq where actually uniq items are expected +- [#4835](https://github.com/blockscout/blockscout/pull/4835) - Fix view for broken token icons +- [#4830](https://github.com/blockscout/blockscout/pull/4830) - Speed up txs per day chart data collection +- [#4818](https://github.com/blockscout/blockscout/pull/4818) - Fix for extract_omni_bridged_token_metadata_wrapper method +- [#4812](https://github.com/blockscout/blockscout/pull/4812), [#4815](https://github.com/blockscout/blockscout/pull/4815) - Check if exists custom_cap property of extended token object before access it +- [#4810](https://github.com/blockscout/blockscout/pull/4810) - Show `nil` block.size as `N/A bytes` +- [#4806](https://github.com/blockscout/blockscout/pull/4806) - Get token type for token balance update if it is empty +- [#4802](https://github.com/blockscout/blockscout/pull/4802) - Fix floating tooltip on the main page +- [#4801](https://github.com/blockscout/blockscout/pull/4801) - Added clauses and tests for get_total_staked_and_ordered/1 +- [#4798](https://github.com/blockscout/blockscout/pull/4798) - Token instance View contract icon Safari fix +- [#4796](https://github.com/blockscout/blockscout/pull/4796) - Fix nil.timestamp issue +- [#4764](https://github.com/blockscout/blockscout/pull/4764) - Add cleaning of substrings of `require` messages from parsed constructor arguments +- [#4778](https://github.com/blockscout/blockscout/pull/4778) - Migrate :optimization_runs field type: `int4 -> int8` in `smart_contracts` table +- [#4768](https://github.com/blockscout/blockscout/pull/4768) - Block Details page: handle zero division +- [#4751](https://github.com/blockscout/blockscout/pull/4751) - Change text and link for `trade STAKE` button +- [#4746](https://github.com/blockscout/blockscout/pull/4746) - Fix comparison of decimal value +- [#4711](https://github.com/blockscout/blockscout/pull/4711) - Add trimming to the contract functions inputs +- [#4729](https://github.com/blockscout/blockscout/pull/4729) - Fix bugs with fees in cases of txs with `gas price = 0` +- [#4725](https://github.com/blockscout/blockscout/pull/4725) - Fix hardcoded coin name on transaction's and block's page +- [#4724](https://github.com/blockscout/blockscout/pull/4724), [#4842](https://github.com/blockscout/blockscout/pull/4841) - Sanitizer of "empty" blocks +- [#4717](https://github.com/blockscout/blockscout/pull/4717) - Contract verification fix: check only success creation tx +- [#4713](https://github.com/blockscout/blockscout/pull/4713) - Search input field: sanitize input +- [#4703](https://github.com/blockscout/blockscout/pull/4703) - Block Details page: Fix pagination on the Transactions tab +- [#4686](https://github.com/blockscout/blockscout/pull/4686) - Block page: check gas limit value before division +- [#4678](https://github.com/blockscout/blockscout/pull/4678) - Internal transactions indexer: fix issue of some pending transactions never become confirmed +- [#4668](https://github.com/blockscout/blockscout/pull/4668) - Fix css for dark theme +- [#4654](https://github.com/blockscout/blockscout/pull/4654) - AddressView: Change `@burn_address` to string `0x0000000000000000000000000000000000000000` +- [#4626](https://github.com/blockscout/blockscout/pull/4626) - Refine view of popup for reverted tx +- [#4640](https://github.com/blockscout/blockscout/pull/4640) - Token page: fixes in mobile view +- [#4612](https://github.com/blockscout/blockscout/pull/4612) - Hide error selector in the contract's functions list +- [#4615](https://github.com/blockscout/blockscout/pull/4615) - Fix broken style for `View more transfers` button +- [#4592](https://github.com/blockscout/blockscout/pull/4592) - Add `type` field for `receive` and `fallback` entities of a Smart Contract +- [#4601](https://github.com/blockscout/blockscout/pull/4601) - Fix endless Fetching tokens... message on empty addresses +- [#4591](https://github.com/blockscout/blockscout/pull/4591) - Add step and min value for txValue input field +- [#4589](https://github.com/blockscout/blockscout/pull/4589) - Fix solid outputs on contract read page +- [#4586](https://github.com/blockscout/blockscout/pull/4586) - Fix floating tooltips on the token transfer family blocks +- [#4587](https://github.com/blockscout/blockscout/pull/4587) - Enable navbar menu on Search results page +- [#4582](https://github.com/blockscout/blockscout/pull/4582) - Fix NaN input on write contract page + +### Chore + +- [#4876](https://github.com/blockscout/blockscout/pull/4876) - Add missing columns updates when INSERT ... ON CONFLICT DO UPDATE ... happens +- [#4872](https://github.com/blockscout/blockscout/pull/4872) - Set explicit ascending order by hash in acquire transactions query of internal transactions import +- [#4871](https://github.com/blockscout/blockscout/pull/4871) - Remove cumulative gas used update duplicate +- [#4860](https://github.com/blockscout/blockscout/pull/4860) - Node 16 support +- [#4828](https://github.com/blockscout/blockscout/pull/4828) - Logging for txs/day chart +- [#4823](https://github.com/blockscout/blockscout/pull/4823) - Various error handlers with unresponsive JSON RPC endpoint +- [#4821](https://github.com/blockscout/blockscout/pull/4821) - Block Details page: Remove crossing at the Burnt Fee line +- [#4819](https://github.com/blockscout/blockscout/pull/4819) - Add config for GasUsage Cache +- [#4781](https://github.com/blockscout/blockscout/pull/4781) - PGAnalyze index suggestions +- [#4735](https://github.com/blockscout/blockscout/pull/4735) - Code clean up: Remove clauses for outdated ganache bugs +- [#4726](https://github.com/blockscout/blockscout/pull/4726) - Update chart.js +- [#4707](https://github.com/blockscout/blockscout/pull/4707) - Top navigation: Move Accounts tab to Tokens +- [#4704](https://github.com/blockscout/blockscout/pull/4704) - Update to Erlang/OTP 24 +- [#4682](https://github.com/blockscout/blockscout/pull/4682) - Update all possible outdated mix dependencies +- [#4663](https://github.com/blockscout/blockscout/pull/4663) - Migrate to Elixir 1.12.x +- [#4661](https://github.com/blockscout/blockscout/pull/4661) - Update NPM packages to resolve vulnerabilities +- [#4649](https://github.com/blockscout/blockscout/pull/4649) - 1559 Transaction Page: Convert Burnt Fee to ether and add price in USD +- [#4646](https://github.com/blockscout/blockscout/pull/4646) - Transaction page: Rename burned to burnt +- [#4611](https://github.com/blockscout/blockscout/pull/4611) - Ability to hide miner in block views + +## 3.7.3-beta + +### Features + +- [#4569](https://github.com/blockscout/blockscout/pull/4569) - Smart-Contract: remove comment with the submission date +- [#4568](https://github.com/blockscout/blockscout/pull/4568) - TX page: Token transfer and minting section improvements +- [#4540](https://github.com/blockscout/blockscout/pull/4540) - Align copy buttons for `Block Details` and `Transaction Details` pages +- [#4528](https://github.com/blockscout/blockscout/pull/4528) - Block Details page: rework view +- [#4531](https://github.com/blockscout/blockscout/pull/4531) - Add Arbitrum support +- [#4524](https://github.com/blockscout/blockscout/pull/4524) - Add index position of transaction in the block +- [#4489](https://github.com/blockscout/blockscout/pull/4489) - Search results page +- [#4475](https://github.com/blockscout/blockscout/pull/4475) - Tx page face lifting +- [#4452](https://github.com/blockscout/blockscout/pull/4452) - Add names for smart-contract's function response + +### Fixes + +- [#4553](https://github.com/blockscout/blockscout/pull/4553) - Indexer performance update: skip genesis block in requesting of trace_block API endpoint +- [#4544](https://github.com/blockscout/blockscout/pull/4544) - Indexer performance update: Add skip_metadata flag for token if indexer failed to get any of [name, symbol, decimals, totalSupply] +- [#4542](https://github.com/blockscout/blockscout/pull/4542) - Indexer performance update: Deduplicate tokens in the indexer token transfers transformer +- [#4535](https://github.com/blockscout/blockscout/pull/4535) - Indexer performance update:: Eliminate multiple updates of the same token while parsing mint/burn token transfers batch +- [#4527](https://github.com/blockscout/blockscout/pull/4527) - Indexer performance update: refactor coin balance daily fetcher +- [#4525](https://github.com/blockscout/blockscout/pull/4525) - Uncataloged token transfers query performance improvement +- [#4513](https://github.com/blockscout/blockscout/pull/4513) - Fix installation with custom default path: add NETWORK_PATH variable to the current_path +- [#4500](https://github.com/blockscout/blockscout/pull/4500) - `/tokens/{addressHash}/instance/{id}/token-transfers`: fix incorrect next page url +- [#4493](https://github.com/blockscout/blockscout/pull/4493) - Contract's code page: handle null contracts_creation_transaction +- [#4488](https://github.com/blockscout/blockscout/pull/4488) - Tx page: handle empty to_address +- [#4483](https://github.com/blockscout/blockscout/pull/4483) - Fix copy-paste typo in `token_transfers_counter.ex` +- [#4473](https://github.com/blockscout/blockscout/pull/4473), [#4481](https://github.com/blockscout/blockscout/pull/4481) - Search autocomplete: fix for address/block/tx hash +- [#4472](https://github.com/blockscout/blockscout/pull/4472) - Search autocomplete: fix Cannot read property toLowerCase of undefined +- [#4456](https://github.com/blockscout/blockscout/pull/4456) - URL encoding for NFT media files URLs +- [#4453](https://github.com/blockscout/blockscout/pull/4453) - Unescape characters for string output type in the contract response +- [#4401](https://github.com/blockscout/blockscout/pull/4401) - Fix displaying of token holders with the same amount + +### Chore + +- [#4550](https://github.com/blockscout/blockscout/pull/4550) - Update con_cache package to 1.0 +- [#4523](https://github.com/blockscout/blockscout/pull/4523) - Change order of transactions in block's view +- [#4521](https://github.com/blockscout/blockscout/pull/4521) - Rewrite transaction page tooltips +- [#4516](https://github.com/blockscout/blockscout/pull/4516) - Add DB migrations step into Docker start script +- [#4497](https://github.com/blockscout/blockscout/pull/4497) - Handle error in fetch_validators_list method +- [#4444](https://github.com/blockscout/blockscout/pull/4444) - Main page performance cumulative update +- [#4439](https://github.com/blockscout/blockscout/pull/4439), - [#4465](https://github.com/blockscout/blockscout/pull/4465) - Fix revert response in contract's output + +## 3.7.2-beta + +### Features + +- [#4424](https://github.com/blockscout/blockscout/pull/4424) - Display search results categories +- [#4423](https://github.com/blockscout/blockscout/pull/4423) - Add creation time of contract in the results of the search +- [#4391](https://github.com/blockscout/blockscout/pull/4391) - Add batched transactions on the `address/{addressHash}/transactions` page +- [#4353](https://github.com/blockscout/blockscout/pull/4353) - Added live-reload on the token holders page + +### Fixes + +- [#4437](https://github.com/blockscout/blockscout/pull/4437) - Fix `PendingTransactionsSanitizer` for non-consensus blocks +- [#4430](https://github.com/blockscout/blockscout/pull/4430) - Fix current token balance on-demand fetcher +- [#4429](https://github.com/blockscout/blockscout/pull/4429), [#4431](https://github.com/blockscout/blockscout/pull/4431) - Fix 500 response on `/tokens/{addressHash}/token-holders?type=JSON` when total supply is zero +- [#4419](https://github.com/blockscout/blockscout/pull/4419) - Order contracts in the search by inserted_at in descending order +- [#4418](https://github.com/blockscout/blockscout/pull/4418) - Fix empty search results for the full-word search criteria +- [#4406](https://github.com/blockscout/blockscout/pull/4406) - Fix internal server error on the validator's txs page +- [#4360](https://github.com/blockscout/blockscout/pull/4360) - Fix false-pending transactions in reorg blocks +- [#4388](https://github.com/blockscout/blockscout/pull/4388) - Fix internal server error on contract page for instances without sourcify envs +- [#4385](https://github.com/blockscout/blockscout/pull/4385) - Fix html template for transaction's input; Add copy text for tuples + +### Chore + +- [#4400](https://github.com/blockscout/blockscout/pull/4400) - Add "Token ID" label onto `tokens/.../instance/.../token-transfers` page +- [#4398](https://github.com/blockscout/blockscout/pull/4398) - Speed up the transactions loading on the front-end +- [#4384](https://github.com/blockscout/blockscout/pull/4384) - Fix Elixir version in `.tool-versions` +- [#4382](https://github.com/blockscout/blockscout/pull/4382) - Replace awesomplete with autocomplete.js +- [#4371](https://github.com/blockscout/blockscout/pull/4371) - Place search outside of burger in mobile view +- [#4355](https://github.com/blockscout/blockscout/pull/4355) - Do not redirect to 404 page with empty string in the search field + +## 3.7.1-beta + +### Features + +- [#4331](https://github.com/blockscout/blockscout/pull/4331) - Added support for partially verified contracts via [Sourcify](https://sourcify.dev) +- [#4323](https://github.com/blockscout/blockscout/pull/4323) - Renamed Contract Byte Code, add Contract Creation Code on contract's page +- [#4312](https://github.com/blockscout/blockscout/pull/4312) - Display pending transactions on address page +- [#4299](https://github.com/blockscout/blockscout/pull/4299) - Added [Sourcify](https://sourcify.dev) verification API endpoint +- [#4267](https://github.com/blockscout/blockscout/pull/4267) - Extend verification through [Sourcify](https://sourcify.dev) smart-contract verification: fetch smart contract metadata from Sourcify repo if it has been already verified there +- [#4241](https://github.com/blockscout/blockscout/pull/4241) - Reload transactions on the main page without reloading of the whole page +- [#4218](https://github.com/blockscout/blockscout/pull/4218) - Hide long arrays in smart-contracts +- [#4205](https://github.com/blockscout/blockscout/pull/4205) - Total transactions fees per day API endpoint +- [#4158](https://github.com/blockscout/blockscout/pull/4158) - Calculate total fee per day +- [#4067](https://github.com/blockscout/blockscout/pull/4067) - Display LP tokens USD value and custom metadata in tokens dropdown at address page + +### Fixes + +- [#4351](https://github.com/blockscout/blockscout/pull/4351) - Support effectiveGasPrice property in tx receipt (Geth specific) +- [#4346](https://github.com/blockscout/blockscout/pull/4346) - Fix internal server error on raw-trace transaction page +- [#4345](https://github.com/blockscout/blockscout/pull/4345) - Fix bug on validator's address transactions page(Support effectiveGasPrice property in receipt (geth specific)) +- [#4342](https://github.com/blockscout/blockscout/pull/4342) - Remove dropped/replaced txs from address transactions page +- [#4320](https://github.com/blockscout/blockscout/pull/4320) - Fix absence of imported smart-contracts' source code in `getsourcecode` API method +- [#4274](https://github.com/blockscout/blockscout/pull/4302) - Fix search token-autocomplete +- [#4316](https://github.com/blockscout/blockscout/pull/4316) - Fix `/decompiled-contracts` bug +- [#4310](https://github.com/blockscout/blockscout/pull/4310) - Fix logo URL redirection, set font-family defaults for chart.js +- [#4308](https://github.com/blockscout/blockscout/pull/4308) - Fix internal server error on contract verification options page +- [#4307](https://github.com/blockscout/blockscout/pull/4307) - Fix for composing IPFS URLs for NFTs images +- [#4306](https://github.com/blockscout/blockscout/pull/4306) - Check token instance images MIME types +- [#4295](https://github.com/blockscout/blockscout/pull/4295) - Mobile view fix: transaction tile tx hash overflow +- [#4294](https://github.com/blockscout/blockscout/pull/4294) - User wont be able to open verification pages for verified smart-contract +- [#4240](https://github.com/blockscout/blockscout/pull/4240) - `[]` is accepted in write contract page +- [#4236](https://github.com/blockscout/blockscout/pull/4236), [#4242](https://github.com/blockscout/blockscout/pull/4242) - Fix typo, constructor instead of constructor +- [#4167](https://github.com/blockscout/blockscout/pull/4167) - Deduplicate block numbers in acquire_blocks function +- [#4149](https://github.com/blockscout/blockscout/pull/4149) - Exclude smart_contract_additional_sources from JSON encoding in address schema +- [#4137](https://github.com/blockscout/blockscout/pull/4137) - Get token balance query improvement +- [#4129](https://github.com/blockscout/blockscout/pull/4129) - Speedup procedure of finding missing block numbers for catchup fetcher +- [#4038](https://github.com/blockscout/blockscout/pull/4038) - Add clause for abi_decode_address_output/1 when is_nil(address) +- [#3989](https://github.com/blockscout/blockscout/pull/3989), [4061](https://github.com/blockscout/blockscout/pull/4061) - Fixed bug that sometimes lead to incorrect ordering of token transfers +- [#3946](https://github.com/blockscout/blockscout/pull/3946) - Get NFT metadata from URIs with status_code 301 +- [#3888](https://github.com/blockscout/blockscout/pull/3888) - EIP-1967 contract proxy pattern detection fix + +### Chore + +- [#4315](https://github.com/blockscout/blockscout/pull/4315) - Replace node_modules/ with ~ in app.scss +- [#4314](https://github.com/blockscout/blockscout/pull/4314) - Set infinite timeout for fetch_min_missing_block_cache method DB query +- [#4300](https://github.com/blockscout/blockscout/pull/4300) - Remove clear_build.sh script +- [#4268](https://github.com/blockscout/blockscout/pull/4268) - Migration to Chart.js 3.0 +- [#4253](https://github.com/blockscout/blockscout/pull/4253) - Elixir 1.11.4, npm audit fix +- [#4231](https://github.com/blockscout/blockscout/pull/4231) - Transactions stats: get min/max blocks in one query +- [#4157](https://github.com/blockscout/blockscout/pull/4157) - Fix internal docs generation +- [#4127](https://github.com/blockscout/blockscout/pull/4127) - Update ex_keccak package +- [#4063](https://github.com/blockscout/blockscout/pull/4063) - Do not display 4bytes signature in the tx tile for contract creation +- [#3934](https://github.com/blockscout/blockscout/pull/3934) - Update nimble_csv package +- [#3902](https://github.com/blockscout/blockscout/pull/3902) - Increase number of left symbols in short address view +- [#3894](https://github.com/blockscout/blockscout/pull/3894) - Refactoring: replace inline style display: none with d-none class +- [#3893](https://github.com/blockscout/blockscout/pull/3893) - Add left/right paddings in tx tile +- [#3870](https://github.com/blockscout/blockscout/pull/3870) - Manage token balance on-demand fetcher threshold via env var + +## 3.7.0-beta + +### Features + +- [#3858](https://github.com/blockscout/blockscout/pull/3858) - Integration with Sourcify +- [#3834](https://github.com/blockscout/blockscout/pull/3834) - Method name in tx tile +- [#3792](https://github.com/blockscout/blockscout/pull/3792) - Cancel pending transaction +- [#3786](https://github.com/blockscout/blockscout/pull/3786) - Read contract: enable methods with StateMutability: pure +- [#3758](https://github.com/blockscout/blockscout/pull/3758) - Add pool metadata display/change to Staking DApp +- [#3750](https://github.com/blockscout/blockscout/pull/3750) - getblocknobytime block module API endpoint + +### Fixes + +- [#3835](https://github.com/blockscout/blockscout/pull/3835) - Fix getTokenHolders API endpoint pagination +- [#3787](https://github.com/blockscout/blockscout/pull/3787) - Improve tokens list elements display +- [#3785](https://github.com/blockscout/blockscout/pull/3785) - Fix for write contract functionality: false and 0 boolean inputs are parsed as true +- [#3783](https://github.com/blockscout/blockscout/pull/3783) - Fix number of block confirmations +- [#3773](https://github.com/blockscout/blockscout/pull/3773) - Inventory pagination query performance improvement +- [#3767](https://github.com/blockscout/blockscout/pull/3767) - Decoded contract method input tuple reader fix +- [#3748](https://github.com/blockscout/blockscout/pull/3748) - Skip null topics in eth_getLogs API endpoint + +### Chore + +- [#3831](https://github.com/blockscout/blockscout/pull/3831) - Process type field in eth_getTransactionReceipt response +- [#3802](https://github.com/blockscout/blockscout/pull/3802) - Extend Become a Candidate popup in Staking DApp +- [#3801](https://github.com/blockscout/blockscout/pull/3801) - Poison package update +- [#3799](https://github.com/blockscout/blockscout/pull/3799) - Update credo, dialyxir mix packages +- [#3789](https://github.com/blockscout/blockscout/pull/3789) - Update repo organization +- [#3788](https://github.com/blockscout/blockscout/pull/3788) - Update fontawesome NPM package + +## 3.6.0-beta + +### Features + +- [#3743](https://github.com/blockscout/blockscout/pull/3743) - Minimal proxy pattern support (EIP-1167) +- [#3722](https://github.com/blockscout/blockscout/pull/3722) - Allow double quotes for (u)int arrays inputs during contract interaction +- [#3694](https://github.com/blockscout/blockscout/pull/3694) - LP tokens total liquidity +- [#3676](https://github.com/blockscout/blockscout/pull/3676) - Bridged tokens TLV in USD +- [#3674](https://github.com/blockscout/blockscout/pull/3674) - Display Sushiswap pools data +- [#3637](https://github.com/blockscout/blockscout/pull/3637) - getsourcecode API endpoint: show data for unverified contract from verified contract with the same bytecode +- [#3631](https://github.com/blockscout/blockscout/pull/3631) - Tokens search +- [#3631](https://github.com/blockscout/blockscout/pull/3631) - BSC OMNI bridge support +- [#3603](https://github.com/blockscout/blockscout/pull/3603) - Display method output parameter name at contract read page +- [#3597](https://github.com/blockscout/blockscout/pull/3597) - Show APY for delegators in Staking DApp +- [#3584](https://github.com/blockscout/blockscout/pull/3584) - Token holders API endpoint +- [#3564](https://github.com/blockscout/blockscout/pull/3564) - Staking welcome message + +### Fixes + +- [#3742](https://github.com/blockscout/blockscout/pull/3742) - Fix Sushiswap LP tokens custom metadata fetcher: bytes(n) symbol and name support +- [#3741](https://github.com/blockscout/blockscout/pull/3741) - Contract reader fix when there are multiple input params including an array type +- [#3735](https://github.com/blockscout/blockscout/pull/3735) - Token balance on demand fetcher memory leak fix +- [#3732](https://github.com/blockscout/blockscout/pull/3732) - POSDAO: fix snapshotting and remove temporary code +- [#3731](https://github.com/blockscout/blockscout/pull/3731) - Handle bad gateway at pending transactions fetcher +- [#3730](https://github.com/blockscout/blockscout/pull/3730) - Set default period for average block time counter refresh interval +- [#3729](https://github.com/blockscout/blockscout/pull/3729) - Token on-demand balance fetcher: handle nil balance +- [#3728](https://github.com/blockscout/blockscout/pull/3728) - Coinprice api endpoint: handle nil rates +- [#3723](https://github.com/blockscout/blockscout/pull/3723) - Fix losing digits at value conversion back from WEI +- [#3715](https://github.com/blockscout/blockscout/pull/3715) - Pending transactions sanitizer process +- [#3710](https://github.com/blockscout/blockscout/pull/3710) - Missing @destination in bridged-tokens template +- [#3707](https://github.com/blockscout/blockscout/pull/3707) - Fetch bridged token price by address of foreign token, not by symbol +- [#3686](https://github.com/blockscout/blockscout/pull/3686) - BSC bridged tokens detection fix +- [#3683](https://github.com/blockscout/blockscout/pull/3683) - Token instance image IPFS link display fix +- [#3655](https://github.com/blockscout/blockscout/pull/3655) - Handle absence of readAll function in some old/legacy browsers +- [#3634](https://github.com/blockscout/blockscout/pull/3634) - Fix transaction decoding view: support tuple types +- [#3623](https://github.com/blockscout/blockscout/pull/3623) - Ignore unrecognized messages in bridge counter processes +- [#3622](https://github.com/blockscout/blockscout/pull/3622) - Contract reader: fix int type output Ignore unrecognized messages in bridge counter processes +- [#3621](https://github.com/blockscout/blockscout/pull/3621) - Contract reader: :binary input/output fix +- [#3620](https://github.com/blockscout/blockscout/pull/3620) - Ignore unfamiliar messages by Explorer.Staking.ContractState module +- [#3611](https://github.com/blockscout/blockscout/pull/3611) - Fix logo size +- [#3600](https://github.com/blockscout/blockscout/pull/3600) - Prevent update validator metadata with empty name from contract +- [#3592](https://github.com/blockscout/blockscout/pull/3592), [#3601](https://github.com/blockscout/blockscout/pull/3601), [#3607](https://github.com/blockscout/blockscout/pull/3607) - Contract interaction: fix nested tuples in the output view, add formatting +- [#3583](https://github.com/blockscout/blockscout/pull/3583) - Reduce RPC requests and DB changes by Staking DApp +- [#3577](https://github.com/blockscout/blockscout/pull/3577) - Eliminate GraphiQL page XSS attack + +### Chore + +- [#3745](https://github.com/blockscout/blockscout/pull/3745) - Refactor and optimize Staking DApp +- [#3744](https://github.com/blockscout/blockscout/pull/3744) - Update Mix packages: timex, hackney, tzdata certifi +- [#3736](https://github.com/blockscout/blockscout/pull/3736), [#3739](https://github.com/blockscout/blockscout/pull/3739) - Contract writer: Fix sending a transaction with tuple input type +- [#3719](https://github.com/blockscout/blockscout/pull/3719) - Rename ethprice API endpoint +- [#3717](https://github.com/blockscout/blockscout/pull/3717) - Update alpine-elixir-phoenix 1.11.3 +- [#3714](https://github.com/blockscout/blockscout/pull/3714) - Application announcements management: whole explorer, staking dapp +- [#3712](https://github.com/blockscout/blockscout/pull/3712) - POSDAO refactoring: use pool ID instead of staking address +- [#3709](https://github.com/blockscout/blockscout/pull/3709) - Fix 413 Request Entity Too Large returned from single request batch +- [#3708](https://github.com/blockscout/blockscout/pull/3708) - NPM 6 -> 7 +- [#3701](https://github.com/blockscout/blockscout/pull/3701) - Increase LP tokens calc process re-check interval +- [#3700](https://github.com/blockscout/blockscout/pull/3700) - Update tool versions +- [#3697](https://github.com/blockscout/blockscout/pull/3697) - Update hackney dependency +- [#3696](https://github.com/blockscout/blockscout/pull/3696) - Table loader fix +- [#3688](https://github.com/blockscout/blockscout/pull/3688) - Reorganize staking buttons +- [#3687](https://github.com/blockscout/blockscout/pull/3687) - Miscellaneous minor fixes +- [#3667](https://github.com/blockscout/blockscout/pull/3667) - Store bridged token price in the DB +- [#3662](https://github.com/blockscout/blockscout/pull/3662) - Order bridged tokens in descending order by tokens holder for Omni bridge cap calculation +- [#3659](https://github.com/blockscout/blockscout/pull/3659) - Staking Dapp new buttons: swap, bridge +- [#3645](https://github.com/blockscout/blockscout/pull/3645) - Change Twitter handle +- [#3644](https://github.com/blockscout/blockscout/pull/3644) - Correct exchange rate for SURF.finance token +- [#3618](https://github.com/blockscout/blockscout/pull/3618) - Contracts verification up to 10 libraries +- [#3616](https://github.com/blockscout/blockscout/pull/3616) - POSDAO refactoring: use zero address instead of staker address for certain cases +- [#3612](https://github.com/blockscout/blockscout/pull/3612) - POSDAO refactoring: use 'getDelegatorPools' getter instead of 'getStakerPools' in Staking DApp +- [#3585](https://github.com/blockscout/blockscout/pull/3585) - Add auto switching from eth_subscribe to eth_blockNumber in Staking DApp +- [#3574](https://github.com/blockscout/blockscout/pull/3574) - Correct UNI token price +- [#3569](https://github.com/blockscout/blockscout/pull/3569) - Allow re-define cache period vars at runtime +- [#3567](https://github.com/blockscout/blockscout/pull/3567) - Force to show filter at the page where filtered items list is empty +- [#3565](https://github.com/blockscout/blockscout/pull/3565) - Staking dapp: unhealthy state alert message + +## 3.5.1-beta + +### Features + +- [#3558](https://github.com/blockscout/blockscout/pull/3558) - Focus to search field with a forward slash key +- [#3541](https://github.com/blockscout/blockscout/pull/3541) - Staking dapp stats: total number of delegators, total staked amount +- [#3540](https://github.com/blockscout/blockscout/pull/3540) - Apply DarkForest custom theme to NFT instances + +### Fixes + +- [#3551](https://github.com/blockscout/blockscout/pull/3551) - Fix contract's method's output of tuple type + +### Chore + +- [#3557](https://github.com/blockscout/blockscout/pull/3557) - Single Staking menu +- [#3540](https://github.com/blockscout/blockscout/pull/3540), [#3545](https://github.com/blockscout/blockscout/pull/3545) - Support different versions of DarkForest (0.4 - 0.5) + +## 3.5.0-beta + +### Features + +- [#3536](https://github.com/blockscout/blockscout/pull/3536) - Revert reason in the result of contract's method call +- [#3532](https://github.com/blockscout/blockscout/pull/3532) - Contract interaction: an easy setting of precision for integer input +- [#3531](https://github.com/blockscout/blockscout/pull/3531) - Allow double quotes in input data of contract methods +- [#3515](https://github.com/blockscout/blockscout/pull/3515) - CRC total balance +- [#3513](https://github.com/blockscout/blockscout/pull/3513) - Allow square brackets for an array input data in contracts interaction +- [#3480](https://github.com/blockscout/blockscout/pull/3480) - Add support of Autonity client +- [#3470](https://github.com/blockscout/blockscout/pull/3470) - Display sum of tokens' USD value at tokens holder's address page +- [#3462](https://github.com/blockscout/blockscout/pull/3462) - Display price for bridged tokens + +### Fixes + +- [#3535](https://github.com/blockscout/blockscout/pull/3535) - Improve speed of tokens dropdown loading at owner address page +- [#3530](https://github.com/blockscout/blockscout/pull/3530) - Allow trailing/leading whitespaces for inputs for contract read methods +- [#3526](https://github.com/blockscout/blockscout/pull/3526) - Order staking pools +- [#3525](https://github.com/blockscout/blockscout/pull/3525), [#3533](https://github.com/blockscout/blockscout/pull/3533) - Address token balance on demand fetcher +- [#3514](https://github.com/blockscout/blockscout/pull/3514) - Read contract: fix internal server error +- [#3513](https://github.com/blockscout/blockscout/pull/3513) - Fix input data processing for method call (array type of data) +- [#3509](https://github.com/blockscout/blockscout/pull/3509) - Fix QR code tooltip appearance in mobile view +- [#3507](https://github.com/blockscout/blockscout/pull/3507), [#3510](https://github.com/blockscout/blockscout/pull/3510) - Fix left margin of balance card in mobile view +- [#3506](https://github.com/blockscout/blockscout/pull/3506) - Fix token transfer's tile styles: prevent overlapping of long names +- [#3505](https://github.com/blockscout/blockscout/pull/3505) - Fix Staking DApp first loading +- [#3433](https://github.com/blockscout/blockscout/pull/3433) - Token balances and rewards tables deadlocks elimination +- [#3494](https://github.com/blockscout/blockscout/pull/3494), [#3497](https://github.com/blockscout/blockscout/pull/3497), [#3504](https://github.com/blockscout/blockscout/pull/3504), [#3517](https://github.com/blockscout/blockscout/pull/3517) - Contracts interaction: fix method call with array[] inputs +- [#3494](https://github.com/blockscout/blockscout/pull/3494), [#3495](https://github.com/blockscout/blockscout/pull/3495) - Contracts interaction: fix tuple output display +- [#3479](https://github.com/blockscout/blockscout/pull/3479) - Fix working with big numbers in Staking DApp +- [#3477](https://github.com/blockscout/blockscout/pull/3477) - Contracts interaction: fix broken call of GnosisProxy contract methods with parameters +- [#3477](https://github.com/blockscout/blockscout/pull/3477) - Contracts interaction: fix broken call of fallback function +- [#3476](https://github.com/blockscout/blockscout/pull/3476) - Fix contract verification of precompiled contracts +- [#3467](https://github.com/blockscout/blockscout/pull/3467) - Fix Firefox styles +- [#3464](https://github.com/blockscout/blockscout/pull/3464) - Fix display of token transfers list at token page (fix unique identifier of a tile) + +- [#3457](https://github.com/blockscout/blockscout/pull/3457) - Fix endless block invalidation issue +- [#3457](https://github.com/blockscout/blockscout/pull/3457) - Fix doubled total transferred/minted/burnt tokens on transaction's page if block has reorg +- [#3457](https://github.com/blockscout/blockscout/pull/3457) - Fix doubled token transfer on block's page if block has reorg + +### Chore + +- [#3500](https://github.com/blockscout/blockscout/pull/3500) - Update solc version in explorer folder +- [#3498](https://github.com/blockscout/blockscout/pull/3498) - Make Staking DApp work with transferAndCall function +- [#3496](https://github.com/blockscout/blockscout/pull/3496) - Rollback websocket_client module to 1.3.0 +- [#3489](https://github.com/blockscout/blockscout/pull/3489) - Migrate to Webpack@5 +- [#3487](https://github.com/blockscout/blockscout/pull/3487) - Docker setup update to be compatible with Erlang OTP 23 +- [#3484](https://github.com/blockscout/blockscout/pull/3484) - Elixir upgrade to 11.2 +- [#3483](https://github.com/blockscout/blockscout/pull/3483) - Update outdated dependencies +- [#3483](https://github.com/blockscout/blockscout/pull/3483) - Migrate to Erlang/OTP 23 +- [#3468](https://github.com/blockscout/blockscout/pull/3468) - Do not check supported networks on application loading page +- [#3467](https://github.com/blockscout/blockscout/pull/3467) - NodeJS engine upgrade up to 14 +- [#3460](https://github.com/blockscout/blockscout/pull/3460) - Update Staking DApp scripts due to MetaMask breaking changes + +## 3.4.0-beta + +### Features + +- [#3442](https://github.com/blockscout/blockscout/pull/3442) - Constructor arguments autodetection in API verify endpoint +- [#3435](https://github.com/blockscout/blockscout/pull/3435) - Token transfers counter cache +- [#3420](https://github.com/blockscout/blockscout/pull/3420) - Enable read/write proxy tabs for Gnosis safe proxy contract +- [#3411](https://github.com/blockscout/blockscout/pull/3411) - Circles UBI theme +- [#3406](https://github.com/blockscout/blockscout/pull/3406), [#3409](https://github.com/blockscout/blockscout/pull/3409) - Adding mp4 files support for NFTs +- [#3398](https://github.com/blockscout/blockscout/pull/3398) - Collect and display gas usage per day at the main page +- [#3385](https://github.com/blockscout/blockscout/pull/3385), [#3397](https://github.com/blockscout/blockscout/pull/3397) - Total gas usage at the main page +- [#3384](https://github.com/blockscout/blockscout/pull/3384), [#3386](https://github.com/blockscout/blockscout/pull/3386) - Address total gas usage +- [#3377](https://github.com/blockscout/blockscout/pull/3377) - Add links to contract libraries +- [#2292](https://github.com/blockscout/blockscout/pull/2292), [#3356](https://github.com/blockscout/blockscout/pull/3356), [#3359](https://github.com/blockscout/blockscout/pull/3359), [#3360](https://github.com/blockscout/blockscout/pull/3360), [#3365](https://github.com/blockscout/blockscout/pull/3365) - Add Web UI for POSDAO Staking DApp +- [#3354](https://github.com/blockscout/blockscout/pull/3354) - Tx hash in EOA coin balance history +- [#3333](https://github.com/blockscout/blockscout/pull/3333), [#3337](https://github.com/blockscout/blockscout/pull/3337), [#3393](https://github.com/blockscout/blockscout/pull/3393) - Dark forest contract custom theme +- [#3330](https://github.com/blockscout/blockscout/pull/3330) - Caching of address transactions counter, remove query 10_000 rows limit + +### Fixes + +- [#3449](https://github.com/blockscout/blockscout/pull/3449) - Correct avg time calculation +- [#3443](https://github.com/blockscout/blockscout/pull/3443) - Improve blocks handling in Staking DApp +- [#3440](https://github.com/blockscout/blockscout/pull/3440) - Rewrite missing blocks range query +- [#3439](https://github.com/blockscout/blockscout/pull/3439) - Dark mode color fixes (search, charts) +- [#3437](https://github.com/blockscout/blockscout/pull/3437) - Fix Postgres Docker container +- [#3428](https://github.com/blockscout/blockscout/pull/3428) - Fix address tokens search +- [#3424](https://github.com/blockscout/blockscout/pull/3424) - Fix display of long NFT IDs +- [#3422](https://github.com/blockscout/blockscout/pull/3422) - Fix contract reader: tuple type +- [#3408](https://github.com/blockscout/blockscout/pull/3408) - Fix (total) difficulty display +- [#3401](https://github.com/blockscout/blockscout/pull/3401), [#3432](https://github.com/blockscout/blockscout/pull/3432) - Fix procedure of marking internal transactions as failed +- [#3400](https://github.com/blockscout/blockscout/pull/3400) - Add :last_block_number realtime chain event +- [#3399](https://github.com/blockscout/blockscout/pull/3399) - Fix Token transfers CSV export +- [#3396](https://github.com/blockscout/blockscout/pull/3396) - Handle exchange rates request throttled +- [#3382](https://github.com/blockscout/blockscout/pull/3382) - Check ets table exists for known tokens +- [#3376](https://github.com/blockscout/blockscout/pull/3376) - Fix contract nested inputs +- [#3375](https://github.com/blockscout/blockscout/pull/3375) - Prevent terminating of tokens/contracts process +- [#3374](https://github.com/blockscout/blockscout/pull/3374) - Fix find block timestamp query +- [#3373](https://github.com/blockscout/blockscout/pull/3373) - Fix horizontal scroll in Tokens table +- [#3370](https://github.com/blockscout/blockscout/pull/3370) - Improve contracts verification: refine constructor arguments extractor +- [#3368](https://github.com/blockscout/blockscout/pull/3368) - Fix Verify contract loading button width +- [#3357](https://github.com/blockscout/blockscout/pull/3357) - Fix token transfer realtime fetcher +- [#3353](https://github.com/blockscout/blockscout/pull/3353) - Fix xDai buttons hover color +- [#3352](https://github.com/blockscout/blockscout/pull/3352) - Fix dark body background +- [#3350](https://github.com/blockscout/blockscout/pull/3350) - Fix tokens list pagination +- [#3347](https://github.com/blockscout/blockscout/pull/3347) - Contract interaction: fix encoding of bytes output +- [#3346](https://github.com/blockscout/blockscout/pull/3346), [#3351](https://github.com/blockscout/blockscout/pull/3351) - Fix inventory tab pagination +- [#3344](https://github.com/blockscout/blockscout/pull/3344) - Fix logs search on address page +- [#3342](https://github.com/blockscout/blockscout/pull/3342) - Fix mobile styles for contract code tab +- [#3341](https://github.com/blockscout/blockscout/pull/3341) - Change Solc binary downloader path to official primary supported path +- [#3339](https://github.com/blockscout/blockscout/pull/3339) - Repair websocket subscription +- [#3329](https://github.com/blockscout/blockscout/pull/3329) - Fix pagination for bridged tokens list page +- [#3335](https://github.com/blockscout/blockscout/pull/3335) - MarketCap calculation: check that ETS tables exist before inserting new data or lookup from the table + +### Chore + +- [#5240](https://github.com/blockscout/blockscout/pull/5240) - Managing invalidation of address coin balance cache +- [#3450](https://github.com/blockscout/blockscout/pull/3450) - Replace window.web3 with window.ethereum +- [#3446](https://github.com/blockscout/blockscout/pull/3446), [#3448](https://github.com/blockscout/blockscout/pull/3448) - Set infinity timeout and increase cache invalidation period for counters +- [#3431](https://github.com/blockscout/blockscout/pull/3431) - Standardize token name definition, if name is empty +- [#3421](https://github.com/blockscout/blockscout/pull/3421) - Functions to enable GnosisSafe app link +- [#3414](https://github.com/blockscout/blockscout/pull/3414) - Manage lis of other explorers in the footer via env var +- [#3407](https://github.com/blockscout/blockscout/pull/3407) - Add EthereumJSONRPC.HTTP.HTTPoison.json_rpc function clause when URL is null +- [#3405](https://github.com/blockscout/blockscout/pull/3405) - N/A instead of 0 for market cap if it is not fetched +- [#3404](https://github.com/blockscout/blockscout/pull/3404) - DISABLE_KNOWN_TOKENS env var +- [#3403](https://github.com/blockscout/blockscout/pull/3403) - Refactor Coingecko interaction +- [#3394](https://github.com/blockscout/blockscout/pull/3394) - Actualize docker vars list +- [#3372](https://github.com/blockscout/blockscout/pull/3372), [#3380](https://github.com/blockscout/blockscout/pull/3380) - Improve all lists header container +- [#3371](https://github.com/blockscout/blockscout/pull/3371) - Eliminate dark background except Dark forest theme +- [#3366](https://github.com/blockscout/blockscout/pull/3366) - Stabilize tests execution in Github Actions CI +- [#3343](https://github.com/blockscout/blockscout/pull/3343) - Make (Bridged) Tokens' list page's header more compact + +## 3.3.3-beta + +### Features + +- [#3320](https://github.com/blockscout/blockscout/pull/3320) - Bridged tokens from AMB extensions support +- [#3311](https://github.com/blockscout/blockscout/pull/3311) - List of addresses with restricted access option +- [#3293](https://github.com/blockscout/blockscout/pull/3293) - Composite market cap for xDai: TokenBridge + OmniBridge +- [#3282](https://github.com/blockscout/blockscout/pull/3282), [#3318](https://github.com/blockscout/blockscout/pull/3318) - Import bridged tokens custom metadata +- [#3281](https://github.com/blockscout/blockscout/pull/3281) - Write contract: display currently connected address +- [#3279](https://github.com/blockscout/blockscout/pull/3279) - NFT instance: link to the app +- [#3278](https://github.com/blockscout/blockscout/pull/3278) - Support of fetching of NFT metadata from IPFS +- [#3273](https://github.com/blockscout/blockscout/pull/3273) - Update token metadata at burn/mint events +- [#3268](https://github.com/blockscout/blockscout/pull/3268) - Token total supply on-demand fetcher +- [#3261](https://github.com/blockscout/blockscout/pull/3261) - Bridged tokens table + +### Fixes + +- [#3323](https://github.com/blockscout/blockscout/pull/3323) - Fix logs list API endpoint response +- [#3319](https://github.com/blockscout/blockscout/pull/3319) - Eliminate horizontal scroll +- [#3314](https://github.com/blockscout/blockscout/pull/3314) - Handle nil values from response of CoinGecko price API +- [#3313](https://github.com/blockscout/blockscout/pull/3313) - Fix xDai styles: invisible tokens on address +- [#3312](https://github.com/blockscout/blockscout/pull/3312) - Replace symbol for some tokens to be able to find price in CoinGecko for OmniBridge balance +- [#3307](https://github.com/blockscout/blockscout/pull/3307) - Replace "latest" compiler version with the actual one +- [#3303](https://github.com/blockscout/blockscout/pull/3303) - Address contract twins feature performance +- [#3295](https://github.com/blockscout/blockscout/pull/3295) - Token instance: check if external_url is not null before trimming +- [#3291](https://github.com/blockscout/blockscout/pull/3291) - Support unlimited number of external rewards in block +- [#3290](https://github.com/blockscout/blockscout/pull/3290) - Eliminate protocol Jason.Encoder not implemented for... error +- [#3284](https://github.com/blockscout/blockscout/pull/3284) - Fix fetch_coin_balance query: coin balance delta +- [#3276](https://github.com/blockscout/blockscout/pull/3276) - Bridged tokens status/metadata fetcher refactoring +- [#3264](https://github.com/blockscout/blockscout/pull/3264) - Fix encoding of address output if function input exists +- [#3259](https://github.com/blockscout/blockscout/pull/3259), [#3269](https://github.com/blockscout/blockscout/pull/3269) - Contract interaction: array input type parsing fix +- [#3257](https://github.com/blockscout/blockscout/pull/3257) - Contracts read/write: method_id instead function_name as a key +- [#3256](https://github.com/blockscout/blockscout/pull/3256) - Fix for invisible validator address at block page and wrong alert text color at xDai + +### Chore + +- [#3327](https://github.com/blockscout/blockscout/pull/3327) - Handle various indexer fetchers errors in setup with non-archive node +- [#3325](https://github.com/blockscout/blockscout/pull/3325) - Dark theme improvements +- [#3316](https://github.com/blockscout/blockscout/pull/3316), [#3317](https://github.com/blockscout/blockscout/pull/3317) - xDai smile logo +- [#3315](https://github.com/blockscout/blockscout/pull/3315) - Environment variable to disable Bridge market cap updater +- [#3308](https://github.com/blockscout/blockscout/pull/3308) - Fixate latest stable release of Elixir, Node, Postgres +- [#3297](https://github.com/blockscout/blockscout/pull/3297) - Actualize names of default chains +- [#3285](https://github.com/blockscout/blockscout/pull/3285) - Switch to RPC endpoint polling if ETHEREUM_JSONRPC_WS_URL is an empty string +- [#3274](https://github.com/blockscout/blockscout/pull/3274) - Replace underscore with hyphen in routes +- [#3260](https://github.com/blockscout/blockscout/pull/3260) - Update NPM dependencies to fix known vulnerabilities +- [#3258](https://github.com/blockscout/blockscout/pull/3258) - Token transfer: check that block exists before retrieving timestamp + +## 3.3.2-beta + +### Features + +- [#3252](https://github.com/blockscout/blockscout/pull/3252) - Gas price at the main page +- [#3239](https://github.com/blockscout/blockscout/pull/3239) - Hide address page tabs if no items +- [#3236](https://github.com/blockscout/blockscout/pull/3236) - Easy verification of contracts which has verified twins (the same bytecode) +- [#3227](https://github.com/blockscout/blockscout/pull/3227) - Distinguishing of bridged tokens +- [#3224](https://github.com/blockscout/blockscout/pull/3224) - Top tokens page + +### Fixes + +- [#3249](https://github.com/blockscout/blockscout/pull/3249) - Fix incorrect ABI decoding of address in tuple output +- [#3237](https://github.com/blockscout/blockscout/pull/3237) - Refine contract method signature detection for read/write feature +- [#3235](https://github.com/blockscout/blockscout/pull/3235) - Fix coin supply api endpoint +- [#3233](https://github.com/blockscout/blockscout/pull/3233) - Fix for the contract verification for solc 0.5 family with experimental features enabled +- [#3231](https://github.com/blockscout/blockscout/pull/3231) - Improve search: unlimited number of searching results +- [#3231](https://github.com/blockscout/blockscout/pull/3231) - Improve search: allow search with space +- [#3231](https://github.com/blockscout/blockscout/pull/3231) - Improve search: order by token holders in descending order and token/contract name is ascending order +- [#3226](https://github.com/blockscout/blockscout/pull/3226) - Fix notifier query for live update of token transfers +- [#3220](https://github.com/blockscout/blockscout/pull/3220) - Allow interaction with navbar menu at block-not-found page + +### Chore + +- [#3326](https://github.com/blockscout/blockscout/pull/3326) - Chart smooth lines +- [#3250](https://github.com/blockscout/blockscout/pull/3250) - Eliminate occurrences of obsolete env variable ETHEREUM_JSONRPC_JSON_RPC_TRANSPORT +- [#3240](https://github.com/blockscout/blockscout/pull/3240), [#3251](https://github.com/blockscout/blockscout/pull/3251) - various CSS improving +- [f3a720](https://github.com/blockscout/blockscout/commit/2dd909c10a79b0bf4b7541a486be114152f3a720) - Make wobserver optional + +## 3.3.1-beta + +### Features + +- [#3216](https://github.com/blockscout/blockscout/pull/3216) - Display new token transfers at token page and address page without refreshing the page +- [#3199](https://github.com/blockscout/blockscout/pull/3199) - Show compilation error at contract verification +- [#3193](https://github.com/blockscout/blockscout/pull/3193) - Raw trace copy button +- [#3184](https://github.com/blockscout/blockscout/pull/3184) - Apps navbar menu item +- [#3145](https://github.com/blockscout/blockscout/pull/3145) - Pending txs per address API endpoint + +### Fixes + +- [#3219](https://github.com/blockscout/blockscout/pull/3219) - Fix revert reason message detection +- [#3215](https://github.com/blockscout/blockscout/pull/3215) - Coveralls in CI through Github Actions +- [#3214](https://github.com/blockscout/blockscout/pull/3214) - Fix current token balances fetcher +- [#3143](https://github.com/blockscout/blockscout/pull/3143) - Fix "Connection lost..." error at address page +- [#3209](https://github.com/blockscout/blockscout/pull/3209) - GraphQL: fix internal server error at request of internal transactions at address +- [#3207](https://github.com/blockscout/blockscout/pull/3207) - Fix read contract bytes array type output +- [#3203](https://github.com/blockscout/blockscout/pull/3203) - Improve "get mined blocks" query performance +- [#3202](https://github.com/blockscout/blockscout/pull/3202) - Fix contracts verification with experimental features enabled +- [#3201](https://github.com/blockscout/blockscout/pull/3201) - Connect to Metamask button +- [#3192](https://github.com/blockscout/blockscout/pull/3192) - Dropdown menu doesn't open at "not found" page +- [#3190](https://github.com/blockscout/blockscout/pull/3190) - Contract log/method decoded view improvements: eliminate horizontal scroll, remove excess borders, whitespaces +- [#3185](https://github.com/blockscout/blockscout/pull/3185) - Transaction page: decoding logs from nested contracts calls +- [#3182](https://github.com/blockscout/blockscout/pull/3182) - Besu: support revertReason key in eth_getTransactionReceipt endpoint +- [#3178](https://github.com/blockscout/blockscout/pull/3178) - Fix permanent fetching tokens... when read/write proxy tab is active +- [#3178](https://github.com/blockscout/blockscout/pull/3178) - Fix unavailable navbar menu when read/write proxy tab is active + +### Chore + +- [#3212](https://github.com/blockscout/blockscout/pull/3212) - GitHub actions CI config +- [#3210](https://github.com/blockscout/blockscout/pull/3210) - Update Phoenix up to 1.4.17 +- [#3206](https://github.com/blockscout/blockscout/pull/3206) - Update Elixir version: 1.10.2 -> 1.10.3 +- [#3204](https://github.com/blockscout/blockscout/pull/3204) - GraphQL Absinthe related packages update up to stable versions +- [#3180](https://github.com/blockscout/blockscout/pull/3180) - Return correct status in verify API endpoint if contract verified +- [#3180](https://github.com/blockscout/blockscout/pull/3180) - Remove Kovan from the list of default chains + +## 3.3.0-beta + +### Features + +- [#3174](https://github.com/blockscout/blockscout/pull/3174) - EIP-1967 support: transparent proxy pattern +- [#3173](https://github.com/blockscout/blockscout/pull/3173) - Display implementation address at read/write proxy tabs +- [#3171](https://github.com/blockscout/blockscout/pull/3171) - Import accounts/contracts/balances from Geth genesis.json +- [#3161](https://github.com/blockscout/blockscout/pull/3161) - Write proxy contracts feature +- [#3160](https://github.com/blockscout/blockscout/pull/3160) - Write contracts feature +- [#3157](https://github.com/blockscout/blockscout/pull/3157) - Read methods of implementation on proxy contract + +### Fixes + +- [#3168](https://github.com/blockscout/blockscout/pull/3168) - Eliminate internal server error at /accounts page with token-bridge type of supply and inexistent bridge contracts +- [#3169](https://github.com/blockscout/blockscout/pull/3169) - Fix for verification of contracts defined in genesis block + +### Chore + +## 3.2.0-beta + +### Features + +- [#3154](https://github.com/blockscout/blockscout/pull/3154) - Support of Hyperledger Besu client +- [#3153](https://github.com/blockscout/blockscout/pull/3153) - Proxy contracts: logs decoding using implementation ABI +- [#3153](https://github.com/blockscout/blockscout/pull/3153) - Proxy contracts: methods decoding using implementation ABI +- [#3149](https://github.com/blockscout/blockscout/pull/3149) - Display and store revert reason of tx on demand at transaction details page and at gettxinfo API endpoint. + +### Fixes + +### Chore + +- [#3152](https://github.com/blockscout/blockscout/pull/3152) - Fix contract compilation tests for old versions of compiler + +## 3.1.3-beta + +### Features + +- [#3125](https://github.com/blockscout/blockscout/pull/3125) - Availability to configure a number of days to consider at coin balance history chart via environment variable + +### Fixes + +- [#3146](https://github.com/blockscout/blockscout/pull/3146) - Fix coin balance history page: order of items, fix if no balance changes +- [#3142](https://github.com/blockscout/blockscout/pull/3142) - Speed-up last coin balance timestamp query (coin balance history page performance improvement) +- [#3140](https://github.com/blockscout/blockscout/pull/3140) - Fix performance of the balance changing history list loading +- [#3133](https://github.com/blockscout/blockscout/pull/3133) - Take into account FIRST_BLOCK in trace_ReplayBlockTransactions requests +- [#3132](https://github.com/blockscout/blockscout/pull/3132) - Fix performance of coin supply API endpoints +- [#3130](https://github.com/blockscout/blockscout/pull/3130) - Take into account FIRST_BLOCK for block rewards fetching +- [#3128](https://github.com/blockscout/blockscout/pull/3128) - Token instance metadata retriever refinement: add processing of token metadata if only image URL is passed to token URI +- [#3126](https://github.com/blockscout/blockscout/pull/3126) - Fetch balance only for blocks which are greater or equal block with FIRST_BLOCK number +- [#3125](https://github.com/blockscout/blockscout/pull/3125) - Fix performance of coin balance history chart +- [#3122](https://github.com/blockscout/blockscout/pull/3122) - Exclude balance percentage calculation for burn address on accounts page +- [#3121](https://github.com/blockscout/blockscout/pull/3121) - Geth: handle response from eth_getblockbyhash JSON RPC method without totalDifficulty (uncle blocks) +- [#3119](https://github.com/blockscout/blockscout/pull/3119), [#3120](https://github.com/blockscout/blockscout/pull/3120) - Fix performance of Inventory tab loading for ERC-721 tokens +- [#3114](https://github.com/blockscout/blockscout/pull/3114) - Fix performance of "Blocks validated" page +- [#3112](https://github.com/blockscout/blockscout/pull/3112) - Fix verification of contracts, compiled with nightly builds of solc compiler +- [#3112](https://github.com/blockscout/blockscout/pull/3112) - Check compiler version at contract verification +- [#3106](https://github.com/blockscout/blockscout/pull/3106) - Fix verification of contracts with `immutable` declaration +- [#3106](https://github.com/blockscout/blockscout/pull/3106), [#3115](https://github.com/blockscout/blockscout/pull/3115) - Fix verification of contracts, created from factory (from internal transaction) + +### Chore + +- [#3137](https://github.com/blockscout/blockscout/pull/3137) - RSK Papyrus Release v2.0.1 hardfork: cumulativeDifficulty +- [#3134](https://github.com/blockscout/blockscout/pull/3134) - Get last value of fetched coinsupply API endpoint from DB if cache is empty +- [#3124](https://github.com/blockscout/blockscout/pull/3124) - Display upper border for tx speed if the value cannot be calculated + +## 3.1.2-beta + +### Features + +- [#3089](https://github.com/blockscout/blockscout/pull/3089) - CoinGecko API coin id environment variable +- [#3069](https://github.com/blockscout/blockscout/pull/3069) - Make a link to address page on decoded constructor argument of address type +- [#3067](https://github.com/blockscout/blockscout/pull/3067) - Show proper title of the tile or container for token burnings/mintings instead of "Token Transfer" +- [#3066](https://github.com/blockscout/blockscout/pull/3066) - ERC-721 token instance page: link to token added +- [#3065](https://github.com/blockscout/blockscout/pull/3065) - Transactions history chart + +### Fixes + +- [#3097](https://github.com/blockscout/blockscout/pull/3097) - Fix contract reader decoding +- [#3095](https://github.com/blockscout/blockscout/pull/3095) - Fix constructor arguments decoding +- [#3092](https://github.com/blockscout/blockscout/pull/3092) - Contract verification: constructor arguments search search refinement +- [#3077](https://github.com/blockscout/blockscout/pull/3077) - Finally speedup pending tx list +- [#3076](https://github.com/blockscout/blockscout/pull/3076) - Speedup tx list query on address page: check if an address has a reward, check if this is actual payout key of the validator - beneficiary, return only mined txs in tx list query +- [#3071](https://github.com/blockscout/blockscout/pull/3071) - Speedup list of token transfers per token query +- [#3070](https://github.com/blockscout/blockscout/pull/3070) - Index creation to blazingly speedup token holders query +- [#3064](https://github.com/blockscout/blockscout/pull/3064) - Automatically define Block reward contract address in TokenBridge supply module +- [#3061](https://github.com/blockscout/blockscout/pull/3061) - Fix verification of contracts with error messages in require in parent contract +- [#2756](https://github.com/blockscout/blockscout/pull/2756) - Improve subquery joins + +### Chore + +- [#3100](https://github.com/blockscout/blockscout/pull/3100) - Update npm packages +- [#3099](https://github.com/blockscout/blockscout/pull/3099) - Remove pending txs cache +- [#3093](https://github.com/blockscout/blockscout/pull/3093) - Extend list of env vars for Docker setup +- [#3084](https://github.com/blockscout/blockscout/pull/3084) - Bump Elixir version 1.10.2 +- [#3079](https://github.com/blockscout/blockscout/pull/3079) - Extend optionality of websockets to Geth + +## 3.1.1-beta + +### Features + +- [#3058](https://github.com/blockscout/blockscout/pull/3058) - Searching by verified contract name + +### Fixes + +- [#3053](https://github.com/blockscout/blockscout/pull/3053) - Fix ABI decoding in contracts methods, logs (migrate to ex_abi 0.3.0) +- [#3044](https://github.com/blockscout/blockscout/pull/3044) - Prevent division by zero on /accounts page +- [#3043](https://github.com/blockscout/blockscout/pull/3043) - Extract host name for split couple of indexer and web app +- [#3042](https://github.com/blockscout/blockscout/pull/3042) - Speedup pending txs list query +- [#2944](https://github.com/blockscout/blockscout/pull/2944), [#3046](https://github.com/blockscout/blockscout/pull/3046) - Split js logic into multiple files + +## 3.1.0-beta + +### Features + +- [#3013](https://github.com/blockscout/blockscout/pull/3013), [#3026](https://github.com/blockscout/blockscout/pull/3026), [#3031](https://github.com/blockscout/blockscout/pull/3031) - Raw trace of transaction on-demand +- [#3000](https://github.com/blockscout/blockscout/pull/3000) - Get rid of storing of first trace for all types of transactions for Parity variant +- [#2875](https://github.com/blockscout/blockscout/pull/2875) - Save contract code from Parity genesis file +- [#2834](https://github.com/blockscout/blockscout/pull/2834), [#3009](https://github.com/blockscout/blockscout/pull/3009), [#3014](https://github.com/blockscout/blockscout/pull/3014), [#3033](https://github.com/blockscout/blockscout/pull/3033) - always redirect to checksummed hash + +### Fixes + +- [#3037](https://github.com/blockscout/blockscout/pull/3037) - Make buttons color at verification page consistent +- [#3034](https://github.com/blockscout/blockscout/pull/3034) - Support stateMutability=view to define reading functions in smart-contracts +- [#3029](https://github.com/blockscout/blockscout/pull/3029) - Fix transactions and blocks appearance on the main page +- [#3028](https://github.com/blockscout/blockscout/pull/3028) - Decrease polling period value for realtime fetcher +- [#3027](https://github.com/blockscout/blockscout/pull/3027) - Rescue for SUPPORTED_CHAINS env var parsing +- [#3025](https://github.com/blockscout/blockscout/pull/3025) - Fix splitting of indexer/web components setup +- [#3024](https://github.com/blockscout/blockscout/pull/3024) - Fix pool size default value in config +- [#3021](https://github.com/blockscout/blockscout/pull/3021), [#3022](https://github.com/blockscout/blockscout/pull/3022) - Refine dev/test config +- [#3016](https://github.com/blockscout/blockscout/pull/3016), [#3017](https://github.com/blockscout/blockscout/pull/3017) - Fix token instance QR code data +- [#3012](https://github.com/blockscout/blockscout/pull/3012) - Speedup token transfers list query +- [#3011](https://github.com/blockscout/blockscout/pull/3011) - Revert realtime fetcher small skips feature +- [#3007](https://github.com/blockscout/blockscout/pull/3007) - Fix copy UTF8 tx input action +- [#2996](https://github.com/blockscout/blockscout/pull/2996) - Fix awesomplete lib loading in Firefox +- [#2993](https://github.com/blockscout/blockscout/pull/2993) - Fix path definition for contract verification endpoint +- [#2990](https://github.com/blockscout/blockscout/pull/2990) - Fix import of Parity spec file +- [#2989](https://github.com/blockscout/blockscout/pull/2989) - Introduce API_PATH env var +- [#2988](https://github.com/blockscout/blockscout/pull/2988) - Fix web manifest accessibility +- [#2967](https://github.com/blockscout/blockscout/pull/2967) - Fix styles loading for firefox +- [#2950](https://github.com/blockscout/blockscout/pull/2950) - Add `creationMethod` to `EthereumJSONRPC.Parity.Trace.Action.entry_to_elixir` +- [#2897](https://github.com/blockscout/blockscout/pull/2897) - remove duplicate indexes +- [#2883](https://github.com/blockscout/blockscout/pull/2883) - Fix long contracts names + +### Chore + +- [#3032](https://github.com/blockscout/blockscout/pull/3032) - Remove indexing status alert for Ganache variant +- [#3030](https://github.com/blockscout/blockscout/pull/3030) - Remove default websockets URL from config +- [#2995](https://github.com/blockscout/blockscout/pull/2995) - Support API_PATH env var in Docker file + +## 3.0.0-beta + +### Features + +- [#2835](https://github.com/blockscout/blockscout/pull/2835), [#2871](https://github.com/blockscout/blockscout/pull/2871), [#2872](https://github.com/blockscout/blockscout/pull/2872), [#2886](https://github.com/blockscout/blockscout/pull/2886), [#2925](https://github.com/blockscout/blockscout/pull/2925), [#2936](https://github.com/blockscout/blockscout/pull/2936), [#2949](https://github.com/blockscout/blockscout/pull/2949), [#2940](https://github.com/blockscout/blockscout/pull/2940), [#2958](https://github.com/blockscout/blockscout/pull/2958) - Add "block_hash" to logs, token_transfers and internal transactions and "pending blocks operations" approach +- [#2975](https://github.com/blockscout/blockscout/pull/2975) - Refine UX of contracts verification +- [#2926](https://github.com/blockscout/blockscout/pull/2926) - API endpoint: sum balances except burnt address +- [#2918](https://github.com/blockscout/blockscout/pull/2918) - Add tokenID for tokentx API action explicitly + +### Fixes + +- [#2969](https://github.com/blockscout/blockscout/pull/2969) - Fix contract constructor require msg appearance in constructor arguments encoded view +- [#2964](https://github.com/blockscout/blockscout/pull/2964) - Fix bug in skipping of constructor arguments in contract verification +- [#2961](https://github.com/blockscout/blockscout/pull/2961) - Add a guard that addresses is enum in `values` function in `read contract` page +- [#2960](https://github.com/blockscout/blockscout/pull/2960) - Add BLOCKSCOUT_HOST to docker setup +- [#2956](https://github.com/blockscout/blockscout/pull/2956) - Add support of 0.6.x version of compiler +- [#2955](https://github.com/blockscout/blockscout/pull/2955) - Move socket path to env +- [#2938](https://github.com/blockscout/blockscout/pull/2938) - utf8 copy tx input tooltip +- [#2934](https://github.com/blockscout/blockscout/pull/2934) - RSK release 1.2.0 breaking changes support +- [#2933](https://github.com/blockscout/blockscout/pull/2933) - Get rid of deadlock in the query to address_current_token_balance table +- [#2932](https://github.com/blockscout/blockscout/pull/2932) - fix duplicate websocket connection +- [#2928](https://github.com/blockscout/blockscout/pull/2928) - Speedup pending block ops int txs to fetch query +- [#2924](https://github.com/blockscout/blockscout/pull/2924) - Speedup address to logs query +- [#2915](https://github.com/blockscout/blockscout/pull/2915) - Speedup of blocks_without_reward_query +- [#2914](https://github.com/blockscout/blockscout/pull/2914) - Reduce execution time of stream_unfetched_token_instances query +- [#2910](https://github.com/blockscout/blockscout/pull/2910) - Reorganize queries and indexes for internal_transactions table +- [#2908](https://github.com/blockscout/blockscout/pull/2908) - Fix performance of address page +- [#2906](https://github.com/blockscout/blockscout/pull/2906) - fix address sum cache +- [#2902](https://github.com/blockscout/blockscout/pull/2902) - Offset in blocks retrieval for average block time +- [#2900](https://github.com/blockscout/blockscout/pull/2900) - check fetched instance metadata in multiple places +- [#2899](https://github.com/blockscout/blockscout/pull/2899) - fix empty buffered task +- [#2887](https://github.com/blockscout/blockscout/pull/2887) - increase chart loading speed + +### Chore + +- [#2959](https://github.com/blockscout/blockscout/pull/2959) - Remove logs from test folder too in the cleaning script +- [#2954](https://github.com/blockscout/blockscout/pull/2954) - Upgrade absinthe and ecto deps +- [#2947](https://github.com/blockscout/blockscout/pull/2947) - Upgrade Circle CI postgres Docker image +- [#2946](https://github.com/blockscout/blockscout/pull/2946) - Fix vulnerable NPM deps +- [#2942](https://github.com/blockscout/blockscout/pull/2942) - Actualize Docker setup +- [#2896](https://github.com/blockscout/blockscout/pull/2896) - Disable Parity websockets tests +- [#2873](https://github.com/blockscout/blockscout/pull/2873) - bump elixir to 1.9.4 + +## 2.1.1-beta + +### Features + +- [#2862](https://github.com/blockscout/blockscout/pull/2862) - Coin total supply from DB API endpoint +- [#2857](https://github.com/blockscout/blockscout/pull/2857) - Extend getsourcecode API view with new output fields +- [#2822](https://github.com/blockscout/blockscout/pull/2822) - Estimated address count on the main page, if cache is empty +- [#2821](https://github.com/blockscout/blockscout/pull/2821) - add autodetection of constructor arguments +- [#2825](https://github.com/blockscout/blockscout/pull/2825) - separate token transfers and transactions +- [#2787](https://github.com/blockscout/blockscout/pull/2787) - async fetching of address counters +- [#2791](https://github.com/blockscout/blockscout/pull/2791) - add ipc client +- [#2449](https://github.com/blockscout/blockscout/pull/2449) - add ability to send notification events through postgres notify + +### Fixes + +- [#2864](https://github.com/blockscout/blockscout/pull/2864) - add token instance metadata type check +- [#2855](https://github.com/blockscout/blockscout/pull/2855) - Fix favicons load +- [#2854](https://github.com/blockscout/blockscout/pull/2854) - Fix all npm vulnerabilities +- [#2851](https://github.com/blockscout/blockscout/pull/2851) - Fix paths for front assets +- [#2843](https://github.com/blockscout/blockscout/pull/2843) - fix realtime fetcher small skips feature +- [#2841](https://github.com/blockscout/blockscout/pull/2841) - LUKSO dashboard height fix +- [#2837](https://github.com/blockscout/blockscout/pull/2837) - fix txlist ordering issue +- [#2830](https://github.com/blockscout/blockscout/pull/2830) - Fix wrong color of contract icon on xDai chain +- [#2829](https://github.com/blockscout/blockscout/pull/2829) - Fix for stuck gas limit label and value +- [#2828](https://github.com/blockscout/blockscout/pull/2828) - Fix for script that clears compilation/launching assets +- [#2800](https://github.com/blockscout/blockscout/pull/2800) - return not found for not verified contract for token read_contract +- [#2806](https://github.com/blockscout/blockscout/pull/2806) - Fix blocks fetching on the main page +- [#2803](https://github.com/blockscout/blockscout/pull/2803) - Fix block validator custom tooltip +- [#2748](https://github.com/blockscout/blockscout/pull/2748) - Rewrite token updater +- [#2704](https://github.com/blockscout/blockscout/pull/2704) - refetch null values in token balances +- [#2690](https://github.com/blockscout/blockscout/pull/2690) - do not stich json rpc config into module for net version cache + +### Chore + +- [#2878](https://github.com/blockscout/blockscout/pull/2878) - Decrease loaders showing delay on the main page +- [#2859](https://github.com/blockscout/blockscout/pull/2859) - Add eth_blockNumber API endpoint to eth_rpc section +- [#2846](https://github.com/blockscout/blockscout/pull/2846) - Remove networks images preload +- [#2845](https://github.com/blockscout/blockscout/pull/2845) - Set outline none for nav dropdown item in mobile view (fix for Safari) +- [#2844](https://github.com/blockscout/blockscout/pull/2844) - Extend external reward types up to 20 +- [#2827](https://github.com/blockscout/blockscout/pull/2827) - Node js 12.13.0 (latest LTS release) support +- [#2818](https://github.com/blockscout/blockscout/pull/2818) - allow hiding marketcap percentage +- [#2817](https://github.com/blockscout/blockscout/pull/2817) - move docker integration documentation to blockscout docs +- [#2808](https://github.com/blockscout/blockscout/pull/2808) - Add tooltip for tx input +- [#2807](https://github.com/blockscout/blockscout/pull/2807) - 422 page +- [#2805](https://github.com/blockscout/blockscout/pull/2805) - Update supported chains default option +- [#2801](https://github.com/blockscout/blockscout/pull/2801) - remove unused clause in address_to_unique_tokens query + +## 2.1.0-beta + +### Features + +- [#2776](https://github.com/blockscout/blockscout/pull/2776) - fetch token counters async +- [#2772](https://github.com/blockscout/blockscout/pull/2772) - add token instance images to the token inventory tab +- [#2733](https://github.com/blockscout/blockscout/pull/2733) - Add cache for first page of uncles +- [#2735](https://github.com/blockscout/blockscout/pull/2735) - Add pending transactions cache +- [#2726](https://github.com/blockscout/blockscout/pull/2726) - Remove internal_transaction block_number setting from blocks runner +- [#2717](https://github.com/blockscout/blockscout/pull/2717) - Improve speed of nonconsensus data removal +- [#2679](https://github.com/blockscout/blockscout/pull/2679) - added fixed height for card chain blocks and card chain transactions +- [#2678](https://github.com/blockscout/blockscout/pull/2678) - fixed dashboard banner height bug +- [#2672](https://github.com/blockscout/blockscout/pull/2672) - added new theme for xUSDT +- [#2667](https://github.com/blockscout/blockscout/pull/2667) - Add ETS-based cache for accounts page +- [#2666](https://github.com/blockscout/blockscout/pull/2666) - fetch token counters in parallel +- [#2665](https://github.com/blockscout/blockscout/pull/2665) - new menu layout for mobile devices +- [#2663](https://github.com/blockscout/blockscout/pull/2663) - Fetch address counters in parallel +- [#2642](https://github.com/blockscout/blockscout/pull/2642) - add ERC721 coin instance page +- [#2762](https://github.com/blockscout/blockscout/pull/2762) - on-fly fetching of token instances +- [#2470](https://github.com/blockscout/blockscout/pull/2470) - Allow Realtime Fetcher to wait for small skips + +### Fixes + +- [#4325](https://github.com/blockscout/blockscout/pull/4325) - Fix search on `/tokens` page +- [#2793](https://github.com/blockscout/blockscout/pull/2793) - Hide "We are indexing this chain right now. Some of the counts may be inaccurate" banner if no txs in blockchain +- [#2779](https://github.com/blockscout/blockscout/pull/2779) - fix fetching `latin1` encoded data +- [#2799](https://github.com/blockscout/blockscout/pull/2799) - fix catchup fetcher for empty node and db +- [#2783](https://github.com/blockscout/blockscout/pull/2783) - Fix stuck value and ticker on the token page +- [#2781](https://github.com/blockscout/blockscout/pull/2781) - optimize txlist json rpc +- [#2777](https://github.com/blockscout/blockscout/pull/2777) - Remove duplicate blocks from changes_list before import +- [#2770](https://github.com/blockscout/blockscout/pull/2770) - do not re-fetch token instances without uris +- [#2769](https://github.com/blockscout/blockscout/pull/2769) - optimize token token transfers query +- [#2768](https://github.com/blockscout/blockscout/pull/2768) - Remove nonconsensus blocks from cache after internal transactions importing +- [#2761](https://github.com/blockscout/blockscout/pull/2761) - add indexes for token instances fetching queries +- [#2767](https://github.com/blockscout/blockscout/pull/2767) - fix websocket subscriptions with token instances +- [#2765](https://github.com/blockscout/blockscout/pull/2765) - fixed width issue for cards in mobile view for Transaction Details page +- [#2755](https://github.com/blockscout/blockscout/pull/2755) - various token instance fetcher fixes +- [#2753](https://github.com/blockscout/blockscout/pull/2753) - fix nft token instance images +- [#2750](https://github.com/blockscout/blockscout/pull/2750) - fixed contract buttons color for NFT token instance on each theme +- [#2746](https://github.com/blockscout/blockscout/pull/2746) - fixed wrong alignment in logs decoded view +- [#2745](https://github.com/blockscout/blockscout/pull/2745) - optimize addresses page +- [#2742](https://github.com/blockscout/blockscout/pull/2742) - +fixed menu hovers in dark mode desktop view +- [#2737](https://github.com/blockscout/blockscout/pull/2737) - switched hardcoded subnetwork value to elixir expression for mobile menu +- [#2736](https://github.com/blockscout/blockscout/pull/2736) - do not update cache if no blocks were inserted +- [#2731](https://github.com/blockscout/blockscout/pull/2731) - fix library verification +- [#2718](https://github.com/blockscout/blockscout/pull/2718) - Include all addresses taking part in transactions in wallets' addresses counter +- [#2709](https://github.com/blockscout/blockscout/pull/2709) - Fix stuck label and value for uncle block height +- [#2707](https://github.com/blockscout/blockscout/pull/2707) - fix for dashboard banner chart legend items +- [#2706](https://github.com/blockscout/blockscout/pull/2706) - fix empty total_supply in coin gecko response +- [#2701](https://github.com/blockscout/blockscout/pull/2701) - Exclude nonconsensus blocks from avg block time calculation by default +- [#2696](https://github.com/blockscout/blockscout/pull/2696) - do not update fetched_coin_balance with nil +- [#2693](https://github.com/blockscout/blockscout/pull/2693) - remove non consensus internal transactions +- [#2691](https://github.com/blockscout/blockscout/pull/2691) - fix exchange rate websocket update for Rootstock +- [#2688](https://github.com/blockscout/blockscout/pull/2688) - fix try it out section +- [#2687](https://github.com/blockscout/blockscout/pull/2687) - remove non-consensus token transfers, logs when inserting new consensus blocks +- [#2684](https://github.com/blockscout/blockscout/pull/2684) - do not filter pending logs +- [#2682](https://github.com/blockscout/blockscout/pull/2682) - Use Task.start instead of Task.async in caches +- [#2671](https://github.com/blockscout/blockscout/pull/2671) - fixed buttons color at smart contract section +- [#2660](https://github.com/blockscout/blockscout/pull/2660) - set correct last value for coin balances chart data +- [#2619](https://github.com/blockscout/blockscout/pull/2619) - Enforce DB transaction's order to prevent deadlocks +- [#2738](https://github.com/blockscout/blockscout/pull/2738) - do not fail block `internal_transactions_indexed_at` field update + +### Chore + +- [#2797](https://github.com/blockscout/blockscout/pull/2797) - Return old style menu +- [#2796](https://github.com/blockscout/blockscout/pull/2796) - Optimize all images with ImageOptim +- [#2794](https://github.com/blockscout/blockscout/pull/2786) - update hosted versions in readme +- [#2789](https://github.com/blockscout/blockscout/pull/2786) - remove projects table in readme, link to docs version +- [#2786](https://github.com/blockscout/blockscout/pull/2786) - updated docs links, removed docs folder +- [#2752](https://github.com/blockscout/blockscout/pull/2752) - allow enabling internal transactions for simple token transfers txs +- [#2749](https://github.com/blockscout/blockscout/pull/2749) - fix opt 22.1 support +- [#2744](https://github.com/blockscout/blockscout/pull/2744) - Disable Geth tests in CI +- [#2724](https://github.com/blockscout/blockscout/pull/2724) - fix ci by commenting a line in hackney library +- [#2708](https://github.com/blockscout/blockscout/pull/2708) - add log index to logs view +- [#2723](https://github.com/blockscout/blockscout/pull/2723) - get rid of ex_json_schema warnings +- [#2740](https://github.com/blockscout/blockscout/pull/2740) - add verify contract rpc doc + +## 2.0.4-beta + +### Features + +- [#2636](https://github.com/blockscout/blockscout/pull/2636) - Execute all address' transactions page queries in parallel +- [#2596](https://github.com/blockscout/blockscout/pull/2596) - support AuRa's empty step reward type +- [#2588](https://github.com/blockscout/blockscout/pull/2588) - add verification submission comment +- [#2505](https://github.com/blockscout/blockscout/pull/2505) - support POA Network emission rewards +- [#2581](https://github.com/blockscout/blockscout/pull/2581) - Add generic Map-like Cache behavior and implementation +- [#2561](https://github.com/blockscout/blockscout/pull/2561) - Add token's type to the response of tokenlist method +- [#2555](https://github.com/blockscout/blockscout/pull/2555) - find and show decoding candidates for logs +- [#2499](https://github.com/blockscout/blockscout/pull/2499) - import emission reward ranges +- [#2497](https://github.com/blockscout/blockscout/pull/2497) - Add generic Ordered Cache behavior and implementation + +### Fixes + +- [#2659](https://github.com/blockscout/blockscout/pull/2659) - Multipurpose front-end part update +- [#2640](https://github.com/blockscout/blockscout/pull/2640) - SVG network icons +- [#2635](https://github.com/blockscout/blockscout/pull/2635) - optimize ERC721 inventory query +- [#2626](https://github.com/blockscout/blockscout/pull/2626) - Fixing 2 Mobile UI Issues +- [#2623](https://github.com/blockscout/blockscout/pull/2623) - fix a blinking test +- [#2616](https://github.com/blockscout/blockscout/pull/2616) - deduplicate coin history records by delta +- [#2613](https://github.com/blockscout/blockscout/pull/2613) - fix getminedblocks rpc endpoint +- [#2612](https://github.com/blockscout/blockscout/pull/2612) - Add cache updating independently from Indexer +- [#2610](https://github.com/blockscout/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates +- [#2592](https://github.com/blockscout/blockscout/pull/2592) - process new metadata format for whisper +- [#2591](https://github.com/blockscout/blockscout/pull/2591) - Fix url error in API page +- [#2572](https://github.com/blockscout/blockscout/pull/2572) - Ease non-critical css +- [#2570](https://github.com/blockscout/blockscout/pull/2570) - Network icons preload +- [#2569](https://github.com/blockscout/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter +- [#2568](https://github.com/blockscout/blockscout/pull/2568) - filter pending token transfers +- [#2564](https://github.com/blockscout/blockscout/pull/2564) - fix first page button for uncles and reorgs +- [#2563](https://github.com/blockscout/blockscout/pull/2563) - Fix view less transfers button +- [#2538](https://github.com/blockscout/blockscout/pull/2538) - fetch the last not empty coin balance records +- [#2468](https://github.com/blockscout/blockscout/pull/2468) - fix confirmations for non consensus blocks + +### Chore + +- [#2662](https://github.com/blockscout/blockscout/pull/2662) - fetch coin gecko id based on the coin symbol +- [#2646](https://github.com/blockscout/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout +- [#2634](https://github.com/blockscout/blockscout/pull/2634) - add Lukso to networks dropdown +- [#2617](https://github.com/blockscout/blockscout/pull/2617) - skip cache update if there are no blocks inserted +- [#2611](https://github.com/blockscout/blockscout/pull/2611) - fix js dependency vulnerabilities +- [#2594](https://github.com/blockscout/blockscout/pull/2594) - do not start genesis data fetching periodically +- [#2590](https://github.com/blockscout/blockscout/pull/2590) - restore backward compatibility with old releases +- [#2577](https://github.com/blockscout/blockscout/pull/2577) - Need recompile column in the env vars table +- [#2574](https://github.com/blockscout/blockscout/pull/2574) - limit request body in json rpc error +- [#2566](https://github.com/blockscout/blockscout/pull/2566) - upgrade absinthe phoenix + +## 2.0.3-beta + +### Features + +- [#2433](https://github.com/blockscout/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation +- [#2529](https://github.com/blockscout/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page +- [#2376](https://github.com/blockscout/blockscout/pull/2376) - Split API and WebApp routes +- [#2477](https://github.com/blockscout/blockscout/pull/2477) - aggregate token transfers on transaction page +- [#2458](https://github.com/blockscout/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks +- [#2456](https://github.com/blockscout/blockscout/pull/2456) - fetch pending transactions for geth +- [#2403](https://github.com/blockscout/blockscout/pull/2403) - Return gasPrice field at the result of gettxinfo method + +### Fixes + +- [#2562](https://github.com/blockscout/blockscout/pull/2562) - Fix dark theme flickering +- [#2560](https://github.com/blockscout/blockscout/pull/2560) - fix slash before not empty path in docs +- [#2559](https://github.com/blockscout/blockscout/pull/2559) - fix rsk total supply for empty exchange rate +- [#2553](https://github.com/blockscout/blockscout/pull/2553) - Dark theme import to the end of sass +- [#2550](https://github.com/blockscout/blockscout/pull/2550) - correctly encode decimal values for frontend +- [#2549](https://github.com/blockscout/blockscout/pull/2549) - Fix wrong color of tooltip +- [#2548](https://github.com/blockscout/blockscout/pull/2548) - CSS preload support in Firefox +- [#2547](https://github.com/blockscout/blockscout/pull/2547) - do not show eth value if it's zero on the transaction overview page +- [#2543](https://github.com/blockscout/blockscout/pull/2543) - do not hide search input during logs search +- [#2524](https://github.com/blockscout/blockscout/pull/2524) - fix dark theme validator data styles +- [#2532](https://github.com/blockscout/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page +- [#2528](https://github.com/blockscout/blockscout/pull/2528) - fix coin history chart data +- [#2520](https://github.com/blockscout/blockscout/pull/2520) - Hide loading message when fetching is failed +- [#2523](https://github.com/blockscout/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions +- [#2519](https://github.com/blockscout/blockscout/pull/2519) - enable `First` page button in pagination +- [#2518](https://github.com/blockscout/blockscout/pull/2518) - create suggested indexes +- [#2517](https://github.com/blockscout/blockscout/pull/2517) - remove duplicate indexes +- [#2515](https://github.com/blockscout/blockscout/pull/2515) - do not aggregate NFT token transfers +- [#2514](https://github.com/blockscout/blockscout/pull/2514) - Isolating of staking dapp css && extracting of non-critical css +- [#2512](https://github.com/blockscout/blockscout/pull/2512) - alert link fix +- [#2509](https://github.com/blockscout/blockscout/pull/2509) - value-ticker gaps fix +- [#2508](https://github.com/blockscout/blockscout/pull/2508) - logs view columns fix +- [#2506](https://github.com/blockscout/blockscout/pull/2506) - fix two active tab in the top menu +- [#2503](https://github.com/blockscout/blockscout/pull/2503) - Mitigate autocompletion library influence to page loading performance +- [#2502](https://github.com/blockscout/blockscout/pull/2502) - increase reward task timeout +- [#2463](https://github.com/blockscout/blockscout/pull/2463) - dark theme fixes +- [#2496](https://github.com/blockscout/blockscout/pull/2496) - fix docker build +- [#2495](https://github.com/blockscout/blockscout/pull/2495) - fix logs for indexed chain +- [#2459](https://github.com/blockscout/blockscout/pull/2459) - fix top addresses query +- [#2425](https://github.com/blockscout/blockscout/pull/2425) - Force to show address view for checksummed address even if it is not in DB +- [#2551](https://github.com/blockscout/blockscout/pull/2551) - Correctly handle dynamically created Bootstrap tooltips + +### Chore + +- [#2554](https://github.com/blockscout/blockscout/pull/2554) - remove extra slash for endpoint url in docs +- [#2552](https://github.com/blockscout/blockscout/pull/2552) - remove brackets for token holders percentage +- [#2507](https://github.com/blockscout/blockscout/pull/2507) - update minor version of ecto, ex_machina, phoenix_live_reload +- [#2516](https://github.com/blockscout/blockscout/pull/2516) - update absinthe plug from fork +- [#2473](https://github.com/blockscout/blockscout/pull/2473) - get rid of cldr warnings +- [#2402](https://github.com/blockscout/blockscout/pull/2402) - bump otp version to 22.0 +- [#2492](https://github.com/blockscout/blockscout/pull/2492) - hide decoded row if event is not decoded +- [#2490](https://github.com/blockscout/blockscout/pull/2490) - enable credo duplicated code check +- [#2432](https://github.com/blockscout/blockscout/pull/2432) - bump credo version +- [#2457](https://github.com/blockscout/blockscout/pull/2457) - update mix.lock +- [#2435](https://github.com/blockscout/blockscout/pull/2435) - Replace deprecated extract-text-webpack-plugin with mini-css-extract-plugin +- [#2450](https://github.com/blockscout/blockscout/pull/2450) - Fix clearance of logs and node_modules folders in clearing script +- [#2434](https://github.com/blockscout/blockscout/pull/2434) - get rid of timex warnings +- [#2402](https://github.com/blockscout/blockscout/pull/2402) - bump otp version to 22.0 +- [#2373](https://github.com/blockscout/blockscout/pull/2373) - Add script to validate internal_transactions constraint for large DBs + +## 2.0.2-beta + +### Features + +- [#2412](https://github.com/blockscout/blockscout/pull/2412) - dark theme +- [#2399](https://github.com/blockscout/blockscout/pull/2399) - decode verified smart contract's logs +- [#2391](https://github.com/blockscout/blockscout/pull/2391) - Controllers Improvements +- [#2379](https://github.com/blockscout/blockscout/pull/2379) - Disable network selector when is empty +- [#2374](https://github.com/blockscout/blockscout/pull/2374) - decode constructor arguments for verified smart contracts +- [#2366](https://github.com/blockscout/blockscout/pull/2366) - paginate eth logs +- [#2360](https://github.com/blockscout/blockscout/pull/2360) - add default evm version to smart contract verification +- [#2352](https://github.com/blockscout/blockscout/pull/2352) - Fetch rewards in parallel with transactions +- [#2294](https://github.com/blockscout/blockscout/pull/2294) - add healthy block period checking endpoint +- [#2324](https://github.com/blockscout/blockscout/pull/2324) - set timeout for loading message on the main page + +### Fixes + +- [#2421](https://github.com/blockscout/blockscout/pull/2421) - Fix hiding of loader for txs on the main page +- [#2420](https://github.com/blockscout/blockscout/pull/2420) - fetch data from cache in healthy endpoint +- [#2416](https://github.com/blockscout/blockscout/pull/2416) - Fix "page not found" handling in the router +- [#2413](https://github.com/blockscout/blockscout/pull/2413) - remove outer tables for decoded data +- [#2410](https://github.com/blockscout/blockscout/pull/2410) - preload smart contract for logs decoding +- [#2405](https://github.com/blockscout/blockscout/pull/2405) - added templates for table loader and tile loader +- [#2398](https://github.com/blockscout/blockscout/pull/2398) - show only one decoded candidate +- [#2389](https://github.com/blockscout/blockscout/pull/2389) - Reduce Lodash lib size (86% of lib methods are not used) +- [#2388](https://github.com/blockscout/blockscout/pull/2388) - add create2 support to geth's js tracer +- [#2387](https://github.com/blockscout/blockscout/pull/2387) - fix not existing keys in transaction json rpc +- [#2378](https://github.com/blockscout/blockscout/pull/2378) - Page performance: exclude moment.js localization files except EN, remove unused css +- [#2368](https://github.com/blockscout/blockscout/pull/2368) - add two columns of smart contract info +- [#2375](https://github.com/blockscout/blockscout/pull/2375) - Update created_contract_code_indexed_at on transaction import conflict +- [#2346](https://github.com/blockscout/blockscout/pull/2346) - Avoid fetching internal transactions of blocks that still need refetching +- [#2350](https://github.com/blockscout/blockscout/pull/2350) - fix invalid User agent headers +- [#2345](https://github.com/blockscout/blockscout/pull/2345) - do not override existing market records +- [#2337](https://github.com/blockscout/blockscout/pull/2337) - set url params for prod explicitly +- [#2341](https://github.com/blockscout/blockscout/pull/2341) - fix transaction input json encoding +- [#2311](https://github.com/blockscout/blockscout/pull/2311) - fix market history overriding with zeroes +- [#2310](https://github.com/blockscout/blockscout/pull/2310) - parse url for api docs +- [#2299](https://github.com/blockscout/blockscout/pull/2299) - fix interpolation in error message +- [#2303](https://github.com/blockscout/blockscout/pull/2303) - fix transaction csv download link +- [#2304](https://github.com/blockscout/blockscout/pull/2304) - footer grid fix for md resolution +- [#2291](https://github.com/blockscout/blockscout/pull/2291) - dashboard fix for md resolution, transactions load fix, block info row fix, addresses page issue, check mark issue +- [#2326](https://github.com/blockscout/blockscout/pull/2326) - fix nested constructor arguments + +### Chore + +- [#2422](https://github.com/blockscout/blockscout/pull/2422) - check if address_id is binary in token_transfers_csv endpoint +- [#2418](https://github.com/blockscout/blockscout/pull/2418) - Remove parentheses in market cap percentage +- [#2401](https://github.com/blockscout/blockscout/pull/2401) - add ENV vars to manage updating period of average block time and market history cache +- [#2363](https://github.com/blockscout/blockscout/pull/2363) - add parameters example for eth rpc +- [#2342](https://github.com/blockscout/blockscout/pull/2342) - Upgrade Postgres image version in Docker setup +- [#2325](https://github.com/blockscout/blockscout/pull/2325) - Reduce function input to address' hash only where possible +- [#2323](https://github.com/blockscout/blockscout/pull/2323) - Group Explorer caches +- [#2305](https://github.com/blockscout/blockscout/pull/2305) - Improve Address controllers +- [#2302](https://github.com/blockscout/blockscout/pull/2302) - fix names for xDai source +- [#2289](https://github.com/blockscout/blockscout/pull/2289) - Optional websockets for dev environment +- [#2307](https://github.com/blockscout/blockscout/pull/2307) - add GoJoy to README +- [#2293](https://github.com/blockscout/blockscout/pull/2293) - remove request idle timeout configuration +- [#2255](https://github.com/blockscout/blockscout/pull/2255) - bump elixir version to 1.9.0 + +## 2.0.1-beta + +### Features + +- [#2283](https://github.com/blockscout/blockscout/pull/2283) - Add transactions cache +- [#2182](https://github.com/blockscout/blockscout/pull/2182) - add market history cache +- [#2109](https://github.com/blockscout/blockscout/pull/2109) - use bigger updates instead of `Multi` transactions in BlocksTransactionsMismatch +- [#2075](https://github.com/blockscout/blockscout/pull/2075) - add blocks cache +- [#2151](https://github.com/blockscout/blockscout/pull/2151) - hide dropdown menu then other networks list is empty +- [#2191](https://github.com/blockscout/blockscout/pull/2191) - allow to configure token metadata update interval +- [#2146](https://github.com/blockscout/blockscout/pull/2146) - feat: add eth_getLogs rpc endpoint +- [#2216](https://github.com/blockscout/blockscout/pull/2216) - Improve token's controllers by avoiding unnecessary preloads +- [#2235](https://github.com/blockscout/blockscout/pull/2235) - save and show additional validation fields to smart contract +- [#2190](https://github.com/blockscout/blockscout/pull/2190) - show all token transfers +- [#2193](https://github.com/blockscout/blockscout/pull/2193) - feat: add BLOCKSCOUT_HOST, and use it in API docs +- [#2266](https://github.com/blockscout/blockscout/pull/2266) - allow excluding uncles from average block time calculation + +### Fixes + +- [#2290](https://github.com/blockscout/blockscout/pull/2290) - Add eth_get_balance.json to AddressView's render +- [#2286](https://github.com/blockscout/blockscout/pull/2286) - banner stats issues on sm resolutions, transactions title issue +- [#2284](https://github.com/blockscout/blockscout/pull/2284) - add 404 status for not existing pages +- [#2244](https://github.com/blockscout/blockscout/pull/2244) - fix internal transactions failing to be indexed because of constraint +- [#2281](https://github.com/blockscout/blockscout/pull/2281) - typo issues, dropdown issues +- [#2278](https://github.com/blockscout/blockscout/pull/2278) - increase threshold for scientific notation +- [#2275](https://github.com/blockscout/blockscout/pull/2275) - Description for networks selector +- [#2263](https://github.com/blockscout/blockscout/pull/2263) - added an ability to close network selector on outside click +- [#2257](https://github.com/blockscout/blockscout/pull/2257) - 'download csv' button added to different tabs +- [#2242](https://github.com/blockscout/blockscout/pull/2242) - added styles for 'download csv' button +- [#2261](https://github.com/blockscout/blockscout/pull/2261) - header logo aligned to the center properly +- [#2254](https://github.com/blockscout/blockscout/pull/2254) - search length issue, tile link wrapping issue +- [#2238](https://github.com/blockscout/blockscout/pull/2238) - header content alignment issue, hide navbar on outside click +- [#2229](https://github.com/blockscout/blockscout/pull/2229) - gap issue between qr and copy button in token transfers, top cards width and height issue +- [#2201](https://github.com/blockscout/blockscout/pull/2201) - footer columns fix +- [#2179](https://github.com/blockscout/blockscout/pull/2179) - fix docker build error +- [#2165](https://github.com/blockscout/blockscout/pull/2165) - sort blocks by timestamp when calculating average block time +- [#2175](https://github.com/blockscout/blockscout/pull/2175) - fix coinmarketcap response errors +- [#2164](https://github.com/blockscout/blockscout/pull/2164) - fix large numbers in balance view card +- [#2155](https://github.com/blockscout/blockscout/pull/2155) - fix pending transaction query +- [#2183](https://github.com/blockscout/blockscout/pull/2183) - tile content aligning for mobile resolution fix, dai logo fix +- [#2162](https://github.com/blockscout/blockscout/pull/2162) - contract creation tile color changed +- [#2144](https://github.com/blockscout/blockscout/pull/2144) - 'page not found' images path fixed for goerli +- [#2142](https://github.com/blockscout/blockscout/pull/2142) - Removed posdao theme and logo, added 'page not found' image for goerli +- [#2138](https://github.com/blockscout/blockscout/pull/2138) - badge colors issue, api titles issue +- [#2129](https://github.com/blockscout/blockscout/pull/2129) - Fix for width of explorer elements +- [#2121](https://github.com/blockscout/blockscout/pull/2121) - Binding of 404 page +- [#2120](https://github.com/blockscout/blockscout/pull/2120) - footer links and socials focus color issue +- [#2113](https://github.com/blockscout/blockscout/pull/2113) - renewed logos for rsk, dai, blockscout; themes color changes for lukso; error images for lukso +- [#2112](https://github.com/blockscout/blockscout/pull/2112) - themes color improvements, dropdown color issue +- [#2110](https://github.com/blockscout/blockscout/pull/2110) - themes colors issues, ui issues +- [#2103](https://github.com/blockscout/blockscout/pull/2103) - ui issues for all themes +- [#2090](https://github.com/blockscout/blockscout/pull/2090) - updated some ETC theme colors +- [#2096](https://github.com/blockscout/blockscout/pull/2096) - RSK theme fixes +- [#2093](https://github.com/blockscout/blockscout/pull/2093) - detect token transfer type for deprecated erc721 spec +- [#2111](https://github.com/blockscout/blockscout/pull/2111) - improve address transaction controller +- [#2108](https://github.com/blockscout/blockscout/pull/2108) - fix uncle fetching without full transactions +- [#2128](https://github.com/blockscout/blockscout/pull/2128) - add new function clause for uncle errors +- [#2123](https://github.com/blockscout/blockscout/pull/2123) - fix coins percentage view +- [#2119](https://github.com/blockscout/blockscout/pull/2119) - fix map logging +- [#2130](https://github.com/blockscout/blockscout/pull/2130) - fix navigation +- [#2148](https://github.com/blockscout/blockscout/pull/2148) - filter pending logs +- [#2147](https://github.com/blockscout/blockscout/pull/2147) - add rsk format of checksum +- [#2149](https://github.com/blockscout/blockscout/pull/2149) - remove pending transaction count +- [#2177](https://github.com/blockscout/blockscout/pull/2177) - remove duplicate entries from UncleBlock's Fetcher +- [#2169](https://github.com/blockscout/blockscout/pull/2169) - add more validator reward types for xDai +- [#2173](https://github.com/blockscout/blockscout/pull/2173) - handle correctly empty transactions +- [#2174](https://github.com/blockscout/blockscout/pull/2174) - fix reward channel joining +- [#2186](https://github.com/blockscout/blockscout/pull/2186) - fix net version test +- [#2196](https://github.com/blockscout/blockscout/pull/2196) - Nethermind client fixes +- [#2237](https://github.com/blockscout/blockscout/pull/2237) - fix rsk total_supply +- [#2198](https://github.com/blockscout/blockscout/pull/2198) - reduce transaction status and error constraint +- [#2167](https://github.com/blockscout/blockscout/pull/2167) - feat: document eth rpc api mimicking endpoints +- [#2225](https://github.com/blockscout/blockscout/pull/2225) - fix metadata decoding in Solidity 0.5.9 smart contract verification +- [#2204](https://github.com/blockscout/blockscout/pull/2204) - fix large contract verification +- [#2258](https://github.com/blockscout/blockscout/pull/2258) - reduce BlocksTransactionsMismatch memory footprint +- [#2247](https://github.com/blockscout/blockscout/pull/2247) - hide logs search if there are no logs +- [#2248](https://github.com/blockscout/blockscout/pull/2248) - sort block after query execution for average block time +- [#2249](https://github.com/blockscout/blockscout/pull/2249) - More transaction controllers improvements +- [#2267](https://github.com/blockscout/blockscout/pull/2267) - Modify implementation of `where_transaction_has_multiple_internal_transactions` +- [#2270](https://github.com/blockscout/blockscout/pull/2270) - Remove duplicate params in `Indexer.Fetcher.TokenBalance` +- [#2268](https://github.com/blockscout/blockscout/pull/2268) - remove not existing assigns in html code +- [#2276](https://github.com/blockscout/blockscout/pull/2276) - remove port in docs + +### Chore + +- [#2127](https://github.com/blockscout/blockscout/pull/2127) - use previous chromedriver version +- [#2118](https://github.com/blockscout/blockscout/pull/2118) - show only the last decompiled contract +- [#2255](https://github.com/blockscout/blockscout/pull/2255) - upgrade elixir version to 1.9.0 +- [#2256](https://github.com/blockscout/blockscout/pull/2256) - use the latest version of chromedriver + +## 2.0.0-beta + +### Features + +- [#2044](https://github.com/blockscout/blockscout/pull/2044) - New network selector. +- [#2091](https://github.com/blockscout/blockscout/pull/2091) - Added "Question" modal. +- [#1963](https://github.com/blockscout/blockscout/pull/1963), [#1959](https://github.com/blockscout/blockscout/pull/1959), [#1948](https://github.com/blockscout/blockscout/pull/1948), [#1936](https://github.com/blockscout/blockscout/pull/1936), [#1925](https://github.com/blockscout/blockscout/pull/1925), [#1922](https://github.com/blockscout/blockscout/pull/1922), [#1903](https://github.com/blockscout/blockscout/pull/1903), [#1874](https://github.com/blockscout/blockscout/pull/1874), [#1895](https://github.com/blockscout/blockscout/pull/1895), [#2031](https://github.com/blockscout/blockscout/pull/2031), [#2073](https://github.com/blockscout/blockscout/pull/2073), [#2074](https://github.com/blockscout/blockscout/pull/2074), - added new themes and logos for poa, eth, rinkeby, goerli, ropsten, kovan, sokol, xdai, etc, rsk and default theme +- [#1726](https://github.com/blockscout/blockscout/pull/2071) - Updated styles for the new smart contract page. +- [#2081](https://github.com/blockscout/blockscout/pull/2081) - Tooltip for 'more' button, explorers logos added +- [#2010](https://github.com/blockscout/blockscout/pull/2010) - added "block not found" and "tx not found pages" +- [#1928](https://github.com/blockscout/blockscout/pull/1928) - pagination styles were updated +- [#1940](https://github.com/blockscout/blockscout/pull/1940) - qr modal button and background issue +- [#1907](https://github.com/blockscout/blockscout/pull/1907) - dropdown color bug fix (lukso theme) and tooltip color bug fix +- [#1859](https://github.com/blockscout/blockscout/pull/1859) - feat: show raw transaction traces +- [#1941](https://github.com/blockscout/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc +- [#1957](https://github.com/blockscout/blockscout/pull/1957) - Calculate stakes ratio before insert pools +- [#1956](https://github.com/blockscout/blockscout/pull/1956) - add logs tab to address +- [#1952](https://github.com/blockscout/blockscout/pull/1952) - feat: exclude empty contracts by default +- [#1954](https://github.com/blockscout/blockscout/pull/1954) - feat: use creation init on self destruct +- [#2036](https://github.com/blockscout/blockscout/pull/2036) - New tables for staking pools and delegators +- [#1974](https://github.com/blockscout/blockscout/pull/1974) - feat: previous page button logic +- [#1999](https://github.com/blockscout/blockscout/pull/1999) - load data async on addresses page +- [#1807](https://github.com/blockscout/blockscout/pull/1807) - New theming capabilities. +- [#2040](https://github.com/blockscout/blockscout/pull/2040) - Verification links to other explorers for ETH +- [#2037](https://github.com/blockscout/blockscout/pull/2037) - add address logs search functionality +- [#2012](https://github.com/blockscout/blockscout/pull/2012) - make all pages pagination async +- [#2064](https://github.com/blockscout/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups +- [#2100](https://github.com/blockscout/blockscout/pull/2100) - feat: eth_get_balance rpc endpoint + +### Fixes + +- [#2228](https://github.com/blockscout/blockscout/pull/2228) - favorites duplication issues, active radio issue +- [#2207](https://github.com/blockscout/blockscout/pull/2207) - new 'download csv' button design +- [#2206](https://github.com/blockscout/blockscout/pull/2206) - added styles for 'Download All Transactions as CSV' button +- [#2099](https://github.com/blockscout/blockscout/pull/2099) - logs search input width +- [#2098](https://github.com/blockscout/blockscout/pull/2098) - nav dropdown issue, logo size issue +- [#2082](https://github.com/blockscout/blockscout/pull/2082) - dropdown styles, tooltip gap fix, 404 page added +- [#2077](https://github.com/blockscout/blockscout/pull/2077) - ui issues +- [#2072](https://github.com/blockscout/blockscout/pull/2072) - Fixed checkmarks not showing correctly in tabs. +- [#2066](https://github.com/blockscout/blockscout/pull/2066) - fixed length of logs search input +- [#2056](https://github.com/blockscout/blockscout/pull/2056) - log search form styles added +- [#2043](https://github.com/blockscout/blockscout/pull/2043) - Fixed modal dialog width for 'verify other explorers' +- [#2025](https://github.com/blockscout/blockscout/pull/2025) - Added a new color to display transactions' errors. +- [#2033](https://github.com/blockscout/blockscout/pull/2033) - Header nav. dropdown active element color issue +- [#2019](https://github.com/blockscout/blockscout/pull/2019) - Fixed the missing tx hashes. +- [#2020](https://github.com/blockscout/blockscout/pull/2020) - Fixed a bug triggered when a second click to a selected tab caused the other tabs to hide. +- [#1944](https://github.com/blockscout/blockscout/pull/1944) - fixed styles for token's dropdown. +- [#1926](https://github.com/blockscout/blockscout/pull/1926) - status label alignment +- [#1849](https://github.com/blockscout/blockscout/pull/1849) - Improve chains menu +- [#1868](https://github.com/blockscout/blockscout/pull/1868) - fix: logs list endpoint performance +- [#1822](https://github.com/blockscout/blockscout/pull/1822) - Fix style breaks in decompiled contract code view +- [#1885](https://github.com/blockscout/blockscout/pull/1885) - highlight reserved words in decompiled code +- [#1896](https://github.com/blockscout/blockscout/pull/1896) - re-query tokens in top nav autocomplete +- [#1905](https://github.com/blockscout/blockscout/pull/1905) - fix reorgs, uncles pagination +- [#1904](https://github.com/blockscout/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type +- [#1915](https://github.com/blockscout/blockscout/pull/1915) - fallback to 2 latest evm versions +- [#1937](https://github.com/blockscout/blockscout/pull/1937) - Check the presence of overlap[i] object before retrieving properties from it +- [#1960](https://github.com/blockscout/blockscout/pull/1960) - do not remove bold text in decompiled contacts +- [#1966](https://github.com/blockscout/blockscout/pull/1966) - fix: add fields for contract filter performance +- [#2017](https://github.com/blockscout/blockscout/pull/2017) - fix: fix to/from filters on tx list pages +- [#2008](https://github.com/blockscout/blockscout/pull/2008) - add new function clause for xDai network beneficiaries +- [#2009](https://github.com/blockscout/blockscout/pull/2009) - addresses page improvements +- [#2027](https://github.com/blockscout/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions +- [#2062](https://github.com/blockscout/blockscout/pull/2062) - fix: uniq by hash, instead of transaction +- [#2052](https://github.com/blockscout/blockscout/pull/2052) - allow bytes32 for name and symbol +- [#2047](https://github.com/blockscout/blockscout/pull/2047) - fix: show creating internal transactions +- [#2014](https://github.com/blockscout/blockscout/pull/2014) - fix: use better queries for listLogs endpoint +- [#2027](https://github.com/blockscout/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions +- [#2070](https://github.com/blockscout/blockscout/pull/2070) - reduce `max_concurrency` of `BlocksTransactionsMismatch` fetcher +- [#2083](https://github.com/blockscout/blockscout/pull/2083) - allow total_difficulty to be nil +- [#2086](https://github.com/blockscout/blockscout/pull/2086) - fix geth's staticcall without output + +### Chore + +- [#1900](https://github.com/blockscout/blockscout/pull/1900) - SUPPORTED_CHAINS ENV var +- [#1958](https://github.com/blockscout/blockscout/pull/1958) - Default value for release link env var +- [#1964](https://github.com/blockscout/blockscout/pull/1964) - ALLOWED_EVM_VERSIONS env var +- [#1975](https://github.com/blockscout/blockscout/pull/1975) - add log index to transaction view +- [#1988](https://github.com/blockscout/blockscout/pull/1988) - Fix wrong parity tasks names in Circle CI +- [#2000](https://github.com/blockscout/blockscout/pull/2000) - docker/Makefile: always set a container name +- [#2018](https://github.com/blockscout/blockscout/pull/2018) - Use PORT env variable in dev config +- [#2055](https://github.com/blockscout/blockscout/pull/2055) - Increase timeout for geth indexers +- [#2069](https://github.com/blockscout/blockscout/pull/2069) - Docsify integration: static docs page generation + +## 1.3.15-beta + +### Features + +- [#1857](https://github.com/blockscout/blockscout/pull/1857) - Re-implement Geth JS internal transaction tracer in Elixir +- [#1989](https://github.com/blockscout/blockscout/pull/1989) - fix: consolidate address w/ balance one at a time +- [#2002](https://github.com/blockscout/blockscout/pull/2002) - Get estimated count of blocks when cache is empty + +### Fixes + +- [#1869](https://github.com/blockscout/blockscout/pull/1869) - Fix output and gas extraction in JS tracer for Geth +- [#1992](https://github.com/blockscout/blockscout/pull/1992) - fix: support https for wobserver polling +- [#2027](https://github.com/blockscout/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions + +## 1.3.14-beta + +- [#1812](https://github.com/blockscout/blockscout/pull/1812) - add pagination to addresses page +- [#1920](https://github.com/blockscout/blockscout/pull/1920) - fix: remove source code fields from list endpoint +- [#1876](https://github.com/blockscout/blockscout/pull/1876) - async calculate a count of blocks + +### Fixes + +- [#1917](https://github.com/blockscout/blockscout/pull/1917) - Force block refetch if transaction is re-collated in a different block + +### Chore + +- [#1892](https://github.com/blockscout/blockscout/pull/1892) - Remove temporary worker modules + +## 1.3.13-beta + +### Features + +- [#1933](https://github.com/blockscout/blockscout/pull/1933) - add eth_BlockNumber json rpc method + +### Fixes + +- [#1875](https://github.com/blockscout/blockscout/pull/1875) - fix: resolve false positive constructor arguments +- [#1881](https://github.com/blockscout/blockscout/pull/1881) - fix: store solc versions locally for performance +- [#1898](https://github.com/blockscout/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments + +## 1.3.12-beta + +Reverting of synchronous block counter, implemented in #1848 + +## 1.3.11-beta + +### Features + +- [#1815](https://github.com/blockscout/blockscout/pull/1815) - Be able to search without prefix "0x" +- [#1813](https://github.com/blockscout/blockscout/pull/1813) - Add total blocks counter to the main page +- [#1806](https://github.com/blockscout/blockscout/pull/1806) - Verify contracts with a post request +- [#1848](https://github.com/blockscout/blockscout/pull/1848) - Add cache for block counter + +### Fixes + +- [#1829](https://github.com/blockscout/blockscout/pull/1829) - Handle nil quantities in block decoding routine +- [#1830](https://github.com/blockscout/blockscout/pull/1830) - Make block size field nullable +- [#1840](https://github.com/blockscout/blockscout/pull/1840) - Handle case when total supply is nil +- [#1838](https://github.com/blockscout/blockscout/pull/1838) - Block counter calculates only consensus blocks + +### Chore + +- [#1814](https://github.com/blockscout/blockscout/pull/1814) - Clear build artifacts script +- [#1837](https://github.com/blockscout/blockscout/pull/1837) - Add -f flag to clear_build.sh script delete static folder + +## 1.3.10-beta + +### Features + +- [#1739](https://github.com/blockscout/blockscout/pull/1739) - highlight decompiled source code +- [#1696](https://github.com/blockscout/blockscout/pull/1696) - full-text search by tokens +- [#1742](https://github.com/blockscout/blockscout/pull/1742) - Support RSK +- [#1777](https://github.com/blockscout/blockscout/pull/1777) - show ERC-20 token transfer info on transaction page +- [#1770](https://github.com/blockscout/blockscout/pull/1770) - set a websocket keepalive from config +- [#1789](https://github.com/blockscout/blockscout/pull/1789) - add ERC-721 info to transaction overview page +- [#1801](https://github.com/blockscout/blockscout/pull/1801) - Staking pools fetching + +### Fixes + +- [#1724](https://github.com/blockscout/blockscout/pull/1724) - Remove internal tx and token balance fetching from realtime fetcher +- [#1727](https://github.com/blockscout/blockscout/pull/1727) - add logs pagination in rpc api +- [#1740](https://github.com/blockscout/blockscout/pull/1740) - fix empty block time +- [#1743](https://github.com/blockscout/blockscout/pull/1743) - sort decompiled smart contracts in lexicographical order +- [#1756](https://github.com/blockscout/blockscout/pull/1756) - add today's token balance from the previous value +- [#1769](https://github.com/blockscout/blockscout/pull/1769) - add timestamp to block overview +- [#1768](https://github.com/blockscout/blockscout/pull/1768) - fix first block parameter +- [#1778](https://github.com/blockscout/blockscout/pull/1778) - Make websocket optional for realtime fetcher +- [#1790](https://github.com/blockscout/blockscout/pull/1790) - fix constructor arguments verification +- [#1793](https://github.com/blockscout/blockscout/pull/1793) - fix top nav autocomplete +- [#1795](https://github.com/blockscout/blockscout/pull/1795) - fix line numbers for decompiled contracts +- [#1803](https://github.com/blockscout/blockscout/pull/1803) - use coinmarketcap for total_supply by default +- [#1802](https://github.com/blockscout/blockscout/pull/1802) - make coinmarketcap's number of pages configurable +- [#1799](https://github.com/blockscout/blockscout/pull/1799) - Use eth_getUncleByBlockHashAndIndex for uncle block fetching +- [#1531](https://github.com/blockscout/blockscout/pull/1531) - docker: fix dockerFile for secp256k1 building +- [#1835](https://github.com/blockscout/blockscout/pull/1835) - fix: ignore `pong` messages without error + +### Chore + +- [#1804](https://github.com/blockscout/blockscout/pull/1804) - (Chore) Divide chains by Mainnet/Testnet in menu +- [#1783](https://github.com/blockscout/blockscout/pull/1783) - Update README with the chains that use Blockscout +- [#1780](https://github.com/blockscout/blockscout/pull/1780) - Update link to the Github repo in the footer +- [#1757](https://github.com/blockscout/blockscout/pull/1757) - Change twitter acc link to official Blockscout acc twitter +- [#1749](https://github.com/blockscout/blockscout/pull/1749) - Replace the link in the footer with the official POA announcements tg channel link +- [#1718](https://github.com/blockscout/blockscout/pull/1718) - Flatten indexer module hierarchy and supervisor tree +- [#1753](https://github.com/blockscout/blockscout/pull/1753) - Add a check mark to decompiled contract tab +- [#1744](https://github.com/blockscout/blockscout/pull/1744) - remove `0x0..0` from tests +- [#1763](https://github.com/blockscout/blockscout/pull/1763) - Describe indexer structure and list existing fetchers +- [#1800](https://github.com/blockscout/blockscout/pull/1800) - Disable lazy logging check in Credo + +## 1.3.9-beta + +### Features + +- [#1662](https://github.com/blockscout/blockscout/pull/1662) - allow specifying number of optimization runs +- [#1654](https://github.com/blockscout/blockscout/pull/1654) - add decompiled code tab +- [#1661](https://github.com/blockscout/blockscout/pull/1661) - try to compile smart contract with the latest evm version +- [#1665](https://github.com/blockscout/blockscout/pull/1665) - Add contract verification RPC endpoint. +- [#1706](https://github.com/blockscout/blockscout/pull/1706) - allow setting update interval for addresses with b + +### Fixes + +- [#1669](https://github.com/blockscout/blockscout/pull/1669) - do not fail if multiple matching tokens are found +- [#1691](https://github.com/blockscout/blockscout/pull/1691) - decrease token metadata update interval +- [#1688](https://github.com/blockscout/blockscout/pull/1688) - do not fail if failure reason is atom +- [#1692](https://github.com/blockscout/blockscout/pull/1692) - exclude decompiled smart contract from encoding +- [#1684](https://github.com/blockscout/blockscout/pull/1684) - Discard child block with parent_hash not matching hash of imported block +- [#1699](https://github.com/blockscout/blockscout/pull/1699) - use seconds as transaction cache period measure +- [#1697](https://github.com/blockscout/blockscout/pull/1697) - fix failing in rpc if balance is empty +- [#1711](https://github.com/blockscout/blockscout/pull/1711) - rescue failing repo in block number cache update +- [#1712](https://github.com/blockscout/blockscout/pull/1712) - do not set contract code from transaction input +- [#1714](https://github.com/blockscout/blockscout/pull/1714) - fix average block time calculation + +### Chore + +- [#1693](https://github.com/blockscout/blockscout/pull/1693) - Add a checklist to the PR template + +## 1.3.8-beta + +### Features + +- [#1611](https://github.com/blockscout/blockscout/pull/1611) - allow setting the first indexing block +- [#1596](https://github.com/blockscout/blockscout/pull/1596) - add endpoint to create decompiled contracts +- [#1634](https://github.com/blockscout/blockscout/pull/1634) - add transaction count cache + +### Fixes + +- [#1630](https://github.com/blockscout/blockscout/pull/1630) - (Fix) color for release link in the footer +- [#1621](https://github.com/blockscout/blockscout/pull/1621) - Modify query to fetch failed contract creations +- [#1614](https://github.com/blockscout/blockscout/pull/1614) - Do not fetch burn address token balance +- [#1639](https://github.com/blockscout/blockscout/pull/1614) - Optimize token holder count updates when importing address current balances +- [#1643](https://github.com/blockscout/blockscout/pull/1643) - Set internal_transactions_indexed_at for empty blocks +- [#1647](https://github.com/blockscout/blockscout/pull/1647) - Fix typo in view +- [#1650](https://github.com/blockscout/blockscout/pull/1650) - Add petersburg evm version to smart contract verifier +- [#1657](https://github.com/blockscout/blockscout/pull/1657) - Force consensus loss for parent block if its hash mismatches parent_hash + +### Chore + +## 1.3.7-beta + +### Features + +### Fixes + +- [#1615](https://github.com/blockscout/blockscout/pull/1615) - Add more logging to code fixer process +- [#1613](https://github.com/blockscout/blockscout/pull/1613) - Fix USD fee value +- [#1577](https://github.com/blockscout/blockscout/pull/1577) - Add process to fix contract with code +- [#1583](https://github.com/blockscout/blockscout/pull/1583) - Chunk JSON-RPC batches in case connection times out + +### Chore + +- [#1610](https://github.com/blockscout/blockscout/pull/1610) - Add PIRL to Readme + +## 1.3.6-beta + +### Features + +- [#1589](https://github.com/blockscout/blockscout/pull/1589) - RPC endpoint to list addresses +- [#1567](https://github.com/blockscout/blockscout/pull/1567) - Allow setting different configuration just for realtime fetcher +- [#1562](https://github.com/blockscout/blockscout/pull/1562) - Add incoming transactions count to contract view +- [#1608](https://github.com/blockscout/blockscout/pull/1608) - Add listcontracts RPC Endpoint + +### Fixes + +- [#1595](https://github.com/blockscout/blockscout/pull/1595) - Reduce block_rewards in the catchup fetcher +- [#1590](https://github.com/blockscout/blockscout/pull/1590) - Added guard for fetching blocks with invalid number +- [#1588](https://github.com/blockscout/blockscout/pull/1588) - Fix usd value on address page +- [#1586](https://github.com/blockscout/blockscout/pull/1586) - Exact timestamp display +- [#1581](https://github.com/blockscout/blockscout/pull/1581) - Consider `creates` param when fetching transactions +- [#1559](https://github.com/blockscout/blockscout/pull/1559) - Change v column type for Transactions table + +### Chore + +- [#1579](https://github.com/blockscout/blockscout/pull/1579) - Add SpringChain to the list of Additional Chains Utilizing BlockScout +- [#1578](https://github.com/blockscout/blockscout/pull/1578) - Refine contributing procedure +- [#1572](https://github.com/blockscout/blockscout/pull/1572) - Add option to disable block rewards in indexer config + +## 1.3.5-beta + +### Features + +- [#1560](https://github.com/blockscout/blockscout/pull/1560) - Allow executing smart contract functions in arbitrarily sized batches +- [#1543](https://github.com/blockscout/blockscout/pull/1543) - Use trace_replayBlockTransactions API for faster tracing +- [#1558](https://github.com/blockscout/blockscout/pull/1558) - Allow searching by token symbol +- [#1551](https://github.com/blockscout/blockscout/pull/1551) Exact date and time for Transaction details page +- [#1547](https://github.com/blockscout/blockscout/pull/1547) - Verify smart contracts with evm versions +- [#1540](https://github.com/blockscout/blockscout/pull/1540) - Fetch ERC721 token balances if sender is '0x0..0' +- [#1539](https://github.com/blockscout/blockscout/pull/1539) - Add the link to release in the footer +- [#1519](https://github.com/blockscout/blockscout/pull/1519) - Create contract methods +- [#1496](https://github.com/blockscout/blockscout/pull/1496) - Remove dropped/replaced transactions in pending transactions list +- [#1492](https://github.com/blockscout/blockscout/pull/1492) - Disable usd value for an empty exchange rate +- [#1466](https://github.com/blockscout/blockscout/pull/1466) - Decoding candidates for unverified contracts + +### Fixes + +- [#1545](https://github.com/blockscout/blockscout/pull/1545) - Fix scheduling of latest block polling in Realtime Fetcher +- [#1554](https://github.com/blockscout/blockscout/pull/1554) - Encode integer parameters when calling smart contract functions +- [#1537](https://github.com/blockscout/blockscout/pull/1537) - Fix test that depended on date +- [#1534](https://github.com/blockscout/blockscout/pull/1534) - Render a nicer error when creator cannot be determined +- [#1527](https://github.com/blockscout/blockscout/pull/1527) - Add index to value_fetched_at +- [#1518](https://github.com/blockscout/blockscout/pull/1518) - Select only distinct failed transactions +- [#1516](https://github.com/blockscout/blockscout/pull/1516) - Fix coin balance params reducer for pending transaction +- [#1511](https://github.com/blockscout/blockscout/pull/1511) - Set correct log level for production +- [#1510](https://github.com/blockscout/blockscout/pull/1510) - Fix test that fails every 1st day of the month +- [#1509](https://github.com/blockscout/blockscout/pull/1509) - Add index to blocks' consensus +- [#1508](https://github.com/blockscout/blockscout/pull/1508) - Remove duplicated indexes +- [#1505](https://github.com/blockscout/blockscout/pull/1505) - Use https instead of ssh for absinthe libs +- [#1501](https://github.com/blockscout/blockscout/pull/1501) - Constructor_arguments must be type `text` +- [#1498](https://github.com/blockscout/blockscout/pull/1498) - Add index for created_contract_address_hash in transactions +- [#1493](https://github.com/blockscout/blockscout/pull/1493) - Do not do work in process initialization +- [#1487](https://github.com/blockscout/blockscout/pull/1487) - Limit geth sync to 128 blocks +- [#1484](https://github.com/blockscout/blockscout/pull/1484) - Allow decoding input as utf-8 +- [#1479](https://github.com/blockscout/blockscout/pull/1479) - Remove smoothing from coin balance chart + +### Chore + +- [https://github.com/blockscout/blockscout/pull/1532](https://github.com/blockscout/blockscout/pull/1532) - Upgrade elixir to 1.8.1 +- [https://github.com/blockscout/blockscout/pull/1553](https://github.com/blockscout/blockscout/pull/1553) - Dockerfile: remove 1.7.1 version pin FROM bitwalker/alpine-elixir-phoenix +- [https://github.com/blockscout/blockscout/pull/1465](https://github.com/blockscout/blockscout/pull/1465) - Resolve lodash security alert diff --git a/sz-poc-offsite-2025/blockscout/CODE_OF_CONDUCT.md b/sz-poc-offsite-2025/blockscout/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..7507d62 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/CODE_OF_CONDUCT.md @@ -0,0 +1,73 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, gender identity and expression, level of experience, +education, socio-economic status, nationality, personal appearance, race, +religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at andrew@poa.network. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/sz-poc-offsite-2025/blockscout/CONTRIBUTING.md b/sz-poc-offsite-2025/blockscout/CONTRIBUTING.md new file mode 100644 index 0000000..b16fd67 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/CONTRIBUTING.md @@ -0,0 +1,259 @@ +# Contribution Guidelines: What We Are Looking For + +We welcome contributions that enhance the project and improve the overall quality of our codebase. While we appreciate the effort that goes into making contributions, we kindly ask that contributors focus on the following types of changes: +- Feature Enhancements: Substantial improvements or new features that add significant value to the project. +- Bug Fixes: Fixes for known bugs or issues that impact functionality. +- Documentation Improvements: Comprehensive updates to documentation that clarify usage, installation, or project structure. +- Performance Improvements: Changes that enhance the performance or efficiency of the application. + +# Contributing + +1. Fork it ( ) +2. Create your feature branch (`git checkout -b my-new-feature`) +3. Write tests that cover your work +4. Commit your changes (`git commit -am 'Add some feature'`) +5. Push to the branch (`git push origin my-new-feature`) +6. Create a new Pull Request. The title of Pull Request should follow [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and should start with `feat:`, `fix:`, `chore:`, `doc:`, `perf:`, `refactor:` prefix. + +## General + +* Commits should be one logical change that still allows all tests to pass. Prefer smaller commits if there could be two levels of logic grouping. The goal is to allow contributors in the future (including your own future self) to determine your reasoning for making changes and to allow them to cherry-pick, patch or port those changes in isolation to other branches or forks. +* If during your PR you reveal a pre-existing bug: + 1. Try to isolate the bug and fix it on an independent branch and PR it first. + 2. Try to fix the bug in a separate commit from other changes: + 1. Commit the code in the broken state that revealed the bug originally + 2. Commit the fix for the bug. + 3. Continue original PR work. + +## Enhancements + +Enhancements cover all changes that make users lives better: + +* [feature requests filed as issues](https://github.com/blockscout/blockscout/labels/enhancement) that impact end-user [contributors](https://github.com/blockscout/blockscout/labels/contributor) and [developers](https://github.com/blockscout/blockscout/labels/developer) +* changes to the [architecture](https://github.com/blockscout/blockscout/labels/architecture) that make it easier for contributors (in the GitHub sense), dev-ops, and deployers to maintain and run blockscout + +## Bug Fixes + +For bug fixes, whenever possible, there should be at least 2 commits: + +1. A regression test commit that contains tests that demonstrate the bug and show as failing. +2. The bug fix commit that shows the regression test now passing. + +This format ensures that we can run the test to reproduce the original bug without depending on the new code in the fix, which could lead to the test falsely passing. + +## Incompatible Changes + +Incompatible changes can arise as a side-effect of either Enhancements or Bug Fixes. During Enhancements, incompatible changes can occur because, as an example, in order to support showing end-users new data, the database schema may need to be changed and the index rebuilt from scratch. During bug fixes, incompatible changes can occur because in order to fix a bug, the schema had to change, or how certain internal APIs are called changed. + +* Incompatible changes should be called out explicitly, with any steps the various user roles need to do to upgrade. +* If a schema change occurs that requires a re-index add the following to the Pull Request description: + + ```markdown + **NOTE**: A database reset and re-index is required + ``` + +## Pull Request + +There is a [PULL_REQUEST_TEMPLATE.md](PULL_REQUEST_TEMPLATE.md) for this repository, but since it can't fill in the title for you, please follow the following steps when opening a Pull Request before filling in the template: + +* [ ] Title + * [ ] Prefix labels if you don't have permissions to set labels in the GitHub interface. + * (bug) for [bug](https://github.com/blockscout/blockscout/labels/bug) fixes + * (enhancement) for [enhancement](https://github.com/blockscout/blockscout/labels/enhancement)s + * (incompatible changes) for [incompatible changes](https://github.com/blockscout/blockscout/labels/incompatible%20changes), such a refactor that removes functionality, changes arguments, or makes something required that wasn't previously. + * [ ] Single sentence summary of change + * What was fixed for bugs + * What was added for enhancements + * What was changed for incompatible changes + +See [#255](https://github.com/blockscout/blockscout/pull/255) as an example PR that uses GitHub keywords and a Changelog to explain multiple changes. + +## Basic Naming Convention + +When contributing to the codebase, please adhere to the following naming conventions to ensure clarity and consistency: + +- Use full names for entities. Avoid abbreviations or shorthand. + - Instead of "tx" or "txn", use "transaction". + - Instead of "txs", use "transactions". + - Instead of "tx_hash" or "txn_hash", use "transaction_hash". + - Instead of "block_num", use "block_number". +- Ensure that variable names are descriptive and convey the purpose or content clearly. +- Consistent naming helps in maintaining readability and understanding of the code, especially for new contributors. + +By following these conventions, we can maintain a clean and understandable codebase. + +### API V2 Naming Convention + +When contributing to the API v2, please adhere to the following naming conventions for response fields to ensure clarity and consistency: + +- The block number should be returned as a number in the property with the name which ends with `block_number`. +- All hashes (transaction, block address etc.) should be returned as a hex string in the property which ends with `_hash`. +- Property name for aggregations like counts and sums should contain plural form of entity and `_count`, `_sum` suffix respecively, e.g. `transactions_count`, `blocks_count`, `withdrawals_sum`. +- All fields that contain the "index" suffix should be returned as numbers. + +## Environment Configuration Best Practices + +### Runtime vs. Compile-time Configuration + +We strongly favor **runtime configuration** over compile-time configuration +whenever possible. This approach: + +- Reduces the number of Docker images needed +- Increases deployment flexibility +- Simplifies maintenance and testing + +When **adding** new configuration options, chain types, or **refactoring** +existing ones, please follow the decision tree below to determine the +appropriate approach: + +```mermaid +flowchart TD + A[Add/Modify Configuration Option or Chain Type] --> B{Is it feature-specific behavior of a function?} + B -->|Yes| C[Use RuntimeEnvHelper or Application.get_env/3 and pattern matching] + B -->|No| D{Does it need new database tables?} + D -->|Yes| E[Create new Ecto.Repo and handle it at runtime in config_helper.ex] + D -->|No| F{Is it an API endpoint?} + F -->|Yes| G[Use chain_scope macro or CheckFeature plug] + F -->|No| H{Does it modify existing database schema?} + H -->|Yes| I[Use Compile-time configuration] + H -->|No| J[Contact us to discuss this case further] + I -->|Future Work| O[Refactor toward Runtime configuration] +``` + +#### Use runtime configuration and pattern matching + +Anti-pattern: + +```elixir +# AVOID THIS +use Utils.CompileTimeEnvHelper, + chain_type: [:explorer, :chain_type] + +if @chain_type == :optimism do + def foo, do: :bar +else + def foo, do: :baz +end +``` + +Better approach: + +```elixir +# DO THIS INSTEAD +use Utils.RuntimeEnvHelper, + chain_type: [:explorer, :chain_type] + +def foo, do: chain_type() |> do_foo() + +defp do_foo(:optimism), do: :bar +defp do_foo(_), do: :baz +``` + +#### New database tables + +If your feature or chain-specific functionality requires new database tables: + +1. Define a new repository module in `apps/explorer/lib/explorer/repo.ex`. +2. Add the repository to `config/config_helper.exs` in the `repos/0` function. +3. Include a runtime check to load this repo conditionally: + +```elixir +# In config_helper.ex +ext_repos = [ + {parse_bool_env_var("MY_FEATURE_ENABLED"), Explorer.Repo.MyFeature}, + # other feature repos... +] +|> Enum.filter(&elem(&1, 0)) +|> Enum.map(&elem(&1, 1)) +``` + +This approach ensures migrations are automatically detected and applied at +runtime without requiring recompilation. + +#### API endpoints + +For feature-specific or chain-specific API endpoints, use one of the following +runtime approaches: + +1. **For chain-specific routes**, use the `chain_scope` macro in your router: + +```elixir +scope "/v2", as: :api_v2 do + chain_scope :polygon_zkevm do + get("/zkevm-batch/:batch_number", V2.TransactionController, :polygon_zkevm_batch) + end +end +``` + +2. **For feature-toggle endpoints**, use `CheckFeature` plug in pipelines: + +```elixir +pipeline :my_feature do + plug(BlockScoutWeb.Plug.CheckFeature, feature_check: &my_feature_enabled?/0) +end + +scope "/my-feature" do + pipe_through(:my_feature) + + get "/data", MyFeatureController, :index +end +``` + +Both approaches return appropriate 404 responses when the feature is disabled or +chain type doesn't match. + +#### Modifying existing database schema + +If your functionality requires modifying existing database schema structures +(adding columns to shared tables, changing constraints, etc.), you currently +must use compile-time configuration. This is the **only case** where +compile-time configuration is still recommended. + +```elixir +# Current approach for schema modifications +use Utils.CompileTimeEnvHelper, + chain_type: [:explorer, :chain_type] + +if @chain_type == :optimism do + # Schema modifications specific to Optimism +end +``` + +To prepare for future runtime refactoring, isolate these schema-specific changes +as much as possible. + +This limitation stems from Ecto schemas being defined at compile-time. When +different chain types need variations in shared tables (additional fields, +different constraints), these schema differences cannot be modified at runtime. +We're currently researching approaches for dynamic schema adjustment based on +runtime configuration. + +For reference on which chain types still require compile-time configuration, see +the [Chain-Specific Environment +Variables](https://docs.blockscout.com/setup/env-variables/backend-envs-chain-specific) +documentation. + +### Compile time Environment Variables + +Before using compile-time configuration, ensure you've exhausted all runtime +alternatives by following the decision tree above. If after careful +consideration you still need to work with compile-time environment variables, +follow these guidelines: + +- Always use the `Utils.CompileTimeEnvHelper` module instead of direct + `Application.compile_env/2` calls: + +```elixir +# DO use this approach +use Utils.CompileTimeEnvHelper, + attribute_name: [:app, :test] + +# Access the value using the module attribute +@attribute_name + +# DON'T use this approach +Application.compile_env(:app, :test) # avoid direct compile_env calls +``` + +This approach provides faster compilation time and simplifies development and +maintenance. diff --git a/sz-poc-offsite-2025/blockscout/LICENSE b/sz-poc-offsite-2025/blockscout/LICENSE new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/sz-poc-offsite-2025/blockscout/PULL_REQUEST_TEMPLATE.md b/sz-poc-offsite-2025/blockscout/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..442777d --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,32 @@ +*[GitHub keywords to close any associated issues](https://blog.github.com/2013-05-14-closing-issues-via-pull-requests/)* + +## Motivation + +*Why we should merge these changes. If using GitHub keywords to close [issues](https://github.com/poanetwork/blockscout/issues), this is optional as the motivation can be read on the issue page.* + +## Changelog + +### Enhancements + +*Things you added that don't break anything. Regression tests for Bug Fixes count as Enhancements.* + +### Bug Fixes + +*Things you changed that fix bugs. If it fixes a bug, but in so doing adds a new requirement, removes code, or requires a database reset and reindex, the breaking part of the change should be added to Incompatible Changes below also.* + +### Incompatible Changes + +*Things you broke while doing Enhancements and Bug Fixes. Breaking changes include (1) adding new requirements and (2) removing code. Renaming counts as (2) because a rename is a removal followed by an add.* + +## Upgrading + +*If you have any Incompatible Changes in the above Changelog, outline how users of prior versions can upgrade once this PR lands or when reviewers are testing locally. A common upgrading step is "Database reset and re-index required".* + +## Checklist for your Pull Request (PR) + +- [ ] If I added new functionality, I added tests covering it. +- [ ] If I fixed a bug, I added a regression test to prevent the bug from silently reappearing again. +- [ ] I checked whether I should update the docs and did so by submitting a PR to [docs repository](https://github.com/blockscout/docs). +- [ ] If I added/changed/removed ENV var, I submitted a PR to [docs repository](https://github.com/blockscout/docs) to update the list of [env vars](https://github.com/blockscout/docs/blob/master/setup/env-variables/README.md) and I updated the version to `master` in the Version column. If I removed variable, I added it to [Deprecated ENV Variables](https://github.com/blockscout/docs/blob/master/setup/env-variables/deprecated-env-variables/README.md) page. After merging docs PR, changes will be reflected in these [pages](https://docs.blockscout.com/setup/env-variables). +- [ ] If I added new DB indices, I checked, that they are not redundant, with PGHero or other tools. +- [ ] If I added/removed chain type, I modified the Github CI matrix and PR labels accordingly. diff --git a/sz-poc-offsite-2025/blockscout/README.md b/sz-poc-offsite-2025/blockscout/README.md new file mode 100644 index 0000000..5ab52a8 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/README.md @@ -0,0 +1,51 @@ +

Blockscout

+

Blockchain Explorer for inspecting and analyzing EVM Chains.

+
+ +[![Blockscout](https://github.com/blockscout/blockscout/actions/workflows/config.yml/badge.svg)](https://github.com/blockscout/blockscout/actions) +[![Discord](https://dcbadge.vercel.app/api/server/blockscout?style=flat)](https://discord.gg/blockscout) + +
+ + +Blockscout provides a comprehensive, easy-to-use interface for users to view, confirm, and inspect transactions on EVM (Ethereum Virtual Machine) blockchains. This includes Ethereum Mainnet, Ethereum Classic, Optimism, Gnosis Chain and many other **Ethereum testnets, private networks, L2s and sidechains**. + +See our [project documentation](https://docs.blockscout.com/) for detailed information and setup instructions. + +For questions, comments and feature requests see the [discussions section](https://github.com/blockscout/blockscout/discussions) or via [Discord](https://discord.com/invite/blockscout). + +## About Blockscout + +Blockscout allows users to search transactions, view accounts and balances, verify and interact with smart contracts and view and interact with applications on the Ethereum network including many forks, sidechains, L2s and testnets. + +Blockscout is an open-source alternative to centralized, closed source block explorers such as Etherscan, Etherchain and others. As Ethereum sidechains and L2s continue to proliferate in both private and public settings, transparent, open-source tools are needed to analyze and validate all transactions. + +## Supported Projects + +Blockscout currently supports several hundred chains and rollups throughout the greater blockchain ecosystem. Ethereum, Cosmos, Polkadot, Avalanche, Near and many others include Blockscout integrations. A comprehensive list is available at [chains.blockscout.com](https://chains.blockscout.com). If your project is not listed, contact the team in [Discord](https://discord.com/invite/blockscout). + +## Getting Started + +See the [project documentation](https://docs.blockscout.com/) for instructions: + +- [Manual deployment](https://docs.blockscout.com/for-developers/deployment/manual-deployment-guide) +- [Docker-compose deployment](https://docs.blockscout.com/for-developers/deployment/docker-compose-deployment) +- [Kubernetes deployment](https://docs.blockscout.com/for-developers/deployment/kubernetes-deployment) +- [Manual deployment (backend + old UI)](https://docs.blockscout.com/for-developers/deployment/manual-old-ui) +- [Ansible deployment](https://docs.blockscout.com/for-developers/ansible-deployment) +- [ENV variables](https://docs.blockscout.com/setup/env-variables) +- [Configuration options](https://docs.blockscout.com/for-developers/configuration-options) + +## Acknowledgements + +We would like to thank the EthPrize foundation for their funding support. + +## Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution and pull request protocol. We expect contributors to follow our [code of conduct](CODE_OF_CONDUCT.md) when submitting code or comments. + +## License + +[![License: GPL v3.0](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) + +This project is licensed under the GNU General Public License v3.0. See the [LICENSE](LICENSE) file for details. diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/.sobelow-conf b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/.sobelow-conf new file mode 100644 index 0000000..45fc345 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/.sobelow-conf @@ -0,0 +1,15 @@ +[ + verbose: false, + private: true, + skip: true, + router: "lib/block_scout_web/router.ex", + exit: "low", + format: "compact", + ignore: ["Config.Headers", "Config.CSWH", "XSS.SendResp", "XSS.Raw"], + ignore_files: [ + "apps/block_scout_web/lib/block_scout_web/routers/smart_contracts_api_v2_router.ex", + "apps/block_scout_web/lib/block_scout_web/routers/tokens_api_v2_router.ex", + "apps/block_scout_web/lib/block_scout_web/routers/utils_api_v2_router.ex", + "apps/block_scout_web/lib/block_scout_web/routers/address_badges_v2_router.ex" + ] +] diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API blueprint.md b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API blueprint.md new file mode 100644 index 0000000..d473b19 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API blueprint.md @@ -0,0 +1,3278 @@ +FORMAT: 1A +HOST:http://blockscout.com/poa/core +# + + +# API Documentation + + +# Group BlockScoutWeb.Account.Api.V1.UserController +## BlockScoutWeb.Account.Api.V1.UserController [/api/account/v1/user/info] +### BlockScoutWeb.Account.Api.V1.UserController info [GET /api/account/v1/user/info] + + + + + ++ Request Get info about user +**GET**  `/api/account/v1/user/info` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjNkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTM3QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABHGQABG5hbWVtAAAAC1VzZXIgVGVzdDIzZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIzZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIzZAAMd2F0Y2hsaXN0X2lkYgAAARw.E0Sm_2oS5AyE0tua4lSouZRAcWS_F5ZcfGxLWSTUkXA; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2a5ilyuHABAAABjC + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "nickname": "test_user23", + "name": "User Test23", + "email": "test_user-37@blockscout.com", + "avatar": "https://example.com/avatar/test_user23" + } +### BlockScoutWeb.Account.Api.V1.UserController create_tag_address [POST /api/account/v1/user/tags/address] + + + + + ++ Request Add private address tag +**POST**  `/api/account/v1/user/tags/address` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "MyName", + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyN2QABWVtYWlsbQAAABt0ZXN0X3VzZXItMTdAYmxvY2tzY291dC5jb21kAAJpZGIAAAEMZAAEbmFtZW0AAAAKVXNlciBUZXN0N2QACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI3ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDdkAAx3YXRjaGxpc3RfaWRiAAABDA.nTbrGL1cYPUoZ-N2MiHq9YBaqutQsS6G_gJBJmjD_mE; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2Za89gG9wigAABTB + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "MyName", + "id": 66, + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b", + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x3E9AC8f16C92bc4F093357933B5BEFBF1E16987B" + } + } + +# Group BlockScoutWeb.Account.Api.V1.TagsController +## BlockScoutWeb.Account.Api.V1.TagsController [/api/account/v1/tags/address/0x3e9ac8f16c92bc4f093357933b5befbf1e16987b] +### BlockScoutWeb.Account.Api.V1.TagsController tags_address [GET /api/account/v1/tags/address/{address_hash}] + + + + ++ Parameters + + address_hash: `0x3e9ac8f16c92bc4f093357933b5befbf1e16987b` + address_hash: 0x3e9ac8f16c92bc4f093357933b5befbf1e16987b + + ++ Request Get tags for address +**GET**  `/api/account/v1/tags/address/0x3e9ac8f16c92bc4f093357933b5befbf1e16987b` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyN2QABWVtYWlsbQAAABt0ZXN0X3VzZXItMTdAYmxvY2tzY291dC5jb21kAAJpZGIAAAEMZAAEbmFtZW0AAAAKVXNlciBUZXN0N2QACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI3ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDdkAAx3YXRjaGxpc3RfaWRiAAABDA.nTbrGL1cYPUoZ-N2MiHq9YBaqutQsS6G_gJBJmjD_mE; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZcSwwK9wigAABMC + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "watchlist_names": [], + "personal_tags": [ + { + "label": "MyName", + "display_name": "MyName", + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b" + } + ], + "common_tags": [] + } + +# Group BlockScoutWeb.Account.Api.V1.UserController +## BlockScoutWeb.Account.Api.V1.UserController [/api/account/v1/user/tags/address/70] +### BlockScoutWeb.Account.Api.V1.UserController update_tag_address [PUT /api/account/v1/user/tags/address/{id}] + + + + ++ Parameters + + id: `70` + id: 70 + + ++ Request Edit private address tag +**PUT**  `/api/account/v1/user/tags/address/70` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "name3", + "address_hash": "0x000000000000000000000000000000000000007e" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTlkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTMxQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABGGQABG5hbWVtAAAAC1VzZXIgVGVzdDE5ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE5ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE5ZAAMd2F0Y2hsaXN0X2lkYgAAARg.gpllu6S6EuYQy2GBhhmdrwjWa7uNmRUMz8aoKGDaPQU; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aYSywZD3jIAAAQF + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "name3", + "id": 70, + "address_hash": "0x000000000000000000000000000000000000007e", + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007E" + } + } +### BlockScoutWeb.Account.Api.V1.UserController tags_address [GET /api/account/v1/user/tags/address] + + + + + ++ Request Get private addresses tags +**GET**  `/api/account/v1/user/tags/address` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMThkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTMwQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABF2QABG5hbWVtAAAAC1VzZXIgVGVzdDE4ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE4ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE4ZAAMd2F0Y2hsaXN0X2lkYgAAARc.MgpnF7n_gJEhkWphCunY7unXVQWz6NAKdXJtAlCtm-E; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aT84qhvvqoAABfh + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "name": "name2", + "id": 69, + "address_hash": "0x000000000000000000000000000000000000007c", + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007c" + } + }, + { + "name": "name1", + "id": 68, + "address_hash": "0x000000000000000000000000000000000000007b", + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007B" + } + }, + { + "name": "name0", + "id": 67, + "address_hash": "0x000000000000000000000000000000000000007a", + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007a" + } + } + ] +### BlockScoutWeb.Account.Api.V1.UserController delete_tag_address [DELETE /api/account/v1/user/tags/address/{id}] + + + + ++ Parameters + + id: `63` + id: 63 + + ++ Request Delete private address tag +**DELETE**  `/api/account/v1/user/tags/address/63` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNGQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTRAYmxvY2tzY291dC5jb21kAAJpZGIAAAEJZAAEbmFtZW0AAAAKVXNlciBUZXN0NGQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI0ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDRkAAx3YXRjaGxpc3RfaWRiAAABCQ.3f3SFCRJgY59jb-YfVwAjM-xZEMv78Z1X-yNR03pCOI; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2YwZcxcJlUgAABJh + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController create_tag_transaction [POST /api/account/v1/user/tags/transaction] + + + + + ++ Request Create private transaction tag +**POST**  `/api/account/v1/user/tags/transaction` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000006", + "name": "MyName" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTVkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI3QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABFGQABG5hbWVtAAAAC1VzZXIgVGVzdDE1ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE1ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE1ZAAMd2F0Y2hsaXN0X2lkYgAAARQ.y7cpDUrwXiGxhgdOS0V14Rsohk8wJHkv940fW0Mw1YQ; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aDXRGevcEwAABYh + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000006", + "name": "MyName", + "id": 61 + } + + ++ Request Error on try to create private transaction tag for tx does not exist +**POST**  `/api/account/v1/user/tags/transaction` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000005", + "name": "MyName" + } + ++ Response 422 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTVkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI3QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABFGQABG5hbWVtAAAAC1VzZXIgVGVzdDE1ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE1ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE1ZAAMd2F0Y2hsaXN0X2lkYgAAARQ.y7cpDUrwXiGxhgdOS0V14Rsohk8wJHkv940fW0Mw1YQ; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aCGof2vcEwAAAlk + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "errors": { + "tx_hash": [ + "Transaction does not exist" + ] + } + } + +# Group BlockScoutWeb.Account.Api.V1.TagsController +## BlockScoutWeb.Account.Api.V1.TagsController [/api/account/v1/tags/transaction/0x0000000000000000000000000000000000000000000000000000000000000006] +### BlockScoutWeb.Account.Api.V1.TagsController tags_transaction [GET /api/account/v1/tags/transaction/{transaction_hash}] + + + + ++ Parameters + + transaction_hash: `0x0000000000000000000000000000000000000000000000000000000000000006` + transaction_hash: 0x0000000000000000000000000000000000000000000000000000000000000006 + + ++ Request Get tags for transaction +**GET**  `/api/account/v1/tags/transaction/0x0000000000000000000000000000000000000000000000000000000000000006` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTVkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI3QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABFGQABG5hbWVtAAAAC1VzZXIgVGVzdDE1ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE1ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE1ZAAMd2F0Y2hsaXN0X2lkYgAAARQ.y7cpDUrwXiGxhgdOS0V14Rsohk8wJHkv940fW0Mw1YQ; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aEbojKvcEwAABZB + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "watchlist_names": [], + "personal_tx_tag": { + "label": "MyName" + }, + "personal_tags": [], + "common_tags": [] + } + +# Group BlockScoutWeb.Account.Api.V1.UserController +## BlockScoutWeb.Account.Api.V1.UserController [/api/account/v1/user/tags/transaction/57] +### BlockScoutWeb.Account.Api.V1.UserController update_tag_transaction [PUT /api/account/v1/user/tags/transaction/{id}] + + + + ++ Parameters + + id: `57` + id: 57 + + ++ Request Edit private transaction tag +**PUT**  `/api/account/v1/user/tags/transaction/57` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000001", + "name": "name1" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMWQABWVtYWlsbQAAABp0ZXN0X3VzZXItMUBibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQZkAARuYW1lbQAAAApVc2VyIFRlc3QxZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjFkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMWQADHdhdGNobGlzdF9pZGIAAAEG.K4xvLgb-ji7_yiP-B80J_ItCchTMzzYcgcN7ku9a4B8; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2XSUU7NY8y8AAAME + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000001", + "name": "name1", + "id": 57 + } +### BlockScoutWeb.Account.Api.V1.UserController tags_transaction [GET /api/account/v1/user/tags/transaction] + + + + + ++ Request Get private transactions tags +**GET**  `/api/account/v1/user/tags/transaction` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjJkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTM2QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABG2QABG5hbWVtAAAAC1VzZXIgVGVzdDIyZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIyZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIyZAAMd2F0Y2hsaXN0X2lkYgAAARs.O7Ha2Ze8DT1d2yaZbQEy9tZXE6OUDWyuh3yoyB2WNAU; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2a4GFi44x6sAABii + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000009", + "name": "name2", + "id": 64 + }, + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000008", + "name": "name1", + "id": 63 + }, + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000007", + "name": "name0", + "id": 62 + } + ] +### BlockScoutWeb.Account.Api.V1.UserController delete_tag_transaction [DELETE /api/account/v1/user/tags/transaction/{id}] + + + + ++ Parameters + + id: `58` + id: 58 + + ++ Request Delete private transaction tag +**DELETE**  `/api/account/v1/user/tags/transaction/58` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTRkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI2QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABE2QABG5hbWVtAAAAC1VzZXIgVGVzdDE0ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE0ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE0ZAAMd2F0Y2hsaXN0X2lkYgAAARM.XN0A5eUbCpZdpnhayHyU-YiQ4jm1-WjwYxvGD6JVCmg; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2Z9NDKXc1FcAABYC + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController create_watchlist [POST /api/account/v1/user/watchlist] + + + + + ++ Request Add address to watch list +**POST**  `/api/account/v1/user/watchlist` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "notification_settings": { + "native": { + "outcoming": true, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": true + } + }, + "notification_methods": { + "email": false + }, + "name": "test26", + "address_hash": "0x000000000000000000000000000000000000007f" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjBkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTMyQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABGWQABG5hbWVtAAAAC1VzZXIgVGVzdDIwZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIwZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIwZAAMd2F0Y2hsaXN0X2lkYgAAARk.vaGEF62HMb-YGk5JNfvq8xH6YkGmQaEEa1gpNIUmjJM; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2acnBbQAq20AAARF + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "notification_settings": { + "native": { + "outcoming": true, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": true + } + }, + "notification_methods": { + "email": false + }, + "name": "test26", + "id": 73, + "exchange_rate": null, + "address_hash": "0x000000000000000000000000000000000000007f", + "address_balance": null, + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007f" + } + } +### BlockScoutWeb.Account.Api.V1.UserController watchlist [GET /api/account/v1/user/watchlist] + + + + + ++ Request Get addresses from watchlists +**GET**  `/api/account/v1/user/watchlist` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjBkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTMyQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABGWQABG5hbWVtAAAAC1VzZXIgVGVzdDIwZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIwZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIwZAAMd2F0Y2hsaXN0X2lkYgAAARk.vaGEF62HMb-YGk5JNfvq8xH6YkGmQaEEa1gpNIUmjJM; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aiKtdsAq20AABhh + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "notification_settings": { + "native": { + "outcoming": true, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": false + }, + "ERC-20": { + "outcoming": false, + "incoming": false + } + }, + "notification_methods": { + "email": true + }, + "name": "test27", + "id": 74, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000080", + "address_balance": null, + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000080" + } + }, + { + "notification_settings": { + "native": { + "outcoming": true, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": true + } + }, + "notification_methods": { + "email": false + }, + "name": "test26", + "id": 73, + "exchange_rate": null, + "address_hash": "0x000000000000000000000000000000000000007f", + "address_balance": null, + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000007f" + } + } + ] +### BlockScoutWeb.Account.Api.V1.UserController delete_watchlist [DELETE /api/account/v1/user/watchlist/{id}] + + + + ++ Parameters + + id: `72` + id: 72 + + ++ Request Delete address from watchlist by id +**DELETE**  `/api/account/v1/user/watchlist/72` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTdkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI5QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABFmQABG5hbWVtAAAAC1VzZXIgVGVzdDE3ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE3ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE3ZAAMd2F0Y2hsaXN0X2lkYgAAARY.bngpdS3ELd9RFd1465ZhfhaitqcUi6xG4s0BoDGWoAw; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aNXuJ9GNz0AABch + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController update_watchlist [PUT /api/account/v1/user/watchlist/{id}] + + + + ++ Parameters + + id: `70` + id: 70 + + ++ Request Edit watchlist address +**PUT**  `/api/account/v1/user/watchlist/70` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": false + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test21", + "address_hash": "0x0000000000000000000000000000000000000064" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTBkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIxQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABD2QABG5hbWVtAAAAC1VzZXIgVGVzdDEwZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjEwZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDEwZAAMd2F0Y2hsaXN0X2lkYgAAAQ8.JqlZQRGTvi6UZy4cEjJW6UYnZgNo0LaoO3R4mxO_fFA; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2Zo1KOm2BRoAAAJl + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": false + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test21", + "id": 70, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000064", + "address_balance": null, + "address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000064" + } + } +### BlockScoutWeb.Account.Api.V1.UserController create_watchlist [POST /api/account/v1/user/watchlist] + + + + + ++ Request Example of error on creating watchlist address +**POST**  `/api/account/v1/user/watchlist` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": false + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test0", + "address_hash": "0x0000000000000000000000000000000000000001" + } + ++ Response 422 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMGQABWVtYWlsbQAAABp0ZXN0X3VzZXItMEBibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQVkAARuYW1lbQAAAApVc2VyIFRlc3QwZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjBkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMGQADHdhdGNobGlzdF9pZGIAAAEF.4CS6L7Ror_vIdEgjt8Mh9y2TJagC83VObHAGZ-ABOI4; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2W1ZceoPnWQAAATj + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "errors": { + "watchlist_id": [ + "Address already added to the watch list" + ] + } + } +### BlockScoutWeb.Account.Api.V1.UserController update_watchlist [PUT /api/account/v1/user/watchlist/{id}] + + + + ++ Parameters + + id: `69` + id: 69 + + ++ Request Example of error on editing watchlist address +**PUT**  `/api/account/v1/user/watchlist/69` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": false + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test0", + "address_hash": "0x0000000000000000000000000000000000000001" + } + ++ Response 422 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMGQABWVtYWlsbQAAABp0ZXN0X3VzZXItMEBibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQVkAARuYW1lbQAAAApVc2VyIFRlc3QwZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjBkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMGQADHdhdGNobGlzdF9pZGIAAAEF.4CS6L7Ror_vIdEgjt8Mh9y2TJagC83VObHAGZ-ABOI4; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2W6esdoPnWQAAAKE + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "errors": { + "watchlist_id": [ + "Address already added to the watch list" + ] + } + } +### BlockScoutWeb.Account.Api.V1.UserController create_api_key [POST /api/account/v1/user/api_keys] + + + + + ++ Request Add api key +**POST**  `/api/account/v1/user/api_keys` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTZkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI4QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABFWQABG5hbWVtAAAAC1VzZXIgVGVzdDE2ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE2ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE2ZAAMd2F0Y2hsaXN0X2lkYgAAARU.bIr9Nod33f3ivryxZfzUGzSN34H8R1h_oOPJvRdulDY; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aGwztUoK_8AAAnk + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "test", + "api_key": "5dcfeb7d-6a73-47ed-8001-130692ebdf30" + } + + ++ Request Example of error on creating api key +**POST**  `/api/account/v1/user/api_keys` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test" + } + ++ Response 422 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjRkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTM4QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABHWQABG5hbWVtAAAAC1VzZXIgVGVzdDI0ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjI0ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDI0ZAAMd2F0Y2hsaXN0X2lkYgAAAR0.K_0yxkRjZq43jcCKzlzgHFNjm7aB_BmvBzlTVbpDUYI; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2a-lcgwKyxIAAAuk + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "errors": { + "name": [ + "Max 3 keys per account" + ] + } + } +### BlockScoutWeb.Account.Api.V1.UserController api_keys [GET /api/account/v1/user/api_keys] + + + + + ++ Request Get api keys list +**GET**  `/api/account/v1/user/api_keys` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjRkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTM4QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABHWQABG5hbWVtAAAAC1VzZXIgVGVzdDI0ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjI0ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDI0ZAAMd2F0Y2hsaXN0X2lkYgAAAR0.K_0yxkRjZq43jcCKzlzgHFNjm7aB_BmvBzlTVbpDUYI; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2a-2qPMKyxIAABki + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "name": "test", + "api_key": "00c90b31-db68-4de5-8022-32b6d9bdfaf2" + }, + { + "name": "test", + "api_key": "936f1623-4cfb-4581-badf-ff82193cc55e" + }, + { + "name": "test", + "api_key": "8af19684-7d84-4fa5-bc5e-98391204fa21" + } + ] +### BlockScoutWeb.Account.Api.V1.UserController update_api_key [PUT /api/account/v1/user/api_keys/{api_key}] + + + + ++ Parameters + + api_key: `e6fcab8c-d092-415d-a64e-caeebdab7e0a` + api_key: e6fcab8c-d092-415d-a64e-caeebdab7e0a + + ++ Request Edit api key +**PUT**  `/api/account/v1/user/api_keys/e6fcab8c-d092-415d-a64e-caeebdab7e0a` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test_1" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTNkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI1QGJsb2Nrc2NvdXQuY29tZAACaWRiAAABEmQABG5hbWVtAAAAC1VzZXIgVGVzdDEzZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjEzZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDEzZAAMd2F0Y2hsaXN0X2lkYgAAARI.oCXF9HRta7QoX4kvCCJGwXim8h2PvKmQnL3qC-BrYT0; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZxOPw0OLVMAABTC + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "test_1", + "api_key": "e6fcab8c-d092-415d-a64e-caeebdab7e0a" + } +### BlockScoutWeb.Account.Api.V1.UserController delete_api_key [DELETE /api/account/v1/user/api_keys/{api_key}] + + + + ++ Parameters + + api_key: `ed840181-ee0a-49e7-931c-ed12c44c3c5c` + api_key: ed840181-ee0a-49e7-931c-ed12c44c3c5c + + ++ Request Delete api key +**DELETE**  `/api/account/v1/user/api_keys/ed840181-ee0a-49e7-931c-ed12c44c3c5c` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyOGQABWVtYWlsbQAAABt0ZXN0X3VzZXItMThAYmxvY2tzY291dC5jb21kAAJpZGIAAAENZAAEbmFtZW0AAAAKVXNlciBUZXN0OGQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI4ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDhkAAx3YXRjaGxpc3RfaWRiAAABDQ.N8IAT9JlprYQcjF97-2AwyvKRZ2pWrOhPA-piu_yjxY; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZeeHae-W7UAABPi + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController create_custom_abi [POST /api/account/v1/user/custom_abis] + + + + + ++ Request Add custom abi +**POST**  `/api/account/v1/user/custom_abis` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test3", + "contract_address_hash": "0x0000000000000000000000000000000000000049", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNWQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTVAYmxvY2tzY291dC5jb21kAAJpZGIAAAEKZAAEbmFtZW0AAAAKVXNlciBUZXN0NWQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI1ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDVkAAx3YXRjaGxpc3RfaWRiAAABCg.Ed2YB-WoqETtu1WlAOdX7KJi6sFIJ1SGIeS89Aie2pg; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2Y2Ja_DGUGwAAAWE + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "test3", + "id": 146, + "contract_address_hash": "0x0000000000000000000000000000000000000049", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000049" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } + + ++ Request Example of error on creating custom abi +**POST**  `/api/account/v1/user/custom_abis` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test19", + "contract_address_hash": "0x0000000000000000000000000000000000000059", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } + ++ Response 422 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNmQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTZAYmxvY2tzY291dC5jb21kAAJpZGIAAAELZAAEbmFtZW0AAAAKVXNlciBUZXN0NmQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI2ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDZkAAx3YXRjaGxpc3RfaWRiAAABCw.SNgNlsqLtHPQ2HgJTPlyNjbvKw2FlW_U6_cJXTD-ZE4; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZR-dhCywD0AABJC + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "errors": { + "name": [ + "Max 15 ABIs per account" + ] + } + } +### BlockScoutWeb.Account.Api.V1.UserController custom_abis [GET /api/account/v1/user/custom_abis] + + + + + ++ Request Get custom abis list +**GET**  `/api/account/v1/user/custom_abis` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNmQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTZAYmxvY2tzY291dC5jb21kAAJpZGIAAAELZAAEbmFtZW0AAAAKVXNlciBUZXN0NmQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI2ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDZkAAx3YXRjaGxpc3RfaWRiAAABCw.SNgNlsqLtHPQ2HgJTPlyNjbvKw2FlW_U6_cJXTD-ZE4; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZSytrGywD0AABJi + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "name": "test18", + "id": 161, + "contract_address_hash": "0x0000000000000000000000000000000000000058", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000058" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test17", + "id": 160, + "contract_address_hash": "0x0000000000000000000000000000000000000057", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000057" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test16", + "id": 159, + "contract_address_hash": "0x0000000000000000000000000000000000000056", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000056" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test15", + "id": 158, + "contract_address_hash": "0x0000000000000000000000000000000000000055", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000055" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test14", + "id": 157, + "contract_address_hash": "0x0000000000000000000000000000000000000054", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000054" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test13", + "id": 156, + "contract_address_hash": "0x0000000000000000000000000000000000000053", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000053" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test12", + "id": 155, + "contract_address_hash": "0x0000000000000000000000000000000000000052", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000052" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test11", + "id": 154, + "contract_address_hash": "0x0000000000000000000000000000000000000051", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000051" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test10", + "id": 153, + "contract_address_hash": "0x0000000000000000000000000000000000000050", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000050" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test9", + "id": 152, + "contract_address_hash": "0x000000000000000000000000000000000000004f", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004f" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test8", + "id": 151, + "contract_address_hash": "0x000000000000000000000000000000000000004e", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004e" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test7", + "id": 150, + "contract_address_hash": "0x000000000000000000000000000000000000004d", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004D" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test6", + "id": 149, + "contract_address_hash": "0x000000000000000000000000000000000000004c", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004C" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test5", + "id": 148, + "contract_address_hash": "0x000000000000000000000000000000000000004b", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004B" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test4", + "id": 147, + "contract_address_hash": "0x000000000000000000000000000000000000004a", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000004A" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } + ] +### BlockScoutWeb.Account.Api.V1.UserController update_custom_abi [PUT /api/account/v1/user/custom_abis/{id}] + + + + ++ Parameters + + id: `162` + id: 162 + + ++ Request Edit custom abi +**PUT**  `/api/account/v1/user/custom_abis/162` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "name": "test23", + "contract_address_hash": "0x0000000000000000000000000000000000000066", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTFkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIyQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABEGQABG5hbWVtAAAAC1VzZXIgVGVzdDExZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjExZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDExZAAMd2F0Y2hsaXN0X2lkYgAAARA.M0fGYF6uHlLOsjA-gLmGzzXuTxSr8hQVlDi3jIhAXX0; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2ZrqXJvdOdEAAAdE + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "name": "test23", + "id": 162, + "contract_address_hash": "0x0000000000000000000000000000000000000066", + "contract_address": { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": false, + "is_contract": true, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000066" + }, + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } +### BlockScoutWeb.Account.Api.V1.UserController delete_custom_abi [DELETE /api/account/v1/user/custom_abis/{id}] + + + + ++ Parameters + + id: `145` + id: 145 + + ++ Request Delete custom abi +**DELETE**  `/api/account/v1/user/custom_abis/145` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMmQABWVtYWlsbQAAABp0ZXN0X3VzZXItMkBibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQdkAARuYW1lbQAAAApVc2VyIFRlc3QyZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjJkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMmQADHdhdGNobGlzdF9pZGIAAAEH.xeXAG0XBVkoEw0SR5kJ04tyapR1tY5N9XTrN_nrO63c; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2XZv72akD4sAAAQk + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController create_public_tags_request [POST /api/account/v1/user/public_tags] + + + + + ++ Request Submit request to add a public tag +**POST**  `/api/account/v1/user/public_tags` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "website": "website11", + "tags": "Tag17", + "is_owner": false, + "full_name": "full name11", + "email": "test_user-24@blockscout.com", + "company": "company11", + "addresses": [ + "0x0000000000000000000000000000000000000067", + "0x0000000000000000000000000000000000000068", + "0x0000000000000000000000000000000000000069", + "0x000000000000000000000000000000000000006a", + "0x000000000000000000000000000000000000006b", + "0x000000000000000000000000000000000000006c", + "0x000000000000000000000000000000000000006d" + ], + "additional_comment": "additional_comment11" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTJkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIzQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABEWQABG5hbWVtAAAAC1VzZXIgVGVzdDEyZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjEyZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDEyZAAMd2F0Y2hsaXN0X2lkYgAAARE.NJjO7QbBKV5g6_hGxLxBb5wlGDmJMKp-bpgLhhrFjLM; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2Zt2e1-7YrQAABVh + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "website": "website11", + "tags": "Tag17", + "submission_date": "2022-12-03T16:55:29.441979Z", + "is_owner": false, + "id": 202, + "full_name": "full name11", + "email": "test_user-24@blockscout.com", + "company": "company11", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000067" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000068" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000069" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000006a" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000006b" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000006C" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000006D" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000067", + "0x0000000000000000000000000000000000000068", + "0x0000000000000000000000000000000000000069", + "0x000000000000000000000000000000000000006a", + "0x000000000000000000000000000000000000006b", + "0x000000000000000000000000000000000000006c", + "0x000000000000000000000000000000000000006d" + ], + "additional_comment": "additional_comment11" + } +### BlockScoutWeb.Account.Api.V1.UserController public_tags_requests [GET /api/account/v1/user/public_tags] + + + + + ++ Request Get list of requests to add a public tag +**GET**  `/api/account/v1/user/public_tags` + + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyM2QABWVtYWlsbQAAABp0ZXN0X3VzZXItM0BibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQhkAARuYW1lbQAAAApVc2VyIFRlc3QzZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjNkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwM2QADHdhdGNobGlzdF9pZGIAAAEI.-a6kcGlCbsFgQtwPNaGA4yaOOpSpyG_54rEROF3a6E0; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2YJiDacnhiAAAA9h + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + [ + { + "website": "website9", + "tags": "Tag14", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": false, + "id": 200, + "full_name": "full name9", + "email": "test_user-13@blockscout.com", + "company": "company9", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003D" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003e" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003f" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000040" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000041" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000042" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000043" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000044" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000045" + } + ], + "addresses": [ + "0x000000000000000000000000000000000000003d", + "0x000000000000000000000000000000000000003e", + "0x000000000000000000000000000000000000003f", + "0x0000000000000000000000000000000000000040", + "0x0000000000000000000000000000000000000041", + "0x0000000000000000000000000000000000000042", + "0x0000000000000000000000000000000000000043", + "0x0000000000000000000000000000000000000044", + "0x0000000000000000000000000000000000000045" + ], + "additional_comment": "additional_comment9" + }, + { + "website": "website8", + "tags": "Tag13", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": false, + "id": 199, + "full_name": "full name8", + "email": "test_user-12@blockscout.com", + "company": "company8", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003a" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003b" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000003c" + } + ], + "addresses": [ + "0x000000000000000000000000000000000000003a", + "0x000000000000000000000000000000000000003b", + "0x000000000000000000000000000000000000003c" + ], + "additional_comment": "additional_comment8" + }, + { + "website": "website7", + "tags": "Tag11;Tag12", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 198, + "full_name": "full name7", + "email": "test_user-11@blockscout.com", + "company": "company7", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000032" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000033" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000034" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000035" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000036" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000037" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000038" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000039" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000032", + "0x0000000000000000000000000000000000000033", + "0x0000000000000000000000000000000000000034", + "0x0000000000000000000000000000000000000035", + "0x0000000000000000000000000000000000000036", + "0x0000000000000000000000000000000000000037", + "0x0000000000000000000000000000000000000038", + "0x0000000000000000000000000000000000000039" + ], + "additional_comment": "additional_comment7" + }, + { + "website": "website6", + "tags": "Tag10", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 197, + "full_name": "full name6", + "email": "test_user-10@blockscout.com", + "company": "company6", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002c" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002D" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002E" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002F" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000030" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000031" + } + ], + "addresses": [ + "0x000000000000000000000000000000000000002c", + "0x000000000000000000000000000000000000002d", + "0x000000000000000000000000000000000000002e", + "0x000000000000000000000000000000000000002f", + "0x0000000000000000000000000000000000000030", + "0x0000000000000000000000000000000000000031" + ], + "additional_comment": "additional_comment6" + }, + { + "website": "website5", + "tags": "Tag9", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 196, + "full_name": "full name5", + "email": "test_user-9@blockscout.com", + "company": "company5", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000028" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000029" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002A" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000002b" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000028", + "0x0000000000000000000000000000000000000029", + "0x000000000000000000000000000000000000002a", + "0x000000000000000000000000000000000000002b" + ], + "additional_comment": "additional_comment5" + }, + { + "website": "website4", + "tags": "Tag7;Tag8", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": false, + "id": 195, + "full_name": "full name4", + "email": "test_user-8@blockscout.com", + "company": "company4", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000020" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000021" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000022" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000023" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000024" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000025" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000026" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000027" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000020", + "0x0000000000000000000000000000000000000021", + "0x0000000000000000000000000000000000000022", + "0x0000000000000000000000000000000000000023", + "0x0000000000000000000000000000000000000024", + "0x0000000000000000000000000000000000000025", + "0x0000000000000000000000000000000000000026", + "0x0000000000000000000000000000000000000027" + ], + "additional_comment": "additional_comment4" + }, + { + "website": "website3", + "tags": "Tag5;Tag6", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 194, + "full_name": "full name3", + "email": "test_user-7@blockscout.com", + "company": "company3", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001a" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001B" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001c" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001D" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001e" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000001F" + } + ], + "addresses": [ + "0x000000000000000000000000000000000000001a", + "0x000000000000000000000000000000000000001b", + "0x000000000000000000000000000000000000001c", + "0x000000000000000000000000000000000000001d", + "0x000000000000000000000000000000000000001e", + "0x000000000000000000000000000000000000001f" + ], + "additional_comment": "additional_comment3" + }, + { + "website": "website2", + "tags": "Tag3;Tag4", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 193, + "full_name": "full name2", + "email": "test_user-6@blockscout.com", + "company": "company2", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000010" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000011" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000012" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000013" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000014" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000015" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000016" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000017" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000018" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000019" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000013", + "0x0000000000000000000000000000000000000014", + "0x0000000000000000000000000000000000000015", + "0x0000000000000000000000000000000000000016", + "0x0000000000000000000000000000000000000017", + "0x0000000000000000000000000000000000000018", + "0x0000000000000000000000000000000000000019" + ], + "additional_comment": "additional_comment2" + }, + { + "website": "website1", + "tags": "Tag2", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": false, + "id": 192, + "full_name": "full name1", + "email": "test_user-5@blockscout.com", + "company": "company1", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000E" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000F" + } + ], + "addresses": [ + "0x000000000000000000000000000000000000000e", + "0x000000000000000000000000000000000000000f" + ], + "additional_comment": "additional_comment1" + }, + { + "website": "website0", + "tags": "Tag0;Tag1", + "submission_date": "2022-12-03T16:55:29.000000Z", + "is_owner": true, + "id": 191, + "full_name": "full name0", + "email": "test_user-4@blockscout.com", + "company": "company0", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000008" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000009" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000A" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000b" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000C" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000000d" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000008", + "0x0000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000d" + ], + "additional_comment": "additional_comment0" + } + ] +### BlockScoutWeb.Account.Api.V1.UserController delete_public_tags_request [DELETE /api/account/v1/user/public_tags/{id}] + + + + ++ Parameters + + id: `200` + id: 200 + + ++ Request Delete public tags request +**DELETE**  `/api/account/v1/user/public_tags/200` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "remove_reason": "reason" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyM2QABWVtYWlsbQAAABp0ZXN0X3VzZXItM0BibG9ja3Njb3V0LmNvbWQAAmlkYgAAAQhkAARuYW1lbQAAAApVc2VyIFRlc3QzZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjNkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwM2QADHdhdGNobGlzdF9pZGIAAAEI.-a6kcGlCbsFgQtwPNaGA4yaOOpSpyG_54rEROF3a6E0; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2YdEq9snhiAAAA-h + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "message": "OK" + } +### BlockScoutWeb.Account.Api.V1.UserController update_public_tags_request [PUT /api/account/v1/user/public_tags/{id}] + + + + ++ Parameters + + id: `203` + id: 203 + + ++ Request Edit request to add a public tag +**PUT**  `/api/account/v1/user/public_tags/203` + + + Headers + + content-type: multipart/mixed; boundary=plug_conn_test + + Body + + { + "website": "website13", + "tags": "Tag20;Tag21", + "is_owner": false, + "full_name": "full name13", + "email": "test_user-35@blockscout.com", + "company": "company13", + "addresses": [ + "0x0000000000000000000000000000000000000085", + "0x0000000000000000000000000000000000000086", + "0x0000000000000000000000000000000000000087", + "0x0000000000000000000000000000000000000088", + "0x0000000000000000000000000000000000000089", + "0x000000000000000000000000000000000000008a", + "0x000000000000000000000000000000000000008b" + ], + "additional_comment": "additional_comment13" + } + ++ Response 200 + + + Headers + + set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjFkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTMzQGJsb2Nrc2NvdXQuY29tZAACaWRiAAABGmQABG5hbWVtAAAAC1VzZXIgVGVzdDIxZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIxZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIxZAAMd2F0Y2hsaXN0X2lkYgAAARo.byLDQXd4VuN-Y1kqWEWSxe5Q_ne42ove8xpm5k_GwHc; path=/; SameSite=Lax + content-type: application/json; charset=utf-8 + cache-control: max-age=0, private, must-revalidate + x-request-id: Fy1W2aqpFvr2fxsAABjB + access-control-allow-credentials: true + access-control-allow-origin: * + access-control-expose-headers: + + Body + + { + "website": "website13", + "tags": "Tag20;Tag21", + "submission_date": "2022-12-03T16:55:30.000000Z", + "is_owner": false, + "id": 203, + "full_name": "full name13", + "email": "test_user-35@blockscout.com", + "company": "company13", + "addresses_with_info": [ + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000085" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000086" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000087" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000088" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x0000000000000000000000000000000000000089" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000008A" + }, + { + "watchlist_names": [], + "public_tags": [], + "private_tags": [], + "name": null, + "is_verified": null, + "is_contract": false, + "implementation_name": null, + "hash": "0x000000000000000000000000000000000000008b" + } + ], + "addresses": [ + "0x0000000000000000000000000000000000000085", + "0x0000000000000000000000000000000000000086", + "0x0000000000000000000000000000000000000087", + "0x0000000000000000000000000000000000000088", + "0x0000000000000000000000000000000000000089", + "0x000000000000000000000000000000000000008a", + "0x000000000000000000000000000000000000008b" + ], + "additional_comment": "additional_comment13" + } + diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API.md b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API.md new file mode 100644 index 0000000..afc68c1 --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/API.md @@ -0,0 +1,2227 @@ +# API Documentation + + * [BlockScoutWeb.Account.Api.V1.UserController](#blockscoutweb-account-api-v1-usercontroller) + * [info](#blockscoutweb-account-api-v1-usercontroller-info) + * [create_tag_address](#blockscoutweb-account-api-v1-usercontroller-create_tag_address) + * [BlockScoutWeb.Account.Api.V1.TagsController](#blockscoutweb-account-api-v1-tagscontroller) + * [tags_address](#blockscoutweb-account-api-v1-tagscontroller-tags_address) + * [BlockScoutWeb.Account.Api.V1.UserController](#blockscoutweb-account-api-v1-usercontroller) + * [update_tag_address](#blockscoutweb-account-api-v1-usercontroller-update_tag_address) + * [tags_address](#blockscoutweb-account-api-v1-usercontroller-tags_address) + * [delete_tag_address](#blockscoutweb-account-api-v1-usercontroller-delete_tag_address) + * [create_tag_transaction](#blockscoutweb-account-api-v1-usercontroller-create_tag_transaction) + * [BlockScoutWeb.Account.Api.V1.TagsController](#blockscoutweb-account-api-v1-tagscontroller) + * [tags_transaction](#blockscoutweb-account-api-v1-tagscontroller-tags_transaction) + * [BlockScoutWeb.Account.Api.V1.UserController](#blockscoutweb-account-api-v1-usercontroller) + * [update_tag_transaction](#blockscoutweb-account-api-v1-usercontroller-update_tag_transaction) + * [tags_transaction](#blockscoutweb-account-api-v1-usercontroller-tags_transaction) + * [delete_tag_transaction](#blockscoutweb-account-api-v1-usercontroller-delete_tag_transaction) + * [create_watchlist](#blockscoutweb-account-api-v1-usercontroller-create_watchlist) + * [watchlist](#blockscoutweb-account-api-v1-usercontroller-watchlist) + * [delete_watchlist](#blockscoutweb-account-api-v1-usercontroller-delete_watchlist) + * [update_watchlist](#blockscoutweb-account-api-v1-usercontroller-update_watchlist) + * [create_watchlist](#blockscoutweb-account-api-v1-usercontroller-create_watchlist) + * [update_watchlist](#blockscoutweb-account-api-v1-usercontroller-update_watchlist) + * [create_api_key](#blockscoutweb-account-api-v1-usercontroller-create_api_key) + * [api_keys](#blockscoutweb-account-api-v1-usercontroller-api_keys) + * [update_api_key](#blockscoutweb-account-api-v1-usercontroller-update_api_key) + * [delete_api_key](#blockscoutweb-account-api-v1-usercontroller-delete_api_key) + * [create_custom_abi](#blockscoutweb-account-api-v1-usercontroller-create_custom_abi) + * [custom_abis](#blockscoutweb-account-api-v1-usercontroller-custom_abis) + * [update_custom_abi](#blockscoutweb-account-api-v1-usercontroller-update_custom_abi) + * [delete_custom_abi](#blockscoutweb-account-api-v1-usercontroller-delete_custom_abi) + * [create_public_tags_request](#blockscoutweb-account-api-v1-usercontroller-create_public_tags_request) + * [public_tags_requests](#blockscoutweb-account-api-v1-usercontroller-public_tags_requests) + * [delete_public_tags_request](#blockscoutweb-account-api-v1-usercontroller-delete_public_tags_request) + * [update_public_tags_request](#blockscoutweb-account-api-v1-usercontroller-update_public_tags_request) + +## BlockScoutWeb.Account.Api.V1.UserController +### info +#### Get info about user + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/info + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNGQABWVtYWlsbQAAABp0ZXN0X3VzZXItNEBibG9ja3Njb3V0LmNvbWQAAmlkYcRkAARuYW1lbQAAAApVc2VyIFRlc3Q0ZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjRkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwNGQADHdhdGNobGlzdF9pZGHE.Ovcc2Vzzv4fhFzmirtQjJ06gcqQwUHMMlju7VX24fyo; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y1_QfU9-YaIAAGdh +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "nickname": "test_user4", + "name": "User Test4", + "email": "test_user-4@blockscout.com", + "avatar": "https://example.com/avatar/test_user4" +} +``` + +### create_tag_address +#### Add private address tag + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/tags/address +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "MyName", + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMThkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIyQGJsb2Nrc2NvdXQuY29tZAACaWRh0mQABG5hbWVtAAAAC1VzZXIgVGVzdDE4ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE4ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE4ZAAMd2F0Y2hsaXN0X2lkYdI.tFFJ387fBBdBFuMzzeaWcMTeapzMHnbuEfnqTdq5lJ8; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3ALw8xSCMAAAHAC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "MyName", + "id": 61, + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b" +} +``` + +## BlockScoutWeb.Account.Api.V1.TagsController +### tags_address +#### Get tags for address + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/tags/address/0x3e9ac8f16c92bc4f093357933b5befbf1e16987b + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMThkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIyQGJsb2Nrc2NvdXQuY29tZAACaWRh0mQABG5hbWVtAAAAC1VzZXIgVGVzdDE4ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE4ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE4ZAAMd2F0Y2hsaXN0X2lkYdI.tFFJ387fBBdBFuMzzeaWcMTeapzMHnbuEfnqTdq5lJ8; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3BIWjdSCMAAAG4B +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "watchlist_names": [], + "personal_tags": [ + { + "label": "MyName", + "display_name": "MyName", + "address_hash": "0x3e9ac8f16c92bc4f093357933b5befbf1e16987b" + } + ], + "common_tags": [] +} +``` + +## BlockScoutWeb.Account.Api.V1.UserController +### update_tag_address +#### Edit private address tag + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/tags/address/57 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "name3", + "address_hash": "0x0000000000000000000000000000000000000016" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyN2QABWVtYWlsbQAAABt0ZXN0X3VzZXItMTBAYmxvY2tzY291dC5jb21kAAJpZGHHZAAEbmFtZW0AAAAKVXNlciBUZXN0N2QACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI3ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDdkAAx3YXRjaGxpc3RfaWRhxw.Bn03yTZrlP0m6amYLQVeI-pvhvUf1F6d9SGAkDTLEck; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2IdgOjzsTkAAGYC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "name3", + "id": 57, + "address_hash": "0x0000000000000000000000000000000000000016" +} +``` + +### tags_address +#### Get private addresses tags + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/tags/address + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTVkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTE5QGJsb2Nrc2NvdXQuY29tZAACaWRhz2QABG5hbWVtAAAAC1VzZXIgVGVzdDE1ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE1ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE1ZAAMd2F0Y2hsaXN0X2lkYc8.AoYBq7uUH9JOt11vL4-71qtsXMzpPDFsx8BV97n1Y-o; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2ynKDFWAsYAAG5C +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "name": "name2", + "id": 60, + "address_hash": "0x000000000000000000000000000000000000003f" + }, + { + "name": "name1", + "id": 59, + "address_hash": "0x000000000000000000000000000000000000003e" + }, + { + "name": "name0", + "id": 58, + "address_hash": "0x000000000000000000000000000000000000003d" + } +] +``` + +### delete_tag_address +#### Delete private address tag + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/tags/address/62 + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjRkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTM4QGJsb2Nrc2NvdXQuY29tZAACaWRh2GQABG5hbWVtAAAAC1VzZXIgVGVzdDI0ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjI0ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDI0ZAAMd2F0Y2hsaXN0X2lkYdg.x6Qf5zC5gCGQrKy2MbTqd3Xt7S_2oUYaCnO-pbZwRMI; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3biZmVZE0MAAHKC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### create_tag_transaction +#### Error on try to create private transaction tag for tx does not exist + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/tags/transaction +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000008", + "name": "MyName" +} +``` + +##### Response +* __Status__: 422 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTlkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIzQGJsb2Nrc2NvdXQuY29tZAACaWRh02QABG5hbWVtAAAAC1VzZXIgVGVzdDE5ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE5ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE5ZAAMd2F0Y2hsaXN0X2lkYdM.zuwR-sOIcF7Xpo97W6G9Szzi_BPlu6Pu9_4kn7T2c10; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3DXWVBu-HUAAG6h +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "errors": { + "tx_hash": [ + "Transaction does not exist" + ] + } +} +``` + +#### Create private transaction tag + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/tags/transaction +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000009", + "name": "MyName" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTlkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIzQGJsb2Nrc2NvdXQuY29tZAACaWRh02QABG5hbWVtAAAAC1VzZXIgVGVzdDE5ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE5ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE5ZAAMd2F0Y2hsaXN0X2lkYdM.zuwR-sOIcF7Xpo97W6G9Szzi_BPlu6Pu9_4kn7T2c10; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3EB0Ytu-HUAAG7B +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000009", + "name": "MyName", + "id": 64 +} +``` + +## BlockScoutWeb.Account.Api.V1.TagsController +### tags_transaction +#### Get tags for transaction + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/tags/transaction/0x0000000000000000000000000000000000000000000000000000000000000009 + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTlkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIzQGJsb2Nrc2NvdXQuY29tZAACaWRh02QABG5hbWVtAAAAC1VzZXIgVGVzdDE5ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE5ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE5ZAAMd2F0Y2hsaXN0X2lkYdM.zuwR-sOIcF7Xpo97W6G9Szzi_BPlu6Pu9_4kn7T2c10; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3Efe0tu-HUAAG7h +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "watchlist_names": [], + "personal_tx_tag": { + "label": "MyName" + }, + "personal_tags": [], + "common_tags": [] +} +``` + +## BlockScoutWeb.Account.Api.V1.UserController +### update_tag_transaction +#### Edit private transaction tag + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/tags/transaction/57 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000001", + "name": "name1" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMGQABWVtYWlsbQAAABp0ZXN0X3VzZXItMEBibG9ja3Njb3V0LmNvbWQAAmlkYcBkAARuYW1lbQAAAApVc2VyIFRlc3QwZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjBkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMGQADHdhdGNobGlzdF9pZGHA.-aMP6TTEeEfxopoeChJPvTvjkSRD9_ZgaeLDlOC21gU; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y1xoENHeIlkAAGEi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000001", + "name": "name1", + "id": 57 +} +``` + +### tags_transaction +#### Get private transactions tags + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/tags/transaction + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTRkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTE4QGJsb2Nrc2NvdXQuY29tZAACaWRhzmQABG5hbWVtAAAAC1VzZXIgVGVzdDE0ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE0ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE0ZAAMd2F0Y2hsaXN0X2lkYc4.8SGhlMOY4aB444Afz1VajofmGp9YZbrfbVkZ4BTyaBI; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2tEsVp5P30AAGzi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000004", + "name": "name2", + "id": 60 + }, + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000003", + "name": "name1", + "id": 59 + }, + { + "transaction_hash": "0x0000000000000000000000000000000000000000000000000000000000000002", + "name": "name0", + "id": 58 + } +] +``` + +### delete_tag_transaction +#### Delete private transaction tag + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/tags/transaction/61 + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTZkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIwQGJsb2Nrc2NvdXQuY29tZAACaWRh0GQABG5hbWVtAAAAC1VzZXIgVGVzdDE2ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE2ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE2ZAAMd2F0Y2hsaXN0X2lkYdA.YfL9L7-UIBleRbWWhHNvutNuw8Y4SadvwGFmGwakxQA; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y26c9UuC4TcAAGwh +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### create_watchlist +#### Add address to watch list + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/watchlist +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": false + } + }, + "notification_methods": { + "email": true + }, + "name": "test2", + "address_hash": "0x0000000000000000000000000000000000000007" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyM2QABWVtYWlsbQAAABp0ZXN0X3VzZXItM0BibG9ja3Njb3V0LmNvbWQAAmlkYcNkAARuYW1lbQAAAApVc2VyIFRlc3QzZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjNkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwM2QADHdhdGNobGlzdF9pZGHD.kv5nnz8sVGLaopoZs9ppOfu0hfpFi58yuisPDN6PtPI; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y16Kv_0GzWcAAGKi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": false + } + }, + "notification_methods": { + "email": true + }, + "name": "test2", + "id": 68, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000007", + "address_balance": null +} +``` + +### watchlist +#### Get addresses from watchlists + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/watchlist + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyM2QABWVtYWlsbQAAABp0ZXN0X3VzZXItM0BibG9ja3Njb3V0LmNvbWQAAmlkYcNkAARuYW1lbQAAAApVc2VyIFRlc3QzZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjNkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwM2QADHdhdGNobGlzdF9pZGHD.kv5nnz8sVGLaopoZs9ppOfu0hfpFi58yuisPDN6PtPI; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y19FyIUGzWcAAGMC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": false + }, + "ERC-721": { + "outcoming": true, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": false + } + }, + "notification_methods": { + "email": false + }, + "name": "test3", + "id": 69, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000008", + "address_balance": null + }, + { + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": false, + "incoming": true + }, + "ERC-20": { + "outcoming": false, + "incoming": false + } + }, + "notification_methods": { + "email": true + }, + "name": "test2", + "id": 68, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000007", + "address_balance": null + } +] +``` + +### delete_watchlist +#### Delete address from watchlist by id + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/watchlist/74 + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTFkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTE0QGJsb2Nrc2NvdXQuY29tZAACaWRhy2QABG5hbWVtAAAAC1VzZXIgVGVzdDExZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjExZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDExZAAMd2F0Y2hsaXN0X2lkYcs.YjW8nzuA66id0ADg2qpyjTMGfKJ7BHhjU_HdVq8w8vk; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2f5j2WpY30AAGuC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### update_watchlist +#### Edit watchlist address + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/watchlist/67 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": true + }, + "ERC-20": { + "outcoming": true, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test1", + "address_hash": "0x0000000000000000000000000000000000000006" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMWQABWVtYWlsbQAAABp0ZXN0X3VzZXItMUBibG9ja3Njb3V0LmNvbWQAAmlkYcFkAARuYW1lbQAAAApVc2VyIFRlc3QxZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjFkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMWQADHdhdGNobGlzdF9pZGHB.3KOkZkPrcMrRXfooQckn-zi6xmax1LJMBGBSjmGM8ww; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y12FoNKu97sAAGch +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": true, + "incoming": true + }, + "ERC-20": { + "outcoming": true, + "incoming": true + } + }, + "notification_methods": { + "email": true + }, + "name": "test1", + "id": 67, + "exchange_rate": null, + "address_hash": "0x0000000000000000000000000000000000000006", + "address_balance": null +} +``` + +### create_watchlist +#### Example of error on creating watchlist address + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/watchlist +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": false, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": false + } + }, + "notification_methods": { + "email": false + }, + "name": "test4", + "address_hash": "0x0000000000000000000000000000000000000017" +} +``` + +##### Response +* __Status__: 422 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyOGQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTFAYmxvY2tzY291dC5jb21kAAJpZGHIZAAEbmFtZW0AAAAKVXNlciBUZXN0OGQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI4ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDhkAAx3YXRjaGxpc3RfaWRhyA.q1Rmte0qLd31GbmpA46bE8rXo2okwzX8aD_oDHn8CIQ; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2MCqHvooPMAAGbi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "errors": { + "watchlist_id": [ + "Address already added to the watch list" + ] + } +} +``` + +### update_watchlist +#### Example of error on editing watchlist address + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/watchlist/72 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "notification_settings": { + "native": { + "outcoming": false, + "incoming": true + }, + "ERC-721": { + "outcoming": false, + "incoming": false + }, + "ERC-20": { + "outcoming": true, + "incoming": false + } + }, + "notification_methods": { + "email": false + }, + "name": "test4", + "address_hash": "0x0000000000000000000000000000000000000017" +} +``` + +##### Response +* __Status__: 422 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyOGQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTFAYmxvY2tzY291dC5jb21kAAJpZGHIZAAEbmFtZW0AAAAKVXNlciBUZXN0OGQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI4ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDhkAAx3YXRjaGxpc3RfaWRhyA.q1Rmte0qLd31GbmpA46bE8rXo2okwzX8aD_oDHn8CIQ; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2Nh1eHooPMAAGci +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "errors": { + "watchlist_id": [ + "Address already added to the watch list" + ] + } +} +``` + +### create_api_key +#### Add api key + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/api_keys +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMmQABWVtYWlsbQAAABp0ZXN0X3VzZXItMkBibG9ja3Njb3V0LmNvbWQAAmlkYcJkAARuYW1lbQAAAApVc2VyIFRlc3QyZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjJkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwMmQADHdhdGNobGlzdF9pZGHC.ULESD1_sOySz8eEVGnagUzGw6eMIx_8Pwoyr_5S3K0M; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y14XlMBqXaQAAGHi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "test", + "api_key": "de9ef457-3f47-48d3-affa-79ad9d3b27b9" +} +``` + +#### Example of error on creating api key + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/api_keys +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test" +} +``` + +##### Response +* __Status__: 422 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjJkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI2QGJsb2Nrc2NvdXQuY29tZAACaWRh1mQABG5hbWVtAAAAC1VzZXIgVGVzdDIyZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIyZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIyZAAMd2F0Y2hsaXN0X2lkYdY.P37J2lZZdHaT4P-RatVaXCx77UcSH3s_TMx-FieaYk0; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3LmuuofZKYAAG_h +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "errors": { + "name": [ + "Max 3 keys per account" + ] + } +} +``` + +### api_keys +#### Get api keys list + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/api_keys + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjJkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI2QGJsb2Nrc2NvdXQuY29tZAACaWRh1mQABG5hbWVtAAAAC1VzZXIgVGVzdDIyZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIyZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIyZAAMd2F0Y2hsaXN0X2lkYdY.P37J2lZZdHaT4P-RatVaXCx77UcSH3s_TMx-FieaYk0; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3LyOSIfZKYAAHAB +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "name": "test", + "api_key": "2ac16688-34e6-4fa4-8983-a9bc34c912f6" + }, + { + "name": "test", + "api_key": "a55426db-04f0-40be-a146-1ced4558aa0c" + }, + { + "name": "test", + "api_key": "d73fc23b-59f0-4e6f-a739-f4de30995101" + } +] +``` + +### update_api_key +#### Edit api key + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/api_keys/2b1d400d-713e-4bfc-8ef0-710555693138 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test_1" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTdkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTIxQGJsb2Nrc2NvdXQuY29tZAACaWRh0WQABG5hbWVtAAAAC1VzZXIgVGVzdDE3ZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjE3ZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDE3ZAAMd2F0Y2hsaXN0X2lkYdE.bLJKM3-kFm04mMC-4-3b2mjrig_lmQYt5C2tg-9q9so; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2-0eR7T2BMAAG0B +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "test_1", + "api_key": "2b1d400d-713e-4bfc-8ef0-710555693138" +} +``` + +### delete_api_key +#### Delete api key + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/api_keys/3bd44c0d-290f-4dfc-9283-5f674080f8ef + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjBkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI0QGJsb2Nrc2NvdXQuY29tZAACaWRh1GQABG5hbWVtAAAAC1VzZXIgVGVzdDIwZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIwZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIwZAAMd2F0Y2hsaXN0X2lkYdQ.WgjMmOxwwBGcTZZscpLA8EXErwL8ITCvoIXPLIQAhtw; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3HQdpa0710AAHBi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### create_custom_abi +#### Add custom abi + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/custom_abis +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test25", + "contract_address_hash": "0x000000000000000000000000000000000000002c", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTJkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTE1QGJsb2Nrc2NvdXQuY29tZAACaWRhzGQABG5hbWVtAAAAC1VzZXIgVGVzdDEyZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjEyZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDEyZAAMd2F0Y2hsaXN0X2lkYcw.7cCOt6SVrOb5VLYplBzwZ03FWMo9jQpAV7cNroY4txY; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2iZJWbZgfgAAGwC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "test25", + "id": 143, + "contract_address_hash": "0x000000000000000000000000000000000000002c", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] +} +``` + +#### Example of error on creating custom abi + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/custom_abis +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test21", + "contract_address_hash": "0x0000000000000000000000000000000000000028", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] +} +``` + +##### Response +* __Status__: 422 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyOWQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTJAYmxvY2tzY291dC5jb21kAAJpZGHJZAAEbmFtZW0AAAAKVXNlciBUZXN0OWQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI5ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDlkAAx3YXRjaGxpc3RfaWRhyQ.MCpJsS-nb95ccHRtzOk7DbIRjEcTG34ONq4PrC5hOcU; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2Ypm-ny0swAAGiB +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "errors": { + "name": [ + "Max 15 ABIs per account" + ] + } +} +``` + +### custom_abis +#### Get custom abis list + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/custom_abis + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyOWQABWVtYWlsbQAAABt0ZXN0X3VzZXItMTJAYmxvY2tzY291dC5jb21kAAJpZGHJZAAEbmFtZW0AAAAKVXNlciBUZXN0OWQACG5pY2tuYW1lbQAAAAp0ZXN0X3VzZXI5ZAADdWlkbQAAAA9ibG9ja3Njb3V0fDAwMDlkAAx3YXRjaGxpc3RfaWRhyQ.MCpJsS-nb95ccHRtzOk7DbIRjEcTG34ONq4PrC5hOcU; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2Y-qjXy0swAAGnC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "name": "test20", + "id": 141, + "contract_address_hash": "0x0000000000000000000000000000000000000027", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test19", + "id": 140, + "contract_address_hash": "0x0000000000000000000000000000000000000026", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test18", + "id": 139, + "contract_address_hash": "0x0000000000000000000000000000000000000025", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test17", + "id": 138, + "contract_address_hash": "0x0000000000000000000000000000000000000024", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test16", + "id": 137, + "contract_address_hash": "0x0000000000000000000000000000000000000023", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test15", + "id": 136, + "contract_address_hash": "0x0000000000000000000000000000000000000022", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test14", + "id": 135, + "contract_address_hash": "0x0000000000000000000000000000000000000021", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test13", + "id": 134, + "contract_address_hash": "0x0000000000000000000000000000000000000020", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test12", + "id": 133, + "contract_address_hash": "0x000000000000000000000000000000000000001f", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test11", + "id": 132, + "contract_address_hash": "0x000000000000000000000000000000000000001e", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test10", + "id": 131, + "contract_address_hash": "0x000000000000000000000000000000000000001d", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test9", + "id": 130, + "contract_address_hash": "0x000000000000000000000000000000000000001c", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test8", + "id": 129, + "contract_address_hash": "0x000000000000000000000000000000000000001b", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test7", + "id": 128, + "contract_address_hash": "0x000000000000000000000000000000000000001a", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + }, + { + "name": "test6", + "id": 127, + "contract_address_hash": "0x0000000000000000000000000000000000000019", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] + } +] +``` + +### update_custom_abi +#### Edit custom abi + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/custom_abis/144 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "name": "test27", + "contract_address_hash": "0x000000000000000000000000000000000000004b", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjFkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI1QGJsb2Nrc2NvdXQuY29tZAACaWRh1WQABG5hbWVtAAAAC1VzZXIgVGVzdDIxZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIxZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIxZAAMd2F0Y2hsaXN0X2lkYdU.SEUqq9ZiSD79HIzwKvwTspmBKKU87m_Xwu5gw2pX1e0; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3JcHmB4X2AAAHDC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "name": "test27", + "id": 144, + "contract_address_hash": "0x000000000000000000000000000000000000004b", + "abi": [ + { + "type": "function", + "stateMutability": "nonpayable", + "payable": false, + "outputs": [], + "name": "set", + "inputs": [ + { + "type": "uint256", + "name": "x" + } + ], + "constant": false + }, + { + "type": "function", + "stateMutability": "view", + "payable": false, + "outputs": [ + { + "type": "uint256", + "name": "" + } + ], + "name": "get", + "inputs": [], + "constant": true + } + ] +} +``` + +### delete_custom_abi +#### Delete custom abi + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/custom_abis/142 + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMTBkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTEzQGJsb2Nrc2NvdXQuY29tZAACaWRhymQABG5hbWVtAAAAC1VzZXIgVGVzdDEwZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjEwZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDEwZAAMd2F0Y2hsaXN0X2lkYco.x_6dmEjpZ1o8_ct-M7pWWP0LkI66xhwl8gWeQt9XzHA; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2b1jJGBaO4AAGrC +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### create_public_tags_request +#### Submit request to add a public tag + +##### Request +* __Method:__ POST +* __Path:__ /api/account/v1/user/public_tags +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "website": "website0", + "tags": "Tag0", + "is_owner": true, + "full_name": "full name0", + "email": "test_user-6@blockscout.com", + "company": "company0", + "addresses": [ + "0x0000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000d" + ], + "additional_comment": "additional_comment0" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNWQABWVtYWlsbQAAABp0ZXN0X3VzZXItNUBibG9ja3Njb3V0LmNvbWQAAmlkYcVkAARuYW1lbQAAAApVc2VyIFRlc3Q1ZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjVkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwNWQADHdhdGNobGlzdF9pZGHF.kXAMBaL9a7aYjPDgZ9Llxe1etUCPH3vEvQe9Fq2May4; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2BIESA-ecUAAGgB +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "website": "website0", + "tags": "Tag0", + "submission_date": "2022-09-03T21:00:07.156465Z", + "is_owner": true, + "id": 131, + "full_name": "full name0", + "email": "test_user-6@blockscout.com", + "company": "company0", + "addresses": [ + "0x0000000000000000000000000000000000000009", + "0x000000000000000000000000000000000000000a", + "0x000000000000000000000000000000000000000b", + "0x000000000000000000000000000000000000000c", + "0x000000000000000000000000000000000000000d" + ], + "additional_comment": "additional_comment0" +} +``` + +### public_tags_requests +#### Get list of requests to add a public tag + +##### Request +* __Method:__ GET +* __Path:__ /api/account/v1/user/public_tags + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjNkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI3QGJsb2Nrc2NvdXQuY29tZAACaWRh12QABG5hbWVtAAAAC1VzZXIgVGVzdDIzZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIzZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIzZAAMd2F0Y2hsaXN0X2lkYdc._6gJnvzjA6VEztgoIdpp7chhmhsdFrJImlcdrp4-pW0; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3SaPVCdkicAAHIi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +[ + { + "website": "website13", + "tags": "Tag17", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 143, + "full_name": "full name13", + "email": "test_user-37@blockscout.com", + "company": "company13", + "addresses": [ + "0x000000000000000000000000000000000000007e", + "0x000000000000000000000000000000000000007f", + "0x0000000000000000000000000000000000000080", + "0x0000000000000000000000000000000000000081", + "0x0000000000000000000000000000000000000082", + "0x0000000000000000000000000000000000000083", + "0x0000000000000000000000000000000000000084" + ], + "additional_comment": "additional_comment13" + }, + { + "website": "website12", + "tags": "Tag16", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 142, + "full_name": "full name12", + "email": "test_user-36@blockscout.com", + "company": "company12", + "addresses": [ + "0x0000000000000000000000000000000000000075", + "0x0000000000000000000000000000000000000076", + "0x0000000000000000000000000000000000000077", + "0x0000000000000000000000000000000000000078", + "0x0000000000000000000000000000000000000079", + "0x000000000000000000000000000000000000007a", + "0x000000000000000000000000000000000000007b", + "0x000000000000000000000000000000000000007c", + "0x000000000000000000000000000000000000007d" + ], + "additional_comment": "additional_comment12" + }, + { + "website": "website11", + "tags": "Tag15", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 141, + "full_name": "full name11", + "email": "test_user-35@blockscout.com", + "company": "company11", + "addresses": [ + "0x000000000000000000000000000000000000006d", + "0x000000000000000000000000000000000000006e", + "0x000000000000000000000000000000000000006f", + "0x0000000000000000000000000000000000000070", + "0x0000000000000000000000000000000000000071", + "0x0000000000000000000000000000000000000072", + "0x0000000000000000000000000000000000000073", + "0x0000000000000000000000000000000000000074" + ], + "additional_comment": "additional_comment11" + }, + { + "website": "website10", + "tags": "Tag14", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 140, + "full_name": "full name10", + "email": "test_user-34@blockscout.com", + "company": "company10", + "addresses": [ + "0x0000000000000000000000000000000000000067", + "0x0000000000000000000000000000000000000068", + "0x0000000000000000000000000000000000000069", + "0x000000000000000000000000000000000000006a", + "0x000000000000000000000000000000000000006b", + "0x000000000000000000000000000000000000006c" + ], + "additional_comment": "additional_comment10" + }, + { + "website": "website9", + "tags": "Tag13", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": true, + "id": 139, + "full_name": "full name9", + "email": "test_user-33@blockscout.com", + "company": "company9", + "addresses": [ + "0x0000000000000000000000000000000000000061", + "0x0000000000000000000000000000000000000062", + "0x0000000000000000000000000000000000000063", + "0x0000000000000000000000000000000000000064", + "0x0000000000000000000000000000000000000065", + "0x0000000000000000000000000000000000000066" + ], + "additional_comment": "additional_comment9" + }, + { + "website": "website8", + "tags": "Tag12", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 138, + "full_name": "full name8", + "email": "test_user-32@blockscout.com", + "company": "company8", + "addresses": [ + "0x0000000000000000000000000000000000000060" + ], + "additional_comment": "additional_comment8" + }, + { + "website": "website7", + "tags": "Tag11", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": true, + "id": 137, + "full_name": "full name7", + "email": "test_user-31@blockscout.com", + "company": "company7", + "addresses": [ + "0x000000000000000000000000000000000000005f" + ], + "additional_comment": "additional_comment7" + }, + { + "website": "website6", + "tags": "Tag9;Tag10", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": true, + "id": 136, + "full_name": "full name6", + "email": "test_user-30@blockscout.com", + "company": "company6", + "addresses": [ + "0x000000000000000000000000000000000000005a", + "0x000000000000000000000000000000000000005b", + "0x000000000000000000000000000000000000005c", + "0x000000000000000000000000000000000000005d", + "0x000000000000000000000000000000000000005e" + ], + "additional_comment": "additional_comment6" + }, + { + "website": "website5", + "tags": "Tag8", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": false, + "id": 135, + "full_name": "full name5", + "email": "test_user-29@blockscout.com", + "company": "company5", + "addresses": [ + "0x0000000000000000000000000000000000000051", + "0x0000000000000000000000000000000000000052", + "0x0000000000000000000000000000000000000053", + "0x0000000000000000000000000000000000000054", + "0x0000000000000000000000000000000000000055", + "0x0000000000000000000000000000000000000056", + "0x0000000000000000000000000000000000000057", + "0x0000000000000000000000000000000000000058", + "0x0000000000000000000000000000000000000059" + ], + "additional_comment": "additional_comment5" + }, + { + "website": "website4", + "tags": "Tag6;Tag7", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": true, + "id": 134, + "full_name": "full name4", + "email": "test_user-28@blockscout.com", + "company": "company4", + "addresses": [ + "0x000000000000000000000000000000000000004c", + "0x000000000000000000000000000000000000004d", + "0x000000000000000000000000000000000000004e", + "0x000000000000000000000000000000000000004f", + "0x0000000000000000000000000000000000000050" + ], + "additional_comment": "additional_comment4" + } +] +``` + +### delete_public_tags_request +#### Delete public tags request + +##### Request +* __Method:__ DELETE +* __Path:__ /api/account/v1/user/public_tags/143 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "remove_reason": "reason" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAmaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyMjNkAAVlbWFpbG0AAAAbdGVzdF91c2VyLTI3QGJsb2Nrc2NvdXQuY29tZAACaWRh12QABG5hbWVtAAAAC1VzZXIgVGVzdDIzZAAIbmlja25hbWVtAAAAC3Rlc3RfdXNlcjIzZAADdWlkbQAAABBibG9ja3Njb3V0fDAwMDIzZAAMd2F0Y2hsaXN0X2lkYdc._6gJnvzjA6VEztgoIdpp7chhmhsdFrJImlcdrp4-pW0; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y3SwObudkicAAHBB +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "message": "OK" +} +``` + +### update_public_tags_request +#### Edit request to add a public tag + +##### Request +* __Method:__ PUT +* __Path:__ /api/account/v1/user/public_tags/132 +* __Request headers:__ +``` +content-type: multipart/mixed; boundary=plug_conn_test +``` +* __Request body:__ +```json +{ + "website": "website2", + "tags": "Tag2;Tag3", + "is_owner": true, + "full_name": "full name2", + "email": "test_user-9@blockscout.com", + "company": "company2", + "addresses": [ + "0x000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000013", + "0x0000000000000000000000000000000000000014" + ], + "additional_comment": "additional_comment2" +} +``` + +##### Response +* __Status__: 200 +* __Response headers:__ +``` +set-cookie: _explorer_key=SFMyNTY.g3QAAAABbQAAAAxjdXJyZW50X3VzZXJ0AAAAB2QABmF2YXRhcm0AAAAlaHR0cHM6Ly9leGFtcGxlLmNvbS9hdmF0YXIvdGVzdF91c2VyNmQABWVtYWlsbQAAABp0ZXN0X3VzZXItN0BibG9ja3Njb3V0LmNvbWQAAmlkYcZkAARuYW1lbQAAAApVc2VyIFRlc3Q2ZAAIbmlja25hbWVtAAAACnRlc3RfdXNlcjZkAAN1aWRtAAAAD2Jsb2Nrc2NvdXR8MDAwNmQADHdhdGNobGlzdF9pZGHG.86gruprPiLE-Nf9xkOzjEcW2wfSnCCPly5fHTwHrF6c; path=/; HttpOnly +content-type: application/json; charset=utf-8 +cache-control: max-age=0, private, must-revalidate +x-request-id: FxF1Y2E03jhU4u4AAGSi +access-control-allow-credentials: true +access-control-allow-origin: * +access-control-expose-headers: +``` +* __Response body:__ +```json +{ + "website": "website2", + "tags": "Tag2;Tag3", + "submission_date": "2022-09-03T21:00:07.000000Z", + "is_owner": true, + "id": 132, + "full_name": "full name2", + "email": "test_user-9@blockscout.com", + "company": "company2", + "addresses": [ + "0x000000000000000000000000000000000000000f", + "0x0000000000000000000000000000000000000010", + "0x0000000000000000000000000000000000000011", + "0x0000000000000000000000000000000000000012", + "0x0000000000000000000000000000000000000013", + "0x0000000000000000000000000000000000000014" + ], + "additional_comment": "additional_comment2" +} +``` + diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/README.md b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/README.md new file mode 100644 index 0000000..448152b --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/README.md @@ -0,0 +1,43 @@ +# BlockScout Web + +BlockScoutWeb is the API and presentation layer of BlockScout built on the Phoenix framework. It exposes RESTful and GraphQL APIs for accessing blockchain data. It directs HTTP requests through Phoenix routers to controllers that manage resources like addresses, transactions, blocks, and tokens. It formats responses as JSON via view modules. It provides real-time updates on new blocks, transactions, and exchange rates using Phoenix Channels. It supports smart contract verification through multiple methods including integration with Sourcify. Custom plugs add functionalities such as rate limiting, API version checks, and logging. Configuration is retrieved from the application environment. It manages errors through fallback controllers. + +## Machine Requirements + +* Erlang/OTP 21+ +* Elixir 1.9+ +* Postgres 10.3 + +## Required Accounts + +* Github for code storage + +## Setup Instructions + +### Development + +To get BlockScout Web interface up and running locally: + +* Setup `../explorer` +* Install Node.js dependencies with `$ cd assets && npm install && cd ..` +* Start Phoenix with `$ mix phx.server` (This can be run from this directory or the project root: the project root is recommended.) + +Now you can visit [`localhost:4000`](http://localhost:4000) from your browser. + +You can also run IEx (Interactive Elixir): `$ iex -S mix phx.server` (This can be run from this directory or the project root: the project root is recommended.) + +### Testing + +* Build the assets: `cd assets && npm run build` +* 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` +* Update translation templates and translations and check there are no uncommitted changes: `mix gettext.extract --merge` +* Lint the JavaScript code: `cd assets && npm run eslint` + +## Internationalization + +The app is currently internationalized. It is only localized to U.S. English. + +To translate new strings, run `$ mix gettext.extract --merge` and edit the new strings in `priv/gettext/en/LC_MESSAGES/default.po`. diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/.babelrc b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/.babelrc new file mode 100644 index 0000000..db967cb --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/.babelrc @@ -0,0 +1,3 @@ +{ + "presets": [["@babel/preset-env", { "useBuiltIns": "usage", "corejs": { "version": 3 } }]] +} diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/README.md b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/README.md new file mode 100644 index 0000000..c4e098c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/README.md @@ -0,0 +1,9 @@ +# Javascript structure files + +## lib + +* This folder is used to place `component` files, that may span in multiple pages. + +## pages + +* This folder is used to place `page` specific files, that won't be reusable in other locations. diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__mocks__/css/app.scss.js b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__mocks__/css/app.scss.js new file mode 100644 index 0000000..1a86a4f --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__mocks__/css/app.scss.js @@ -0,0 +1,4 @@ +export default { + primary: "#4786ff", + secondary: "#ced4da" +} diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/async_listing_load.js b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/async_listing_load.js new file mode 100644 index 0000000..d6d187c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/async_listing_load.js @@ -0,0 +1,82 @@ +/** + * @jest-environment jsdom + */ + +import { asyncReducer, asyncInitialState } from '../../js/lib/async_listing_load' + +describe('ELEMENTS_LOAD', () => { + test('sets only nextPagePath and ignores other keys', () => { + const state = Object.assign({}, asyncInitialState) + const action = { type: 'ELEMENTS_LOAD', nextPagePath: 'set', foo: 1 } + const output = asyncReducer(state, action) + + expect(output.foo).not.toEqual(1) + expect(output.nextPagePath).toEqual('set') + }) +}) + +describe('ADD_ITEM_KEY', () => { + test('sets itemKey to what was passed in the action', () => { + const expectedItemKey = 'expected.Key' + + const state = Object.assign({}, asyncInitialState) + const action = { type: 'ADD_ITEM_KEY', itemKey: expectedItemKey } + const output = asyncReducer(state, action) + + expect(output.itemKey).toEqual(expectedItemKey) + }) +}) + +describe('START_REQUEST', () => { + test('sets loading status to true', () => { + const state = Object.assign({}, asyncInitialState, { loading: false }) + const action = { type: 'START_REQUEST' } + const output = asyncReducer(state, action) + + expect(output.loading).toEqual(true) + }) +}) + +describe('REQUEST_ERROR', () => { + test('sets requestError to true', () => { + const state = Object.assign({}, asyncInitialState, { requestError: false }) + const action = { type: 'REQUEST_ERROR' } + const output = asyncReducer(state, action) + + expect(output.requestError).toEqual(true) + }) +}) + +describe('FINISH_REQUEST', () => { + test('sets loading status to false', () => { + const state = Object.assign({}, asyncInitialState, { + loading: true + }) + const action = { type: 'FINISH_REQUEST' } + const output = asyncReducer(state, action) + + expect(output.loading).toEqual(false) + }) +}) + +describe('ITEMS_FETCHED', () => { + test('sets the items to what was passed in the action', () => { + const expectedItems = [1, 2, 3] + + const state = Object.assign({}, asyncInitialState) + const action = { type: 'ITEMS_FETCHED', items: expectedItems } + const output = asyncReducer(state, action) + + expect(output.items).toEqual(expectedItems) + }) +}) + +describe('NAVIGATE_TO_OLDER', () => { + test('sets beyondPageOne to true', () => { + const state = Object.assign({}, asyncInitialState, { beyondPageOne: false }) + const action = { type: 'NAVIGATE_TO_OLDER' } + const output = asyncReducer(state, action) + + expect(output.beyondPageOne).toEqual(true) + }) +}) diff --git a/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/autocomplete.js b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/autocomplete.js new file mode 100644 index 0000000..877474c --- /dev/null +++ b/sz-poc-offsite-2025/blockscout/apps/block_scout_web/assets/__tests__/lib/autocomplete.js @@ -0,0 +1,31 @@ +/** + * @jest-environment jsdom + */ + + import { searchEngine } from '../../js/lib/autocomplete' + + test('searchEngine', () => { + expect(searchEngine('qwe', { + 'name': 'Test', + 'symbol': 'TST', + 'address_hash': '0x000', + 'tx_hash': '0x000', + 'block_hash': '0x000' + })).toEqual(undefined) + + expect(searchEngine('tes', { + 'name': 'Test', + 'symbol': 'TST', + 'address_hash': '0x000', + 'tx_hash': '0x000', + 'block_hash': '0x000' + })).toEqual('
0x000
Test (TST)
') + + expect(searchEngine('qwe', { + 'name': 'qwe1\'">