Merge branch 'master' into ab-logs-tab

pull/1956/head
Ayrat Badykov 6 years ago committed by GitHub
commit 45ad353e22
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      CHANGELOG.md
  2. 8
      apps/block_scout_web/assets/css/_helpers.scss
  3. 2
      apps/block_scout_web/assets/css/app.scss
  4. 2
      apps/block_scout_web/assets/css/components/_card.scss
  5. 42
      apps/block_scout_web/assets/css/components/_pagination.scss
  6. 113
      apps/block_scout_web/assets/css/components/_pagination_container.scss
  7. 50
      apps/block_scout_web/assets/css/theme/_ropsten_variables.scss
  8. 8
      apps/block_scout_web/assets/js/lib/async_listing_load.js
  9. 4
      apps/block_scout_web/assets/js/lib/list_morph.js
  10. 49
      apps/block_scout_web/assets/static/images/ropsten_logo.svg
  11. 18
      apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex
  12. 40
      apps/block_scout_web/lib/block_scout_web/etherscan.ex
  13. 39
      apps/block_scout_web/lib/block_scout_web/templates/address/index.html.eex
  14. 12
      apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/index.html.eex
  15. 12
      apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/index.html.eex
  16. 21
      apps/block_scout_web/lib/block_scout_web/templates/address_token/index.html.eex
  17. 12
      apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/index.html.eex
  18. 11
      apps/block_scout_web/lib/block_scout_web/templates/address_transaction/index.html.eex
  19. 9
      apps/block_scout_web/lib/block_scout_web/templates/address_validation/index.html.eex
  20. 12
      apps/block_scout_web/lib/block_scout_web/templates/block/index.html.eex
  21. 19
      apps/block_scout_web/lib/block_scout_web/templates/block_transaction/index.html.eex
  22. 9
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_pagination.html.eex
  23. 60
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_pagination_container.html.eex
  24. 16
      apps/block_scout_web/lib/block_scout_web/templates/pending_transaction/index.html.eex
  25. 15
      apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/index.html.eex
  26. 2
      apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex
  27. 14
      apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex
  28. 19
      apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex
  29. 19
      apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex
  30. 7
      apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex
  31. 24
      apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex
  32. 21
      apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex
  33. 210
      apps/block_scout_web/priv/gettext/default.pot
  34. 210
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  35. 118
      apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs
  36. 1
      apps/explorer/lib/explorer/chain/address.ex

