<%= gettext("API Documentation") %>
-
[ <%= gettext "Base URL:" %> <%= blockscout_url() %>api ]
+
[ <%= gettext "Base URL:" %> <%= api_url()%> ]
<%= gettext "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." %>
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex
index b628e1245d..970206636c 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex
@@ -159,6 +159,5 @@
if (localStorage.getItem("current-color-mode") === "dark") {
var modeChanger = document.getElementById("dark-mode-changer");
modeChanger.className += " " + "dark-mode-changer--dark";
- document.body.className += " " + "dark-theme-applied";
}
\ No newline at end of file
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/layout/app.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/layout/app.html.eex
index d8ecb167f1..d14657cc6d 100644
--- a/apps/block_scout_web/lib/block_scout_web/templates/layout/app.html.eex
+++ b/apps/block_scout_web/lib/block_scout_web/templates/layout/app.html.eex
@@ -23,9 +23,13 @@
<%= if not Explorer.Chain.finished_indexing?() do %>
diff --git a/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex
index f71ebc240b..ac7d4d55ee 100644
--- a/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex
+++ b/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex
@@ -46,4 +46,18 @@ defmodule BlockScoutWeb.APIDocsView do
Endpoint.url()
end
end
+
+ def api_url do
+ handle_slash("api")
+ end
+
+ def eth_rpc_api_url do
+ handle_slash("api/eth_rpc")
+ end
+
+ defp handle_slash(path) do
+ base_url = blockscout_url()
+
+ Path.join(base_url, path)
+ end
end
diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot
index 1a99ada8ad..886a88e4c0 100644
--- a/apps/block_scout_web/priv/gettext/default.pot
+++ b/apps/block_scout_web/priv/gettext/default.pot
@@ -62,7 +62,7 @@ msgid "(query)"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:38
+#: lib/block_scout_web/templates/layout/app.html.eex:42
msgid "- We're indexing this chain right now. Some of the counts may be inaccurate."
msgstr ""
@@ -157,7 +157,7 @@ msgid "Block Height: %{height}"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:53
+#: lib/block_scout_web/templates/layout/app.html.eex:57
msgid "Block Mined, awaiting import..."
msgstr ""
@@ -184,7 +184,7 @@ msgid "Blocks"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:52
+#: lib/block_scout_web/templates/layout/app.html.eex:56
msgid "Blocks Indexed"
msgstr ""
@@ -376,7 +376,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_balance_card.html.eex:15
#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:20
-#: lib/block_scout_web/templates/layout/app.html.eex:58
+#: lib/block_scout_web/templates/layout/app.html.eex:62
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
#: lib/block_scout_web/templates/transaction/_tile.html.eex:29
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
@@ -457,7 +457,7 @@ msgid "IN"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:54
+#: lib/block_scout_web/templates/layout/app.html.eex:58
msgid "Indexing Tokens"
msgstr ""
@@ -489,7 +489,7 @@ msgid "Inventory"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:55
+#: lib/block_scout_web/templates/layout/app.html.eex:59
msgid "Less than"
msgstr ""
@@ -510,7 +510,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:31
-#: lib/block_scout_web/templates/layout/app.html.eex:56
+#: lib/block_scout_web/templates/layout/app.html.eex:60
#: lib/block_scout_web/views/address_view.ex:121
#: lib/block_scout_web/views/address_view.ex:121
msgid "Market Cap"
@@ -629,7 +629,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:24
-#: lib/block_scout_web/templates/layout/app.html.eex:57
+#: lib/block_scout_web/templates/layout/app.html.eex:61
msgid "Price"
msgstr ""
diff --git a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
index 735b716ec4..8fd1e1ff2e 100644
--- a/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
+++ b/apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
@@ -62,7 +62,7 @@ msgid "(query)"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:38
+#: lib/block_scout_web/templates/layout/app.html.eex:42
msgid "- We're indexing this chain right now. Some of the counts may be inaccurate."
msgstr ""
@@ -136,8 +136,8 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/block/_link.html.eex:2
-#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:29
-#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:40
+#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:28
+#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:39
msgid "Block #%{number}"
msgstr ""
@@ -157,7 +157,7 @@ msgid "Block Height: %{height}"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:53
+#: lib/block_scout_web/templates/layout/app.html.eex:57
msgid "Block Mined, awaiting import..."
msgstr ""
@@ -184,7 +184,7 @@ msgid "Blocks"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:52
+#: lib/block_scout_web/templates/layout/app.html.eex:56
msgid "Blocks Indexed"
msgstr ""
@@ -211,10 +211,10 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:37
-#: lib/block_scout_web/templates/address/overview.html.eex:146
-#: lib/block_scout_web/templates/address/overview.html.eex:154
-#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107
-#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:115
+#: lib/block_scout_web/templates/address/overview.html.eex:145
+#: lib/block_scout_web/templates/address/overview.html.eex:153
+#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106
+#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:114
msgid "Close"
msgstr ""
@@ -375,12 +375,12 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/_balance_card.html.eex:15
-#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:21
-#: lib/block_scout_web/templates/layout/app.html.eex:58
+#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:20
+#: lib/block_scout_web/templates/layout/app.html.eex:62
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:30
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:29
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
-#: lib/block_scout_web/templates/transaction/overview.html.eex:211
+#: lib/block_scout_web/templates/transaction/overview.html.eex:209
#: lib/block_scout_web/views/wei_helpers.ex:78
msgid "Ether"
msgstr "POA"
@@ -451,13 +451,13 @@ msgid "Hash"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:39
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:74
+#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:38
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:72
msgid "IN"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:54
+#: lib/block_scout_web/templates/layout/app.html.eex:58
msgid "Indexing Tokens"
msgstr ""
@@ -489,12 +489,12 @@ msgid "Inventory"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/layout/app.html.eex:55
+#: lib/block_scout_web/templates/layout/app.html.eex:59
msgid "Less than"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/overview.html.eex:239
+#: lib/block_scout_web/templates/transaction/overview.html.eex:237
msgid "Limit"
msgstr ""
@@ -510,7 +510,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:31
-#: lib/block_scout_web/templates/layout/app.html.eex:56
+#: lib/block_scout_web/templates/layout/app.html.eex:60
#: lib/block_scout_web/views/address_view.ex:121
#: lib/block_scout_web/views/address_view.ex:121
msgid "Market Cap"
@@ -578,8 +578,8 @@ msgid "Nonce"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:37
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:70
+#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:36
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:68
msgid "OUT"
msgstr ""
@@ -629,15 +629,15 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/chain/show.html.eex:24
-#: lib/block_scout_web/templates/layout/app.html.eex:57
+#: lib/block_scout_web/templates/layout/app.html.eex:61
msgid "Price"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/address/overview.html.eex:33
-#: lib/block_scout_web/templates/address/overview.html.eex:145
+#: lib/block_scout_web/templates/address/overview.html.eex:144
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:36
-#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106
+#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:105
msgid "QR Code"
msgstr ""
@@ -709,7 +709,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:21
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:34
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:32
#: lib/block_scout_web/templates/transaction/overview.html.eex:84
msgid "TX Fee"
msgstr ""
@@ -915,7 +915,7 @@ msgid "Unique Token"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/overview.html.eex:233
+#: lib/block_scout_web/templates/transaction/overview.html.eex:231
msgid "Used"
msgstr ""
@@ -936,7 +936,7 @@ msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:179
-#: lib/block_scout_web/templates/transaction/overview.html.eex:211
+#: lib/block_scout_web/templates/transaction/overview.html.eex:209
msgid "Value"
msgstr ""
@@ -957,12 +957,12 @@ msgid "View Contract"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:55
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:53
msgid "View Less Transfers"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/_tile.html.eex:54
+#: lib/block_scout_web/templates/transaction/_tile.html.eex:52
msgid "View More Transfers"
msgstr ""
@@ -1002,7 +1002,7 @@ msgid "Yes"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/overview.html.eex:113
+#: lib/block_scout_web/templates/address/overview.html.eex:112
msgid "at"
msgstr ""
@@ -1450,7 +1450,7 @@ msgid "Incoming Transactions"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/address/overview.html.eex:121
+#: lib/block_scout_web/templates/address/overview.html.eex:120
msgid "Error: Could not determine contract creator."
msgstr ""
@@ -1513,7 +1513,7 @@ msgid "View All Transactions"
msgstr ""
#, elixir-format
-#: lib/block_scout_web/templates/transaction/overview.html.eex:229
+#: lib/block_scout_web/templates/transaction/overview.html.eex:227
msgid "Gas"
msgstr ""
diff --git a/apps/block_scout_web/test/block_scout_web/views/api_docs_view_test.exs b/apps/block_scout_web/test/block_scout_web/views/api_docs_view_test.exs
index da43a33ad0..434f43d31b 100644
--- a/apps/block_scout_web/test/block_scout_web/views/api_docs_view_test.exs
+++ b/apps/block_scout_web/test/block_scout_web/views/api_docs_view_test.exs
@@ -28,4 +28,40 @@ defmodule BlockScoutWeb.ApiDocsViewTest do
assert APIDocsView.blockscout_url() == "https://blockscout.com/chain/dog"
end
end
+
+ describe "api_url/1" do
+ test "adds slash before path" do
+ Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint,
+ url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"]
+ )
+
+ assert APIDocsView.api_url() == "https://blockscout.com/chain/dog/api"
+ end
+
+ test "does not add slash to empty path" do
+ Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint,
+ url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""]
+ )
+
+ assert APIDocsView.api_url() == "https://blockscout.com/api"
+ end
+ end
+
+ describe "eth_rpc_api_url/1" do
+ test "adds slash before path" do
+ Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint,
+ url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"]
+ )
+
+ assert APIDocsView.eth_rpc_api_url() == "https://blockscout.com/chain/dog/api/eth_rpc"
+ end
+
+ test "does not add slash to empty path" do
+ Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint,
+ url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""]
+ )
+
+ assert APIDocsView.eth_rpc_api_url() == "https://blockscout.com/api/eth_rpc"
+ end
+ end
end
diff --git a/apps/explorer/lib/explorer/chain/supply/rsk.ex b/apps/explorer/lib/explorer/chain/supply/rsk.ex
index cdb043418b..eb7c4571cd 100644
--- a/apps/explorer/lib/explorer/chain/supply/rsk.ex
+++ b/apps/explorer/lib/explorer/chain/supply/rsk.ex
@@ -17,12 +17,14 @@ defmodule Explorer.Chain.Supply.RSK do
@cache_name :rsk_balance
@balance_key :balance
- def market_cap(exchange_rate) do
+ def market_cap(%{usd_value: usd_value}) when not is_nil(usd_value) do
btc = circulating()
- Decimal.mult(btc, exchange_rate.usd_value)
+ Decimal.mult(btc, usd_value)
end
+ def market_cap(_), do: Decimal.new(0)
+
@doc "Equivalent to getting the circulating value "
def supply_for_days(days) do
now = Timex.now()
diff --git a/apps/explorer/test/explorer/chain/supply/rsk_test.exs b/apps/explorer/test/explorer/chain/supply/rsk_test.exs
index 71d3a530bb..6efc2bb844 100644
--- a/apps/explorer/test/explorer/chain/supply/rsk_test.exs
+++ b/apps/explorer/test/explorer/chain/supply/rsk_test.exs
@@ -24,7 +24,17 @@ defmodule Explorer.Chain.Supply.RSKTest do
exchange_rate = %{Token.null() | usd_value: Decimal.new(1_000_000)}
- assert Decimal.equal?(RSK.market_cap(exchange_rate), Decimal.new(100.0000))
+ assert Decimal.equal?(RSK.market_cap(exchange_rate), Decimal.from_float(100.0000))
+ end
+
+ test "returns zero when exchange_rate is empty" do
+ assert RSK.market_cap(nil) == Decimal.new(0)
+ end
+
+ test "returns zero when usd_value is nil" do
+ exchange_rate = %{Token.null() | usd_value: nil}
+
+ assert RSK.market_cap(exchange_rate) == Decimal.new(0)
end
end