diff --git a/CHANGELOG.md b/CHANGELOG.md index f401a48719..80de959ab6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ## 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 @@ -33,6 +34,8 @@ ### Fixes - [#2090](https://github.com/poanetwork/blockscout/pull/2090) - updated some ETC theme colors +- [#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. @@ -66,6 +69,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 diff --git a/apps/block_scout_web/assets/css/components/_dropdown.scss b/apps/block_scout_web/assets/css/components/_dropdown.scss index f0a7e33661..52f12861aa 100644 --- a/apps/block_scout_web/assets/css/components/_dropdown.scss +++ b/apps/block_scout_web/assets/css/components/_dropdown.scss @@ -30,8 +30,10 @@ font-size: 12px; padding: 10px 20px; - &:hover { + &:hover, &.active { color: #fff; + background-color: rgba($primary, .1) !important; + color: $primary; } &:first-child { diff --git a/apps/block_scout_web/assets/css/components/_log-search.scss b/apps/block_scout_web/assets/css/components/_log-search.scss index a31de73262..f1c6d145cc 100644 --- a/apps/block_scout_web/assets/css/components/_log-search.scss +++ b/apps/block_scout_web/assets/css/components/_log-search.scss @@ -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; } -} \ No newline at end of file +} diff --git a/apps/block_scout_web/assets/css/components/_modal_status.scss b/apps/block_scout_web/assets/css/components/_modal_status.scss index 9c32b05c72..92856250fc 100644 --- a/apps/block_scout_web/assets/css/components/_modal_status.scss +++ b/apps/block_scout_web/assets/css/components/_modal_status.scss @@ -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; + } + } +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_navbar.scss b/apps/block_scout_web/assets/css/components/_navbar.scss index 0999ef327c..82a18c582c 100644 --- a/apps/block_scout_web/assets/css/components/_navbar.scss +++ b/apps/block_scout_web/assets/css/components/_navbar.scss @@ -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 { @@ -208,7 +208,7 @@ $navbar-logo-width: auto !default; } .navbar-logo { - height: $navbar-logo-height; + max-height: $navbar-logo-height; width: $navbar-logo-width; } diff --git a/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_question_modal.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_question_modal.html.eex new file mode 100644 index 0000000000..14c50899c0 --- /dev/null +++ b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_icon_question_modal.html.eex @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex index c3bd4752e1..f6328b8f1b 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_modal_status.html.eex @@ -17,6 +17,11 @@ render BlockScoutWeb.CommonComponentsView, "_icon_warning_modal.html" end %> + <%= + if @status == "question" do + render BlockScoutWeb.CommonComponentsView, "_icon_question_modal.html" + end + %> <%= render BlockScoutWeb.CommonComponentsView, "_modal_close_button.html" %> diff --git a/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex index ed22191b1f..1058654d49 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/layout/_footer.html.eex @@ -84,4 +84,4 @@ <% end %> - + \ No newline at end of file diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex index 7c22762e49..c736a87633 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex @@ -51,7 +51,7 @@ - <%# <%= render BlockScoutWeb.AddressView, "_verify_other_explorers.html", hash: hash(@transaction), type: "tx" %> %> +
diff --git a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex index 116232f999..6be34eeee1 100644 --- a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex +++ b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/block.ex @@ -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 diff --git a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex index 434cc7b34d..1555ea6c8f 100644 --- a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex +++ b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/geth/call.ex @@ -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 diff --git a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs index 3075dd4b74..1cf16c6f47 100644 --- a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs +++ b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/block_test.exs @@ -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 diff --git a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs index 69815f203f..f4a97c07de 100644 --- a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs +++ b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/geth/call_test.exs @@ -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