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" %>
@@ -26,9 +31,20 @@
<%= if assigns[:text] do %>
<%= @text %>
<% end %>
-
+
+ <%= if @status !== "question" do %>
+
+ <% else %>
+
+
+ <% end %>
+
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