Merge branch 'master' into fix/#1935-wrong-styles-for-tokens-dropdown

* master: (22 commits)
  Update CHANGELOG.md
  Add files via upload
  Update _goerli_variables.scss
  feat: exclude empty contracts by default
  Fix gettext test
  (fix) balance section pagination position
  (fix) little refactoring
  (fix) "next / older" pagination button
  (fix) pagination alignment
  Update CHANGELOG.md
  Update ropsten_logo.svg
  Update _ropsten_variables.scss
  (update) internationalization files
  (update) all pagination buttons in all sections
  feat: add on demand fetching and stale attr to rpc
  Add CHANGELOG entry
  check presence of overlap[i]
  (update) changelog
  (fix) syntax
  (add) internationalization for pagination
  ...
pull/1944/head
Gabriel Rodriguez Alsina 6 years ago
commit a5cb7ab709
  1. 6
      CHANGELOG.md
  2. 10
      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/_goerli_variables.scss
  8. 50
      apps/block_scout_web/assets/css/theme/_ropsten_variables.scss
  9. 8
      apps/block_scout_web/assets/js/lib/async_listing_load.js
  10. 4
      apps/block_scout_web/assets/js/lib/list_morph.js
  11. 1
      apps/block_scout_web/assets/static/images/goerli_logo.svg
  12. 49
      apps/block_scout_web/assets/static/images/ropsten_logo.svg
  13. 18
      apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/address_controller.ex
  14. 5
      apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/contract_controller.ex
  15. 42
      apps/block_scout_web/lib/block_scout_web/etherscan.ex
  16. 39
      apps/block_scout_web/lib/block_scout_web/templates/address/index.html.eex
  17. 12
      apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/index.html.eex
  18. 80
      apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/index.html.eex
  19. 45
      apps/block_scout_web/lib/block_scout_web/templates/address_token/index.html.eex
  20. 12
      apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/index.html.eex
  21. 79
      apps/block_scout_web/lib/block_scout_web/templates/address_transaction/index.html.eex
  22. 9
      apps/block_scout_web/lib/block_scout_web/templates/address_validation/index.html.eex
  23. 18
      apps/block_scout_web/lib/block_scout_web/templates/block/index.html.eex
  24. 19
      apps/block_scout_web/lib/block_scout_web/templates/block_transaction/index.html.eex
  25. 9
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_pagination.html.eex
  26. 60
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_pagination_container.html.eex
  27. 16
      apps/block_scout_web/lib/block_scout_web/templates/pending_transaction/index.html.eex
  28. 15
      apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/index.html.eex
  29. 2
      apps/block_scout_web/lib/block_scout_web/templates/transaction/_tabs.html.eex
  30. 14
      apps/block_scout_web/lib/block_scout_web/templates/transaction/index.html.eex
  31. 19
      apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex
  32. 19
      apps/block_scout_web/lib/block_scout_web/templates/transaction_log/index.html.eex
  33. 9
      apps/block_scout_web/lib/block_scout_web/templates/transaction_raw_trace/index.html.eex
  34. 44
      apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/index.html.eex
  35. 21
      apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex
  36. 210
      apps/block_scout_web/priv/gettext/default.pot
  37. 210
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  38. 118
      apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs
  39. 57
      apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs
  40. 15
      apps/explorer/lib/explorer/chain.ex
  41. 1
      apps/explorer/lib/explorer/chain/address.ex

