EIP-1967 proxy pattern detection fix

pull/3888/head
Viktor Baranov 4 years ago
parent aa3d5b5e5f
commit 02a6c100aa
  1. 2
      .dialyzer-ignore
  2. 1
      CHANGELOG.md
  3. 2
      apps/block_scout_web/lib/block_scout_web/controllers/smart_contract_controller.ex
  4. 4
      apps/block_scout_web/lib/block_scout_web/templates/address/_tabs.html.eex
  5. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/index.html.eex
  6. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex
  7. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_decompiled_contract/index.html.eex
  8. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/index.html.eex
  9. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_logs/index.html.eex
  10. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_read_contract/index.html.eex
  11. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_read_proxy/index.html.eex
  12. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_token/index.html.eex
  13. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/index.html.eex
  14. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_transaction/index.html.eex
  15. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_validation/index.html.eex
  16. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_write_contract/index.html.eex
  17. 6
      apps/block_scout_web/lib/block_scout_web/templates/address_write_proxy/index.html.eex
  18. 2
      apps/block_scout_web/lib/block_scout_web/views/address_view.ex
  19. 150
      apps/block_scout_web/priv/gettext/default.pot
  20. 150
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  21. 18
      apps/block_scout_web/test/block_scout_web/controllers/address_read_contract_controller_test.exs
  22. 17
      apps/block_scout_web/test/block_scout_web/controllers/address_read_proxy_controller_test.exs
  23. 19
      apps/block_scout_web/test/block_scout_web/controllers/address_write_contract_controller_test.exs
  24. 17
      apps/block_scout_web/test/block_scout_web/controllers/address_write_proxy_controller_test.exs
  25. 17
      apps/block_scout_web/test/block_scout_web/controllers/smart_contract_controller_test.exs
  26. 19
      apps/explorer/lib/explorer/chain.ex

@ -23,7 +23,7 @@ lib/indexer/fetcher/token_total_supply_on_demand.ex:16
lib/explorer/exchange_rates/source.ex:110 lib/explorer/exchange_rates/source.ex:110
lib/explorer/exchange_rates/source.ex:113 lib/explorer/exchange_rates/source.ex:113
lib/explorer/smart_contract/verifier.ex:89 lib/explorer/smart_contract/verifier.ex:89
lib/block_scout_web/templates/address_contract/index.html.eex:149 lib/block_scout_web/templates/address_contract/index.html.eex:151
lib/explorer/staking/stake_snapshotting.ex:15: Function do_snapshotting/7 has no local return lib/explorer/staking/stake_snapshotting.ex:15: Function do_snapshotting/7 has no local return
lib/explorer/staking/stake_snapshotting.ex:147 lib/explorer/staking/stake_snapshotting.ex:147
lib/explorer/third_party_integrations/sourcify.ex:65 lib/explorer/third_party_integrations/sourcify.ex:65

