Merge branch 'master' into ab-blocks-cache

pull/2075/head
Ayrat Badykov 6 years ago committed by GitHub
commit 43cf9ee9b9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 18
      CHANGELOG.md
  2. 2
      apps/block_scout_web/assets/css/_mixins.scss
  3. 1
      apps/block_scout_web/assets/css/components/_address-overview.scss
  4. 23
      apps/block_scout_web/assets/css/components/_btn_dropdown_line.scss
  5. 1
      apps/block_scout_web/assets/css/components/_btn_qr.scss
  6. 1
      apps/block_scout_web/assets/css/components/_card.scss
  7. 27
      apps/block_scout_web/assets/css/components/_dropdown.scss
  8. 15
      apps/block_scout_web/assets/css/components/_footer.scss
  9. 6
      apps/block_scout_web/assets/css/components/_log-search.scss
  10. 20
      apps/block_scout_web/assets/css/components/_modal_status.scss
  11. 11
      apps/block_scout_web/assets/css/components/_navbar.scss
  12. 121
      apps/block_scout_web/assets/css/components/_tile.scss
  13. 6
      apps/block_scout_web/assets/css/theme/_base_variables.scss
  14. 49
      apps/block_scout_web/assets/css/theme/_ethereum_classic_variables.scss
  15. 9
      apps/block_scout_web/assets/css/theme/_neutral_variables.scss
  16. 46
      apps/block_scout_web/assets/css/theme/_rsk_variables.scss
  17. 4
      apps/block_scout_web/assets/static/images/blockscout_logo.svg
  18. 10
      apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex
  19. 29
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_question_modal.html.eex
  20. 22
      apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex
  21. 2
      apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex
  22. 2
      apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex
  23. 2
      apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex
  24. 4
      apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex
  25. 35
      apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex
  26. 54
      apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs
  27. 43
      apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs

@ -1,9 +1,21 @@
## Current
### Features
### Fixes
- [#2103](https://github.com/poanetwork/blockscout/pull/2103) - ui issues for all themes
- [#2090](https://github.com/poanetwork/blockscout/pull/2090) - updated some ETC theme colors
- [#2096](https://github.com/poanetwork/blockscout/pull/2096) - RSK theme fixes
### Chore
## 2.0.0-beta
### Features
- [#2091](https://github.com/poanetwork/blockscout/pull/2091) - Added "Question" modal.
- [#1963](https://github.com/poanetwork/blockscout/pull/1963), [#1959](https://github.com/poanetwork/blockscout/pull/1959), [#1948](https://github.com/poanetwork/blockscout/pull/1948), [#1936](https://github.com/poanetwork/blockscout/pull/1936), [#1925](https://github.com/poanetwork/blockscout/pull/1925), [#1922](https://github.com/poanetwork/blockscout/pull/1922), [#1903](https://github.com/poanetwork/blockscout/pull/1903), [#1874](https://github.com/poanetwork/blockscout/pull/1874), [#1895](https://github.com/poanetwork/blockscout/pull/1895), [#2031](https://github.com/poanetwork/blockscout/pull/2031), [#2073](https://github.com/poanetwork/blockscout/pull/2073), [#2074](https://github.com/poanetwork/blockscout/pull/2074), - added new themes and logos for poa, eth, rinkeby, goerli, ropsten, kovan, sokol, xdai, etc, rsk and default theme
- [#1726](https://github.com/poanetwork/blockscout/pull/2071) - Updated styles for the new smart contract page.
- [#2081](https://github.com/poanetwork/blockscout/pull/2081) - Tooltip for 'more' button, explorers logos added
- [#1963](https://github.com/poanetwork/blockscout/pull/1963), [#1959](https://github.com/poanetwork/blockscout/pull/1959), [#1948](https://github.com/poanetwork/blockscout/pull/1948), [#1936](https://github.com/poanetwork/blockscout/pull/1936), [#1925](https://github.com/poanetwork/blockscout/pull/1925), [#1922](https://github.com/poanetwork/blockscout/pull/1922), [#1903](https://github.com/poanetwork/blockscout/pull/1903), [#1874](https://github.com/poanetwork/blockscout/pull/1874), [#1895](https://github.com/poanetwork/blockscout/pull/1895), [#2031](https://github.com/poanetwork/blockscout/pull/2031), [#2073](https://github.com/poanetwork/blockscout/pull/2073), [#2074](https://github.com/poanetwork/blockscout/pull/2074), - added new themes and logos for poa, eth, rinkeby, goerli, ropsten, kovan, sokol, xdai, etc, rsk and default theme
- [#2010](https://github.com/poanetwork/blockscout/pull/2010) - added "block not found" and "tx not found pages"
- [#1928](https://github.com/poanetwork/blockscout/pull/1928) - pagination styles were updated
- [#1940](https://github.com/poanetwork/blockscout/pull/1940) - qr modal button and background issue
@ -25,6 +37,8 @@
- [#2075](https://github.com/poanetwork/blockscout/pull/2075) - add blocks cache
### Fixes
- [#2099](https://github.com/poanetwork/blockscout/pull/2099) - logs search input width
- [#2098](https://github.com/poanetwork/blockscout/pull/2098) - nav dropdown issue, logo size issue
- [#2082](https://github.com/poanetwork/blockscout/pull/2082) - dropdown styles, tooltip gap fix, 404 page added
- [#2077](https://github.com/poanetwork/blockscout/pull/2077) - ui issues
- [#2072](https://github.com/poanetwork/blockscout/pull/2072) - Fixed checkmarks not showing correctly in tabs.
@ -58,6 +72,8 @@
- [#2014](https://github.com/poanetwork/blockscout/pull/2014) - fix: use better queries for listLogs endpoint
- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions
- [#2070](https://github.com/poanetwork/blockscout/pull/2070) - reduce `max_concurrency` of `BlocksTransactionsMismatch` fetcher
- [#2083](https://github.com/poanetwork/blockscout/pull/2083) - allow total_difficuly to be nil
- [#2086](https://github.com/poanetwork/blockscout/pull/2086) - fix geth's staticcall without output
### Chore

@ -73,6 +73,7 @@
}
@mixin btn-full($bg-color: $primary, $text-color: #fff) {
-webkit-appearance: none !important;
align-items: center;
background-color: $bg-color;
border-radius: 2px;
@ -121,6 +122,7 @@
}
@mixin btn-line($bg-color: #fff, $text-color: $secondary) {
-webkit-appearance: none !important;
align-items: center;
background-color: $bg-color;
border-radius: 2px;

@ -70,6 +70,7 @@
font-weight: 200;
line-height: 1.2;
margin: 0 0 12px;
font-weight: 400;
small {
font-size: 11px;

@ -1,13 +1,16 @@
$btn-dropdown-line-bg: #fff !default;
$btn-dropdown-line-color: $primary !default;
$btn-dropdown-line-color: #e2e5ec !default;
$btn-dropdown-line-font: #333;
.btn-dropdown-line {
@include btn-line($btn-dropdown-line-bg, $btn-dropdown-line-color);
outline: none !important;
color: #333;
border-color: #e2e5ec;
&:hover {
background-color: transparent;
color: #333;
}
}
@include btn-line($btn-dropdown-line-bg, $btn-dropdown-line-color);
border-color: $btn-dropdown-line-color;
color: $btn-dropdown-line-font;
outline: none !important;
&:hover {
background-color: $btn-dropdown-line-color;
border-color: $btn-dropdown-line-color;
color: $btn-dropdown-line-font;
}
}

@ -3,4 +3,5 @@ $btn-qr-dimensions: 31px !default;
.btn-qr-icon {
@include square-icon-button($btn-qr-color, $btn-qr-dimensions);
transition: $transition-base !important;
}

@ -176,6 +176,7 @@ $card-tab-icon-color-active: #20b760 !default;
height: 70px;
padding: 0 25px;
text-align: center;
transition: $transition-base;
&:hover {
background-color: rgba($card-tab-active, .1);

@ -1,13 +1,17 @@
$dropdown-menu-item-color: #333 !default;
$dropdown-menu-item-hover-color: $primary !default;
$dropdown-menu-item-hover-background: rgba($primary, .1) !default;
// These styles extend the default Bootstrap styles
.dropdown-menu {
border-bottom: 1px solid #e2e5ec;
border-left: 1px solid #e2e5ec;
border-radius: 0 0 8px 8px !important;
border: none;
border-right: 1px solid #e2e5ec;
border-top: none;
box-shadow: $box-shadow;
padding: 0;
width: 100%;
border-left: 1px solid #e2e5ec;
border-right: 1px solid #e2e5ec;
border-bottom: 1px solid #e2e5ec;
&.right {
left: auto;
@ -27,11 +31,18 @@
}
.dropdown-item {
color: $dropdown-menu-item-color;
font-size: 12px;
padding: 10px 20px;
transition: $transition-base;
&:hover {
color: #fff;
& {
&.active,
&:hover,
&:focus {
background-color: $dropdown-menu-item-hover-background !important;
color: $dropdown-menu-item-hover-color;
}
}
&:first-child {
@ -55,10 +66,6 @@
font-weight: 700;
}
}
&.active {
background-color: $secondary;
}
&.division {
border-top: 1px solid $base-border-color;

@ -4,7 +4,7 @@ $footer-text-color: rgba(#fff, 0.7) !default;
$footer-link-color: $footer-text-color !default;
$footer-item-disc-color: $primary !default;
$footer-social-icon-color: $footer-text-color !default;
$footer-logo-height: 2rem !default;
$footer-logo-height: 18px !default;
$footer-logo-width: auto !default;
.footer {
@ -26,7 +26,7 @@ $footer-logo-width: auto !default;
}
.footer-logo {
height: $footer-logo-height;
max-height: $footer-logo-height;
width: $footer-logo-width;
}
@ -46,9 +46,10 @@ $footer-logo-width: auto !default;
font-size: 22px;
margin-right: 15px;
text-decoration: none;
transition: $transition-base;
&:hover {
color: $footer-social-icon-color;
color: #fff;
}
&:last-child {
@ -91,6 +92,14 @@ $footer-logo-width: auto !default;
line-height: 2.5;
padding: 0;
a {
transition: $transition-base;
&:hover {
text-decoration: none;
color: #fff;
}
}
&::before {
background-color: $footer-item-disc-color;
border-radius: 50%;

@ -12,8 +12,10 @@
.logs-search {
display: flex;
position: relative;
width: 52%;
@media (max-width: 599px) {
margin-bottom: 30px;
width: 100%;
}
}
@ -57,8 +59,8 @@
transition: .1s ease-in;
position: absolute;
top: 0;
left: 136px;
right: 59px;
&:hover {
color: #333;
}
}
}

@ -1,6 +1,7 @@
$modal-status-graph-error: #ff0d51 !default;
$modal-status-graph-warning: #ff8502 !default;
$modal-status-graph-success: $primary !default;
$modal-status-graph-question: #329ae9 !default;
.modal-status {
max-width: 100%;
@ -32,6 +33,10 @@ $modal-status-graph-success: $primary !default;
background-color: $modal-status-graph-success;
}
&-question {
background-color: $modal-status-graph-question;
}
svg {
margin-top: 15px;
}
@ -62,3 +67,18 @@ $modal-status-graph-success: $primary !default;
margin: 0 0 25px;
text-align: center;
}
.modal-status-button-wrapper {
display: flex;
justify-content: space-between;
width: 100%;
.btn-line {
flex-grow: 1;
margin-right: 20px;
&:last-child {
margin-right: 0;
}
}
}

@ -1,6 +1,6 @@
// Default variables
$header-background-color: #fff !default;
$header-links-color: #a3a9b5 !default;
$header-links-color: #828ba0 !default;
$header-links-color-active: #333 !default;
$header-icon-color: $header-links-color !default;
$header-icon-color-hover: #333 !default;
@ -10,7 +10,7 @@ $header-textfield-text-color: $header-links-color !default;
$header-textfield-background-color: #f5f6fa !default;
$header-textfield-magnifier-color: $header-links-color !default;
$header-link-horizontal-padding: 0.71rem;
$navbar-logo-height: 1.5em !default;
$navbar-logo-height: 18px !default;
$navbar-logo-width: auto !default;
.navbar.navbar-primary {
@ -30,6 +30,7 @@ $navbar-logo-width: auto !default;
display: flex;
font-size: 14px;
position: relative;
transition: $transition-base;
&:before {
background-color: $header-icon-border-color-hover;
@ -77,12 +78,16 @@ $navbar-logo-width: auto !default;
path {
fill: $header-icon-color;
transition: $transition-base;
}
}
}
.nav-item-networks {
margin-left: auto;
.nav-link:before {
display: none;
}
}
}
@ -208,7 +213,7 @@ $navbar-logo-width: auto !default;
}
.navbar-logo {
height: $navbar-logo-height;
max-height: $navbar-logo-height;
width: $navbar-logo-width;
}

@ -14,6 +14,8 @@ $tile-type-progress-bar-color: $primary !default;
$tile-status-error-reason: #ff7986 !default;
$tile-status-awaiting-internal-transactions: $warning !default;
$tile-padding: 1rem;
$tile-title-color: #333 !default;
$tile-body-a-color: #5959d8 !default;
@mixin generate-tile-block($prefix, $color, $label-color: false) {
&#{ $prefix } {
@ -23,8 +25,7 @@ $tile-padding: 1rem;
a {
@if ($label-color) {
color: $label-color;
}
@else {
} @else {
color: $color;
}
}
@ -33,19 +34,13 @@ $tile-padding: 1rem;
.tile-label {
@if ($label-color) {
color: $label-color;
}
@else {
} @else {
color: $color;
}
}
.tile-status-label {
@if ($label-color) {
color: $label-color;
}
@else {
color: $color;
}
color: inherit;
}
.tile-transaction-type-block {
@ -60,20 +55,6 @@ $tile-padding: 1rem;
/*********************************************************************/
.tile-title {
color: #333;
font-size: 12px;
&-hash {
font-weight: 300;
}
&-lg {
color: $body-color;
font-size: 16px;
}
}
.tile-label {
font-size: 12px;
font-weight: 700;
@ -154,7 +135,6 @@ $tile-padding: 1rem;
}
.tile-function-response {
span.function-response-item {
display: block;
margin-left: 1rem;
@ -167,7 +147,6 @@ $tile-padding: 1rem;
p {
margin: 0;
}
}
.tile-image {
@ -176,6 +155,29 @@ $tile-padding: 1rem;
}
.tile {
span[data-address-hash] {
color: $tile-body-a-color;
}
.tile-body {
a {
color: $tile-body-a-color;
}
}
.tile-title {
color: $tile-title-color;
font-size: 12px;
&-hash {
font-weight: 300;
}
&-lg {
color: $body-color;
font-size: 16px;
}
}
border-radius: 4px;
border: 1px solid $border-color;
color: $text-muted;
@ -184,20 +186,57 @@ $tile-padding: 1rem;
line-height: 1.4rem;
padding: $tile-padding;
@include generate-tile-block('.tile-type-block', $tile-type-block-color, darken($tile-type-block-color, 20%));
@include generate-tile-block('.tile-type-uncle', $tile-type-uncle-color);
@include generate-tile-block('.tile-type-reorg', $tile-type-reorg-color);
@include generate-tile-block('.tile-type-emission-reward', $tile-type-emission-reward-color);
@include generate-tile-block('.tile-type-transaction', $tile-type-transaction-color);
@include generate-tile-block('.tile-type-contract-call', $tile-type-contract-call-color);
@include generate-tile-block('.tile-type-contract-creation', $tile-type-contract-creation-color);
@include generate-tile-block('.tile-type-token-transfer', $tile-type-token-transfer-color);
@include generate-tile-block('.tile-type-unique-token', $tile-type-unique-token-color);
@include generate-tile-block('.tile-type-unique-token-image', $tile-type-unique-token-image-color);
@include generate-tile-block('.tile-type-internal-transaction', $tile-type-internal-transaction-color);
@include generate-tile-block('.tile-type-api-documentation', $tile-type-api-documentation-color);
@include generate-tile-block('[class*="status--error"]', $tile-status-error-reason);
@include generate-tile-block('.tile-status--awaiting-internal-transactions', $tile-status-awaiting-internal-transactions);
@include generate-tile-block(
".tile-type-block",
$tile-type-block-color,
darken($tile-type-block-color, 20%)
);
@include generate-tile-block(".tile-type-uncle", $tile-type-uncle-color);
@include generate-tile-block(".tile-type-reorg", $tile-type-reorg-color);
@include generate-tile-block(
".tile-type-emission-reward",
$tile-type-emission-reward-color
);
@include generate-tile-block(
".tile-type-transaction",
$tile-type-transaction-color
);
@include generate-tile-block(
".tile-type-contract-call",
$tile-type-contract-call-color
);
@include generate-tile-block(
".tile-type-contract-creation",
$tile-type-contract-creation-color
);
@include generate-tile-block(
".tile-type-token-transfer",
$tile-type-token-transfer-color
);
@include generate-tile-block(
".tile-type-unique-token",
$tile-type-unique-token-color
);
@include generate-tile-block(
".tile-type-unique-token-image",
$tile-type-unique-token-image-color
);
@include generate-tile-block(
".tile-type-internal-transaction",
$tile-type-internal-transaction-color
);
@include generate-tile-block(
".tile-type-api-documentation",
$tile-type-api-documentation-color
);
@include generate-tile-block(
'[class*="status--error"]',
$tile-status-error-reason
);
@include generate-tile-block(
".tile-status--awaiting-internal-transactions",
$tile-status-awaiting-internal-transactions
);
&.n-p {
padding: 0;
@ -273,4 +312,4 @@ $tile-padding: 1rem;
border-radius: 2px;
}
}
}
}

@ -3,13 +3,17 @@
// Variables should follow the `$component-state-property-size` formula for
// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs.
$dashboard-line-color-price: #8286a9 !default;
$base-border-color: #e2e5ec !default;
$common-container-margin: 50px !default;
// stylelint-disable
$white: #fff !default;
$gray-100: #f8f9fa !default;
$gray-200: #e9ecef !default;
$gray-300: #dee2e6 !default;
$gray-400: #ced4da !default;
$gray-500: #adb5bd !default;
$gray-500: #828ba0 !default;
$gray-600: #cdcdcc !default;
$gray-700: #495057 !default;
$gray-800: #343a40 !default;

@ -9,29 +9,21 @@ $footer-background-color: $primary;
$footer-title-color: #fff;
$footer-text-color: $additional-font;
$footer-item-disc-color: $tertiary;
.footer-logo { filter: brightness(0) invert(1); }
$footer-social-icon-color: #5959d8;
// dashboard
$dashboard-line-color-price: $tertiary; // price left border
$dashboard-line-color-price: $secondary;
$dashboard-line-color-market: $tertiary;
$dashboard-banner-gradient-start: #1b1b39;
$dashboard-banner-gradient-end: #27275f;
$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: #2d2d69; // stats bg
// navigation
.navbar { box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); } // header shadow
$header-icon-border-color-hover: $tertiary; // top border on hover
$header-icon-color-hover: $tertiary; // nav icon on hover
.dropdown-item:hover, .dropdown-item:focus { background-color: $tertiary !important; } // dropdown item on hover
// buttons
$btn-line-bg: #fff; // button bg
@ -39,12 +31,31 @@ $btn-line-color: #27275e; // button border and font color && hover bg color
$btn-copy-color: #27275e; // btn copy
$btn-qr-color: #27275e; // btn qr-code
//links & tile
.tile a { color: $tertiary !important; } // links color for badges
.tile-type-block {
border-left: 4px solid #27275e;
} // tab active bg
// card
$card-background-1: $tertiary;
$card-tab-active: $tertiary;
// ETC theme's idiosyncrasies
.layout-container {
.navbar {
box-shadow: 0 0 30px 0 rgba(21, 53, 80, 0.12);
}
.dropdown-item:hover,
.dropdown-item.active,
.dropdown-item:focus {
background-color: $tertiary;
}
.dashboard-banner-container {
background-image: linear-gradient(
to bottom,
$dashboard-banner-gradient-start,
$dashboard-banner-gradient-end
);
}
.footer-logo {
filter: brightness(0) invert(1);
}
}

@ -1,12 +1,3 @@
// $primary: #262d62;
// $secondary: #687bf6;
// $tertiary: #687bf6;
$dashboard-line-color-price: #8286a9 !default;
$base-border-color: #e2e5ec !default;
$common-container-margin: 50px !default;
// general
$primary: #5c34a2;
$secondary: #87e1a9;

@ -4,47 +4,57 @@ $secondary: #27ac8d;
$tertiary: #e39a54;
$additional-font: #a1ded1;
$tile-body-a-color: $secondary;
$tile-type-block-color: $secondary;
$tile-type-progress-bar-color: $secondary;
// footer
$footer-background-color: $primary;
$footer-title-color: #fff;
$footer-text-color: $additional-font;
$footer-item-disc-color: $secondary;
.footer-logo { filter: brightness(0) invert(1); }
$footer-social-icon-color: $secondary;
// 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-gradient-end: #193039; // gradient end
$dashboard-banner-network-plain-container-background-color: #1a323b; // 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
$btn-dropdown-line-color: $secondary;
// card
$card-background-1: $secondary;
$card-tab-active: $secondary;
$card-tab-active: $secondary;
// ETC theme's idiosyncrasies
.layout-container {
.navbar {
box-shadow: 0 0 30px 0 rgba(21, 53, 80, 0.12);
}
.dashboard-banner-container {
background-image: linear-gradient(
to bottom,
$dashboard-banner-gradient-start,
$dashboard-banner-gradient-end
);
}
.footer-logo {
filter: brightness(0) invert(1);
}
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@ -57,7 +57,7 @@
<dl class="row">
<dt class="col-sm-3 text-muted"><%= gettext "Difficulty" %></dt>
<dd class="col-sm-9">
<span class="font-weight-bold"><%= @block.difficulty |> Cldr.Number.to_string! %></span>
<span><%= @block.difficulty |> Cldr.Number.to_string! %></span>
</dd>
</dl>
@ -65,13 +65,13 @@
<!-- Total Difficulty -->
<dl class="row">
<dt class="col-sm-3 text-muted"><%= gettext "Total Difficulty" %></dt>
<dd class="col-sm-9"><span class="font-weight-bold"><%= @block.total_difficulty |> Cldr.Number.to_string! %></span></dd>
<dd class="col-sm-9"><span><%= @block.total_difficulty |> Cldr.Number.to_string! %></span></dd>
</dl>
<!-- Nonce -->
<dl class="row">
<dt class="col-sm-3 text-muted"><%= gettext "Nonce" %></dt>
<dd class="col-sm-9"><span class="font-weight-bold"><%= to_string(@block.nonce) %></span></dd>
<dd class="col-sm-9"><span><%= to_string(@block.nonce) %></span></dd>
</dl>
<%= if length(@block.uncle_relations) > 0 do %>
@ -97,14 +97,14 @@
<dl class="row">
<dt class="col-sm-3 text-muted"><%= gettext "Gas Used" %></dt>
<dd class="col-sm-9">
<span class="font-weight-bold"><%= @block.gas_used |> Cldr.Number.to_string! %></span>
<span><%= @block.gas_used |> Cldr.Number.to_string! %></span>
<span class="text-muted">(<%= (Decimal.to_integer(@block.gas_used) / Decimal.to_integer(@block.gas_limit)) |> Cldr.Number.to_string!(format: "#.#%") %>)</span>
</dt>
</dl>
<dl class="row mb-0">
<dt class="col-sm-3 text-muted"><%= gettext "Gas Limit" %></dt>
<dd class="col-sm-9">
<span class="font-weight-bold"><%= Cldr.Number.to_string!(@block.gas_limit) %></span>
<span><%= Cldr.Number.to_string!(@block.gas_limit) %></span>
</dd>
</dl>
<% end %>

@ -0,0 +1,29 @@
<svg xmlns="http://www.w3.org/2000/svg" width="62" height="85">
<defs>
<filter id="questiona" width="62" height="85" x="0" y="0" filterUnits="userSpaceOnUse">
<feOffset dy="6" in="SourceAlpha"/>
<feGaussianBlur result="blurOut" stdDeviation="3.464"/>
<feFlood flood-color="#2674AF" result="floodOut"/>
<feComposite in="floodOut" in2="blurOut" operator="atop"/>
<feComponentTransfer>
<feFuncA slope=".6" type="linear"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
<filter id="questionb">
<feOffset dy="-4" in="SourceAlpha"/>
<feGaussianBlur result="blurOut" stdDeviation="2.828"/>
<feFlood flood-color="#329AE9" result="floodOut"/>
<feComposite in="floodOut" in2="blurOut" operator="out" result="compOut"/>
<feComposite in="compOut" in2="SourceAlpha" operator="in"/>
<feComponentTransfer>
<feFuncA slope=".5" type="linear"/>
</feComponentTransfer>
<feBlend in2="SourceGraphic"/>
</filter>
</defs>
<path fill="#FFF" fill-rule="evenodd" d="M30.385 46.419c1.149 0 2.146-.344 2.995-1.033.847-.689 1.381-1.664 1.6-2.928.273-1.205.889-2.368 1.846-3.487.957-1.119 2.339-2.454 4.144-4.004 1.915-1.779 3.474-3.3 4.678-4.563 1.203-1.262 2.228-2.784 3.077-4.564.848-1.779 1.272-3.731 1.272-5.855 0-2.87-.794-5.438-2.38-7.707-1.587-2.267-3.774-4.046-6.565-5.338-2.79-1.292-5.963-1.937-9.518-1.937-3.174 0-6.333.531-9.478 1.593-3.147 1.062-5.95 2.54-8.412 4.434-.931.747-1.6 1.522-2.01 2.325-.41.804-.616 1.808-.616 3.013 0 1.78.479 3.287 1.436 4.521.957 1.235 2.12 1.851 3.488 1.851 1.149 0 2.653-.545 4.513-1.636l1.97-1.033c1.531-.918 2.913-1.621 4.144-2.11a10.075 10.075 0 0 1 3.734-.732c1.53 0 2.734.374 3.61 1.12.875.747 1.313 1.752 1.313 3.014 0 1.263-.315 2.41-.943 3.444-.63 1.033-1.574 2.268-2.832 3.702-1.751 1.895-3.118 3.746-4.103 5.554-.984 1.808-1.477 4.062-1.477 6.759 0 1.78.397 3.158 1.19 4.133.793.977 1.9 1.464 3.324 1.464zm.164 20.579c2.297 0 4.198-.803 5.703-2.411 1.504-1.606 2.257-3.587 2.257-5.941 0-2.353-.753-4.334-2.257-5.941-1.505-1.607-3.406-2.411-5.703-2.411-2.244 0-4.117.804-5.621 2.411-1.506 1.607-2.257 3.588-2.257 5.941 0 2.354.751 4.335 2.257 5.941 1.504 1.608 3.377 2.411 5.621 2.411z" filter="url(#questionb)"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

@ -17,6 +17,11 @@
render BlockScoutWeb.CommonComponentsView, "_icon_warning_modal.html"
end
%>
<%=
if @status == "question" do
render BlockScoutWeb.CommonComponentsView, "_icon_question_modal.html"
end
%>
</div>
<%= render BlockScoutWeb.CommonComponentsView, "_modal_close_button.html" %>
<div class="modal-body modal-status-body">
@ -26,9 +31,20 @@
<%= if assigns[:text] do %>
<p class="modal-status-text"><%= @text %></p>
<% end %>
<button class="btn-line" type="button" data-dismiss="modal">
<span class="btn-line-text">Ok</span>
</button>
<div class="modal-status-button-wrapper">
<%= if @status !== "question" do %>
<button class="btn-line" type="button" data-dismiss="modal">
<span class="btn-line-text">Ok</span>
</button>
<% else %>
<button class="btn-line except" type="button" data-dismiss="modal">
<span class="btn-line-text">No</span>
</button>
<button class="btn-line accept" type="button" data-dismiss="modal">
<span class="btn-line-text">Yes</span>
</button>
<% end %>
</div>
</div>
</div>
</div>

@ -84,4 +84,4 @@
</div>
<% end %>
</div>
</footer>
</footer>

@ -77,7 +77,7 @@
</div>
</li>
<li class="nav-item dropdown nav-item-networks">
<a class="nav-link topnav-nav-link dropdown-toggle active-icon" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<a class="nav-link topnav-nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="nav-link-icon">
<%= render BlockScoutWeb.IconsView, "_active_icon.html" %>
</span>

@ -51,7 +51,7 @@
</span>
</div>
<!-- Verify in other explorers -->
<%# <%= render BlockScoutWeb.AddressView, "_verify_other_explorers.html", hash: hash(@transaction), type: "tx" %> %>
<!-- <%= render BlockScoutWeb.AddressView, "_verify_other_explorers.html", hash: hash(@transaction), type: "tx" %> -->
<hr>
<!-- Block Hash -->
<dl class="row">

@ -439,8 +439,8 @@ defmodule EthereumJSONRPC.Block do
{key, quantity_to_integer(quantity)}
end
# Size may be `nil` for uncle blocks
defp entry_to_elixir({key, nil}) when key in ~w(size) do
# Size and totalDifficulty may be `nil` for uncle blocks
defp entry_to_elixir({key, nil}) when key in ~w(size totalDifficulty) do
{key, nil}
end

@ -385,22 +385,23 @@ defmodule EthereumJSONRPC.Geth.Call do
}
end
defp elixir_to_internal_transaction_params(%{
"blockNumber" => block_number,
"transactionIndex" => transaction_index,
"transactionHash" => transaction_hash,
"index" => index,
"traceAddress" => trace_address,
"type" => "call" = type,
"callType" => "staticcall" = call_type,
"from" => from_address_hash,
"to" => to_address_hash,
"input" => input,
"output" => output,
"gas" => gas,
"gasUsed" => gas_used,
"value" => 0 = value
}) do
defp elixir_to_internal_transaction_params(
%{
"blockNumber" => block_number,
"transactionIndex" => transaction_index,
"transactionHash" => transaction_hash,
"index" => index,
"traceAddress" => trace_address,
"type" => "call" = type,
"callType" => "staticcall" = call_type,
"from" => from_address_hash,
"to" => to_address_hash,
"input" => input,
"gas" => gas,
"gasUsed" => gas_used,
"value" => 0 = value
} = params
) do
%{
block_number: block_number,
transaction_index: transaction_index,
@ -414,7 +415,7 @@ defmodule EthereumJSONRPC.Geth.Call do
gas: gas,
gas_used: gas_used,
input: input,
output: output,
output: params["output"],
value: value
}
end

@ -2,4 +2,58 @@ defmodule EthereumJSONRPC.BlockTest do
use ExUnit.Case, async: true
doctest EthereumJSONRPC.Block
alias EthereumJSONRPC.Block
describe "elixir_to_params/1" do
test "sets totalDifficuly to nil if it's empty" do
result =
Block.elixir_to_params(%{
"difficulty" => 17_561_410_778,
"extraData" => "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",
"gasLimit" => 5000,
"gasUsed" => 0,
"hash" => "0x4d9423080290a650eaf6db19c87c76dff83d1b4ab64aefe6e5c5aa2d1f4b6623",
"logsBloom" =>
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
"miner" => "0xbb7b8287f3f0a933474a79eae42cbca977791171",
"mixHash" => "0xbbb93d610b2b0296a59f18474ac3d6086a9902aa7ca4b9a306692f7c3d496fdf",
"nonce" => 5_539_500_215_739_777_653,
"number" => 59,
"parentHash" => "0xcd5b5c4cecd7f18a13fe974255badffd58e737dc67596d56bc01f063dd282e9e",
"receiptsRoot" => "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"sha3Uncles" => "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
"size" => 542,
"stateRoot" => "0x6fd0a5d82ca77d9f38c3ebbde11b11d304a5fcf3854f291df64395ab38ed43ba",
"timestamp" => Timex.parse!("2015-07-30T15:32:07Z", "{ISO:Extended:Z}"),
"totalDifficulty" => nil,
"transactions" => [],
"transactionsRoot" => "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
"uncles" => []
})
assert result == %{
difficulty: 17_561_410_778,
extra_data: "0x476574682f4c5649562f76312e302e302f6c696e75782f676f312e342e32",
gas_limit: 5000,
gas_used: 0,
hash: "0x4d9423080290a650eaf6db19c87c76dff83d1b4ab64aefe6e5c5aa2d1f4b6623",
logs_bloom:
"0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
mix_hash: "0xbbb93d610b2b0296a59f18474ac3d6086a9902aa7ca4b9a306692f7c3d496fdf",
miner_hash: "0xbb7b8287f3f0a933474a79eae42cbca977791171",
nonce: 5_539_500_215_739_777_653,
number: 59,
parent_hash: "0xcd5b5c4cecd7f18a13fe974255badffd58e737dc67596d56bc01f063dd282e9e",
receipts_root: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
sha3_uncles: "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347",
size: 542,
state_root: "0x6fd0a5d82ca77d9f38c3ebbde11b11d304a5fcf3854f291df64395ab38ed43ba",
timestamp: Timex.parse!("2015-07-30T15:32:07Z", "{ISO:Extended:Z}"),
total_difficulty: nil,
transactions_root: "0x56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421",
uncles: []
}
end
end
end

@ -2,4 +2,47 @@ defmodule EthereumJSONRPC.Geth.CallTest do
use ExUnit.Case, async: true
doctest EthereumJSONRPC.Geth.Call
alias EthereumJSONRPC.Geth.Call
describe "to_internal_transaction_params/1" do
test "does not fail decoding static_call without output" do
result =
Call.to_internal_transaction_params(%{
"blockNumber" => 584_340,
"callType" => "staticcall",
"error" => "execution reverted",
"from" => "0x3858636f27e269d23db2ef1fcca5f93dcaa564cd",
"gas" => "0x0",
"gasUsed" => "0x0",
"index" => 1,
"input" =>
"0x09d10a5e00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002",
"to" => "0x79073fc2117dd054fcedacad1e7018c9cbe3ec0b",
"traceAddress" => [1, 3],
"transactionHash" => "0xbc38745b826f058ed2f6c93fa5b145323857f06bbb5230b6a6a50e09e0915857",
"transactionIndex" => 0,
"type" => "call",
"value" => "0x0"
})
assert result == %{
block_number: 584_340,
call_type: "staticcall",
from_address_hash: "0x3858636f27e269d23db2ef1fcca5f93dcaa564cd",
gas: 0,
gas_used: 0,
index: 1,
input:
"0x09d10a5e00000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000002",
output: nil,
to_address_hash: "0x79073fc2117dd054fcedacad1e7018c9cbe3ec0b",
trace_address: [1, 3],
transaction_hash: "0xbc38745b826f058ed2f6c93fa5b145323857f06bbb5230b6a6a50e09e0915857",
transaction_index: 0,
type: "call",
value: 0
}
end
end
end

Loading…
Cancel
Save