@ -1,6 +1,9 @@
## Current ## Current
### Features ### Features
- [#1959](https://github.com/poanetwork/blockscout/pull/1959) - added goerli theme and goerli logo
- [#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 - [#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 - [#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 - [#1925](https://github.com/poanetwork/blockscout/pull/1925) - added dai theme and logo
@ -17,6 +20,8 @@
- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces - [#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 - [#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 - [#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
- [#1952](https://github.com/poanetwork/blockscout/pull/1952) - feat: exclude empty contracts by default
### Fixes ### Fixes
@ -38,6 +43,7 @@
- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type - [#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 - [#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 - [#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 ### Chore

@ -20,4 +20,12 @@
@include media-breakpoint-down(md) { @include media-breakpoint-down(md) {
margin-right: 0; 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/panels";
@import "components/nav_tabs"; @import "components/nav_tabs";
@import "components/dot"; @import "components/dot";
@import "components/pagination"; @import "components/pagination_container";
@import "components/address_link"; @import "components/address_link";
@import "components/footer"; @import "components/footer";
@import "components/filter"; @import "components/filter";

@ -67,7 +67,7 @@ $card-background-1-text-color: #fff !default;
} }
.card-subtitle { .card-subtitle {
color: #aaa; color: #333;
font-size: 12px; font-size: 12px;
font-weight: normal; font-weight: normal;
line-height: 1.2; 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: #20201a; // general
$secondary: #f0d96b; $primary: #2b2b2b;
$tertiary: #4a443a; $secondary: #eac247;
$tertiary: #929292;
$additional-font: #ffffff;
// footer
$footer-background-color: $primary; $footer-background-color: $primary;
$footer-title-color: #fff; $footer-title-color: #fff;
$footer-text-color: #fff; $footer-text-color: #7e7e7e;
$footer-item-disc-color: $secondary; $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: $secondary; // 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: #424242; // 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: #424242; // button border and font color && hover bg color
$btn-copy-color: #424242; // btn copy
$btn-qr-color: #424242; // btn qr-code
//links & tile
.tile a { color: #a46f30 !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;

@ -1,8 +1,50 @@
$primary: #2fa8f8; // general
$secondary: #a2daff; $primary: #153550;
$tertiary: #006aa7; $secondary: #38a9f5;
$tertiary: #76f1ff;
$additional-font: #89cae6;
// footer
$footer-background-color: $primary; $footer-background-color: $primary;
$footer-title-color: #fff; $footer-title-color: #fff;
$footer-text-color: #fff; $footer-text-color: #89cae6;
$footer-item-disc-color: $secondary; $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]': { '[data-async-listing] [data-next-page-button]': {
render ($el, state) { render ($el, state) {
if (state.requestError) return $el.hide() if (state.requestError || !state.nextPagePath || state.loading) {
if (!state.nextPagePath) return $el.hide() return $el.attr('disabled', 'disabled')
if (state.loading) return $el.hide() }
$el.show() $el.attr('disabled', false)
$el.attr('href', state.nextPagePath) $el.attr('href', state.nextPagePath)
} }
}, },

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

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="30" height="20"><path data-name="-e-logo_top" d="M13.82 10.054h-6.9v2.731h3.191l-.011 3.432a1.456 1.456 0 0 1-.43.319 4 4 0 0 1-.655.267 5.306 5.306 0 0 1-.795.182 5.647 5.647 0 0 1-.861.065 3.012 3.012 0 0 1-2.715-1.424 7.745 7.745 0 0 1-.9-4.063v-2.6a9.439 9.439 0 0 1 .265-2.36 5.76 5.76 0 0 1 .715-1.71 3.229 3.229 0 0 1 1.059-1.047 2.57 2.57 0 0 1 1.324-.357 2.922 2.922 0 0 1 2.191.735 3.762 3.762 0 0 1 .894 2.191h3.628a8.468 8.468 0 0 0-.616-2.458A5.315 5.315 0 0 0 11.9 2.1 5.626 5.626 0 0 0 9.854.936a9.017 9.017 0 0 0-2.84-.4 6.711 6.711 0 0 0-2.774.572 6.354 6.354 0 0 0-2.225 1.664A7.926 7.926 0 0 0 .532 5.431 10.952 10.952 0 0 0 0 8.988v2.575a11.473 11.473 0 0 0 .51 3.556 7.5 7.5 0 0 0 1.45 2.646 6.25 6.25 0 0 0 2.264 1.651 7.406 7.406 0 0 0 2.966.572 11.15 11.15 0 0 0 2.278-.221 10.5 10.5 0 0 0 1.913-.579 7.641 7.641 0 0 0 1.477-.8 5.159 5.159 0 0 0 .98-.871zm2.661 2.783a8.686 8.686 0 0 0 .451 2.854 6.513 6.513 0 0 0 1.317 2.269 5.984 5.984 0 0 0 2.132 1.5 7.277 7.277 0 0 0 2.88.54 7.194 7.194 0 0 0 2.86-.54 5.934 5.934 0 0 0 2.119-1.5 6.6 6.6 0 0 0 1.311-2.269 8.713 8.713 0 0 0 .45-2.854v-.274a8.673 8.673 0 0 0-.45-2.841 6.532 6.532 0 0 0-1.318-2.269 6.078 6.078 0 0 0-2.125-1.508 7.813 7.813 0 0 0-5.74 0 6.082 6.082 0 0 0-2.119 1.508 6.515 6.515 0 0 0-1.317 2.269 8.647 8.647 0 0 0-.451 2.841v.273zm3.681-.273a7.394 7.394 0 0 1 .173-1.625 4.223 4.223 0 0 1 .542-1.352 2.633 2.633 0 0 1 2.357-1.261 2.777 2.777 0 0 1 1.417.338 2.693 2.693 0 0 1 .947.923 4.31 4.31 0 0 1 .536 1.352 7.394 7.394 0 0 1 .173 1.625v.273a7.606 7.606 0 0 1-.173 1.658 4.227 4.227 0 0 1-.536 1.352 2.621 2.621 0 0 1-2.337 1.255 2.818 2.818 0 0 1-1.424-.338 2.758 2.758 0 0 1-.96-.917 4.143 4.143 0 0 1-.542-1.352 7.606 7.606 0 0 1-.173-1.658v-.274zm-1.747-10.3a1.492 1.492 0 0 0 .37.514 1.761 1.761 0 0 0 .57.338 2.207 2.207 0 0 0 1.456 0 1.761 1.761 0 0 0 .57-.338 1.492 1.492 0 0 0 .37-.514 1.593 1.593 0 0 0 0-1.274 1.562 1.562 0 0 0-.37-.52 1.7 1.7 0 0 0-.57-.344 2.206 2.206 0 0 0-1.456 0 1.7 1.7 0 0 0-.57.345 1.562 1.562 0 0 0-.37.52 1.593 1.593 0 0 0 0 1.274zm6.356.013a1.558 1.558 0 0 0 .37.52 1.7 1.7 0 0 0 .57.345 2.207 2.207 0 0 0 1.456 0 1.7 1.7 0 0 0 .57-.345 1.558 1.558 0 0 0 .37-.52 1.593 1.593 0 0 0 .133-.65 1.562 1.562 0 0 0-.133-.637 1.492 1.492 0 0 0-.37-.514 1.762 1.762 0 0 0-.57-.338 2.206 2.206 0 0 0-1.456 0 1.762 1.762 0 0 0-.57.338 1.492 1.492 0 0 0-.37.514 1.546 1.546 0 0 0-.133.637 1.576 1.576 0 0 0 .133.651z" fill="#2b2b2b" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

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 BlockScoutWeb.API.RPC.Helpers
alias Explorer.{Chain, Etherscan} alias Explorer.{Chain, Etherscan}
alias Explorer.Chain.{Address, Wei} alias Explorer.Chain.{Address, Wei}
alias Indexer.Fetcher.CoinBalanceOnDemand
def listaccounts(conn, params) do def listaccounts(conn, params) do
options = options =
@ -279,12 +280,15 @@ defmodule BlockScoutWeb.API.RPC.AddressController do
offset = (max(page_number, 1) - 1) * page_size offset = (max(page_number, 1) - 1) * page_size
# limit is just 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 end
defp hashes_to_addresses(address_hashes) do defp hashes_to_addresses(address_hashes) do
address_hashes address_hashes
|> Chain.hashes_to_addresses() |> Chain.hashes_to_addresses()
|> trigger_balances_and_add_status()
|> add_not_found_addresses(address_hashes) |> add_not_found_addresses(address_hashes)
end end
@ -307,6 +311,18 @@ defmodule BlockScoutWeb.API.RPC.AddressController do
end) end)
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(nil), do: {:contract_address, {:ok, nil}}
defp to_contract_address_hash(address_hash_string) do defp to_contract_address_hash(address_hash_string) do

@ -103,6 +103,9 @@ defmodule BlockScoutWeb.API.RPC.ContractController do
:not_decompiled -> :not_decompiled ->
Chain.list_not_decompiled_contracts(page_size, offset) Chain.list_not_decompiled_contracts(page_size, offset)
:empty ->
Chain.list_empty_contracts(page_size, offset)
_ -> _ ->
Chain.list_contracts(page_size, offset) Chain.list_contracts(page_size, offset)
end end
@ -140,10 +143,12 @@ defmodule BlockScoutWeb.API.RPC.ContractController do
defp contracts_filter(2), do: {:ok, :decompiled} defp contracts_filter(2), do: {:ok, :decompiled}
defp contracts_filter(3), do: {:ok, :unverified} defp contracts_filter(3), do: {:ok, :unverified}
defp contracts_filter(4), do: {:ok, :not_decompiled} defp contracts_filter(4), do: {:ok, :not_decompiled}
defp contracts_filter(5), do: {:ok, :empty}
defp contracts_filter("verified"), do: {:ok, :verified} defp contracts_filter("verified"), do: {:ok, :verified}
defp contracts_filter("decompiled"), do: {:ok, :decompiled} defp contracts_filter("decompiled"), do: {:ok, :decompiled}
defp contracts_filter("unverified"), do: {:ok, :unverified} defp contracts_filter("unverified"), do: {:ok, :unverified}
defp contracts_filter("not_decompiled"), do: {:ok, :not_decompiled} defp contracts_filter("not_decompiled"), do: {:ok, :not_decompiled}
defp contracts_filter("empty"), do: {:ok, :empty}
defp contracts_filter(filter) when is_bitstring(filter) do defp contracts_filter(filter) when is_bitstring(filter) do
case Integer.parse(filter) do case Integer.parse(filter) do

@ -21,15 +21,18 @@ defmodule BlockScoutWeb.Etherscan do
"result" => [ "result" => [
%{ %{
"account" => "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a", "account" => "0xddbd2b932c763ba5b1b7ae3b362eac3e8d40121a",
"balance" => "40807168566070000000000" "balance" => "40807168566070000000000",
"stale" => true
}, },
%{ %{
"account" => "0x63a9975ba31b0b9626b34300f7f627147df1f526", "account" => "0x63a9975ba31b0b9626b34300f7f627147df1f526",
"balance" => "332567136222827062478" "balance" => "332567136222827062478",
"stale" => false
}, },
%{ %{
"account" => "0x198ef1ec325a96cc354c7266a038be8b5c558f67", "account" => "0x198ef1ec325a96cc354c7266a038be8b5c558f67",
"balance" => "185178830000000000" "balance" => "185178830000000000",
"stale" => false
} }
] ]
} }
@ -496,6 +499,13 @@ defmodule BlockScoutWeb.Etherscan do
example: ~s("0x95426f2bc716022fcf1def006dbc4bb81f5b5164") 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 %{ @transaction_hash_type %{
type: "transaction hash", type: "transaction hash",
definition: definition:
@ -571,7 +581,8 @@ defmodule BlockScoutWeb.Etherscan do
name: "AddressBalance", name: "AddressBalance",
fields: %{ fields: %{
address: @address_hash_type, address: @address_hash_type,
balance: @wei_type balance: @wei_type,
stale: @stale_type
} }
} }
@ -988,7 +999,16 @@ defmodule BlockScoutWeb.Etherscan do
@account_balance_action %{ @account_balance_action %{
name: "balance", 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: [ required_params: [
%{ %{
key: "address", key: "address",
@ -1022,7 +1042,15 @@ defmodule BlockScoutWeb.Etherscan do
@account_balancemulti_action %{ @account_balancemulti_action %{
name: "balancemulti", 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: [ required_params: [
%{ %{
key: "address", key: "address",
@ -1767,7 +1795,7 @@ defmodule BlockScoutWeb.Etherscan do
key: "filter", key: "filter",
type: "string", type: "string",
description: description:
"verified|decompiled|unverified|not_decompiled, or 1|2|3|4 respectively. This requests only contracts with that status." "verified|decompiled|unverified|not_decompiled|empty, or 1|2|3|4|5 respectively. This requests only contracts with that status."
}, },
%{ %{
key: "not_decompiled_with_version", key: "not_decompiled_with_version",

@ -1,47 +1,20 @@
<section class="container"> <section class="container">
<div class="card"> <div class="card">
<div class="card-body"> <div class="card-body">
<%= if @next_page_path do %> <h1 class="card-title"><%= gettext "Addresses" %></h1>
<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 margin-bottom-0"><%= gettext "Addresses" %></h1> <%= 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 %>
<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>
<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 %> <%= for {{address, tx_count}, index} <- Enum.with_index(@address_tx_count_pairs, 1) do %>
<%= render "_tile.html", <%= render "_tile.html",
address: address, index: index, exchange_rate: @exchange_rate, address: address, index: index, exchange_rate: @exchange_rate,
total_supply: @total_supply, tx_count: tx_count, total_supply: @total_supply, tx_count: tx_count,
validation_count: validation_count(address) %> validation_count: validation_count(address) %>
<% end %> <% end %>
<br> </div>
<%= if @next_page_path do %>
<a href="<%= "#{@next_page_path}" %>" class="button button-secondary button-small float-right mt-0 mb-0 ml-1"> <%= 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 %>
<%= 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> </div>
</div> </div>
</section> </section>

@ -13,20 +13,22 @@
<h2 class="card-title"><%= gettext "Balances" %></h2> <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-small mr-2">
<span class="loading-spinner-block-1"></span> <span class="loading-spinner-block-1"></span>
<span class="loading-spinner-block-2"></span> <span class="loading-spinner-block-2"></span>
</span> </span>
<%= gettext("Loading chart") %>... <%= gettext("Loading chart") %>...
</div> </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> <span><%= gettext("There was a problem loading the chart.") %></span>
</button> </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> <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> </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;"> <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> <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> <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;"> <a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %> <%= gettext("Older") %>
</a> </a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;"> <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-small mr-2">

@ -15,44 +15,48 @@
<a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer internal transactions" %></a> <a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer internal transactions" %></a>
</div> </div>
</div> </div>
<div class="dropdown float-right u-push-sm"> <div class="clearfix">
<button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button" <h2 class="card-title float-left"><%= gettext "Internal Transactions" %></h2>
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <div class="dropdown float-right u-push-sm">
Filter: <%= format_current_filter(@filter) %> <button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button"
</button> id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> Filter: <%= format_current_filter(@filter) %>
<%= link( </button>
gettext("All"), <div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2">
to: address_internal_transaction_path(@conn, :index, @address.hash), <%= link(
class: "address__link address__link--active dropdown-item", gettext("All"),
"data-test": "filter_option" to: address_internal_transaction_path(@conn, :index, @address.hash),
) %> class: "address__link address__link--active dropdown-item",
<%= link( "data-test": "filter_option"
gettext("To"), ) %>
to: address_internal_transaction_path( <%= link(
@conn, gettext("To"),
:index, to: address_internal_transaction_path(
@address.hash, @conn,
filter: "to" :index,
), @address.hash,
class: "address__link address__link--active dropdown-item", filter: "to"
"data-test": "filter_option" ),
) %> class: "address__link address__link--active dropdown-item",
<%= link( "data-test": "filter_option"
gettext("From"), ) %>
to: address_internal_transaction_path( <%= link(
@conn, gettext("From"),
:index, to: address_internal_transaction_path(
@address.hash, @conn,
filter: "from" :index,
), @address.hash,
class: "address__link address__link--active dropdown-item", filter: "from"
"data-test": "filter_option" ),
) %> class: "address__link address__link--active dropdown-item",
"data-test": "filter_option"
) %>
</div>
</div> </div>
</div> </div>
<h2 class="card-title"><%= gettext "Internal Transactions" %></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;"> <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> <span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
</button> </button>
@ -69,9 +73,15 @@
<%= gettext("Loading") %>... <%= gettext("Loading") %>...
</div> </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;"> <a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %> <%= gettext("Older") %>
</a> </a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;"> <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-small mr-2">
<span class="loading-spinner-block-1"></span> <span class="loading-spinner-block-1"></span>

@ -6,6 +6,15 @@
<%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %> <%= render BlockScoutWeb.AddressView, "_tabs.html", assigns %>
<div class="card-body"> <div class="card-body">
<h2 class="card-title"><%= gettext "Tokens" %></h2> <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 %> <%= if Enum.any?(@tokens) do %>
<%= for token <- @tokens do %> <%= for token <- @tokens do %>
<%= render "_tokens.html", conn: @conn, token: token, address: @address %> <%= render "_tokens.html", conn: @conn, token: token, address: @address %>
@ -16,20 +25,28 @@
</div> </div>
<% end %> <% end %>
<div> <%= if @next_page_params do %>
<%= 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) %>
<%= link( <% end %>
gettext("Next"),
class: "button button-secondary button-sm float-right mt-3", <%= if !@next_page_params do %>
to: address_token_path( <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true %>
@conn, <% end %>
:index,
@address, <!--
@next_page_params <%= if @next_page_params do %>
) <%= link(
) %> gettext("Next"),
<% end %> class: "button button-secondary button-sm float-right mt-3",
</div> to: address_token_path(
@conn,
:index,
@address,
@next_page_params
)
) %>
<% end %>
-->
</div> </div>
</div> </div>
</section> </section>

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

@ -11,43 +11,48 @@
<a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer transactions" %></a> <a href="#" class="alert-link"><%= gettext "Connection Lost, click to load newer transactions" %></a>
</div> </div>
</div> </div>
<div class="dropdown float-right u-push-sm"> <div class="clearfix">
<button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button" <h2 class="card-title float-left"><%= gettext "Transactions" %></h2>
id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <div class="dropdown float-right u-push-sm">
Filter: <%= format_current_filter(@filter) %> <button data-test="filter_dropdown" class="btn-dropdown-line dropdown-toggle" type="button"
</button> id="dropdownMenu2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2"> Filter: <%= format_current_filter(@filter) %>
<%= link( </button>
gettext("All"), <div class="dropdown-menu dropdown-menu-right filter" aria-labelledby="dropdownMenu2">
to: address_transaction_path(@conn, :index, @address.hash), <%= link(
class: "address__link address__link--active dropdown-item", gettext("All"),
"data-test": "filter_option" to: address_transaction_path(@conn, :index, @address.hash),
) %> class: "address__link address__link--active dropdown-item",
<%= link( "data-test": "filter_option"
gettext("To"), ) %>
to: address_transaction_path( <%= link(
@conn, gettext("To"),
:index, to: address_transaction_path(
@address.hash, @conn,
filter: "to" :index,
), @address.hash,
class: "address__link address__link--active dropdown-item", filter: "to"
"data-test": "filter_option" ),
) %> class: "address__link address__link--active dropdown-item",
<%= link( "data-test": "filter_option"
gettext("From"), ) %>
to: address_transaction_path( <%= link(
@conn, gettext("From"),
:index, to: address_transaction_path(
@address.hash, @conn,
filter: "from" :index,
), @address.hash,
class: "address__link address__link--active dropdown-item", filter: "from"
"data-test": "filter_option" ),
) %> class: "address__link address__link--active dropdown-item",
"data-test": "filter_option"
) %>
</div>
</div> </div>
</div> </div>
<h2 class="card-title"><%= gettext "Transactions" %></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;"> <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> <span href="#" class="alert-link"><%= gettext("Something went wrong, click to reload.") %></span>
</button> </button>
@ -68,9 +73,13 @@
<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;"> <a href="#" class="button button-secondary button-small float-right mt-4" data-next-page-button style="display: none;">
<%= gettext("Older") %> <%= gettext("Older") %>
</a> </a>
-->
<div class="button button-secondary button-small float-right mt-4" data-loading-button style="display: none;"> <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-small mr-2">

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

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

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

@ -22,7 +22,7 @@
%> %>
<%= link( <%= link(
gettext("Raw Trace"), 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) to: transaction_raw_trace_path(@conn, :index, @transaction)
) %> ) %>
</div> </div>

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

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

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

@ -2,16 +2,15 @@
<%= render BlockScoutWeb.TransactionView, "overview.html", assigns %> <%= render BlockScoutWeb.TransactionView, "overview.html", assigns %>
<div class="card"> <div class="card">
<div class="card-header"> <%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
</div>
<div class="card-body"> <div class="card-body">
<h2 class="card-title"><%= gettext "Raw Trace" %></h2> <h2 class="card-title"><%= gettext "Raw Trace" %></h2>
<%= if Enum.count(@internal_transactions) > 0 do %> <%= 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> <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 %> <% else %>
No trace entries found. <div class="tile tile-muted text-center">
<span>No trace entries found.</span>
</div>
<% end %> <% end %>
</div> </div>
</div> </div>

@ -5,6 +5,15 @@
<%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %> <%= render BlockScoutWeb.TransactionView, "_tabs.html", assigns %>
<div class="card-body"> <div class="card-body">
<h2 class="card-title"><%= gettext "Token Transfers" %></h2> <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 %> <%= if Enum.any?(@token_transfers) do %>
<%= for token_transfer <- @token_transfers do %> <%= for token_transfer <- @token_transfers do %>
<%= render "_token_transfer.html", token_transfer: token_transfer, conn: @conn %> <%= render "_token_transfer.html", token_transfer: token_transfer, conn: @conn %>
@ -14,18 +23,29 @@
<span><%= gettext "There are no token transfers for this transaction." %></span> <span><%= gettext "There are no token transfers for this transaction." %></span>
</div> </div>
<% end %> <% 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 %>
-->
</div> </div>
</div> </div>
<%= 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 %>
</section> </section>

@ -17,13 +17,7 @@ defmodule BlockScoutWeb.API.RPC.AddressView do
end end
def render("balancemulti.json", %{addresses: addresses}) do def render("balancemulti.json", %{addresses: addresses}) do
data = data = Enum.map(addresses, &render_address/1)
Enum.map(addresses, fn address ->
%{
"account" => "#{address.hash}",
"balance" => balance(address)
}
end)
RPCView.render("show.json", data: data) RPCView.render("show.json", data: data)
end end
@ -61,10 +55,19 @@ defmodule BlockScoutWeb.API.RPC.AddressView do
RPCView.render("error.json", assigns) RPCView.render("error.json", assigns)
end end
defp render_address(address) do
%{
"account" => "#{address.hash}",
"balance" => balance(address),
"stale" => address.stale? || false
}
end
defp prepare_account(address) do defp prepare_account(address) do
%{ %{
"balance" => to_string(address.fetched_coin_balance.value), "balance" => to_string(address.fetched_coin_balance && address.fetched_coin_balance.value),
"address" => to_string(address.hash) "address" => to_string(address.hash),
"stale" => address.stale? || false
} }
end end

@ -28,7 +28,7 @@ msgid "%{block_type} Height:"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "%{block_type}s"
msgstr "" msgstr ""
@ -98,20 +98,20 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 #: 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 #: lib/block_scout_web/views/address_view.ex:101
msgid "Address" msgid "Address"
msgstr "" msgstr ""
#, elixir-format #, 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 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:59
msgid "Addresses" msgid "Addresses"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:25 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27
#: lib/block_scout_web/templates/address_transaction/index.html.eex:21 #: 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_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8 #: lib/block_scout_web/views/address_transaction_view.ex:8
msgid "All" msgid "All"
@ -245,8 +245,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 #: lib/block_scout_web/templates/address_transaction/index.html.eex:11
#: lib/block_scout_web/templates/pending_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:17 #: lib/block_scout_web/templates/transaction/index.html.eex:15
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
@ -335,8 +335,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:18 #: 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:67
#: lib/block_scout_web/templates/transaction_log/index.html.eex:124 #: lib/block_scout_web/templates/transaction_log/index.html.eex:133
msgid "Data" msgid "Data"
msgstr "" msgstr ""
@ -414,8 +414,8 @@ msgid "Forked Blocks (Reorgs)"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44
#: lib/block_scout_web/templates/address_transaction/index.html.eex:38 #: 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_internal_transaction_view.ex:7
#: lib/block_scout_web/views/address_transaction_view.ex:7 #: lib/block_scout_web/views/address_transaction_view.ex:7
msgid "From" msgid "From"
@ -479,7 +479,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:14 #: 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/_tabs.html.eex:11
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:297 #: lib/block_scout_web/views/address_view.ex:297
@ -547,8 +547,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:111 #: 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/pending_transaction/index.html.eex:10
#: lib/block_scout_web/templates/transaction/index.html.eex:12 #: lib/block_scout_web/templates/transaction/index.html.eex:10
msgid "More transactions have come in" msgid "More transactions have come in"
msgstr "" msgstr ""
@ -561,7 +561,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 #: 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/_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" msgid "Name"
msgstr "" msgstr ""
@ -572,15 +572,13 @@ msgstr ""
#, elixir-format #, elixir-format
#: #:
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:37
#: lib/block_scout_web/templates/transaction_log/index.html.eex:144 #: lib/block_scout_web/templates/transaction_log/index.html.eex:162
msgid "Newer" msgid "Newer"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:6 #: lib/block_scout_web/templates/address_token/index.html.eex:39
#: lib/block_scout_web/templates/address/index.html.eex:36
#: lib/block_scout_web/templates/address_token/index.html.eex:22
msgid "Next" msgid "Next"
msgstr "" msgstr ""
@ -608,17 +606,17 @@ msgid "OUT"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:52 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:57
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:81
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38
#: lib/block_scout_web/templates/address_transaction/index.html.eex:72 #: lib/block_scout_web/templates/address_transaction/index.html.eex:80
#: lib/block_scout_web/templates/address_validation/index.html.eex:31 #: lib/block_scout_web/templates/address_validation/index.html.eex:38
#: lib/block_scout_web/templates/block/index.html.eex:23 #: lib/block_scout_web/templates/block/index.html.eex:30
#: lib/block_scout_web/templates/block_transaction/index.html.eex:32 #: lib/block_scout_web/templates/block_transaction/index.html.eex:50
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:37 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:39
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:43
#: lib/block_scout_web/templates/transaction/index.html.eex:44 #: lib/block_scout_web/templates/transaction/index.html.eex:45
#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:21 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:38
msgid "Older" msgid "Older"
msgstr "" msgstr ""
@ -656,7 +654,6 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 #: 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" msgid "Pending Transactions"
msgstr "" msgstr ""
@ -735,12 +732,6 @@ msgstr ""
msgid "Show QR Code" msgid "Show QR Code"
msgstr "" 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 #, elixir-format
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:210 #: lib/block_scout_web/views/transaction_view.ex:210
@ -765,33 +756,33 @@ msgid "There are no holders for this Token."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no internal transactions for this transaction."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no logs for this transaction."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/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." msgid "There are no token transfers for this transaction."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -801,17 +792,17 @@ msgid "There are no tokens."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions for this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions for this block."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transfers for this Token."
msgstr "" msgstr ""
@ -821,8 +812,8 @@ msgid "This transaction is pending confirmation."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:31 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33
#: lib/block_scout_web/templates/address_transaction/index.html.eex:27 #: 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_internal_transaction_view.ex:6
#: lib/block_scout_web/views/address_transaction_view.ex:6 #: lib/block_scout_web/views/address_transaction_view.ex:6
msgid "To" msgid "To"
@ -883,7 +874,7 @@ msgid "Top Accounts - %{subnetwork} Explorer"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Topics"
msgstr "" msgstr ""
@ -925,7 +916,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:3 #: 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:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:17 #: lib/block_scout_web/templates/block_transaction/index.html.eex:17
#: lib/block_scout_web/templates/chain/show.html.eex:108 #: lib/block_scout_web/templates/chain/show.html.eex:108
@ -977,7 +968,6 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/index.html.eex:4 #: lib/block_scout_web/templates/transaction/index.html.eex:4
#: lib/block_scout_web/templates/transaction/index.html.eex:8
msgid "Validated Transactions" msgid "Validated Transactions"
msgstr "" msgstr ""
@ -1074,11 +1064,6 @@ msgstr ""
msgid "string" msgid "string"
msgstr "" msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:21
msgid "total addresses with a balance"
msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:19 #: lib/block_scout_web/views/address_contract_view.ex:19
msgid "true" msgid "true"
@ -1118,9 +1103,9 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:14
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:16 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/address_validation/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:38 #: 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:99
#: lib/block_scout_web/templates/chain/show.html.eex:125 #: lib/block_scout_web/templates/chain/show.html.eex:125
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21
@ -1143,22 +1128,22 @@ msgid "GraphQL"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:60 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:66
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:69 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:80 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:90
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:35 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:47
#: lib/block_scout_web/templates/address_transaction/index.html.eex:66 #: lib/block_scout_web/templates/address_transaction/index.html.eex:71
#: lib/block_scout_web/templates/address_transaction/index.html.eex:80 #: lib/block_scout_web/templates/address_transaction/index.html.eex:89
#: lib/block_scout_web/templates/block/index.html.eex:15 #: lib/block_scout_web/templates/block/index.html.eex:19
#: lib/block_scout_web/templates/block/index.html.eex:30 #: lib/block_scout_web/templates/block/index.html.eex:39
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:34 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:32
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:44 #: 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:33
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:44 #: 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:34
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:41 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:52
#: lib/block_scout_web/templates/transaction/index.html.eex:38 #: lib/block_scout_web/templates/transaction/index.html.eex:36
#: lib/block_scout_web/templates/transaction/index.html.eex:52 #: lib/block_scout_web/templates/transaction/index.html.eex:54
msgid "Loading" msgid "Loading"
msgstr "" msgstr ""
@ -1253,18 +1238,18 @@ msgid "Static Call"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Decoded"
msgstr "" msgstr ""
#, elixir-format #, 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?" msgid "Indexed?"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:17 #: 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" msgid "Type"
msgstr "" msgstr ""
@ -1274,7 +1259,7 @@ msgid "Method Id"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "To see decoded input data, the contract must be verified."
msgstr "" msgstr ""
@ -1290,13 +1275,13 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 #: 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 " msgid "Verify the contract "
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 #: 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" msgid "here"
msgstr "" msgstr ""
@ -1312,41 +1297,41 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:28 #: 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" msgid "Copy Value"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "Failed to decode log data."
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Log Data"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:32 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:57 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
#: lib/block_scout_web/templates/address_transaction/index.html.eex:52 #: lib/block_scout_web/templates/address_transaction/index.html.eex:57
#: lib/block_scout_web/templates/address_validation/index.html.eex:26 #: 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/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/holder/index.html.eex:19
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:17 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20
#: lib/block_scout_web/templates/transaction/index.html.eex:22 #: lib/block_scout_web/templates/transaction/index.html.eex:20
msgid "Something went wrong, click to reload." msgid "Something went wrong, click to reload."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions."
msgstr "" msgstr ""
@ -1367,34 +1352,34 @@ msgid "Coin Balance History"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Loading balances"
msgstr "" msgstr ""
#, elixir-format #, 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 #: lib/block_scout_web/templates/chain/show.html.eex:13
msgid "Loading chart" msgid "Loading chart"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:24 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25
#: lib/block_scout_web/templates/chain/show.html.eex:16 #: lib/block_scout_web/templates/chain/show.html.eex:16
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no pending transactions."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no blocks."
msgstr "" msgstr ""
@ -1727,33 +1712,36 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: 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 #: lib/block_scout_web/views/transaction_view.ex:341
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:22 #: lib/block_scout_web/templates/chain/show.html.eex:64
msgid " (page" msgid "Total blocks"
msgstr "" msgstr ""
#, elixir-format #, 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 "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:11 #:
#: lib/block_scout_web/templates/address/index.html.eex:41 #: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11
msgid "Back" msgid "Records"
msgstr "" msgstr ""
#, elixir-format #, 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 "" msgstr ""
#, elixir-format #, 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 "" msgstr ""

@ -28,7 +28,7 @@ msgid "%{block_type} Height:"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "%{block_type}s"
msgstr "" msgstr ""
@ -98,20 +98,20 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 #: 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 #: lib/block_scout_web/views/address_view.ex:101
msgid "Address" msgid "Address"
msgstr "" msgstr ""
#, elixir-format #, 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 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:59
msgid "Addresses" msgid "Addresses"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:25 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27
#: lib/block_scout_web/templates/address_transaction/index.html.eex:21 #: 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_internal_transaction_view.ex:8
#: lib/block_scout_web/views/address_transaction_view.ex:8 #: lib/block_scout_web/views/address_transaction_view.ex:8
msgid "All" msgid "All"
@ -245,8 +245,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 #: lib/block_scout_web/templates/address_transaction/index.html.eex:11
#: lib/block_scout_web/templates/pending_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:17 #: lib/block_scout_web/templates/transaction/index.html.eex:15
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
@ -335,8 +335,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:18 #: 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:67
#: lib/block_scout_web/templates/transaction_log/index.html.eex:124 #: lib/block_scout_web/templates/transaction_log/index.html.eex:133
msgid "Data" msgid "Data"
msgstr "" msgstr ""
@ -414,8 +414,8 @@ msgid "Forked Blocks (Reorgs)"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:42 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44
#: lib/block_scout_web/templates/address_transaction/index.html.eex:38 #: 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_internal_transaction_view.ex:7
#: lib/block_scout_web/views/address_transaction_view.ex:7 #: lib/block_scout_web/views/address_transaction_view.ex:7
msgid "From" msgid "From"
@ -479,7 +479,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:14 #: 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/_tabs.html.eex:11
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:297 #: lib/block_scout_web/views/address_view.ex:297
@ -547,8 +547,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:111 #: 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/pending_transaction/index.html.eex:10
#: lib/block_scout_web/templates/transaction/index.html.eex:12 #: lib/block_scout_web/templates/transaction/index.html.eex:10
msgid "More transactions have come in" msgid "More transactions have come in"
msgstr "" msgstr ""
@ -561,7 +561,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 #: 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/_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" msgid "Name"
msgstr "" msgstr ""
@ -572,15 +572,13 @@ msgstr ""
#, elixir-format #, elixir-format
#: #:
#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:37
#: lib/block_scout_web/templates/transaction_log/index.html.eex:144 #: lib/block_scout_web/templates/transaction_log/index.html.eex:162
msgid "Newer" msgid "Newer"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:6 #: lib/block_scout_web/templates/address_token/index.html.eex:39
#: lib/block_scout_web/templates/address/index.html.eex:36
#: lib/block_scout_web/templates/address_token/index.html.eex:22
msgid "Next" msgid "Next"
msgstr "" msgstr ""
@ -608,17 +606,17 @@ msgid "OUT"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:52 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:57
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:81
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:38
#: lib/block_scout_web/templates/address_transaction/index.html.eex:72 #: lib/block_scout_web/templates/address_transaction/index.html.eex:80
#: lib/block_scout_web/templates/address_validation/index.html.eex:31 #: lib/block_scout_web/templates/address_validation/index.html.eex:38
#: lib/block_scout_web/templates/block/index.html.eex:23 #: lib/block_scout_web/templates/block/index.html.eex:30
#: lib/block_scout_web/templates/block_transaction/index.html.eex:32 #: lib/block_scout_web/templates/block_transaction/index.html.eex:50
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:37 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:39
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:34 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:43
#: lib/block_scout_web/templates/transaction/index.html.eex:44 #: lib/block_scout_web/templates/transaction/index.html.eex:45
#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:21 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:38
msgid "Older" msgid "Older"
msgstr "" msgstr ""
@ -656,7 +654,6 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 #: 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" msgid "Pending Transactions"
msgstr "" msgstr ""
@ -735,12 +732,6 @@ msgstr ""
msgid "Show QR Code" msgid "Show QR Code"
msgstr "" 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 #, elixir-format
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:210 #: lib/block_scout_web/views/transaction_view.ex:210
@ -765,33 +756,33 @@ msgid "There are no holders for this Token."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no internal transactions for this transaction."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no logs for this transaction."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/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." msgid "There are no token transfers for this transaction."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -801,17 +792,17 @@ msgid "There are no tokens."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions for this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions for this block."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transfers for this Token."
msgstr "" msgstr ""
@ -821,8 +812,8 @@ msgid "This transaction is pending confirmation."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:31 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33
#: lib/block_scout_web/templates/address_transaction/index.html.eex:27 #: 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_internal_transaction_view.ex:6
#: lib/block_scout_web/views/address_transaction_view.ex:6 #: lib/block_scout_web/views/address_transaction_view.ex:6
msgid "To" msgid "To"
@ -883,7 +874,7 @@ msgid "Top Accounts - %{subnetwork} Explorer"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Topics"
msgstr "" msgstr ""
@ -925,7 +916,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/_tabs.html.eex:3 #: 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:10
#: lib/block_scout_web/templates/block_transaction/index.html.eex:17 #: lib/block_scout_web/templates/block_transaction/index.html.eex:17
#: lib/block_scout_web/templates/chain/show.html.eex:108 #: lib/block_scout_web/templates/chain/show.html.eex:108
@ -977,7 +968,6 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/index.html.eex:4 #: lib/block_scout_web/templates/transaction/index.html.eex:4
#: lib/block_scout_web/templates/transaction/index.html.eex:8
msgid "Validated Transactions" msgid "Validated Transactions"
msgstr "" msgstr ""
@ -1074,11 +1064,6 @@ msgstr ""
msgid "string" msgid "string"
msgstr "" msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:21
msgid "total addresses with a balance"
msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:19 #: lib/block_scout_web/views/address_contract_view.ex:19
msgid "true" msgid "true"
@ -1118,9 +1103,9 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:14
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:16 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/address_validation/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:38 #: 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:99
#: lib/block_scout_web/templates/chain/show.html.eex:125 #: lib/block_scout_web/templates/chain/show.html.eex:125
#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21
@ -1143,22 +1128,22 @@ msgid "GraphQL"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:60 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:66
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:69 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:73
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:80 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:90
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:35 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:47
#: lib/block_scout_web/templates/address_transaction/index.html.eex:66 #: lib/block_scout_web/templates/address_transaction/index.html.eex:71
#: lib/block_scout_web/templates/address_transaction/index.html.eex:80 #: lib/block_scout_web/templates/address_transaction/index.html.eex:89
#: lib/block_scout_web/templates/block/index.html.eex:15 #: lib/block_scout_web/templates/block/index.html.eex:19
#: lib/block_scout_web/templates/block/index.html.eex:30 #: lib/block_scout_web/templates/block/index.html.eex:39
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:34 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:32
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:44 #: 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:33
#: lib/block_scout_web/templates/tokens/holder/index.html.eex:44 #: 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:34
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:41 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:52
#: lib/block_scout_web/templates/transaction/index.html.eex:38 #: lib/block_scout_web/templates/transaction/index.html.eex:36
#: lib/block_scout_web/templates/transaction/index.html.eex:52 #: lib/block_scout_web/templates/transaction/index.html.eex:54
msgid "Loading" msgid "Loading"
msgstr "" msgstr ""
@ -1253,18 +1238,18 @@ msgid "Static Call"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Decoded"
msgstr "" msgstr ""
#, elixir-format #, 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?" msgid "Indexed?"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:17 #: 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" msgid "Type"
msgstr "" msgstr ""
@ -1274,7 +1259,7 @@ msgid "Method Id"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "To see decoded input data, the contract must be verified."
msgstr "" msgstr ""
@ -1290,13 +1275,13 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 #: 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 " msgid "Verify the contract "
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 #: 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" msgid "here"
msgstr "" msgstr ""
@ -1312,41 +1297,41 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:28 #: 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" msgid "Copy Value"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "Failed to decode log data."
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Log Data"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:32 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:57 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:23 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:28
#: lib/block_scout_web/templates/address_transaction/index.html.eex:52 #: lib/block_scout_web/templates/address_transaction/index.html.eex:57
#: lib/block_scout_web/templates/address_validation/index.html.eex:26 #: 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/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/holder/index.html.eex:19
#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:17 #: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20
#: lib/block_scout_web/templates/transaction/index.html.eex:22 #: lib/block_scout_web/templates/transaction/index.html.eex:20
msgid "Something went wrong, click to reload." msgid "Something went wrong, click to reload."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no transactions."
msgstr "" msgstr ""
@ -1367,34 +1352,34 @@ msgid "Coin Balance History"
msgstr "" msgstr ""
#, elixir-format #, 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" msgid "Loading balances"
msgstr "" msgstr ""
#, elixir-format #, 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 #: lib/block_scout_web/templates/chain/show.html.eex:13
msgid "Loading chart" msgid "Loading chart"
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:24 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:26
#: lib/block_scout_web/templates/chain/show.html.eex:16 #: lib/block_scout_web/templates/chain/show.html.eex:16
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no pending transactions."
msgstr "" msgstr ""
#, elixir-format #, 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." msgid "There are no blocks."
msgstr "" msgstr ""
@ -1727,33 +1712,36 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: 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 #: lib/block_scout_web/views/transaction_view.ex:341
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:22 #: lib/block_scout_web/templates/chain/show.html.eex:64
msgid " (page" msgid "Total blocks"
msgstr "" msgstr ""
#, elixir-format #, 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 "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address/index.html.eex:11 #:
#: lib/block_scout_web/templates/address/index.html.eex:41 #: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11
msgid "Back" msgid "Records"
msgstr "" msgstr ""
#, elixir-format #, 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 "" msgstr ""
#, elixir-format #, 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 "" msgstr ""

@ -1,13 +1,44 @@
defmodule BlockScoutWeb.API.RPC.AddressControllerTest do 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
alias Explorer.Chain.{BlockNumberCache, Events.Subscriber, Transaction, Wei}
alias Explorer.Counters.{AddressesWithBalanceCounter, AverageBlockTime}
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Explorer.Repo 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 describe "listaccounts" do
setup do setup do
Subscriber.to(:addresses, :on_demand)
Subscriber.to(:address_coin_balances, :on_demand)
%{params: %{"module" => "account", "action" => "listaccounts"}} %{params: %{"module" => "account", "action" => "listaccounts"}}
end end
@ -47,6 +78,73 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
} }
] = response["result"] ] = response["result"]
end 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 end
describe "balance" do describe "balance" do
@ -140,7 +238,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
expected_result = expected_result =
Enum.map(addresses, fn address -> 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) end)
assert response = assert response =
@ -209,8 +307,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
} }
expected_result = [ expected_result = [
%{"account" => address1, "balance" => "0"}, %{"account" => address1, "balance" => "0", "stale" => false},
%{"account" => address2, "balance" => "0"} %{"account" => address2, "balance" => "0", "stale" => false}
] ]
assert response = assert response =
@ -242,7 +340,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
expected_result = expected_result =
Enum.map(addresses, fn address -> 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) end)
assert response = assert response =
@ -266,8 +364,8 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
} }
expected_result = [ expected_result = [
%{"account" => address2_hash, "balance" => "0"}, %{"account" => address2_hash, "balance" => "0", "stale" => false},
%{"account" => "#{address1.hash}", "balance" => "#{address1.fetched_coin_balance.value}"} %{"account" => "#{address1.hash}", "balance" => "#{address1.fetched_coin_balance.value}", "stale" => false}
] ]
assert response = assert response =
@ -314,7 +412,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do
} }
expected_result = [ expected_result = [
%{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}"} %{"account" => "#{address.hash}", "balance" => "#{address.fetched_coin_balance.value}", "stale" => false}
] ]
assert response = assert response =