@ -3,6 +3,7 @@
### Features ### Features
### Fixes ### Fixes
- [#3888](https://github.com/blockscout/blockscout/pull/3888) - EIP-1967 contract proxy pattern detection fix
### Chore ### Chore
- [#3870](https://github.com/blockscout/blockscout/pull/3870) - Manage token balance on-demand fetcher threshold via env var - [#3870](https://github.com/blockscout/blockscout/pull/3870) - Manage token balance on-demand fetcher threshold via env var

@ -91,7 +91,7 @@ defmodule BlockScoutWeb.SmartContractController do
with true <- ajax?(conn), with true <- ajax?(conn),
{:ok, address_hash} <- Chain.string_to_address_hash(params["id"]), {:ok, address_hash} <- Chain.string_to_address_hash(params["id"]),
{:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do {:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do
contract_type = if Chain.proxy_contract?(address.smart_contract.abi), do: :proxy, else: :regular contract_type = if Chain.proxy_contract?(address.hash, address.smart_contract.abi), do: :proxy, else: :regular
outputs = outputs =
Reader.query_function( Reader.query_function(

@ -83,7 +83,7 @@
class: "card-tab #{tab_status("read-contract", @conn.request_path)}") class: "card-tab #{tab_status("read-contract", @conn.request_path)}")
%> %>
<% end %> <% end %>
<%= if smart_contract_is_proxy?(@address) do %> <%= if @is_proxy do %>
<%= link( <%= link(
gettext("Read Proxy"), gettext("Read Proxy"),
to: AccessHelpers.get_path(@conn, :address_read_proxy_path, :index, @address.hash), to: AccessHelpers.get_path(@conn, :address_read_proxy_path, :index, @address.hash),
@ -97,7 +97,7 @@
class: "card-tab #{tab_status("write-contract", @conn.request_path)}") class: "card-tab #{tab_status("write-contract", @conn.request_path)}")
%> %>
<% end %> <% end %>
<%= if smart_contract_with_write_functions?(@address) && smart_contract_is_proxy?(@address) do %> <%= if smart_contract_with_write_functions?(@address) && @is_proxy do %>
<%= link( <%= link(
gettext("Write Proxy"), gettext("Write Proxy"),
to: AccessHelpers.get_path(@conn, :address_write_proxy_path, :index, @address.hash), to: AccessHelpers.get_path(@conn, :address_write_proxy_path, :index, @address.hash),

@ -1,11 +1,13 @@
<section class="container" data-page="coin-balance-history"> <section class="container" data-page="coin-balance-history">
<script defer src="<%= static_path(@conn, "/js/chart-loader.js") %>"></script> <script defer src="<%= static_path(@conn, "/js/chart-loader.js") %>"></script>
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section> <section>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body" data-async-listing="<%= @current_path %>"> <div class="card-body" data-async-listing="<%= @current_path %>">
<div data-selector="channel-disconnected-message" style="display:none;"> <div data-selector="channel-disconnected-message" style="display:none;">
<div data-selector="reload-button" class="alert alert-danger" style="padding: 0.75rem 0rem; cursor: pointer;"> <div data-selector="reload-button" class="alert alert-danger" style="padding: 0.75rem 0rem; cursor: pointer;">

@ -6,10 +6,12 @@
<% additional_sources = if smart_contract_verified, do: @address.smart_contract_additional_sources, else: additional_sources_from_twin %> <% additional_sources = if smart_contract_verified, do: @address.smart_contract_additional_sources, else: additional_sources_from_twin %>
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body"> <div class="card-body">
<%= unless smart_contract_verified do %> <%= unless smart_contract_verified do %>
<%= if minimal_proxy_template do %> <%= if minimal_proxy_template do %>

@ -1,7 +1,9 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<% contract = last_decompiled_contract_version(@address.decompiled_smart_contracts) %> <% contract = last_decompiled_contract_version(@address.decompiled_smart_contracts) %>
<%= if contract do %> <%= if contract do %>
<div class="card-body"> <div class="card-body">

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section data-page="address-internal-transactions"> <section data-page="address-internal-transactions">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body" data-async-load data-async-listing="<%= @current_path %>"> <div class="card-body" data-async-load data-async-listing="<%= @current_path %>">
<div data-selector="channel-batching-message" style="display: none;"> <div data-selector="channel-batching-message" style="display: none;">
<div data-selector="reload-button" class="alert alert-info"> <div data-selector="reload-button" class="alert alert-info">

@ -1,8 +1,10 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section data-page="address-logs"> <section data-page="address-logs">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body" data-async-load data-async-listing="<%= @current_path %>"> <div class="card-body" data-async-load data-async-listing="<%= @current_path %>">
<h2 class="card-title"><%= gettext "Logs" %></h2> <h2 class="card-title"><%= gettext "Logs" %></h2>

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<!-- loaded via AJAX --> <!-- loaded via AJAX -->
<div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>"> <div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>">
<div> <div>

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<!-- loaded via AJAX --> <!-- loaded via AJAX -->
<div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>"> <div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>">
<div> <div>

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section> <section>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body" data-async-load data-async-listing="<%= @current_path %>"> <div class="card-body" data-async-load data-async-listing="<%= @current_path %>">
<h2 class="card-title list-title-description"><%= gettext "Tokens" %></h2> <h2 class="card-title list-title-description"><%= gettext "Tokens" %></h2>

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section data-page="address-token-transfers"> <section data-page="address-token-transfers">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div data-async-load data-async-listing="<%= @current_path %>" class="card-body"> <div data-async-load data-async-listing="<%= @current_path %>" class="card-body">
<%= if assigns[:token] do %> <%= if assigns[:token] do %>

@ -1,10 +1,12 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section data-page="address-transactions"> <section data-page="address-transactions">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div class="card-body" data-async-listing="<%= @current_path %>"> <div class="card-body" data-async-listing="<%= @current_path %>">
<div data-selector="channel-disconnected-message" style="display: none;"> <div data-selector="channel-disconnected-message" style="display: none;">
<div data-selector="reload-button" class="alert alert-danger"> <div data-selector="reload-button" class="alert alert-danger">

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<section data-page="blocks-validated"> <section data-page="blocks-validated">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<div data-async-listing="<%= @current_path %>" class="card-body"> <div data-async-listing="<%= @current_path %>" class="card-body">
<div data-selector="channel-disconnected-message" style="display: none;"> <div data-selector="channel-disconnected-message" style="display: none;">
<div data-selector="reload-button" class="alert alert-danger"> <div data-selector="reload-button" class="alert alert-danger">

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<!-- loaded via AJAX --> <!-- loaded via AJAX -->
<div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>"> <div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>">
<div> <div>

@ -1,9 +1,11 @@
<section class="container"> <section class="container">
<%= render BlockScoutWeb.AddressView, "overview.html", assigns %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<!-- loaded via AJAX --> <!-- loaded via AJAX -->
<div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>"> <div class="card-body" data-smart-contract-functions data-hash="<%= to_string(@address.hash) %>" data-type="<%= @type %>" data-action="<%= @action %>" data-url="<%= smart_contract_path(@conn, :index) %>">
<div> <div>

@ -235,7 +235,7 @@ defmodule BlockScoutWeb.AddressView do
def smart_contract_with_read_only_functions?(%Address{smart_contract: nil}), do: false def smart_contract_with_read_only_functions?(%Address{smart_contract: nil}), do: false
def smart_contract_is_proxy?(%Address{smart_contract: %SmartContract{}} = address) do def smart_contract_is_proxy?(%Address{smart_contract: %SmartContract{}} = address) do
Chain.proxy_contract?(address.smart_contract.abi) Chain.proxy_contract?(address.hash, address.smart_contract.abi)
end end
def smart_contract_is_proxy?(%Address{smart_contract: nil}), do: false def smart_contract_is_proxy?(%Address{smart_contract: nil}), do: false

@ -135,9 +135,9 @@ msgid "Addresses"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:28 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:30
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:26 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
#: lib/block_scout_web/templates/address_transaction/index.html.eex:24 #: lib/block_scout_web/templates/address_transaction/index.html.eex:26
#: lib/block_scout_web/templates/layout/_network_selector.html.eex:21 #: lib/block_scout_web/templates/layout/_network_selector.html.eex:21
#: lib/block_scout_web/templates/layout/_topnav.html.eex:93 #: lib/block_scout_web/templates/layout/_topnav.html.eex:93
#: lib/block_scout_web/views/address_internal_transaction_view.ex:10 #: lib/block_scout_web/views/address_internal_transaction_view.ex:10
@ -169,7 +169,7 @@ msgid "Balance"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:16 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:18
msgid "Balances" msgid "Balances"
msgstr "" msgstr ""
@ -295,7 +295,7 @@ msgid "Compiler"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:47 #: lib/block_scout_web/templates/address_contract/index.html.eex:49
msgid "Compiler version" msgid "Compiler version"
msgstr "" msgstr ""
@ -307,35 +307,35 @@ msgid "Connection Lost"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:12 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14
#: lib/block_scout_web/templates/block/index.html.eex:6 #: lib/block_scout_web/templates/block/index.html.eex:6
msgid "Connection Lost, click to load newer blocks" msgid "Connection Lost, click to load newer blocks"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17
msgid "Connection Lost, click to load newer internal transactions" msgid "Connection Lost, click to load newer internal transactions"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 #: lib/block_scout_web/templates/address_transaction/index.html.eex:13
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:17 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:17
#: lib/block_scout_web/templates/transaction/index.html.eex:23 #: lib/block_scout_web/templates/transaction/index.html.eex:23
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_validation/index.html.eex:10 #: lib/block_scout_web/templates/address_validation/index.html.eex:12
msgid "Connection Lost, click to load newer validations" msgid "Connection Lost, click to load newer validations"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:66 #: lib/block_scout_web/templates/address_contract/index.html.eex:68
msgid "Constructor Arguments" msgid "Constructor Arguments"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:104 #: lib/block_scout_web/templates/address_contract/index.html.eex:106
msgid "Contract ABI" msgid "Contract ABI"
msgstr "" msgstr ""
@ -355,8 +355,8 @@ msgid "Contract Address Pending"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:135 #: lib/block_scout_web/templates/address_contract/index.html.eex:137
#: lib/block_scout_web/templates/address_contract/index.html.eex:143 #: lib/block_scout_web/templates/address_contract/index.html.eex:145
msgid "Contract Byte Code" msgid "Contract Byte Code"
msgstr "" msgstr ""
@ -371,7 +371,7 @@ msgid "Contract Creation"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:120 #: lib/block_scout_web/templates/address_contract/index.html.eex:122
msgid "Contract Creation Code" msgid "Contract Creation Code"
msgstr "" msgstr ""
@ -388,17 +388,17 @@ msgid "Contract Name"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:39 #: lib/block_scout_web/templates/address_contract/index.html.eex:41
msgid "Contract name:" msgid "Contract name:"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:76 #: lib/block_scout_web/templates/address_contract/index.html.eex:78
msgid "Contract source code" msgid "Contract source code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:126 #: lib/block_scout_web/templates/address_contract/index.html.eex:128
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr "" msgstr ""
@ -408,7 +408,7 @@ msgid "Contribute"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:106 #: lib/block_scout_web/templates/address_contract/index.html.eex:108
msgid "Copy ABI" msgid "Copy ABI"
msgstr "" msgstr ""
@ -421,18 +421,18 @@ msgid "Copy Address"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:122 #: lib/block_scout_web/templates/address_contract/index.html.eex:124
msgid "Copy Contract Creation Code" msgid "Copy Contract Creation Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19
msgid "Copy Decompiled Contract Code" msgid "Copy Decompiled Contract Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:78 #: lib/block_scout_web/templates/address_contract/index.html.eex:80
#: lib/block_scout_web/templates/address_contract/index.html.eex:92 #: lib/block_scout_web/templates/address_contract/index.html.eex:94
msgid "Copy Source Code" msgid "Copy Source Code"
msgstr "" msgstr ""
@ -502,12 +502,12 @@ msgid "Decompiled code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17
msgid "Decompiled contract code" msgid "Decompiled contract code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:10
msgid "Decompiler version" msgid "Decompiler version"
msgstr "" msgstr ""
@ -546,7 +546,7 @@ msgid "Details"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:127 #: lib/block_scout_web/templates/address_contract/index.html.eex:129
msgid "Displaying the init data provided of the creating transaction." msgid "Displaying the init data provided of the creating transaction."
msgstr "" msgstr ""
@ -577,7 +577,7 @@ msgid "ETH RPC API Documentation"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:58 #: lib/block_scout_web/templates/address_contract/index.html.eex:60
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:82 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:82
msgid "EVM Version" msgid "EVM Version"
msgstr "" msgstr ""
@ -671,7 +671,7 @@ msgid "Nonce"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:184 #: lib/block_scout_web/templates/address_contract/index.html.eex:186
msgid "External libraries" msgid "External libraries"
msgstr "" msgstr ""
@ -707,9 +707,9 @@ msgid "Forked Blocks (Reorgs)"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:40 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:40
#: lib/block_scout_web/templates/address_transaction/index.html.eex:36 #: lib/block_scout_web/templates/address_transaction/index.html.eex:38
#: lib/block_scout_web/views/address_internal_transaction_view.ex:9 #: lib/block_scout_web/views/address_internal_transaction_view.ex:9
#: lib/block_scout_web/views/address_token_transfer_view.ex:9 #: lib/block_scout_web/views/address_token_transfer_view.ex:9
#: lib/block_scout_web/views/address_transaction_view.ex:9 #: lib/block_scout_web/views/address_transaction_view.ex:9
@ -805,7 +805,7 @@ msgid "There are no holders for this Token."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:56 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:58
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
@ -821,12 +821,12 @@ msgid "There are no logs for this transaction."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:51 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:53
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token/index.html.eex:20 #: lib/block_scout_web/templates/address_token/index.html.eex:22
msgid "There are no tokens for this address." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -836,7 +836,7 @@ msgid "There are no tokens."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:53 #: lib/block_scout_web/templates/address_transaction/index.html.eex:55
msgid "There are no transactions for this address." msgid "There are no transactions for this address."
msgstr "" msgstr ""
@ -857,9 +857,9 @@ msgid "This transaction is pending confirmation."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:34 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:36
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:32 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:34
#: lib/block_scout_web/templates/address_transaction/index.html.eex:30 #: lib/block_scout_web/templates/address_transaction/index.html.eex:32
#: lib/block_scout_web/views/address_internal_transaction_view.ex:8 #: lib/block_scout_web/views/address_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_token_transfer_view.ex:8 #: lib/block_scout_web/views/address_token_transfer_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8 #: lib/block_scout_web/views/address_transaction_view.ex:8
@ -898,7 +898,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:13 #: lib/block_scout_web/templates/address/_tabs.html.eex:13
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:17 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3
#: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16 #: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16
#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3
@ -1011,10 +1011,10 @@ msgid "Limit"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:16
#: lib/block_scout_web/templates/address_read_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_read_proxy/index.html.eex:16
#: lib/block_scout_web/templates/address_write_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_write_contract/index.html.eex:16
#: lib/block_scout_web/templates/address_write_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_write_proxy/index.html.eex:16
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:20 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:20
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
@ -1070,7 +1070,7 @@ msgid "Model"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:12
msgid "More internal transactions have come in" msgid "More internal transactions have come in"
msgstr "" msgstr ""
@ -1118,12 +1118,12 @@ msgid "OUT"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:43 #: lib/block_scout_web/templates/address_contract/index.html.eex:45
msgid "Optimization enabled" msgid "Optimization enabled"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:52 #: lib/block_scout_web/templates/address_contract/index.html.eex:54
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:114 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:114
msgid "Optimization runs" msgid "Optimization runs"
msgstr "" msgstr ""
@ -1257,7 +1257,7 @@ msgid "Run"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:14 #: lib/block_scout_web/templates/address_logs/index.html.eex:16
#: lib/block_scout_web/templates/layout/_topnav.html.eex:217 #: lib/block_scout_web/templates/layout/_topnav.html.eex:217
#: lib/block_scout_web/templates/layout/_topnav.html.eex:261 #: lib/block_scout_web/templates/layout/_topnav.html.eex:261
msgid "Search" msgid "Search"
@ -1312,13 +1312,13 @@ msgid "Block Rewards"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:36 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:38
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:52 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:54
#: lib/block_scout_web/templates/address_logs/index.html.eex:21 #: lib/block_scout_web/templates/address_logs/index.html.eex:23
#: lib/block_scout_web/templates/address_token/index.html.eex:15 #: lib/block_scout_web/templates/address_token/index.html.eex:17
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:56 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:58
#: lib/block_scout_web/templates/address_transaction/index.html.eex:48 #: lib/block_scout_web/templates/address_transaction/index.html.eex:50
#: lib/block_scout_web/templates/address_validation/index.html.eex:22 #: lib/block_scout_web/templates/address_validation/index.html.eex:24
#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 #: lib/block_scout_web/templates/block_transaction/index.html.eex:23
#: lib/block_scout_web/templates/chain/show.html.eex:184 #: lib/block_scout_web/templates/chain/show.html.eex:184
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:21 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:21
@ -1370,7 +1370,7 @@ msgid "Testnet"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_validation/index.html.eex:18 #: lib/block_scout_web/templates/address_validation/index.html.eex:20
msgid "There are no blocks validated by this address." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
@ -1380,7 +1380,7 @@ msgid "There are no blocks."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:26 #: lib/block_scout_web/templates/address_logs/index.html.eex:28
msgid "There are no logs for this address." msgid "There are no logs for this address."
msgstr "" msgstr ""
@ -1400,17 +1400,17 @@ msgid "There are no transactions."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:41 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:43
msgid "There is no coin history for this address." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:29
msgid "There is no decompilded contracts for this address." msgid "There is no decompilded contracts for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:27 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:29
#: lib/block_scout_web/templates/chain/show.html.eex:9 #: lib/block_scout_web/templates/chain/show.html.eex:9
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
msgstr "" msgstr ""
@ -1448,7 +1448,7 @@ msgid "To see accurate decoded input data, the contract must be verified."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:12 #: lib/block_scout_web/templates/address_logs/index.html.eex:14
msgid "Topic" msgid "Topic"
msgstr "" msgstr ""
@ -1579,9 +1579,9 @@ msgid "Value"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
#: lib/block_scout_web/templates/address_contract/index.html.eex:151 #: lib/block_scout_web/templates/address_contract/index.html.eex:153
#: lib/block_scout_web/templates/address_contract/index.html.eex:163 #: lib/block_scout_web/templates/address_contract/index.html.eex:165
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:19 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:19
msgid "Verify & Publish" msgid "Verify & Publish"
msgstr "" msgstr ""
@ -1770,7 +1770,7 @@ msgid "Indexing Tokens"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:24 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:26
msgid "Loading chart" msgid "Loading chart"
msgstr "" msgstr ""
@ -1809,7 +1809,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:48 #: lib/block_scout_web/templates/address/_tabs.html.eex:48
#: lib/block_scout_web/templates/address_validation/index.html.eex:13 #: lib/block_scout_web/templates/address_validation/index.html.eex:15
#: lib/block_scout_web/views/address_view.ex:354 #: lib/block_scout_web/views/address_view.ex:354
msgid "Blocks Validated" msgid "Blocks Validated"
msgstr "" msgstr ""
@ -1837,7 +1837,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:28 #: lib/block_scout_web/templates/address/_tabs.html.eex:28
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:21
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:11
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:344 #: lib/block_scout_web/views/address_view.ex:344
@ -1847,7 +1847,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:41 #: lib/block_scout_web/templates/address/_tabs.html.eex:41
#: lib/block_scout_web/templates/address_logs/index.html.eex:8 #: lib/block_scout_web/templates/address_logs/index.html.eex:10
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17
#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8
#: lib/block_scout_web/views/address_view.ex:355 #: lib/block_scout_web/views/address_view.ex:355
@ -1865,8 +1865,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:21 #: lib/block_scout_web/templates/address/_tabs.html.eex:21
#: lib/block_scout_web/templates/address_token/index.html.eex:8 #: lib/block_scout_web/templates/address_token/index.html.eex:10
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:11 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:13
#: lib/block_scout_web/templates/layout/_topnav.html.eex:89 #: lib/block_scout_web/templates/layout/_topnav.html.eex:89
#: lib/block_scout_web/templates/layout/_topnav.html.eex:115 #: lib/block_scout_web/templates/layout/_topnav.html.eex:115
#: lib/block_scout_web/templates/tokens/index.html.eex:4 #: lib/block_scout_web/templates/tokens/index.html.eex:4
@ -1876,7 +1876,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:7 #: lib/block_scout_web/templates/address/_tabs.html.eex:7
#: lib/block_scout_web/templates/address_transaction/index.html.eex:15 #: lib/block_scout_web/templates/address_transaction/index.html.eex:17
#: lib/block_scout_web/templates/block_transaction/index.html.eex:10 #: lib/block_scout_web/templates/block_transaction/index.html.eex:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:18 #: lib/block_scout_web/templates/block_transaction/index.html.eex:18
#: lib/block_scout_web/templates/chain/show.html.eex:238 #: lib/block_scout_web/templates/chain/show.html.eex:238
@ -1969,12 +1969,12 @@ msgid "All functions displayed below are from ABI of that contract. In order to
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
msgid "All metadata displayed below is from that contract. In order to verify current contract, click" msgid "All metadata displayed below is from that contract. In order to verify current contract, click"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
msgid "button" msgid "button"
msgstr "" msgstr ""
@ -1990,8 +1990,8 @@ msgid "Play"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:137 #: lib/block_scout_web/templates/address_contract/index.html.eex:139
#: lib/block_scout_web/templates/address_contract/index.html.eex:147 #: lib/block_scout_web/templates/address_contract/index.html.eex:149
msgid "Copy Byte Code" msgid "Copy Byte Code"
msgstr "" msgstr ""
@ -2611,7 +2611,7 @@ msgid "Stakes"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:20 #: lib/block_scout_web/templates/address_contract/index.html.eex:22
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:16 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:16
msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB" msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB"
msgstr "" msgstr ""
@ -2798,6 +2798,6 @@ msgid "Sources and metadata JSON file"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_contract/index.html.eex:33
msgid "This contract has been verified via Sourcify." msgid "This contract has been verified via Sourcify."
msgstr "" msgstr ""

@ -135,9 +135,9 @@ msgid "Addresses"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:28 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:30
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:26 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
#: lib/block_scout_web/templates/address_transaction/index.html.eex:24 #: lib/block_scout_web/templates/address_transaction/index.html.eex:26
#: lib/block_scout_web/templates/layout/_network_selector.html.eex:21 #: lib/block_scout_web/templates/layout/_network_selector.html.eex:21
#: lib/block_scout_web/templates/layout/_topnav.html.eex:93 #: lib/block_scout_web/templates/layout/_topnav.html.eex:93
#: lib/block_scout_web/views/address_internal_transaction_view.ex:10 #: lib/block_scout_web/views/address_internal_transaction_view.ex:10
@ -169,7 +169,7 @@ msgid "Balance"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:16 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:18
msgid "Balances" msgid "Balances"
msgstr "" msgstr ""
@ -295,7 +295,7 @@ msgid "Compiler"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:47 #: lib/block_scout_web/templates/address_contract/index.html.eex:49
msgid "Compiler version" msgid "Compiler version"
msgstr "" msgstr ""
@ -307,35 +307,35 @@ msgid "Connection Lost"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:12 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14
#: lib/block_scout_web/templates/block/index.html.eex:6 #: lib/block_scout_web/templates/block/index.html.eex:6
msgid "Connection Lost, click to load newer blocks" msgid "Connection Lost, click to load newer blocks"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17
msgid "Connection Lost, click to load newer internal transactions" msgid "Connection Lost, click to load newer internal transactions"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 #: lib/block_scout_web/templates/address_transaction/index.html.eex:13
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:17 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:17
#: lib/block_scout_web/templates/transaction/index.html.eex:23 #: lib/block_scout_web/templates/transaction/index.html.eex:23
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_validation/index.html.eex:10 #: lib/block_scout_web/templates/address_validation/index.html.eex:12
msgid "Connection Lost, click to load newer validations" msgid "Connection Lost, click to load newer validations"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:66 #: lib/block_scout_web/templates/address_contract/index.html.eex:68
msgid "Constructor Arguments" msgid "Constructor Arguments"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:104 #: lib/block_scout_web/templates/address_contract/index.html.eex:106
msgid "Contract ABI" msgid "Contract ABI"
msgstr "" msgstr ""
@ -355,8 +355,8 @@ msgid "Contract Address Pending"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:135 #: lib/block_scout_web/templates/address_contract/index.html.eex:137
#: lib/block_scout_web/templates/address_contract/index.html.eex:143 #: lib/block_scout_web/templates/address_contract/index.html.eex:145
msgid "Contract Byte Code" msgid "Contract Byte Code"
msgstr "" msgstr ""
@ -371,7 +371,7 @@ msgid "Contract Creation"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:120 #: lib/block_scout_web/templates/address_contract/index.html.eex:122
msgid "Contract Creation Code" msgid "Contract Creation Code"
msgstr "" msgstr ""
@ -388,17 +388,17 @@ msgid "Contract Name"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:39 #: lib/block_scout_web/templates/address_contract/index.html.eex:41
msgid "Contract name:" msgid "Contract name:"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:76 #: lib/block_scout_web/templates/address_contract/index.html.eex:78
msgid "Contract source code" msgid "Contract source code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:126 #: lib/block_scout_web/templates/address_contract/index.html.eex:128
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr "" msgstr ""
@ -408,7 +408,7 @@ msgid "Contribute"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:106 #: lib/block_scout_web/templates/address_contract/index.html.eex:108
msgid "Copy ABI" msgid "Copy ABI"
msgstr "" msgstr ""
@ -421,18 +421,18 @@ msgid "Copy Address"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:122 #: lib/block_scout_web/templates/address_contract/index.html.eex:124
msgid "Copy Contract Creation Code" msgid "Copy Contract Creation Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19
msgid "Copy Decompiled Contract Code" msgid "Copy Decompiled Contract Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:78 #: lib/block_scout_web/templates/address_contract/index.html.eex:80
#: lib/block_scout_web/templates/address_contract/index.html.eex:92 #: lib/block_scout_web/templates/address_contract/index.html.eex:94
msgid "Copy Source Code" msgid "Copy Source Code"
msgstr "" msgstr ""
@ -502,12 +502,12 @@ msgid "Decompiled code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17
msgid "Decompiled contract code" msgid "Decompiled contract code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:10
msgid "Decompiler version" msgid "Decompiler version"
msgstr "" msgstr ""
@ -546,7 +546,7 @@ msgid "Details"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:127 #: lib/block_scout_web/templates/address_contract/index.html.eex:129
msgid "Displaying the init data provided of the creating transaction." msgid "Displaying the init data provided of the creating transaction."
msgstr "" msgstr ""
@ -577,7 +577,7 @@ msgid "ETH RPC API Documentation"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:58 #: lib/block_scout_web/templates/address_contract/index.html.eex:60
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:82 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:82
msgid "EVM Version" msgid "EVM Version"
msgstr "" msgstr ""
@ -671,7 +671,7 @@ msgid "Nonce"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:184 #: lib/block_scout_web/templates/address_contract/index.html.eex:186
msgid "External libraries" msgid "External libraries"
msgstr "" msgstr ""
@ -707,9 +707,9 @@ msgid "Forked Blocks (Reorgs)"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:40 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:40
#: lib/block_scout_web/templates/address_transaction/index.html.eex:36 #: lib/block_scout_web/templates/address_transaction/index.html.eex:38
#: lib/block_scout_web/views/address_internal_transaction_view.ex:9 #: lib/block_scout_web/views/address_internal_transaction_view.ex:9
#: lib/block_scout_web/views/address_token_transfer_view.ex:9 #: lib/block_scout_web/views/address_token_transfer_view.ex:9
#: lib/block_scout_web/views/address_transaction_view.ex:9 #: lib/block_scout_web/views/address_transaction_view.ex:9
@ -805,7 +805,7 @@ msgid "There are no holders for this Token."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:56 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:58
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
@ -821,12 +821,12 @@ msgid "There are no logs for this transaction."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:51 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:53
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token/index.html.eex:20 #: lib/block_scout_web/templates/address_token/index.html.eex:22
msgid "There are no tokens for this address." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -836,7 +836,7 @@ msgid "There are no tokens."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:53 #: lib/block_scout_web/templates/address_transaction/index.html.eex:55
msgid "There are no transactions for this address." msgid "There are no transactions for this address."
msgstr "" msgstr ""
@ -857,9 +857,9 @@ msgid "This transaction is pending confirmation."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:34 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:36
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:32 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:34
#: lib/block_scout_web/templates/address_transaction/index.html.eex:30 #: lib/block_scout_web/templates/address_transaction/index.html.eex:32
#: lib/block_scout_web/views/address_internal_transaction_view.ex:8 #: lib/block_scout_web/views/address_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_token_transfer_view.ex:8 #: lib/block_scout_web/views/address_token_transfer_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8 #: lib/block_scout_web/views/address_transaction_view.ex:8
@ -898,7 +898,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:13 #: lib/block_scout_web/templates/address/_tabs.html.eex:13
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:17 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3
#: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16 #: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16
#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3
@ -1011,10 +1011,10 @@ msgid "Limit"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:16
#: lib/block_scout_web/templates/address_read_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_read_proxy/index.html.eex:16
#: lib/block_scout_web/templates/address_write_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_write_contract/index.html.eex:16
#: lib/block_scout_web/templates/address_write_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_write_proxy/index.html.eex:16
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:20 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:20
msgid "Loading..." msgid "Loading..."
msgstr "" msgstr ""
@ -1070,7 +1070,7 @@ msgid "Model"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:12
msgid "More internal transactions have come in" msgid "More internal transactions have come in"
msgstr "" msgstr ""
@ -1118,12 +1118,12 @@ msgid "OUT"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:43 #: lib/block_scout_web/templates/address_contract/index.html.eex:45
msgid "Optimization enabled" msgid "Optimization enabled"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:52 #: lib/block_scout_web/templates/address_contract/index.html.eex:54
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:114 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:114
msgid "Optimization runs" msgid "Optimization runs"
msgstr "" msgstr ""
@ -1257,7 +1257,7 @@ msgid "Run"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:14 #: lib/block_scout_web/templates/address_logs/index.html.eex:16
#: lib/block_scout_web/templates/layout/_topnav.html.eex:217 #: lib/block_scout_web/templates/layout/_topnav.html.eex:217
#: lib/block_scout_web/templates/layout/_topnav.html.eex:261 #: lib/block_scout_web/templates/layout/_topnav.html.eex:261
msgid "Search" msgid "Search"
@ -1312,13 +1312,13 @@ msgid "Block Rewards"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:36 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:38
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:52 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:54
#: lib/block_scout_web/templates/address_logs/index.html.eex:21 #: lib/block_scout_web/templates/address_logs/index.html.eex:23
#: lib/block_scout_web/templates/address_token/index.html.eex:15 #: lib/block_scout_web/templates/address_token/index.html.eex:17
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:56 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:58
#: lib/block_scout_web/templates/address_transaction/index.html.eex:48 #: lib/block_scout_web/templates/address_transaction/index.html.eex:50
#: lib/block_scout_web/templates/address_validation/index.html.eex:22 #: lib/block_scout_web/templates/address_validation/index.html.eex:24
#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 #: lib/block_scout_web/templates/block_transaction/index.html.eex:23
#: lib/block_scout_web/templates/chain/show.html.eex:184 #: lib/block_scout_web/templates/chain/show.html.eex:184
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:21 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:21
@ -1370,7 +1370,7 @@ msgid "Testnet"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_validation/index.html.eex:18 #: lib/block_scout_web/templates/address_validation/index.html.eex:20
msgid "There are no blocks validated by this address." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
@ -1380,7 +1380,7 @@ msgid "There are no blocks."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:26 #: lib/block_scout_web/templates/address_logs/index.html.eex:28
msgid "There are no logs for this address." msgid "There are no logs for this address."
msgstr "" msgstr ""
@ -1400,17 +1400,17 @@ msgid "There are no transactions."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:41 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:43
msgid "There is no coin history for this address." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:29
msgid "There is no decompilded contracts for this address." msgid "There is no decompilded contracts for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:27 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:29
#: lib/block_scout_web/templates/chain/show.html.eex:9 #: lib/block_scout_web/templates/chain/show.html.eex:9
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
msgstr "" msgstr ""
@ -1448,7 +1448,7 @@ msgid "To see accurate decoded input data, the contract must be verified."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/index.html.eex:12 #: lib/block_scout_web/templates/address_logs/index.html.eex:14
msgid "Topic" msgid "Topic"
msgstr "" msgstr ""
@ -1579,9 +1579,9 @@ msgid "Value"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
#: lib/block_scout_web/templates/address_contract/index.html.eex:151 #: lib/block_scout_web/templates/address_contract/index.html.eex:153
#: lib/block_scout_web/templates/address_contract/index.html.eex:163 #: lib/block_scout_web/templates/address_contract/index.html.eex:165
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:19 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:19
msgid "Verify & Publish" msgid "Verify & Publish"
msgstr "" msgstr ""
@ -1770,7 +1770,7 @@ msgid "Indexing Tokens"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:24 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:26
msgid "Loading chart" msgid "Loading chart"
msgstr "" msgstr ""
@ -1809,7 +1809,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:48 #: lib/block_scout_web/templates/address/_tabs.html.eex:48
#: lib/block_scout_web/templates/address_validation/index.html.eex:13 #: lib/block_scout_web/templates/address_validation/index.html.eex:15
#: lib/block_scout_web/views/address_view.ex:354 #: lib/block_scout_web/views/address_view.ex:354
msgid "Blocks Validated" msgid "Blocks Validated"
msgstr "" msgstr ""
@ -1837,7 +1837,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:28 #: lib/block_scout_web/templates/address/_tabs.html.eex:28
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:21
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:11
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:344 #: lib/block_scout_web/views/address_view.ex:344
@ -1847,7 +1847,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:41 #: lib/block_scout_web/templates/address/_tabs.html.eex:41
#: lib/block_scout_web/templates/address_logs/index.html.eex:8 #: lib/block_scout_web/templates/address_logs/index.html.eex:10
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17
#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8
#: lib/block_scout_web/views/address_view.ex:355 #: lib/block_scout_web/views/address_view.ex:355
@ -1865,8 +1865,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:21 #: lib/block_scout_web/templates/address/_tabs.html.eex:21
#: lib/block_scout_web/templates/address_token/index.html.eex:8 #: lib/block_scout_web/templates/address_token/index.html.eex:10
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:11 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:13
#: lib/block_scout_web/templates/layout/_topnav.html.eex:89 #: lib/block_scout_web/templates/layout/_topnav.html.eex:89
#: lib/block_scout_web/templates/layout/_topnav.html.eex:115 #: lib/block_scout_web/templates/layout/_topnav.html.eex:115
#: lib/block_scout_web/templates/tokens/index.html.eex:4 #: lib/block_scout_web/templates/tokens/index.html.eex:4
@ -1876,7 +1876,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:7 #: lib/block_scout_web/templates/address/_tabs.html.eex:7
#: lib/block_scout_web/templates/address_transaction/index.html.eex:15 #: lib/block_scout_web/templates/address_transaction/index.html.eex:17
#: lib/block_scout_web/templates/block_transaction/index.html.eex:10 #: lib/block_scout_web/templates/block_transaction/index.html.eex:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:18 #: lib/block_scout_web/templates/block_transaction/index.html.eex:18
#: lib/block_scout_web/templates/chain/show.html.eex:238 #: lib/block_scout_web/templates/chain/show.html.eex:238
@ -1969,12 +1969,12 @@ msgid "All functions displayed below are from ABI of that contract. In order to
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
msgid "All metadata displayed below is from that contract. In order to verify current contract, click" msgid "All metadata displayed below is from that contract. In order to verify current contract, click"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:22 #: lib/block_scout_web/templates/address_contract/index.html.eex:24
msgid "button" msgid "button"
msgstr "" msgstr ""
@ -1990,8 +1990,8 @@ msgid "Play"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:137 #: lib/block_scout_web/templates/address_contract/index.html.eex:139
#: lib/block_scout_web/templates/address_contract/index.html.eex:147 #: lib/block_scout_web/templates/address_contract/index.html.eex:149
msgid "Copy Byte Code" msgid "Copy Byte Code"
msgstr "" msgstr ""
@ -2611,7 +2611,7 @@ msgid "Stakes"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:20 #: lib/block_scout_web/templates/address_contract/index.html.eex:22
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:16 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:16
msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB" msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB"
msgstr "" msgstr ""
@ -2798,6 +2798,6 @@ msgid "Sources and metadata JSON file"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_contract/index.html.eex:33
msgid "This contract has been verified via Sourcify." msgid "This contract has been verified via Sourcify."
msgstr "" msgstr ""

@ -2,6 +2,7 @@ defmodule BlockScoutWeb.AddressReadContractControllerTest do
use BlockScoutWeb.ConnCase, async: true use BlockScoutWeb.ConnCase, async: true
use ExUnit.Case, async: false use ExUnit.Case, async: false
alias BlockScoutWeb.AddressControllerTest
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Chain.Address alias Explorer.Chain.Address
@ -51,6 +52,8 @@ defmodule BlockScoutWeb.AddressReadContractControllerTest do
insert(:smart_contract, address_hash: contract_address.hash) insert(:smart_contract, address_hash: contract_address.hash)
get_eip1967_implementation()
conn = conn =
get(conn, address_read_contract_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash))) get(conn, address_read_contract_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash)))
@ -79,4 +82,19 @@ defmodule BlockScoutWeb.AddressReadContractControllerTest do
assert html_response(conn, 404) assert html_response(conn, 404)
end end
end end
def get_eip1967_implementation do
expect(EthereumJSONRPC.Mox, :json_rpc, fn %{
id: 0,
method: "eth_getStorageAt",
params: [
_,
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
"latest"
]
},
_options ->
{:ok, "0x0000000000000000000000000000000000000000000000000000000000000000"}
end)
end
end end

@ -51,6 +51,8 @@ defmodule BlockScoutWeb.AddressReadProxyControllerTest do
insert(:smart_contract, address_hash: contract_address.hash) insert(:smart_contract, address_hash: contract_address.hash)
get_eip1967_implementation()
conn = get(conn, address_read_proxy_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash))) conn = get(conn, address_read_proxy_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash)))
assert html_response(conn, 200) assert html_response(conn, 200)
@ -77,4 +79,19 @@ defmodule BlockScoutWeb.AddressReadProxyControllerTest do
assert html_response(conn, 404) assert html_response(conn, 404)
end end
end end
def get_eip1967_implementation do
expect(EthereumJSONRPC.Mox, :json_rpc, fn %{
id: 0,
method: "eth_getStorageAt",
params: [
_,
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
"latest"
]
},
_options ->
{:ok, "0x0000000000000000000000000000000000000000000000000000000000000000"}
end)
end
end end

@ -5,6 +5,8 @@ defmodule BlockScoutWeb.AddressWriteContractControllerTest do
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Chain.Address alias Explorer.Chain.Address
use EthereumJSONRPC.Case, async: false
import Mox import Mox
describe "GET index/3" do describe "GET index/3" do
@ -51,6 +53,8 @@ defmodule BlockScoutWeb.AddressWriteContractControllerTest do
insert(:smart_contract, address_hash: contract_address.hash) insert(:smart_contract, address_hash: contract_address.hash)
get_eip1967_implementation()
conn = conn =
get(conn, address_write_contract_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash))) get(conn, address_write_contract_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash)))
@ -79,4 +83,19 @@ defmodule BlockScoutWeb.AddressWriteContractControllerTest do
assert html_response(conn, 404) assert html_response(conn, 404)
end end
end end
def get_eip1967_implementation do
expect(EthereumJSONRPC.Mox, :json_rpc, fn %{
id: 0,
method: "eth_getStorageAt",
params: [
_,
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
"latest"
]
},
_options ->
{:ok, "0x0000000000000000000000000000000000000000000000000000000000000000"}
end)
end
end end

@ -51,6 +51,8 @@ defmodule BlockScoutWeb.AddressWriteProxyControllerTest do
insert(:smart_contract, address_hash: contract_address.hash) insert(:smart_contract, address_hash: contract_address.hash)
get_eip1967_implementation()
conn = conn =
get(conn, address_write_proxy_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash))) get(conn, address_write_proxy_path(BlockScoutWeb.Endpoint, :index, Address.checksum(contract_address.hash)))
@ -79,4 +81,19 @@ defmodule BlockScoutWeb.AddressWriteProxyControllerTest do
assert html_response(conn, 404) assert html_response(conn, 404)
end end
end end
def get_eip1967_implementation do
expect(EthereumJSONRPC.Mox, :json_rpc, fn %{
id: 0,
method: "eth_getStorageAt",
params: [
_,
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
"latest"
]
},
_options ->
{:ok, "0x0000000000000000000000000000000000000000000000000000000000000000"}
end)
end
end end

