From 8464e8254a5fe8e30f446a646923a0d2c6f28b82 Mon Sep 17 00:00:00 2001 From: nikitosing <32202610+nikitosing@users.noreply.github.com> Date: Fri, 27 Jan 2023 23:19:11 +0300 Subject: [PATCH] Integrate sig provider (#6541) * Integrate sig provider * Fix API verification call * Fix env usage * Update Elixir & OTP versions in .yml configs * Fix dialyzer * Update apps/explorer/lib/explorer/chain/transaction.ex Co-authored-by: Victor Baranov * Add sig-provider to docker compose * integrate sig provider * Fix env usage * Update image in Dockerfile * Update OTP and Elixir versions in github .yml's * Add pull_policy: always for sig_provider service * Update Dockerfile * Avoid append_query function * Revert changes in Dockerfile, update platform in other docker-compose files * Update Dockerfile * Reset GA cache * Remove unused alias * Return unused alias * Remove unused alias * Update cache * Fix gettext --------- Co-authored-by: Viktor Baranov --- .dialyzer-ignore | 6 +- .github/workflows/config.yml | 4 +- .../publish-docker-image-every-push.yml | 4 +- .../publish-docker-image-release.yml | 4 +- CHANGELOG.md | 1 + .../transaction/_decoded_input.html.eex | 2 +- .../lib/block_scout_web/views/layout_view.ex | 2 +- apps/block_scout_web/priv/gettext/default.pot | 142 ++++++++-------- .../priv/gettext/en/LC_MESSAGES/default.po | 142 ++++++++-------- apps/explorer/config/config.exs | 4 +- .../lib/explorer/chain/cache/block_number.ex | 6 +- apps/explorer/lib/explorer/chain/log.ex | 41 ++++- .../lib/explorer/chain/transaction.ex | 151 ++++++++++++------ .../smart_contract/rust_verifier_interface.ex | 2 +- .../smart_contract/sig_provider_interface.ex | 88 ++++++++++ .../smart_contract/solidity/verifier.ex | 1 + .../third_party_integrations/sourcify.ex | 4 +- config/runtime.exs | 12 +- .../docker-compose-no-build-erigon.yml | 11 ++ .../docker-compose-no-build-ganache.yml | 11 ++ .../docker-compose-no-build-geth.yml | 11 ++ ...ocker-compose-no-build-hardhat-network.yml | 11 ++ .../docker-compose-no-build-nethermind.yml | 11 ++ ...ocker-compose-no-build-no-db-container.yml | 11 ++ .../docker-compose-no-rust-services.yml | 1 + docker-compose/docker-compose.yml | 12 ++ docker-compose/envs/common-blockscout.env | 3 + docker/Makefile | 10 +- 28 files changed, 500 insertions(+), 208 deletions(-) create mode 100644 apps/explorer/lib/explorer/smart_contract/sig_provider_interface.ex diff --git a/.dialyzer-ignore b/.dialyzer-ignore index 73a7edec27..59e0810f93 100644 --- a/.dialyzer-ignore +++ b/.dialyzer-ignore @@ -22,11 +22,11 @@ lib/explorer/smart_contract/reader.ex:435 lib/indexer/fetcher/token_total_supply_on_demand.ex:16 lib/explorer/exchange_rates/source.ex:116 lib/explorer/exchange_rates/source.ex:119 -lib/explorer/smart_contract/solidity/verifier.ex:317 +lib/explorer/smart_contract/solidity/verifier.ex:318 lib/block_scout_web/templates/address_contract/index.html.eex:158 lib/block_scout_web/templates/address_contract/index.html.eex:195 -lib/explorer/third_party_integrations/sourcify.ex:120 -lib/explorer/third_party_integrations/sourcify.ex:123 +lib/explorer/third_party_integrations/sourcify.ex:121 +lib/explorer/third_party_integrations/sourcify.ex:124 lib/block_scout_web/views/transaction_view.ex:137 lib/block_scout_web/views/transaction_view.ex:152 lib/block_scout_web/views/transaction_view.ex:197 diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index d9143fd4bb..ccd819dedc 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -10,8 +10,8 @@ on: env: MIX_ENV: test - OTP_VERSION: '24.3.4.1' - ELIXIR_VERSION: '1.13.4' + OTP_VERSION: '25.2.1' + ELIXIR_VERSION: '1.14.3' ACCOUNT_AUTH0_DOMAIN: 'blockscoutcom.us.auth0.com' ACCOUNT_AUTH0_LOGOUT_URL: 'https://blockscoutcom.us.auth0.com/v2/logout' ACCOUNT_AUTH0_LOGOUT_RETURN_URL: 'https://blockscout.com/auth/logout' diff --git a/.github/workflows/publish-docker-image-every-push.yml b/.github/workflows/publish-docker-image-every-push.yml index 261a67f9dc..0466a588af 100644 --- a/.github/workflows/publish-docker-image-every-push.yml +++ b/.github/workflows/publish-docker-image-every-push.yml @@ -5,8 +5,8 @@ on: branches: - master env: - OTP_VERSION: '24.3.4.1' - ELIXIR_VERSION: '1.13.4' + OTP_VERSION: '25.2.1' + ELIXIR_VERSION: '1.14.3' NEXT_RELEASE_VERSION: 5.0.1 jobs: diff --git a/.github/workflows/publish-docker-image-release.yml b/.github/workflows/publish-docker-image-release.yml index b755ddbe7b..d9268ed298 100644 --- a/.github/workflows/publish-docker-image-release.yml +++ b/.github/workflows/publish-docker-image-release.yml @@ -10,8 +10,8 @@ on: types: [published] env: - OTP_VERSION: '24.3.4.1' - ELIXIR_VERSION: '1.13.4' + OTP_VERSION: '25.2.1' + ELIXIR_VERSION: '1.14.3' jobs: push_to_registry: diff --git a/CHANGELOG.md b/CHANGELOG.md index 9610fb63a6..49683e47c4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [#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) - API v2 update ### Fixes diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input.html.eex index 741344e79b..3afb743db1 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction/_decoded_input.html.eex @@ -15,7 +15,7 @@ <% end %> <%= unless Enum.empty?(candidates) do %> -

<%= gettext "Potential matches from our contract method database:" %>

+

<%= gettext "Potential matches from contract method database:" %>

<%= gettext "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." %> <%= gettext "To have guaranteed accuracy, use the link above to verify the contract's source code." %> diff --git a/apps/block_scout_web/lib/block_scout_web/views/layout_view.ex b/apps/block_scout_web/lib/block_scout_web/views/layout_view.ex index 2e77e19c6d..91fd37664a 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/layout_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/layout_view.ex @@ -1,7 +1,7 @@ defmodule BlockScoutWeb.LayoutView do use BlockScoutWeb, :view - alias Explorer.{Chain, CustomContractsHelpers} + alias Explorer.Chain alias Plug.Conn alias Poison.Parser diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 246bd35255..98f827df8a 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -81,11 +81,31 @@ msgstr "" msgid ") may be added for each contract. Click the Add Library button to add an additional one." msgstr "" -#: lib/block_scout_web/templates/layout/app.html.eex:236 +#: lib/block_scout_web/templates/layout/app.html.eex:171 #, elixir-autogen, elixir-format msgid "- We're indexing this chain right now. Some of the counts may be inaccurate." msgstr "" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:8 +#, elixir-autogen, elixir-format +msgid "1. If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:9 +#, elixir-autogen, elixir-format +msgid "2. It could still be in the TX Pool of a different node, waiting to be broadcasted." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:10 +#, elixir-autogen, elixir-format +msgid "3. During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:11 +#, elixir-autogen, elixir-format +msgid "4. If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +msgstr "" + #: lib/block_scout_web/templates/block/overview.html.eex:195 #, elixir-autogen, elixir-format msgid "64-bit hash of value verifying proof-of-work (note: null for POA chains)." @@ -319,6 +339,11 @@ msgstr "" msgid "Amount of distributed reward. Miners receive a static block reward + Tx fees + uncle fees." msgstr "" +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "An unexpected error has occurred. Try reloading the page, or come back soon and try again." +msgstr "" + #: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 #, elixir-autogen, elixir-format msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." @@ -364,6 +389,14 @@ msgstr "" msgid "Back to Watch list (Cancel)" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:9 +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:9 +#: lib/block_scout_web/templates/page_not_found/index.html.eex:9 +#: lib/block_scout_web/templates/transaction/not_found.html.eex:13 +#, elixir-autogen, elixir-format +msgid "Back to home" +msgstr "" + #: lib/block_scout_web/templates/account/watchlist/show.html.eex:24 #: lib/block_scout_web/templates/address/overview.html.eex:150 #: lib/block_scout_web/templates/address_token/overview.html.eex:51 @@ -1515,6 +1548,11 @@ msgstr "" msgid "Internal Transactions" msgstr "" +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:7 +#, elixir-autogen, elixir-format +msgid "Internal server error" +msgstr "" + #: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:19 #: lib/block_scout_web/views/tokens/overview_view.ex:42 @@ -2001,6 +2039,10 @@ msgid "Position %{index}" msgstr "" #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +#, elixir-autogen, elixir-format +msgid "Potential matches from contract method database:" +msgstr "" + #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 #, elixir-autogen, elixir-format msgid "Potential matches from our contract method database:" @@ -2136,6 +2178,11 @@ msgstr "" msgid "Request a public tag/label" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:7 +#, elixir-autogen, elixir-format +msgid "Request cannot be processed" +msgstr "" + #: lib/block_scout_web/templates/account/public_tags_request/index.html.eex:37 #, elixir-autogen, elixir-format msgid "Request to add public tag" @@ -2275,11 +2322,21 @@ msgstr "" msgid "Shows total assets held in the address" msgstr "" +#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:29 +#, elixir-autogen, elixir-format +msgid "Sign in" +msgstr "" + #: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:20 #, elixir-autogen, elixir-format msgid "Sign out" msgstr "" +#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:11 +#, elixir-autogen, elixir-format +msgid "Signed in as " +msgstr "" + #: lib/block_scout_web/templates/block/overview.html.eex:114 #, elixir-autogen, elixir-format msgid "Size" @@ -2343,6 +2400,11 @@ msgstr "" msgid "Something went wrong, click to retry." msgstr "" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:6 +#, elixir-autogen, elixir-format +msgid "Sorry, we are unable to locate this transaction hash" +msgstr "" + #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:63 #, elixir-autogen, elixir-format msgid "Sources *.sol files" @@ -2632,6 +2694,11 @@ msgstr "" msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." msgstr "" +#: lib/block_scout_web/templates/page_not_found/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "This page is no longer explorable! If you are lost, use the search bar to find what you are looking for." +msgstr "" + #: lib/block_scout_web/templates/transaction_state/index.html.eex:17 #, elixir-autogen, elixir-format msgid "This transaction hasn't changed state." @@ -3332,6 +3399,11 @@ msgstr "" msgid "Your name*" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "Your request contained an error, perhaps a mistyped tx/block/address hash. Try again, and check the developer tools console for more info." +msgstr "" + #: lib/block_scout_web/templates/address/overview.html.eex:111 #, elixir-autogen, elixir-format msgid "at" @@ -3442,71 +3514,3 @@ msgstr "" #, elixir-autogen, elixir-format msgid "truffle flattener" msgstr "" - -#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:29 -#, elixir-autogen, elixir-format -msgid "Sign in" -msgstr "" - -#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:11 -#, elixir-autogen, elixir-format -msgid "Signed in as " -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:8 -#, elixir-autogen, elixir-format -msgid "1. If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:9 -#, elixir-autogen, elixir-format -msgid "2. It could still be in the TX Pool of a different node, waiting to be broadcasted." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:10 -#, elixir-autogen, elixir-format -msgid "3. During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:11 -#, elixir-autogen, elixir-format -msgid "4. If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." -msgstr "" - -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "An unexpected error has occurred. Try reloading the page, or come back soon and try again." -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:9 -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:9 -#: lib/block_scout_web/templates/page_not_found/index.html.eex:9 -#: lib/block_scout_web/templates/transaction/not_found.html.eex:13 -#, elixir-autogen, elixir-format -msgid "Back to home" -msgstr "" - -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:7 -#, elixir-autogen, elixir-format -msgid "Internal server error" -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:7 -#, elixir-autogen, elixir-format -msgid "Request cannot be processed" -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:6 -#, elixir-autogen, elixir-format -msgid "Sorry, we are unable to locate this transaction hash" -msgstr "" - -#: lib/block_scout_web/templates/page_not_found/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "This page is no longer explorable! If you are lost, use the search bar to find what you are looking for." -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "Your request contained an error, perhaps a mistyped tx/block/address hash. Try again, and check the developer tools console for more info." -msgstr "" diff --git a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po index 1374d3da55..98f827df8a 100644 --- a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po +++ b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po @@ -81,11 +81,31 @@ msgstr "" msgid ") may be added for each contract. Click the Add Library button to add an additional one." msgstr "" -#: lib/block_scout_web/templates/layout/app.html.eex:236 +#: lib/block_scout_web/templates/layout/app.html.eex:171 #, elixir-autogen, elixir-format msgid "- We're indexing this chain right now. Some of the counts may be inaccurate." msgstr "" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:8 +#, elixir-autogen, elixir-format +msgid "1. If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:9 +#, elixir-autogen, elixir-format +msgid "2. It could still be in the TX Pool of a different node, waiting to be broadcasted." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:10 +#, elixir-autogen, elixir-format +msgid "3. During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +msgstr "" + +#: lib/block_scout_web/templates/transaction/not_found.html.eex:11 +#, elixir-autogen, elixir-format +msgid "4. If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +msgstr "" + #: lib/block_scout_web/templates/block/overview.html.eex:195 #, elixir-autogen, elixir-format msgid "64-bit hash of value verifying proof-of-work (note: null for POA chains)." @@ -319,6 +339,11 @@ msgstr "" msgid "Amount of distributed reward. Miners receive a static block reward + Tx fees + uncle fees." msgstr "" +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "An unexpected error has occurred. Try reloading the page, or come back soon and try again." +msgstr "" + #: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 #, elixir-autogen, elixir-format msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." @@ -364,6 +389,14 @@ msgstr "" msgid "Back to Watch list (Cancel)" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:9 +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:9 +#: lib/block_scout_web/templates/page_not_found/index.html.eex:9 +#: lib/block_scout_web/templates/transaction/not_found.html.eex:13 +#, elixir-autogen, elixir-format +msgid "Back to home" +msgstr "" + #: lib/block_scout_web/templates/account/watchlist/show.html.eex:24 #: lib/block_scout_web/templates/address/overview.html.eex:150 #: lib/block_scout_web/templates/address_token/overview.html.eex:51 @@ -1515,6 +1548,11 @@ msgstr "" msgid "Internal Transactions" msgstr "" +#: lib/block_scout_web/templates/internal_server_error/index.html.eex:7 +#, elixir-autogen, elixir-format +msgid "Internal server error" +msgstr "" + #: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:19 #: lib/block_scout_web/views/tokens/overview_view.ex:42 @@ -2001,6 +2039,10 @@ msgid "Position %{index}" msgstr "" #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +#, elixir-autogen, elixir-format +msgid "Potential matches from contract method database:" +msgstr "" + #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 #, elixir-autogen, elixir-format msgid "Potential matches from our contract method database:" @@ -2136,6 +2178,11 @@ msgstr "" msgid "Request a public tag/label" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:7 +#, elixir-autogen, elixir-format +msgid "Request cannot be processed" +msgstr "" + #: lib/block_scout_web/templates/account/public_tags_request/index.html.eex:37 #, elixir-autogen, elixir-format msgid "Request to add public tag" @@ -2275,11 +2322,21 @@ msgstr "" msgid "Shows total assets held in the address" msgstr "" +#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:29 +#, elixir-autogen, elixir-format +msgid "Sign in" +msgstr "" + #: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:20 #, elixir-autogen, elixir-format msgid "Sign out" msgstr "" +#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:11 +#, elixir-autogen, elixir-format +msgid "Signed in as " +msgstr "" + #: lib/block_scout_web/templates/block/overview.html.eex:114 #, elixir-autogen, elixir-format msgid "Size" @@ -2343,6 +2400,11 @@ msgstr "" msgid "Something went wrong, click to retry." msgstr "" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:6 +#, elixir-autogen, elixir-format +msgid "Sorry, we are unable to locate this transaction hash" +msgstr "" + #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:63 #, elixir-autogen, elixir-format msgid "Sources *.sol files" @@ -2632,6 +2694,11 @@ msgstr "" msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." msgstr "" +#: lib/block_scout_web/templates/page_not_found/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "This page is no longer explorable! If you are lost, use the search bar to find what you are looking for." +msgstr "" + #: lib/block_scout_web/templates/transaction_state/index.html.eex:17 #, elixir-autogen, elixir-format msgid "This transaction hasn't changed state." @@ -3332,6 +3399,11 @@ msgstr "" msgid "Your name*" msgstr "" +#: lib/block_scout_web/templates/error422/index.html.eex:8 +#, elixir-autogen, elixir-format +msgid "Your request contained an error, perhaps a mistyped tx/block/address hash. Try again, and check the developer tools console for more info." +msgstr "" + #: lib/block_scout_web/templates/address/overview.html.eex:111 #, elixir-autogen, elixir-format msgid "at" @@ -3442,71 +3514,3 @@ msgstr "" #, elixir-autogen, elixir-format msgid "truffle flattener" msgstr "" - -#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:29 -#, elixir-autogen, elixir-format -msgid "Sign in" -msgstr "" - -#: lib/block_scout_web/templates/layout/_account_menu_item.html.eex:11 -#, elixir-autogen, elixir-format -msgid "Signed in as " -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:8 -#, elixir-autogen, elixir-format, fuzzy -msgid "1. If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:9 -#, elixir-autogen, elixir-format, fuzzy -msgid "2. It could still be in the TX Pool of a different node, waiting to be broadcasted." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:10 -#, elixir-autogen, elixir-format, fuzzy -msgid "3. During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:11 -#, elixir-autogen, elixir-format, fuzzy -msgid "4. If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." -msgstr "" - -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "An unexpected error has occurred. Try reloading the page, or come back soon and try again." -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:9 -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:9 -#: lib/block_scout_web/templates/page_not_found/index.html.eex:9 -#: lib/block_scout_web/templates/transaction/not_found.html.eex:13 -#, elixir-autogen, elixir-format, fuzzy -msgid "Back to home" -msgstr "" - -#: lib/block_scout_web/templates/internal_server_error/index.html.eex:7 -#, elixir-autogen, elixir-format -msgid "Internal server error" -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:7 -#, elixir-autogen, elixir-format -msgid "Request cannot be processed" -msgstr "" - -#: lib/block_scout_web/templates/transaction/not_found.html.eex:6 -#, elixir-autogen, elixir-format, fuzzy -msgid "Sorry, we are unable to locate this transaction hash" -msgstr "" - -#: lib/block_scout_web/templates/page_not_found/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "This page is no longer explorable! If you are lost, use the search bar to find what you are looking for." -msgstr "" - -#: lib/block_scout_web/templates/error422/index.html.eex:8 -#, elixir-autogen, elixir-format -msgid "Your request contained an error, perhaps a mistyped tx/block/address hash. Try again, and check the developer tools console for more info." -msgstr "" diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 6d5425bda9..3d8160ecec 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -8,7 +8,9 @@ import Config # General application configuration config :explorer, ecto_repos: [Explorer.Repo, Explorer.Repo.Account], - token_functions_reader_max_retries: 3 + token_functions_reader_max_retries: 3, + # for not fully indexed blockchains + decode_not_a_contract_calls: System.get_env("DECODE_NOT_A_CONTRACT_CALLS") == "true" config :explorer, Explorer.Counters.AverageBlockTime, enabled: true, diff --git a/apps/explorer/lib/explorer/chain/cache/block_number.ex b/apps/explorer/lib/explorer/chain/cache/block_number.ex index 90ee4892ee..38ab8d41c6 100644 --- a/apps/explorer/lib/explorer/chain/cache/block_number.ex +++ b/apps/explorer/lib/explorer/chain/cache/block_number.ex @@ -13,11 +13,11 @@ defmodule Explorer.Chain.Cache.BlockNumber do alias Explorer.Chain - defp handle_update(_key, nil, value), do: {:ok, value} + def handle_update(_key, nil, value), do: {:ok, value} - defp handle_update(:min, old_value, new_value), do: {:ok, min(new_value, old_value)} + def handle_update(:min, old_value, new_value), do: {:ok, min(new_value, old_value)} - defp handle_update(:max, old_value, new_value), do: {:ok, max(new_value, old_value)} + def handle_update(:max, old_value, new_value), do: {:ok, max(new_value, old_value)} defp handle_fallback(key) do result = fetch_from_db(key) diff --git a/apps/explorer/lib/explorer/chain/log.ex b/apps/explorer/lib/explorer/chain/log.ex index 4a23818881..3d3c5bdb0e 100644 --- a/apps/explorer/lib/explorer/chain/log.ex +++ b/apps/explorer/lib/explorer/chain/log.ex @@ -8,6 +8,7 @@ defmodule Explorer.Chain.Log do alias ABI.{Event, FunctionSelector} alias Explorer.{Chain, Repo} alias Explorer.Chain.{Address, Block, ContractMethod, Data, Hash, Transaction} + alias Explorer.SmartContract.SigProviderInterface @required_attrs ~w(address_hash data block_hash index transaction_hash)a @optional_attrs ~w(first_topic second_topic third_topic fourth_topic type block_number)a @@ -139,13 +140,13 @@ defmodule Explorer.Chain.Log do {:error, :could_not_decode} -> case find_candidates(log, transaction) do {:error, :contract_not_verified, []} -> - {:error, :could_not_decode} + decode_event_via_sig_provider(log, transaction) {:error, :contract_not_verified, candidates} -> {:error, :contract_verified, candidates} _ -> - {:error, :could_not_decode} + decode_event_via_sig_provider(log, transaction) end output -> @@ -199,7 +200,8 @@ defmodule Explorer.Chain.Log do end) |> Enum.take(1) - {:error, :contract_not_verified, candidates} + {:error, :contract_not_verified, + if(candidates == [], do: decode_event_via_sig_provider(log, transaction, true), else: candidates)} end defp find_and_decode(abi, log, transaction) do @@ -240,6 +242,39 @@ defmodule Explorer.Chain.Log do IO.iodata_to_binary([name, "(", text, ")"]) end + defp decode_event_via_sig_provider(log, transaction, only_candidates? \\ false) do + with true <- SigProviderInterface.enabled?(), + {:ok, result} <- + SigProviderInterface.decode_event( + [ + log.first_topic, + log.second_topic, + log.third_topic, + log.fourth_topic + ], + log.data + ), + true <- is_list(result), + false <- Enum.empty?(result), + abi <- [result |> List.first() |> Map.put("type", "event")], + {:ok, selector, mapping} <- find_and_decode(abi, log, transaction), + identifier <- Base.encode16(selector.method_id, case: :lower), + text <- function_call(selector.function, mapping) do + if only_candidates? do + [{:ok, identifier, text, mapping}] + else + {:error, :contract_not_verified, [{:ok, identifier, text, mapping}]} + end + else + _ -> + if only_candidates? do + [] + else + {:error, :could_not_decode} + end + end + end + def decode16!(nil), do: nil def decode16!(value) do diff --git a/apps/explorer/lib/explorer/chain/transaction.ex b/apps/explorer/lib/explorer/chain/transaction.ex index a529e5ea3e..e4eeabaaab 100644 --- a/apps/explorer/lib/explorer/chain/transaction.ex +++ b/apps/explorer/lib/explorer/chain/transaction.ex @@ -30,6 +30,7 @@ defmodule Explorer.Chain.Transaction do } alias Explorer.Chain.Transaction.{Fork, Status} + alias Explorer.SmartContract.SigProviderInterface @optional_attrs ~w(max_priority_fee_per_gas max_fee_per_gas block_hash block_number created_contract_address_hash cumulative_gas_used earliest_processing_start error gas_used index created_contract_code_indexed_at status to_address_hash revert_reason type has_error_in_internal_txs)a @@ -454,7 +455,12 @@ defmodule Explorer.Chain.Transaction do case Integer.parse(hex_revert_reason, 16) do {number, ""} -> binary_revert_reason = :binary.encode_unsigned(number) - decoded_input_data(%Transaction{to_address: smart_contract, hash: hash, input: %{bytes: binary_revert_reason}}) + + decoded_input_data(%Transaction{ + to_address: smart_contract, + hash: hash, + input: %Data{bytes: binary_revert_reason} + }) _ -> hex_revert_reason @@ -462,40 +468,60 @@ defmodule Explorer.Chain.Transaction do end # Because there is no contract association, we know the contract was not verified - def decoded_input_data(%__MODULE__{to_address: nil}), do: {:error, :no_to_address} - def decoded_input_data(%NotLoaded{}), do: {:error, :not_loaded} - def decoded_input_data(%__MODULE__{input: %{bytes: bytes}}) when bytes in [nil, <<>>], do: {:error, :no_input_data} - def decoded_input_data(%__MODULE__{to_address: %{contract_code: nil}}), do: {:error, :not_a_contract_call} + def decoded_input_data(tx, extract_names? \\ false) - def decoded_input_data(%__MODULE__{ - to_address: %{smart_contract: %NotLoaded{}}, - input: input, - hash: hash - }) do - decoded_input_data(%__MODULE__{ - to_address: %{smart_contract: nil}, - input: input, - hash: hash - }) + def decoded_input_data(%__MODULE__{to_address: nil}, _), do: {:error, :no_to_address} + def decoded_input_data(%NotLoaded{}, _), do: {:error, :not_loaded} + def decoded_input_data(%__MODULE__{input: %{bytes: bytes}}, _) when bytes in [nil, <<>>], do: {:error, :no_input_data} + + if not Application.compile_env(:explorer, :decode_not_a_contract_calls) do + def decoded_input_data(%__MODULE__{to_address: %{contract_code: nil}}, _), do: {:error, :not_a_contract_call} end - def decoded_input_data(%__MODULE__{ - to_address: %NotLoaded{}, + def decoded_input_data( + %__MODULE__{ + to_address: %NotLoaded{}, + input: input, + hash: hash + }, + extract_names? + ) do + decoded_input_data( + %__MODULE__{ + to_address: %{smart_contract: nil}, input: input, hash: hash - }) do - decoded_input_data(%__MODULE__{ - to_address: %{smart_contract: nil}, - input: input, - hash: hash - }) + }, + extract_names? + ) end - def decoded_input_data(%__MODULE__{ + def decoded_input_data( + %__MODULE__{ + to_address: %{smart_contract: %NotLoaded{}}, + input: input, + hash: hash + }, + extract_names? + ) do + decoded_input_data( + %__MODULE__{ to_address: %{smart_contract: nil}, - input: %{bytes: <> = data}, + input: input, hash: hash - }) do + }, + extract_names? + ) + end + + def decoded_input_data( + %__MODULE__{ + to_address: %{smart_contract: nil}, + input: %{bytes: <> = data} = input, + hash: hash + }, + extract_names? + ) do candidates_query = from( contract_method in ContractMethod, @@ -513,28 +539,35 @@ defmodule Explorer.Chain.Transaction do end end) - {:error, :contract_not_verified, candidates} + {:error, :contract_not_verified, + if(candidates == [], do: decode_function_call_via_sig_provider(input, hash, extract_names?), else: candidates)} end - def decoded_input_data(%__MODULE__{to_address: %{smart_contract: nil}}) do + def decoded_input_data(%__MODULE__{to_address: %{smart_contract: nil}}, _) do {:error, :contract_not_verified, []} end - def decoded_input_data(%__MODULE__{ - input: %{bytes: data}, - to_address: %{smart_contract: smart_contract}, - hash: hash - }) do + def decoded_input_data( + %__MODULE__{ + input: %{bytes: data} = input, + to_address: %{smart_contract: smart_contract}, + hash: hash + }, + extract_names? + ) do case do_decoded_input_data(data, smart_contract, hash) do - # In some cases transactions use methods of some unpredictadle contracts, so we can try to look up for method in a whole DB + # In some cases transactions use methods of some unpredictable contracts, so we can try to look up for method in a whole DB {:error, :could_not_decode} -> - case decoded_input_data(%__MODULE__{ - to_address: %{smart_contract: nil}, - input: %{bytes: data}, - hash: hash - }) do + case decoded_input_data( + %__MODULE__{ + to_address: %{smart_contract: nil}, + input: %{bytes: data}, + hash: hash + }, + extract_names? + ) do {:error, :contract_not_verified, []} -> - {:error, :could_not_decode} + decode_function_call_via_sig_provider_wrapper(input, hash, extract_names?) {:error, :contract_not_verified, candidates} -> {:error, :contract_verified, candidates} @@ -548,6 +581,16 @@ defmodule Explorer.Chain.Transaction do end end + defp decode_function_call_via_sig_provider_wrapper(input, hash, extract_names?) do + case decode_function_call_via_sig_provider(input, hash, extract_names?) do + [] -> + {:error, :could_not_decode} + + result -> + {:error, :contract_verified, result} + end + end + defp do_decoded_input_data(data, smart_contract, hash) do full_abi = Chain.combine_proxy_implementation_abi(smart_contract) @@ -558,6 +601,21 @@ defmodule Explorer.Chain.Transaction do do: {:ok, identifier, text, mapping} end + defp decode_function_call_via_sig_provider(%{bytes: data} = input, hash, extract_names?) do + with true <- SigProviderInterface.enabled?(), + false <- extract_names?, + {:ok, result} <- SigProviderInterface.decode_function_call(input), + true <- is_list(result), + false <- Enum.empty?(result), + abi <- [result |> List.first() |> Map.put("outputs", []) |> Map.put("type", "function")], + {:ok, _, _, _} = candidate <- do_decoded_input_data(data, %SmartContract{abi: abi, address_hash: nil}, hash) do + [candidate] + else + _ -> + [] + end + end + def get_method_name( %__MODULE__{ input: %{bytes: <>} @@ -566,11 +624,14 @@ defmodule Explorer.Chain.Transaction do if transaction.created_contract_address_hash do nil else - case Transaction.decoded_input_data(%__MODULE__{ - to_address: %{smart_contract: nil}, - input: transaction.input, - hash: transaction.hash - }) do + case Transaction.decoded_input_data( + %__MODULE__{ + to_address: %{smart_contract: nil}, + input: transaction.input, + hash: transaction.hash + }, + true + ) do {:error, :contract_not_verified, [{:ok, _method_id, decoded_func, _}]} -> parse_method_name(decoded_func) diff --git a/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface.ex b/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface.ex index 34a2eab02d..ec3d4a3e75 100644 --- a/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface.ex +++ b/apps/explorer/lib/explorer/smart_contract/rust_verifier_interface.ex @@ -6,7 +6,7 @@ defmodule Explorer.SmartContract.RustVerifierInterface do alias HTTPoison.Response require Logger - @post_timeout :infinity + @post_timeout :timer.seconds(30) @request_error_msg "Error while sending request to verification microservice" def verify_multi_part( diff --git a/apps/explorer/lib/explorer/smart_contract/sig_provider_interface.ex b/apps/explorer/lib/explorer/smart_contract/sig_provider_interface.ex new file mode 100644 index 0000000000..b01ce62571 --- /dev/null +++ b/apps/explorer/lib/explorer/smart_contract/sig_provider_interface.ex @@ -0,0 +1,88 @@ +defmodule Explorer.SmartContract.SigProviderInterface do + @moduledoc """ + Adapter for decoding events and function calls with https://github.com/blockscout/blockscout-rs/tree/main/sig-provider + """ + + alias Explorer.Utility.RustService + alias HTTPoison.Response + require Logger + + @request_error_msg "Error while sending request to sig-provider" + + def decode_function_call(input) do + base_url = tx_input_decode_url() + + url = + base_url + |> URI.parse() + |> Map.put(:query, URI.encode_query(%{"txInput" => to_string(input)})) + |> URI.to_string() + + http_get_request(url) + end + + def decode_event(topics, data) do + base_url = event_decode_url() + + url = + base_url + |> URI.parse() + |> Map.put( + :query, + URI.encode_query(%{"topics" => topics |> Enum.reject(&is_nil/1) |> Enum.join(","), "data" => to_string(data)}) + ) + |> URI.to_string() + + http_get_request(url) + end + + def http_get_request(url) do + case HTTPoison.get(url) do + {:ok, %Response{body: body, status_code: 200}} -> + proccess_sig_provider_response(body) + + {:ok, %Response{body: body, status_code: _}} -> + {:error, body} + + {:error, error} -> + old_truncate = Application.get_env(:logger, :truncate) + Logger.configure(truncate: :infinity) + + Logger.error(fn -> + [ + "Error while sending request to sig-provider url: #{url}: ", + inspect(error, limit: :infinity, printable_limit: :infinity) + ] + end) + + Logger.configure(truncate: old_truncate) + {:error, @request_error_msg} + end + end + + def proccess_sig_provider_response(body) when is_binary(body) do + case Jason.decode(body) do + {:ok, decoded} -> + proccess_sig_provider_response(decoded) + + _ -> + {:error, body} + end + end + + def proccess_sig_provider_response(results) when is_list(results), do: {:ok, results} + + def proccess_sig_provider_response(other_responses), do: {:error, other_responses} + + def tx_input_decode_url, do: "#{base_api_url()}" <> "/function" + + def event_decode_url, do: "#{base_api_url()}" <> "/event" + + def base_api_url, do: "#{base_url()}" <> "/api/v1/abi" + + def base_url do + RustService.base_url(__MODULE__) + end + + def enabled?, do: Application.get_env(:explorer, __MODULE__)[:enabled] +end diff --git a/apps/explorer/lib/explorer/smart_contract/solidity/verifier.ex b/apps/explorer/lib/explorer/smart_contract/solidity/verifier.ex index eb849469ac..65c9ef4198 100644 --- a/apps/explorer/lib/explorer/smart_contract/solidity/verifier.ex +++ b/apps/explorer/lib/explorer/smart_contract/solidity/verifier.ex @@ -57,6 +57,7 @@ defmodule Explorer.SmartContract.Solidity.Verifier do }) |> Map.put("contract_libraries", params["external_libraries"]) |> Map.put("optimization_runs", prepare_optimization_runs(params["optimization"], params["optimization_runs"])) + |> Map.put("evm_version", Map.get(params, "evm_version", "default")) |> RustVerifierInterface.verify_multi_part() end diff --git a/apps/explorer/lib/explorer/third_party_integrations/sourcify.ex b/apps/explorer/lib/explorer/third_party_integrations/sourcify.ex index 5ec6cee8cc..dbe51a1b74 100644 --- a/apps/explorer/lib/explorer/third_party_integrations/sourcify.ex +++ b/apps/explorer/lib/explorer/third_party_integrations/sourcify.ex @@ -8,6 +8,7 @@ defmodule Explorer.ThirdPartyIntegrations.Sourcify do alias HTTPoison.{Error, Response} alias Tesla.Multipart + @post_timeout :timer.seconds(30) @no_metadata_message "Sourcify did not return metadata" @failed_verification_message "Unsuccessful Sourcify verification" @@ -138,7 +139,8 @@ defmodule Explorer.ThirdPartyIntegrations.Sourcify do end def http_post_request_rust_microservice(url, body) do - request = HTTPoison.post(url, Jason.encode!(body), [{"Content-Type", "application/json"}], recv_timeout: :infinity) + request = + HTTPoison.post(url, Jason.encode!(body), [{"Content-Type", "application/json"}], recv_timeout: @post_timeout) case request do {:ok, %Response{body: body, status_code: 200}} -> diff --git a/config/runtime.exs b/config/runtime.exs index 70d8d389d1..df4085ac07 100644 --- a/config/runtime.exs +++ b/config/runtime.exs @@ -223,10 +223,6 @@ config :explorer, restricted_list: System.get_env("RESTRICTED_LIST", nil), restricted_list_key: System.get_env("RESTRICTED_LIST_KEY", nil) -config :explorer, Explorer.Visualize.Sol2uml, - service_url: System.get_env("VISUALIZE_SOL2UML_SERVICE_URL"), - enabled: System.get_env("VISUALIZE_SOL2UML_ENABLED") == "true" - config :explorer, Explorer.Chain.Events.Listener, enabled: if(disable_webapp == "true" && disable_indexer == "true", @@ -358,6 +354,14 @@ config :explorer, Explorer.SmartContract.RustVerifierInterface, service_url: System.get_env("RUST_VERIFICATION_SERVICE_URL"), enabled: System.get_env("ENABLE_RUST_VERIFICATION_SERVICE") == "true" +config :explorer, Explorer.Visualize.Sol2uml, + service_url: System.get_env("VISUALIZE_SOL2UML_SERVICE_URL"), + enabled: System.get_env("VISUALIZE_SOL2UML_ENABLED") == "true" + +config :explorer, Explorer.SmartContract.SigProviderInterface, + service_url: System.get_env("SIG_PROVIDER_SERVICE_URL"), + enabled: System.get_env("SIG_PROVIDER_ENABLED") == "true" + config :explorer, Explorer.ThirdPartyIntegrations.AirTable, table_url: System.get_env("ACCOUNT_PUBLIC_TAGS_AIRTABLE_URL"), api_key: System.get_env("ACCOUNT_PUBLIC_TAGS_AIRTABLE_API_KEY") diff --git a/docker-compose/docker-compose-no-build-erigon.yml b/docker-compose/docker-compose-no-build-erigon.yml index 547ecb7989..be8769918f 100644 --- a/docker-compose/docker-compose-no-build-erigon.yml +++ b/docker-compose/docker-compose-no-build-erigon.yml @@ -24,6 +24,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -52,6 +53,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -62,6 +64,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -71,3 +74,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-build-ganache.yml b/docker-compose/docker-compose-no-build-ganache.yml index 5099c8d68a..a7420b4e14 100644 --- a/docker-compose/docker-compose-no-build-ganache.yml +++ b/docker-compose/docker-compose-no-build-ganache.yml @@ -22,6 +22,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -53,6 +54,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -63,6 +65,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -72,3 +75,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-build-geth.yml b/docker-compose/docker-compose-no-build-geth.yml index 4486fdb164..3e1550859d 100644 --- a/docker-compose/docker-compose-no-build-geth.yml +++ b/docker-compose/docker-compose-no-build-geth.yml @@ -24,6 +24,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -52,6 +53,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -62,6 +64,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -71,3 +74,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-build-hardhat-network.yml b/docker-compose/docker-compose-no-build-hardhat-network.yml index e979d61597..c61926ecc9 100644 --- a/docker-compose/docker-compose-no-build-hardhat-network.yml +++ b/docker-compose/docker-compose-no-build-hardhat-network.yml @@ -22,6 +22,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -51,6 +52,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -61,6 +63,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -70,3 +73,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-build-nethermind.yml b/docker-compose/docker-compose-no-build-nethermind.yml index cca6be2cd7..2fd515a69e 100644 --- a/docker-compose/docker-compose-no-build-nethermind.yml +++ b/docker-compose/docker-compose-no-build-nethermind.yml @@ -24,6 +24,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -52,6 +53,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -62,6 +64,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -71,3 +74,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-build-no-db-container.yml b/docker-compose/docker-compose-no-build-no-db-container.yml index 42509e1c7e..423355cc4f 100644 --- a/docker-compose/docker-compose-no-build-no-db-container.yml +++ b/docker-compose/docker-compose-no-build-no-db-container.yml @@ -11,6 +11,7 @@ services: - ./redis-data:/data blockscout: + platform: linux/x86_64 depends_on: - smart-contract-verifier - redis_db @@ -35,6 +36,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -45,6 +47,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -54,3 +57,11 @@ services: ports: - 8050:8050 + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-latest} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/docker-compose-no-rust-services.yml b/docker-compose/docker-compose-no-rust-services.yml index f0ede3f163..b8fd9fcb3b 100644 --- a/docker-compose/docker-compose-no-rust-services.yml +++ b/docker-compose/docker-compose-no-rust-services.yml @@ -22,6 +22,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - redis_db diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index b9b4881098..435f9fa60b 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -22,6 +22,7 @@ services: - 7432:5432 blockscout: + platform: linux/x86_64 depends_on: - db - smart-contract-verifier @@ -57,6 +58,7 @@ services: - ./logs/:/app/logs/ smart-contract-verifier: + platform: linux/x86_64 image: ghcr.io/blockscout/smart-contract-verifier:${SMART_CONTRACT_VERIFIER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -67,6 +69,7 @@ services: - 8043:8043 visualizer: + platform: linux/x86_64 image: ghcr.io/blockscout/visualizer:${VISUALIZER_DOCKER_TAG:-latest} pull_policy: always restart: always @@ -75,3 +78,12 @@ services: - ./envs/common-visualizer.env ports: - 8050:8050 + + sig-provider: + platform: linux/x86_64 + image: ghcr.io/blockscout/sig-provider:${SIG_PROVIDER_DOCKER_TAG:-main} + pull_policy: always + restart: always + container_name: 'sig-provider' + ports: + - 8051:8050 diff --git a/docker-compose/envs/common-blockscout.env b/docker-compose/envs/common-blockscout.env index 819b42fab1..2c40c7f60b 100644 --- a/docker-compose/envs/common-blockscout.env +++ b/docker-compose/envs/common-blockscout.env @@ -140,6 +140,9 @@ ENABLE_RUST_VERIFICATION_SERVICE=true RUST_VERIFICATION_SERVICE_URL=http://host.docker.internal:8043/ VISUALIZE_SOL2UML_ENABLED=true VISUALIZE_SOL2UML_SERVICE_URL=http://host.docker.internal:8050/ +SIG_PROVIDER_ENABLED=true +SIG_PROVIDER_SERVICE_URL=http://sig-provider:8050/ +DECODE_NOT_A_CONTRACT_CALLS=true # DATABASE_READ_ONLY_API_URL= # ACCOUNT_DATABASE_URL= # ACCOUNT_POOL_SIZE= diff --git a/docker/Makefile b/docker/Makefile index f66747118f..b87084cfc7 100644 --- a/docker/Makefile +++ b/docker/Makefile @@ -571,7 +571,15 @@ endif ifdef AMPLITUDE_URL BLOCKSCOUT_CONTAINER_PARAMS += -e 'AMPLITUDE_URL=$(AMPLITUDE_URL)' endif - +ifdef SIG_PROVIDER_ENABLED + BLOCKSCOUT_CONTAINER_PARAMS += -e 'SIG_PROVIDER_ENABLED=$(SIG_PROVIDER_ENABLED)' +endif +ifdef SIG_PROVIDER_SERVICE_URL + BLOCKSCOUT_CONTAINER_PARAMS += -e 'SIG_PROVIDER_SERVICE_URL=$(SIG_PROVIDER_SERVICE_URL)' +endif +ifdef DECODE_NOT_A_CONTRACT_CALLS + BLOCKSCOUT_CONTAINER_PARAMS += -e 'DECODE_NOT_A_CONTRACT_CALLS=$(DECODE_NOT_A_CONTRACT_CALLS)' +endif HAS_BLOCKSCOUT_IMAGE := $(shell docker images | grep -sw "${BS_CONTAINER_IMAGE} ") build: