<%= gettext "Token Transfers" %>
+
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
+
<%= gettext("Something went wrong, click to reload.") %>
+
<%= gettext "There are no transfers for this Token." %>
+
@@ -28,11 +33,17 @@
<%= gettext("Loading") %>...
-
-
+
+
+
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
+
+
+
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex
index 83bdb3372f..67a5980f28 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex
@@ -22,7 +22,7 @@
%>
<%= link(
gettext("Raw Trace"),
- class: "nav-link #{tab_status("raw_trace", @conn.request_path)}",
+ class: "card-tab #{tab_status("raw_trace", @conn.request_path)}",
to: transaction_raw_trace_path(@conn, :index, @transaction)
) %>
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex
index 6c04287c88..dd64899485 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex
@@ -1,12 +1,10 @@
-
<%= gettext "Validated Transactions" %>
-
- <%= gettext("Showing") %>
- <%= Cldr.Number.to_string!(@transaction_estimated_count, format: "#,###") %>
- <%= gettext("Validated Transactions") %>
-
+
<%= gettext "Validated Transactions" %>
+
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
+
<%= gettext "More transactions have come in" %>
@@ -40,9 +38,13 @@
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
+
+
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex
index c34d108a29..b0e8260d4e 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex
@@ -6,6 +6,15 @@
<%= gettext "Logs" %>
+
+ <%= if @next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, next_page_path: transaction_log_path(@conn,:index, @transaction, @next_page_params) %>
+ <% end %>
+
+ <%= if !@next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true %>
+ <% end %>
+
<%= if Enum.count(@logs) > 0 do %>
<%= for log <- @logs do %>
@@ -139,6 +148,15 @@
<% end %>
+ <%= if @next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, next_page_path: transaction_log_path(@conn,:index, @transaction, @next_page_params) %>
+ <% end %>
+
+ <%= if !@next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true %>
+ <% end %>
+
+
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex
index 2695dea13b..0d973adf5d 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex
@@ -2,16 +2,15 @@
<%= render BlockScoutWeb.TransactionView, "overview.html", assigns %>
-
-
+ <%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<%= gettext "Raw Trace" %>
<%= if Enum.count(@internal_transactions) > 0 do %>
<%= for {line, number} <- raw_traces_with_lines(@internal_transactions) do %><%= line %>
<% end %>
<% else %>
- No trace entries found.
+
+ No trace entries found.
+
<% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex
index 74cb6cb4fd..45da95e2b5 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex
@@ -5,6 +5,15 @@
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<%= gettext "Token Transfers" %>
+
+ <%= if @next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, next_page_path: transaction_token_transfer_path(@conn, :index, @transaction, @next_page_params) %>
+ <% end %>
+
+ <%= if !@next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true %>
+ <% end %>
+
<%= if Enum.any?(@token_transfers) do %>
<%= for token_transfer <- @token_transfers do %>
<%= render "_token_transfer.html", token_transfer: token_transfer, conn: @conn %>
@@ -14,18 +23,29 @@
<%= gettext "There are no token transfers for this transaction." %>
<% end %>
+
+ <%= if @next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, next_page_path: transaction_token_transfer_path(@conn, :index, @transaction, @next_page_params) %>
+ <% end %>
+
+ <%= if !@next_page_params do %>
+ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true %>
+ <% end %>
+
+
- <%= if @next_page_params do %>
- <%= link(
- gettext("Older"),
- class: "button button-secondary button-sm u-float-left mt-3",
- to: transaction_token_transfer_path(
- @conn,
- :index,
- @transaction,
- @next_page_params
- )
- ) %>
- <% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex
index 5dd7146279..9c403a4201 100644
--- a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex
+++ b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex
@@ -17,13 +17,7 @@ defmodule BlockScoutWeb.API.RPC.AddressView do
end
def render("balancemulti.json", %{addresses: addresses}) do
- data =
- Enum.map(addresses, fn address ->
- %{
- "account" => "#{address.hash}",
- "balance" => balance(address)
- }
- end)
+ data = Enum.map(addresses, &render_address/1)
RPCView.render("show.json", data: data)
end
@@ -61,10 +55,19 @@ defmodule BlockScoutWeb.API.RPC.AddressView do
RPCView.render("error.json", assigns)
end
+ defp render_address(address) do
+ %{
+ "account" => "#{address.hash}",
+ "balance" => balance(address),
+ "stale" => address.stale? || false
+ }
+ end
+
defp prepare_account(address) do
%{
- "balance" => to_string(address.fetched_coin_balance.value),
- "address" => to_string(address.hash)
+ "balance" => to_string(address.fetched_coin_balance && address.fetched_coin_balance.value),
+ "address" => to_string(address.hash),
+ "stale" => address.stale? || false
}
end
diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot
index b72a79cff6..7922c7d2f0 100644
--- a/apps/block_scout_web/priv/gettext/default.pot
+++ b/apps/block_scout_web/priv/gettext/default.pot
@@ -28,7 +28,7 @@ msgid "%{block_type} Height:"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block/index.html.eex:9
+#: lib/block_scout_web/templates/block/index.html.eex:10
msgid "%{block_type}s"
msgstr ""
@@ -98,20 +98,20 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:13
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:22
#: lib/block_scout_web/views/address_view.ex:101
msgid "Address"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:15
+#: lib/block_scout_web/templates/address/index.html.eex:4
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:59
msgid "Addresses"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:25
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:21
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:23
#: lib/block_scout_web/views/address_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8
msgid "All"
@@ -245,8 +245,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:17
-#: lib/block_scout_web/templates/transaction/index.html.eex:17
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:15
+#: lib/block_scout_web/templates/transaction/index.html.eex:15
msgid "Connection Lost, click to load newer transactions"
msgstr ""
@@ -335,8 +335,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:18
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:58
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:124
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:67
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:133
msgid "Data"
msgstr ""
@@ -414,8 +414,8 @@ msgid "Forked Blocks (Reorgs)"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:38
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:40
#: lib/block_scout_web/views/address_internal_transaction_view.ex:7
#: lib/block_scout_web/views/address_transaction_view.ex:7
msgid "From"
@@ -479,7 +479,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:14
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:55
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19
#: 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/views/address_view.ex:297
@@ -547,8 +547,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:111
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:12
-#: lib/block_scout_web/templates/transaction/index.html.eex:12
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10
+#: lib/block_scout_web/templates/transaction/index.html.eex:10
msgid "More transactions have come in"
msgstr ""
@@ -561,7 +561,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:55
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:64
msgid "Name"
msgstr ""
@@ -572,15 +572,13 @@ msgstr ""
#, elixir-format
#:
-#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:19
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:144
+#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:37
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:162
msgid "Newer"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:6
-#: lib/block_scout_web/templates/address/index.html.eex:36
-#: lib/block_scout_web/templates/address_token/index.html.eex:22
+#: lib/block_scout_web/templates/address_token/index.html.eex:39
msgid "Next"
msgstr ""
@@ -608,17 +606,17 @@ msgid "OUT"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:52
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:72
-#: lib/block_scout_web/templates/address_validation/index.html.eex:31
-#: lib/block_scout_web/templates/block/index.html.eex:23
-#: lib/block_scout_web/templates/block_transaction/index.html.eex:32
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:37
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34
-#: lib/block_scout_web/templates/transaction/index.html.eex:44
-#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:21
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:57
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:81
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:80
+#: lib/block_scout_web/templates/address_validation/index.html.eex:38
+#: lib/block_scout_web/templates/block/index.html.eex:30
+#: lib/block_scout_web/templates/block_transaction/index.html.eex:50
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:39
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:43
+#: lib/block_scout_web/templates/transaction/index.html.eex:45
+#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:38
msgid "Older"
msgstr ""
@@ -656,7 +654,6 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:8
msgid "Pending Transactions"
msgstr ""
@@ -735,12 +732,6 @@ msgstr ""
msgid "Show QR Code"
msgstr ""
-#, elixir-format
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:6
-#: lib/block_scout_web/templates/transaction/index.html.eex:6
-msgid "Showing"
-msgstr ""
-
#, elixir-format
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:210
@@ -765,33 +756,33 @@ msgid "There are no holders for this Token."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65
msgid "There are no internal transactions for this address."
msgstr ""
#, elixir-format
#:
-#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:13
+#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:22
msgid "There are no internal transactions for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:138
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:147
msgid "There are no logs for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
msgid "There are no token transfers for this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:14
+#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:23
msgid "There are no token transfers for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_token/index.html.eex:15
+#: lib/block_scout_web/templates/address_token/index.html.eex:24
msgid "There are no tokens for this address."
msgstr ""
@@ -801,17 +792,17 @@ msgid "There are no tokens."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:57
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:62
msgid "There are no transactions for this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block_transaction/index.html.eex:26
+#: lib/block_scout_web/templates/block_transaction/index.html.eex:35
msgid "There are no transactions for this block."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:21
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25
msgid "There are no transfers for this Token."
msgstr ""
@@ -821,8 +812,8 @@ msgid "This transaction is pending confirmation."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:31
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:27
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:29
#: lib/block_scout_web/views/address_internal_transaction_view.ex:6
#: lib/block_scout_web/views/address_transaction_view.ex:6
msgid "To"
@@ -883,7 +874,7 @@ msgid "Top Accounts - %{subnetwork} Explorer"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:94
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:103
msgid "Topics"
msgstr ""
@@ -925,7 +916,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:3
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:50
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:15
#: lib/block_scout_web/templates/block_transaction/index.html.eex:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:17
#: lib/block_scout_web/templates/chain/show.html.eex:108
@@ -977,7 +968,6 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/index.html.eex:4
-#: lib/block_scout_web/templates/transaction/index.html.eex:8
msgid "Validated Transactions"
msgstr ""
@@ -1074,11 +1064,6 @@ msgstr ""
msgid "string"
msgstr ""
-#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:21
-msgid "total addresses with a balance"
-msgstr ""
-
#, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:19
msgid "true"
@@ -1118,9 +1103,9 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:16
-#: lib/block_scout_web/templates/address_validation/index.html.eex:19
-#: lib/block_scout_web/templates/address_validation/index.html.eex:38
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
+#: lib/block_scout_web/templates/address_validation/index.html.eex:22
+#: lib/block_scout_web/templates/address_validation/index.html.eex:47
#: lib/block_scout_web/templates/chain/show.html.eex:99
#: lib/block_scout_web/templates/chain/show.html.eex:125
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21
@@ -1143,22 +1128,22 @@ msgid "GraphQL"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:60
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:69
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:80
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:35
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:66
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:80
-#: lib/block_scout_web/templates/block/index.html.eex:15
-#: lib/block_scout_web/templates/block/index.html.eex:30
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:34
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:44
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:66
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:90
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:47
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:71
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:89
+#: lib/block_scout_web/templates/block/index.html.eex:19
+#: lib/block_scout_web/templates/block/index.html.eex:39
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:32
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:48
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:33
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:44
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:29
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:41
-#: lib/block_scout_web/templates/transaction/index.html.eex:38
-#: lib/block_scout_web/templates/transaction/index.html.eex:52
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:52
+#: lib/block_scout_web/templates/transaction/index.html.eex:36
+#: lib/block_scout_web/templates/transaction/index.html.eex:54
msgid "Loading"
msgstr ""
@@ -1253,18 +1238,18 @@ msgid "Static Call"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:24
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:33
msgid "Decoded"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:57
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:66
msgid "Indexed?"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:17
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:56
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:65
msgid "Type"
msgstr ""
@@ -1274,7 +1259,7 @@ msgid "Method Id"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:29
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:38
msgid "To see decoded input data, the contract must be verified."
msgstr ""
@@ -1290,13 +1275,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:32
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:41
msgid "Verify the contract "
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:32
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:41
msgid "here"
msgstr ""
@@ -1312,41 +1297,41 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:28
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:68
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:77
msgid "Copy Value"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:39
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:48
msgid "Failed to decode log data."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:52
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:61
msgid "Log Data"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:32
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:57
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:52
-#: lib/block_scout_web/templates/address_validation/index.html.eex:26
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:57
+#: lib/block_scout_web/templates/address_validation/index.html.eex:29
#: lib/block_scout_web/templates/chain/show.html.eex:91
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:21
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:19
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:17
-#: lib/block_scout_web/templates/transaction/index.html.eex:22
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20
+#: lib/block_scout_web/templates/transaction/index.html.eex:20
msgid "Something went wrong, click to reload."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_validation/index.html.eex:22
+#: lib/block_scout_web/templates/address_validation/index.html.eex:25
msgid "There are no blocks validated by this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/index.html.eex:28
+#: lib/block_scout_web/templates/transaction/index.html.eex:26
msgid "There are no transactions."
msgstr ""
@@ -1367,34 +1352,34 @@ msgid "Coin Balance History"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:46
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:48
msgid "Loading balances"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:21
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22
#: lib/block_scout_web/templates/chain/show.html.eex:13
msgid "Loading chart"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:37
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39
msgid "There is no coin history for this address."
msgstr ""
#, 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:25
#: lib/block_scout_web/templates/chain/show.html.eex:16
msgid "There was a problem loading the chart."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:25
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23
msgid "There are no pending transactions."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block/index.html.eex:19
+#: lib/block_scout_web/templates/block/index.html.eex:23
msgid "There are no blocks."
msgstr ""
@@ -1727,33 +1712,36 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24
-#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:10
+#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:341
msgid "Raw Trace"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:22
-msgid " (page"
+#: lib/block_scout_web/templates/chain/show.html.eex:64
+msgid "Total blocks"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:19
-msgid " addresses of"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:37
+msgid "Page"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:11
-#: lib/block_scout_web/templates/address/index.html.eex:41
-msgid "Back"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11
+msgid "Records"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:17
-msgid "Showing "
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5
+msgid "Show"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/chain/show.html.eex:64
-msgid "Total blocks"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:37
+msgid "of"
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 db0457f814..8925a95acf 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
@@ -28,7 +28,7 @@ msgid "%{block_type} Height:"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block/index.html.eex:9
+#: lib/block_scout_web/templates/block/index.html.eex:10
msgid "%{block_type}s"
msgstr ""
@@ -98,20 +98,20 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:13
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:22
#: lib/block_scout_web/views/address_view.ex:101
msgid "Address"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:15
+#: lib/block_scout_web/templates/address/index.html.eex:4
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:59
msgid "Addresses"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:25
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:21
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:23
#: lib/block_scout_web/views/address_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8
msgid "All"
@@ -245,8 +245,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:17
-#: lib/block_scout_web/templates/transaction/index.html.eex:17
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:15
+#: lib/block_scout_web/templates/transaction/index.html.eex:15
msgid "Connection Lost, click to load newer transactions"
msgstr ""
@@ -335,8 +335,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:18
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:58
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:124
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:67
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:133
msgid "Data"
msgstr ""
@@ -414,8 +414,8 @@ msgid "Forked Blocks (Reorgs)"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:38
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:40
#: lib/block_scout_web/views/address_internal_transaction_view.ex:7
#: lib/block_scout_web/views/address_transaction_view.ex:7
msgid "From"
@@ -479,7 +479,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:14
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:55
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19
#: 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/views/address_view.ex:297
@@ -547,8 +547,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:111
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:12
-#: lib/block_scout_web/templates/transaction/index.html.eex:12
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10
+#: lib/block_scout_web/templates/transaction/index.html.eex:10
msgid "More transactions have come in"
msgstr ""
@@ -561,7 +561,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:55
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:64
msgid "Name"
msgstr ""
@@ -572,15 +572,13 @@ msgstr ""
#, elixir-format
#:
-#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:19
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:144
+#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:37
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:162
msgid "Newer"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:6
-#: lib/block_scout_web/templates/address/index.html.eex:36
-#: lib/block_scout_web/templates/address_token/index.html.eex:22
+#: lib/block_scout_web/templates/address_token/index.html.eex:39
msgid "Next"
msgstr ""
@@ -608,17 +606,17 @@ msgid "OUT"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:52
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:72
-#: lib/block_scout_web/templates/address_validation/index.html.eex:31
-#: lib/block_scout_web/templates/block/index.html.eex:23
-#: lib/block_scout_web/templates/block_transaction/index.html.eex:32
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:37
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34
-#: lib/block_scout_web/templates/transaction/index.html.eex:44
-#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:21
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:57
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:81
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:80
+#: lib/block_scout_web/templates/address_validation/index.html.eex:38
+#: lib/block_scout_web/templates/block/index.html.eex:30
+#: lib/block_scout_web/templates/block_transaction/index.html.eex:50
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:39
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:43
+#: lib/block_scout_web/templates/transaction/index.html.eex:45
+#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:38
msgid "Older"
msgstr ""
@@ -656,7 +654,6 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:8
msgid "Pending Transactions"
msgstr ""
@@ -735,12 +732,6 @@ msgstr ""
msgid "Show QR Code"
msgstr ""
-#, elixir-format
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:6
-#: lib/block_scout_web/templates/transaction/index.html.eex:6
-msgid "Showing"
-msgstr ""
-
#, elixir-format
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:210
@@ -765,33 +756,33 @@ msgid "There are no holders for this Token."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65
msgid "There are no internal transactions for this address."
msgstr ""
#, elixir-format
#:
-#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:13
+#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:22
msgid "There are no internal transactions for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:138
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:147
msgid "There are no logs for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
msgid "There are no token transfers for this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:14
+#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:23
msgid "There are no token transfers for this transaction."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_token/index.html.eex:15
+#: lib/block_scout_web/templates/address_token/index.html.eex:24
msgid "There are no tokens for this address."
msgstr ""
@@ -801,17 +792,17 @@ msgid "There are no tokens."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:57
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:62
msgid "There are no transactions for this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block_transaction/index.html.eex:26
+#: lib/block_scout_web/templates/block_transaction/index.html.eex:35
msgid "There are no transactions for this block."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:21
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25
msgid "There are no transfers for this Token."
msgstr ""
@@ -821,8 +812,8 @@ msgid "This transaction is pending confirmation."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:31
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:27
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:29
#: lib/block_scout_web/views/address_internal_transaction_view.ex:6
#: lib/block_scout_web/views/address_transaction_view.ex:6
msgid "To"
@@ -883,7 +874,7 @@ msgid "Top Accounts - %{subnetwork} Explorer"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:94
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:103
msgid "Topics"
msgstr ""
@@ -925,7 +916,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:3
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:50
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:15
#: lib/block_scout_web/templates/block_transaction/index.html.eex:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:17
#: lib/block_scout_web/templates/chain/show.html.eex:108
@@ -977,7 +968,6 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/index.html.eex:4
-#: lib/block_scout_web/templates/transaction/index.html.eex:8
msgid "Validated Transactions"
msgstr ""
@@ -1074,11 +1064,6 @@ msgstr ""
msgid "string"
msgstr ""
-#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:21
-msgid "total addresses with a balance"
-msgstr ""
-
#, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:19
msgid "true"
@@ -1118,9 +1103,9 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:16
-#: lib/block_scout_web/templates/address_validation/index.html.eex:19
-#: lib/block_scout_web/templates/address_validation/index.html.eex:38
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
+#: lib/block_scout_web/templates/address_validation/index.html.eex:22
+#: lib/block_scout_web/templates/address_validation/index.html.eex:47
#: lib/block_scout_web/templates/chain/show.html.eex:99
#: lib/block_scout_web/templates/chain/show.html.eex:125
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21
@@ -1143,22 +1128,22 @@ msgid "GraphQL"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:60
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:69
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:80
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:35
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:66
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:80
-#: lib/block_scout_web/templates/block/index.html.eex:15
-#: lib/block_scout_web/templates/block/index.html.eex:30
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:34
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:44
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:66
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:90
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:47
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:71
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:89
+#: lib/block_scout_web/templates/block/index.html.eex:19
+#: lib/block_scout_web/templates/block/index.html.eex:39
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:32
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:48
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:33
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:44
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:29
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:41
-#: lib/block_scout_web/templates/transaction/index.html.eex:38
-#: lib/block_scout_web/templates/transaction/index.html.eex:52
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:52
+#: lib/block_scout_web/templates/transaction/index.html.eex:36
+#: lib/block_scout_web/templates/transaction/index.html.eex:54
msgid "Loading"
msgstr ""
@@ -1253,18 +1238,18 @@ msgid "Static Call"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:24
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:33
msgid "Decoded"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:57
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:66
msgid "Indexed?"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:17
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:56
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:65
msgid "Type"
msgstr ""
@@ -1274,7 +1259,7 @@ msgid "Method Id"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:29
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:38
msgid "To see decoded input data, the contract must be verified."
msgstr ""
@@ -1290,13 +1275,13 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:32
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:41
msgid "Verify the contract "
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:32
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:41
msgid "here"
msgstr ""
@@ -1312,41 +1297,41 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:28
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:68
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:77
msgid "Copy Value"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:39
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:48
msgid "Failed to decode log data."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction_log/index.html.eex:52
+#: lib/block_scout_web/templates/transaction_log/index.html.eex:61
msgid "Log Data"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:32
-#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:57
-#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
-#: lib/block_scout_web/templates/address_transaction/index.html.eex:52
-#: lib/block_scout_web/templates/address_validation/index.html.eex:26
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34
+#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
+#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
+#: lib/block_scout_web/templates/address_transaction/index.html.eex:57
+#: lib/block_scout_web/templates/address_validation/index.html.eex:29
#: lib/block_scout_web/templates/chain/show.html.eex:91
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:21
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:19
-#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:17
-#: lib/block_scout_web/templates/transaction/index.html.eex:22
+#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20
+#: lib/block_scout_web/templates/transaction/index.html.eex:20
msgid "Something went wrong, click to reload."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_validation/index.html.eex:22
+#: lib/block_scout_web/templates/address_validation/index.html.eex:25
msgid "There are no blocks validated by this address."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/index.html.eex:28
+#: lib/block_scout_web/templates/transaction/index.html.eex:26
msgid "There are no transactions."
msgstr ""
@@ -1367,34 +1352,34 @@ msgid "Coin Balance History"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:46
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:48
msgid "Loading balances"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:21
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:23
#: lib/block_scout_web/templates/chain/show.html.eex:13
msgid "Loading chart"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:37
+#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39
msgid "There is no coin history for this address."
msgstr ""
#, 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
#: lib/block_scout_web/templates/chain/show.html.eex:16
msgid "There was a problem loading the chart."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/pending_transaction/index.html.eex:25
+#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23
msgid "There are no pending transactions."
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/block/index.html.eex:19
+#: lib/block_scout_web/templates/block/index.html.eex:23
msgid "There are no blocks."
msgstr ""
@@ -1727,33 +1712,36 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24
-#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:10
+#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:341
msgid "Raw Trace"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:22
-msgid " (page"
+#: lib/block_scout_web/templates/chain/show.html.eex:64
+msgid "Total blocks"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:19
-msgid " addresses of"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:37
+msgid "Page"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:11
-#: lib/block_scout_web/templates/address/index.html.eex:41
-msgid "Back"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11
+msgid "Records"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/index.html.eex:17
-msgid "Showing "
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5
+msgid "Show"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/chain/show.html.eex:64
-msgid "Total blocks"
+#:
+#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:37
+msgid "of"
msgstr ""
diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs
index 6e0eccc7c0..b3b8f0b08b 100644
--- a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs
+++ b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs
@@ -1,13 +1,44 @@
defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
- use BlockScoutWeb.ConnCase
+ use BlockScoutWeb.ConnCase, async: false
+ import Mox
+
+ alias BlockScoutWeb.API.RPC.AddressController
alias Explorer.Chain
+ alias Explorer.Chain.{BlockNumberCache, Events.Subscriber, Transaction, Wei}
+ alias Explorer.Counters.{AddressesWithBalanceCounter, AverageBlockTime}
+ alias Indexer.Fetcher.CoinBalanceOnDemand
alias Explorer.Repo
- alias Explorer.Chain.{Transaction, Wei}
- alias BlockScoutWeb.API.RPC.AddressController
+
+ setup :set_mox_global
+ setup :verify_on_exit!
+
+ setup do
+ mocked_json_rpc_named_arguments = [
+ transport: EthereumJSONRPC.Mox,
+ transport_options: []
+ ]
+
+ start_supervised!({Task.Supervisor, name: Indexer.TaskSupervisor})
+ start_supervised!(AverageBlockTime)
+ start_supervised!({CoinBalanceOnDemand, [mocked_json_rpc_named_arguments, [name: CoinBalanceOnDemand]]})
+ start_supervised!(AddressesWithBalanceCounter)
+
+ Application.put_env(:explorer, AverageBlockTime, enabled: true)
+ BlockNumberCache.setup(cache_period: 0)
+
+ on_exit(fn ->
+ Application.put_env(:explorer, AverageBlockTime, enabled: false)
+ end)
+
+ :ok
+ end
describe "listaccounts" do
setup do
+ Subscriber.to(:addresses, :on_demand)
+ Subscriber.to(:address_coin_balances, :on_demand)
+
%{params: %{"module" => "account", "action" => "listaccounts"}}
end
@@ -47,6 +78,73 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
}
] = response["result"]
end
+
+ test "with a stale balance", %{conn: conn, params: params} do
+ now = Timex.now()
+
+ mining_address =
+ insert(:address,
+ fetched_coin_balance: 0,
+ fetched_coin_balance_block_number: 2,
+ inserted_at: Timex.shift(now, minutes: -10)
+ )
+
+ mining_address_hash = to_string(mining_address.hash)
+ # we space these very far apart so that we know it will consider the 0th block stale (it calculates how far
+ # back we'd need to go to get 24 hours in the past)
+ insert(:block, number: 0, timestamp: Timex.shift(now, hours: -50), miner: mining_address)
+ insert(:block, number: 1, timestamp: Timex.shift(now, hours: -25), miner: mining_address)
+ AverageBlockTime.refresh()
+
+ address =
+ insert(:address,
+ fetched_coin_balance: 100,
+ fetched_coin_balance_block_number: 0,
+ inserted_at: Timex.shift(now, minutes: -5)
+ )
+
+ address_hash = to_string(address.hash)
+
+ expect(EthereumJSONRPC.Mox, :json_rpc, 1, fn [
+ %{
+ id: id,
+ method: "eth_getBalance",
+ params: [^address_hash, "0x1"]
+ }
+ ],
+ _options ->
+ {:ok, [%{id: id, jsonrpc: "2.0", result: "0x02"}]}
+ end)
+
+ response =
+ conn
+ |> get("/api", params)
+ |> json_response(200)
+
+ assert response["message"] == "OK"
+ assert response["status"] == "1"
+
+ assert [
+ %{
+ "address" => ^mining_address_hash,
+ "balance" => "0",
+ "stale" => false
+ },
+ %{
+ "address" => ^address_hash,
+ "balance" => "100",
+ "stale" => true
+ }
+ ] = response["result"]
+
+ {:ok, expected_wei} = Wei.cast(2)
+
+ assert_receive({:chain_event, :addresses, :on_demand, [received_address]})
+
+ assert received_address.hash == address.hash
+ assert received_address.fetched_coin_balance == expected_wei
+ assert received_address.fetched_coin_balance_block_number == 1
+ end
end
describe "balance" do
@@ -140,7 +238,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
expected_result =
Enum.map(addresses, fn address ->
- %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}"}
+ %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}", "stale" => false}
end)
assert response =
@@ -209,8 +307,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
}
expected_result = [
- %{"account" => address1, "balance" => "0"},
- %{"account" => address2, "balance" => "0"}
+ %{"account" => address1, "balance" => "0", "stale" => false},
+ %{"account" => address2, "balance" => "0", "stale" => false}
]
assert response =
@@ -242,7 +340,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
expected_result =
Enum.map(addresses, fn address ->
- %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}"}
+ %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}", "stale" => false}
end)
assert response =
@@ -266,8 +364,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
}
expected_result = [
- %{"account" => address2_hash, "balance" => "0"},
- %{"account" => "#{address1.hash}", "balance" => "#{address1.fetched_coin_balance.value}"}
+ %{"account" => address2_hash, "balance" => "0", "stale" => false},
+ %{"account" => "#{address1.hash}", "balance" => "#{address1.fetched_coin_balance.value}", "stale" => false}
]
assert response =
@@ -314,7 +412,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
}
expected_result = [
- %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}"}
+ %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}", "stale" => false}
]
assert response =
diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs
index 43169a65d2..399e49bfff 100644
--- a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs
+++ b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs
@@ -100,6 +100,34 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do
]
end
+ test "filtering for only unverified contracts does not show self destructed contracts", %{
+ params: params,
+ conn: conn
+ } do
+ address = insert(:contract_address)
+ insert(:smart_contract)
+ insert(:contract_address, contract_code: "0x")
+
+ response =
+ conn
+ |> get("/api", Map.put(params, "filter", "unverified"))
+ |> json_response(200)
+
+ assert response["message"] == "OK"
+ assert response["status"] == "1"
+
+ assert response["result"] == [
+ %{
+ "ABI" => "Contract source code not verified",
+ "Address" => to_string(address.hash),
+ "CompilerVersion" => "",
+ "ContractName" => "",
+ "DecompilerVersion" => "",
+ "OptimizationUsed" => ""
+ }
+ ]
+ end
+
test "filtering for only verified contracts shows only verified contracts", %{params: params, conn: conn} do
insert(:contract_address)
contract = insert(:smart_contract)
@@ -222,6 +250,35 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do
}
]
end
+
+ test "filtering for only not_decompiled (and by extension not verified contracts) does not show empty contracts", %{
+ params: params,
+ conn: conn
+ } do
+ insert(:decompiled_smart_contract)
+ insert(:smart_contract)
+ insert(:contract_address, contract_code: "0x")
+ contract_address = insert(:contract_address)
+
+ response =
+ conn
+ |> get("/api", Map.put(params, "filter", "not_decompiled"))
+ |> json_response(200)
+
+ assert response["message"] == "OK"
+ assert response["status"] == "1"
+
+ assert response["result"] == [
+ %{
+ "ABI" => "Contract source code not verified",
+ "Address" => to_string(contract_address.hash),
+ "CompilerVersion" => "",
+ "ContractName" => "",
+ "DecompilerVersion" => "",
+ "OptimizationUsed" => ""
+ }
+ ]
+ end
end
describe "getabi" do
diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex
index 713d449d72..adb9759638 100644
--- a/apps/explorer/lib/explorer/chain.ex
+++ b/apps/explorer/lib/explorer/chain.ex
@@ -2802,6 +2802,7 @@ defmodule Explorer.Chain do
on: smart_contract.address_hash == address.hash,
where: not is_nil(address.contract_code),
where: is_nil(smart_contract.address_hash),
+ where: address.contract_code != <<>>,
preload: [{:smart_contract, smart_contract}, :decompiled_smart_contracts],
order_by: [asc: address.inserted_at],
limit: ^limit,
@@ -2811,6 +2812,19 @@ defmodule Explorer.Chain do
Repo.all(query)
end
+ def list_empty_contracts(limit, offset) do
+ query =
+ from(address in Address,
+ where: address.contract_code == <<>>,
+ preload: [:smart_contract, :decompiled_smart_contracts],
+ order_by: [asc: address.inserted_at],
+ limit: ^limit,
+ offset: ^offset
+ )
+
+ Repo.all(query)
+ end
+
def list_not_decompiled_contracts(limit, offset) do
query =
from(
@@ -2820,6 +2834,7 @@ defmodule Explorer.Chain do
"NOT EXISTS (SELECT 1 FROM decompiled_smart_contracts WHERE decompiled_smart_contracts.address_hash = ?)",
address.hash
),
+ where: address.contract_code != <<>>,
left_join: smart_contract in SmartContract,
on: smart_contract.address_hash == address.hash,
left_join: decompiled_smart_contract in DecompiledSmartContract,
diff --git a/apps/explorer/lib/explorer/chain/address.ex b/apps/explorer/lib/explorer/chain/address.ex
index be2866fa35..a565306fd7 100644
--- a/apps/explorer/lib/explorer/chain/address.ex
+++ b/apps/explorer/lib/explorer/chain/address.ex
@@ -76,6 +76,7 @@ defmodule Explorer.Chain.Address do
field(:contract_code, Data)
field(:nonce, :integer)
field(:has_decompiled_code?, :boolean, virtual: true)
+ field(:stale?, :boolean, virtual: true)
has_one(:smart_contract, SmartContract)
has_one(:token, Token, foreign_key: :contract_address_hash)