@ -232,6 +232,8 @@ defmodule BlockScoutWeb.SmartContractControllerTest do
address = insert(:contract_address) address = insert(:contract_address)
smart_contract = insert(:smart_contract, address_hash: address.hash) smart_contract = insert(:smart_contract, address_hash: address.hash)
get_eip1967_implementation()
blockchain_get_function_mock() blockchain_get_function_mock()
path = path =
@ -288,4 +290,19 @@ defmodule BlockScoutWeb.SmartContractControllerTest do
end end
) )
end end
def get_eip1967_implementation do
expect(EthereumJSONRPC.Mox, :json_rpc, fn %{
id: 0,
method: "eth_getStorageAt",
params: [
_,
"0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc",
"latest"
]
},
_options ->
{:ok, "0x0000000000000000000000000000000000000000000000000000000000000000"}
end)
end
end end

@ -5961,7 +5961,7 @@ defmodule Explorer.Chain do
[] []
end end
def proxy_contract?(abi) when not is_nil(abi) do def proxy_contract?(address_hash, abi) when not is_nil(abi) do
implementation_method_abi = implementation_method_abi =
abi abi
|> Enum.find(fn method -> |> Enum.find(fn method ->
@ -5969,10 +5969,13 @@ defmodule Explorer.Chain do
master_copy_pattern?(method) master_copy_pattern?(method)
end) end)
if implementation_method_abi, do: true, else: false if implementation_method_abi ||
get_implementation_address_hash_eip_1967(address_hash) !== "0x0000000000000000000000000000000000000000",
do: true,
else: false
end end
def proxy_contract?(abi) when is_nil(abi), do: false def proxy_contract?(_address_hash, abi) when is_nil(abi), do: false
def gnosis_safe_contract?(abi) when not is_nil(abi) do def gnosis_safe_contract?(abi) when not is_nil(abi) do
implementation_method_abi = implementation_method_abi =
@ -5994,11 +5997,6 @@ defmodule Explorer.Chain do
Map.get(method, "name") == "implementation" Map.get(method, "name") == "implementation"
end) end)
implementation_method_abi_state_mutability =
implementation_method_abi && Map.get(implementation_method_abi, "stateMutability")
is_eip1967 = if implementation_method_abi_state_mutability == "nonpayable", do: true, else: false
master_copy_method_abi = master_copy_method_abi =
abi abi
|> Enum.find(fn method -> |> Enum.find(fn method ->
@ -6006,9 +6004,6 @@ defmodule Explorer.Chain do
end) end)
cond do cond do
is_eip1967 ->
get_implementation_address_hash_eip_1967(proxy_address_hash)
implementation_method_abi -> implementation_method_abi ->
get_implementation_address_hash_basic(proxy_address_hash, abi) get_implementation_address_hash_basic(proxy_address_hash, abi)
@ -6016,7 +6011,7 @@ defmodule Explorer.Chain do
get_implementation_address_hash_from_master_copy_pattern(proxy_address_hash) get_implementation_address_hash_from_master_copy_pattern(proxy_address_hash)
true -> true ->
nil get_implementation_address_hash_eip_1967(proxy_address_hash)
end end
end end

Loading…
Cancel
Save