@ -100,6 +100,34 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do
] ]
end 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 test "filtering for only verified contracts shows only verified contracts", %{params: params, conn: conn} do
insert(:contract_address) insert(:contract_address)
contract = insert(:smart_contract) contract = insert(:smart_contract)
@ -222,6 +250,35 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do
} }
] ]
end 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 end
describe "getabi" do describe "getabi" do

@ -2802,6 +2802,7 @@ defmodule Explorer.Chain do
on: smart_contract.address_hash == address.hash, on: smart_contract.address_hash == address.hash,
where: not is_nil(address.contract_code), where: not is_nil(address.contract_code),
where: is_nil(smart_contract.address_hash), where: is_nil(smart_contract.address_hash),
where: address.contract_code != <<>>,
preload: [{:smart_contract, smart_contract}, :decompiled_smart_contracts], preload: [{:smart_contract, smart_contract}, :decompiled_smart_contracts],
order_by: [asc: address.inserted_at], order_by: [asc: address.inserted_at],
limit: ^limit, limit: ^limit,
@ -2811,6 +2812,19 @@ defmodule Explorer.Chain do
Repo.all(query) Repo.all(query)
end 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 def list_not_decompiled_contracts(limit, offset) do
query = query =
from( from(
@ -2820,6 +2834,7 @@ defmodule Explorer.Chain do
"NOT EXISTS (SELECT 1 FROM decompiled_smart_contracts WHERE decompiled_smart_contracts.address_hash = ?)", "NOT EXISTS (SELECT 1 FROM decompiled_smart_contracts WHERE decompiled_smart_contracts.address_hash = ?)",
address.hash address.hash
), ),
where: address.contract_code != <<>>,
left_join: smart_contract in SmartContract, left_join: smart_contract in SmartContract,
on: smart_contract.address_hash == address.hash, on: smart_contract.address_hash == address.hash,
left_join: decompiled_smart_contract in DecompiledSmartContract, left_join: decompiled_smart_contract in DecompiledSmartContract,

@ -76,6 +76,7 @@ defmodule Explorer.Chain.Address do
field(:contract_code, Data) field(:contract_code, Data)
field(:nonce, :integer) field(:nonce, :integer)
field(:has_decompiled_code?, :boolean, virtual: true) field(:has_decompiled_code?, :boolean, virtual: true)
field(:stale?, :boolean, virtual: true)
has_one(:smart_contract, SmartContract) has_one(:smart_contract, SmartContract)
has_one(:token, Token, foreign_key: :contract_address_hash) has_one(:token, Token, foreign_key: :contract_address_hash)

Loading…
Cancel
Save