@ -1,6 +1,8 @@
## Current
### Features
- [#1928](https://github.com/poanetwork/blockscout/pull/1928) - pagination styles were updated
- [#1948](https://github.com/poanetwork/blockscout/pull/1948) - added ropsten theme and ropsten logo
- [#1940](https://github.com/poanetwork/blockscout/pull/1940) - qr modal button and background issue
- [#1936](https://github.com/poanetwork/blockscout/pull/1936) - added kovan, sokol themes and logos
- [#1925](https://github.com/poanetwork/blockscout/pull/1925) - added dai theme and logo
@ -17,6 +19,7 @@
- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces
- [#1920](https://github.com/poanetwork/blockscout/pull/1920) - fix: remove source code fields from list endpoint
- [#1876](https://github.com/poanetwork/blockscout/pull/1876) - async calculate a count of blocks
- [#1941](https://github.com/poanetwork/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc
### Fixes
@ -37,6 +40,7 @@
- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type
- [#1898](https://github.com/poanetwork/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments
- [#1915](https://github.com/poanetwork/blockscout/pull/1915) - fallback to 2 latest evm versions
- [#1937](https://github.com/poanetwork/blockscout/pull/1937) - Check the presence of overlap[i] object before retrieving properties from it
### Chore

@ -21,3 +21,11 @@
margin-right: 0;
}
}
.clearfix:after {
clear: both;
content: " "; /* Older browser do not support empty content */
display: block;
height: 0;
visibility: hidden;
}

@ -69,7 +69,7 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts";
@import "components/panels";
@import "components/nav_tabs";
@import "components/dot";
@import "components/pagination";
@import "components/pagination_container";
@import "components/address_link";
@import "components/footer";
@import "components/filter";

@ -67,7 +67,7 @@ $card-background-1-text-color: #fff !default;
}
.card-subtitle {
color: #aaa;
color: #333;
font-size: 12px;
font-weight: normal;
line-height: 1.2;

@ -1,42 +0,0 @@
$pagination-page-link-background: #f5f6fa !default;
$pagination-page-link-color: #a3a9b5 !default;
$pagination-page-link-background-active: $primary !default;
$pagination-page-link-color-active: #fff !default;
.pagination {
margin: 0;
padding: 30px;
.page-item {
margin: 0 10px 0 0;
&:last-child {
margin-right: 0;
}
}
.page-link {
background-color: $pagination-page-link-background;
border: 1px solid $pagination-page-link-background;
color: $pagination-page-link-color;
display: block;
line-height: 1.25;
margin: 0;
padding: 0.5rem 0.75rem;
position: relative;
&:hover {
background-color: darken($pagination-page-link-background, 5%);
border-color: darken($pagination-page-link-background, 5%);
}
.active & {
&,
&:hover {
background-color: $pagination-page-link-background-active;
border-color: $pagination-page-link-background-active;
color: $pagination-page-link-color-active;
}
}
}
}

@ -0,0 +1,113 @@
$pagination-page-link-background: #f5f6fa !default;
$pagination-page-link-color: #a3a9b5 !default;
$pagination-page-link-background-active: $primary !default;
$pagination-page-link-color-active: #fff !default;
@mixin pagination-container-base($background-color, $text-color) {
background-color: $background-color;
border: 1px solid $background-color;
color: $text-color;
path {
fill: $text-color;
}
}
.pagination-container {
display: flex;
justify-content: space-between;
@include media-breakpoint-down(sm) {
flex-direction: column;
}
&.position-bottom {
padding-top: 30px;
}
&.position-top {
padding-bottom: 30px;
}
.pagination-limit {
align-items: center;
color: #033333;
display: flex;
font-size: 12px;
font-weight: 600;
line-height: 1.2;
@include media-breakpoint-down(sm) {
margin-bottom: 15px;
}
select {
margin: 0 10px;
}
}
.pagination {
margin: 0 0 0 auto;
padding: 0;
@include media-breakpoint-down(sm) {
justify-content: space-between;
margin: 0;
}
.page-item {
margin: 0 5px 0 0;
&:last-child {
margin-right: 0;
}
&.active .page-link {
@include pagination-container-base($pagination-page-link-background-active, $pagination-page-link-color-active);
cursor: default;
pointer-events: none;
&:hover {
@include pagination-container-base($pagination-page-link-background-active, $pagination-page-link-color-active);
}
}
}
.page-link {
@include pagination-container-base($pagination-page-link-background, $pagination-page-link-color);
align-items: center;
border-radius: 2px;
display: flex;
font-size: 12px;
font-weight: 600;
height: 24px;
margin: 0;
padding: 0 8px;
position: relative;
user-select: none;
text-align: center;
white-space: nowrap;
&:not(.no-hover):hover {
@include pagination-container-base($pagination-page-link-background-active, $pagination-page-link-color-active);
}
&[href=''] {
pointer-events: none;
}
&.no-hover {
cursor: default;
}
&[disabled] {
@include pagination-container-base($pagination-page-link-background, $pagination-page-link-color);
cursor: not-allowed;
opacity: 0.4;
outline: none;
pointer-events: none;
}
}
}
}

@ -1,8 +1,50 @@
$primary: #2fa8f8;
$secondary: #a2daff;
$tertiary: #006aa7;
// general
$primary: #153550;
$secondary: #38a9f5;
$tertiary: #76f1ff;
$additional-font: #89cae6;
// footer
$footer-background-color: $primary;
$footer-title-color: #fff;
$footer-text-color: #fff;
$footer-text-color: #89cae6;
$footer-item-disc-color: $secondary;
.footer-logo { filter: brightness(0) invert(1); }
// dashboard
$dashboard-line-color-price: $tertiary; // price left border
$dashboard-banner-chart-legend-value-color: $additional-font; // chart labels
$dashboard-stats-item-value-color: $additional-font; // stat values
$dashboard-stats-item-border-color: $tertiary; // stat border
$dashboard-banner-gradient-start: $primary; // gradient begin
$dashboard-banner-gradient-end: lighten($primary, 5); // gradient end
$dashboard-banner-network-plain-container-background-color: #1c476c; // stats bg
// navigation
.navbar { box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); } // header shadow
$header-icon-border-color-hover: $secondary; // top border on hover
$header-icon-color-hover: $secondary; // nav icon on hover
.dropdown-item:hover, .dropdown-item:focus { background-color: $secondary !important; } // dropdown item on hover
// buttons
$btn-line-bg: #fff; // button bg
$btn-line-color: $secondary; // button border and font color && hover bg color
$btn-copy-color: $secondary; // btn copy
$btn-qr-color: $secondary; // btn qr-code
//links & tile
.tile a { color: $secondary !important; } // links color for badges
.tile-type-block {
border-left: 4px solid $secondary;
} // tab active bg
// card
$card-background-1: $secondary;
$card-tab-active: $secondary;

@ -145,11 +145,11 @@ export const elements = {
},
'[data-async-listing] [data-next-page-button]': {
render ($el, state) {
if (state.requestError) return $el.hide()
if (!state.nextPagePath) return $el.hide()
if (state.loading) return $el.hide()
if (state.requestError || !state.nextPagePath || state.loading) {
return $el.attr('disabled', 'disabled')
}
$el.show()
$el.attr('disabled', false)
$el.attr('href', state.nextPagePath)
}
},

@ -42,8 +42,8 @@ export default function (container, newElements, { key, horizontal } = {}) {
// update kept items
currentList = currentList.map(({ el }, i) => ({
id: overlap[i].id,
el: el.outerHTML === overlap[i].el.outerHTML ? el : morph(el, overlap[i].el)
id: overlap[i] && overlap[i].id,
el: el.outerHTML === overlap[i] && overlap[i].el && overlap[i].el.outerHTML ? el : morph(el, overlap[i].el)
}))
// add new items

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

@ -4,6 +4,7 @@ defmodule BlockScoutWeb.API.RPC.AddressController do
alias BlockScoutWeb.API.RPC.Helpers
alias Explorer.{Chain, Etherscan}
alias Explorer.Chain.{Address, Wei}
alias Indexer.Fetcher.CoinBalanceOnDemand
def listaccounts(conn, params) do
options =
@ -279,12 +280,15 @@ defmodule BlockScoutWeb.API.RPC.AddressController do
offset = (max(page_number, 1) - 1) * page_size
# limit is just page_size
Chain.list_ordered_addresses(offset, page_size)
offset
|> Chain.list_ordered_addresses(page_size)
|> trigger_balances_and_add_status()
end
defp hashes_to_addresses(address_hashes) do
address_hashes
|> Chain.hashes_to_addresses()
|> trigger_balances_and_add_status()
|> add_not_found_addresses(address_hashes)
end
@ -307,6 +311,18 @@ defmodule BlockScoutWeb.API.RPC.AddressController do
end)
end
defp trigger_balances_and_add_status(addresses) do
Enum.map(addresses, fn address ->
case CoinBalanceOnDemand.trigger_fetch(address) do
:current ->
%{address | stale?: false}
_ ->
%{address | stale?: true}
end
end)
end
defp to_contract_address_hash(nil), do: {:contract_address, {:ok, nil}}
defp to_contract_address_hash(address_hash_string) do

@ -21,15 +21,18 @@ defmodule BlockScoutWeb.Etherscan do
"result" => [
%{
"account" => "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
"balance" => "40807168566070000000000"
"balance" => "40807168566070000000000",
"stale" => true
},
%{
"account" => "0x63a9975ba31b0b9626b34300f7f627147df1f526",
"balance" => "332567136222827062478"
"balance" => "332567136222827062478",
"stale" => false
},
%{
"account" => "0x198ef1ec325a96cc354c7266a038be8b5c558f67",
"balance" => "185178830000000000"
"balance" => "185178830000000000",
"stale" => false
}
]
}
@ -496,6 +499,13 @@ defmodule BlockScoutWeb.Etherscan do
example: ~s("0x95426f2bc716022fcf1def006dbc4bb81f5b5164")
}
@stale_type %{
type: "boolean",
definition:
"Represents whether or not the balance has not been checked in the last 24 hours, and will be rechecked.",
example: true
}
@transaction_hash_type %{
type: "transaction hash",
definition:
@ -571,7 +581,8 @@ defmodule BlockScoutWeb.Etherscan do
name: "AddressBalance",
fields: %{
address: @address_hash_type,
balance: @wei_type
balance: @wei_type,
stale: @stale_type
}
}
@ -988,7 +999,16 @@ defmodule BlockScoutWeb.Etherscan do
@account_balance_action %{
name: "balance",
description: "Get balance for address. Also available through a GraphQL 'addresses' query.",
description: """
Get balance for address. Also available through a GraphQL 'addresses' query.
If the balance hasn't been updated in a long time, we will double check
with the node to fetch the absolute latest balance. This will not be
reflected in the current request, but once it is updated, subsequent requests
will show the updated balance. If you want to know whether or not we are checking
for another balance, use the `balancemulti` action. That contains a property
called `stale` that will let you know to recheck that balance in the near future.
""",
required_params: [
%{
key: "address",
@ -1022,7 +1042,15 @@ defmodule BlockScoutWeb.Etherscan do
@account_balancemulti_action %{
name: "balancemulti",
description: "Get balance for multiple addresses. Also available through a GraphQL 'addresses' query.",
description: """
Get balance for multiple addresses. Also available through a GraphQL 'addresses' query.
If the balance hasn't been updated in a long time, we will double check
with the node to fetch the absolute latest balance. This will not be
reflected in the current request, but once it is updated, subsequent requests
will show the updated balance. You can know that this is taking place via
the `stale` attribute, which is set to `true` if a new balance is being fetched.
""",
required_params: [
%{
key: "address",

@ -1,47 +1,20 @@
<section class="container">
<div class="card">
<div class="card-body">
<%= if @next_page_path do %>
<a href="<%= "#{@next_page_path}" %>" class="button button-secondary button-small float-right ml-1">
<%= gettext("Next") %>
</a>
<% end %>
<%= if @prev_page_path do %>
<a href="<%= "#{@prev_page_path}" %>" class="button button-secondary button-small float-right">
<%= gettext("Back") %>
</a>
<% end %>
<h1 class="card-title"><%= gettext "Addresses" %></h1>
<h1 class="card-title margin-bottom-0"><%= gettext "Addresses" %></h1>
<p class="card-subtitle">
<%= gettext "Showing " %>
<%= Cldr.Number.to_string!(@page_address_count, format: "#,###") %>
<%= gettext " addresses of" %>
<%= Cldr.Number.to_string!(@address_count, format: "#,###") %>
<%= gettext "total addresses with a balance" %>
<%= gettext " (page" %>
<%= Cldr.Number.to_string!(@cur_page_number, format: "#,###)") %>
</p>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", prev_page_path: @prev_page_path, next_page_path: @next_page_path, cur_page_number: @cur_page_number, show_pagination_limit: true %>
<span data-selector="top-addresses-list">
<div data-selector="top-addresses-list">
<%= for {{address, tx_count}, index} <- Enum.with_index(@address_tx_count_pairs, 1) do %>
<%= render "_tile.html",
address: address, index: index, exchange_rate: @exchange_rate,
total_supply: @total_supply, tx_count: tx_count,
validation_count: validation_count(address) %>
<% end %>
<br>
<%= if @next_page_path do %>
<a href="<%= "#{@next_page_path}" %>" class="button button-secondary button-small float-right mt-0 mb-0 ml-1">
<%= gettext("Next") %>
</a>
<% end %>
<%= if @prev_page_path do %>
<a href="<%= "#{@prev_page_path}" %>" class="button button-secondary button-small float-right mt-0 mb-0">
<%= gettext("Back") %>
</a>
<% end %>
</span>
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", prev_page_path: @prev_page_path, next_page_path: @next_page_path, cur_page_number: @cur_page_number, show_pagination_limit: true %>
</div>
</div>
</section>

@ -13,20 +13,22 @@
<h2 class="card-title"><%= gettext "Balances" %></h2>
<div data-chart-loading-message class="tile tile-muted text-center mt-3">
<!-- Chart -->
<div data-chart-loading-message class="tile tile-muted text-center mt-3 mb-4">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
<span class="loading-spinner-block-2"></span>
</span>
<%= gettext("Loading chart") %>...
</div>
<button data-chart-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<button data-chart-error-message class="alert alert-danger col-12 text-left mb-4" style="display: none;">
<span><%= gettext("There was a problem loading the chart.") %></span>
</button>
<div data-chart-container style="display: none;">
<div data-chart-container style="display: none;" class="mb-4">
<canvas data-chart="coinBalanceHistoryChart" data-coin_balance_history_data_path="<%= address_coin_balance_by_day_path(@conn, :index, @address) %>" width="350" height="152"></canvas>
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<button data-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
@ -48,9 +50,13 @@
<div data-selector="coin-balances-list" data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">

@ -15,6 +15,8 @@
<a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer internal transactions" %></a>
</div>
</div>
<div class="clearfix">
<h2 class="card-title float-left"><%= gettext "Internal Transactions" %></h2>
<div class="dropdown float-right u-push-sm">
<button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button"
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@ -51,8 +53,10 @@
) %>
</div>
</div>
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<h2 class="card-title"><%= gettext "Internal Transactions" %></h2>
<button data-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
</button>
@ -69,9 +73,15 @@
<%= gettext("Loading") %>...
</div>
<div data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>

@ -6,6 +6,15 @@
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %>
<div class="card-body">
<h2 class="card-title"><%= gettext "Tokens" %></h2>
<%= if @next_page_params do %>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, next_page_path: address_token_path(@conn, :index, @address, @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?(@tokens) do %>
<%= for token <- @tokens do %>
<%= render "_tokens.html", conn: @conn, token: token, address: @address %>
@ -16,7 +25,15 @@
</div>
<% end %>
<div>
<%= if @next_page_params do %>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, next_page_path: address_token_path(@conn, :index, @address, @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("Next"),
@ -29,7 +46,7 @@
)
) %>
<% end %>
</div>
-->
</div>
</div>
</section>

@ -8,6 +8,9 @@
<h2 class="card-title">
<span class="text-muted"><%= gettext "Tokens" %></span> / <%= token_name(@token) %>
</h2>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<div data-loading-message class="tile tile-muted text-center mt-3">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
@ -15,18 +18,27 @@
</span>
<%= gettext("Loading...") %>
</div>
<div data-empty-response-message class="tile tile-muted text-center" style="display: none;">
<span><%= gettext "There are no token transfers for this address." %></span>
</div>
<button data-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<span class="alert-link">
<%= gettext "Something went wrong, click to reload." %>
</span>
</button>
<div data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a data-next-page-button href="#" class="button button-secondary button-small float-right mt-4" style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div data-loading-button class="button button-secondary button-small float-right mt-4" style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>

@ -11,6 +11,8 @@
<a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer transactions" %></a>
</div>
</div>
<div class="clearfix">
<h2 class="card-title float-left"><%= gettext "Transactions" %></h2>
<div class="dropdown float-right u-push-sm">
<button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button"
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
@ -47,7 +49,10 @@
) %>
</div>
</div>
<h2 class="card-title"><%= gettext "Transactions" %></h2>
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<button data-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
</button>
@ -68,9 +73,13 @@
<div data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">

@ -11,6 +11,9 @@
</div>
</div>
<h2 class="card-title"><%=gettext("Blocks Validated")%></h2>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<div data-loading-message class="tile tile-muted text-center mt-3">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
@ -27,9 +30,15 @@
</span>
</button>
<div data-items data-selector="validations-list"></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a data-next-page-button href="#" class="button button-secondary button-small float-right mt-4" style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div data-loading-button class="button button-secondary button-small float-right mt-4" style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>

@ -6,7 +6,11 @@
<a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer blocks" %></a>
</div>
</div>
<h1 class="card-title"><%= gettext("%{block_type}s", block_type: @block_type) %></h1>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<div data-loading-message class="tile tile-muted text-center mt-3">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
@ -18,10 +22,15 @@
<div data-empty-response-message style="display: none;">
<span><%= gettext "There are no blocks." %></span>
</div>
</span>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
@ -29,6 +38,7 @@
</span>
<%= gettext("Loading") %>...
</div>
</div>
</div>
</section>

@ -15,6 +15,15 @@
</div>
<div class="card-body">
<h2 class="card-title"><%= gettext "Transactions" %></h2>
<%= 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_path(@conn, :index, @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(@transactions) > 0 do %>
<span data-selector="transactions-list">
<%= for transaction <- @transactions do %>
@ -27,6 +36,15 @@
</div>
<% 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_path(@conn, :index, @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"),
@ -38,6 +56,7 @@
)
) %>
<% end %>
-->
</div>
</div>
</section>

@ -1,9 +0,0 @@
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#"><</a></li>
<li class="page-item active"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">...</a></li>
<li class="page-item"><a class="page-link" href="#">12</a></li>
<li class="page-item"><a class="page-link" href="#">></a></li>
</ul>

@ -0,0 +1,60 @@
<div class='pagination-container <%= if assigns[:position] == "top" do %>position-top<% end %> <%= if assigns[:position] == "bottom" do %>position-bottom<% end %>'>
<%= if assigns[:show_pagination_limit] do %>
<!-- Pagination limit -->
<div class="pagination-limit">
<%= gettext "Show" %>
<select>
<option>20</option>
<option>50</option>
<option>100</option>
</select>
<%= gettext "Records" %>
</div>
<% end %>
<!-- Pagination -->
<ul class="pagination">
<!-- First -->
<li class="page-item">
<a
<%= if !assigns[:first_page_path] do %>disabled<% end %>
class="page-link"
href='<%= "#{assigns[:first_page_path]}" %>'
>First</a>
</li>
<!-- Previous -->
<li class="page-item">
<a
<%= if !assigns[:prev_page_path] do %>disabled<% end %>
class="page-link"
href='<%= "#{assigns[:prev_page_path]}" %>'
>
<svg xmlns="http://www.w3.org/2000/svg" width="6" height="10">
<path fill-rule="evenodd" d="M2.358 5l3.357 3.358a.959.959 0 1 1-1.357 1.357L.502 5.859c-.076-.042-.153-.08-.217-.144A.949.949 0 0 1 .011 5a.949.949 0 0 1 .274-.715c.064-.064.142-.102.217-.145L4.358.285a.959.959 0 1 1 1.357 1.357L2.358 5z"/>
</svg>
</a>
</li>
<!-- Page X of XX -->
<li class="page-item"><a class="page-link no-hover" href><%= gettext "Page" %> <%= assigns[:cur_page_number] || "" %> <% if assigns[:total_pages_number] do %> <%= gettext "of" %> <%= assigns[:total_pages_number] || "undefined" %><% end %></a></li>
<!-- Next -->
<li class="page-item">
<a
<%= if !assigns[:next_page_path] do %>disabled<% end %>
class="page-link"
href='<%= "#{assigns[:next_page_path]}" %>'
<%= if assigns[:data_next_page_button] do %>data-next-page-button<% end %>
>
<svg xmlns="http://www.w3.org/2000/svg" width="6" height="10">
<path fill-rule="evenodd" d="M5.715 5.715c-.064.064-.141.102-.217.144L1.642 9.715A.959.959 0 1 1 .285 8.358L3.642 5 .285 1.642A.959.959 0 1 1 1.642.285L5.498 4.14c.075.043.153.081.217.145A.949.949 0 0 1 5.989 5a.949.949 0 0 1-.274.715z"/>
</svg>
</a>
</li>
<!-- Last -->
<li class="page-item">
<a
<%= if !assigns[:last_page_path] do %>disabled<% end %>
class="page-link"
href='<%= "#{assigns[:last_page_path]}" %>'
>Last</a>
</li>
</ul>
</div>

@ -1,12 +1,10 @@
<section class="container" data-page="transaction-pending-list">
<div class="card">
<div class="card-body" data-async-listing="<%= @current_path %>">
<h1 class="card-title margin-bottom-0"><%= gettext "Pending Transactions" %></h1>
<p class="card-subtitle">
<%= gettext("Showing") %>
<span data-selector="transaction-pending-count"><%= Cldr.Number.to_string!(@pending_transaction_count, format: "#,###") %></span>
<%= gettext("Pending Transactions") %>
</p>
<h1 class="card-title"><%= gettext "Pending Transactions" %></h1>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<div data-selector="channel-batching-message" style="display:none;">
<div data-selector="reload-button" class="alert alert-info">
<a href="#" class="alert-link"><span data-selector="channel-batching-count"></span> <%= gettext "More transactions have come in" %></a>
@ -33,9 +31,15 @@
</span>
<%= gettext("Loading") %>...
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>

@ -13,14 +13,19 @@
<%= render OverviewView, "_tabs.html", assigns %>
<div class="card-body" data-async-load data-async-listing="<%= @current_path %>">
<h2 class="card-title"><%= gettext "Token Transfers" %></h2>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<button data-error-message class="alert alert-danger col-12 text-left" style="display: none;">
<span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
</button>
<div data-empty-response-message class="tile tile-muted text-center" style="display: none;">
<span data-selector="empty-transactions-list">
<%= gettext "There are no transfers for this Token." %>
</span>
</div>
<div data-loading-message class="tile tile-muted text-center mt-3">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>
@ -28,11 +33,17 @@
</span>
<%= gettext("Loading") %>...
</div>
<div data-items>
</div>
<div data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">
<span class="loading-spinner-block-1"></span>

@ -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)
) %>
</div>

@ -1,12 +1,10 @@
<section class="container" data-page="transaction-list">
<div class="card">
<div class="card-body" data-async-listing="<%= @current_path %>">
<h1 class="card-title margin-bottom-0"><%= gettext "Validated Transactions" %></h1>
<p class="card-subtitle">
<%= gettext("Showing") %>
<span data-selector="transaction-count"><%= Cldr.Number.to_string!(@transaction_estimated_count, format: "#,###") %></span>
<%= gettext("Validated Transactions") %>
</p>
<h1 class="card-title"><%= gettext "Validated Transactions" %></h1>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "top", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<div data-selector="channel-batching-message" style="display: none;">
<div data-selector="reload-button" class="alert alert-info">
<a href="#" class="alert-link"><span data-selector="channel-batching-count"></span> <%= gettext "More transactions have come in" %></a>
@ -40,9 +38,13 @@
<div data-selector="transactions-list" data-items></div>
<%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true %>
<!--
<a href="#" data-next-page-button class="button button-secondary button-small float-right mt-4" style="display: none;">
<%= gettext("Older") %>
</a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;">
<span class="loading-spinner-small mr-2">

@ -4,6 +4,15 @@
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<div class="card-body">
<h2 class="card-title"><%= gettext "Internal Transactions" %></h2>
<%= 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_internal_transaction_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(@internal_transactions) > 0 do %>
<%= for internal_transaction <- @internal_transactions do %>
<%= render BlockScoutWeb.InternalTransactionView, "_tile.html", internal_transaction: internal_transaction %>
@ -14,6 +23,15 @@
</div>
<% 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_internal_transaction_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("Newer"),
@ -26,6 +44,7 @@
)
) %>
<% end %>
-->
</div>
</div>
</section>

@ -6,6 +6,15 @@
<div class="card-body">
<h2 class="card-title"><%= gettext "Logs" %></h2>
<%= 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 %>
<div data-test="transaction_log" class="tile tile-muted">
@ -139,6 +148,15 @@
</div>
<% 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 %>
<!--
<%= if @next_page_params do %>
<%= link(
gettext("Newer"),
@ -151,6 +169,7 @@
)
) %>
<% end %>
-->
</div>
</div>
</section>

@ -2,16 +2,15 @@
<%= render BlockScoutWeb.TransactionView, "overview.html", assigns %>
<div class="card">
<div class="card-header">
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
</div>
<div class="card-body">
<h2 class="card-title"><%= gettext "Raw Trace" %></h2>
<%= if Enum.count(@internal_transactions) > 0 do %>
<pre class="pre-scrollable line-numbers" data-activate-highlight><code class="json "><%= for {line, number} <- raw_traces_with_lines(@internal_transactions) do %><div data-line-number="<%= number %>"><%= line %></div><% end %></code></pre>
<% else %>
No trace entries found.
<div class="tile tile-muted text-center">
<span>No trace entries found.</span>
</div>
<% end %>
</div>
</div>

@ -5,6 +5,15 @@
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<div class="card-body">
<h2 class="card-title"><%= gettext "Token Transfers" %></h2>
<%= 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,8 +23,16 @@
<span><%= gettext "There are no token transfers for this transaction." %></span>
</div>
<% end %>
</div>
</div>
<%= 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"),
@ -28,4 +45,7 @@
)
) %>
<% end %>
-->
</div>
</div>
</section>

@ -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

@ -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 ""

@ -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 ""

@ -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 =

@ -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)

Loading…
Cancel
Save