diff --git a/.dialyzer-ignore b/.dialyzer-ignore index f93d322772..51b6b7317e 100644 --- a/.dialyzer-ignore +++ b/.dialyzer-ignore @@ -13,6 +13,5 @@ lib/block_scout_web/schema/types.ex:31 lib/phoenix/router.ex:324 lib/phoenix/router.ex:402 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 diff --git a/.github/workflows/config.yml b/.github/workflows/config.yml index 9fd04878c9..5ede584c4a 100644 --- a/.github/workflows/config.yml +++ b/.github/workflows/config.yml @@ -40,7 +40,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps- @@ -100,7 +100,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -124,7 +124,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -147,7 +147,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -187,7 +187,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -213,7 +213,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -241,7 +241,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -287,7 +287,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -346,7 +346,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -402,7 +402,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -469,7 +469,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" @@ -535,7 +535,7 @@ jobs: path: | deps _build - key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_13-${{ hashFiles('mix.lock') }} + key: ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-mixlockhash_14-${{ hashFiles('mix.lock') }} restore-keys: | ${{ runner.os }}-${{ env.ELIXIR_VERSION }}-${{ env.OTP_VERSION }}-${{ env.MIX_ENV }}-deps-" diff --git a/CHANGELOG.md b/CHANGELOG.md index d3c1fe9c29..85672b0c7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ ### 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 diff --git a/apps/block_scout_web/assets/js/pages/address.js b/apps/block_scout_web/assets/js/pages/address.js index 6e60ba5f28..53feee1d9f 100644 --- a/apps/block_scout_web/assets/js/pages/address.js +++ b/apps/block_scout_web/assets/js/pages/address.js @@ -92,6 +92,11 @@ export function reducer (state = initialState, action) { newBlockNumber: action.msg.currentCoinBalanceBlockNumber }) } + case 'RECEIVED_CHANGED_BYTECODE_EVENT': { + return Object.assign({}, state, { + isChangedBytecode: true + }) + } default: return state } @@ -218,6 +223,13 @@ const elements = { load ($el) { return { initialBlockNumber: numeral($el.data('last-balance-update')).value() } } + }, + '[data-selector="hidden-bytecode-warning"]': { + render ($el, state) { + if (state.isChangedBytecode) { + return $el.removeClass('d-none') + } + } } } @@ -301,6 +313,9 @@ if ($addressDetailsPage.length) { msg: humps.camelizeKeys(msg) }) }) + addressChannel.on('changed_bytecode', () => { + store.dispatch({ type: 'RECEIVED_CHANGED_BYTECODE_EVENT' }) + }) const blocksChannel = socket.channel(`blocks:${addressHash}`, {}) blocksChannel.join() diff --git a/apps/block_scout_web/lib/block_scout_web/notifier.ex b/apps/block_scout_web/lib/block_scout_web/notifier.ex index dc95e511c8..e4dc52688a 100644 --- a/apps/block_scout_web/lib/block_scout_web/notifier.ex +++ b/apps/block_scout_web/lib/block_scout_web/notifier.ex @@ -221,6 +221,10 @@ defmodule BlockScoutWeb.Notifier do Endpoint.broadcast("tokens:#{to_string(contract_address_hash)}", "token_total_supply", %{token: token}) end + def handle_event({:chain_event, :changed_bytecode, :on_demand, [address_hash]}) do + Endpoint.broadcast("addresses:#{to_string(address_hash)}", "changed_bytecode", %{}) + end + def handle_event(_), do: nil def fetch_compiler_version(compiler) do diff --git a/apps/block_scout_web/lib/block_scout_web/realtime_event_handler.ex b/apps/block_scout_web/lib/block_scout_web/realtime_event_handler.ex index eaf882b3e7..987f9370eb 100644 --- a/apps/block_scout_web/lib/block_scout_web/realtime_event_handler.ex +++ b/apps/block_scout_web/lib/block_scout_web/realtime_event_handler.ex @@ -29,6 +29,7 @@ defmodule BlockScoutWeb.RealtimeEventHandler do Subscriber.to(:address_token_balances, :on_demand) Subscriber.to(:contract_verification_result, :on_demand) Subscriber.to(:token_total_supply, :on_demand) + Subscriber.to(:changed_bytecode, :on_demand) # Does not come from the indexer Subscriber.to(:exchange_rate) Subscriber.to(:transaction_stats) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex index 63b350a958..570753f540 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex @@ -34,6 +34,12 @@ <% end %> <%= if smart_contract_verified && @address.smart_contract.is_changed_bytecode do %> <%= render BlockScoutWeb.CommonComponentsView, "_changed_bytecode_warning.html" %> + <% else %> + <%= if smart_contract_verified do %> +
+ <%= render BlockScoutWeb.CommonComponentsView, "_changed_bytecode_warning.html" %> +
+ <% end %> <% end %> <%= if smart_contract_verified || (!smart_contract_verified && metadata_for_verification) do %> <% target_contract = if smart_contract_verified, do: @address.smart_contract, else: metadata_for_verification %> diff --git a/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_functions.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_functions.html.eex index ab7f15ee97..a59a21e3b6 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_functions.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/smart_contract/_functions.html.eex @@ -20,6 +20,12 @@ <% end %> <%= if smart_contract_verified && @address.smart_contract.is_changed_bytecode do %> <%= render BlockScoutWeb.CommonComponentsView, "_changed_bytecode_warning.html" %> +<% else %> + <%= if smart_contract_verified do %> +
+ <%= render BlockScoutWeb.CommonComponentsView, "_changed_bytecode_warning.html" %> +
+ <% end %> <% end %> <%= if @contract_type == "proxy" do %>
diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 03f798a7aa..552385704d 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -614,12 +614,12 @@ msgstr "" msgid "Compiler" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:137 +#: lib/block_scout_web/templates/address_contract/index.html.eex:143 #, elixir-autogen, elixir-format msgid "Compiler Settings" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:66 +#: lib/block_scout_web/templates/address_contract/index.html.eex:72 #, elixir-autogen, elixir-format msgid "Compiler version" msgstr "" @@ -673,7 +673,7 @@ msgstr "" msgid "Connection Lost, click to load newer validations" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 #, elixir-autogen, elixir-format msgid "Constructor Arguments" msgstr "" @@ -689,7 +689,7 @@ msgstr "" msgid "Contract" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:152 +#: lib/block_scout_web/templates/address_contract/index.html.eex:158 #, elixir-autogen, elixir-format msgid "Contract ABI" msgstr "" @@ -719,8 +719,8 @@ msgstr "" msgid "Contract Creation" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:169 -#: lib/block_scout_web/templates/address_contract/index.html.eex:184 +#: lib/block_scout_web/templates/address_contract/index.html.eex:175 +#: lib/block_scout_web/templates/address_contract/index.html.eex:190 #, elixir-autogen, elixir-format msgid "Contract Creation Code" msgstr "" @@ -748,12 +748,12 @@ msgstr "" msgid "Contract name or address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:58 +#: lib/block_scout_web/templates/address_contract/index.html.eex:64 #, elixir-autogen, elixir-format msgid "Contract name:" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:101 +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 #, elixir-autogen, elixir-format msgid "Contract source code" msgstr "" @@ -768,7 +768,7 @@ msgstr "" msgid "Contracts" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:175 +#: lib/block_scout_web/templates/address_contract/index.html.eex:181 #, elixir-autogen, elixir-format msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgstr "" @@ -778,7 +778,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:154 +#: lib/block_scout_web/templates/address_contract/index.html.eex:160 #, elixir-autogen, elixir-format msgid "Copy ABI" msgstr "" @@ -804,7 +804,7 @@ msgstr "" msgid "Copy Address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:139 +#: lib/block_scout_web/templates/address_contract/index.html.eex:145 #, elixir-autogen, elixir-format msgid "Copy Compiler Settings" msgstr "" @@ -815,8 +815,8 @@ msgstr "" msgid "Copy Contract Address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:171 -#: lib/block_scout_web/templates/address_contract/index.html.eex:187 +#: lib/block_scout_web/templates/address_contract/index.html.eex:177 +#: lib/block_scout_web/templates/address_contract/index.html.eex:193 #, elixir-autogen, elixir-format msgid "Copy Contract Creation Code" msgstr "" @@ -826,8 +826,8 @@ msgstr "" msgid "Copy Decompiled Contract Code" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:208 -#: lib/block_scout_web/templates/address_contract/index.html.eex:218 +#: lib/block_scout_web/templates/address_contract/index.html.eex:214 +#: lib/block_scout_web/templates/address_contract/index.html.eex:224 #, elixir-autogen, elixir-format msgid "Copy Deployed ByteCode" msgstr "" @@ -858,13 +858,13 @@ msgstr "" msgid "Copy Parent Hash" msgstr "" -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:15 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:9 #, elixir-autogen, elixir-format msgid "Copy Raw Trace" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:115 -#: lib/block_scout_web/templates/address_contract/index.html.eex:127 +#: lib/block_scout_web/templates/address_contract/index.html.eex:121 +#: lib/block_scout_web/templates/address_contract/index.html.eex:133 #, elixir-autogen, elixir-format msgid "Copy Source Code" msgstr "" @@ -909,7 +909,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:41 #: lib/block_scout_web/templates/transaction/overview.html.eex:494 #: lib/block_scout_web/templates/transaction/overview.html.eex:500 -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:14 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:8 #, elixir-autogen, elixir-format msgid "Copy Value" msgstr "" @@ -994,7 +994,7 @@ msgid "Date & time of transaction inclusion, including length of time for confir msgstr "" #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:143 #, elixir-autogen, elixir-format msgid "Decimals" msgstr "" @@ -1035,8 +1035,8 @@ msgstr "" msgid "Delegate Call" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:206 -#: lib/block_scout_web/templates/address_contract/index.html.eex:214 +#: lib/block_scout_web/templates/address_contract/index.html.eex:212 +#: lib/block_scout_web/templates/address_contract/index.html.eex:220 #, elixir-autogen, elixir-format msgid "Deployed ByteCode" msgstr "" @@ -1066,7 +1066,7 @@ msgstr "" msgid "Difficulty" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:176 +#: lib/block_scout_web/templates/address_contract/index.html.eex:182 #, elixir-autogen, elixir-format msgid "Displaying the init data provided of the creating transaction." msgstr "" @@ -1141,7 +1141,7 @@ msgstr "" msgid "ETH RPC API Documentation" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +#: lib/block_scout_web/templates/address_contract/index.html.eex:83 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:30 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22 #, elixir-autogen, elixir-format @@ -1259,7 +1259,7 @@ msgstr "" msgid "Export Data" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:243 +#: lib/block_scout_web/templates/address_contract/index.html.eex:249 #, elixir-autogen, elixir-format msgid "External libraries" msgstr "" @@ -1285,7 +1285,7 @@ msgstr "" msgid "Fetching gas used..." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:112 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:124 #, elixir-autogen, elixir-format msgid "Fetching holders..." msgstr "" @@ -1303,7 +1303,7 @@ msgstr "" #: lib/block_scout_web/templates/address/overview.html.eex:221 #: lib/block_scout_web/templates/address/overview.html.eex:229 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:123 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:135 #, elixir-autogen, elixir-format msgid "Fetching transfers..." msgstr "" @@ -1426,7 +1426,7 @@ msgstr "" msgid "Hex (Default)" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:120 #, elixir-autogen, elixir-format msgid "Holders" msgstr "" @@ -1634,7 +1634,7 @@ msgstr "" #: lib/block_scout_web/templates/chain/show.html.eex:52 #: lib/block_scout_web/templates/layout/app.html.eex:50 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:96 #: lib/block_scout_web/views/address_view.ex:145 #, elixir-autogen, elixir-format msgid "Market Cap" @@ -1837,7 +1837,7 @@ msgstr "" msgid "No" msgstr "" -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:23 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:17 #, elixir-autogen, elixir-format msgid "No trace entries found." msgstr "" @@ -1853,7 +1853,7 @@ msgstr "" msgid "Not unique Token" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 #, elixir-autogen, elixir-format msgid "Number of accounts holding the token" msgstr "" @@ -1863,7 +1863,7 @@ msgstr "" msgid "Number of blocks validated by this validator." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 #, elixir-autogen, elixir-format msgid "Number of digits that come after the decimal place when displaying token value" msgstr "" @@ -1873,7 +1873,7 @@ msgstr "" msgid "Number of transactions related to this address." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:118 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130 #, elixir-autogen, elixir-format msgid "Number of transfers for the token" msgstr "" @@ -1901,12 +1901,12 @@ msgstr "" msgid "Optimization" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:62 +#: lib/block_scout_web/templates/address_contract/index.html.eex:68 #, elixir-autogen, elixir-format msgid "Optimization enabled" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:71 +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:62 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54 #, elixir-autogen, elixir-format @@ -2012,12 +2012,12 @@ msgstr "" #: lib/block_scout_web/templates/chain/show.html.eex:41 #: lib/block_scout_web/templates/layout/app.html.eex:51 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107 #, elixir-autogen, elixir-format msgid "Price" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:94 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 #, elixir-autogen, elixir-format msgid "Price per token on the exchanges" msgstr "" @@ -2072,7 +2072,7 @@ msgstr "" msgid "QR Code" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:100 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:106 #, elixir-autogen, elixir-format msgid "Query" msgstr "" @@ -2088,7 +2088,7 @@ msgid "Raw Input" msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:1 #: lib/block_scout_web/views/transaction_view.ex:530 #, elixir-autogen, elixir-format msgid "Raw Trace" @@ -2448,7 +2448,7 @@ msgstr "" msgid "The compiler version is specified in pragma solidity X.X.X. Use the compiler version rather than the nightly build. If using the Solidity compiler, run solc —version to check." msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:38 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:44 #, elixir-autogen, elixir-format msgid "The fallback function is executed on a call to the contract if none of the other functions match the given function signature, or if no data was supplied at all and there is no receive Ether function. The fallback function always receives data, but in order to also receive Ether it must be marked payable." msgstr "" @@ -2473,7 +2473,7 @@ msgstr "" msgid "The number of transactions in the block." msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:40 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:46 #, elixir-autogen, elixir-format msgid "The receive function is executed on a call to the contract with empty calldata. This is the function that is executed on plain Ether transfers (e.g. via .send() or .transfer()). If no such function exists, but a payable fallback function exists, the fallback function will be called on a plain Ether transfer. If neither a receive Ether nor a payable fallback function is present, the contract cannot receive Ether through regular transactions and throws an exception." msgstr "" @@ -2489,6 +2489,7 @@ msgid "The status of the transaction: Confirmed or Unconfirmed." msgstr "" #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:68 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83 #, elixir-autogen, elixir-format msgid "The total amount of tokens issued" msgstr "" @@ -2616,12 +2617,12 @@ msgstr "" msgid "This block has not been processed yet." msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:42 +#: lib/block_scout_web/templates/address_contract/index.html.eex:48 #, elixir-autogen, elixir-format msgid "This contract has been partially verified via Sourcify." msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:46 +#: lib/block_scout_web/templates/address_contract/index.html.eex:52 #, elixir-autogen, elixir-format msgid "This contract has been verified via Sourcify." msgstr "" @@ -2748,7 +2749,7 @@ msgstr "" msgid "Token name and symbol." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:154 #, elixir-autogen, elixir-format msgid "Token type" msgstr "" @@ -2811,7 +2812,7 @@ msgstr "" msgid "Total Difficulty" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 #, elixir-autogen, elixir-format msgid "Total Supply * Price" msgstr "" @@ -2832,6 +2833,7 @@ msgid "Total gas limit provided by all transactions in the block." msgstr "" #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 #, elixir-autogen, elixir-format msgid "Total supply" msgstr "" @@ -2940,7 +2942,7 @@ msgstr "" #: lib/block_scout_web/templates/address/overview.html.eex:219 #: lib/block_scout_web/templates/address/overview.html.eex:227 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 #, elixir-autogen, elixir-format msgid "Transfers" msgstr "" @@ -2977,7 +2979,7 @@ msgstr "" msgid "Type" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:141 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:153 #, elixir-autogen, elixir-format msgid "Type of the token standard" msgstr "" @@ -3092,7 +3094,7 @@ msgstr "" msgid "Verified Contracts" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:83 +#: lib/block_scout_web/templates/address_contract/index.html.eex:89 #, elixir-autogen, elixir-format msgid "Verified at" msgstr "" @@ -3109,8 +3111,8 @@ msgstr "" #: lib/block_scout_web/templates/address_contract/index.html.eex:28 #: lib/block_scout_web/templates/address_contract/index.html.eex:30 -#: lib/block_scout_web/templates/address_contract/index.html.eex:192 -#: lib/block_scout_web/templates/address_contract/index.html.eex:223 +#: lib/block_scout_web/templates/address_contract/index.html.eex:198 +#: lib/block_scout_web/templates/address_contract/index.html.eex:229 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14 #, elixir-autogen, elixir-format msgid "Verify & Publish" @@ -3226,7 +3228,7 @@ msgstr "" msgid "Vyper contract" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:136 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:142 #, elixir-autogen, elixir-format msgid "WEI" msgstr "" @@ -3263,7 +3265,7 @@ msgstr "" msgid "Wei" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:100 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:106 #, elixir-autogen, elixir-format msgid "Write" msgstr "" @@ -3376,7 +3378,7 @@ msgstr "" msgid "elements are displayed" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:38 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:44 #, elixir-autogen, elixir-format msgid "fallback" msgstr "" @@ -3413,7 +3415,7 @@ msgstr "" msgid "page" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:40 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:46 #, elixir-autogen, elixir-format msgid "receive" 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 f9409a4140..3120308832 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 @@ -614,12 +614,12 @@ msgstr "" msgid "Compiler" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:137 +#: lib/block_scout_web/templates/address_contract/index.html.eex:143 #, elixir-autogen, elixir-format msgid "Compiler Settings" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:66 +#: lib/block_scout_web/templates/address_contract/index.html.eex:72 #, elixir-autogen, elixir-format msgid "Compiler version" msgstr "" @@ -673,7 +673,7 @@ msgstr "" msgid "Connection Lost, click to load newer validations" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 #, elixir-autogen, elixir-format msgid "Constructor Arguments" msgstr "" @@ -689,7 +689,7 @@ msgstr "" msgid "Contract" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:152 +#: lib/block_scout_web/templates/address_contract/index.html.eex:158 #, elixir-autogen, elixir-format msgid "Contract ABI" msgstr "" @@ -719,8 +719,8 @@ msgstr "" msgid "Contract Creation" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:169 -#: lib/block_scout_web/templates/address_contract/index.html.eex:184 +#: lib/block_scout_web/templates/address_contract/index.html.eex:175 +#: lib/block_scout_web/templates/address_contract/index.html.eex:190 #, elixir-autogen, elixir-format msgid "Contract Creation Code" msgstr "" @@ -748,12 +748,12 @@ msgstr "" msgid "Contract name or address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:58 +#: lib/block_scout_web/templates/address_contract/index.html.eex:64 #, elixir-autogen, elixir-format msgid "Contract name:" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:101 +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 #, elixir-autogen, elixir-format msgid "Contract source code" msgstr "" @@ -768,7 +768,7 @@ msgstr "" msgid "Contracts" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:175 +#: lib/block_scout_web/templates/address_contract/index.html.eex:181 #, elixir-autogen, elixir-format msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgstr "" @@ -778,7 +778,7 @@ msgstr "" msgid "Contribute" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:154 +#: lib/block_scout_web/templates/address_contract/index.html.eex:160 #, elixir-autogen, elixir-format msgid "Copy ABI" msgstr "" @@ -804,7 +804,7 @@ msgstr "" msgid "Copy Address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:139 +#: lib/block_scout_web/templates/address_contract/index.html.eex:145 #, elixir-autogen, elixir-format msgid "Copy Compiler Settings" msgstr "" @@ -815,8 +815,8 @@ msgstr "" msgid "Copy Contract Address" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:171 -#: lib/block_scout_web/templates/address_contract/index.html.eex:187 +#: lib/block_scout_web/templates/address_contract/index.html.eex:177 +#: lib/block_scout_web/templates/address_contract/index.html.eex:193 #, elixir-autogen, elixir-format msgid "Copy Contract Creation Code" msgstr "" @@ -826,8 +826,8 @@ msgstr "" msgid "Copy Decompiled Contract Code" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:208 -#: lib/block_scout_web/templates/address_contract/index.html.eex:218 +#: lib/block_scout_web/templates/address_contract/index.html.eex:214 +#: lib/block_scout_web/templates/address_contract/index.html.eex:224 #, elixir-autogen, elixir-format msgid "Copy Deployed ByteCode" msgstr "" @@ -858,13 +858,13 @@ msgstr "" msgid "Copy Parent Hash" msgstr "" -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:15 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:9 #, elixir-autogen, elixir-format msgid "Copy Raw Trace" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:115 -#: lib/block_scout_web/templates/address_contract/index.html.eex:127 +#: lib/block_scout_web/templates/address_contract/index.html.eex:121 +#: lib/block_scout_web/templates/address_contract/index.html.eex:133 #, elixir-autogen, elixir-format msgid "Copy Source Code" msgstr "" @@ -909,7 +909,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:41 #: lib/block_scout_web/templates/transaction/overview.html.eex:494 #: lib/block_scout_web/templates/transaction/overview.html.eex:500 -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:14 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:8 #, elixir-autogen, elixir-format msgid "Copy Value" msgstr "" @@ -994,7 +994,7 @@ msgid "Date & time of transaction inclusion, including length of time for confir msgstr "" #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:143 #, elixir-autogen, elixir-format msgid "Decimals" msgstr "" @@ -1035,8 +1035,8 @@ msgstr "" msgid "Delegate Call" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:206 -#: lib/block_scout_web/templates/address_contract/index.html.eex:214 +#: lib/block_scout_web/templates/address_contract/index.html.eex:212 +#: lib/block_scout_web/templates/address_contract/index.html.eex:220 #, elixir-autogen, elixir-format msgid "Deployed ByteCode" msgstr "" @@ -1066,7 +1066,7 @@ msgstr "" msgid "Difficulty" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:176 +#: lib/block_scout_web/templates/address_contract/index.html.eex:182 #, elixir-autogen, elixir-format msgid "Displaying the init data provided of the creating transaction." msgstr "" @@ -1141,7 +1141,7 @@ msgstr "" msgid "ETH RPC API Documentation" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +#: lib/block_scout_web/templates/address_contract/index.html.eex:83 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:30 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22 #, elixir-autogen, elixir-format @@ -1259,7 +1259,7 @@ msgstr "" msgid "Export Data" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:243 +#: lib/block_scout_web/templates/address_contract/index.html.eex:249 #, elixir-autogen, elixir-format msgid "External libraries" msgstr "" @@ -1285,7 +1285,7 @@ msgstr "" msgid "Fetching gas used..." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:112 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:124 #, elixir-autogen, elixir-format msgid "Fetching holders..." msgstr "" @@ -1303,7 +1303,7 @@ msgstr "" #: lib/block_scout_web/templates/address/overview.html.eex:221 #: lib/block_scout_web/templates/address/overview.html.eex:229 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:123 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:135 #, elixir-autogen, elixir-format msgid "Fetching transfers..." msgstr "" @@ -1426,7 +1426,7 @@ msgstr "" msgid "Hex (Default)" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:120 #, elixir-autogen, elixir-format msgid "Holders" msgstr "" @@ -1634,7 +1634,7 @@ msgstr "" #: lib/block_scout_web/templates/chain/show.html.eex:52 #: lib/block_scout_web/templates/layout/app.html.eex:50 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:96 #: lib/block_scout_web/views/address_view.ex:145 #, elixir-autogen, elixir-format msgid "Market Cap" @@ -1837,7 +1837,7 @@ msgstr "" msgid "No" msgstr "" -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:23 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:17 #, elixir-autogen, elixir-format msgid "No trace entries found." msgstr "" @@ -1853,7 +1853,7 @@ msgstr "" msgid "Not unique Token" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 #, elixir-autogen, elixir-format msgid "Number of accounts holding the token" msgstr "" @@ -1863,7 +1863,7 @@ msgstr "" msgid "Number of blocks validated by this validator." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 #, elixir-autogen, elixir-format msgid "Number of digits that come after the decimal place when displaying token value" msgstr "" @@ -1873,7 +1873,7 @@ msgstr "" msgid "Number of transactions related to this address." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:118 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130 #, elixir-autogen, elixir-format msgid "Number of transfers for the token" msgstr "" @@ -1901,12 +1901,12 @@ msgstr "" msgid "Optimization" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:62 +#: lib/block_scout_web/templates/address_contract/index.html.eex:68 #, elixir-autogen, elixir-format msgid "Optimization enabled" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:71 +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:62 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54 #, elixir-autogen, elixir-format @@ -2012,12 +2012,12 @@ msgstr "" #: lib/block_scout_web/templates/chain/show.html.eex:41 #: lib/block_scout_web/templates/layout/app.html.eex:51 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107 #, elixir-autogen, elixir-format msgid "Price" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:94 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 #, elixir-autogen, elixir-format msgid "Price per token on the exchanges" msgstr "" @@ -2072,7 +2072,7 @@ msgstr "" msgid "QR Code" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:100 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:106 #, elixir-autogen, elixir-format msgid "Query" msgstr "" @@ -2088,7 +2088,7 @@ msgid "Raw Input" msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 -#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/templates/transaction_raw_trace/_card_body.html.eex:1 #: lib/block_scout_web/views/transaction_view.ex:530 #, elixir-autogen, elixir-format msgid "Raw Trace" @@ -2448,7 +2448,7 @@ msgstr "" msgid "The compiler version is specified in pragma solidity X.X.X. Use the compiler version rather than the nightly build. If using the Solidity compiler, run solc —version to check." msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:38 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:44 #, elixir-autogen, elixir-format msgid "The fallback function is executed on a call to the contract if none of the other functions match the given function signature, or if no data was supplied at all and there is no receive Ether function. The fallback function always receives data, but in order to also receive Ether it must be marked payable." msgstr "" @@ -2473,7 +2473,7 @@ msgstr "" msgid "The number of transactions in the block." msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:40 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:46 #, elixir-autogen, elixir-format msgid "The receive function is executed on a call to the contract with empty calldata. This is the function that is executed on plain Ether transfers (e.g. via .send() or .transfer()). If no such function exists, but a payable fallback function exists, the fallback function will be called on a plain Ether transfer. If neither a receive Ether nor a payable fallback function is present, the contract cannot receive Ether through regular transactions and throws an exception." msgstr "" @@ -2489,6 +2489,7 @@ msgid "The status of the transaction: Confirmed or Unconfirmed." msgstr "" #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:68 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83 #, elixir-autogen, elixir-format msgid "The total amount of tokens issued" msgstr "" @@ -2616,12 +2617,12 @@ msgstr "" msgid "This block has not been processed yet." msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:42 +#: lib/block_scout_web/templates/address_contract/index.html.eex:48 #, elixir-autogen, elixir-format msgid "This contract has been partially verified via Sourcify." msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:46 +#: lib/block_scout_web/templates/address_contract/index.html.eex:52 #, elixir-autogen, elixir-format msgid "This contract has been verified via Sourcify." msgstr "" @@ -2748,7 +2749,7 @@ msgstr "" msgid "Token name and symbol." msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:154 #, elixir-autogen, elixir-format msgid "Token type" msgstr "" @@ -2811,7 +2812,7 @@ msgstr "" msgid "Total Difficulty" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 #, elixir-autogen, elixir-format msgid "Total Supply * Price" msgstr "" @@ -2832,6 +2833,7 @@ msgid "Total gas limit provided by all transactions in the block." msgstr "" #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 #, elixir-autogen, elixir-format msgid "Total supply" msgstr "" @@ -2940,7 +2942,7 @@ msgstr "" #: lib/block_scout_web/templates/address/overview.html.eex:219 #: lib/block_scout_web/templates/address/overview.html.eex:227 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 #, elixir-autogen, elixir-format msgid "Transfers" msgstr "" @@ -2977,7 +2979,7 @@ msgstr "" msgid "Type" msgstr "" -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:141 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:153 #, elixir-autogen, elixir-format msgid "Type of the token standard" msgstr "" @@ -3092,7 +3094,7 @@ msgstr "" msgid "Verified Contracts" msgstr "" -#: lib/block_scout_web/templates/address_contract/index.html.eex:83 +#: lib/block_scout_web/templates/address_contract/index.html.eex:89 #, elixir-autogen, elixir-format msgid "Verified at" msgstr "" @@ -3109,8 +3111,8 @@ msgstr "" #: lib/block_scout_web/templates/address_contract/index.html.eex:28 #: lib/block_scout_web/templates/address_contract/index.html.eex:30 -#: lib/block_scout_web/templates/address_contract/index.html.eex:192 -#: lib/block_scout_web/templates/address_contract/index.html.eex:223 +#: lib/block_scout_web/templates/address_contract/index.html.eex:198 +#: lib/block_scout_web/templates/address_contract/index.html.eex:229 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14 #, elixir-autogen, elixir-format msgid "Verify & Publish" @@ -3226,7 +3228,7 @@ msgstr "" msgid "Vyper contract" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:136 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:142 #, elixir-autogen, elixir-format msgid "WEI" msgstr "" @@ -3263,7 +3265,7 @@ msgstr "" msgid "Wei" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:100 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:106 #, elixir-autogen, elixir-format msgid "Write" msgstr "" @@ -3376,7 +3378,7 @@ msgstr "" msgid "elements are displayed" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:38 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:44 #, elixir-autogen, elixir-format msgid "fallback" msgstr "" @@ -3413,7 +3415,7 @@ msgstr "" msgid "page" msgstr "" -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:40 +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:46 #, elixir-autogen, elixir-format msgid "receive" msgstr "" diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/v2/smart_contract_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/v2/smart_contract_controller_test.exs index b9b8e17b89..1410f9e6dc 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/api/v2/smart_contract_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/api/v2/smart_contract_controller_test.exs @@ -7,6 +7,8 @@ defmodule BlockScoutWeb.API.V2.SmartContractControllerTest do alias BlockScoutWeb.Models.UserFromAuth alias Explorer.Chain.Address + setup :set_mox_from_context + describe "/smart-contracts/{address_hash}" do test "get 404 on non existing SC", %{conn: conn} do address = build(:address) diff --git a/apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs index 1714841889..422f82427d 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs @@ -6,6 +6,8 @@ defmodule BlockScoutWeb.SmartContractControllerTest do alias Explorer.Chain.{Address, Hash} alias Explorer.Factory + setup :set_mox_from_context + setup :verify_on_exit! describe "GET index/3" do diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index a6c31d3a50..affed73458 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -77,10 +77,9 @@ defmodule Explorer.Chain do } alias Explorer.Chain.Cache.Block, as: BlockCache - + alias Explorer.Chain.Fetcher.CheckBytecodeMatchingOnDemand alias Explorer.Chain.Import.Runner alias Explorer.Chain.InternalTransaction.{CallType, Type} - alias Explorer.Chain.Fetcher.CheckBytecodeMatchingOnDemand alias Explorer.Counters.{ AddressesCounter, diff --git a/apps/explorer/lib/explorer/chain/block/reward.ex b/apps/explorer/lib/explorer/chain/block/reward.ex index 84a9da9084..919bc35f8a 100644 --- a/apps/explorer/lib/explorer/chain/block/reward.ex +++ b/apps/explorer/lib/explorer/chain/block/reward.ex @@ -8,7 +8,7 @@ defmodule Explorer.Chain.Block.Reward do alias Explorer.Application.Constants alias Explorer.Chain alias Explorer.Chain.Block.Reward.AddressType - alias Explorer.Chain.{Address, Block, Hash, Wei, Validator} + alias Explorer.Chain.{Address, Block, Hash, Validator, Wei} alias Explorer.Chain.Fetcher.FetchValidatorInfoOnDemand alias Explorer.{PagingOptions, Repo} alias Explorer.SmartContract.Reader diff --git a/apps/explorer/lib/explorer/chain/events/publisher.ex b/apps/explorer/lib/explorer/chain/events/publisher.ex index 8ebdebff70..08897fd551 100644 --- a/apps/explorer/lib/explorer/chain/events/publisher.ex +++ b/apps/explorer/lib/explorer/chain/events/publisher.ex @@ -3,7 +3,7 @@ defmodule Explorer.Chain.Events.Publisher do Publishes events related to the Chain context. """ - @allowed_events ~w(addresses address_coin_balances address_token_balances blocks block_rewards internal_transactions last_block_number token_transfers transactions contract_verification_result token_total_supply)a + @allowed_events ~w(addresses address_coin_balances address_token_balances blocks block_rewards internal_transactions last_block_number token_transfers transactions contract_verification_result token_total_supply changed_bytecode)a def broadcast(_data, false), do: :ok diff --git a/apps/explorer/lib/explorer/chain/events/subscriber.ex b/apps/explorer/lib/explorer/chain/events/subscriber.ex index cbaa8c2102..c15a08fbb4 100644 --- a/apps/explorer/lib/explorer/chain/events/subscriber.ex +++ b/apps/explorer/lib/explorer/chain/events/subscriber.ex @@ -3,7 +3,7 @@ defmodule Explorer.Chain.Events.Subscriber do Subscribes to events related to the Chain context. """ - @allowed_broadcast_events ~w(addresses address_coin_balances address_token_balances blocks block_rewards internal_transactions last_block_number token_transfers transactions contract_verification_result token_total_supply)a + @allowed_broadcast_events ~w(addresses address_coin_balances address_token_balances blocks block_rewards internal_transactions last_block_number token_transfers transactions contract_verification_result token_total_supply changed_bytecode)a @allowed_broadcast_types ~w(catchup realtime on_demand contract_verification_result)a diff --git a/apps/explorer/lib/explorer/chain/fetcher/check_bytecode_matching_on_demand.ex b/apps/explorer/lib/explorer/chain/fetcher/check_bytecode_matching_on_demand.ex index ec28298b00..4f61f0f8bc 100644 --- a/apps/explorer/lib/explorer/chain/fetcher/check_bytecode_matching_on_demand.ex +++ b/apps/explorer/lib/explorer/chain/fetcher/check_bytecode_matching_on_demand.ex @@ -7,6 +7,7 @@ defmodule Explorer.Chain.Fetcher.CheckBytecodeMatchingOnDemand do alias Ecto.Association.NotLoaded alias Ecto.Changeset + alias Explorer.Chain.Events.Publisher alias Explorer.Repo # seconds @@ -24,37 +25,34 @@ defmodule Explorer.Chain.Fetcher.CheckBytecodeMatchingOnDemand do now = DateTime.utc_now() json_rpc_named_arguments = Application.get_env(:explorer, :json_rpc_named_arguments) - if !address.smart_contract.is_changed_bytecode and - address.smart_contract.bytecode_checked_at - |> DateTime.add(@check_bytecode_interval, :second) - |> DateTime.compare(now) != :gt do - case EthereumJSONRPC.fetch_codes( + with true <- + !address.smart_contract.is_changed_bytecode and + address.smart_contract.bytecode_checked_at + |> DateTime.add(@check_bytecode_interval, :second) + |> DateTime.compare(now) != :gt, + {:ok, %EthereumJSONRPC.FetchedCodes{params_list: fetched_codes}} <- + EthereumJSONRPC.fetch_codes( [%{block_quantity: "latest", address: address.smart_contract.address_hash}], json_rpc_named_arguments - ) do - {:ok, %EthereumJSONRPC.FetchedCodes{params_list: fetched_codes}} -> - bytecode_from_node = fetched_codes |> List.first() |> Map.get(:code) - bytecode_from_db = "0x" <> (address.contract_code.bytes |> Base.encode16(case: :lower)) + ), + bytecode_from_node <- fetched_codes |> List.first() |> Map.get(:code), + bytecode_from_db <- "0x" <> (address.contract_code.bytes |> Base.encode16(case: :lower)), + {:changed, true} <- {:changed, bytecode_from_node == bytecode_from_db} do + {:ok, _} = + address.smart_contract + |> Changeset.change(%{bytecode_checked_at: now}) + |> Repo.update() + else + {:changed, false} -> + Publisher.broadcast(%{changed_bytecode: [address.smart_contract.address_hash]}, :on_demand) - if bytecode_from_node == bytecode_from_db do - {:ok, _} = - address.smart_contract - |> Changeset.change(%{bytecode_checked_at: now}) - |> Repo.update() + {:ok, _} = + address.smart_contract + |> Changeset.change(%{bytecode_checked_at: now, is_changed_bytecode: true}) + |> Repo.update() - :ok - else - {:ok, _} = - address.smart_contract - |> Changeset.change(%{bytecode_checked_at: now, is_changed_bytecode: true}) - |> Repo.update() - - :changed - end - - _ -> - :error - end + _ -> + nil end end diff --git a/apps/explorer/lib/explorer/chain/fetcher/fetch_validator_info_on_demand.ex b/apps/explorer/lib/explorer/chain/fetcher/fetch_validator_info_on_demand.ex index 46a1a38262..a081a5b521 100644 --- a/apps/explorer/lib/explorer/chain/fetcher/fetch_validator_info_on_demand.ex +++ b/apps/explorer/lib/explorer/chain/fetcher/fetch_validator_info_on_demand.ex @@ -12,17 +12,8 @@ defmodule Explorer.Chain.Fetcher.FetchValidatorInfoOnDemand do alias Explorer.Chain.Validator @ttl_in_blocks 1 - defp debug(value, key) do - require Logger - Logger.configure(truncate: :infinity) - Logger.info(key) - Logger.info(Kernel.inspect(value, limit: :infinity, printable_limit: :infinity)) - value - end def trigger_fetch(list) when is_list(list) do - debug(list, "trigger") - Enum.each(list, fn hash_string -> case Chain.string_to_address_hash(hash_string) do {:ok, address_hash} -> @@ -35,7 +26,6 @@ defmodule Explorer.Chain.Fetcher.FetchValidatorInfoOnDemand do end def trigger_fetch(address_hash) do - debug(address_hash, "trigger") GenServer.cast(__MODULE__, {:fetch_or_update, address_hash}) end @@ -50,31 +40,26 @@ defmodule Explorer.Chain.Fetcher.FetchValidatorInfoOnDemand do :ignore is_nil(contract_address_from_db) -> - debug(1, "result") - Validator.drop_all_validators() |> debug("drop") - Constants.insert_keys_manager_contract_address(contract_address_from_env) |> debug("insert") + Validator.drop_all_validators() + Constants.insert_keys_manager_contract_address(contract_address_from_env) fetch_and_store_validator_info(address_hash) String.downcase(contract_address_from_db.value) == contract_address_from_env |> String.downcase() -> - debug(2, "result") fetch_and_store_validator_info(address_hash) true -> - debug(3, "result") - Validator.drop_all_validators() |> debug("drop") - Constants.insert_keys_manager_contract_address(contract_address_from_env) |> debug("insert") + Validator.drop_all_validators() + Constants.insert_keys_manager_contract_address(contract_address_from_env) fetch_and_store_validator_info(address_hash) end - |> debug("result") end defp fetch_and_store_validator_info(validator_address) do - validator = Validator.get_validator_by_address_hash(validator_address) |> debug("validator") - debug(BlockNumber.get_max(), "BlockNumber.get_max()") + validator = Validator.get_validator_by_address_hash(validator_address) if is_nil(validator) or BlockNumber.get_max() - validator.info_updated_at_block > @ttl_in_blocks do %{is_validator: is_validator, payout_key: payout_key} = - Reward.get_validator_payout_key_by_mining(validator_address) |> debug("reward") + Reward.get_validator_payout_key_by_mining(validator_address) Validator.insert_or_update(validator, %{ address_hash: validator_address, diff --git a/apps/explorer/lib/explorer/chain/validator.ex b/apps/explorer/lib/explorer/chain/validator.ex index e17251e9b2..3437431ce8 100644 --- a/apps/explorer/lib/explorer/chain/validator.ex +++ b/apps/explorer/lib/explorer/chain/validator.ex @@ -49,7 +49,7 @@ defmodule Explorer.Chain.Validator do |> Repo.one() end - def drop_all_validators() do + def drop_all_validators do __MODULE__ |> Repo.delete_all() end diff --git a/apps/explorer/test/explorer/chain/log_test.exs b/apps/explorer/test/explorer/chain/log_test.exs index c642a83d66..0d5327e3b9 100644 --- a/apps/explorer/test/explorer/chain/log_test.exs +++ b/apps/explorer/test/explorer/chain/log_test.exs @@ -7,6 +7,8 @@ defmodule Explorer.Chain.LogTest do alias Explorer.Chain.{Log, SmartContract} alias Explorer.Repo + setup :set_mox_from_context + doctest Log describe "changeset/2" do diff --git a/apps/indexer/lib/indexer/application.ex b/apps/indexer/lib/indexer/application.ex index 8bc023d36f..e47f5deeed 100644 --- a/apps/indexer/lib/indexer/application.ex +++ b/apps/indexer/lib/indexer/application.ex @@ -5,7 +5,7 @@ defmodule Indexer.Application do use Application - alias Indexer.Fetcher.{CoinBalanceOnDemand, TokenTotalSupplyOnDemand, FirstTraceOnDemand} + alias Indexer.Fetcher.{CoinBalanceOnDemand, FirstTraceOnDemand, TokenTotalSupplyOnDemand} alias Indexer.Memory alias Indexer.Prometheus.PendingBlockOperationsCollector alias Prometheus.Registry diff --git a/apps/indexer/lib/indexer/fetcher/token_total_supply_on_demand.ex b/apps/indexer/lib/indexer/fetcher/token_total_supply_on_demand.ex index 9a8366d0d0..b2564e9f42 100644 --- a/apps/indexer/lib/indexer/fetcher/token_total_supply_on_demand.ex +++ b/apps/indexer/lib/indexer/fetcher/token_total_supply_on_demand.ex @@ -7,16 +7,16 @@ defmodule Indexer.Fetcher.TokenTotalSupplyOnDemand do use Indexer.Fetcher, restart: :permanent alias Explorer.{Chain, Repo} - alias Explorer.Chain.{Address, Token} alias Explorer.Chain.Cache.BlockNumber alias Explorer.Chain.Events.Publisher + alias Explorer.Chain.Token alias Explorer.Token.MetadataRetriever @ttl_in_blocks 1 ## Interface - @spec trigger_fetch(Address.t()) :: :ok + @spec trigger_fetch(Chain.Hash.Address.t()) :: :ok def trigger_fetch(address) do GenServer.cast(__MODULE__, {:fetch_and_update, address}) end