From 3e15db266ff97ae17273a7e2fb92f3ac8a8b1eef Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 30 Jul 2019 14:46:06 +0300 Subject: [PATCH 001/109] fix confirmations for non consensus blocks --- .../lib/block_scout_web/views/transaction_view.ex | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex b/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex index 1ed50d28ab..d1600a1729 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex @@ -101,6 +101,9 @@ defmodule BlockScoutWeb.TransactionView do %Block{consensus: true} -> {:ok, confirmations} = Chain.confirmations(block, named_arguments) Cldr.Number.to_string!(confirmations, format: "#,###") + + %Block{consensus: false} -> + 0 end end From fb2c8f04f6c16bf57cb3d897ee41e60ebc888df5 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 30 Jul 2019 14:47:27 +0300 Subject: [PATCH 002/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8735521814..38ba2b3183 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### Features ### Fixes +- [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks ### Chore - [#2434](https://github.com/poanetwork/blockscout/pull/2434) - get rid of timex warnings From 36821eb9620c9334efccc3c4363d1ce20f9ac23b Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 30 Jul 2019 14:51:35 +0300 Subject: [PATCH 003/109] fix gettext --- .../priv/gettext/en/LC_MESSAGES/default.po | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 58e159d0bb..3a03d4deeb 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 @@ -49,7 +49,7 @@ msgid "%{subnetwork} Explorer - BlockScout" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:144 +#: lib/block_scout_web/views/transaction_view.ex:147 msgid "(Awaiting internal transactions for status)" msgstr "" @@ -276,12 +276,12 @@ msgid "Contract Address Pending" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:221 +#: lib/block_scout_web/views/transaction_view.ex:224 msgid "Contract Call" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:220 +#: lib/block_scout_web/views/transaction_view.ex:223 msgid "Contract Creation" msgstr "" @@ -356,12 +356,12 @@ msgid "Error trying to fetch balances." msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:148 +#: lib/block_scout_web/views/transaction_view.ex:151 msgid "Error: %{reason}" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:146 +#: lib/block_scout_web/views/transaction_view.ex:149 msgid "Error: (Awaiting internal transactions for reason)" msgstr "" @@ -466,7 +466,7 @@ msgstr "" #: 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/views/address_view.ex:306 -#: lib/block_scout_web/views/transaction_view.ex:274 +#: lib/block_scout_web/views/transaction_view.ex:277 msgid "Internal Transactions" msgstr "" @@ -493,7 +493,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/views/address_view.ex:312 -#: lib/block_scout_web/views/transaction_view.ex:275 +#: lib/block_scout_web/views/transaction_view.ex:278 msgid "Logs" msgstr "" @@ -506,8 +506,8 @@ msgid "Market Cap" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:129 -#: lib/block_scout_web/views/transaction_view.ex:129 +#: lib/block_scout_web/views/transaction_view.ex:132 +#: lib/block_scout_web/views/transaction_view.ex:132 msgid "Max of" msgstr "" @@ -598,8 +598,8 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/layout/_topnav.html.eex:54 -#: lib/block_scout_web/views/transaction_view.ex:143 -#: lib/block_scout_web/views/transaction_view.ex:177 +#: lib/block_scout_web/views/transaction_view.ex:146 +#: lib/block_scout_web/views/transaction_view.ex:180 msgid "Pending" msgstr "" @@ -686,7 +686,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 -#: lib/block_scout_web/views/transaction_view.ex:145 +#: lib/block_scout_web/views/transaction_view.ex:148 msgid "Success" msgstr "" @@ -791,7 +791,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 -#: lib/block_scout_web/views/transaction_view.ex:219 +#: lib/block_scout_web/views/transaction_view.ex:222 msgid "Token Transfer" msgstr "" @@ -801,7 +801,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 #: lib/block_scout_web/views/tokens/overview_view.ex:35 -#: lib/block_scout_web/views/transaction_view.ex:273 +#: lib/block_scout_web/views/transaction_view.ex:276 msgid "Token Transfers" msgstr "" @@ -835,7 +835,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 -#: lib/block_scout_web/views/transaction_view.ex:222 +#: lib/block_scout_web/views/transaction_view.ex:225 msgid "Transaction" msgstr "" @@ -1496,7 +1496,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 -#: lib/block_scout_web/views/transaction_view.ex:276 +#: lib/block_scout_web/views/transaction_view.ex:279 msgid "Raw Trace" msgstr "" From 0c57f638463b980ac030e87cf78ec39bc60afb94 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 30 Jul 2019 14:51:45 +0300 Subject: [PATCH 004/109] fix gettext --- apps/block_scout_web/priv/gettext/default.pot | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index e356d87df9..22f79e99ec 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -49,7 +49,7 @@ msgid "%{subnetwork} Explorer - BlockScout" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:144 +#: lib/block_scout_web/views/transaction_view.ex:147 msgid "(Awaiting internal transactions for status)" msgstr "" @@ -276,12 +276,12 @@ msgid "Contract Address Pending" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:221 +#: lib/block_scout_web/views/transaction_view.ex:224 msgid "Contract Call" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:220 +#: lib/block_scout_web/views/transaction_view.ex:223 msgid "Contract Creation" msgstr "" @@ -356,12 +356,12 @@ msgid "Error trying to fetch balances." msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:148 +#: lib/block_scout_web/views/transaction_view.ex:151 msgid "Error: %{reason}" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:146 +#: lib/block_scout_web/views/transaction_view.ex:149 msgid "Error: (Awaiting internal transactions for reason)" msgstr "" @@ -466,7 +466,7 @@ msgstr "" #: 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/views/address_view.ex:306 -#: lib/block_scout_web/views/transaction_view.ex:274 +#: lib/block_scout_web/views/transaction_view.ex:277 msgid "Internal Transactions" msgstr "" @@ -493,7 +493,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/views/address_view.ex:312 -#: lib/block_scout_web/views/transaction_view.ex:275 +#: lib/block_scout_web/views/transaction_view.ex:278 msgid "Logs" msgstr "" @@ -506,8 +506,8 @@ msgid "Market Cap" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:129 -#: lib/block_scout_web/views/transaction_view.ex:129 +#: lib/block_scout_web/views/transaction_view.ex:132 +#: lib/block_scout_web/views/transaction_view.ex:132 msgid "Max of" msgstr "" @@ -598,8 +598,8 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/layout/_topnav.html.eex:54 -#: lib/block_scout_web/views/transaction_view.ex:143 -#: lib/block_scout_web/views/transaction_view.ex:177 +#: lib/block_scout_web/views/transaction_view.ex:146 +#: lib/block_scout_web/views/transaction_view.ex:180 msgid "Pending" msgstr "" @@ -686,7 +686,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 -#: lib/block_scout_web/views/transaction_view.ex:145 +#: lib/block_scout_web/views/transaction_view.ex:148 msgid "Success" msgstr "" @@ -791,7 +791,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 -#: lib/block_scout_web/views/transaction_view.ex:219 +#: lib/block_scout_web/views/transaction_view.ex:222 msgid "Token Transfer" msgstr "" @@ -801,7 +801,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 #: lib/block_scout_web/views/tokens/overview_view.ex:35 -#: lib/block_scout_web/views/transaction_view.ex:273 +#: lib/block_scout_web/views/transaction_view.ex:276 msgid "Token Transfers" msgstr "" @@ -835,7 +835,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 -#: lib/block_scout_web/views/transaction_view.ex:222 +#: lib/block_scout_web/views/transaction_view.ex:225 msgid "Transaction" msgstr "" @@ -1495,7 +1495,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 -#: lib/block_scout_web/views/transaction_view.ex:276 +#: lib/block_scout_web/views/transaction_view.ex:279 msgid "Raw Trace" msgstr "" From 8a1d20b1c86883a5d21dee0a1c2ed0a606d55c24 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 6 Aug 2019 13:20:05 +0300 Subject: [PATCH 005/109] add POA emission rewards importer --- .../lib/explorer/chain_spec/poa/importer.ex | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 apps/explorer/lib/explorer/chain_spec/poa/importer.ex diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex new file mode 100644 index 0000000000..45e18e6d1c --- /dev/null +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -0,0 +1,79 @@ +defmodule Explorer.ChainSpec.POA.Importer do + @moduledoc """ + Imports emission reward range for POA chain. + """ + + alias Explorer.Chain.Wei + alias Explorer.Repo + alias Explorer.SmartContract.Reader + alias Explorer.Chain.Block.{EmissionReward, Range} + + @reward_by_block_contract_address "0xeca443e8e1ab29971a45a9c57a6a9875701698a5" + @block_reward_amount_abi %{ + "type" => "function", + "stateMutability" => "view", + "payable" => false, + "outputs" => [%{"type" => "uint256", "name" => ""}], + "name" => "blockRewardAmount", + "inputs" => [], + "constant" => true + } + @block_reward_amount_params %{"blockRewardAmount" => []} + @emission_funds_amount_abi %{ + "type" => "function", + "stateMutability" => "view", + "payable" => false, + "outputs" => [%{"type" => "uint256", "name" => ""}], + "name" => "emissionFundsAmount", + "inputs" => [], + "constant" => true + } + @emission_funds_amount_params %{"emissionFundsAmount" => []} + @emission_funds_block_start 5_098_087 + + def import_emission_rewards do + block_reward = block_reward_amount() + emission_funds = emission_funds_amount() + + rewards = [ + %{ + block_range: %Range{from: 0, to: @emission_funds_block_start}, + reward: %Wei{value: block_reward} + }, + %{ + block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, + reward: %Wei{value: Decimal.add(block_reward, emission_funds)} + } + ] + + {_, nil} = Repo.delete_all(EmissionReward) + {_, nil} = Repo.insert_all(EmissionReward, rewards) + end + + def block_reward_amount do + call_contract(@reward_by_block_contract_address, @block_reward_amount_abi, @block_reward_amount_params) + end + + def emission_funds_amount do + call_contract(@reward_by_block_contract_address, @emission_funds_amount_abi, @emission_funds_amount_params) + end + + defp call_contract(address, abi, params) do + abi = [abi] + + method_name = + params + |> Enum.map(fn {key, _value} -> key end) + |> List.first() + + Reader.query_contract(address, abi, params) + + value = + case Reader.query_contract(address, abi, params) do + %{^method_name => {:ok, [result]}} -> result + _ -> 0 + end + + Decimal.new(value) + end +end From 86aae1f61be2075e2307f820783566b8f4c6a009 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Thu, 8 Aug 2019 11:23:44 +0300 Subject: [PATCH 006/109] fix gettext --- apps/block_scout_web/priv/gettext/default.pot | 1492 +++++++------- .../priv/gettext/en/LC_MESSAGES/default.po | 1816 +++++++++++++++++ 2 files changed, 2594 insertions(+), 714 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 81f785d886..36a85cffcd 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -12,6 +12,16 @@ msgid_plural "%{count} transactions" msgstr[0] "" msgstr[1] "" +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:178 +msgid " Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:14 +msgid " is recommended." +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address/_metatags.html.eex:3 msgid "%{address} - %{subnetwork} Explorer" @@ -48,6 +58,11 @@ msgstr "" msgid "%{subnetwork} Explorer - BlockScout" msgstr "" +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:166 +msgid "(Awaiting internal transactions for status)" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 @@ -61,6 +76,11 @@ msgstr "" msgid "- We're indexing this chain right now. Some of the counts may be inaccurate." msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:75 +msgid ">=" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:73 msgid "A string with the name of the action to be invoked." @@ -71,6 +91,16 @@ msgstr "" msgid "A string with the name of the module to be invoked." msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:104 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:4 +msgid "API Documentation" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/api_docs/_metatags.html.eex:4 msgid "API endpoints for the %{subnetwork}" @@ -81,6 +111,11 @@ msgstr "" msgid "API for the %{subnetwork} - BlockScout" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:78 +msgid "APIs" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/layout/_topnav.html.eex:70 msgid "Accounts" @@ -113,22 +148,42 @@ msgstr "" msgid "All" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 +msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/chain/show.html.eex:47 msgid "Average block time" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:30 +msgid "Back Home" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address/_balance_card.html.eex:3 msgid "Balance" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 +msgid "Balances" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:5 #: lib/block_scout_web/templates/api_docs/index.html.eex:5 msgid "Base URL:" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex:8 +msgid "Block" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/block/_link.html.eex:2 #: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:29 @@ -146,6 +201,11 @@ msgstr "" msgid "Block Confirmations" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/404.html.eex:7 +msgid "Block Details" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/block/overview.html.eex:13 msgid "Block Height: %{height}" @@ -166,6 +226,16 @@ msgstr "" msgid "Block Pending" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:139 +msgid "Block Rewards" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:15 +msgid "Block not found, please try again later." +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/chain/_metatags.html.eex:4 msgid "BlockScout provides analytics data, API, and Smart Contract tools for the %{subnetwork}" @@ -191,12 +261,43 @@ msgstr "" msgid "Blocks Validated" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:17 +msgid "Blockscout is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:28 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:74 +msgid "CSV" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:21 +msgid "Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:22 +msgid "Call Code" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 msgid "Cancel" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:11 +msgid "Change Network" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:36 +msgid "Chat" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137 msgid "Clear" @@ -219,6 +320,12 @@ msgstr "" msgid "Code" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:20 +#: lib/block_scout_web/views/address_view.ex:310 +msgid "Coin Balance History" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 msgid "Compiler" @@ -229,6 +336,11 @@ msgstr "" msgid "Compiler version" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:4 +msgid "Connection Lost" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:10 #: lib/block_scout_web/templates/block/index.html.eex:6 @@ -252,6 +364,11 @@ msgstr "" msgid "Connection Lost, click to load newer validations" msgstr "" +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:53 +msgid "Constructor Arguments" +msgstr "" + #, elixir-format #: lib/block_scout_web/templates/address_contract/index.html.eex:75 msgid "Contract ABI" @@ -270,919 +387,844 @@ msgstr "" msgid "Contract Address Pending" msgstr "" - #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:29 -msgid "Contract Name" +#: lib/block_scout_web/templates/address_contract/index.html.eex:105 +msgid "Contract Byte Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:26 -msgid "Contract name:" +#: lib/block_scout_web/views/transaction_view.ex:243 +msgid "Contract Call" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:63 -msgid "Contract source code" +#: lib/block_scout_web/views/transaction_view.ex:242 +msgid "Contract Creation" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:13 -#: lib/block_scout_web/templates/address/overview.html.eex:17 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:16 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:20 -msgid "Copy Address" +#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +msgid "Contract Creation Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:16 -msgid "Copy Transaction Hash" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:118 +msgid "Contract Libraries" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:20 -msgid "Copy Txn Hash" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:29 +msgid "Contract Name" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:107 -msgid "Created by" +#: lib/block_scout_web/templates/address_contract/index.html.eex:26 +msgid "Contract name:" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146 -msgid "Curl" +#: lib/block_scout_web/templates/address_contract/index.html.eex:63 +msgid "Contract source code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188 -msgid "Description" +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 +msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:8 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 -msgid "Details" +#: lib/block_scout_web/templates/layout/_footer.html.eex:35 +msgid "Contribute" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:58 -msgid "Difficulty" +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +msgid "Copy ABI" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:50 -msgid "ETH" +#: lib/block_scout_web/templates/address/overview.html.eex:13 +#: lib/block_scout_web/templates/address/overview.html.eex:17 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:20 +msgid "Copy Address" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_balance_card.html.eex:32 -msgid "Error trying to fetch balances." +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 +msgid "Copy Contract Byte Code" 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:56 -#: 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/overview.html.eex:196 -#: lib/block_scout_web/views/wei_helpers.ex:78 -msgid "Ether" +#: lib/block_scout_web/templates/address_contract/index.html.eex:93 +msgid "Copy Contract Creation Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211 -msgid "Example Value" +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 +msgid "Copy Decompiled Contract Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128 -msgid "Execute" +#: lib/block_scout_web/templates/address_contract/index.html.eex:65 +msgid "Copy Source Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_balance_card.html.eex:29 -msgid "Fetching tokens..." +#: lib/block_scout_web/templates/transaction/overview.html.eex:16 +msgid "Copy Transaction Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:40 -msgid "Forked Blocks (Reorgs)" +#: lib/block_scout_web/templates/transaction/overview.html.eex:20 +msgid "Copy Txn Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44 -#: 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_transaction_view.ex:7 -msgid "From" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:63 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:65 +msgid "Copy Value" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:18 -msgid "GET" +#: lib/block_scout_web/views/internal_transaction_view.ex:25 +msgid "Create" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:105 -#: lib/block_scout_web/templates/block/overview.html.eex:152 -msgid "Gas Limit" +#: lib/block_scout_web/views/internal_transaction_view.ex:26 +msgid "Create2" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:98 -#: lib/block_scout_web/templates/block/overview.html.eex:146 -msgid "Gas Used" +#: lib/block_scout_web/templates/address/overview.html.eex:107 +msgid "Created by" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:19 -msgid "Github" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146 +msgid "Curl" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_view.ex:20 -#: lib/block_scout_web/views/wei_helpers.ex:77 -msgid "Gwei" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:118 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:55 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:121 +msgid "Data" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:38 -msgid "Hash" +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:63 +msgid "Decimals" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:39 -#: lib/block_scout_web/templates/transaction/_tile.html.eex:74 -msgid "IN" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:16 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:28 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:16 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:28 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:36 +msgid "Decoded" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/app.html.eex:52 -msgid "Indexing Tokens" +#: lib/block_scout_web/views/address_view.ex:308 +msgid "Decompiled Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:3 -msgid "Input" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:6 -msgid "Internal Transaction" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:14 -#: 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_internal_transaction/index.html.eex:6 -#: lib/block_scout_web/views/address_view.ex:306 -msgid "Internal Transactions" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 -#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:17 -#: lib/block_scout_web/views/tokens/overview_view.ex:38 -msgid "Inventory" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/layout/app.html.eex:53 -msgid "Less than" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:224 -msgid "Limit" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:26 -#: lib/block_scout_web/templates/address_logs/index.html.eex:8 -#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 -#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 -#: lib/block_scout_web/views/address_view.ex:312 -msgid "Logs" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:31 -#: lib/block_scout_web/templates/layout/app.html.eex:54 -#: lib/block_scout_web/views/address_view.ex:121 -#: lib/block_scout_web/views/address_view.ex:121 -msgid "Market Cap" -msgstr "" -r -msgid "Max of" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:121 -#: lib/block_scout_web/templates/chain/_block.html.eex:15 -msgid "Miner" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:223 -msgid "Model" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 -msgid "Module" +#: lib/block_scout_web/templates/address/_tabs.html.eex:52 +msgid "Decompiled code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 -msgid "More internal transactions have come in" +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 +msgid "Decompiled contract code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:111 -#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 -#: lib/block_scout_web/templates/transaction/index.html.eex:10 -msgid "More transactions have come in" +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 +msgid "Decompiler version" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:63 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:74 -msgid "Must be set to:" +#: lib/block_scout_web/views/internal_transaction_view.ex:23 +msgid "Delegate Call" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52 -msgid "Name" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188 +msgid "Description" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:67 -msgid "No" +#: lib/block_scout_web/templates/address/overview.html.eex:8 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 +msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:73 -#: lib/block_scout_web/templates/transaction/overview.html.eex:79 -msgid "Nonce" +#: lib/block_scout_web/templates/block/overview.html.eex:58 +msgid "Difficulty" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:37 -#: lib/block_scout_web/templates/transaction/_tile.html.eex:70 -msgid "OUT" +#: lib/block_scout_web/templates/address_contract/index.html.eex:98 +msgid "Displaying the init data provided of the creating transaction." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:30 -msgid "Optimization enabled" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:22 +msgid "During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:18 -msgid "Owner Address" +#: lib/block_scout_web/views/transaction_view.ex:63 +msgid "ERC-20 " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19 -msgid "POST" +#: lib/block_scout_web/views/transaction_view.ex:64 +msgid "ERC-721 " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33 -msgid "Parameters" +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:50 +msgid "ETH" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:45 -msgid "Parent Hash" -msgstr "" - - -msgid "Pending" +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:4 +msgid "ETH RPC API Documentation" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 -msgid "Pending Transactions" +#: lib/block_scout_web/templates/address_contract/index.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:51 +msgid "EVM Version" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:84 -msgid "Position %{index}" +#: lib/block_scout_web/views/block_transaction_view.ex:7 +msgid "Easy Cowboy! This block does not exist yet!" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:24 -#: lib/block_scout_web/templates/layout/app.html.eex:55 -msgid "Price" +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:5 +msgid "Emission Contract" 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/tokens/overview/_details.html.eex:36 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 -msgid "QR Code" +#: lib/block_scout_web/views/block_view.ex:60 +msgid "Emission Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:22 -msgid "Query" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:93 +msgid "Enter the Solidity Contract Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:58 -#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 -#: lib/block_scout_web/views/address_view.ex:309 -#: lib/block_scout_web/views/tokens/overview_view.ex:37 -msgid "Read Contract" +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:49 +msgid "Error rendering value" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:155 -msgid "Request URL" +#: lib/block_scout_web/templates/address/_balance_card.html.eex:32 +msgid "Error trying to fetch balances." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:250 -msgid "Reset" +#: lib/block_scout_web/views/transaction_view.ex:170 +msgid "Error: %{reason}" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173 -msgid "Response Body" +#: lib/block_scout_web/views/transaction_view.ex:168 +msgid "Error: (Awaiting internal transactions for reason)" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185 -msgid "Responses" +#: lib/block_scout_web/templates/address/overview.html.eex:121 +msgid "Error: Could not determine contract creator." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/index.html.eex:14 -#: lib/block_scout_web/templates/layout/_topnav.html.eex:122 -#: lib/block_scout_web/templates/layout/_topnav.html.eex:139 -msgid "Search" +#: lib/block_scout_web/templates/layout/_topnav.html.eex:92 +msgid "Eth RPC" msgstr "" #, elixir-format -#: -#: lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex:30 -msgid "Search tokens" +#: 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:56 +#: 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/overview.html.eex:196 +#: lib/block_scout_web/views/wei_helpers.ex:78 +msgid "Ether" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163 -msgid "Server Response" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211 +msgid "Example Value" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:34 -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:37 -msgid "Show QR Code" -msgstr "" - -msgid "Success" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128 +msgid "Execute" 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/overview.html.eex:84 -msgid "TX Fee" +#: lib/block_scout_web/templates/address_contract/index.html.eex:120 +msgid "External libraries" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:25 -msgid "Telegram" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 +msgid "Failed to decode input data." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/holder/index.html.eex:26 -msgid "There are no holders for this Token." +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:31 +msgid "Failed to decode log data." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65 -msgid "There are no internal transactions for this address." +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:24 +msgid "Favorites" msgstr "" #, elixir-format -#: -#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:15 -msgid "There are no internal transactions for this transaction." +#: lib/block_scout_web/templates/address/_balance_card.html.eex:29 +msgid "Fetching tokens..." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction_log/index.html.eex:18 -msgid "There are no logs for this transaction." +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:16 +msgid "For any existing contracts in the database, insert all ABI entries into the contract_methods table. Use this in case you have verified smart contracts before early March 2019 and you want other contracts with the same functions to show those ABI's as candidate matches." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:15 -msgid "There are no token transfers for this address." +#: lib/block_scout_web/templates/layout/_topnav.html.eex:40 +msgid "Forked Blocks (Reorgs)" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_token/index.html.eex:18 -msgid "There are no tokens for this address." +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44 +#: 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_transaction_view.ex:7 +msgid "From" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:26 -msgid "There are no tokens." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:18 +msgid "GET" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_transaction/index.html.eex:64 -msgid "There are no transactions for this address." +#: lib/block_scout_web/templates/transaction/overview.html.eex:214 +msgid "Gas" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block_transaction/index.html.eex:28 -msgid "There are no transactions for this block." +#: lib/block_scout_web/templates/block/_tile.html.eex:56 +#: lib/block_scout_web/templates/block/overview.html.eex:105 +#: lib/block_scout_web/templates/block/overview.html.eex:152 +msgid "Gas Limit" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25 -msgid "There are no transfers for this Token." +#: lib/block_scout_web/templates/block/_tile.html.eex:61 +#: lib/block_scout_web/templates/block/overview.html.eex:98 +#: lib/block_scout_web/templates/block/overview.html.eex:146 +msgid "Gas Used" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:35 -msgid "This transaction is pending confirmation." +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Genesis Block" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33 -#: 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_transaction_view.ex:6 -msgid "To" +#: lib/block_scout_web/templates/layout/_footer.html.eex:19 +msgid "Github" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:20 -msgid "Toggle navigation" +#: lib/block_scout_web/templates/layout/_topnav.html.eex:82 +msgid "GraphQL" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:10 -msgid "Token Details" +#: lib/block_scout_web/views/block_view.ex:20 +#: lib/block_scout_web/views/wei_helpers.ex:77 +msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/holder/index.html.eex:16 -#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:9 -#: lib/block_scout_web/views/tokens/overview_view.ex:36 -msgid "Token Holders" +#: lib/block_scout_web/templates/block/overview.html.eex:38 +msgid "Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:11 -msgid "Token ID" +#: lib/block_scout_web/templates/transaction/overview.html.eex:115 +#: lib/block_scout_web/templates/transaction/overview.html.eex:119 +msgid "Hex (Default)" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:8 -#: lib/block_scout_web/templates/address_token/index.html.eex:8 -#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 -#: lib/block_scout_web/views/address_view.ex:304 -msgid "Tokens" +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:11 +msgid "However, in general, the" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_metatags.html.eex:13 -msgid "Top Accounts - %{subnetwork} Explorer" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +msgid "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:67 -msgid "Total Difficulty" +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:39 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:74 +msgid "IN" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 -msgid "Total Supply" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:26 +msgid "If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:56 -msgid "Total transactions" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:12 +msgid "If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_metatags.html.eex:3 -msgid "Transaction %{transaction} - %{subnetwork} Explorer" +#: lib/block_scout_web/templates/address/overview.html.eex:79 +msgid "Incoming Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_metatags.html.eex:11 -msgid "Transaction %{transaction}, %{subnetwork} %{transaction}" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:52 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:54 +msgid "Indexed?" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:11 -msgid "Transaction Details" +#: lib/block_scout_web/templates/layout/app.html.eex:52 +msgid "Indexing Tokens" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:3 -#: 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:18 -#: lib/block_scout_web/templates/chain/show.html.eex:108 -#: lib/block_scout_web/templates/layout/_topnav.html.eex:49 -#: lib/block_scout_web/views/address_view.ex:305 -msgid "Transactions" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:3 +msgid "Input" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tile.html.eex:31 -msgid "Transactions sent" +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:6 +msgid "Internal Transaction" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:61 -msgid "Transfers" +#: lib/block_scout_web/templates/address/_tabs.html.eex:14 +#: 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_internal_transaction/index.html.eex:6 +#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/transaction_view.ex:296 +msgid "Internal Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40 -msgid "Try it out" +#: lib/block_scout_web/templates/transaction/invalid.html.eex:6 +msgid "Invalid Transaction Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:22 -msgid "Twitter" +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:17 +#: lib/block_scout_web/views/tokens/overview_view.ex:38 +msgid "Inventory" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:80 -#: lib/block_scout_web/templates/layout/_topnav.html.eex:37 -msgid "Uncles" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:16 +msgid "It could still be in the TX Pool of a different node, waiting to be broadcasted." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:6 -msgid "Unique Token" +#: lib/block_scout_web/templates/address/overview.html.eex:89 +msgid "Last Balance Update: Block #" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:218 -msgid "Used" +#: lib/block_scout_web/templates/layout/app.html.eex:53 +msgid "Less than" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:53 -msgid "Validated" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:155 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:177 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:199 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:221 +msgid "Library Address" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/index.html.eex:4 -msgid "Validated Transactions" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:123 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:145 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:167 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:189 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:211 +msgid "Library Name" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tile.html.eex:35 -msgid "Validations" +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:24 +msgid "License Expires" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:196 -msgid "Value" +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:10 +msgid "License ID" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:11 -#: lib/block_scout_web/templates/address_contract/index.html.eex:16 -msgid "Verify & Publish" +#: lib/block_scout_web/templates/transaction/overview.html.eex:224 +msgid "Limit" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:249 -msgid "Verify & publish" +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22 +#: lib/block_scout_web/templates/chain/show.html.eex:13 +msgid "Loading chart" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:55 -msgid "View Contract" +#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 +#: lib/block_scout_web/templates/chain/show.html.eex:99 +#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 +msgid "Loading..." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_tile.html.eex:55 -msgid "View Less Transfers" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 +msgid "Loading...." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_tile.html.eex:54 -msgid "View More Transfers" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:47 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:49 +msgid "Log Data" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_metatags.html.eex:9 -msgid "View the account balance, transactions, and other data for %{address} on the %{network}" +#: lib/block_scout_web/templates/address/_tabs.html.eex:26 +#: lib/block_scout_web/templates/address_logs/index.html.eex:8 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 +#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/transaction_view.ex:297 +msgid "Logs" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/_metatags.html.eex:10 -msgid "View the transactions, token transfers, and uncles for block number %{block_number}" +#: lib/block_scout_web/templates/layout/_footer.html.eex:44 +msgid "Main Networks" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_metatags.html.eex:10 -msgid "View transaction %{transaction} on %{subnetwork}" +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:22 +msgid "Mainnet" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:49 -msgid "WEI" +#: lib/block_scout_web/templates/chain/show.html.eex:31 +#: lib/block_scout_web/templates/layout/app.html.eex:54 +#: lib/block_scout_web/views/address_view.ex:121 +#: lib/block_scout_web/views/address_view.ex:121 +msgid "Market Cap" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:72 -msgid "Wallet addresses" +#: lib/block_scout_web/views/transaction_view.ex:151 +#: lib/block_scout_web/views/transaction_view.ex:151 +msgid "Max of" msgstr "" #, elixir-format -#: lib/block_scout_web/views/wei_helpers.ex:76 -msgid "Wei" +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:4 +msgid "Method Id" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:72 -msgid "Yes" +#: lib/block_scout_web/templates/block/_tile.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/chain/_block.html.eex:15 +msgid "Miner" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:113 -msgid "at" +#: lib/block_scout_web/views/block_view.ex:56 +msgid "Miner Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/views/address_contract_view.ex:23 -msgid "false" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:223 +msgid "Model" msgstr "" #, elixir-format #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81 -msgid "required" +msgid "Module" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 -#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 -msgid "string" +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 +msgid "More internal transactions have come in" msgstr "" #, elixir-format -#: lib/block_scout_web/views/address_contract_view.ex:22 -msgid "true" +#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 +#: lib/block_scout_web/templates/transaction/index.html.eex:10 +msgid "More transactions have come in" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:21 -msgid "Call" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:63 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:74 +msgid "Must be set to:" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:25 -msgid "Create" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52 +msgid "Name" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:23 -msgid "Delegate Call" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:9 +msgid "New Smart Contract Verification" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:27 -msgid "Self-Destruct" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:67 +msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:63 -msgid "Decimals" +#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/transaction/overview.html.eex:79 +msgid "Nonce" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 -#: lib/block_scout_web/templates/chain/show.html.eex:99 -#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 -msgid "Loading..." +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:37 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:70 +msgid "OUT" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 -msgid "Loading...." +#: lib/block_scout_web/templates/address_contract/index.html.eex:30 +msgid "Optimization enabled" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:78 -msgid "APIs" +#: lib/block_scout_web/templates/address_contract/index.html.eex:39 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:83 +msgid "Optimization runs" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:82 -msgid "GraphQL" +#: lib/block_scout_web/templates/layout/_footer.html.eex:68 +msgid "Other Explorers" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:87 -msgid "RPC" +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:18 +msgid "Owner Address" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/index.html.eex:6 -msgid "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19 +msgid "POST" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:109 -msgid "Raw Input" +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 +msgid "Page" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_transaction_view.ex:15 -msgid "Block not found, please try again later." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33 +msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_transaction_view.ex:7 -msgid "Easy Cowboy! This block does not exist yet!" +#: lib/block_scout_web/templates/block/overview.html.eex:45 +msgid "Parent Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_transaction_view.ex:11 -msgid "This block has not been processed yet." +#: lib/block_scout_web/templates/layout/_topnav.html.eex:58 +#: lib/block_scout_web/views/transaction_view.ex:165 +#: lib/block_scout_web/views/transaction_view.ex:199 +msgid "Pending" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/invalid.html.eex:6 -msgid "Invalid Transaction Hash" +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 +msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/invalid.html.eex:8 -msgid "is not a valid transaction hash" +#: lib/block_scout_web/templates/block/overview.html.eex:84 +msgid "Position %{index}" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:22 -msgid "Call Code" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:17 +msgid "Potential matches from our contract method database:" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:24 -msgid "Static Call" +#: lib/block_scout_web/templates/chain/show.html.eex:24 +#: lib/block_scout_web/templates/layout/app.html.eex:55 +msgid "Price" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:16 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:28 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:16 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:28 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:36 -msgid "Decoded" +#: 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/tokens/overview/_details.html.eex:36 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 +msgid "QR Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:4 -msgid "Method Id" +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:22 +msgid "Query" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 -msgid "To see decoded input data, the contract must be verified." +#: lib/block_scout_web/templates/layout/_topnav.html.eex:87 +msgid "RPC" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 -msgid "Transaction Inputs" +#: lib/block_scout_web/templates/transaction/overview.html.eex:109 +msgid "Raw Input" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 -msgid "Verify the contract " +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 +#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/views/transaction_view.ex:298 +msgid "Raw Trace" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 -msgid "here" +#: lib/block_scout_web/templates/address/_tabs.html.eex:58 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 +#: lib/block_scout_web/views/address_view.ex:309 +#: lib/block_scout_web/views/tokens/overview_view.ex:37 +msgid "Read Contract" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 -msgid "Failed to decode input data." +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11 +msgid "Records" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:49 -msgid "Error rendering value" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:155 +msgid "Request URL" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34 -#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 -#: lib/block_scout_web/templates/address_logs/index.html.eex:21 -#: lib/block_scout_web/templates/address_token/index.html.eex:13 -#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:20 -#: lib/block_scout_web/templates/address_transaction/index.html.eex:59 -#: lib/block_scout_web/templates/address_validation/index.html.eex:22 -#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 -#: lib/block_scout_web/templates/chain/show.html.eex:91 -#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19 -#: lib/block_scout_web/templates/tokens/holder/index.html.eex:21 -#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:21 -#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20 -#: lib/block_scout_web/templates/transaction/index.html.eex:20 -#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/index.html.eex:13 -#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:12 -msgid "Something went wrong, click to reload." +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:250 +msgid "Reset" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_validation/index.html.eex:18 -msgid "There are no blocks validated by this address." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173 +msgid "Response Body" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/index.html.eex:26 -msgid "There are no transactions." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185 +msgid "Responses" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 -msgid "Balances" +#: lib/block_scout_web/templates/block/_tile.html.eex:47 +#: lib/block_scout_web/templates/chain/_block.html.eex:23 +#: lib/block_scout_web/views/internal_transaction_view.ex:28 +msgid "Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex:8 -msgid "Block" +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:21 +msgid "Run" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:20 -#: lib/block_scout_web/views/address_view.ex:310 -msgid "Coin Balance History" +#: lib/block_scout_web/templates/address_logs/index.html.eex:14 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:122 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:139 +msgid "Search" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22 -#: lib/block_scout_web/templates/chain/show.html.eex:13 -msgid "Loading chart" +#: lib/block_scout_web/templates/layout/_topnav.html.eex:116 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:120 +msgid "Search by address, token symbol name, transaction hash, or block number" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39 -msgid "There is no coin history for this address." +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:18 +msgid "Search network" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25 -#: lib/block_scout_web/templates/chain/show.html.eex:16 -msgid "There was a problem loading the chart." +#: +#: lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex:30 +msgid "Search tokens" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23 -msgid "There are no pending transactions." +#: lib/block_scout_web/views/internal_transaction_view.ex:27 +msgid "Self-Destruct" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/index.html.eex:18 -msgid "There are no blocks." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163 +msgid "Server Response" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:24 -msgid "License Expires" +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5 +msgid "Show" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:10 -msgid "License ID" +#: lib/block_scout_web/templates/address/overview.html.eex:34 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:37 +msgid "Show QR Code" msgstr "" #, elixir-format @@ -1191,562 +1233,584 @@ msgid "Show Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:30 -msgid "Validator Creation Date" -msgstr "" - -#, elixir-format -#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:5 -msgid "Validator Data" +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34 +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 +#: lib/block_scout_web/templates/address_logs/index.html.eex:21 +#: lib/block_scout_web/templates/address_token/index.html.eex:13 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:20 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:59 +#: lib/block_scout_web/templates/address_validation/index.html.eex:22 +#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/chain/show.html.eex:91 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19 +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20 +#: lib/block_scout_web/templates/transaction/index.html.eex:20 +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:13 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:12 +msgid "Something went wrong, click to reload." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:52 -msgid "Validator Info" +#: lib/block_scout_web/templates/chain/show.html.eex:117 +msgid "Something went wrong, click to retry." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:139 -msgid "Block Rewards" +#: lib/block_scout_web/templates/transaction/not_found.html.eex:7 +msgid "Sorry, We are unable to locate this transaction Hash" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_view.ex:60 -msgid "Emission Reward" +#: lib/block_scout_web/views/internal_transaction_view.ex:24 +msgid "Static Call" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_view.ex:56 -msgid "Miner Reward" +#: lib/block_scout_web/templates/layout/_footer.html.eex:34 +msgid "Submit an Issue" msgstr "" #, elixir-format -#: lib/block_scout_web/views/block_view.ex:64 -msgid "Uncle Reward" +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 +#: lib/block_scout_web/views/transaction_view.ex:167 +msgid "Success" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 -msgid "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." +#: lib/block_scout_web/templates/layout/_footer.html.eex:37 +msgid "Support" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:17 -msgid "Potential matches from our contract method database:" +#: 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/overview.html.eex:84 +msgid "TX Fee" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:19 -msgid "To have guaranteed accuracy, use the link above to verify the contract's source code." +#: lib/block_scout_web/templates/layout/_footer.html.eex:25 +msgid "Telegram" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 -msgid "To see accurate decoded input data, the contract must be verified." +#: lib/block_scout_web/templates/layout/_footer.html.eex:57 +msgid "Test Networks" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:5 -msgid "Emission Contract" +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:23 +msgid "Testnet" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:117 -msgid "Something went wrong, click to retry." +#: lib/block_scout_web/templates/address_validation/index.html.eex:18 +msgid "There are no blocks validated by this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:17 -msgid "Blockscout is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks." +#: lib/block_scout_web/templates/block/index.html.eex:18 +msgid "There are no blocks." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:36 -msgid "Chat" +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:26 +msgid "There are no holders for this Token." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:35 -msgid "Contribute" +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65 +msgid "There are no internal transactions for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:44 -msgid "Main Networks" +#: +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:15 +msgid "There are no internal transactions for this transaction." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:68 -msgid "Other Explorers" +#: lib/block_scout_web/templates/address_logs/index.html.eex:26 +msgid "There are no logs for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:34 -msgid "Submit an Issue" +#: lib/block_scout_web/templates/transaction_log/index.html.eex:18 +msgid "There are no logs for this transaction." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:57 -msgid "Test Networks" +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23 +msgid "There are no pending transactions." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:83 -msgid "Version" +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:15 +msgid "There are no token transfers for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_footer.html.eex:37 -msgid "Support" +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:17 +msgid "There are no token transfers for this transaction" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:77 -msgid "Copy ABI" +#: lib/block_scout_web/templates/address_token/index.html.eex:18 +msgid "There are no tokens for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:93 -msgid "Copy Contract Creation Code" +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:26 +msgid "There are no tokens." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:65 -msgid "Copy Source Code" +#: lib/block_scout_web/templates/address_transaction/index.html.eex:64 +msgid "There are no transactions for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:13 -msgid "Genesis Block" +#: lib/block_scout_web/templates/block_transaction/index.html.eex:28 +msgid "There are no transactions for this block." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:118 -msgid "Contract Libraries" +#: lib/block_scout_web/templates/transaction/index.html.eex:26 +msgid "There are no transactions." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:89 -msgid "Last Balance Update: Block #" +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25 +msgid "There are no transfers for this Token." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:84 -msgid "Transactions Sent" +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39 +msgid "There is no coin history for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:101 -msgid "Transaction Speed" +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 +msgid "There is no decompilded contracts for this address." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:115 -#: lib/block_scout_web/templates/transaction/overview.html.eex:119 -msgid "Hex (Default)" +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25 +#: lib/block_scout_web/templates/chain/show.html.eex:16 +msgid "There was a problem loading the chart." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:122 -msgid "UTF-8" +#: lib/block_scout_web/templates/api_docs/index.html.eex:6 +msgid "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:16 -msgid "For any existing contracts in the database, insert all ABI entries into the contract_methods table. Use this in case you have verified smart contracts before early March 2019 and you want other contracts with the same functions to show those ABI's as candidate matches." +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:7 +msgid "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:21 -msgid "Run" +#: lib/block_scout_web/views/block_transaction_view.ex:11 +msgid "This block has not been processed yet." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:75 -msgid ">=" +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:10 +msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:79 -msgid "Incoming Transactions" +#: lib/block_scout_web/templates/transaction/overview.html.eex:35 +msgid "This transaction is pending confirmation." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/overview.html.eex:121 -msgid "Error: Could not determine contract creator." +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33 +#: 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_transaction_view.ex:6 +msgid "To" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:116 -#: lib/block_scout_web/templates/layout/_topnav.html.eex:120 -msgid "Search by address, token symbol name, transaction hash, or block number" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:19 +msgid "To have guaranteed accuracy, use the link above to verify the contract's source code." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:45 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:51 -msgid "EVM Version" +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +msgid "To see accurate decoded input data, the contract must be verified." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 -msgid "Copy Decompiled Contract Code" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 +msgid "To see decoded input data, the contract must be verified." msgstr "" #, elixir-format -#: lib/block_scout_web/views/address_view.ex:308 -msgid "Decompiled Code" +#: lib/block_scout_web/templates/layout/_topnav.html.eex:20 +msgid "Toggle navigation" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address/_tabs.html.eex:52 -msgid "Decompiled code" +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:10 +msgid "Token Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 -msgid "Decompiled contract code" +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:9 +#: lib/block_scout_web/views/tokens/overview_view.ex:36 +msgid "Token Holders" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 -msgid "Decompiler version" +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:11 +msgid "Token ID" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:39 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:83 -msgid "Optimization runs" +#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 +#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 +#: lib/block_scout_web/views/transaction_view.ex:241 +msgid "Token Transfer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/index.html.eex:4 -msgid "API Documentation" +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 +#: lib/block_scout_web/views/tokens/overview_view.ex:35 +#: lib/block_scout_web/views/transaction_view.ex:295 +msgid "Token Transfers" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:86 -msgid "View All Blocks" +#: lib/block_scout_web/templates/address/_tabs.html.eex:8 +#: lib/block_scout_web/templates/address_token/index.html.eex:8 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 +#: lib/block_scout_web/views/address_view.ex:304 +msgid "Tokens" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:107 -msgid "View All Transactions" +#: lib/block_scout_web/templates/address/_metatags.html.eex:13 +msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:214 -msgid "Gas" +#: lib/block_scout_web/templates/address_logs/index.html.eex:12 +msgid "Topic" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:64 -msgid "Total blocks" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:88 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:91 +msgid "Topics" msgstr "" #, elixir-format -#: -#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 -msgid "Page" +#: lib/block_scout_web/templates/block/overview.html.eex:67 +msgid "Total Difficulty" msgstr "" #, elixir-format -#: -#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11 -msgid "Records" +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" msgstr "" -#, elixir-format -#: -#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5 -msgid "Show" +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:64 +msgid "Total blocks" msgstr "" #, elixir-format -#: -#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 -msgid "of" +#: lib/block_scout_web/templates/chain/show.html.eex:56 +msgid "Total transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block_transaction/404.html.eex:7 -msgid "Block Details" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 +#: lib/block_scout_web/views/transaction_view.ex:244 +msgid "Transaction" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:105 -msgid "Contract Byte Code" +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:3 +msgid "Transaction %{transaction} - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:91 -msgid "Contract Creation Code" +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:11 +msgid "Transaction %{transaction}, %{subnetwork} %{transaction}" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:97 -msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." +#: lib/block_scout_web/templates/transaction/overview.html.eex:11 +msgid "Transaction Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:107 -msgid "Copy Contract Byte Code" +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 +msgid "Transaction Inputs" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:98 -msgid "Displaying the init data provided of the creating transaction." +#: lib/block_scout_web/templates/transaction/overview.html.eex:101 +msgid "Transaction Speed" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/index.html.eex:26 -msgid "There are no logs for this address." +#: lib/block_scout_web/templates/address/_tabs.html.eex:3 +#: 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:18 +#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:49 +#: lib/block_scout_web/views/address_view.ex:305 +msgid "Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:12 -msgid "If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +#: lib/block_scout_web/templates/address/overview.html.eex:84 +msgid "Transactions Sent" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:30 -msgid "Back Home" +#: lib/block_scout_web/templates/address/_tile.html.eex:31 +msgid "Transactions sent" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:22 -msgid "During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:61 +msgid "Transfers" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:26 -msgid "If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40 +msgid "Try it out" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:16 -msgid "It could still be in the TX Pool of a different node, waiting to be broadcasted." +#: lib/block_scout_web/templates/layout/_footer.html.eex:22 +msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/not_found.html.eex:7 -msgid "Sorry, We are unable to locate this transaction Hash" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:51 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +msgid "Type" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:17 -msgid "There are no token transfers for this transaction" +#: lib/block_scout_web/templates/transaction/overview.html.eex:122 +msgid "UTF-8" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/index.html.eex:12 -msgid "Topic" +#: lib/block_scout_web/views/block_view.ex:64 +msgid "Uncle Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:104 -msgid "ABI-encoded Constructor Arguments (if required by the contract)" +#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:37 +msgid "Uncles" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:93 -msgid "Enter the Solidity Contract Code" +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:6 +msgid "Unique Token" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:155 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:177 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:199 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:221 -msgid "Library Address" +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:12 +msgid "Use the search box to find a hosted network, or select from the list of available networks below." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:123 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:145 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:167 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:189 -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:211 -msgid "Library Name" +#: lib/block_scout_web/templates/transaction/overview.html.eex:218 +msgid "Used" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:9 -msgid "New Smart Contract Verification" +#: lib/block_scout_web/templates/layout/_topnav.html.eex:53 +msgid "Validated" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/transaction/overview.html.eex:178 -msgid " Token Transfer" +#: lib/block_scout_web/templates/transaction/index.html.eex:4 +msgid "Validated Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:14 -msgid " is recommended." +#: lib/block_scout_web/templates/address/_tile.html.eex:35 +msgid "Validations" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 -msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:30 +msgid "Validator Creation Date" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:4 -msgid "ETH RPC API Documentation" +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:5 +msgid "Validator Data" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_topnav.html.eex:92 -msgid "Eth RPC" +#: lib/block_scout_web/templates/address/overview.html.eex:52 +msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:11 -msgid "However, in general, the" +#: lib/block_scout_web/templates/transaction/overview.html.eex:196 +msgid "Value" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 -msgid "There is no decompilded contracts for this address." +#: lib/block_scout_web/templates/address_contract/index.html.eex:11 +#: lib/block_scout_web/templates/address_contract/index.html.eex:16 +msgid "Verify & Publish" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:7 -msgid "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:249 +msgid "Verify & publish" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:10 -msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +msgid "Verify the contract " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:12 -msgid "custom RPC" +#: lib/block_scout_web/templates/layout/_footer.html.eex:83 +msgid "Version" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:9 -msgid "here." +#: lib/block_scout_web/templates/chain/show.html.eex:86 +msgid "View All Blocks" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_token/index.html.eex:28 -#: lib/block_scout_web/templates/address_transaction/index.html.eex:74 -msgid "CSV" +#: lib/block_scout_web/templates/chain/show.html.eex:107 +msgid "View All Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:11 -msgid "Change Network" +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:55 +msgid "View Contract" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:63 -msgid "ERC-20 " +#: lib/block_scout_web/templates/transaction/_tile.html.eex:55 +msgid "View Less Transfers" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:64 -msgid "ERC-721 " +#: lib/block_scout_web/templates/transaction/_tile.html.eex:54 +msgid "View More Transfers" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:120 -msgid "External libraries" +#: lib/block_scout_web/templates/address/_metatags.html.eex:9 +msgid "View the account balance, transactions, and other data for %{address} on the %{network}" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:24 -msgid "Favorites" +#: lib/block_scout_web/templates/block/_metatags.html.eex:10 +msgid "View the transactions, token transfers, and uncles for block number %{block_number}" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:22 -msgid "Mainnet" +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:10 +msgid "View transaction %{transaction} on %{subnetwork}" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:18 -msgid "Search network" +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:49 +msgid "WEI" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:23 -msgid "Testnet" +#: lib/block_scout_web/templates/chain/show.html.eex:72 +msgid "Wallet addresses" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/layout/_network_selector.html.eex:12 -msgid "Use the search box to find a hosted network, or select from the list of available networks below." +#: lib/block_scout_web/views/wei_helpers.ex:76 +msgid "Wei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:4 -msgid "Connection Lost" +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:72 +msgid "Yes" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_contract/index.html.eex:53 -msgid "Constructor Arguments" +#: lib/block_scout_web/templates/address/overview.html.eex:113 +msgid "at" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:63 -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:65 -msgid "Copy Value" +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:12 +msgid "custom RPC" msgstr "" #, elixir-format -#: lib/block_scout_web/views/internal_transaction_view.ex:26 -msgid "Create2" +#: lib/block_scout_web/views/address_contract_view.ex:23 +msgid "false" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:118 -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:55 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:121 -msgid "Data" +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +msgid "here" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:31 -msgid "Failed to decode log data." +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:9 +msgid "here." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:52 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:54 -msgid "Indexed?" +#: lib/block_scout_web/templates/transaction/invalid.html.eex:8 +msgid "is not a valid transaction hash" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:47 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:49 -msgid "Log Data" +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 +msgid "of" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/_tile.html.eex:47 -#: lib/block_scout_web/templates/chain/_block.html.eex:23 -#: lib/block_scout_web/views/internal_transaction_view.ex:28 -msgid "Reward" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81 +msgid "required" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:88 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:91 -msgid "Topics" +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +msgid "string" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:51 -#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 -msgid "Type" +#: lib/block_scout_web/views/address_contract_view.ex:22 +msgid "true" 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 e69de29bb2..36a85cffcd 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 @@ -0,0 +1,1816 @@ +#, elixir-format +#: lib/block_scout_web/views/address_token_balance_view.ex:7 +msgid "%{count} token" +msgid_plural "%{count} tokens" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:27 +msgid "%{count} transaction" +msgid_plural "%{count} transactions" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:178 +msgid " Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:14 +msgid " is recommended." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:3 +msgid "%{address} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:8 +msgid "%{block_type} Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:15 +msgid "%{block_type} Height:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:10 +msgid "%{block_type}s" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:21 +#: lib/block_scout_web/templates/chain/_block.html.eex:11 +msgid "%{count} Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:2 +msgid "%{subnetwork} %{network} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_default_title.html.eex:2 +msgid "%{subnetwork} Explorer - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:166 +msgid "(Awaiting internal transactions for status)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:82 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:104 +msgid "(query)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:36 +msgid "- We're indexing this chain right now. Some of the counts may be inaccurate." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:75 +msgid ">=" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:73 +msgid "A string with the name of the action to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:62 +msgid "A string with the name of the module to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:104 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:4 +msgid "API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:4 +msgid "API endpoints for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:2 +msgid "API for the %{subnetwork} - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:78 +msgid "APIs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:70 +msgid "Accounts" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +msgid "Action" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:3 +#: lib/block_scout_web/views/address_view.ex:99 +msgid "Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/index.html.eex:4 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:60 +msgid "Addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:21 +#: lib/block_scout_web/views/address_internal_transaction_view.ex:8 +#: lib/block_scout_web/views/address_transaction_view.ex:8 +msgid "All" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 +msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:47 +msgid "Average block time" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:30 +msgid "Back Home" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:3 +msgid "Balance" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 +msgid "Balances" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:5 +#: lib/block_scout_web/templates/api_docs/index.html.eex:5 +msgid "Base URL:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex:8 +msgid "Block" +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 +msgid "Block #%{number}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:3 +msgid "Block %{block_number} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:72 +msgid "Block Confirmations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/404.html.eex:7 +msgid "Block Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Block Height: %{height}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:51 +msgid "Block Mined, awaiting import..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:58 +msgid "Block Number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:21 +msgid "Block Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:139 +msgid "Block Rewards" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:15 +msgid "Block not found, please try again later." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:4 +msgid "BlockScout provides analytics data, API, and Smart Contract tools for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:87 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:30 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:34 +msgid "Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:50 +msgid "Blocks Indexed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:32 +#: lib/block_scout_web/templates/address/overview.html.eex:97 +#: lib/block_scout_web/templates/address_validation/index.html.eex:13 +#: lib/block_scout_web/views/address_view.ex:311 +msgid "Blocks Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:17 +msgid "Blockscout is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:28 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:74 +msgid "CSV" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:21 +msgid "Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:22 +msgid "Call Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 +msgid "Cancel" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:11 +msgid "Change Network" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:36 +msgid "Chat" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137 +msgid "Clear" +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 +msgid "Close" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:42 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:165 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:187 +#: lib/block_scout_web/views/address_view.ex:307 +msgid "Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:20 +#: lib/block_scout_web/views/address_view.ex:310 +msgid "Coin Balance History" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 +msgid "Compiler" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:34 +msgid "Compiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:4 +msgid "Connection Lost" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:10 +#: lib/block_scout_web/templates/block/index.html.eex:6 +msgid "Connection Lost, click to load newer blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer internal transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:10 +msgid "Connection Lost, click to load newer validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:53 +msgid "Constructor Arguments" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:75 +msgid "Contract ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:18 +#: lib/block_scout_web/views/address_view.ex:97 +msgid "Contract Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:16 +#: lib/block_scout_web/views/address_view.ex:37 +#: lib/block_scout_web/views/address_view.ex:71 +msgid "Contract Address Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:105 +msgid "Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:243 +msgid "Contract Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:242 +msgid "Contract Creation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +msgid "Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:118 +msgid "Contract Libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:29 +msgid "Contract Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:26 +msgid "Contract name:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:63 +msgid "Contract source code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 +msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:35 +msgid "Contribute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +msgid "Copy ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:13 +#: lib/block_scout_web/templates/address/overview.html.eex:17 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:20 +msgid "Copy Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 +msgid "Copy Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:93 +msgid "Copy Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 +msgid "Copy Decompiled Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:65 +msgid "Copy Source Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:16 +msgid "Copy Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:20 +msgid "Copy Txn Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:63 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:65 +msgid "Copy Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:25 +msgid "Create" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:26 +msgid "Create2" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:107 +msgid "Created by" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146 +msgid "Curl" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:118 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:55 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:121 +msgid "Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:63 +msgid "Decimals" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:16 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:28 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:16 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:28 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:36 +msgid "Decoded" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_view.ex:308 +msgid "Decompiled Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:52 +msgid "Decompiled code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 +msgid "Decompiled contract code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 +msgid "Decompiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:23 +msgid "Delegate Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188 +msgid "Description" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:8 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 +msgid "Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:58 +msgid "Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:98 +msgid "Displaying the init data provided of the creating transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:22 +msgid "During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:63 +msgid "ERC-20 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:64 +msgid "ERC-721 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:50 +msgid "ETH" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:4 +msgid "ETH RPC API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:51 +msgid "EVM Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:7 +msgid "Easy Cowboy! This block does not exist yet!" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:5 +msgid "Emission Contract" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:60 +msgid "Emission Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:93 +msgid "Enter the Solidity Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:49 +msgid "Error rendering value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:32 +msgid "Error trying to fetch balances." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:170 +msgid "Error: %{reason}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:168 +msgid "Error: (Awaiting internal transactions for reason)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:121 +msgid "Error: Could not determine contract creator." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:92 +msgid "Eth RPC" +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:56 +#: 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/overview.html.eex:196 +#: lib/block_scout_web/views/wei_helpers.ex:78 +msgid "Ether" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211 +msgid "Example Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128 +msgid "Execute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:120 +msgid "External libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 +msgid "Failed to decode input data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:31 +msgid "Failed to decode log data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:24 +msgid "Favorites" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:29 +msgid "Fetching tokens..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:16 +msgid "For any existing contracts in the database, insert all ABI entries into the contract_methods table. Use this in case you have verified smart contracts before early March 2019 and you want other contracts with the same functions to show those ABI's as candidate matches." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:40 +msgid "Forked Blocks (Reorgs)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44 +#: 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_transaction_view.ex:7 +msgid "From" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:18 +msgid "GET" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:214 +msgid "Gas" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:56 +#: lib/block_scout_web/templates/block/overview.html.eex:105 +#: lib/block_scout_web/templates/block/overview.html.eex:152 +msgid "Gas Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:61 +#: lib/block_scout_web/templates/block/overview.html.eex:98 +#: lib/block_scout_web/templates/block/overview.html.eex:146 +msgid "Gas Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Genesis Block" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:19 +msgid "Github" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:82 +msgid "GraphQL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:20 +#: lib/block_scout_web/views/wei_helpers.ex:77 +msgid "Gwei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:38 +msgid "Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:115 +#: lib/block_scout_web/templates/transaction/overview.html.eex:119 +msgid "Hex (Default)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:11 +msgid "However, in general, the" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +msgid "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:39 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:74 +msgid "IN" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:26 +msgid "If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:12 +msgid "If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:79 +msgid "Incoming Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:52 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:54 +msgid "Indexed?" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:52 +msgid "Indexing Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:3 +msgid "Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:6 +msgid "Internal Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:14 +#: 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_internal_transaction/index.html.eex:6 +#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/transaction_view.ex:296 +msgid "Internal Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:6 +msgid "Invalid Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:17 +#: lib/block_scout_web/views/tokens/overview_view.ex:38 +msgid "Inventory" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:16 +msgid "It could still be in the TX Pool of a different node, waiting to be broadcasted." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:89 +msgid "Last Balance Update: Block #" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:53 +msgid "Less than" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:155 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:177 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:199 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:221 +msgid "Library Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:123 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:145 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:167 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:189 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:211 +msgid "Library Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:24 +msgid "License Expires" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:10 +msgid "License ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:224 +msgid "Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22 +#: lib/block_scout_web/templates/chain/show.html.eex:13 +msgid "Loading chart" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 +#: lib/block_scout_web/templates/chain/show.html.eex:99 +#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 +msgid "Loading..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 +msgid "Loading...." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:47 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:49 +msgid "Log Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:26 +#: lib/block_scout_web/templates/address_logs/index.html.eex:8 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 +#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/transaction_view.ex:297 +msgid "Logs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:44 +msgid "Main Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:22 +msgid "Mainnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:31 +#: lib/block_scout_web/templates/layout/app.html.eex:54 +#: lib/block_scout_web/views/address_view.ex:121 +#: lib/block_scout_web/views/address_view.ex:121 +msgid "Market Cap" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:151 +#: lib/block_scout_web/views/transaction_view.ex:151 +msgid "Max of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:4 +msgid "Method Id" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/chain/_block.html.eex:15 +msgid "Miner" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:56 +msgid "Miner Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:223 +msgid "Model" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +msgid "Module" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 +msgid "More internal transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 +#: lib/block_scout_web/templates/transaction/index.html.eex:10 +msgid "More transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:63 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:74 +msgid "Must be set to:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52 +msgid "Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:9 +msgid "New Smart Contract Verification" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:67 +msgid "No" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/transaction/overview.html.eex:79 +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 +msgid "OUT" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:30 +msgid "Optimization enabled" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:39 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:83 +msgid "Optimization runs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:68 +msgid "Other Explorers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:18 +msgid "Owner Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19 +msgid "POST" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 +msgid "Page" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33 +msgid "Parameters" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:45 +msgid "Parent Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:58 +#: lib/block_scout_web/views/transaction_view.ex:165 +#: lib/block_scout_web/views/transaction_view.ex:199 +msgid "Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 +msgid "Pending Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:84 +msgid "Position %{index}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:17 +msgid "Potential matches from our contract method database:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:24 +#: lib/block_scout_web/templates/layout/app.html.eex:55 +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/tokens/overview/_details.html.eex:36 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:106 +msgid "QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:22 +msgid "Query" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:87 +msgid "RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:109 +msgid "Raw Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 +#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/views/transaction_view.ex:298 +msgid "Raw Trace" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:58 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 +#: lib/block_scout_web/views/address_view.ex:309 +#: lib/block_scout_web/views/tokens/overview_view.ex:37 +msgid "Read Contract" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11 +msgid "Records" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:155 +msgid "Request URL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:250 +msgid "Reset" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173 +msgid "Response Body" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185 +msgid "Responses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:47 +#: lib/block_scout_web/templates/chain/_block.html.eex:23 +#: lib/block_scout_web/views/internal_transaction_view.ex:28 +msgid "Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:21 +msgid "Run" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:14 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:122 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:139 +msgid "Search" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:116 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:120 +msgid "Search by address, token symbol name, transaction hash, or block number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:18 +msgid "Search network" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex:30 +msgid "Search tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:27 +msgid "Self-Destruct" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163 +msgid "Server Response" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5 +msgid "Show" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:34 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:37 +msgid "Show QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:48 +msgid "Show Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34 +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 +#: lib/block_scout_web/templates/address_logs/index.html.eex:21 +#: lib/block_scout_web/templates/address_token/index.html.eex:13 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:20 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:59 +#: lib/block_scout_web/templates/address_validation/index.html.eex:22 +#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/chain/show.html.eex:91 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19 +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20 +#: lib/block_scout_web/templates/transaction/index.html.eex:20 +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:13 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:12 +msgid "Something went wrong, click to reload." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:117 +msgid "Something went wrong, click to retry." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:7 +msgid "Sorry, We are unable to locate this transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:24 +msgid "Static Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:34 +msgid "Submit an Issue" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 +#: lib/block_scout_web/views/transaction_view.ex:167 +msgid "Success" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:37 +msgid "Support" +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/overview.html.eex:84 +msgid "TX Fee" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:25 +msgid "Telegram" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:57 +msgid "Test Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:23 +msgid "Testnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:18 +msgid "There are no blocks validated by this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:18 +msgid "There are no blocks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:26 +msgid "There are no holders for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65 +msgid "There are no internal transactions for this address." +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:15 +msgid "There are no internal transactions for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:26 +msgid "There are no logs for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_log/index.html.eex:18 +msgid "There are no logs for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23 +msgid "There are no pending transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:15 +msgid "There are no token transfers for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:17 +msgid "There are no token transfers for this transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:18 +msgid "There are no tokens for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:26 +msgid "There are no tokens." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:64 +msgid "There are no transactions for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/index.html.eex:28 +msgid "There are no transactions for this block." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:26 +msgid "There are no transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25 +msgid "There are no transfers for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39 +msgid "There is no coin history for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 +msgid "There is no decompilded contracts for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25 +#: lib/block_scout_web/templates/chain/show.html.eex:16 +msgid "There was a problem loading the chart." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:6 +msgid "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:7 +msgid "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:11 +msgid "This block has not been processed yet." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:10 +msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:35 +msgid "This transaction is pending confirmation." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33 +#: 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_transaction_view.ex:6 +msgid "To" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:19 +msgid "To have guaranteed accuracy, use the link above to verify the contract's source code." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +msgid "To see accurate decoded input data, the contract must be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 +msgid "To see decoded input data, the contract must be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:20 +msgid "Toggle navigation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:10 +msgid "Token Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:9 +#: lib/block_scout_web/views/tokens/overview_view.ex:36 +msgid "Token Holders" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:11 +msgid "Token ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 +#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 +#: lib/block_scout_web/views/transaction_view.ex:241 +msgid "Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 +#: lib/block_scout_web/views/tokens/overview_view.ex:35 +#: lib/block_scout_web/views/transaction_view.ex:295 +msgid "Token Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:8 +#: lib/block_scout_web/templates/address_token/index.html.eex:8 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 +#: lib/block_scout_web/views/address_view.ex:304 +msgid "Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:13 +msgid "Top Accounts - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:12 +msgid "Topic" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:88 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:91 +msgid "Topics" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:67 +msgid "Total Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:64 +msgid "Total blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:56 +msgid "Total transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 +#: lib/block_scout_web/views/transaction_view.ex:244 +msgid "Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:3 +msgid "Transaction %{transaction} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:11 +msgid "Transaction %{transaction}, %{subnetwork} %{transaction}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:11 +msgid "Transaction Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 +msgid "Transaction Inputs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:101 +msgid "Transaction Speed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:3 +#: 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:18 +#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:49 +#: lib/block_scout_web/views/address_view.ex:305 +msgid "Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:84 +msgid "Transactions Sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:31 +msgid "Transactions sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:61 +msgid "Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40 +msgid "Try it out" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:22 +msgid "Twitter" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:51 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +msgid "Type" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:122 +msgid "UTF-8" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:64 +msgid "Uncle Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:37 +msgid "Uncles" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:6 +msgid "Unique Token" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:12 +msgid "Use the search box to find a hosted network, or select from the list of available networks below." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:218 +msgid "Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:53 +msgid "Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:4 +msgid "Validated Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:35 +msgid "Validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:30 +msgid "Validator Creation Date" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:5 +msgid "Validator Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:52 +msgid "Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:196 +msgid "Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:11 +#: lib/block_scout_web/templates/address_contract/index.html.eex:16 +msgid "Verify & Publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:249 +msgid "Verify & publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +msgid "Verify the contract " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:83 +msgid "Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:86 +msgid "View All Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:107 +msgid "View All Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:55 +msgid "View Contract" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_tile.html.eex:55 +msgid "View Less Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_tile.html.eex:54 +msgid "View More Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:9 +msgid "View the account balance, transactions, and other data for %{address} on the %{network}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:10 +msgid "View the transactions, token transfers, and uncles for block number %{block_number}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:10 +msgid "View transaction %{transaction} on %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:49 +msgid "WEI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:72 +msgid "Wallet addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/wei_helpers.ex:76 +msgid "Wei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:72 +msgid "Yes" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:113 +msgid "at" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:12 +msgid "custom RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:23 +msgid "false" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +msgid "here" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:9 +msgid "here." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:8 +msgid "is not a valid transaction hash" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:40 +msgid "of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81 +msgid "required" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +msgid "string" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:22 +msgid "true" +msgstr "" From dd2a8116452d14e862b6d55d7c13fdcb4ee042a2 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Fri, 16 Aug 2019 16:17:07 +0300 Subject: [PATCH 007/109] add verification submission comment --- .../templates/address_contract/index.html.eex | 2 +- .../views/address_contract_view.ex | 9 +++++--- apps/explorer/lib/explorer/chain.ex | 22 +++++++++++++++++-- .../lib/explorer/chain/smart_contract.ex | 22 +++++++++++++++++++ 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex index e8d6501e02..0b2f4f7574 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex @@ -66,7 +66,7 @@
-
<%= for {line, number} <- contract_lines_with_index(@address.smart_contract.contract_source_code) do %>
<%= line %>
<% end %>
+
<%= for {line, number} <- contract_lines_with_index(@address.smart_contract) do %>
<%= line %>
<% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex b/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex index 57c6e11da7..0ad32985c4 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex @@ -2,7 +2,7 @@ defmodule BlockScoutWeb.AddressContractView do use BlockScoutWeb, :view alias ABI.{FunctionSelector, TypeDecoder} - alias Explorer.Chain.{Address, Data, InternalTransaction} + alias Explorer.Chain.{Address, Data, InternalTransaction, SmartContract} def render("scripts.html", %{conn: conn}) do render_scripts(conn, "address_contract/code_highlighting.js") @@ -63,8 +63,11 @@ defmodule BlockScoutWeb.AddressContractView do end) end - def contract_lines_with_index(contract_source_code) do - contract_lines = String.split(contract_source_code, "\n") + def contract_lines_with_index(contract_contract) do + contract_lines = + contract_contract.contract_source_code + |> String.split("\n") + |> SmartContract.add_submitted_comment(contract_contract.inserted_at) max_digits = contract_lines diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index 58253c0f27..979e5975a8 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -2532,8 +2532,26 @@ defmodule Explorer.Chain do @spec address_hash_to_address_with_source_code(Hash.Address.t()) :: Address.t() | nil def address_hash_to_address_with_source_code(address_hash) do case Repo.get(Address, address_hash) do - nil -> nil - address -> Repo.preload(address, [:smart_contract, :decompiled_smart_contracts]) + nil -> + nil + + address -> + address_with_smart_contract = Repo.preload(address, [:smart_contract, :decompiled_smart_contracts]) + + if address_with_smart_contract.smart_contract do + formatted_code = + SmartContract.add_submitted_comment( + address_with_smart_contract.smart_contract.contract_source_code, + address_with_smart_contract.smart_contract.inserted_at + ) + + %{ + address_with_smart_contract + | smart_contract: %{address_with_smart_contract.smart_contract | contract_source_code: formatted_code} + } + else + address_with_smart_contract + end end end diff --git a/apps/explorer/lib/explorer/chain/smart_contract.ex b/apps/explorer/lib/explorer/chain/smart_contract.ex index ed579e8e00..e11e8a6d78 100644 --- a/apps/explorer/lib/explorer/chain/smart_contract.ex +++ b/apps/explorer/lib/explorer/chain/smart_contract.ex @@ -271,6 +271,28 @@ defmodule Explorer.Chain.SmartContract do |> add_error(:contract_source_code, error_message(error)) end + def add_submitted_comment(code, inserted_at) when is_binary(code) do + code + |> String.split("\n") + |> add_submitted_commet(inserted_at) + |> Enum.join("\n") + end + + def add_submitted_comment(contract_lines, inserted_at) when is_list(contract_lines) do + index = + Enum.find(contract_lines, fn line -> + String.contains?(line, "Submitted for verification at Etherscan.io") + end) + + if index do + List.replace_at(contract_lines, index, "* Submitted for verification at blockscout.com") + else + header = ["/**", "* Submitted for verification at blockscout.com on #{inserted_at}", "*/"] + + header ++ contract_lines + end + end + defp upsert_contract_methods(%Ecto.Changeset{changes: %{abi: abi}} = changeset) do ContractMethod.upsert_from_abi(abi, get_field(changeset, :address_hash)) From 5d035b9a0256efdc41ea4f949c62eeb9dfc2094a Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Fri, 16 Aug 2019 16:21:33 +0300 Subject: [PATCH 008/109] fix typo --- apps/explorer/lib/explorer/chain/smart_contract.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/explorer/lib/explorer/chain/smart_contract.ex b/apps/explorer/lib/explorer/chain/smart_contract.ex index e11e8a6d78..7a88110f71 100644 --- a/apps/explorer/lib/explorer/chain/smart_contract.ex +++ b/apps/explorer/lib/explorer/chain/smart_contract.ex @@ -274,7 +274,7 @@ defmodule Explorer.Chain.SmartContract do def add_submitted_comment(code, inserted_at) when is_binary(code) do code |> String.split("\n") - |> add_submitted_commet(inserted_at) + |> add_submitted_comment(inserted_at) |> Enum.join("\n") end From 01ab9a5a317efb6d3bc96c68c0cba4506a35406f Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Fri, 16 Aug 2019 16:22:53 +0300 Subject: [PATCH 009/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f006769dbf..a58616d9bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#1588](https://github.com/poanetwork/blockscout/pull/2588) - add verification submission comment - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation From c15c9bd70565c54f1502c514fd1cb3b7391f7a34 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Fri, 16 Aug 2019 16:40:55 +0300 Subject: [PATCH 010/109] fix tests --- .../templates/address_contract/index.html.eex | 2 +- .../views/address_contract_view.ex | 6 +-- .../views/address_contract_view_test.exs | 47 ++++++++++++------- .../lib/explorer/chain/smart_contract.ex | 2 +- 4 files changed, 35 insertions(+), 22 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex index 0b2f4f7574..1e98048169 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex @@ -66,7 +66,7 @@
-
<%= for {line, number} <- contract_lines_with_index(@address.smart_contract) do %>
<%= line %>
<% end %>
+
<%= for {line, number} <- contract_lines_with_index(@address.smart_contract.contract_source_code, @address.smart_contract.inserted_at) do %>
<%= line %>
<% end %>
diff --git a/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex b/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex index 0ad32985c4..f9128dfb11 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex @@ -63,11 +63,11 @@ defmodule BlockScoutWeb.AddressContractView do end) end - def contract_lines_with_index(contract_contract) do + def contract_lines_with_index(source_code, inserted_at \\ nil) do contract_lines = - contract_contract.contract_source_code + source_code |> String.split("\n") - |> SmartContract.add_submitted_comment(contract_contract.inserted_at) + |> SmartContract.add_submitted_comment(inserted_at) max_digits = contract_lines diff --git a/apps/block_scout_web/test/block_scout_web/views/address_contract_view_test.exs b/apps/block_scout_web/test/block_scout_web/views/address_contract_view_test.exs index 4bcb1eb2bf..9f0314fb88 100644 --- a/apps/block_scout_web/test/block_scout_web/views/address_contract_view_test.exs +++ b/apps/block_scout_web/test/block_scout_web/views/address_contract_view_test.exs @@ -38,22 +38,25 @@ defmodule BlockScoutWeb.AddressContractViewTest do result = AddressContractView.contract_lines_with_index(code) assert result == [ - {"pragma solidity >=0.4.22 <0.6.0;", " 1"}, - {"", " 2"}, - {"struct Proposal {", " 3"}, - {" uint voteCount;", " 4"}, - {"}", " 5"}, - {"", " 6"}, - {"address chairperson;", " 7"}, - {"mapping(address => Voter) voters;", " 8"}, - {"Proposal[] proposals;", " 9"}, - {"", "10"}, - {"constructor(uint8 _numProposals) public {", "11"}, - {" chairperson = msg.sender;", "12"}, - {" voters[chairperson].weight = 1;", "13"}, - {" proposals.length = _numProposals;", "14"}, - {"}", "15"}, - {"", "16"} + {"/**", " 1"}, + {"* Submitted for verification at blockscout.com on ", " 2"}, + {"*/", " 3"}, + {"pragma solidity >=0.4.22 <0.6.0;", " 4"}, + {"", " 5"}, + {"struct Proposal {", " 6"}, + {" uint voteCount;", " 7"}, + {"}", " 8"}, + {"", " 9"}, + {"address chairperson;", "10"}, + {"mapping(address => Voter) voters;", "11"}, + {"Proposal[] proposals;", "12"}, + {"", "13"}, + {"constructor(uint8 _numProposals) public {", "14"}, + {" chairperson = msg.sender;", "15"}, + {" voters[chairperson].weight = 1;", "16"}, + {" proposals.length = _numProposals;", "17"}, + {"}", "18"}, + {"", "19"} ] end @@ -66,7 +69,17 @@ defmodule BlockScoutWeb.AddressContractViewTest do test "returns a list of tuples and the first element is just a line from the original string" do result = AddressContractView.contract_lines_with_index("a\nb\nc\nd\ne") - assert Enum.map(result, fn {line, _number} -> line end) == ["a", "b", "c", "d", "e"] + + assert Enum.map(result, fn {line, _number} -> line end) == [ + "/**", + "* Submitted for verification at blockscout.com on ", + "*/", + "a", + "b", + "c", + "d", + "e" + ] end end end diff --git a/apps/explorer/lib/explorer/chain/smart_contract.ex b/apps/explorer/lib/explorer/chain/smart_contract.ex index 7a88110f71..bbddd51100 100644 --- a/apps/explorer/lib/explorer/chain/smart_contract.ex +++ b/apps/explorer/lib/explorer/chain/smart_contract.ex @@ -285,7 +285,7 @@ defmodule Explorer.Chain.SmartContract do end) if index do - List.replace_at(contract_lines, index, "* Submitted for verification at blockscout.com") + List.replace_at(contract_lines, index, "* Submitted for verification at blockscout.com on #{inserted_at}") else header = ["/**", "* Submitted for verification at blockscout.com on #{inserted_at}", "*/"] From cb3cc8eb65bcd942cc0a9deaa47248838e42d5c6 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 10:54:01 +0300 Subject: [PATCH 011/109] fix api/rpc/contract_controller_test --- .../api/rpc/contract_controller_test.exs | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs index e070cf8e57..af9daffed8 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/contract_controller_test.exs @@ -1,6 +1,6 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do use BlockScoutWeb.ConnCase - alias Explorer.Factory + alias Explorer.{Chain, Factory} describe "listcontracts" do setup do @@ -422,7 +422,9 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do expected_result = [ %{ "Address" => to_string(contract.address_hash), - "SourceCode" => contract.contract_source_code, + "SourceCode" => + "/**\n* Submitted for verification at blockscout.com on #{contract.inserted_at}\n*/\n" <> + contract.contract_source_code, "ABI" => Jason.encode!(contract.abi), "ContractName" => contract.name, "CompilerVersion" => contract.compiler_version, @@ -467,9 +469,13 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do |> get("/api", params) |> json_response(200) + verified_contract = Chain.address_hash_to_smart_contract(contract_address.hash) + expected_result = %{ "Address" => to_string(contract_address.hash), - "SourceCode" => contract_code_info.source_code, + "SourceCode" => + "/**\n* Submitted for verification at blockscout.com on #{verified_contract.inserted_at}\n*/\n" <> + contract_code_info.source_code, "ABI" => Jason.encode!(contract_code_info.abi), "ContractName" => contract_code_info.name, "CompilerVersion" => contract_code_info.version, @@ -533,8 +539,14 @@ defmodule BlockScoutWeb.API.RPC.ContractControllerTest do result = response["result"] + verified_contract = Chain.address_hash_to_smart_contract(contract_address.hash) + assert result["Address"] == to_string(contract_address.hash) - assert result["SourceCode"] == contract_source_code + + assert result["SourceCode"] == + "/**\n* Submitted for verification at blockscout.com on #{verified_contract.inserted_at}\n*/\n" <> + contract_source_code + assert result["ContractName"] == name assert result["DecompiledSourceCode"] == "Contract source code not decompiled." assert result["DecompilerVersion"] == "" From c4ca6ba2b5d45f333f33712081dc03af07b4eb55 Mon Sep 17 00:00:00 2001 From: saneery Date: Mon, 19 Aug 2019 11:34:04 +0300 Subject: [PATCH 012/109] Fix error of url in API page --- apps/block_scout_web/assets/js/lib/try_api.js | 2 +- apps/block_scout_web/assets/js/lib/try_eth_api.js | 5 +++-- .../lib/block_scout_web/views/api_docs_view.ex | 7 ++++--- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/apps/block_scout_web/assets/js/lib/try_api.js b/apps/block_scout_web/assets/js/lib/try_api.js index c0eb8cd5e3..e6460f6c6b 100644 --- a/apps/block_scout_web/assets/js/lib/try_api.js +++ b/apps/block_scout_web/assets/js/lib/try_api.js @@ -124,7 +124,7 @@ $('button[data-try-api-ui-button-type="execute"]').click(event => { } $.ajax({ - url: `/api${query}`, + url: composeRequestUrl(query), success: (_data, _status, xhr) => { handleSuccess(query, xhr, clickedButton) }, diff --git a/apps/block_scout_web/assets/js/lib/try_eth_api.js b/apps/block_scout_web/assets/js/lib/try_eth_api.js index a3dd7b6f4e..f6e1adffae 100644 --- a/apps/block_scout_web/assets/js/lib/try_eth_api.js +++ b/apps/block_scout_web/assets/js/lib/try_eth_api.js @@ -50,7 +50,6 @@ $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { const inputs = $(`input[data-selector="${module}-${action}-try-api-ui"]`) const params = $.map(inputs, parseInput) const formData = wrapJsonRpc(action, params) - console.log(formData) const loadingText = ' Loading...' clickedButton.prop('disabled', true) @@ -60,8 +59,10 @@ $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { clickedButton.html(loadingText) } + const url = $('[data-endpoint-url]').attr('data-endpoint-url') + $.ajax({ - url: '/api/eth_rpc', + url: url, type: 'POST', data: JSON.stringify(formData), dataType: 'json', 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 ac7d4d55ee..895fad79c2 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 @@ -1,7 +1,7 @@ defmodule BlockScoutWeb.APIDocsView do use BlockScoutWeb, :view - alias BlockScoutWeb.{Endpoint, LayoutView} + alias BlockScoutWeb.LayoutView def action_tile_id(module, action) do "#{module}-#{action}" @@ -41,9 +41,10 @@ defmodule BlockScoutWeb.APIDocsView do scheme = url_params[:scheme] if host != "localhost" do - scheme <> "://" <> host <> path + "#{scheme}://#{host}#{path}" else - Endpoint.url() + port = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:http][:port] + "#{scheme}://#{host}:#{to_string(port)}#{path}" end end From 7270b32ffb959ade1480a945b6a578bf3eeb251e Mon Sep 17 00:00:00 2001 From: saneery Date: Mon, 19 Aug 2019 11:43:56 +0300 Subject: [PATCH 013/109] Add double quotes to example of API call --- .../block_scout_web/templates/api_docs/_eth_rpc_item.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex index 7f342b4a16..57f96e42e0 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex @@ -6,7 +6,7 @@ - curl -X POST --data '{"id":0,"jsonrpc":"2.0","method": "<%= @action %>", params: []}' + curl -X POST --data '{"id":0,"jsonrpc":"2.0","method": "<%= @action %>", "params": []}'

From 13058bea30d7afc79f9303bcd4f72b57b8a20166 Mon Sep 17 00:00:00 2001 From: saneery Date: Mon, 19 Aug 2019 11:47:51 +0300 Subject: [PATCH 014/109] add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f006769dbf..649b476ec3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2591](https://github.com/poanetwork/blockscout/pull/2591) - Fix url error in API page - [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css - [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload - [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter From e73280aafcc5e561d03307f66ad2802e9c38086a Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 14:48:36 +0300 Subject: [PATCH 015/109] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a58616d9bb..203f2dcce1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## Current ### Features -- [#1588](https://github.com/poanetwork/blockscout/pull/2588) - add verification submission comment +- [#2588](https://github.com/poanetwork/blockscout/pull/2588) - add verification submission comment - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation From f9676bc04833c735df3558b422a657fdf7821d23 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 15:13:34 +0300 Subject: [PATCH 016/109] integrate poa emission rewards to supervision tree --- apps/explorer/config/config.exs | 6 +++++- .../lib/explorer/chain_spec/parity/importer.ex | 18 ++++++++++++++---- .../lib/explorer/chain_spec/poa/importer.ex | 9 ++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 95c80ba445..e4ba8ef577 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -27,7 +27,11 @@ config :explorer, Explorer.Counters.AverageBlockTime, enabled: true, period: average_block_period -config :explorer, Explorer.ChainSpec.GenesisData, enabled: true, chain_spec_path: System.get_env("CHAIN_SPEC_PATH") +config :explorer, Explorer.ChainSpec.GenesisData, + enabled: true, + chain_spec_path: System.get_env("CHAIN_SPEC_PATH"), + emission_format: System.get_env("EMISSION_FORMAT", "DEFAULT"), + rewards_contract_address: System.get_env("REWARDS_CONTRACT_ADDRESS", "0xeca443e8e1ab29971a45a9c57a6a9875701698a5") config :explorer, Explorer.Chain.Cache.BlockNumber, enabled: true diff --git a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex index 6b560bf530..620acfb934 100644 --- a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex @@ -7,14 +7,17 @@ defmodule Explorer.ChainSpec.Parity.Importer do alias Explorer.Chain.Block.{EmissionReward, Range} alias Explorer.Chain.Hash.Address, as: AddressHash alias Explorer.Chain.Wei + alias Explorer.ChainSpec.GenesisData + alias Explorer.ChainSpec.POA.Importer, as: PoaEmissionImporter @max_block_number :infinity def import_emission_rewards(chain_spec) do - rewards = emission_rewards(chain_spec) - - {_, nil} = Repo.delete_all(EmissionReward) - {_, nil} = Repo.insert_all(EmissionReward, rewards) + if Application.get_env(:explorer, GenesisData)[:emission_format] == "POA" do + PoaEmissionImporter.import_emission_rewards() + else + import_rewards_from_chain_spec(chain_spec) + end end def import_genesis_coin_balances(chain_spec) do @@ -38,6 +41,13 @@ defmodule Explorer.ChainSpec.Parity.Importer do Chain.import(params) end + defp import_rewards_from_chain_spec(chain_spec) do + rewards = emission_rewards(chain_spec) + + {_, nil} = Repo.delete_all(EmissionReward) + {_, nil} = Repo.insert_all(EmissionReward, rewards) + end + def genesis_coin_balances(chain_spec) do accounts = chain_spec["accounts"] diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex index 45e18e6d1c..80d2c23696 100644 --- a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -8,7 +8,6 @@ defmodule Explorer.ChainSpec.POA.Importer do alias Explorer.SmartContract.Reader alias Explorer.Chain.Block.{EmissionReward, Range} - @reward_by_block_contract_address "0xeca443e8e1ab29971a45a9c57a6a9875701698a5" @block_reward_amount_abi %{ "type" => "function", "stateMutability" => "view", @@ -51,11 +50,15 @@ defmodule Explorer.ChainSpec.POA.Importer do end def block_reward_amount do - call_contract(@reward_by_block_contract_address, @block_reward_amount_abi, @block_reward_amount_params) + call_contract(rewards_contract_address(), @block_reward_amount_abi, @block_reward_amount_params) end def emission_funds_amount do - call_contract(@reward_by_block_contract_address, @emission_funds_amount_abi, @emission_funds_amount_params) + call_contract(rewards_contract_address(), @emission_funds_amount_abi, @emission_funds_amount_params) + end + + defp rewards_contract_address do + Application.get_env(:explorer, GenesisData)[:rewards_contract_address] end defp call_contract(address, abi, params) do From e76400aa5816b26a47b21ad92625d1b6d641e06a Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 15:14:03 +0300 Subject: [PATCH 017/109] add env vars --- docs/env-variables.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/env-variables.md b/docs/env-variables.md index 60c9eee442..83d0de41ab 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -54,6 +54,8 @@ $ export NETWORK=POA | `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | +| `EMISSION_FORMAT` | | Should be set to `POA` if you have block emission indentical to POA Network. This env var is used only if `CHAIN_SPEC_PATH` is set | `STANDARD` | master +| `REWARDS_CONTRACT_ADDRESS` | | Emission rewards contract address. This env var is used only if `EMISSION_FORMAT` is set to `POA` | `0xeca443e8e1ab29971a45a9c57a6a9875701698a5` | master | `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | From f3f72fdf6c9c54cd360ca4d2c3089c9dd8782ae2 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 15:24:20 +0300 Subject: [PATCH 018/109] fix POA Importer --- .../lib/explorer/chain_spec/poa/importer.ex | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex index 80d2c23696..154d904703 100644 --- a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -7,6 +7,7 @@ defmodule Explorer.ChainSpec.POA.Importer do alias Explorer.Repo alias Explorer.SmartContract.Reader alias Explorer.Chain.Block.{EmissionReward, Range} + alias Explorer.ChainSpec.GenesisData @block_reward_amount_abi %{ "type" => "function", @@ -34,16 +35,17 @@ defmodule Explorer.ChainSpec.POA.Importer do block_reward = block_reward_amount() emission_funds = emission_funds_amount() - rewards = [ - %{ - block_range: %Range{from: 0, to: @emission_funds_block_start}, - reward: %Wei{value: block_reward} - }, - %{ - block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, - reward: %Wei{value: Decimal.add(block_reward, emission_funds)} - } - ] + rewards = + [ + %{ + block_range: %Range{from: 0, to: @emission_funds_block_start}, + reward: %Wei{value: block_reward} + }, + %{ + block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, + reward: %Wei{value: Decimal.add(block_reward, emission_funds)} + } + ] {_, nil} = Repo.delete_all(EmissionReward) {_, nil} = Repo.insert_all(EmissionReward, rewards) From 7b174fad2ea767e46c81a3ab5091bc8644d648e6 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 15:25:56 +0300 Subject: [PATCH 019/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f006769dbf..167578e6a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2505](https://github.com/poanetwork/blockscout/pull/2505) - support POA Network emission rewards - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation From e51efc5e062c6c65b626718ea7943698fca4afca Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 19 Aug 2019 15:53:10 +0300 Subject: [PATCH 020/109] mix format --- .../lib/explorer/chain_spec/poa/importer.ex | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex index 154d904703..d731f08aa6 100644 --- a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -35,17 +35,16 @@ defmodule Explorer.ChainSpec.POA.Importer do block_reward = block_reward_amount() emission_funds = emission_funds_amount() - rewards = - [ - %{ - block_range: %Range{from: 0, to: @emission_funds_block_start}, - reward: %Wei{value: block_reward} - }, - %{ - block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, - reward: %Wei{value: Decimal.add(block_reward, emission_funds)} - } - ] + rewards = [ + %{ + block_range: %Range{from: 0, to: @emission_funds_block_start}, + reward: %Wei{value: block_reward} + }, + %{ + block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, + reward: %Wei{value: Decimal.add(block_reward, emission_funds)} + } + ] {_, nil} = Repo.delete_all(EmissionReward) {_, nil} = Repo.insert_all(EmissionReward, rewards) From 14f099b5b35b219873751e184d631bcf234c3a73 Mon Sep 17 00:00:00 2001 From: saneery Date: Mon, 19 Aug 2019 17:11:29 +0300 Subject: [PATCH 021/109] remove additional path in local url --- apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 895fad79c2..382a7b26b9 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 @@ -44,7 +44,7 @@ defmodule BlockScoutWeb.APIDocsView do "#{scheme}://#{host}#{path}" else port = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:http][:port] - "#{scheme}://#{host}:#{to_string(port)}#{path}" + "#{scheme}://#{host}:#{to_string(port)}" end end From f1c1e066a7803cd56305ad602fbeb5705c27e699 Mon Sep 17 00:00:00 2001 From: saneery Date: Tue, 20 Aug 2019 10:39:40 +0300 Subject: [PATCH 022/109] Add double quotes to copying string --- .../block_scout_web/templates/api_docs/_eth_rpc_item.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex index 57f96e42e0..f464533c7e 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex @@ -4,7 +4,7 @@

<%= @action %>

<%= raw @info.notes %>

curl -X POST --data '{"id":0,"jsonrpc":"2.0","method": "<%= @action %>", "params": []}' From c58723f641a63ae1e7eb6200a9c50e2e251131c9 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 20 Aug 2019 15:27:56 +0300 Subject: [PATCH 023/109] do not try to parse data if there is none --- .../lib/explorer/chain_spec/parity/importer.ex | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex index 620acfb934..8c3527d9e4 100644 --- a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex @@ -51,15 +51,23 @@ defmodule Explorer.ChainSpec.Parity.Importer do def genesis_coin_balances(chain_spec) do accounts = chain_spec["accounts"] - parse_accounts(accounts) + if accounts do + parse_accounts(accounts) + else + Logger.warn(fn -> "No accounts are defined in chain spec" end) + end end def emission_rewards(chain_spec) do rewards = chain_spec["engine"]["Ethash"]["params"]["blockReward"] - rewards - |> parse_hex_numbers() - |> format_ranges() + if rewards do + rewards + |> parse_hex_numbers() + |> format_ranges() + else + Logger.warn(fn -> "No rewards are defined in chain spec" end) + end end defp parse_accounts(accounts) do From c6b0a86c0b836ea558b85857fa43475d5366e391 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 20 Aug 2019 15:31:06 +0300 Subject: [PATCH 024/109] require logger --- apps/explorer/lib/explorer/chain_spec/poa/importer.ex | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex index d731f08aa6..00d54a3d74 100644 --- a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -3,6 +3,8 @@ defmodule Explorer.ChainSpec.POA.Importer do Imports emission reward range for POA chain. """ + require Logger + alias Explorer.Chain.Wei alias Explorer.Repo alias Explorer.SmartContract.Reader From 44ac58116ff458e2d431c9e308fd02aa68c48445 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 20 Aug 2019 15:36:25 +0300 Subject: [PATCH 025/109] add logger to poa rewards importer --- .../explorer/chain_spec/parity/importer.ex | 2 ++ .../lib/explorer/chain_spec/poa/importer.ex | 32 +++++++++++-------- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex index 8c3527d9e4..a1f620ec6c 100644 --- a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex @@ -3,6 +3,8 @@ defmodule Explorer.ChainSpec.Parity.Importer do Imports data from parity chain spec. """ + require Logger + alias Explorer.{Chain, Repo} alias Explorer.Chain.Block.{EmissionReward, Range} alias Explorer.Chain.Hash.Address, as: AddressHash diff --git a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex index 00d54a3d74..03935d85b2 100644 --- a/apps/explorer/lib/explorer/chain_spec/poa/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/poa/importer.ex @@ -34,22 +34,26 @@ defmodule Explorer.ChainSpec.POA.Importer do @emission_funds_block_start 5_098_087 def import_emission_rewards do - block_reward = block_reward_amount() - emission_funds = emission_funds_amount() + if is_nil(rewards_contract_address()) do + Logger.warn(fn -> "No rewards contract address is defined" end) + else + block_reward = block_reward_amount() + emission_funds = emission_funds_amount() - rewards = [ - %{ - block_range: %Range{from: 0, to: @emission_funds_block_start}, - reward: %Wei{value: block_reward} - }, - %{ - block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, - reward: %Wei{value: Decimal.add(block_reward, emission_funds)} - } - ] + rewards = [ + %{ + block_range: %Range{from: 0, to: @emission_funds_block_start}, + reward: %Wei{value: block_reward} + }, + %{ + block_range: %Range{from: @emission_funds_block_start + 1, to: :infinity}, + reward: %Wei{value: Decimal.add(block_reward, emission_funds)} + } + ] - {_, nil} = Repo.delete_all(EmissionReward) - {_, nil} = Repo.insert_all(EmissionReward, rewards) + {_, nil} = Repo.delete_all(EmissionReward) + {_, nil} = Repo.insert_all(EmissionReward, rewards) + end end def block_reward_amount do From 0a647d0acbe3cfcb8b575cf92d420f6ae3268582 Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 21 Aug 2019 12:06:20 +0300 Subject: [PATCH 026/109] Remove schema from api url --- apps/block_scout_web/assets/js/lib/try_api.js | 6 +++++- apps/block_scout_web/assets/js/lib/try_eth_api.js | 6 +++++- .../lib/block_scout_web/views/api_docs_view.ex | 5 ++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/apps/block_scout_web/assets/js/lib/try_api.js b/apps/block_scout_web/assets/js/lib/try_api.js index e6460f6c6b..02d82a65ef 100644 --- a/apps/block_scout_web/assets/js/lib/try_api.js +++ b/apps/block_scout_web/assets/js/lib/try_api.js @@ -55,6 +55,10 @@ function handleSuccess (query, xhr, clickedButton) { clickedButton.prop('disabled', false) } +function dropDomain (url) { + return url.split('/').slice(1).join('/') +} + // Show 'Try it out' UI for a module/action. $('button[data-selector*="btn-try-api"]').click(event => { const clickedButton = $(event.target) @@ -124,7 +128,7 @@ $('button[data-try-api-ui-button-type="execute"]').click(event => { } $.ajax({ - url: composeRequestUrl(query), + url: '/' + dropDomain(composeRequestUrl(query)), success: (_data, _status, xhr) => { handleSuccess(query, xhr, clickedButton) }, diff --git a/apps/block_scout_web/assets/js/lib/try_eth_api.js b/apps/block_scout_web/assets/js/lib/try_eth_api.js index f6e1adffae..464229885d 100644 --- a/apps/block_scout_web/assets/js/lib/try_eth_api.js +++ b/apps/block_scout_web/assets/js/lib/try_eth_api.js @@ -43,6 +43,10 @@ function parseInput (input) { } } +function dropDomain (url) { + return url.split('/').slice(1).join('/') +} + $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { const clickedButton = $(event.target) const module = clickedButton.attr('data-module') @@ -62,7 +66,7 @@ $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { const url = $('[data-endpoint-url]').attr('data-endpoint-url') $.ajax({ - url: url, + url: '/' + dropDomain(url), type: 'POST', data: JSON.stringify(formData), dataType: 'json', 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 382a7b26b9..6f731d3627 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 @@ -38,13 +38,12 @@ defmodule BlockScoutWeb.APIDocsView do url_params = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:url] host = url_params[:host] path = url_params[:path] - scheme = url_params[:scheme] if host != "localhost" do - "#{scheme}://#{host}#{path}" + "#{host}#{path}" else port = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:http][:port] - "#{scheme}://#{host}:#{to_string(port)}" + "#{host}:#{to_string(port)}" end end From 0da2afb1caafac30fa3d1ac21c6fff61f9f10975 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 21 Aug 2019 12:15:04 +0300 Subject: [PATCH 027/109] use CoinGecko instead of CoinMarketcap for exchange rates CoinMarketcap deprecated and took offline its v1 API. They have v2 API which has free plan and requires API keys. But as part of https://github.com/poanetwork/blockscout/issues/234 we alresy implemented fetching from CoinGecko. Now, coin id should be set for CoinGecko for the required coin. ``` config :explorer, Explorer.ExchangeRates.Source.CoinGecko, coin_id: System.get_env("COIN_GECKO_ID", "poa-network") ``` Or the `COIN_GECKO_ID` env var should be set. For example, COIN_GECKO_ID=poa-network --- apps/explorer/config/config.exs | 2 + apps/explorer/lib/explorer/chain.ex | 2 +- .../{coin_market_cap.ex => exchange_rate.ex} | 4 +- .../lib/explorer/exchange_rates/source.ex | 2 +- .../exchange_rates/source/coin_gecko.ex | 38 +++++++++++-------- 5 files changed, 28 insertions(+), 20 deletions(-) rename apps/explorer/lib/explorer/chain/supply/{coin_market_cap.ex => exchange_rate.ex} (72%) diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 95c80ba445..87b57d5f82 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -34,6 +34,8 @@ config :explorer, Explorer.Chain.Cache.BlockNumber, enabled: true config :explorer, Explorer.ExchangeRates.Source.CoinMarketCap, pages: String.to_integer(System.get_env("COINMARKETCAP_PAGES") || "10") +config :explorer, Explorer.ExchangeRates.Source.CoinGecko, coin_id: System.get_env("COIN_GECKO_ID", "poa-network") + balances_update_interval = if System.get_env("ADDRESS_WITH_BALANCES_UPDATE_INTERVAL") do case Integer.parse(System.get_env("ADDRESS_WITH_BALANCES_UPDATE_INTERVAL")) do diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index 58253c0f27..90df61749c 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -2717,7 +2717,7 @@ defmodule Explorer.Chain do end defp supply_module do - Application.get_env(:explorer, :supply, Explorer.Chain.Supply.CoinMarketCap) + Application.get_env(:explorer, :supply, Explorer.Chain.Supply.ExchangeRate) end @doc """ diff --git a/apps/explorer/lib/explorer/chain/supply/coin_market_cap.ex b/apps/explorer/lib/explorer/chain/supply/exchange_rate.ex similarity index 72% rename from apps/explorer/lib/explorer/chain/supply/coin_market_cap.ex rename to apps/explorer/lib/explorer/chain/supply/exchange_rate.ex index ebaadb3c47..d45a8edc02 100644 --- a/apps/explorer/lib/explorer/chain/supply/coin_market_cap.ex +++ b/apps/explorer/lib/explorer/chain/supply/exchange_rate.ex @@ -1,6 +1,6 @@ -defmodule Explorer.Chain.Supply.CoinMarketCap do +defmodule Explorer.Chain.Supply.ExchangeRate do @moduledoc """ - Defines the supply API for calculating supply for coins from coinmarketcap. + Defines the supply API for calculating supply for coins from exchange_rate.. """ use Explorer.Chain.Supply diff --git a/apps/explorer/lib/explorer/exchange_rates/source.ex b/apps/explorer/lib/explorer/exchange_rates/source.ex index 41b87c1e29..d733b22222 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source.ex @@ -83,7 +83,7 @@ defmodule Explorer.ExchangeRates.Source do @spec exchange_rates_source() :: module() defp exchange_rates_source do - config(:source) || Explorer.ExchangeRates.Source.CoinMarketCap + config(:source) || Explorer.ExchangeRates.Source.CoinGecko end @spec config(atom()) :: term diff --git a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex index 4e59537bf6..f12eaca844 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex @@ -15,39 +15,45 @@ defmodule Explorer.ExchangeRates.Source.CoinGecko do {:ok, price} = get_btc_price() btc_price = to_decimal(price) - for item <- decode_json(data), - not is_nil(item["total_supply"]) and not is_nil(item["current_price"]) do - {:ok, last_updated, 0} = DateTime.from_iso8601(item["last_updated"]) + json_data = decode_json(data) - current_price = to_decimal(item["current_price"]) + market_data = json_data["market_data"] + {:ok, last_updated, 0} = DateTime.from_iso8601(market_data["last_updated"]) - id = item["id"] - btc_value = if id != "btc", do: Decimal.div(current_price, btc_price), else: 1 + current_price = to_decimal(market_data["current_price"]["usd"]) + id = json_data["id"] + btc_value = if id != "btc", do: Decimal.div(current_price, btc_price), else: 1 + + [ %Token{ - available_supply: to_decimal(item["total_supply"]), - total_supply: to_decimal(item["total_supply"]), + available_supply: to_decimal(market_data["circulating_supply"]), + total_supply: to_decimal(market_data["total_supply"]), btc_value: btc_value, - id: id, + id: json_data["id"], last_updated: last_updated, - market_cap_usd: to_decimal(item["market_cap"]), - name: item["name"], - symbol: item["symbol"], + market_cap_usd: to_decimal(market_data["market_cap"]["usd"]), + name: json_data["name"], + symbol: String.upcase(json_data["symbol"]), usd_value: current_price, - volume_24h_usd: to_decimal(item["total_volume"]) + volume_24h_usd: to_decimal(market_data["total_volume"]["usd"]) } - end + ] end @impl Source - def source_url(currency \\ "usd") do - "#{base_url()}/coins/markets?vs_currency=#{currency}" + def source_url do + "#{base_url()}/coins/#{coin_id()}" end defp base_url do config(:base_url) || "https://api.coingecko.com/api/v3" end + defp coin_id do + Application.get_env(:explorer, __MODULE__)[:coin_id] + end + defp get_btc_price(currency \\ "usd") do url = "#{base_url()}/exchange_rates" From 6990cac077063258515be73e2867314a11a1dbd9 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 21 Aug 2019 12:24:54 +0300 Subject: [PATCH 028/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a49616a0a5..d54e46cc71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates - [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css - [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload - [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter From 8bae16459a7db6482bb8df42279248eb9a7546b5 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 21 Aug 2019 12:28:05 +0300 Subject: [PATCH 029/109] add entry to env vars file --- docs/env-variables.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/env-variables.md b/docs/env-variables.md index 60c9eee442..5ede197596 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -53,6 +53,7 @@ $ export NETWORK=POA | `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | | `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | +| `COIN_GECKO_ID` | | CoinGecko coin id required for fetching an exchange rate | poa-network | master | | `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | | `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | From 1ddbbb4b4063090a4df352bf0a7459dc1cc758db Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 21 Aug 2019 12:41:24 +0300 Subject: [PATCH 030/109] fix tests --- .../block_scout_web/views/api_docs_view_test.exs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 7583aeaa4f..69be27ef09 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 @@ -17,7 +17,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/"] ) - assert APIDocsView.blockscout_url() == "https://blockscout.com/" + assert APIDocsView.blockscout_url() == "blockscout.com/" end test "returns url with scheme and host with path" do @@ -25,7 +25,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"] ) - assert APIDocsView.blockscout_url() == "https://blockscout.com/chain/dog" + assert APIDocsView.blockscout_url() == "blockscout.com/chain/dog" end end @@ -43,7 +43,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"] ) - assert APIDocsView.api_url() == "https://blockscout.com/chain/dog/api" + assert APIDocsView.api_url() == "blockscout.com/chain/dog/api" end test "does not add slash to empty path" do @@ -51,7 +51,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] ) - assert APIDocsView.api_url() == "https://blockscout.com/api" + assert APIDocsView.api_url() == "blockscout.com/api" end end @@ -69,7 +69,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do 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" + assert APIDocsView.eth_rpc_api_url() == "blockscout.com/chain/dog/api/eth_rpc" end test "does not add slash to empty path" do @@ -77,7 +77,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] ) - assert APIDocsView.eth_rpc_api_url() == "https://blockscout.com/api/eth_rpc" + assert APIDocsView.eth_rpc_api_url() == "blockscout.com/api/eth_rpc" end end end From c563ee363802bebc17672f13c96a9adaeaa49b89 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 21 Aug 2019 13:28:44 +0300 Subject: [PATCH 031/109] fix CoinGecko tests --- .../exchange_rates/source/coin_gecko.ex | 5 +- .../exchange_rates/source/coin_gecko_test.exs | 57 +++++-------------- 2 files changed, 18 insertions(+), 44 deletions(-) diff --git a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex index f12eaca844..5b0bed2b3b 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex @@ -11,7 +11,7 @@ defmodule Explorer.ExchangeRates.Source.CoinGecko do @behaviour Source @impl Source - def format_data(data) do + def format_data(%{"market_data" => _} = data) do {:ok, price} = get_btc_price() btc_price = to_decimal(price) @@ -41,6 +41,9 @@ defmodule Explorer.ExchangeRates.Source.CoinGecko do ] end + @impl Source + def format_data(_), do: [] + @impl Source def source_url do "#{base_url()}/coins/#{coin_id()}" diff --git a/apps/explorer/test/explorer/exchange_rates/source/coin_gecko_test.exs b/apps/explorer/test/explorer/exchange_rates/source/coin_gecko_test.exs index 3c2a9b6feb..b4b3313d6c 100644 --- a/apps/explorer/test/explorer/exchange_rates/source/coin_gecko_test.exs +++ b/apps/explorer/test/explorer/exchange_rates/source/coin_gecko_test.exs @@ -18,34 +18,6 @@ defmodule Explorer.ExchangeRates.Source.CoinGeckoTest do } """ - @json_mkt_data """ - [ - { - "id": "poa-network", - "symbol": "poa", - "name": "POA Network", - "image": "https://assets.coingecko.com/coins/images/3157/large/poa.jpg?1520829019", - "current_price": 0.114782883773693, - "market_cap": 25248999.6735956, - "market_cap_rank": 185, - "total_volume": 2344442.13578437, - "high_24h": 0.115215129840519, - "low_24h": 0.101039753612939, - "price_change_24h": 0.0135970966607094, - "price_change_percentage_24h": 13.437753511298, - "market_cap_change_24h": 3058195.58191147, - "market_cap_change_percentage_24h": 13.7813644304017, - "circulating_supply": "219935174.0", - "total_supply": 252193195, - "ath": 0.935923393359191, - "ath_change_percentage": -87.731057963078, - "ath_date": "2018-05-10T09:45:31.809Z", - "roi": null, - "last_updated": "2018-10-23T01:25:31.764Z" - } - ] - """ - describe "format_data/1" do setup do bypass = Bypass.open() @@ -59,31 +31,30 @@ defmodule Explorer.ExchangeRates.Source.CoinGeckoTest do Conn.resp(conn, 200, @json_btc_price) end) - {:ok, expected_date, 0} = "2018-10-23T01:25:31.764Z" |> DateTime.from_iso8601() + json_data = + "#{File.cwd!()}/test/support/fixture/exchange_rates/coin_gecko.json" + |> File.read!() + |> Jason.decode!() expected = [ %Token{ - available_supply: Decimal.new("252193195"), - total_supply: Decimal.new("252193195"), - btc_value: Decimal.new("0.00001753101509231471092879666458"), + available_supply: Decimal.new("220167621.0"), + total_supply: Decimal.new("252193195.0"), + btc_value: Decimal.new("0.000002055310963802830367634997491"), id: "poa-network", - last_updated: expected_date, - market_cap_usd: Decimal.new("25248999.6735956"), + last_updated: ~U[2019-08-21 08:36:49.371Z], + market_cap_usd: Decimal.new("2962791"), name: "POA Network", - symbol: "poa", - usd_value: Decimal.new("0.114782883773693"), - volume_24h_usd: Decimal.new("2344442.13578437") + symbol: "POA", + usd_value: Decimal.new("0.01345698"), + volume_24h_usd: Decimal.new("119946") } ] - assert expected == CoinGecko.format_data(@json_mkt_data) + assert expected == CoinGecko.format_data(json_data) end - test "returns nothing when given bad data", %{bypass: bypass} do - Bypass.expect(bypass, "GET", "/exchange_rates", fn conn -> - Conn.resp(conn, 200, @json_btc_price) - end) - + test "returns nothing when given bad data" do bad_data = """ [{"id": "poa-network"}] """ From 61c65de470ee6dc6907613b19e24a7ce733ebe5d Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 21 Aug 2019 13:29:12 +0300 Subject: [PATCH 032/109] add example CoinGecko response --- .../fixture/exchange_rates/coin_gecko.json | 1806 +++++++++++++++++ 1 file changed, 1806 insertions(+) create mode 100644 apps/explorer/test/support/fixture/exchange_rates/coin_gecko.json diff --git a/apps/explorer/test/support/fixture/exchange_rates/coin_gecko.json b/apps/explorer/test/support/fixture/exchange_rates/coin_gecko.json new file mode 100644 index 0000000000..cc110eb402 --- /dev/null +++ b/apps/explorer/test/support/fixture/exchange_rates/coin_gecko.json @@ -0,0 +1,1806 @@ +{ + "asset_platform_id": null, + "block_time_in_minutes": 0, + "categories": [], + "coingecko_rank": 376, + "coingecko_score": 33.7, + "community_data": { + "facebook_likes": 0, + "reddit_accounts_active_48h": 0, + "reddit_average_comments_48h": 0.0, + "reddit_average_posts_48h": 0.0, + "reddit_subscribers": 0, + "telegram_channel_user_count": 5125, + "twitter_followers": 17737 + }, + "community_score": 9.403, + "country_origin": "", + "description": { + "ar": "", + "de": "", + "en": "", + "es": "", + "fr": "", + "hu": "", + "id": "", + "it": "", + "ja": "", + "ko": "", + "nl": "", + "pl": "", + "pt": "", + "ro": "", + "ru": "", + "sv": "", + "th": "", + "tr": "", + "vi": "", + "zh": "", + "zh-tw": "" + }, + "developer_data": { + "closed_issues": 0, + "code_additions_deletions_4_weeks": { + "additions": 0, + "deletions": 0 + }, + "commit_count_4_weeks": 0, + "forks": 44, + "last_4_weeks_commit_activity_series": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + "pull_request_contributors": 6, + "pull_requests_merged": 133, + "stars": 58, + "subscribers": 8, + "total_issues": 0 + }, + "developer_score": 52.776, + "genesis_date": null, + "id": "poa-network", + "image": { + "large": "https://assets.coingecko.com/coins/images/3157/large/poa-network.png?1548331565", + "small": "https://assets.coingecko.com/coins/images/3157/small/poa-network.png?1548331565", + "thumb": "https://assets.coingecko.com/coins/images/3157/thumb/poa-network.png?1548331565" + }, + "last_updated": "2019-08-21T08:36:49.371Z", + "links": { + "announcement_url": [ + "", + "" + ], + "bitcointalk_thread_identifier": null, + "blockchain_site": [ + "https://blockscout.com/poa/core/", + "", + "", + "", + "" + ], + "chat_url": [ + "", + "", + "" + ], + "facebook_username": "", + "homepage": [ + "https://poa.network/", + "", + "" + ], + "official_forum_url": [ + "", + "", + "" + ], + "repos_url": { + "bitbucket": [], + "github": [ + "https://github.com/poanetwork/poa-network-consensus-contracts" + ] + }, + "subreddit_url": null, + "telegram_channel_identifier": "oraclesnetwork", + "twitter_screen_name": "poanetwork" + }, + "liquidity_score": 19.334, + "localization": { + "ar": "POA Network", + "de": "POA Network", + "en": "POA Network", + "es": "POA Network", + "fr": "POA Network", + "hu": "POA Network", + "id": "POA Network", + "it": "POA Network", + "ja": "ポアネットワーク", + "ko": "POA 네트워크", + "nl": "POA Network", + "pl": "POA Network", + "pt": "POA Network", + "ro": "POA Network", + "ru": "POA Network", + "sv": "POA Network", + "th": "POA Network", + "tr": "POA Network", + "vi": "POA Network", + "zh": "POA Network", + "zh-tw": "POA Network" + }, + "market_cap_rank": 499, + "market_data": { + "ath": { + "aed": 3.06, + "ars": 18.93, + "aud": 1.25, + "bch": 0.00076772, + "bdt": 70.74, + "bhd": 0.314495, + "bmd": 0.833914, + "bnb": 0.01322268, + "brl": 3.36, + "btc": 0.00010137, + "cad": 1.2, + "chf": 0.938803, + "clp": 519.58, + "cny": 5.94, + "czk": 17.83, + "dkk": 5.87, + "eos": 0.02444974, + "eth": 0.0011725, + "eur": 0.787803, + "gbp": 0.689151, + "hkd": 7.35, + "huf": 219.96, + "idr": 13179.33, + "ils": 2.97, + "inr": 62.94, + "jpy": 102.6, + "krw": 1000.83, + "kwd": 0.251571, + "lkr": 131.79, + "ltc": 0.00537407, + "mmk": 1125.41, + "mxn": 18.15, + "myr": 3.76, + "nok": 6.67, + "nzd": 1.35, + "php": 48.59, + "pkr": 96.55, + "pln": 3.34, + "rub": 58.27, + "sar": 3.13, + "sek": 8.13, + "sgd": 1.25, + "thb": 26.65, + "try": 3.54, + "twd": 27.89, + "uah": 1.44, + "usd": 0.935923, + "vef": 58307, + "vnd": 1281.67, + "xag": 0.056398, + "xau": 0.00071129, + "xdr": 0.656022, + "xlm": 0.58965135, + "xrp": 0.2920468, + "zar": 11.63 + }, + "ath_change_percentage": { + "aed": -98.3819, + "ars": -96.09901, + "aud": -98.40941, + "bch": -94.11046, + "bdt": -98.39058, + "bhd": -98.38261, + "bmd": -98.38194, + "bnb": -96.24179, + "brl": -98.37442, + "btc": -98.68937, + "cad": -98.49893, + "chf": -98.59269, + "clp": -98.15517, + "cny": -98.39701, + "czk": -98.2406, + "dkk": -98.45473, + "eos": -84.56025, + "eth": -93.8673, + "eur": -98.45627, + "gbp": -98.38711, + "hkd": -98.55948, + "huf": -98.18974, + "idr": -98.54127, + "ils": -98.39903, + "inr": -98.46908, + "jpy": -98.59899, + "krw": -98.37868, + "kwd": -98.3684, + "lkr": -98.16735, + "ltc": -96.51103, + "mmk": -98.17585, + "mxn": -98.53298, + "myr": -98.49907, + "nok": -98.18519, + "nzd": -98.43938, + "php": -98.54716, + "pkr": -97.76349, + "pln": -98.41583, + "rub": -98.4658, + "sar": -98.3821, + "sek": -98.39542, + "sgd": -98.51152, + "thb": -98.44172, + "try": -97.81784, + "twd": -98.48322, + "uah": -76.52065, + "usd": -98.5583, + "vef": -94.2496, + "vnd": -75.59837, + "xag": -98.59644, + "xau": -98.73411, + "xdr": -98.49988, + "xlm": -66.24383, + "xrp": -82.56607, + "zar": -98.23009 + }, + "ath_date": { + "aed": "2018-05-10T00:00:00.000Z", + "ars": "2018-05-10T00:00:00.000Z", + "aud": "2018-05-10T09:45:31.809Z", + "bch": "2018-04-14T00:00:00.000Z", + "bdt": "2018-05-10T00:00:00.000Z", + "bhd": "2018-05-10T00:00:00.000Z", + "bmd": "2018-05-10T00:00:00.000Z", + "bnb": "2018-10-16T12:40:17.749Z", + "brl": "2018-05-10T09:45:31.809Z", + "btc": "2018-05-10T09:45:31.809Z", + "cad": "2018-05-10T09:45:31.809Z", + "chf": "2018-05-10T09:45:31.809Z", + "clp": "2018-05-10T00:00:00.000Z", + "cny": "2018-05-10T09:45:31.809Z", + "czk": "2018-05-10T00:00:00.000Z", + "dkk": "2018-05-10T09:45:31.809Z", + "eos": "2018-10-16T12:40:17.749Z", + "eth": "2018-04-09T00:00:00.000Z", + "eur": "2018-05-10T09:45:31.809Z", + "gbp": "2018-05-10T09:45:31.809Z", + "hkd": "2018-05-10T09:45:31.809Z", + "huf": "2018-05-10T00:00:00.000Z", + "idr": "2018-05-10T09:45:31.809Z", + "ils": "2018-05-10T00:00:00.000Z", + "inr": "2018-05-10T09:45:31.809Z", + "jpy": "2018-05-10T09:45:31.809Z", + "krw": "2018-05-10T09:45:31.809Z", + "kwd": "2018-05-10T00:00:00.000Z", + "lkr": "2018-05-10T00:00:00.000Z", + "ltc": "2018-05-10T00:00:00.000Z", + "mmk": "2018-05-10T00:00:00.000Z", + "mxn": "2018-05-10T09:45:31.809Z", + "myr": "2018-05-10T09:45:31.809Z", + "nok": "2018-05-10T00:00:00.000Z", + "nzd": "2018-05-10T09:45:31.809Z", + "php": "2018-05-10T09:45:31.809Z", + "pkr": "2018-05-10T00:00:00.000Z", + "pln": "2018-05-10T09:45:31.809Z", + "rub": "2018-05-10T09:45:31.809Z", + "sar": "2018-05-10T00:00:00.000Z", + "sek": "2018-05-10T09:45:31.809Z", + "sgd": "2018-05-10T09:45:31.809Z", + "thb": "2018-05-10T00:00:00.000Z", + "try": "2018-05-10T00:00:00.000Z", + "twd": "2018-05-10T09:45:31.809Z", + "uah": "2019-05-27T12:49:29.532Z", + "usd": "2018-05-10T09:45:31.809Z", + "vef": "2018-05-10T00:00:00.000Z", + "vnd": "2019-05-27T12:49:29.532Z", + "xag": "2018-05-10T09:45:31.809Z", + "xau": "2018-05-10T09:45:31.809Z", + "xdr": "2018-05-10T09:45:31.809Z", + "xlm": "2018-10-16T12:49:26.379Z", + "xrp": "2018-10-16T12:40:17.749Z", + "zar": "2018-05-10T09:45:31.809Z" + }, + "circulating_supply": 220167621.0, + "current_price": { + "aed": 0.04942712, + "ars": 0.73641, + "aud": 0.0198328, + "bch": 4.486e-05, + "bdt": 1.14, + "bhd": 0.00507448, + "bmd": 0.01345698, + "bnb": 0.00049505, + "brl": 0.054544, + "btc": 1.32e-06, + "cad": 0.0178991, + "chf": 0.01317061, + "clp": 9.55, + "cny": 0.095047, + "czk": 0.312629, + "dkk": 0.090366, + "eos": 0.0037559, + "eth": 7.147e-05, + "eur": 0.01211961, + "gbp": 0.01107566, + "hkd": 0.105541, + "huf": 3.97, + "idr": 191.75, + "ils": 0.04745883, + "inr": 0.960893, + "jpy": 1.43, + "krw": 16.19, + "kwd": 0.00409361, + "lkr": 2.4, + "ltc": 0.00018598, + "mmk": 20.47, + "mxn": 0.26536, + "myr": 0.056211, + "nok": 0.120606, + "nzd": 0.02100918, + "php": 0.704042, + "pkr": 2.15, + "pln": 0.052749, + "rub": 0.891153, + "sar": 0.050476, + "sek": 0.129909, + "sgd": 0.01861909, + "thb": 0.414071, + "try": 0.076819, + "twd": 0.422042, + "uah": 0.338308, + "usd": 0.01345698, + "vef": 3343.89, + "vnd": 311.66, + "xag": 0.00078867, + "xau": 8.98e-06, + "xdr": 0.00981471, + "xlm": 0.1975895, + "xrp": 0.05067322, + "zar": 0.204922 + }, + "high_24h": { + "aed": 0.053611, + "ars": 0.810805, + "aud": 0.02152674, + "bch": 4.628e-05, + "bdt": 1.23, + "bhd": 0.00550347, + "bmd": 0.0145949, + "bnb": 0.00052215, + "brl": 0.058875, + "btc": 1.37e-06, + "cad": 0.01943935, + "chf": 0.01428979, + "clp": 10.36, + "cny": 0.103044, + "czk": 0.339287, + "dkk": 0.098076, + "eos": 0.00402026, + "eth": 7.423e-05, + "eur": 0.01315448, + "gbp": 0.01201087, + "hkd": 0.114474, + "huf": 4.31, + "idr": 208.11, + "ils": 0.051491, + "inr": 1.04, + "jpy": 1.55, + "krw": 17.63, + "kwd": 0.00443977, + "lkr": 2.6, + "ltc": 0.00019631, + "mmk": 22.24, + "mxn": 0.288202, + "myr": 0.061014, + "nok": 0.131376, + "nzd": 0.02274396, + "php": 0.76332, + "pkr": 2.34, + "pln": 0.057291, + "rub": 0.972261, + "sar": 0.054726, + "sek": 0.14165, + "sgd": 0.02021141, + "thb": 0.449117, + "try": 0.083602, + "twd": 0.457778, + "uah": 0.367456, + "usd": 0.0145949, + "vef": 3626.65, + "vnd": 338.27, + "xag": 0.00085369, + "xau": 9.72e-06, + "xdr": 0.01064365, + "xlm": 0.20827298, + "xrp": 0.05318558, + "zar": 0.223696 + }, + "last_updated": "2019-08-21T08:36:49.371Z", + "low_24h": { + "aed": 0.0491677, + "ars": 0.732555, + "aud": 0.0197477, + "bch": 4.364e-05, + "bdt": 1.13, + "bhd": 0.00504693, + "bmd": 0.01338635, + "bnb": 0.00049273, + "brl": 0.054256, + "btc": 1.3e-06, + "cad": 0.01782004, + "chf": 0.01311131, + "clp": 9.51, + "cny": 0.094517, + "czk": 0.311235, + "dkk": 0.089982, + "eos": 0.00373147, + "eth": 7.098e-05, + "eur": 0.01206786, + "gbp": 0.01103078, + "hkd": 0.104993, + "huf": 3.95, + "idr": 190.79, + "ils": 0.04723279, + "inr": 0.958004, + "jpy": 1.43, + "krw": 16.1, + "kwd": 0.00406945, + "lkr": 2.39, + "ltc": 0.00018228, + "mmk": 20.37, + "mxn": 0.264134, + "myr": 0.055903, + "nok": 0.120189, + "nzd": 0.02091282, + "php": 0.700581, + "pkr": 2.14, + "pln": 0.052569, + "rub": 0.886879, + "sar": 0.050214, + "sek": 0.129578, + "sgd": 0.01853166, + "thb": 0.412199, + "try": 0.076627, + "twd": 0.4198, + "uah": 0.336532, + "usd": 0.01338635, + "vef": 3326.34, + "vnd": 310.32, + "xag": 0.00078625, + "xau": 8.93e-06, + "xdr": 0.0097632, + "xlm": 0.19635382, + "xrp": 0.05037993, + "zar": 0.204544 + }, + "market_cap": { + "aed": 10882251, + "ars": 162133701, + "aud": 4366541, + "bch": 9877, + "bdt": 249997342, + "bhd": 1117236, + "bmd": 2962791, + "bnb": 108994, + "brl": 12008719, + "btc": 290.732, + "cad": 3940802, + "chf": 2899743, + "clp": 2101619696, + "cny": 20926193, + "czk": 68830802, + "dkk": 19895675, + "eos": 826927, + "eth": 15736, + "eur": 2668346, + "gbp": 2438501, + "hkd": 23236814, + "huf": 873552757, + "idr": 42217105275, + "ils": 10448899, + "inr": 211557455, + "jpy": 315583737, + "krw": 3564593111, + "kwd": 901281, + "lkr": 529480380, + "ltc": 40948, + "mmk": 4507718929, + "mxn": 58423768, + "myr": 12375904, + "nok": 26553448, + "nzd": 4625542, + "php": 155007300, + "pkr": 474133000, + "pln": 11613646, + "rub": 196202962, + "sar": 11113192, + "sek": 28601664, + "sgd": 4099321, + "thb": 91165079, + "try": 16912998, + "twd": 92920077, + "uah": 74484427, + "usd": 2962791, + "vef": 736216950688, + "vnd": 68617204931, + "xag": 173639, + "xau": 1976.89, + "xdr": 2160882, + "xlm": 43502811, + "xrp": 11156602, + "zar": 45117091 + }, + "market_cap_change_24h": -160615.84039035, + "market_cap_change_24h_in_currency": { + "aed": -590899.65443375, + "ars": -9124373.5980551, + "aud": -239353.78003874, + "bch": 102.549, + "bdt": -13867874.4362154, + "bhd": -60251.00254582, + "bmd": -160615.84039035, + "bnb": -1507.543569741, + "brl": -718070.38245432, + "btc": 0.03769596, + "cad": -221121.61427417, + "chf": -161095.94704691, + "clp": -127118490.79824165, + "cny": -1134429.68067712, + "czk": -3925858.7665586, + "dkk": -1136450.3780936, + "eos": -24548.1071608166, + "eth": -56.533938946, + "eur": -152193.5816755, + "gbp": -144996.42715597, + "hkd": -1263688.72303977, + "huf": -48860628.81047357, + "idr": -2346101857.217293, + "ils": -576162.08791993, + "inr": -12451722.53525829, + "jpy": -16857632.06248754, + "krw": -209731718.0214291, + "kwd": -49171.67933105, + "lkr": -26048761.01962376, + "ltc": -309.0831858893, + "mmk": -251710124.48363495, + "mxn": -3503488.89323037, + "myr": -687829.52792143, + "nok": -1513569.75537506, + "nzd": -244980.03753899, + "php": -8388263.35503852, + "pkr": -26642819.2931419, + "pln": -696325.10549893, + "rub": -12221976.62125358, + "sar": -601457.67784725, + "sek": -1668070.90346983, + "sgd": -230174.18438848, + "thb": -5107689.97148955, + "try": -927927.24538566, + "twd": -5107834.82635887, + "uah": -4241989.31565817, + "usd": -160615.84039035, + "vef": -39911051485.156494, + "vnd": -4088394297.5983276, + "xag": -9606.58322042, + "xau": -102.32803274, + "xdr": -115659.93877989, + "xlm": -1276957.0373063833, + "xrp": -122973.5124849025, + "zar": -2969034.78716005 + }, + "market_cap_change_percentage_24h": -5.14233, + "market_cap_change_percentage_24h_in_currency": { + "aed": -5.15028, + "ars": -5.32785, + "aud": -5.19668, + "bch": 1.0491, + "bdt": -5.25567, + "bhd": -5.11691, + "bmd": -5.14233, + "bnb": -1.36428, + "brl": -5.6422, + "btc": 0.01297, + "cad": -5.31297, + "chf": -5.26313, + "clp": -5.70361, + "cny": -5.14233, + "czk": -5.39588, + "dkk": -5.4034, + "eos": -2.88301, + "eth": -0.35797, + "eur": -5.3959, + "gbp": -5.61241, + "hkd": -5.15781, + "huf": -5.29704, + "idr": -5.26466, + "ils": -5.22593, + "inr": -5.55858, + "jpy": -5.07086, + "krw": -5.5568, + "kwd": -5.1735, + "lkr": -4.689, + "ltc": -0.74917, + "mmk": -5.28866, + "mxn": -5.65743, + "myr": -5.26518, + "nok": -5.3927, + "nzd": -5.02985, + "php": -5.13372, + "pkr": -5.32031, + "pln": -5.65659, + "rub": -5.86397, + "sar": -5.13424, + "sek": -5.51069, + "sgd": -5.31642, + "thb": -5.30544, + "try": -5.20112, + "twd": -5.21059, + "uah": -5.38827, + "usd": -5.14233, + "vef": -5.14233, + "vnd": -5.62322, + "xag": -5.24248, + "xau": -4.92146, + "xdr": -5.08051, + "xlm": -2.85164, + "xrp": -1.09023, + "zar": -6.17441 + }, + "market_cap_rank": 499, + "price_change_24h": -0.00070501, + "price_change_24h_in_currency": { + "aed": -0.00259384, + "ars": -0.0401764, + "aud": -0.00106049, + "bch": 4.401e-07, + "bdt": -0.06091731, + "bhd": -0.00026442, + "bmd": -0.00070501, + "bnb": -7.9537e-06, + "brl": -0.00316161, + "btc": -7e-10, + "cad": -0.000975, + "chf": -0.00070391, + "clp": -0.55975334, + "cny": -0.00498938, + "czk": -0.01720638, + "dkk": -0.00497873, + "eos": -0.0001041039, + "eth": -1.756e-07, + "eur": -0.00066664, + "gbp": -0.00063744, + "hkd": -0.00554812, + "huf": -0.21652693, + "idr": -10.32117361, + "ils": -0.00254123, + "inr": -0.05433204, + "jpy": -0.07396812, + "krw": -0.92440016, + "kwd": -0.00021588, + "lkr": -0.11324611, + "ltc": -1.1432e-06, + "mmk": -1.10591975, + "mxn": -0.01564173, + "myr": -0.00303114, + "nok": -0.0066618, + "nzd": -0.00108422, + "php": -0.03666507, + "pkr": -0.11708205, + "pln": -0.0030605, + "rub": -0.05396307, + "sar": -0.00263569, + "sek": -0.00737328, + "sgd": -0.00101489, + "thb": -0.02240118, + "try": -0.00415931, + "twd": -0.02243055, + "uah": -0.01864934, + "usd": -0.00070501, + "vef": -175.18566197, + "vnd": -17.91454955, + "xag": -4.268e-05, + "xau": -4.5e-07, + "xdr": -0.00050746, + "xlm": -0.0043814329, + "xrp": -0.0005808077, + "zar": -0.01325238 + }, + "price_change_percentage_14d": -20.09212, + "price_change_percentage_14d_in_currency": { + "aed": -20.09664, + "ars": -3.40252, + "aud": -20.3743, + "bch": -10.35771, + "bdt": -20.21051, + "bhd": -20.07198, + "bmd": -20.09212, + "bnb": -18.90438, + "brl": -18.21564, + "btc": -10.20835, + "cad": -19.99931, + "chf": -19.86474, + "clp": -20.70274, + "cny": -19.67703, + "czk": -19.20224, + "dkk": -19.44946, + "eos": -6.27667, + "eth": -3.85819, + "eur": -19.3615, + "gbp": -19.99287, + "hkd": -20.04155, + "huf": -18.72941, + "idr": -19.92585, + "ils": -19.11955, + "inr": -19.53455, + "jpy": -19.93789, + "krw": -20.72061, + "kwd": -20.08213, + "lkr": -19.39749, + "ltc": 3.01755, + "mmk": -19.52559, + "mxn": -19.64657, + "myr": -20.39088, + "nok": -19.55283, + "nzd": -18.54, + "php": -19.79625, + "pkr": -19.69932, + "pln": -18.70635, + "rub": -18.9447, + "sar": -20.11299, + "sek": -19.43426, + "sgd": -19.93866, + "thb": -19.96922, + "try": -17.50796, + "twd": -20.26871, + "uah": -21.43567, + "usd": -20.09212, + "vef": -20.09212, + "vnd": -20.39781, + "xag": -22.82706, + "xau": -21.25807, + "xdr": -19.80447, + "xlm": -6.90503, + "xrp": -5.82792, + "zar": -18.53383 + }, + "price_change_percentage_1h_in_currency": { + "aed": -0.65082, + "ars": -0.65814, + "aud": -0.81241, + "bch": 1.34916, + "bdt": -0.64945, + "bhd": -0.62736, + "bmd": -0.65082, + "bnb": -0.66128, + "brl": -0.65109, + "btc": -0.64949, + "cad": -0.75327, + "chf": -0.6566, + "clp": -0.81121, + "cny": -0.61001, + "czk": -0.71198, + "dkk": -0.72865, + "eos": -0.27623, + "eth": -0.72711, + "eur": -0.73062, + "gbp": -0.79594, + "hkd": -0.65424, + "huf": -0.65304, + "idr": -0.69877, + "ils": -0.68895, + "inr": -0.85681, + "jpy": -0.70261, + "krw": -0.64504, + "kwd": -0.68347, + "lkr": -0.66193, + "ltc": 0.20669, + "mmk": -0.65082, + "mxn": -0.79588, + "myr": -0.58632, + "nok": -0.94166, + "nzd": -0.77361, + "php": -0.65651, + "pkr": -0.65082, + "pln": -0.82133, + "rub": -0.80523, + "sar": -0.62904, + "sek": -0.92466, + "sgd": -0.72845, + "thb": -0.71559, + "try": -0.93842, + "twd": -0.63818, + "uah": -0.65082, + "usd": -0.65082, + "vef": -0.65082, + "vnd": -0.72098, + "xag": -0.86625, + "xau": -0.66422, + "xdr": -0.65082, + "xlm": -0.6397, + "xrp": -0.05073, + "zar": -1.25864 + }, + "price_change_percentage_1y": -80.39683, + "price_change_percentage_1y_in_currency": { + "aed": -80.39794, + "ars": -61.05676, + "aud": -78.80429, + "bch": -66.67604, + "bdt": -80.26581, + "bhd": -80.39891, + "bmd": -80.39683, + "brl": -79.97401, + "btc": -87.93415, + "cad": -80.00734, + "chf": -80.63119, + "clp": -79.21186, + "cny": -79.80673, + "czk": -79.67769, + "dkk": -79.72199, + "eth": -71.77736, + "eur": -79.71573, + "gbp": -79.34655, + "hkd": -80.41399, + "huf": -79.49619, + "idr": -80.5156, + "ils": -81.08059, + "inr": -79.93604, + "jpy": -81.01454, + "krw": -78.90452, + "kwd": -80.34132, + "lkr": -78.15787, + "ltc": -85.4361, + "mmk": -80.27721, + "mxn": -79.65762, + "myr": -80.02222, + "nok": -79.18424, + "nzd": -79.67365, + "php": -80.76747, + "pkr": -74.51734, + "pln": -79.50758, + "rub": -80.62327, + "sar": -80.39647, + "sek": -79.31728, + "sgd": -80.18923, + "thb": -81.67711, + "try": -81.65737, + "twd": -79.98887, + "uah": -82.20648, + "usd": -80.39683, + "vef": -80.39558, + "vnd": -80.34916, + "xag": -83.03235, + "xau": -84.4215, + "xdr": -80.03907, + "zar": -79.43625 + }, + "price_change_percentage_200d": -50.1114, + "price_change_percentage_200d_in_currency": { + "aed": -50.11196, + "ars": -26.51722, + "aud": -46.67198, + "bch": -80.79243, + "bdt": -49.71149, + "bhd": -50.09578, + "bmd": -50.1114, + "bnb": -87.93302, + "brl": -44.75887, + "btc": -83.02991, + "cad": -49.34427, + "chf": -50.94689, + "clp": -45.88183, + "cny": -47.75857, + "czk": -48.37087, + "dkk": -48.59098, + "eos": -67.57399, + "eth": -71.6239, + "eur": -48.52075, + "gbp": -46.27358, + "hkd": -50.136, + "huf": -46.91923, + "idr": -49.00487, + "ils": -51.63145, + "inr": -50.15368, + "jpy": -51.46878, + "krw": -46.36111, + "kwd": -49.91845, + "lkr": -49.53248, + "ltc": -77.44522, + "mmk": -49.82943, + "mxn": -48.49618, + "myr": -49.12989, + "nok": -47.01887, + "nzd": -46.2816, + "php": -50.10377, + "pkr": -42.33563, + "pln": -47.7461, + "rub": -49.52654, + "sar": -50.10515, + "sek": -46.7992, + "sgd": -48.88484, + "thb": -50.95616, + "try": -45.32063, + "twd": -49.1634, + "uah": -54.76622, + "usd": -50.1114, + "vef": -50.1114, + "vnd": -50.2089, + "xag": -53.50147, + "xau": -56.13406, + "xdr": -49.07152, + "xlm": -39.53366, + "xrp": -42.37148, + "zar": -42.98063 + }, + "price_change_percentage_24h": -4.97817, + "price_change_percentage_24h_in_currency": { + "aed": -4.98614, + "ars": -5.17346, + "aud": -5.07575, + "bch": 0.99066, + "bdt": -5.0917, + "bhd": -4.95271, + "bmd": -4.97817, + "bnb": -1.58124, + "brl": -5.4789, + "btc": -0.05257, + "cad": -5.16583, + "chf": -5.07341, + "clp": -5.53921, + "cny": -4.98758, + "czk": -5.21666, + "dkk": -5.22182, + "eos": -2.69699, + "eth": -0.24506, + "eur": -5.21371, + "gbp": -5.44209, + "hkd": -4.99428, + "huf": -5.17487, + "idr": -5.1077, + "ils": -5.08246, + "inr": -5.35173, + "jpy": -4.90717, + "krw": -5.40119, + "kwd": -5.00939, + "lkr": -4.49721, + "ltc": -0.61091, + "mmk": -5.12476, + "mxn": -5.56641, + "myr": -5.1165, + "nok": -5.23449, + "nzd": -4.90745, + "php": -4.95001, + "pkr": -5.15646, + "pln": -5.48383, + "rub": -5.70968, + "sar": -4.96254, + "sek": -5.3709, + "sgd": -5.16905, + "thb": -5.13232, + "try": -5.13634, + "twd": -5.04655, + "uah": -5.22453, + "usd": -4.97817, + "vef": -4.97817, + "vnd": -5.43568, + "xag": -5.1341, + "xau": -4.8084, + "xdr": -4.91624, + "xlm": -2.16934, + "xrp": -1.13319, + "zar": -6.07423 + }, + "price_change_percentage_30d": -34.83569, + "price_change_percentage_30d_in_currency": { + "aed": -34.83544, + "ars": -15.98426, + "aud": -32.35353, + "bch": -30.11906, + "bdt": -34.93771, + "bhd": -34.7457, + "bmd": -34.83569, + "bnb": -27.08407, + "brl": -29.51868, + "btc": -32.08124, + "cad": -33.60701, + "chf": -35.09987, + "clp": -32.84418, + "cny": -33.12269, + "czk": -33.51308, + "dkk": -34.24389, + "eos": -21.08346, + "eth": -21.69788, + "eur": -34.16271, + "gbp": -32.89529, + "hkd": -34.53494, + "huf": -33.76133, + "idr": -33.48833, + "ils": -35.07099, + "inr": -32.4077, + "jpy": -35.60577, + "krw": -33.33925, + "kwd": -34.83162, + "lkr": -33.78522, + "ltc": -10.07379, + "mmk": -34.67478, + "mxn": -32.46726, + "myr": -33.79734, + "nok": -31.87864, + "nzd": -31.23716, + "php": -33.28065, + "pkr": -34.80085, + "pln": -32.59928, + "rub": -31.5309, + "sar": -34.83447, + "sek": -32.96828, + "sgd": -33.73135, + "thb": -35.04678, + "try": -34.23351, + "twd": -34.17354, + "uah": -36.37221, + "usd": -34.83569, + "vef": -34.83569, + "vnd": -35.19581, + "xag": -38.03606, + "xau": -38.0235, + "xdr": -34.25025, + "xlm": -12.74201, + "xrp": -18.8697, + "zar": -28.75132 + }, + "price_change_percentage_60d": -61.24989, + "price_change_percentage_60d_in_currency": { + "aed": -61.25202, + "ars": -50.32249, + "aud": -60.412, + "bch": -43.0945, + "bdt": -61.20391, + "bhd": -61.23344, + "bmd": -61.24989, + "bnb": -44.49169, + "brl": -58.90604, + "btc": -61.42639, + "cad": -61.04496, + "chf": -61.10703, + "clp": -59.79652, + "cny": -60.16104, + "czk": -60.03065, + "dkk": -60.38034, + "eos": -23.51938, + "eth": -39.23291, + "eur": -60.26215, + "gbp": -59.36192, + "hkd": -61.10542, + "huf": -59.91464, + "idr": -60.90777, + "ils": -62.26651, + "inr": -60.23354, + "jpy": -61.53855, + "krw": -59.78067, + "kwd": -61.16844, + "lkr": -60.71768, + "ltc": -25.65935, + "mmk": -61.20413, + "mxn": -60.04539, + "myr": -60.87356, + "nok": -59.13075, + "nzd": -60.12056, + "php": -60.49041, + "pkr": -60.53743, + "pln": -59.42569, + "rub": -59.28727, + "sar": -61.24451, + "sek": -59.99926, + "sgd": -60.43237, + "thb": -61.1805, + "try": -62.00162, + "twd": -60.74424, + "uah": -62.83383, + "usd": -61.24989, + "vef": -61.24989, + "vnd": -61.16958, + "xag": -65.19693, + "xau": -63.82007, + "xdr": -60.62729, + "xlm": -29.85582, + "xrp": -35.11899, + "zar": -58.83133 + }, + "price_change_percentage_7d": -12.91815, + "price_change_percentage_7d_in_currency": { + "aed": -12.92308, + "ars": -14.25115, + "aud": -12.76443, + "bch": 0.88592, + "bdt": -13.147, + "bhd": -12.88673, + "bmd": -12.91815, + "bnb": -5.78627, + "brl": -10.95714, + "btc": -6.92663, + "cad": -12.35787, + "chf": -12.68629, + "clp": -12.25865, + "cny": -12.67706, + "czk": -12.47009, + "dkk": -12.42719, + "eos": -0.91188, + "eth": -3.2526, + "eur": -12.3442, + "gbp": -13.56715, + "hkd": -12.94473, + "huf": -11.29007, + "idr": -13.63998, + "ils": -11.80257, + "inr": -12.53093, + "jpy": -12.98836, + "krw": -13.1693, + "kwd": -12.90068, + "lkr": -11.99684, + "ltc": 1.8824, + "mmk": -12.2934, + "mxn": -11.39186, + "myr": -13.13461, + "nok": -11.99025, + "nzd": -12.14546, + "php": -12.50757, + "pkr": -13.04362, + "pln": -11.96443, + "rub": -11.16958, + "sar": -12.91768, + "sek": -11.88369, + "sgd": -12.90808, + "thb": -12.98884, + "try": -10.77039, + "twd": -12.26523, + "uah": -12.97908, + "usd": -12.91815, + "vef": -12.91815, + "vnd": -13.40154, + "xag": -13.34686, + "xau": -12.77828, + "xdr": -12.6042, + "xlm": -3.71389, + "xrp": -2.40223, + "zar": -12.40714 + }, + "roi": null, + "total_supply": 252193195.0, + "total_volume": { + "aed": 440559, + "ars": 6563849, + "aud": 176776, + "bch": 399.879, + "bdt": 10120936, + "bhd": 45230, + "bmd": 119946, + "bnb": 4413, + "brl": 486163, + "btc": 11.770053, + "cad": 159540, + "chf": 117394, + "clp": 85082341, + "cny": 847180, + "czk": 2786558, + "dkk": 805460, + "eos": 33477, + "eth": 637.075, + "eur": 108026, + "gbp": 98721, + "hkd": 940723, + "huf": 35365063, + "idr": 1709124708, + "ils": 423015, + "inr": 8564729, + "jpy": 12776147, + "krw": 144309614, + "kwd": 36488, + "lkr": 21435577, + "ltc": 1658, + "mmk": 182491285, + "mxn": 2365238, + "myr": 501028, + "nok": 1074994, + "nzd": 187261, + "php": 6275343, + "pkr": 19194884, + "pln": 470169, + "rub": 7943115, + "sar": 449908, + "sek": 1157915, + "sgd": 165958, + "thb": 3690743, + "try": 684709, + "twd": 3761793, + "uah": 3015441, + "usd": 119946, + "vef": 29805136391, + "vnd": 2777910981, + "xag": 7029.61, + "xau": 80.03, + "xdr": 87482, + "xlm": 1761175, + "xrp": 451666, + "zar": 1826528 + } + }, + "name": "POA Network", + "public_interest_score": 27.778, + "public_interest_stats": { + "alexa_rank": 702581, + "bing_matches": 107000 + }, + "sentiment_votes_down_percentage": null, + "sentiment_votes_up_percentage": null, + "status_updates": [], + "symbol": "poa", + "tickers": [ + { + "base": "POA", + "bid_ask_spread_percentage": 1.503759, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.32e-06, + "eth": 7.139e-05, + "usd": 0.01344331 + }, + "converted_volume": { + "btc": 10.856044, + "eth": 587.121, + "usd": 110562 + }, + "is_anomaly": false, + "is_stale": false, + "last": 1.32e-06, + "last_fetch_at": "2019-08-21T08:34:21+00:00", + "last_traded_at": "2019-08-21T08:34:21+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "binance", + "name": "Binance" + }, + "target": "BTC", + "timestamp": "2019-08-21T08:34:21+00:00", + "trade_url": "https://www.binance.com/trade.html?symbol=POA_BTC", + "trust_score": "green", + "volume": 8224275.5227272725 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 1.729386, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.34e-06, + "eth": 7.226e-05, + "usd": 0.01360764 + }, + "converted_volume": { + "btc": 0.35219856, + "eth": 19.04774, + "usd": 3586.91 + }, + "is_anomaly": false, + "is_stale": false, + "last": 7.238e-05, + "last_fetch_at": "2019-08-21T08:34:26+00:00", + "last_traded_at": "2019-08-21T08:34:26+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "binance", + "name": "Binance" + }, + "target": "ETH", + "timestamp": "2019-08-21T08:34:26+00:00", + "trade_url": "https://www.binance.com/trade.html?symbol=POA_ETH", + "trust_score": "green", + "volume": 263595.07819839736 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 1.39165, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.34e-06, + "eth": 7.259e-05, + "usd": 0.01363846 + }, + "converted_volume": { + "btc": 0.24038472, + "eth": 13.008637, + "usd": 2444.17 + }, + "is_anomaly": false, + "is_stale": false, + "last": 0.000502, + "last_fetch_at": "2019-08-21T08:34:26+00:00", + "last_traded_at": "2019-08-21T08:13:08+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "binance", + "name": "Binance" + }, + "target": "BNB", + "timestamp": "2019-08-21T08:13:08+00:00", + "trade_url": "https://www.binance.com/trade.html?symbol=POA_BNB", + "trust_score": "green", + "volume": 179211.83864541832 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 2.985075, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.3e-06, + "eth": 7.036e-05, + "usd": 0.01324803 + }, + "converted_volume": { + "btc": 0.1595777, + "eth": 8.637423, + "usd": 1626.22 + }, + "is_anomaly": false, + "is_stale": false, + "last": 1.3e-06, + "last_fetch_at": "2019-08-21T08:36:07+00:00", + "last_traded_at": "2019-08-21T08:36:07+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "bibox", + "name": "Bibox" + }, + "target": "BTC", + "timestamp": "2019-08-21T08:36:07+00:00", + "trade_url": "https://www.bibox.com/exchange?coinPair=POA_BTC", + "trust_score": "yellow", + "volume": 122752.0737 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 3.247202, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.31e-06, + "eth": 7.077e-05, + "usd": 0.01332498 + }, + "converted_volume": { + "btc": 0.1127777, + "eth": 6.104291, + "usd": 1149.29 + }, + "is_anomaly": false, + "is_stale": false, + "last": 7.087e-05, + "last_fetch_at": "2019-08-21T08:35:50+00:00", + "last_traded_at": "2019-08-21T08:35:50+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "bibox", + "name": "Bibox" + }, + "target": "ETH", + "timestamp": "2019-08-21T08:35:50+00:00", + "trade_url": "https://www.bibox.com/exchange?coinPair=POA_ETH", + "trust_score": "yellow", + "volume": 86251.0552 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": 13.032676, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.16e-06, + "eth": 6.257e-05, + "usd": 0.01177973 + }, + "converted_volume": { + "btc": 0.00087672, + "eth": 0.04748752, + "usd": 8.94 + }, + "is_anomaly": false, + "is_stale": false, + "last": 1.1551e-06, + "last_fetch_at": "2019-08-21T08:37:38+00:00", + "last_traded_at": "2019-08-21T07:08:25+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "BTC", + "timestamp": "2019-08-21T07:08:25+00:00", + "trade_url": "https://hitbtc.com/POA20-to-BTC", + "trust_score": "red", + "volume": 759.0 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": 33.072445, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.57e-06, + "eth": 8.48e-05, + "usd": 0.01595278 + }, + "converted_volume": { + "btc": 0.00021915, + "eth": 0.0118714, + "usd": 2.23 + }, + "is_anomaly": false, + "is_stale": false, + "last": 8.4891e-05, + "last_fetch_at": "2019-08-21T08:37:21+00:00", + "last_traded_at": "2019-08-21T07:37:25+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "ETH", + "timestamp": "2019-08-21T07:37:25+00:00", + "trade_url": "https://hitbtc.com/POA20-to-ETH", + "trust_score": "red", + "volume": 140.0 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": 53.1004, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.15e-06, + "eth": 6.232e-05, + "usd": 0.0117249 + }, + "converted_volume": { + "btc": 7.478e-05, + "eth": 0.00405098, + "usd": 0.762119 + }, + "is_anomaly": false, + "is_stale": false, + "last": 0.0117249, + "last_fetch_at": "2019-08-21T08:37:46+00:00", + "last_traded_at": "2019-08-21T07:37:33+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "USD", + "timestamp": "2019-08-21T07:37:33+00:00", + "trade_url": "https://hitbtc.com/POA20-to-USD", + "trust_score": null, + "volume": 65.0 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": null, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.32e-06, + "eth": 7.134e-05, + "usd": 0.01339322 + }, + "converted_volume": { + "btc": 0.03831341, + "eth": 2.073192, + "usd": 389.22 + }, + "is_anomaly": false, + "is_stale": false, + "last": 0.034733328618915156, + "last_fetch_at": "2019-08-21T08:21:59+00:00", + "last_traded_at": "2019-08-21T08:21:59+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "bancor", + "name": "Bancor Network" + }, + "target": "BNT", + "timestamp": "2019-08-21T08:21:59+00:00", + "trade_url": null, + "trust_score": null, + "volume": 29061.03634563883 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": null, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.31e-06, + "eth": 7.074e-05, + "usd": 0.0132809 + }, + "converted_volume": { + "btc": 0.009587, + "eth": 0.51876605, + "usd": 97.39 + }, + "is_anomaly": false, + "is_stale": false, + "last": 7.0704231362995e-05, + "last_fetch_at": "2019-08-21T08:26:12+00:00", + "last_traded_at": "2019-08-21T08:21:13+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "uniswap", + "name": "Uniswap" + }, + "target": "ETH", + "timestamp": "2019-08-21T08:21:13+00:00", + "trade_url": null, + "trust_score": null, + "volume": 7333.316809051611 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 40.083051, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.33e-06, + "eth": 7.005e-05, + "usd": 0.01377146 + }, + "converted_volume": { + "btc": 0.0022752, + "eth": 0.12002061, + "usd": 23.59 + }, + "is_anomaly": false, + "is_stale": true, + "last": 7.004e-05, + "last_fetch_at": "2019-08-21T08:32:14+00:00", + "last_traded_at": "2019-08-18T18:43:13+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "ethfinex", + "name": "Ethfinex" + }, + "target": "ETH", + "timestamp": "2019-08-18T18:43:13+00:00", + "trade_url": "https://ethfinex.com", + "trust_score": "red", + "volume": 1713.3067 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 44.440399, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.33e-06, + "eth": 7.311e-05, + "usd": 0.013499 + }, + "converted_volume": { + "btc": 0.00442255, + "eth": 0.24305992, + "usd": 44.88 + }, + "is_anomaly": false, + "is_stale": true, + "last": 0.013499, + "last_fetch_at": "2019-08-21T08:32:13+00:00", + "last_traded_at": "2019-08-14T17:19:27+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "ethfinex", + "name": "Ethfinex" + }, + "target": "USD", + "timestamp": "2019-08-14T17:19:27+00:00", + "trade_url": "https://ethfinex.com", + "trust_score": "red", + "volume": 3324.44883078 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 14.012015, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.36e-06, + "eth": 7.49e-05, + "usd": 0.01446844 + }, + "converted_volume": { + "btc": 5.45e-06, + "eth": 0.00029958, + "usd": 0.057874 + }, + "is_anomaly": false, + "is_stale": true, + "last": 7.4743e-05, + "last_fetch_at": "2019-08-21T08:37:09+00:00", + "last_traded_at": "2019-08-21T02:52:09+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "ETH", + "timestamp": "2019-08-21T02:52:09+00:00", + "trade_url": "https://hitbtc.com/POA-to-ETH", + "trust_score": null, + "volume": 4.0 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 64.645979, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.36e-06, + "eth": 7.473e-05, + "usd": 0.01443604 + }, + "converted_volume": { + "btc": 2.72e-06, + "eth": 0.00014946, + "usd": 0.02887207 + }, + "is_anomaly": false, + "is_stale": true, + "last": 0.0143016, + "last_fetch_at": "2019-08-21T08:37:44+00:00", + "last_traded_at": "2019-08-21T02:52:25+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "DAI", + "timestamp": "2019-08-21T02:52:25+00:00", + "trade_url": "https://hitbtc.com/POA-to-DAI", + "trust_score": null, + "volume": 2.0 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 64.353312, + "coin_id": "poa-network", + "converted_last": { + "btc": 2.23e-06, + "eth": 0.00012505, + "usd": 0.02310309 + }, + "converted_volume": { + "btc": 0.00275182, + "eth": 0.15430951, + "usd": 28.51 + }, + "is_anomaly": true, + "is_stale": true, + "last": 2.23e-06, + "last_fetch_at": "2019-08-21T08:32:12+00:00", + "last_traded_at": "2019-08-17T12:50:06+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "ethfinex", + "name": "Ethfinex" + }, + "target": "BTC", + "timestamp": "2019-08-17T12:50:06+00:00", + "trade_url": "https://ethfinex.com", + "trust_score": "red", + "volume": 1234.0 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 21.080977, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.23e-06, + "eth": 6.72e-05, + "usd": 0.01322824 + }, + "converted_volume": { + "btc": 0.0, + "eth": 0.0, + "usd": 0.0 + }, + "is_anomaly": true, + "is_stale": true, + "last": 1.2331e-06, + "last_fetch_at": "2019-08-21T08:37:17+00:00", + "last_traded_at": "2019-08-20T18:50:31+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "BTC", + "timestamp": "2019-08-20T18:50:31+00:00", + "trade_url": "https://hitbtc.com/POA-to-BTC", + "trust_score": null, + "volume": 0.0 + }, + { + "base": "POA", + "bid_ask_spread_percentage": 36.441715, + "coin_id": "poa-network", + "converted_last": { + "btc": 1.22e-06, + "eth": 6.66e-05, + "usd": 0.0131106 + }, + "converted_volume": { + "btc": 0.0, + "eth": 0.0, + "usd": 0.0 + }, + "is_anomaly": true, + "is_stale": true, + "last": 0.0131106, + "last_fetch_at": "2019-08-21T08:37:14+00:00", + "last_traded_at": "2019-08-20T18:50:15+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "USD", + "timestamp": "2019-08-20T18:50:15+00:00", + "trade_url": "https://hitbtc.com/POA-to-USD", + "trust_score": null, + "volume": 0.0 + }, + { + "base": "POA20", + "bid_ask_spread_percentage": 70.656026, + "coin_id": "poa-network", + "converted_last": { + "btc": 7.522e-07, + "eth": 4.006e-05, + "usd": 0.0080416 + }, + "converted_volume": { + "btc": 0.0, + "eth": 0.0, + "usd": 0.0 + }, + "is_anomaly": true, + "is_stale": true, + "last": 0.008, + "last_fetch_at": "2019-08-21T08:37:29+00:00", + "last_traded_at": "2019-08-19T09:09:06+00:00", + "market": { + "has_trading_incentive": false, + "identifier": "hitbtc", + "name": "HitBTC" + }, + "target": "DAI", + "timestamp": "2019-08-19T09:09:06+00:00", + "trade_url": "https://hitbtc.com/POA20-to-DAI", + "trust_score": null, + "volume": 0.0 + } + ] +} From 48a01e98a599ad34c892fa01fb031059ef2fbcfe Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Thu, 22 Aug 2019 11:22:54 +0300 Subject: [PATCH 033/109] fix json decoding --- apps/explorer/lib/explorer/exchange_rates/source.ex | 7 ++++++- .../lib/explorer/exchange_rates/source/coin_gecko.ex | 4 +--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/apps/explorer/lib/explorer/exchange_rates/source.ex b/apps/explorer/lib/explorer/exchange_rates/source.ex index d733b22222..6d95e48796 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source.ex @@ -39,7 +39,12 @@ defmodule Explorer.ExchangeRates.Source do defp fetch_exchange_rates_request(source) do case HTTPoison.get(source.source_url(), headers()) do {:ok, %Response{body: body, status_code: 200}} -> - {:ok, source.format_data(body)} + result = + body + |> decode_json() + |> source.format_data() + + {:ok, result} {:ok, %Response{body: body, status_code: status_code}} when status_code in 400..499 -> {:error, decode_json(body)["error"]} diff --git a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex index 5b0bed2b3b..95ecafb046 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source/coin_gecko.ex @@ -11,12 +11,10 @@ defmodule Explorer.ExchangeRates.Source.CoinGecko do @behaviour Source @impl Source - def format_data(%{"market_data" => _} = data) do + def format_data(%{"market_data" => _} = json_data) do {:ok, price} = get_btc_price() btc_price = to_decimal(price) - json_data = decode_json(data) - market_data = json_data["market_data"] {:ok, last_updated, 0} = DateTime.from_iso8601(market_data["last_updated"]) From 8491259093ee93aa3371c05e9e159f1fa2d87d29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2019 11:50:18 +0000 Subject: [PATCH 034/109] Bump lodash from 4.17.13 to 4.17.15 in /apps/block_scout_web/assets Bumps [lodash](https://github.com/lodash/lodash) from 4.17.13 to 4.17.15. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.13...4.17.15) Signed-off-by: dependabot[bot] --- apps/block_scout_web/assets/package-lock.json | 6 +++--- apps/block_scout_web/assets/package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/block_scout_web/assets/package-lock.json b/apps/block_scout_web/assets/package-lock.json index 2c78f45f55..9747ccfe67 100644 --- a/apps/block_scout_web/assets/package-lock.json +++ b/apps/block_scout_web/assets/package-lock.json @@ -6961,9 +6961,9 @@ } }, "lodash": { - "version": "4.17.13", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", - "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "lodash.assign": { "version": "4.2.0", diff --git a/apps/block_scout_web/assets/package.json b/apps/block_scout_web/assets/package.json index 98fbc501d6..30845a3be3 100644 --- a/apps/block_scout_web/assets/package.json +++ b/apps/block_scout_web/assets/package.json @@ -30,7 +30,7 @@ "highlightjs-solidity": "^1.0.6", "humps": "^2.0.1", "jquery": "^3.3.1", - "lodash": "^4.17.13", + "lodash": "^4.17.15", "moment": "^2.22.1", "nanomorph": "^5.1.3", "numeral": "^2.0.6", From 3f30610dde9a3f2d425552c1696069f84c6c557b Mon Sep 17 00:00:00 2001 From: pasqu4le Date: Thu, 15 Aug 2019 20:36:48 +0200 Subject: [PATCH 035/109] Add generic Map-like Cache behaviour and implementation Problem: multiple caches exist that contain some data as a map (key-value storing). More are to be implemented, so it would be good to abstract their implementation. Solution: add a behaviour and a macro (providing an implementation) to create this type of caches. At the same time, where possible: - redefine the existing ones using the new macro - optimize the implementation --- CHANGELOG.md | 1 + .../controllers/api/rpc/block_controller.ex | 2 +- .../controllers/block_controller_test.exs | 4 +- .../controllers/chain_controller_test.exs | 4 +- .../features/viewing_chain_test.exs | 4 +- apps/explorer/lib/explorer/application.ex | 9 +- apps/explorer/lib/explorer/chain.ex | 36 +-- apps/explorer/lib/explorer/chain/address.ex | 2 +- .../lib/explorer/chain/cache/block_count.ex | 168 ++++---------- .../lib/explorer/chain/cache/block_number.ex | 91 ++------ .../lib/explorer/chain/cache/net_version.ex | 47 ++-- .../explorer/chain/cache/transaction_count.ex | 174 ++++---------- apps/explorer/lib/explorer/chain/map_cache.ex | 217 ++++++++++++++++++ .../explorer/lib/explorer/chain/supply/rsk.ex | 2 +- .../explorer/chain/cache/block_count_test.exs | 26 +-- .../chain/cache/block_number_test.exs | 50 ++-- .../test/explorer/chain/cache/blocks_test.exs | 4 +- .../chain/cache/transaction_count_test.exs | 26 +-- apps/explorer/test/explorer/chain_test.exs | 24 +- apps/explorer/test/support/data_case.ex | 3 +- apps/indexer/lib/indexer/block/fetcher.ex | 9 +- .../indexer/fetcher/coin_balance_on_demand.ex | 2 +- 22 files changed, 458 insertions(+), 447 deletions(-) create mode 100644 apps/explorer/lib/explorer/chain/map_cache.ex diff --git a/CHANGELOG.md b/CHANGELOG.md index f8335319cb..0f8742c44b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2581](https://github.com/poanetwork/blockscout/pull/2581) - Add generic Map-like Cache behaviour and implementation - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/block_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/block_controller.ex index 835e19bf3e..2b9bdc0dd6 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/block_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/api/rpc/block_controller.ex @@ -26,7 +26,7 @@ defmodule BlockScoutWeb.API.RPC.BlockController do def eth_block_number(conn, params) do id = Map.get(params, "id", 1) - max_block_number = BlockNumber.max_number() + max_block_number = BlockNumber.get_max() render(conn, :eth_block_number, number: max_block_number, id: id) end diff --git a/apps/block_scout_web/test/block_scout_web/controllers/block_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/block_controller_test.exs index e8c4af7de8..6c0bfabfa0 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/block_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/block_controller_test.exs @@ -3,8 +3,8 @@ defmodule BlockScoutWeb.BlockControllerTest do alias Explorer.Chain.Block setup do - Supervisor.terminate_child(Explorer.Supervisor, {ConCache, :blocks}) - Supervisor.restart_child(Explorer.Supervisor, {ConCache, :blocks}) + Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) + Supervisor.restart_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) :ok end diff --git a/apps/block_scout_web/test/block_scout_web/controllers/chain_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/chain_controller_test.exs index 00a53689c8..fa82bb5bab 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/chain_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/chain_controller_test.exs @@ -9,8 +9,8 @@ defmodule BlockScoutWeb.ChainControllerTest do alias Explorer.Counters.AddressesWithBalanceCounter setup do - Supervisor.terminate_child(Explorer.Supervisor, {ConCache, :blocks}) - Supervisor.restart_child(Explorer.Supervisor, {ConCache, :blocks}) + Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) + Supervisor.restart_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) start_supervised!(AddressesWithBalanceCounter) AddressesWithBalanceCounter.consolidate() diff --git a/apps/block_scout_web/test/block_scout_web/features/viewing_chain_test.exs b/apps/block_scout_web/test/block_scout_web/features/viewing_chain_test.exs index a32e4f5da3..27b4dbb329 100644 --- a/apps/block_scout_web/test/block_scout_web/features/viewing_chain_test.exs +++ b/apps/block_scout_web/test/block_scout_web/features/viewing_chain_test.exs @@ -10,8 +10,8 @@ defmodule BlockScoutWeb.ViewingChainTest do alias Explorer.Counters.AddressesWithBalanceCounter setup do - Supervisor.terminate_child(Explorer.Supervisor, {ConCache, :blocks}) - Supervisor.restart_child(Explorer.Supervisor, {ConCache, :blocks}) + Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) + Supervisor.restart_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) Enum.map(401..404, &insert(:block, number: &1)) diff --git a/apps/explorer/lib/explorer/application.ex b/apps/explorer/lib/explorer/application.ex index c28469c340..1bd2778762 100644 --- a/apps/explorer/lib/explorer/application.ex +++ b/apps/explorer/lib/explorer/application.ex @@ -42,10 +42,11 @@ defmodule Explorer.Application do Explorer.SmartContract.SolcDownloader, {Registry, keys: :duplicate, name: Registry.ChainEvents, id: Registry.ChainEvents}, {Admin.Recovery, [[], [name: Admin.Recovery]]}, - {TransactionCount, [[], []]}, - {BlockCount, []}, + TransactionCount, + BlockCount, Blocks, - con_cache_child_spec(NetVersion.cache_name()), + NetVersion, + BlockNumber, con_cache_child_spec(MarketHistoryCache.cache_name()), con_cache_child_spec(RSK.cache_name(), ttl_check_interval: :timer.minutes(1), global_ttl: :timer.minutes(30)), Transactions @@ -57,8 +58,6 @@ defmodule Explorer.Application do res = Supervisor.start_link(children, opts) - BlockNumber.setup() - res end diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index 58253c0f27..eac7f3ce6f 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -267,7 +267,7 @@ defmodule Explorer.Chain do def address_to_logs(address_hash, options \\ []) when is_list(options) do paging_options = Keyword.get(options, :paging_options) || %PagingOptions{page_size: 50} - {block_number, transaction_index, log_index} = paging_options.key || {BlockNumber.max_number(), 0, 0} + {block_number, transaction_index, log_index} = paging_options.key || {BlockNumber.get_max(), 0, 0} base_query = from(log in Log, @@ -1176,7 +1176,7 @@ defmodule Explorer.Chain do """ @spec indexed_ratio() :: Decimal.t() def indexed_ratio do - {min, max} = BlockNumber.min_and_max_numbers() + %{min: min, max: max} = BlockNumber.get_all() case {min, max} do {0, 0} -> @@ -1189,20 +1189,30 @@ defmodule Explorer.Chain do end end - @spec fetch_min_and_max_block_numbers() :: {non_neg_integer, non_neg_integer} - def fetch_min_and_max_block_numbers do + @spec fetch_min_block_number() :: non_neg_integer + def fetch_min_block_number do query = from(block in Block, - select: {min(block.number), max(block.number)}, - where: block.consensus == true + select: block.number, + where: block.consensus == true, + order_by: [asc: block.number], + limit: 1 ) - result = Repo.one!(query) + Repo.one(query) || 0 + end - case result do - {nil, nil} -> {0, 0} - _ -> result - end + @spec fetch_max_block_number() :: non_neg_integer + def fetch_max_block_number do + query = + from(block in Block, + select: block.number, + where: block.consensus == true, + order_by: [desc: block.number], + limit: 1 + ) + + Repo.one(query) || 0 end @spec fetch_count_consensus_block() :: non_neg_integer @@ -2195,7 +2205,7 @@ defmodule Explorer.Chain do """ @spec transaction_estimated_count() :: non_neg_integer() def transaction_estimated_count do - cached_value = TransactionCount.value() + cached_value = TransactionCount.get_count() if is_nil(cached_value) do %Postgrex.Result{rows: [[rows]]} = @@ -2214,7 +2224,7 @@ defmodule Explorer.Chain do """ @spec block_estimated_count() :: non_neg_integer() def block_estimated_count do - cached_value = BlockCount.count() + cached_value = BlockCount.get_count() if is_nil(cached_value) do %Postgrex.Result{rows: [[count]]} = Repo.query!("SELECT reltuples FROM pg_class WHERE relname = 'blocks';") diff --git a/apps/explorer/lib/explorer/chain/address.ex b/apps/explorer/lib/explorer/chain/address.ex index 478c35deb1..96d4dc7ab4 100644 --- a/apps/explorer/lib/explorer/chain/address.ex +++ b/apps/explorer/lib/explorer/chain/address.ex @@ -170,7 +170,7 @@ defmodule Explorer.Chain.Address do end def rsk_checksum(hash) do - chain_id = NetVersion.version() + chain_id = NetVersion.get_version() string_hash = hash diff --git a/apps/explorer/lib/explorer/chain/cache/block_count.ex b/apps/explorer/lib/explorer/chain/cache/block_count.ex index 8ba09cc86f..c4e6c6a4a0 100644 --- a/apps/explorer/lib/explorer/chain/cache/block_count.ex +++ b/apps/explorer/lib/explorer/chain/cache/block_count.ex @@ -5,143 +5,61 @@ defmodule Explorer.Chain.Cache.BlockCount do require Logger - use GenServer + @default_cache_period :timer.minutes(10) - alias Explorer.Chain - - # 10 minutes - @cache_period 1_000 * 60 * 10 - @key "count" - @default_value nil - @name __MODULE__ - - def start_link(params) do - name = params[:name] || @name - params_with_name = Keyword.put(params, :name, name) - - GenServer.start_link(__MODULE__, params_with_name, name: name) - end - - def init(params) do - cache_period = period_from_env_var() || params[:cache_period] || @cache_period - current_value = params[:default_value] || @default_value - name = params[:name] - - init_ets_table(name) - - {:ok, {{cache_period, current_value, name}, nil}} - end - - def count(process_name \\ __MODULE__) do - GenServer.call(process_name, :count) - end - - def handle_call(:count, _, {{cache_period, default_value, name}, task}) do - {count, task} = - case cached_values(name) do - nil -> - {default_value, update_cache(task, name)} - - {cached_value, timestamp} -> - task = - if current_time() - timestamp > cache_period do - update_cache(task, name) - end - - {cached_value, task} - end - - {:reply, count, {{cache_period, default_value, name}, task}} - end - - def update_cache(nil, name) do - async_update_cache(name) - end - - def update_cache(task, _) do - task - end + use Explorer.Chain.MapCache, + name: :block_count, + key: :count, + key: :async_task, + global_ttl: cache_period(), + ttl_check_interval: :timer.minutes(1), + callback: &async_task_on_deletion(&1) - def handle_cast({:update_cache, value}, {{cache_period, default_value, name}, _}) do - current_time = current_time() - tuple = {value, current_time} - - table_name = table_name(name) - - :ets.insert(table_name, {@key, tuple}) - - {:noreply, {{cache_period, default_value, name}, nil}} - end - - def handle_info({:DOWN, _, _, _, _}, {{cache_period, default_value, name}, _}) do - {:noreply, {{cache_period, default_value, name}, nil}} - end - - def handle_info(_, {{cache_period, default_value, name}, _}) do - {:noreply, {{cache_period, default_value, name}, nil}} - end - - # sobelow_skip ["DOS"] - defp table_name(name) do - name - |> Atom.to_string() - |> Macro.underscore() - |> String.to_atom() - end + alias Explorer.Chain - def async_update_cache(name) do - Task.async(fn -> - try do - result = Chain.fetch_count_consensus_block() + defp handle_fallback(:count) do + # This will get the task PID if one exists and launch a new task if not + # See next `handle_fallback` definition + get_async_task() - GenServer.cast(name, {:update_cache, result}) - rescue - e -> - Logger.debug([ - "Coudn't update block count test #{inspect(e)}" - ]) - end - end) + {:return, nil} end - defp init_ets_table(name) do - table_name = table_name(name) - - if :ets.whereis(table_name) == :undefined do - :ets.new(table_name, [ - :set, - :named_table, - :public, - write_concurrency: true - ]) - end - end + defp handle_fallback(:async_task) do + # If this gets called it means an async task was requested, but none exists + # so a new one needs to be launched + task = + Task.async(fn -> + try do + result = Chain.fetch_count_consensus_block() + + set_count(result) + rescue + e -> + Logger.debug([ + "Coudn't update block count test #{inspect(e)}" + ]) + end - defp cached_values(name) do - table_name = table_name(name) + set_async_task(nil) + end) - case :ets.lookup(table_name, @key) do - [{_, cached_values}] -> cached_values - _ -> nil - end + {:update, task} end - defp current_time do - utc_now = DateTime.utc_now() - - DateTime.to_unix(utc_now, :millisecond) - end + # By setting this as a `callback` an async task will be started each time the + # `count` expires (unless there is one already running) + defp async_task_on_deletion({:delete, _, :count}), do: get_async_task() - defp period_from_env_var do - case System.get_env("BLOCK_COUNT_CACHE_PERIOD") do - value when is_binary(value) -> - case Integer.parse(value) do - {integer, ""} -> integer * 1_000 - _ -> nil - end + defp async_task_on_deletion(_data), do: nil - _ -> - nil + defp cache_period do + "BLOCK_COUNT_CACHE_PERIOD" + |> System.get_env("") + |> Integer.parse() + |> case do + {integer, ""} -> :timer.seconds(integer) + _ -> @default_cache_period end end end diff --git a/apps/explorer/lib/explorer/chain/cache/block_number.ex b/apps/explorer/lib/explorer/chain/cache/block_number.ex index 5212117793..d19551fa59 100644 --- a/apps/explorer/lib/explorer/chain/cache/block_number.ex +++ b/apps/explorer/lib/explorer/chain/cache/block_number.ex @@ -3,89 +3,36 @@ defmodule Explorer.Chain.Cache.BlockNumber do Cache for max and min block numbers. """ - alias Explorer.Chain - - @tab :block_number_cache - @key "min_max" + @type value :: non_neg_integer() - @spec setup() :: :ok - def setup do - if :ets.whereis(@tab) == :undefined do - :ets.new(@tab, [ - :set, - :named_table, - :public, - write_concurrency: true - ]) - end + use Explorer.Chain.MapCache, + name: :block_number, + keys: [:min, :max] - update_cache() - - :ok - end + alias Explorer.Chain - def max_number do - value(:max) - end + defp handle_update(_key, nil, value), do: {:ok, value} - def min_number do - value(:min) - end + defp handle_update(:min, old_value, new_value), do: {:ok, min(new_value, old_value)} - def min_and_max_numbers do - value(:all) - end + defp handle_update(:max, old_value, new_value), do: {:ok, max(new_value, old_value)} - defp value(type) do - {min, max} = - if Application.get_env(:explorer, __MODULE__)[:enabled] do - cached_values() - else - min_and_max_from_db() - end + defp handle_fallback(key) do + result = fetch_from_db(key) - case type do - :max -> max - :min -> min - :all -> {min, max} + if Application.get_env(:explorer, __MODULE__)[:enabled] do + {:update, result} + else + {:return, result} end end - @spec update(non_neg_integer()) :: boolean() - def update(number) do - {old_min, old_max} = cached_values() - - cond do - number > old_max -> - tuple = {old_min, number} - :ets.insert(@tab, {@key, tuple}) - - number < old_min -> - tuple = {number, old_max} - :ets.insert(@tab, {@key, tuple}) - - true -> - false + defp fetch_from_db(key) do + case key do + :min -> Chain.fetch_min_block_number() + :max -> Chain.fetch_max_block_number() end - end - - defp update_cache do - {min, max} = min_and_max_from_db() - tuple = {min, max} - - :ets.insert(@tab, {@key, tuple}) - end - - defp cached_values do - [{_, cached_values}] = :ets.lookup(@tab, @key) - - cached_values - end - - defp min_and_max_from_db do - Chain.fetch_min_and_max_block_numbers() rescue - _e -> - {0, 0} + _e -> 0 end end diff --git a/apps/explorer/lib/explorer/chain/cache/net_version.ex b/apps/explorer/lib/explorer/chain/cache/net_version.ex index ac33ca8f45..4a5c0cd144 100644 --- a/apps/explorer/lib/explorer/chain/cache/net_version.ex +++ b/apps/explorer/lib/explorer/chain/cache/net_version.ex @@ -3,42 +3,27 @@ defmodule Explorer.Chain.Cache.NetVersion do Caches chain version. """ - @cache_name :net_version - @key :version + @json_rpc_named_arguments Application.get_env(:explorer, :json_rpc_named_arguments) - @spec version() :: non_neg_integer() | {:error, any()} - def version do - cached_value = fetch_from_cache() + require Logger - if is_nil(cached_value) do - fetch_from_node() - else - cached_value - end - end - - def cache_name do - @cache_name - end - - defp fetch_from_cache do - ConCache.get(@cache_name, @key) - end + use Explorer.Chain.MapCache, + name: :net_version, + key: :version - defp cache_value(value) do - ConCache.put(@cache_name, @key, value) - end - - defp fetch_from_node do - json_rpc_named_arguments = Application.get_env(:explorer, :json_rpc_named_arguments) - - case EthereumJSONRPC.fetch_net_version(json_rpc_named_arguments) do + defp handle_fallback(:version) do + case EthereumJSONRPC.fetch_net_version(@json_rpc_named_arguments) do {:ok, value} -> - cache_value(value) - value + {:update, value} - other -> - other + {:error, reason} -> + Logger.debug([ + "Coudn't fetch net_version, reason: #{inspect(reason)}" + ]) + + {:return, nil} end end + + defp handle_fallback(_key), do: {:return, nil} end diff --git a/apps/explorer/lib/explorer/chain/cache/transaction_count.ex b/apps/explorer/lib/explorer/chain/cache/transaction_count.ex index e1fe2dad82..e81bae7414 100644 --- a/apps/explorer/lib/explorer/chain/cache/transaction_count.ex +++ b/apps/explorer/lib/explorer/chain/cache/transaction_count.ex @@ -3,152 +3,64 @@ defmodule Explorer.Chain.Cache.TransactionCount do Cache for estimated transaction count. """ - require Logger + @default_cache_period :timer.hours(2) + + use Explorer.Chain.MapCache, + name: :transaction_count, + key: :count, + key: :async_task, + global_ttl: cache_period(), + ttl_check_interval: :timer.minutes(10), + callback: &async_task_on_deletion(&1) - use GenServer + require Logger alias Explorer.Chain.Transaction alias Explorer.Repo - # 2 hours - @cache_period 1_000 * 60 * 60 * 2 - @default_value nil - @key "count" - @name __MODULE__ - - def start_link([params, gen_server_options]) do - name = gen_server_options[:name] || @name - params_with_name = Keyword.put(params, :name, name) - - GenServer.start_link(__MODULE__, params_with_name, name: name) - end - - def init(params) do - cache_period = period_from_env_var() || params[:cache_period] || @cache_period - current_value = params[:default_value] || @default_value - name = params[:name] - - init_ets_table(name) - - schedule_cache_update() - - {:ok, {{cache_period, current_value, name}, nil}} - end - - def value(process_name \\ __MODULE__) do - GenServer.call(process_name, :value) - end - - def handle_call(:value, _, {{cache_period, default_value, name}, task}) do - {value, task} = - case cached_values(name) do - nil -> - {default_value, update_cache(task, name)} + defp handle_fallback(:count) do + # This will get the task PID if one exists and launch a new task if not + # See next `handle_fallback` definition + get_async_task() - {cached_value, timestamp} -> - task = - if current_time() - timestamp > cache_period do - update_cache(task, name) - end - - {cached_value, task} - end - - {:reply, value, {{cache_period, default_value, name}, task}} + {:return, nil} end - def update_cache(nil, name) do - async_update_cache(name) - end - - def update_cache(task, _) do - task - end - - def handle_cast({:update_cache, value}, {{cache_period, default_value, name}, _}) do - current_time = current_time() - tuple = {value, current_time} - - table_name = table_name(name) - - :ets.insert(table_name, {@key, tuple}) + defp handle_fallback(:async_task) do + # If this gets called it means an async task was requested, but none exists + # so a new one needs to be launched + task = + Task.async(fn -> + try do + result = Repo.aggregate(Transaction, :count, :hash, timeout: :infinity) - {:noreply, {{cache_period, default_value, name}, nil}} - end - - def handle_info({:DOWN, _, _, _, _}, {{cache_period, default_value, name}, _}) do - {:noreply, {{cache_period, default_value, name}, nil}} - end - - def handle_info(_, {{cache_period, default_value, name}, _}) do - {:noreply, {{cache_period, default_value, name}, nil}} - end - - # sobelow_skip ["DOS"] - defp table_name(name) do - name - |> Atom.to_string() - |> Macro.underscore() - |> String.to_atom() - end - - def async_update_cache(name) do - Task.async(fn -> - try do - result = Repo.aggregate(Transaction, :count, :hash, timeout: :infinity) - - GenServer.cast(name, {:update_cache, result}) - rescue - e -> - Logger.debug([ - "Coudn't update transaction count test #{inspect(e)}" - ]) - end - end) - end - - defp init_ets_table(name) do - table_name = table_name(name) - - if :ets.whereis(table_name) == :undefined do - :ets.new(table_name, [ - :set, - :named_table, - :public, - write_concurrency: true - ]) - end - end - - defp cached_values(name) do - table_name = table_name(name) + set_count(result) + rescue + e -> + Logger.debug([ + "Coudn't update transaction count test #{inspect(e)}" + ]) + end - case :ets.lookup(table_name, @key) do - [{_, cached_values}] -> cached_values - _ -> nil - end - end + set_async_task(nil) + end) - defp schedule_cache_update do - Process.send_after(self(), :update_cache, 2_000) + {:update, task} end - defp current_time do - utc_now = DateTime.utc_now() + # By setting this as a `callback` an async task will be started each time the + # `count` expires (unless there is one already running) + defp async_task_on_deletion({:delete, _, :count}), do: get_async_task() - DateTime.to_unix(utc_now, :millisecond) - end - - defp period_from_env_var do - case System.get_env("TXS_COUNT_CACHE_PERIOD") do - value when is_binary(value) -> - case Integer.parse(value) do - {integer, ""} -> integer * 1_000 - _ -> nil - end + defp async_task_on_deletion(_data), do: nil - _ -> - nil + defp cache_period do + "TXS_COUNT_CACHE_PERIOD" + |> System.get_env("") + |> Integer.parse() + |> case do + {integer, ""} -> :timer.seconds(integer) + _ -> @default_cache_period end end end diff --git a/apps/explorer/lib/explorer/chain/map_cache.ex b/apps/explorer/lib/explorer/chain/map_cache.ex new file mode 100644 index 0000000000..d50a4c5e44 --- /dev/null +++ b/apps/explorer/lib/explorer/chain/map_cache.ex @@ -0,0 +1,217 @@ +defmodule Explorer.Chain.MapCache do + @moduledoc """ + Behaviour for a map-like cache of elements. + + A macro based on `ConCache` is provided as well, at its minimum it can be used as; + ``` + use Explorer.Chain.MapCache, + name: :name, + keys: [:fst, :snd] + ``` + Note: `keys` can also be set singularly with the option `key`, e.g.: + ``` + use Explorer.Chain.MapCache, + name: :cache, + key: :fst, + key: :snd + ``` + Additionally all of the options accepted by `ConCache.start_link/1` can be + provided as well. By default only `ttl_check_interval:` is set (to `false`). + + ## Named functions + Apart from the functions defined in the behaviour, the macro will also create + 3 named function for each key, for instance for the key `:fst`: + - `get_fst` + - `set_fst` + - `update_fst` + These all work as their respective counterparts with the `t:key/0` parameter. + + ## Callbacks + Apart from the `callback` that can be set as part of the `ConCache` options, + two callbacks esist and can be overridden: + + `c:handle_update/3` will be called whenever an update is issued. It will receive + the `t:key/0` that is going to be updated, the current `t:value/0` that is + stored for said key and the new `t:value/0` to evaluate. + This allows to select what value to keep and do additional processing. + By default this just stores the new `t:value/0`. + + `c:handle_fallback/1` will be called whenever a get is performed and there is no + stored value for the given `t:key/0` (or when the value is `nil`). + It can return 2 different tuples: + - `{:update, value}` that will cause the value to be returned and the `t:key/0` + to be `c:update/2`d + - `{:return, value}` that will cause the value to be returned but not stored + This allows to define of a default value or perform some actions. + By default it will simply `{:return, nil}` + """ + + @type key :: atom() + + @type value :: term() + + @doc """ + An atom that identifies this cache + """ + @callback cache_name :: atom() + + @doc """ + List of `t:key/0`s that the cache contains + """ + @callback cache_keys :: [key()] + + @doc """ + Gets everything in a map + """ + @callback get_all :: map() + + @doc """ + Gets the stored `t:value/0` for a given `t:key/0` + """ + @callback get(atom()) :: value() + + @doc """ + Stores the same `t:value/0` for every `t:key/0` + """ + @callback set_all(value()) :: :ok + + @doc """ + Stores the given `t:value/0` for the given `t:key/0` + """ + @callback set(key(), value()) :: :ok + + @doc """ + Updates every `t:key/0` with the given `t:value/0` + """ + @callback update_all(value()) :: :ok + + @doc """ + Updates the given `t:key/0` (or every `t:key/0` in a list) using the given `t:value/0` + """ + @callback update(key() | [key()], value()) :: :ok + + @doc """ + Gets called during an update for the given `t:key/0` + """ + @callback handle_update(key(), value(), value()) :: {:ok, value()} | {:error, term()} + + @doc """ + Gets called when a `c:get/1` finds no `t:value/0` + """ + @callback handle_fallback(key()) :: {:update, value()} | {:return, value()} + + # credo:disable-for-next-line /Complexity/ + defmacro __using__(opts) when is_list(opts) do + # name is necessary + name = Keyword.fetch!(opts, :name) + keys = Keyword.get(opts, :keys) || Keyword.get_values(opts, :key) + + concache_params = + opts + |> Keyword.drop([:keys, :key]) + |> Keyword.put_new(:ttl_check_interval, false) + + # credo:disable-for-next-line Credo.Check.Refactor.LongQuoteBlocks + quote do + alias Explorer.Chain.MapCache + + @behaviour MapCache + + @dialyzer {:nowarn_function, handle_fallback: 1} + + @impl MapCache + def cache_name, do: unquote(name) + + @impl MapCache + def cache_keys, do: unquote(keys) + + @impl MapCache + def get_all do + Map.new(cache_keys(), fn key -> {key, get(key)} end) + end + + @impl MapCache + def get(key) do + case ConCache.get(cache_name(), key) do + nil -> + case handle_fallback(key) do + {:update, new_value} -> + update(key, new_value) + new_value + + {:return, new_value} -> + new_value + end + + value -> + value + end + end + + @impl MapCache + def set_all(value) do + Enum.each(cache_keys(), &set(&1, value)) + end + + @impl MapCache + def set(key, value) do + ConCache.put(cache_name(), key, value) + end + + @impl MapCache + def update_all(value), do: update(cache_keys(), value) + + @impl MapCache + def update(keys, value) when is_list(keys) do + Enum.each(keys, &update(&1, value)) + end + + @impl MapCache + def update(key, value) do + ConCache.update(cache_name(), key, fn old_val -> handle_update(key, old_val, value) end) + end + + ### Autogenerated named functions + + unquote(Enum.map(keys, &named_functions(&1))) + + ### Overridable callback functions + + @impl MapCache + def handle_update(_key, _old_value, new_value), do: {:ok, new_value} + + @impl MapCache + def handle_fallback(_key), do: {:return, nil} + + defoverridable handle_update: 3, handle_fallback: 1 + + ### Supervisor's child specification + + @doc """ + The child specification for a Supervisor. Note that all the `params` + provided to this function will override the ones set by using the macro + """ + def child_spec(params \\ []) do + params = Keyword.merge(unquote(concache_params), params) + + Supervisor.child_spec({ConCache, params}, id: child_id()) + end + + def child_id, do: {ConCache, cache_name()} + end + end + + # sobelow_skip ["DOS"] + defp named_functions(key) do + quote do + # sobelow_skip ["DOS"] + def unquote(:"get_#{key}")(), do: get(unquote(key)) + + # sobelow_skip ["DOS"] + def unquote(:"set_#{key}")(value), do: set(unquote(key), value) + + # sobelow_skip ["DOS"] + def unquote(:"update_#{key}")(value), do: update(unquote(key), value) + end + end +end diff --git a/apps/explorer/lib/explorer/chain/supply/rsk.ex b/apps/explorer/lib/explorer/chain/supply/rsk.ex index eb7c4571cd..c34cf62d49 100644 --- a/apps/explorer/lib/explorer/chain/supply/rsk.ex +++ b/apps/explorer/lib/explorer/chain/supply/rsk.ex @@ -102,7 +102,7 @@ defmodule Explorer.Chain.Supply.RSK do def cache_name, do: @cache_name defp fetch_circulating_value do - max_number = BlockNumber.max_number() + max_number = BlockNumber.get_max() params = [ %{block_quantity: integer_to_quantity(max_number), hash_data: "0x0000000000000000000000000000000001000006"} diff --git a/apps/explorer/test/explorer/chain/cache/block_count_test.exs b/apps/explorer/test/explorer/chain/cache/block_count_test.exs index 646af8de43..108c929a75 100644 --- a/apps/explorer/test/explorer/chain/cache/block_count_test.exs +++ b/apps/explorer/test/explorer/chain/cache/block_count_test.exs @@ -3,53 +3,53 @@ defmodule Explorer.Chain.Cache.BlockCountTest do alias Explorer.Chain.Cache.BlockCount - test "returns default transaction count" do - BlockCount.start_link(name: BlockTestCache) + setup do + Supervisor.terminate_child(Explorer.Supervisor, BlockCount.child_id()) + Supervisor.restart_child(Explorer.Supervisor, BlockCount.child_id()) + :ok + end - result = BlockCount.count(BlockTestCache) + test "returns default transaction count" do + result = BlockCount.get_count() assert is_nil(result) end test "updates cache if initial value is zero" do - BlockCount.start_link(name: BlockTestCache) - insert(:block, consensus: true) insert(:block, consensus: true) insert(:block, consensus: false) - _result = BlockCount.count(BlockTestCache) + _result = BlockCount.get_count() Process.sleep(1000) - updated_value = BlockCount.count(BlockTestCache) + updated_value = BlockCount.get_count() assert updated_value == 2 end test "does not update cache if cache period did not pass" do - BlockCount.start_link(name: BlockTestCache) - insert(:block, consensus: true) insert(:block, consensus: true) insert(:block, consensus: false) - _result = BlockCount.count(BlockTestCache) + _result = BlockCount.get_count() Process.sleep(1000) - updated_value = BlockCount.count(BlockTestCache) + updated_value = BlockCount.get_count() assert updated_value == 2 insert(:block, consensus: true) insert(:block, consensus: true) - _updated_value = BlockCount.count(BlockTestCache) + _updated_value = BlockCount.get_count() Process.sleep(1000) - updated_value = BlockCount.count(BlockTestCache) + updated_value = BlockCount.get_count() assert updated_value == 2 end diff --git a/apps/explorer/test/explorer/chain/cache/block_number_test.exs b/apps/explorer/test/explorer/chain/cache/block_number_test.exs index 381ded440b..64170695eb 100644 --- a/apps/explorer/test/explorer/chain/cache/block_number_test.exs +++ b/apps/explorer/test/explorer/chain/cache/block_number_test.exs @@ -11,49 +11,63 @@ defmodule Explorer.Chain.Cache.BlockNumberTest do end) end - describe "max_number/1" do + describe "get_max/1" do test "returns max number" do insert(:block, number: 5) - BlockNumber.setup() - - assert BlockNumber.max_number() == 5 + assert BlockNumber.get_max() == 5 end end - describe "min_number/1" do - test "returns max number" do + describe "get_min/1" do + test "returns min number" do insert(:block, number: 2) - BlockNumber.setup() + assert BlockNumber.get_min() == 2 + end + end - assert BlockNumber.max_number() == 2 + describe "get_all/1" do + test "returns min and max number" do + insert(:block, number: 6) + + assert BlockNumber.get_all() == %{min: 6, max: 6} end end - describe "update/1" do + describe "update_all/1" do test "updates max number" do insert(:block, number: 2) - BlockNumber.setup() - - assert BlockNumber.max_number() == 2 + assert BlockNumber.get_max() == 2 - assert BlockNumber.update(3) + assert BlockNumber.update_all(3) - assert BlockNumber.max_number() == 3 + assert BlockNumber.get_max() == 3 end test "updates min number" do insert(:block, number: 2) - BlockNumber.setup() + assert BlockNumber.get_min() == 2 + + assert BlockNumber.update_all(1) + + assert BlockNumber.get_min() == 1 + end + + test "updates min and number" do + insert(:block, number: 2) + + assert BlockNumber.get_all() == %{min: 2, max: 2} + + assert BlockNumber.update_all(1) - assert BlockNumber.min_number() == 2 + assert BlockNumber.get_all() == %{min: 1, max: 2} - assert BlockNumber.update(1) + assert BlockNumber.update_all(6) - assert BlockNumber.min_number() == 1 + assert BlockNumber.get_all() == %{min: 1, max: 6} end end end diff --git a/apps/explorer/test/explorer/chain/cache/blocks_test.exs b/apps/explorer/test/explorer/chain/cache/blocks_test.exs index 87f887ae26..41fe344a1e 100644 --- a/apps/explorer/test/explorer/chain/cache/blocks_test.exs +++ b/apps/explorer/test/explorer/chain/cache/blocks_test.exs @@ -5,8 +5,8 @@ defmodule Explorer.Chain.Cache.BlocksTest do alias Explorer.Repo setup do - Supervisor.terminate_child(Explorer.Supervisor, {ConCache, :blocks}) - Supervisor.restart_child(Explorer.Supervisor, {ConCache, :blocks}) + Supervisor.terminate_child(Explorer.Supervisor, Blocks.child_id()) + Supervisor.restart_child(Explorer.Supervisor, Blocks.child_id()) :ok end diff --git a/apps/explorer/test/explorer/chain/cache/transaction_count_test.exs b/apps/explorer/test/explorer/chain/cache/transaction_count_test.exs index 5020486cb8..5385492de7 100644 --- a/apps/explorer/test/explorer/chain/cache/transaction_count_test.exs +++ b/apps/explorer/test/explorer/chain/cache/transaction_count_test.exs @@ -3,51 +3,51 @@ defmodule Explorer.Chain.Cache.TransactionCountTest do alias Explorer.Chain.Cache.TransactionCount - test "returns default transaction count" do - TransactionCount.start_link([[], [name: TestCache]]) + setup do + Supervisor.terminate_child(Explorer.Supervisor, TransactionCount.child_id()) + Supervisor.restart_child(Explorer.Supervisor, TransactionCount.child_id()) + :ok + end - result = TransactionCount.value(TestCache) + test "returns default transaction count" do + result = TransactionCount.get_count() assert is_nil(result) end test "updates cache if initial value is zero" do - TransactionCount.start_link([[], [name: TestCache]]) - insert(:transaction) insert(:transaction) - _result = TransactionCount.value(TestCache) + _result = TransactionCount.get_count() Process.sleep(1000) - updated_value = TransactionCount.value(TestCache) + updated_value = TransactionCount.get_count() assert updated_value == 2 end test "does not update cache if cache period did not pass" do - TransactionCount.start_link([[], [name: TestCache]]) - insert(:transaction) insert(:transaction) - _result = TransactionCount.value(TestCache) + _result = TransactionCount.get_count() Process.sleep(1000) - updated_value = TransactionCount.value(TestCache) + updated_value = TransactionCount.get_count() assert updated_value == 2 insert(:transaction) insert(:transaction) - _updated_value = TransactionCount.value(TestCache) + _updated_value = TransactionCount.get_count() Process.sleep(1000) - updated_value = TransactionCount.value(TestCache) + updated_value = TransactionCount.get_count() assert updated_value == 2 end diff --git a/apps/explorer/test/explorer/chain_test.exs b/apps/explorer/test/explorer/chain_test.exs index f49be6da4e..ee1b8ed987 100644 --- a/apps/explorer/test/explorer/chain_test.exs +++ b/apps/explorer/test/explorer/chain_test.exs @@ -1121,23 +1121,31 @@ defmodule Explorer.ChainTest do end end - describe "fetch_min_and_max_block_numbers/0" do - test "fetches min and max block numbers" do + describe "fetch_min_block_number/0" do + test "fetches min block numbers" do for index <- 5..9 do insert(:block, number: index) end - assert {5, 9} = Chain.fetch_min_and_max_block_numbers() + assert 5 = Chain.fetch_min_block_number() end - test "fetches min and max when there are no blocks" do - assert {0, 0} = Chain.fetch_min_and_max_block_numbers() + test "fetches min when there are no blocks" do + assert 0 = Chain.fetch_min_block_number() end + end - test "fetches min and max where there is only one block" do - insert(:block, number: 1) + describe "fetch_max_block_number/0" do + test "fetches max block numbers" do + for index <- 5..9 do + insert(:block, number: index) + end + + assert 9 = Chain.fetch_max_block_number() + end - assert {1, 1} = Chain.fetch_min_and_max_block_numbers() + test "fetches max when there are no blocks" do + assert 0 = Chain.fetch_max_block_number() end end diff --git a/apps/explorer/test/support/data_case.ex b/apps/explorer/test/support/data_case.ex index fa87839725..47c15bbca0 100644 --- a/apps/explorer/test/support/data_case.ex +++ b/apps/explorer/test/support/data_case.ex @@ -39,7 +39,8 @@ defmodule Explorer.DataCase do Ecto.Adapters.SQL.Sandbox.mode(Explorer.Repo, {:shared, self()}) end - Explorer.Chain.Cache.BlockNumber.setup() + Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.BlockNumber.child_id()) + Supervisor.restart_child(Explorer.Supervisor, Explorer.Chain.Cache.BlockNumber.child_id()) Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) Supervisor.restart_child(Explorer.Supervisor, Explorer.Chain.Cache.Blocks.child_id()) Supervisor.terminate_child(Explorer.Supervisor, Explorer.Chain.Cache.Transactions.child_id()) diff --git a/apps/indexer/lib/indexer/block/fetcher.ex b/apps/indexer/lib/indexer/block/fetcher.ex index a8b28d1391..28002f010a 100644 --- a/apps/indexer/lib/indexer/block/fetcher.ex +++ b/apps/indexer/lib/indexer/block/fetcher.ex @@ -184,11 +184,10 @@ defmodule Indexer.Block.Fetcher do end defp update_block_cache(blocks) when is_list(blocks) do - max_block = Enum.max_by(blocks, fn block -> block.number end) - min_block = Enum.min_by(blocks, fn block -> block.number end) + {min_block, max_block} = Enum.min_max_by(blocks, & &1.number) - BlockNumber.update(max_block.number) - BlockNumber.update(min_block.number) + BlockNumber.update_all(max_block.number) + BlockNumber.update_all(min_block.number) BlocksCache.update(blocks) end @@ -269,7 +268,7 @@ defmodule Indexer.Block.Fetcher do end def async_import_internal_transactions(%{transactions: transactions}, EthereumJSONRPC.Geth) do - {_, max_block_number} = Chain.fetch_min_and_max_block_numbers() + max_block_number = Chain.fetch_max_block_number() transactions |> Enum.flat_map(fn diff --git a/apps/indexer/lib/indexer/fetcher/coin_balance_on_demand.ex b/apps/indexer/lib/indexer/fetcher/coin_balance_on_demand.ex index 4dfed6e73a..d6d7d66d71 100644 --- a/apps/indexer/lib/indexer/fetcher/coin_balance_on_demand.ex +++ b/apps/indexer/lib/indexer/fetcher/coin_balance_on_demand.ex @@ -162,7 +162,7 @@ defmodule Indexer.Fetcher.CoinBalanceOnDemand do end defp latest_block_number do - BlockNumber.max_number() + BlockNumber.get_max() end defp stale_balance_window(block_number) do From 0aa3edab5914c8b9abba808f9e8cba80ab1cb597 Mon Sep 17 00:00:00 2001 From: pasqu4le Date: Tue, 27 Aug 2019 14:22:08 +0200 Subject: [PATCH 036/109] Execute all address' transactions page queries in parallel --- CHANGELOG.md | 1 + apps/explorer/lib/explorer/chain.ex | 76 +++++++++++++++---- .../chain/address_transaction_csv_exporter.ex | 5 +- .../lib/explorer/chain/transaction.ex | 44 ++++------- 4 files changed, 82 insertions(+), 44 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f8335319cb..6392632d70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2636](https://github.com/poanetwork/blockscout/pull/2636) - Execute all address' transactions page queries in parallel - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index 58253c0f27..f0374c5d3f 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -230,9 +230,8 @@ defmodule Explorer.Chain do Reward.fetch_emission_rewards_tuples(address_hash, paging_options) end) - address_hash - |> address_to_transactions_without_rewards(paging_options, options) - |> Enum.concat(Task.await(rewards_task, :timer.seconds(20))) + [rewards_task | address_to_transactions_tasks(address_hash, options)] + |> wait_for_address_transactions() |> Enum.sort_by(fn item -> case item do {%Reward{} = emission_reward, _} -> @@ -242,25 +241,76 @@ defmodule Explorer.Chain do {-item.block_number, -item.index} end end) + |> Enum.dedup_by(fn item -> + case item do + {%Reward{} = emission_reward, _} -> + {emission_reward.block_hash, emission_reward.address_hash, emission_reward.address_type} + + transaction -> + transaction.hash + end + end) |> Enum.take(paging_options.page_size) else - address_to_transactions_without_rewards(address_hash, paging_options, options) + address_to_transactions_without_rewards(address_hash, options) end end - def address_to_transactions_without_rewards(address_hash, paging_options, options) do + def address_to_transactions_without_rewards(address_hash, options) do + paging_options = Keyword.get(options, :paging_options, @default_paging_options) + + address_hash + |> address_to_transactions_tasks(options) + |> wait_for_address_transactions() + |> Enum.sort_by(&{&1.block_number, &1.index}, &>=/2) + |> Enum.dedup_by(& &1.hash) + |> Enum.take(paging_options.page_size) + end + + defp address_to_transactions_tasks(address_hash, options) do + paging_options = Keyword.get(options, :paging_options, @default_paging_options) direction = Keyword.get(options, :direction) necessity_by_association = Keyword.get(options, :necessity_by_association, %{}) - transaction_hashes_from_token_transfers = - TokenTransfer.where_any_address_fields_match(direction, address_hash, paging_options) + base_query = + paging_options + |> fetch_transactions() + |> join_associations(necessity_by_association) + |> Transaction.preload_token_transfers(address_hash) - paging_options - |> fetch_transactions() - |> Transaction.where_transaction_matches(transaction_hashes_from_token_transfers, direction, address_hash) - |> join_associations(necessity_by_association) - |> Transaction.preload_token_transfers(address_hash) - |> Repo.all() + direction_tasks = + base_query + |> Transaction.matching_address_queries_list(direction, address_hash) + |> Enum.map(fn query -> Task.async(fn -> Repo.all(query) end) end) + + token_transfers_task = + Task.async(fn -> + transaction_hashes_from_token_transfers = + TokenTransfer.where_any_address_fields_match(direction, address_hash, paging_options) + + final_query = where(base_query, [t], t.hash in ^transaction_hashes_from_token_transfers) + + Repo.all(final_query) + end) + + [token_transfers_task | direction_tasks] + end + + defp wait_for_address_transactions(tasks) do + tasks + |> Task.yield_many(:timer.seconds(20)) + |> Enum.flat_map(fn {_task, res} -> + case res do + {:ok, result} -> + result + + {:exit, reason} -> + raise "Query fetching address transactions terminated: #{inspect(reason)}" + + nil -> + raise "Query fetching address transactions timed out." + end + end) end @spec address_to_logs(Hash.Address.t(), Keyword.t()) :: [Log.t()] diff --git a/apps/explorer/lib/explorer/chain/address_transaction_csv_exporter.ex b/apps/explorer/lib/explorer/chain/address_transaction_csv_exporter.ex index 0196de3bc0..d608cc55e3 100644 --- a/apps/explorer/lib/explorer/chain/address_transaction_csv_exporter.ex +++ b/apps/explorer/lib/explorer/chain/address_transaction_csv_exporter.ex @@ -42,8 +42,9 @@ defmodule Explorer.Chain.AddressTransactionCsvExporter do end defp fetch_all_transactions(address_hash, paging_options, acc \\ []) do - transactions = - Chain.address_to_transactions_without_rewards(address_hash, paging_options, @necessity_by_association) + options = Keyword.put(@necessity_by_association, :paging_options, paging_options) + + transactions = Chain.address_to_transactions_without_rewards(address_hash, options) new_acc = transactions ++ acc diff --git a/apps/explorer/lib/explorer/chain/transaction.ex b/apps/explorer/lib/explorer/chain/transaction.ex index 78d162fa4e..1274202bd5 100644 --- a/apps/explorer/lib/explorer/chain/transaction.ex +++ b/apps/explorer/lib/explorer/chain/transaction.ex @@ -484,40 +484,26 @@ defmodule Explorer.Chain.Transaction do end @doc """ - Modifies a query to filter for transactions whose hash is in a list or that are - linked to the given address_hash through a direction. - - Be careful to not pass a large list, because this will lead to performance - problems. + Produces a list of queries starting from the given one and adding filters for + transactions that are linked to the given address_hash through a direction. """ - def where_transaction_matches(query, transaction_hashes, :from, address_hash) do - where( - query, - [t], - t.hash in ^transaction_hashes or - t.from_address_hash == ^address_hash - ) + def matching_address_queries_list(query, :from, address_hash) do + [where(query, [t], t.from_address_hash == ^address_hash)] end - def where_transaction_matches(query, transaction_hashes, :to, address_hash) do - where( - query, - [t], - t.hash in ^transaction_hashes or - t.to_address_hash == ^address_hash or - t.created_contract_address_hash == ^address_hash - ) + def matching_address_queries_list(query, :to, address_hash) do + [ + where(query, [t], t.to_address_hash == ^address_hash), + where(query, [t], t.created_contract_address_hash == ^address_hash) + ] end - def where_transaction_matches(query, transaction_hashes, _direction, address_hash) do - where( - query, - [t], - t.hash in ^transaction_hashes or - t.from_address_hash == ^address_hash or - t.to_address_hash == ^address_hash or - t.created_contract_address_hash == ^address_hash - ) + def matching_address_queries_list(query, _direction, address_hash) do + [ + where(query, [t], t.from_address_hash == ^address_hash), + where(query, [t], t.to_address_hash == ^address_hash), + where(query, [t], t.created_contract_address_hash == ^address_hash) + ] end @collated_fields ~w(block_number cumulative_gas_used gas_used index)a From a89f96944eed7911406a7c39b0f8f80f605230df Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 10:25:57 +0300 Subject: [PATCH 037/109] update env-vars doc file --- docs/env-variables.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/env-variables.md b/docs/env-variables.md index e79dd4473f..8a1165839f 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -54,8 +54,8 @@ $ export NETWORK=POA | `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | -| `EMISSION_FORMAT` | | Should be set to `POA` if you have block emission indentical to POA Network. This env var is used only if `CHAIN_SPEC_PATH` is set | `STANDARD` | master -| `REWARDS_CONTRACT_ADDRESS` | | Emission rewards contract address. This env var is used only if `EMISSION_FORMAT` is set to `POA` | `0xeca443e8e1ab29971a45a9c57a6a9875701698a5` | master +| `EMISSION_FORMAT` | | Should be set to `POA` if you have block emission indentical to POA Network. This env var is used only if `CHAIN_SPEC_PATH` is set | `STANDARD` | master | +| `REWARDS_CONTRACT_ADDRESS` | | Emission rewards contract address. This env var is used only if `EMISSION_FORMAT` is set to `POA` | `0xeca443e8e1ab29971a45a9c57a6a9875701698a5` | master | | `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | From 4b9ef3dad3580fe529b60a01be716ab7a9d2476f Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 11:18:19 +0300 Subject: [PATCH 038/109] parse decimal data from genesis chain spec --- .../lib/explorer/chain_spec/parity/importer.ex | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex index a1f620ec6c..fa16ee0739 100644 --- a/apps/explorer/lib/explorer/chain_spec/parity/importer.ex +++ b/apps/explorer/lib/explorer/chain_spec/parity/importer.ex @@ -57,6 +57,8 @@ defmodule Explorer.ChainSpec.Parity.Importer do parse_accounts(accounts) else Logger.warn(fn -> "No accounts are defined in chain spec" end) + + [] end end @@ -69,6 +71,8 @@ defmodule Explorer.ChainSpec.Parity.Importer do |> format_ranges() else Logger.warn(fn -> "No rewards are defined in chain spec" end) + + [] end end @@ -79,7 +83,7 @@ defmodule Explorer.ChainSpec.Parity.Importer do end) |> Stream.map(fn {address, %{"balance" => value}} -> {:ok, address_hash} = AddressHash.cast(address) - balance = parse_hex_number(value) + balance = parse_number(value) %{address_hash: address_hash, value: balance} end) @@ -112,16 +116,22 @@ defmodule Explorer.ChainSpec.Parity.Importer do defp parse_hex_numbers(rewards) do Enum.map(rewards, fn {hex_block_number, hex_reward} -> - block_number = parse_hex_number(hex_block_number) - {:ok, reward} = hex_reward |> parse_hex_number() |> Wei.cast() + block_number = parse_number(hex_block_number) + {:ok, reward} = hex_reward |> parse_number() |> Wei.cast() {block_number, reward} end) end - defp parse_hex_number("0x" <> hex_number) do + defp parse_number("0x" <> hex_number) do {number, ""} = Integer.parse(hex_number, 16) number end + + defp parse_number(string_number) do + {number, ""} = Integer.parse(string_number, 10) + + number + end end From 372fb0d51d6e2e43a0ea3df6249de3e3026fd498 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 12:57:01 +0300 Subject: [PATCH 039/109] remove CoinMarketCap logic --- apps/explorer/config/config.exs | 3 - .../lib/explorer/exchange_rates/source.ex | 25 +------- .../exchange_rates/source/coin_market_cap.ex | 52 ---------------- .../exchange_rates/source/token_bridge.ex | 2 +- .../source/coin_market_cap_test.exs | 59 ------------------- 5 files changed, 2 insertions(+), 139 deletions(-) delete mode 100644 apps/explorer/lib/explorer/exchange_rates/source/coin_market_cap.ex delete mode 100644 apps/explorer/test/explorer/exchange_rates/source/coin_market_cap_test.exs diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 39307741cd..10e8a66e82 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -31,9 +31,6 @@ config :explorer, Explorer.ChainSpec.GenesisData, enabled: false, chain_spec_pat config :explorer, Explorer.Chain.Cache.BlockNumber, enabled: true -config :explorer, Explorer.ExchangeRates.Source.CoinMarketCap, - pages: String.to_integer(System.get_env("COINMARKETCAP_PAGES") || "10") - config :explorer, Explorer.ExchangeRates.Source.CoinGecko, coin_id: System.get_env("COIN_GECKO_ID", "poa-network") balances_update_interval = diff --git a/apps/explorer/lib/explorer/exchange_rates/source.ex b/apps/explorer/lib/explorer/exchange_rates/source.ex index 6d95e48796..fdb0e06fc3 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source.ex @@ -2,8 +2,6 @@ defmodule Explorer.ExchangeRates.Source do @moduledoc """ Behaviour for fetching exchange rates from external sources. """ - - alias Explorer.ExchangeRates.Source.CoinMarketCap alias Explorer.ExchangeRates.Token alias HTTPoison.{Error, Response} @@ -12,28 +10,7 @@ defmodule Explorer.ExchangeRates.Source do """ @spec fetch_exchange_rates(module) :: {:ok, [Token.t()]} | {:error, any} def fetch_exchange_rates(source \\ exchange_rates_source()) do - if(source == CoinMarketCap) do - fetch_exchange_rates_from_paginable_source(source) - else - fetch_exchange_rates_request(source) - end - end - - defp fetch_exchange_rates_from_paginable_source(source, page \\ 1) do - case HTTPoison.get(source.source_url(page), headers()) do - {:ok, %Response{body: body, status_code: 200}} -> - cond do - body =~ Explorer.coin() -> {:ok, source.format_data(body)} - page == source.max_page_number -> {:error, "exchange rates not found for this network"} - true -> fetch_exchange_rates_from_paginable_source(source, page + 1) - end - - {:ok, %Response{body: body, status_code: status_code}} when status_code in 400..502 -> - {:error, decode_json(body)["error"]} - - {:error, %Error{reason: reason}} -> - {:error, reason} - end + fetch_exchange_rates_request(source) end defp fetch_exchange_rates_request(source) do diff --git a/apps/explorer/lib/explorer/exchange_rates/source/coin_market_cap.ex b/apps/explorer/lib/explorer/exchange_rates/source/coin_market_cap.ex deleted file mode 100644 index efe592e0fa..0000000000 --- a/apps/explorer/lib/explorer/exchange_rates/source/coin_market_cap.ex +++ /dev/null @@ -1,52 +0,0 @@ -defmodule Explorer.ExchangeRates.Source.CoinMarketCap do - @moduledoc """ - Adapter for fetching exchange rates from https://coinmarketcap.com. - """ - - alias Explorer.ExchangeRates.{Source, Token} - - import Source, only: [decode_json: 1, to_decimal: 1] - - @behaviour Source - - @impl Source - def format_data(data) do - for item <- decode_json(data), not is_nil(item["last_updated"]) do - {last_updated_as_unix, _} = Integer.parse(item["last_updated"]) - last_updated = DateTime.from_unix!(last_updated_as_unix) - - %Token{ - available_supply: to_decimal(item["available_supply"]), - total_supply: to_decimal(item["total_supply"]), - btc_value: to_decimal(item["price_btc"]), - id: item["id"], - last_updated: last_updated, - market_cap_usd: to_decimal(item["market_cap_usd"]), - name: item["name"], - symbol: item["symbol"], - usd_value: to_decimal(item["price_usd"]), - volume_24h_usd: to_decimal(item["24h_volume_usd"]) - } - end - end - - @impl Source - def source_url do - source_url(1) - end - - def source_url(page) do - "#{base_url()}/v1/ticker/?start=#{page - 1}00" - end - - def max_page_number, do: config(:pages) - - defp base_url do - config(:base_url) || "https://api.coinmarketcap.com" - end - - @spec config(atom()) :: term - defp config(key) do - Application.get_env(:explorer, __MODULE__, [])[key] - end -end diff --git a/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex b/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex index 03234ff649..531e3ab181 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex @@ -45,7 +45,7 @@ defmodule Explorer.ExchangeRates.Source.TokenBridge do @spec secondary_source() :: module() defp secondary_source do - config(:secondary_source) || Explorer.ExchangeRates.Source.CoinMarketCap + config(:secondary_source) || Explorer.ExchangeRates.Source.CoinGecko end @spec config(atom()) :: term diff --git a/apps/explorer/test/explorer/exchange_rates/source/coin_market_cap_test.exs b/apps/explorer/test/explorer/exchange_rates/source/coin_market_cap_test.exs deleted file mode 100644 index e0f1693212..0000000000 --- a/apps/explorer/test/explorer/exchange_rates/source/coin_market_cap_test.exs +++ /dev/null @@ -1,59 +0,0 @@ -defmodule Explorer.ExchangeRates.Source.CoinMarketCapTest do - use ExUnit.Case - - alias Explorer.ExchangeRates.Token - alias Explorer.ExchangeRates.Source.CoinMarketCap - - @json """ - [ - { - "id": "poa-network", - "name": "POA Network", - "symbol": "POA", - "rank": "103", - "price_usd": "0.485053", - "price_btc": "0.00007032", - "24h_volume_usd": "20185000.0", - "market_cap_usd": "98941986.0", - "available_supply": "203981804.0", - "total_supply": "254473964.0", - "max_supply": null, - "percent_change_1h": "-0.66", - "percent_change_24h": "12.34", - "percent_change_7d": "49.15", - "last_updated": "1523473200" - } - ] - """ - - describe "format_data/1" do - test "returns valid tokens with valid data" do - expected_date = ~N[2018-04-11 19:00:00] |> DateTime.from_naive!("Etc/UTC") - - expected = [ - %Token{ - available_supply: Decimal.new("203981804.0"), - total_supply: Decimal.new("254473964.0"), - btc_value: Decimal.new("0.00007032"), - id: "poa-network", - last_updated: expected_date, - market_cap_usd: Decimal.new("98941986.0"), - name: "POA Network", - symbol: "POA", - usd_value: Decimal.new("0.485053"), - volume_24h_usd: Decimal.new("20185000.0") - } - ] - - assert expected == CoinMarketCap.format_data(@json) - end - - test "returns nothing when given bad data" do - bad_data = """ - [{"id": "poa-network"}] - """ - - assert [] = CoinMarketCap.format_data(bad_data) - end - end -end From 56bb2018fb4cde594adc425217479095db91eb86 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 13:15:22 +0300 Subject: [PATCH 040/109] fix test --- .../exchange_rates/source/token_bridge.ex | 10 +++++++- .../source/token_bridge_test.exs | 24 +++---------------- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex b/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex index 531e3ab181..aa2b849a11 100644 --- a/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex +++ b/apps/explorer/lib/explorer/exchange_rates/source/token_bridge.ex @@ -30,7 +30,7 @@ defmodule Explorer.ExchangeRates.Source.TokenBridge do btc_value: original_token.btc_value, id: original_token.id, last_updated: original_token.last_updated, - market_cap_usd: Decimal.mult(to_decimal(Chain.circulating_supply()), original_token.usd_value), + market_cap_usd: market_cap_usd(Chain.circulating_supply(), original_token), name: original_token.name, symbol: original_token.symbol, usd_value: original_token.usd_value, @@ -38,6 +38,14 @@ defmodule Explorer.ExchangeRates.Source.TokenBridge do } end + defp market_cap_usd(nil, _original_token), do: Decimal.new(0) + + defp market_cap_usd(supply, original_token) do + supply + |> to_decimal() + |> Decimal.mult(original_token.usd_value) + end + @impl Source def source_url do secondary_source().source_url() diff --git a/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs b/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs index d5bd5f9b96..078c280fda 100644 --- a/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs +++ b/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs @@ -3,27 +3,9 @@ defmodule Explorer.ExchangeRates.Source.TokenBridgeTest do alias Explorer.ExchangeRates.Source.TokenBridge alias Explorer.ExchangeRates.Token - @json """ - [ - { - "id": "poa-network", - "name": "POA Network", - "symbol": "POA", - "rank": "103", - "price_usd": "0.485053", - "price_btc": "0.00007032", - "24h_volume_usd": "20185000.0", - "market_cap_usd": "98941986.0", - "available_supply": "203981804.0", - "total_supply": "254473964.0", - "max_supply": null, - "percent_change_1h": "-0.66", - "percent_change_24h": "12.34", - "percent_change_7d": "49.15", - "last_updated": "1523473200" - } - ] - """ + @json "#{File.cwd!()}/test/support/fixture/exchange_rates/coin_gecko.json" + |> File.read!() + |> Jason.decode!() describe "format_data/1" do test "bring a list with one %Token{}" do From 9bd5ea52710b2b3bc1d5839e27e3c011fc10d630 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 13:20:44 +0300 Subject: [PATCH 041/109] add new column to env vars --- docs/env-variables.md | 104 +++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/docs/env-variables.md b/docs/env-variables.md index 2b4f767f13..2dc8763b8d 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -14,55 +14,55 @@ $ export NETWORK=POA ``` -| Variable | Required | Description | Default | Version | Need recompile | -| --- | --- | --- | ---| --- | --- | -| `NETWORK`| :white_check_mark: | Environment variable for the main EVM network such as Ethereum Network or POA Network | POA Network | all | | -| `SUBNETWORK` | :white_check_mark: | Environment variable for the subnetwork such as Core or Sokol Network | Sokol Testnet | all | | -| `NETWORK_ICON` | :white_check_mark: | Environment variable for the main network icon or testnet icon. Two options are `_test_network_icon.html` and `_network_icon.html` | `_test_network_icon.html` | all | | -| `LOGO` | :white_check_mark: | Environment variable for the logo image location. The logo files names for different chains can be found [here](https://github.com/poanetwork/blockscout/tree/master/apps/block_scout_web/assets/static/images) | /images/blockscout_logo.svg | all | | -| `ETHEREUM_JSONRPC_VARIANT` | :white_check_mark: | This environment variable is used to tell the application which RPC Client the node is using (i.e. Geth, Parity, or Ganache) | parity | all | | -| `ETHEREUM_JSONRPC_HTTP_URL` | :white_check_mark: | The RPC endpoint used to fetch blocks, transactions, receipts, tokens. | localhost:8545 | all | | -| `ETHEREUM_JSONRPC_TRACE_URL` | | The RPC endpoint specifically for the Geth/Parity client used by trace_block and trace_replayTransaction. This can be used to designate a tracing node. | localhost:8545 | all | | -| `ETHEREUM_JSONRPC_WS_URL` | :white_check_mark: | The WebSockets RPC endpoint used to subscribe to the `newHeads` subscription alerting the indexer to fetch new blocks. | ws://localhost:8546 | all | | -| `NETWORK_PATH` | | Used to set a network path other than what is displayed in the root directory. An example would be to add /eth/mainnet/ to the root directory. | (empty) | all | | -| `SECRET_KEY_BASE` | :white_check_mark: | Use mix phx.gen.secret to generate a new Secret Key Base string to protect production assets. | (empty) | all | | -| `CHECK_ORIGIN` | | Used to check the origin of requests when the origin header is present. It defaults to false. In case of true, it will check against the host value. | false | all | | -| `PORT` | :white_check_mark: | Default port the application runs on is 4000 | 4000 | all | | -| `COIN` | :white_check_mark: | The coin here is checked via the Coinmarketcap API to obtain USD prices on graphs and other areas of the UI | POA | all | | -| `METADATA_CONTRACT` | | This environment variable is specifically used by POA Network to obtain Validators information to display in the UI. | (empty) | all | | -| `VALIDATORS_CONTRACT` | | This environment variable is specifically used by POA Network to obtain the Emission Fund contract. | (empty) | all | | -| `SUPPLY_MODULE` | | This environment variable is used by the xDai Chain in order to tell the application how to calculate the total supply of the chain. | false | all | | -| `SOURCE_MODULE` | | This environment variable is used to calculate the exchange rate and is specifically used by the xDai Chain. | false | all | | -| `DATABASE_URL` | | Production environment variable to define the Database endpoint. | (empty) | all | | -| `POOL_SIZE` | | Production environment variable to define the number of database connections allowed. | 20 | all | | -| `ECTO_USE_SSL` | | Production environment variable to use SSL on Ecto queries. | true | all | | -| `DATADOG_HOST` | | Host configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/) | (empty) | all | | -| `DATADOG_PORT` | | Port configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/). | (empty} | all | | -| `SPANDEX_BATCH_SIZE` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | -| `SPANDEX_SYNC_THRESHOLD` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | | -| `HEART_BEAT_TIMEOUT` | | Production environment variable to restart the application in the event of a crash. | 30 | all | | -| `HEART_COMMAND` | | Production environment variable to restart the application in the event of a crash. | systemctl restart explorer.service | all | | -| `BLOCKSCOUT_VERSION` | | Added to the footer to signify the current BlockScout version. | (empty) | v1.3.4+ | | -| `RELEASE_LINK` | | The link to Blockscout release notes in the footer. | https: //github.com/poanetwork/
blockscout/releases/
tag/${BLOCKSCOUT_VERSION} | v1.3.5+ | | -| `ELIXIR_VERSION` | | Elixir version to install on the node before Blockscout deploy. | (empty) | all | | -| `BLOCK_TRANSFORMER` | | Transformer for blocks: base or clique. | base | v1.3.4+ | | -| `GRAPHIQL_TRANSACTION` | | Default transaction in query to GraphiQL. | (empty) | v1.2.0+ | :white_check_mark: | -| `FIRST_BLOCK` | | The block number, where indexing begins from. | 0 | v1.3.8+ | | -| `LAST_BLOCK` | | The block number, where indexing stops. | (empty) | v2.0.3+ | | -| `TXS_COUNT_CACHE_PERIOD` | | Interval in seconds to restart the task, which calculates the total txs count. | 60 * 60 * 2 | v1.3.9+ | | -| `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | | -| `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | -| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | -| `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | -| `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | -| `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | | -| `AVERAGE_BLOCK_CACHE_PERIOD` | | Update of average block cache, in seconds | 30 minutes | v2.0.2+ | -| `MARKET_HISTORY_CACHE_PERIOD` | | Update of market history cache, in seconds | 6 hours | v2.0.2+ | -| `DISABLE_WEBAPP` | | If `true`, endpoints to webapp are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | -| `DISABLE_READ_API` | | If `true`, read-only endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | -| `DISABLE_WRITE_API` | | If `true`, write endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | -| `DISABLE_INDEXER` | | If `true`, indexer application doesn't run | `false` | v2.0.3+ | :white_check_mark: | -| `WEBAPP_URL` | | Link to web application instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | -| `API_URL` | | Link to API instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | -| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | | -| `COIN_GECKO_ID` | | CoinGecko coin id required for fetching an exchange rate | poa-network | master | \ No newline at end of file +| Variable | Required | Description | Default | Version | Need recompile | Deprecated in Version | +| --- | --- | --- | ---| --- | --- | --- | +| `NETWORK`| :white_check_mark: | Environment variable for the main EVM network such as Ethereum Network or POA Network | POA Network | all | | | +| `SUBNETWORK` | :white_check_mark: | Environment variable for the subnetwork such as Core or Sokol Network | Sokol Testnet | all | | | +| `NETWORK_ICON` | :white_check_mark: | Environment variable for the main network icon or testnet icon. Two options are `_test_network_icon.html` and `_network_icon.html` | `_test_network_icon.html` | all | | | +| `LOGO` | :white_check_mark: | Environment variable for the logo image location. The logo files names for different chains can be found [here](https://github.com/poanetwork/blockscout/tree/master/apps/block_scout_web/assets/static/images) | /images/blockscout_logo.svg | all | | | +| `ETHEREUM_JSONRPC_VARIANT` | :white_check_mark: | This environment variable is used to tell the application which RPC Client the node is using (i.e. Geth, Parity, or Ganache) | parity | all | | | +| `ETHEREUM_JSONRPC_HTTP_URL` | :white_check_mark: | The RPC endpoint used to fetch blocks, transactions, receipts, tokens. | localhost:8545 | all | | | +| `ETHEREUM_JSONRPC_TRACE_URL` | | The RPC endpoint specifically for the Geth/Parity client used by trace_block and trace_replayTransaction. This can be used to designate a tracing node. | localhost:8545 | all | | | +| `ETHEREUM_JSONRPC_WS_URL` | :white_check_mark: | The WebSockets RPC endpoint used to subscribe to the `newHeads` subscription alerting the indexer to fetch new blocks. | ws://localhost:8546 | all | | | +| `NETWORK_PATH` | | Used to set a network path other than what is displayed in the root directory. An example would be to add /eth/mainnet/ to the root directory. | (empty) | all | | | +| `SECRET_KEY_BASE` | :white_check_mark: | Use mix phx.gen.secret to generate a new Secret Key Base string to protect production assets. | (empty) | all | | | +| `CHECK_ORIGIN` | | Used to check the origin of requests when the origin header is present. It defaults to false. In case of true, it will check against the host value. | false | all | | | +| `PORT` | :white_check_mark: | Default port the application runs on is 4000 | 4000 | all | | | +| `COIN` | :white_check_mark: | The coin here is checked via the Coinmarketcap API to obtain USD prices on graphs and other areas of the UI | POA | all | | | +| `METADATA_CONTRACT` | | This environment variable is specifically used by POA Network to obtain Validators information to display in the UI. | (empty) | all | | | +| `VALIDATORS_CONTRACT` | | This environment variable is specifically used by POA Network to obtain the Emission Fund contract. | (empty) | all | | | +| `SUPPLY_MODULE` | | This environment variable is used by the xDai Chain in order to tell the application how to calculate the total supply of the chain. | false | all | | | +| `SOURCE_MODULE` | | This environment variable is used to calculate the exchange rate and is specifically used by the xDai Chain. | false | all | | | +| `DATABASE_URL` | | Production environment variable to define the Database endpoint. | (empty) | all | | | +| `POOL_SIZE` | | Production environment variable to define the number of database connections allowed. | 20 | all | | | +| `ECTO_USE_SSL` | | Production environment variable to use SSL on Ecto queries. | true | all | | | +| `DATADOG_HOST` | | Host configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/) | (empty) | all | | | +| `DATADOG_PORT` | | Port configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/). | (empty} | all | | | +| `SPANDEX_BATCH_SIZE` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | | +| `SPANDEX_SYNC_THRESHOLD` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | | | +| `HEART_BEAT_TIMEOUT` | | Production environment variable to restart the application in the event of a crash. | 30 | all | | | +| `HEART_COMMAND` | | Production environment variable to restart the application in the event of a crash. | systemctl restart explorer.service | all | | | +| `BLOCKSCOUT_VERSION` | | Added to the footer to signify the current BlockScout version. | (empty) | v1.3.4+ | | | +| `RELEASE_LINK` | | The link to Blockscout release notes in the footer. | https: //github.com/poanetwork/
blockscout/releases/
tag/${BLOCKSCOUT_VERSION} | v1.3.5+ | | | +| `ELIXIR_VERSION` | | Elixir version to install on the node before Blockscout deploy. | (empty) | all | | | +| `BLOCK_TRANSFORMER` | | Transformer for blocks: base or clique. | base | v1.3.4+ | | | +| `GRAPHIQL_TRANSACTION` | | Default transaction in query to GraphiQL. | (empty) | v1.2.0+ | :white_check_mark: | | +| `FIRST_BLOCK` | | The block number, where indexing begins from. | 0 | v1.3.8+ | | | +| `LAST_BLOCK` | | The block number, where indexing stops. | (empty) | v2.0.3+ | | | +| `TXS_COUNT_CACHE_PERIOD` | | Interval in seconds to restart the task, which calculates the total txs count. | 60 * 60 * 2 | v1.3.9+ | | | +| `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | | | +| `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | | +| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | master | +| `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | | +| `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | | +| `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | | | +| `AVERAGE_BLOCK_CACHE_PERIOD` | | Update of average block cache, in seconds | 30 minutes | v2.0.2+ | | +| `MARKET_HISTORY_CACHE_PERIOD` | | Update of market history cache, in seconds | 6 hours | v2.0.2+ | | +| `DISABLE_WEBAPP` | | If `true`, endpoints to webapp are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | | +| `DISABLE_READ_API` | | If `true`, read-only endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | | +| `DISABLE_WRITE_API` | | If `true`, write endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | | +| `DISABLE_INDEXER` | | If `true`, indexer application doesn't run | `false` | v2.0.3+ | :white_check_mark: | | +| `WEBAPP_URL` | | Link to web application instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | | +| `API_URL` | | Link to API instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | | +| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | | | +| `COIN_GECKO_ID` | | CoinGecko coin id required for fetching an exchange rate | poa-network | master | | | From e40786a9bbec5212e884d3eec53bb93637ff5881 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 13:32:12 +0300 Subject: [PATCH 042/109] mock actual request --- .../source/token_bridge_test.exs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs b/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs index 078c280fda..febb9e7722 100644 --- a/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs +++ b/apps/explorer/test/explorer/exchange_rates/source/token_bridge_test.exs @@ -1,14 +1,41 @@ defmodule Explorer.ExchangeRates.Source.TokenBridgeTest do use Explorer.DataCase + + alias Explorer.ExchangeRates.Source.CoinGecko alias Explorer.ExchangeRates.Source.TokenBridge alias Explorer.ExchangeRates.Token + alias Plug.Conn @json "#{File.cwd!()}/test/support/fixture/exchange_rates/coin_gecko.json" |> File.read!() |> Jason.decode!() + @json_btc_price """ + { + "rates": { + "usd": { + "name": "US Dollar", + "unit": "$", + "value": 6547.418, + "type": "fiat" + } + } + } + """ + describe "format_data/1" do - test "bring a list with one %Token{}" do + setup do + bypass = Bypass.open() + Application.put_env(:explorer, CoinGecko, base_url: "http://localhost:#{bypass.port}") + + {:ok, bypass: bypass} + end + + test "bring a list with one %Token{}", %{bypass: bypass} do + Bypass.expect(bypass, "GET", "/exchange_rates", fn conn -> + Conn.resp(conn, 200, @json_btc_price) + end) + assert [%Token{}] = TokenBridge.format_data(@json) end end From 2db7702cef68d187a1662cdf8457aacaed066a6a Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 28 Aug 2019 14:29:58 +0300 Subject: [PATCH 043/109] Add scheme in api base url --- .../templates/api_docs/eth_rpc.html.eex | 2 +- .../templates/api_docs/index.html.eex | 2 +- .../block_scout_web/views/api_docs_view.ex | 26 ++++---- .../views/api_docs_view_test.exs | 64 +++++++++++++------ 4 files changed, 58 insertions(+), 36 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex index 7b8a9a98de..ad27e68185 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex @@ -2,7 +2,7 @@

<%= gettext("ETH RPC API Documentation") %>

-

[ <%= gettext "Base URL:" %> <%= eth_rpc_api_url()%> ]

+

[ <%= gettext "Base URL:" %> <%= eth_rpc_api_url(with_scheme: true)%> ]

<%= gettext "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " %> diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex index 59dae38cdb..10ff5a6c27 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex @@ -2,7 +2,7 @@

<%= gettext("API Documentation") %>

-

[ <%= gettext "Base URL:" %> <%= api_url()%> ]

+

[ <%= gettext "Base URL:" %> <%= api_url(with_scheme: true)%> ]

<%= 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/views/api_docs_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex index 6f731d3627..c30364e96b 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 @@ -34,30 +34,30 @@ defmodule BlockScoutWeb.APIDocsView do end) end - def blockscout_url do + defp blockscout_url(opts) do url_params = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:url] host = url_params[:host] path = url_params[:path] + scheme = + if Keyword.get(opts, :with_scheme, false) do + url_params[:scheme] <> "://" + end if host != "localhost" do - "#{host}#{path}" + "#{scheme}#{host}#{path}" else port = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:http][:port] - "#{host}:#{to_string(port)}" + "#{scheme}#{host}:#{to_string(port)}" end end - def api_url do - handle_slash("api") + def api_url(opts \\ []) do + base_url = blockscout_url(opts) + Path.join(base_url, "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) + def eth_rpc_api_url(opts \\ []) do + base_url = blockscout_url(opts) + Path.join(base_url, "api/eth_rpc") end end 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 69be27ef09..bd2bb6cd05 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 @@ -3,7 +3,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do alias BlockScoutWeb.APIDocsView - describe "blockscout_url/0" do + describe "api_url/1" do setup do original = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint) @@ -12,46 +12,44 @@ defmodule BlockScoutWeb.ApiDocsViewTest do :ok end - test "returns url with scheme and host without port" do + test "adds slash before path" do Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/"] + url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"] ) - assert APIDocsView.blockscout_url() == "blockscout.com/" + assert APIDocsView.api_url() == "blockscout.com/chain/dog/api" end - test "returns url with scheme and host with path" do + 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: "/chain/dog"] + url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] ) - assert APIDocsView.blockscout_url() == "blockscout.com/chain/dog" + assert APIDocsView.api_url() == "blockscout.com/api" end - end - describe "api_url/1" do - setup do - original = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint) - - on_exit(fn -> Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, original) end) + test "path with schems" do + Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, + url: [scheme: "https", host: "blockscout.com", port: 9999] + ) - :ok - end + assert APIDocsView.api_url(with_scheme: true) == "https://blockscout.com/api" - 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"] + url: [scheme: "http", host: "blockscout.com", port: 9999] ) - assert APIDocsView.api_url() == "blockscout.com/chain/dog/api" + assert APIDocsView.api_url(with_scheme: true) == "http://blockscout.com/api" end - test "does not add slash to empty path" do + test "localhost return with port" do Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] + url: [scheme: "http", host: "localhost"], + http: [port: 9999] ) - assert APIDocsView.api_url() == "blockscout.com/api" + assert APIDocsView.api_url() == "localhost:9999/api" + assert APIDocsView.api_url(with_scheme: true) == "http://localhost:9999/api" end end @@ -79,5 +77,29 @@ defmodule BlockScoutWeb.ApiDocsViewTest do assert APIDocsView.eth_rpc_api_url() == "blockscout.com/api/eth_rpc" end + + test "path with schems" do + Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, + url: [scheme: "https", host: "blockscout.com", port: 9999] + ) + + assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "https://blockscout.com/api/eth_rpc" + + Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, + url: [scheme: "http", host: "blockscout.com", port: 9999] + ) + + assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "http://blockscout.com/api/eth_rpc" + end + + test "localhost return with port" do + Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, + url: [scheme: "http", host: "localhost"], + http: [port: 9999] + ) + + assert APIDocsView.eth_rpc_api_url() == "localhost:9999/api/eth_rpc" + assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "http://localhost:9999/api/eth_rpc" + end end end From aabb0069405954d98f2ccb73d29428d5fec9233d Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 28 Aug 2019 14:36:36 +0300 Subject: [PATCH 044/109] Add host in an example of curl request --- apps/block_scout_web/assets/js/lib/try_eth_api.js | 3 ++- .../block_scout_web/lib/block_scout_web/views/api_docs_view.ex | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/block_scout_web/assets/js/lib/try_eth_api.js b/apps/block_scout_web/assets/js/lib/try_eth_api.js index 464229885d..8f81f852ec 100644 --- a/apps/block_scout_web/assets/js/lib/try_eth_api.js +++ b/apps/block_scout_web/assets/js/lib/try_eth_api.js @@ -1,7 +1,8 @@ import $ from 'jquery' function composeCurlCommand (data) { - return `curl -H "content-type: application/json" -X POST --data '${JSON.stringify(data)}'` + const url = $('[data-endpoint-url]').attr('data-endpoint-url') + return `curl ${url} -H "content-type: application/json" -X POST --data '${JSON.stringify(data)}'` } function handleResponse (data, xhr, clickedButton) { 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 c30364e96b..a9b816abb9 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 @@ -38,6 +38,7 @@ defmodule BlockScoutWeb.APIDocsView do url_params = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:url] host = url_params[:host] path = url_params[:path] + scheme = if Keyword.get(opts, :with_scheme, false) do url_params[:scheme] <> "://" From d167795623e29cd840d08b576cf0afbb2b721a2c Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 28 Aug 2019 15:19:48 +0300 Subject: [PATCH 045/109] fix test --- .../lib/block_scout_web/views/api_docs_view.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 a9b816abb9..eabd883df9 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 @@ -40,8 +40,8 @@ defmodule BlockScoutWeb.APIDocsView do path = url_params[:path] scheme = - if Keyword.get(opts, :with_scheme, false) do - url_params[:scheme] <> "://" + if Keyword.get(opts, :with_scheme, false) && url_params[:scheme] do + "#{url_params[:scheme]}://" end if host != "localhost" do From 18f545b1b87b5302e76a5cbfecb836cc9db89c10 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Wed, 28 Aug 2019 15:44:57 +0300 Subject: [PATCH 046/109] fix env var description --- docs/env-variables.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/env-variables.md b/docs/env-variables.md index 2dc8763b8d..dd01cbe26f 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -28,7 +28,7 @@ $ export NETWORK=POA | `SECRET_KEY_BASE` | :white_check_mark: | Use mix phx.gen.secret to generate a new Secret Key Base string to protect production assets. | (empty) | all | | | | `CHECK_ORIGIN` | | Used to check the origin of requests when the origin header is present. It defaults to false. In case of true, it will check against the host value. | false | all | | | | `PORT` | :white_check_mark: | Default port the application runs on is 4000 | 4000 | all | | | -| `COIN` | :white_check_mark: | The coin here is checked via the Coinmarketcap API to obtain USD prices on graphs and other areas of the UI | POA | all | | | +| `COIN` | :white_check_mark: | The coin here is checked via the CoinGecko API to obtain USD prices on graphs and other areas of the UI | POA | all | | | | `METADATA_CONTRACT` | | This environment variable is specifically used by POA Network to obtain Validators information to display in the UI. | (empty) | all | | | | `VALIDATORS_CONTRACT` | | This environment variable is specifically used by POA Network to obtain the Emission Fund contract. | (empty) | all | | | | `SUPPLY_MODULE` | | This environment variable is used by the xDai Chain in order to tell the application how to calculate the total supply of the chain. | false | all | | | From e1731f488597019fdcb6ba85f2823964b9c2f77c Mon Sep 17 00:00:00 2001 From: Yegor San Date: Wed, 28 Aug 2019 17:32:49 +0300 Subject: [PATCH 047/109] Re-added internationalization, re-checked all changes on all devices, resolved merge conflict --- .../components/_custom_tooltips_block_details.scss | 14 +++++++++++++- .../assets/css/components/_dashboard-banner.scss | 2 +- .../templates/tokens/overview/_details.html.eex | 9 +-------- 3 files changed, 15 insertions(+), 10 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss index aab1d09cc1..c4175ede5d 100644 --- a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss +++ b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss @@ -1,8 +1,10 @@ /* Custom Tooltips for Block Details Page */ + .tooltipCustom { position: relative; display: inline-block; } + .tooltipCustom .tooltiptextTopMiner { visibility: hidden; position: absolute; @@ -20,7 +22,11 @@ margin-bottom: 15px; opacity: 0; transition: opacity 0.5s; + @include media-breakpoint-down(lg) { + left: 60%; + } } + .tooltipCustom .tooltiptextTopMiner::after { content: ''; position: absolute; @@ -31,6 +37,7 @@ border-style: solid; border-color: white transparent transparent transparent; } + .tooltipCustom:hover .tooltiptextTopMiner { visibility: visible; opacity: 1; @@ -53,6 +60,10 @@ margin-bottom: 15px; opacity: 0; transition: opacity 0.5s; + @include media-breakpoint-down(lg) { + bottom: 100%; + padding: 9px 10px; + } } .tooltipCustom .tooltiptextTopR::after { @@ -66,9 +77,10 @@ border-color: $primary transparent transparent transparent; } - .tooltipCustom:hover .tooltiptextTopR { visibility: visible; opacity: 1; } + + /* Custom Tooltips for Block Details Page end*/ \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss index bf1ee2be0d..5a6dcc46bd 100644 --- a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss +++ b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss @@ -136,7 +136,7 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa width: 750px; position: relative; @include media-breakpoint-down(lg) { - margin-top: 15px; + margin-top: 50px; width: 550px; } @include media-breakpoint-down(md) { diff --git a/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex index bf397ac461..7102ea0970 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex @@ -71,14 +71,7 @@ <%= if total_supply?(@token) do %>
-
- -
- -
- - +

<%= gettext "Total Supply" %>

From d40aaef0c6c889986cf81c77c76ed66601b8de01 Mon Sep 17 00:00:00 2001 From: saneery Date: Thu, 29 Aug 2019 10:28:39 +0300 Subject: [PATCH 048/109] Add scheme in api urls --- .../templates/api_docs/eth_rpc.html.eex | 2 +- .../templates/api_docs/index.html.eex | 2 +- .../block_scout_web/views/api_docs_view.ex | 20 ++++----- .../views/api_docs_view_test.exs | 42 +++---------------- 4 files changed, 16 insertions(+), 50 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex index ad27e68185..7b8a9a98de 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/eth_rpc.html.eex @@ -2,7 +2,7 @@

<%= gettext("ETH RPC API Documentation") %>

-

[ <%= gettext "Base URL:" %> <%= eth_rpc_api_url(with_scheme: true)%> ]

+

[ <%= gettext "Base URL:" %> <%= eth_rpc_api_url()%> ]

<%= gettext "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " %> diff --git a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex index 10ff5a6c27..59dae38cdb 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/api_docs/index.html.eex @@ -2,7 +2,7 @@

<%= gettext("API Documentation") %>

-

[ <%= gettext "Base URL:" %> <%= api_url(with_scheme: true)%> ]

+

[ <%= 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/views/api_docs_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api_docs_view.ex index eabd883df9..e067c997d2 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 @@ -34,31 +34,27 @@ defmodule BlockScoutWeb.APIDocsView do end) end - defp blockscout_url(opts) do + defp blockscout_url do url_params = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:url] host = url_params[:host] path = url_params[:path] - - scheme = - if Keyword.get(opts, :with_scheme, false) && url_params[:scheme] do - "#{url_params[:scheme]}://" - end + scheme = Keyword.get(url_params, :scheme, "http") if host != "localhost" do - "#{scheme}#{host}#{path}" + "#{scheme}://#{host}#{path}" else port = Application.get_env(:block_scout_web, BlockScoutWeb.Endpoint)[:http][:port] - "#{scheme}#{host}:#{to_string(port)}" + "#{scheme}://#{host}:#{to_string(port)}" end end - def api_url(opts \\ []) do - base_url = blockscout_url(opts) + def api_url do + base_url = blockscout_url() Path.join(base_url, "api") end - def eth_rpc_api_url(opts \\ []) do - base_url = blockscout_url(opts) + def eth_rpc_api_url do + base_url = blockscout_url() Path.join(base_url, "api/eth_rpc") end end 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 bd2bb6cd05..31922b4486 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 @@ -17,7 +17,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"] ) - assert APIDocsView.api_url() == "blockscout.com/chain/dog/api" + assert APIDocsView.api_url() == "https://blockscout.com/chain/dog/api" end test "does not add slash to empty path" do @@ -25,21 +25,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] ) - assert APIDocsView.api_url() == "blockscout.com/api" - end - - test "path with schems" do - Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "https", host: "blockscout.com", port: 9999] - ) - - assert APIDocsView.api_url(with_scheme: true) == "https://blockscout.com/api" - - Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "http", host: "blockscout.com", port: 9999] - ) - - assert APIDocsView.api_url(with_scheme: true) == "http://blockscout.com/api" + assert APIDocsView.api_url() == "https://blockscout.com/api" end test "localhost return with port" do @@ -48,8 +34,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do http: [port: 9999] ) - assert APIDocsView.api_url() == "localhost:9999/api" - assert APIDocsView.api_url(with_scheme: true) == "http://localhost:9999/api" + assert APIDocsView.api_url() == "http://localhost:9999/api" end end @@ -67,7 +52,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: "/chain/dog"] ) - assert APIDocsView.eth_rpc_api_url() == "blockscout.com/chain/dog/api/eth_rpc" + assert APIDocsView.eth_rpc_api_url() == "https://blockscout.com/chain/dog/api/eth_rpc" end test "does not add slash to empty path" do @@ -75,21 +60,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do url: [scheme: "https", host: "blockscout.com", port: 9999, path: ""] ) - assert APIDocsView.eth_rpc_api_url() == "blockscout.com/api/eth_rpc" - end - - test "path with schems" do - Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "https", host: "blockscout.com", port: 9999] - ) - - assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "https://blockscout.com/api/eth_rpc" - - Application.put_env(:block_scout_web, BlockScoutWeb.Endpoint, - url: [scheme: "http", host: "blockscout.com", port: 9999] - ) - - assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "http://blockscout.com/api/eth_rpc" + assert APIDocsView.eth_rpc_api_url() == "https://blockscout.com/api/eth_rpc" end test "localhost return with port" do @@ -98,8 +69,7 @@ defmodule BlockScoutWeb.ApiDocsViewTest do http: [port: 9999] ) - assert APIDocsView.eth_rpc_api_url() == "localhost:9999/api/eth_rpc" - assert APIDocsView.eth_rpc_api_url(with_scheme: true) == "http://localhost:9999/api/eth_rpc" + assert APIDocsView.eth_rpc_api_url() == "http://localhost:9999/api/eth_rpc" end end end From 37da2eaa6e5500b493e892e2c4da8358ba52d6a6 Mon Sep 17 00:00:00 2001 From: saneery Date: Thu, 29 Aug 2019 10:30:05 +0300 Subject: [PATCH 049/109] Move api's url to the end of example --- apps/block_scout_web/assets/js/lib/try_eth_api.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/assets/js/lib/try_eth_api.js b/apps/block_scout_web/assets/js/lib/try_eth_api.js index 8f81f852ec..c59d71dbcc 100644 --- a/apps/block_scout_web/assets/js/lib/try_eth_api.js +++ b/apps/block_scout_web/assets/js/lib/try_eth_api.js @@ -2,7 +2,7 @@ import $ from 'jquery' function composeCurlCommand (data) { const url = $('[data-endpoint-url]').attr('data-endpoint-url') - return `curl ${url} -H "content-type: application/json" -X POST --data '${JSON.stringify(data)}'` + return `curl -H "content-type: application/json" -X POST --data '${JSON.stringify(data)}' ${url}` } function handleResponse (data, xhr, clickedButton) { From a86b95cbe6c72eb33b496343eca196c66abd2c0a Mon Sep 17 00:00:00 2001 From: saneery Date: Thu, 29 Aug 2019 10:35:37 +0300 Subject: [PATCH 050/109] Use pipeline --- .../lib/block_scout_web/views/api_docs_view.ex | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) 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 e067c997d2..363a4a0179 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 @@ -49,12 +49,12 @@ defmodule BlockScoutWeb.APIDocsView do end def api_url do - base_url = blockscout_url() - Path.join(base_url, "api") + blockscout_url() + |> Path.join("api") end def eth_rpc_api_url do - base_url = blockscout_url() - Path.join(base_url, "api/eth_rpc") + blockscout_url() + |> Path.join("api/eth_rpc") end end From 3b3018f663e4efc95e9836e16b1eb2be8f9478d0 Mon Sep 17 00:00:00 2001 From: Ethan van Ballegooyen Date: Thu, 29 Aug 2019 12:55:23 +0200 Subject: [PATCH 051/109] Added Xerom to list of Additional Chains using BlockScout. --- README.md | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 3c95a5d125..13c50fd838 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ BlockScout provides a comprehensive, easy-to-use interface for users to view, co See our [project documentation](https://poanetwork.github.io/blockscout) for detailed information and setup instructions. -Visit the [POA BlockScout forum](https://forum.poa.network/c/blockscout) for FAQs, troubleshooting, and other BlockScout related items. You can also post and answer questions here. +Visit the [POA BlockScout forum](https://forum.poa.network/c/blockscout) for FAQs, troubleshooting, and other BlockScout related items. You can also post and answer questions here. -You can also access the dev chatroom on our [Gitter Channel](https://gitter.im/poanetwork/blockscout). +You can also access the dev chatroom on our [Gitter Channel](https://gitter.im/poanetwork/blockscout). ## About BlockScout @@ -28,33 +28,33 @@ Currently available full-featured block explorers (Etherscan, Etherchain, Blockc ## Supported Projects -| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | -|--------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------| -| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | -| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | -| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | -| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | -| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | -| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | -| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | -| | | [SpringChain](https://explorer.springrole.com/) | -| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | -| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | -| | | [Tenda](https://tenda.network) | -| | | [GoJoy Chain](https://gojoychain.com/) | - - -Current BlockScout versions for hosted projects are available [on the forum](https://forum.poa.network/t/deployed-instances-on-blockscout-com/1938). +| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | +| ------------------------------------------------------ | ----------------------------------------------------- | ---------------------------------------------------- | +| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | +| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | +| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | +| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | +| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | +| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | +| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | +| | | [SpringChain](https://explorer.springrole.com/) | +| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | +| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | +| | | [Tenda](https://tenda.network) | +| | | [GoJoy Chain](https://gojoychain.com/) | +| | | [Xerom](https://blocks.xerom.org/) | + +Current BlockScout versions for hosted projects are available [on the forum](https://forum.poa.network/t/deployed-instances-on-blockscout-com/1938). ## Getting Started See the [project documentation](https://poanetwork.github.io/blockscout) for instructions: -- [Requirements](https://poanetwork.github.io/blockscout/#/requirements) -- [Ansible deployment](https://poanetwork.github.io/blockscout/#/ansible-deployment) -- [Manual deployment](https://poanetwork.github.io/blockscout/#/manual-deployment) -- [ENV variables](https://poanetwork.github.io/blockscout/#/env-variables) -- [Configuration options](https://poanetwork.github.io/blockscout/#/dev-env) +- [Requirements](https://poanetwork.github.io/blockscout/#/requirements) +- [Ansible deployment](https://poanetwork.github.io/blockscout/#/ansible-deployment) +- [Manual deployment](https://poanetwork.github.io/blockscout/#/manual-deployment) +- [ENV variables](https://poanetwork.github.io/blockscout/#/env-variables) +- [Configuration options](https://poanetwork.github.io/blockscout/#/dev-env) ## Acknowledgements From 7f0042b2b70e4359b556c78d13106a6bd7e0cef7 Mon Sep 17 00:00:00 2001 From: Ethan van Ballegooyen Date: Thu, 29 Aug 2019 13:02:27 +0200 Subject: [PATCH 052/109] Added PR --- CHANGELOG.md | 854 ++++++++++++++++++++++++++------------------------- 1 file changed, 428 insertions(+), 426 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e345f9216d..971696703b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,572 +1,574 @@ ## Current ### Features -- [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs -- [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type -- [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method -- [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges -- [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation + +- [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs +- [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type +- [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method +- [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges +- [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes -- [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons -- [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query -- [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues -- [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test -- [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta -- [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint -- [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper -- [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css -- [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload -- [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter -- [#2568](https://github.com/poanetwork/blockscout/pull/2568) - filter pending token transfers -- [#2564](https://github.com/poanetwork/blockscout/pull/2564) - fix first page button for uncles and reorgs -- [#2563](https://github.com/poanetwork/blockscout/pull/2563) - Fix view less transfers button -- [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records + +- [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons +- [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query +- [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues +- [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test +- [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta +- [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint +- [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper +- [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css +- [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload +- [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter +- [#2568](https://github.com/poanetwork/blockscout/pull/2568) - filter pending token transfers +- [#2564](https://github.com/poanetwork/blockscout/pull/2564) - fix first page button for uncles and reorgs +- [#2563](https://github.com/poanetwork/blockscout/pull/2563) - Fix view less transfers button +- [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records ### Chore -- [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown -- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities -- [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted -- [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically -- [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases -- [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table -- [#2574](https://github.com/poanetwork/blockscout/pull/2574) - limit request body in json rpc error -- [#2566](https://github.com/poanetwork/blockscout/pull/2566) - upgrade absinthe phoenix +- [#2646](https://github.com/poanetwork/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout +- [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown +- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities +- [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted +- [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically +- [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases +- [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table +- [#2574](https://github.com/poanetwork/blockscout/pull/2574) - limit request body in json rpc error +- [#2566](https://github.com/poanetwork/blockscout/pull/2566) - upgrade absinthe phoenix ## 2.0.3-beta ### Features -- [#2433](https://github.com/poanetwork/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation -- [#2529](https://github.com/poanetwork/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page -- [#2376](https://github.com/poanetwork/blockscout/pull/2376) - Split API and WebApp routes -- [#2477](https://github.com/poanetwork/blockscout/pull/2477) - aggregate token transfers on transaction page -- [#2458](https://github.com/poanetwork/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks -- [#2456](https://github.com/poanetwork/blockscout/pull/2456) - fetch pending transactions for geth -- [#2403](https://github.com/poanetwork/blockscout/pull/2403) - Return gasPrice field at the result of gettxinfo method + +- [#2433](https://github.com/poanetwork/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation +- [#2529](https://github.com/poanetwork/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page +- [#2376](https://github.com/poanetwork/blockscout/pull/2376) - Split API and WebApp routes +- [#2477](https://github.com/poanetwork/blockscout/pull/2477) - aggregate token transfers on transaction page +- [#2458](https://github.com/poanetwork/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks +- [#2456](https://github.com/poanetwork/blockscout/pull/2456) - fetch pending transactions for geth +- [#2403](https://github.com/poanetwork/blockscout/pull/2403) - Return gasPrice field at the result of gettxinfo method ### Fixes -- [#2562](https://github.com/poanetwork/blockscout/pull/2562) - Fix dark theme flickering -- [#2560](https://github.com/poanetwork/blockscout/pull/2560) - fix slash before not empty path in docs -- [#2559](https://github.com/poanetwork/blockscout/pull/2559) - fix rsk total supply for empty exchange rate -- [#2553](https://github.com/poanetwork/blockscout/pull/2553) - Dark theme import to the end of sass -- [#2550](https://github.com/poanetwork/blockscout/pull/2550) - correctly encode decimal values for frontend -- [#2549](https://github.com/poanetwork/blockscout/pull/2549) - Fix wrong colour of tooltip -- [#2548](https://github.com/poanetwork/blockscout/pull/2548) - CSS preload support in Firefox -- [#2547](https://github.com/poanetwork/blockscout/pull/2547) - do not show eth value if it's zero on the transaction overview page -- [#2543](https://github.com/poanetwork/blockscout/pull/2543) - do not hide search input during logs search -- [#2524](https://github.com/poanetwork/blockscout/pull/2524) - fix dark theme validator data styles -- [#2532](https://github.com/poanetwork/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page -- [#2528](https://github.com/poanetwork/blockscout/pull/2528) - fix coin history chart data -- [#2520](https://github.com/poanetwork/blockscout/pull/2520) - Hide loading message when fetching is failed -- [#2523](https://github.com/poanetwork/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions -- [#2519](https://github.com/poanetwork/blockscout/pull/2519) - enable `First` page button in pagination -- [#2518](https://github.com/poanetwork/blockscout/pull/2518) - create suggested indexes -- [#2517](https://github.com/poanetwork/blockscout/pull/2517) - remove duplicate indexes -- [#2515](https://github.com/poanetwork/blockscout/pull/2515) - do not aggregate NFT token transfers -- [#2514](https://github.com/poanetwork/blockscout/pull/2514) - Isolating of staking dapp css && extracting of non-critical css -- [#2512](https://github.com/poanetwork/blockscout/pull/2512) - alert link fix -- [#2509](https://github.com/poanetwork/blockscout/pull/2509) - value-ticker gaps fix -- [#2508](https://github.com/poanetwork/blockscout/pull/2508) - logs view columns fix -- [#2506](https://github.com/poanetwork/blockscout/pull/2506) - fix two active tab in the top menu -- [#2503](https://github.com/poanetwork/blockscout/pull/2503) - Mitigate autocompletion library influence to page loading performance -- [#2502](https://github.com/poanetwork/blockscout/pull/2502) - increase reward task timeout -- [#2463](https://github.com/poanetwork/blockscout/pull/2463) - dark theme fixes -- [#2496](https://github.com/poanetwork/blockscout/pull/2496) - fix docker build -- [#2495](https://github.com/poanetwork/blockscout/pull/2495) - fix logs for indexed chain -- [#2459](https://github.com/poanetwork/blockscout/pull/2459) - fix top addresses query -- [#2425](https://github.com/poanetwork/blockscout/pull/2425) - Force to show address view for checksummed address even if it is not in DB -- [#2551](https://github.com/poanetwork/blockscout/pull/2551) - Correctly handle dynamically created Bootstrap tooltips + +- [#2562](https://github.com/poanetwork/blockscout/pull/2562) - Fix dark theme flickering +- [#2560](https://github.com/poanetwork/blockscout/pull/2560) - fix slash before not empty path in docs +- [#2559](https://github.com/poanetwork/blockscout/pull/2559) - fix rsk total supply for empty exchange rate +- [#2553](https://github.com/poanetwork/blockscout/pull/2553) - Dark theme import to the end of sass +- [#2550](https://github.com/poanetwork/blockscout/pull/2550) - correctly encode decimal values for frontend +- [#2549](https://github.com/poanetwork/blockscout/pull/2549) - Fix wrong colour of tooltip +- [#2548](https://github.com/poanetwork/blockscout/pull/2548) - CSS preload support in Firefox +- [#2547](https://github.com/poanetwork/blockscout/pull/2547) - do not show eth value if it's zero on the transaction overview page +- [#2543](https://github.com/poanetwork/blockscout/pull/2543) - do not hide search input during logs search +- [#2524](https://github.com/poanetwork/blockscout/pull/2524) - fix dark theme validator data styles +- [#2532](https://github.com/poanetwork/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page +- [#2528](https://github.com/poanetwork/blockscout/pull/2528) - fix coin history chart data +- [#2520](https://github.com/poanetwork/blockscout/pull/2520) - Hide loading message when fetching is failed +- [#2523](https://github.com/poanetwork/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions +- [#2519](https://github.com/poanetwork/blockscout/pull/2519) - enable `First` page button in pagination +- [#2518](https://github.com/poanetwork/blockscout/pull/2518) - create suggested indexes +- [#2517](https://github.com/poanetwork/blockscout/pull/2517) - remove duplicate indexes +- [#2515](https://github.com/poanetwork/blockscout/pull/2515) - do not aggregate NFT token transfers +- [#2514](https://github.com/poanetwork/blockscout/pull/2514) - Isolating of staking dapp css && extracting of non-critical css +- [#2512](https://github.com/poanetwork/blockscout/pull/2512) - alert link fix +- [#2509](https://github.com/poanetwork/blockscout/pull/2509) - value-ticker gaps fix +- [#2508](https://github.com/poanetwork/blockscout/pull/2508) - logs view columns fix +- [#2506](https://github.com/poanetwork/blockscout/pull/2506) - fix two active tab in the top menu +- [#2503](https://github.com/poanetwork/blockscout/pull/2503) - Mitigate autocompletion library influence to page loading performance +- [#2502](https://github.com/poanetwork/blockscout/pull/2502) - increase reward task timeout +- [#2463](https://github.com/poanetwork/blockscout/pull/2463) - dark theme fixes +- [#2496](https://github.com/poanetwork/blockscout/pull/2496) - fix docker build +- [#2495](https://github.com/poanetwork/blockscout/pull/2495) - fix logs for indexed chain +- [#2459](https://github.com/poanetwork/blockscout/pull/2459) - fix top addresses query +- [#2425](https://github.com/poanetwork/blockscout/pull/2425) - Force to show address view for checksummed address even if it is not in DB +- [#2551](https://github.com/poanetwork/blockscout/pull/2551) - Correctly handle dynamically created Bootstrap tooltips ### Chore -- [#2554](https://github.com/poanetwork/blockscout/pull/2554) - remove extra slash for endpoint url in docs -- [#2552](https://github.com/poanetwork/blockscout/pull/2552) - remove brackets for token holders percentage -- [#2507](https://github.com/poanetwork/blockscout/pull/2507) - update minor version of ecto, ex_machina, phoenix_live_reload -- [#2516](https://github.com/poanetwork/blockscout/pull/2516) - update absinthe plug from fork -- [#2473](https://github.com/poanetwork/blockscout/pull/2473) - get rid of cldr warnings -- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 -- [#2492](https://github.com/poanetwork/blockscout/pull/2492) - hide decoded row if event is not decoded -- [#2490](https://github.com/poanetwork/blockscout/pull/2490) - enable credo duplicated code check -- [#2432](https://github.com/poanetwork/blockscout/pull/2432) - bump credo version -- [#2457](https://github.com/poanetwork/blockscout/pull/2457) - update mix.lock -- [#2435](https://github.com/poanetwork/blockscout/pull/2435) - Replace deprecated extract-text-webpack-plugin with mini-css-extract-plugin -- [#2450](https://github.com/poanetwork/blockscout/pull/2450) - Fix clearance of logs and node_modules folders in clearing script -- [#2434](https://github.com/poanetwork/blockscout/pull/2434) - get rid of timex warnings -- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 -- [#2373](https://github.com/poanetwork/blockscout/pull/2373) - Add script to validate internal_transactions constraint for large DBs +- [#2554](https://github.com/poanetwork/blockscout/pull/2554) - remove extra slash for endpoint url in docs +- [#2552](https://github.com/poanetwork/blockscout/pull/2552) - remove brackets for token holders percentage +- [#2507](https://github.com/poanetwork/blockscout/pull/2507) - update minor version of ecto, ex_machina, phoenix_live_reload +- [#2516](https://github.com/poanetwork/blockscout/pull/2516) - update absinthe plug from fork +- [#2473](https://github.com/poanetwork/blockscout/pull/2473) - get rid of cldr warnings +- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 +- [#2492](https://github.com/poanetwork/blockscout/pull/2492) - hide decoded row if event is not decoded +- [#2490](https://github.com/poanetwork/blockscout/pull/2490) - enable credo duplicated code check +- [#2432](https://github.com/poanetwork/blockscout/pull/2432) - bump credo version +- [#2457](https://github.com/poanetwork/blockscout/pull/2457) - update mix.lock +- [#2435](https://github.com/poanetwork/blockscout/pull/2435) - Replace deprecated extract-text-webpack-plugin with mini-css-extract-plugin +- [#2450](https://github.com/poanetwork/blockscout/pull/2450) - Fix clearance of logs and node_modules folders in clearing script +- [#2434](https://github.com/poanetwork/blockscout/pull/2434) - get rid of timex warnings +- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 +- [#2373](https://github.com/poanetwork/blockscout/pull/2373) - Add script to validate internal_transactions constraint for large DBs ## 2.0.2-beta ### Features -- [#2412](https://github.com/poanetwork/blockscout/pull/2412) - dark theme -- [#2399](https://github.com/poanetwork/blockscout/pull/2399) - decode verified smart contract's logs -- [#2391](https://github.com/poanetwork/blockscout/pull/2391) - Controllers Improvements -- [#2379](https://github.com/poanetwork/blockscout/pull/2379) - Disable network selector when is empty -- [#2374](https://github.com/poanetwork/blockscout/pull/2374) - decode constructor arguments for verified smart contracts -- [#2366](https://github.com/poanetwork/blockscout/pull/2366) - paginate eth logs -- [#2360](https://github.com/poanetwork/blockscout/pull/2360) - add default evm version to smart contract verification -- [#2352](https://github.com/poanetwork/blockscout/pull/2352) - Fetch rewards in parallel with transactions -- [#2294](https://github.com/poanetwork/blockscout/pull/2294) - add healthy block period checking endpoint -- [#2324](https://github.com/poanetwork/blockscout/pull/2324) - set timeout for loading message on the main page + +- [#2412](https://github.com/poanetwork/blockscout/pull/2412) - dark theme +- [#2399](https://github.com/poanetwork/blockscout/pull/2399) - decode verified smart contract's logs +- [#2391](https://github.com/poanetwork/blockscout/pull/2391) - Controllers Improvements +- [#2379](https://github.com/poanetwork/blockscout/pull/2379) - Disable network selector when is empty +- [#2374](https://github.com/poanetwork/blockscout/pull/2374) - decode constructor arguments for verified smart contracts +- [#2366](https://github.com/poanetwork/blockscout/pull/2366) - paginate eth logs +- [#2360](https://github.com/poanetwork/blockscout/pull/2360) - add default evm version to smart contract verification +- [#2352](https://github.com/poanetwork/blockscout/pull/2352) - Fetch rewards in parallel with transactions +- [#2294](https://github.com/poanetwork/blockscout/pull/2294) - add healthy block period checking endpoint +- [#2324](https://github.com/poanetwork/blockscout/pull/2324) - set timeout for loading message on the main page ### Fixes -- [#2421](https://github.com/poanetwork/blockscout/pull/2421) - Fix hiding of loader for txs on the main page -- [#2420](https://github.com/poanetwork/blockscout/pull/2420) - fetch data from cache in healthy endpoint -- [#2416](https://github.com/poanetwork/blockscout/pull/2416) - Fix "page not found" handling in the router -- [#2413](https://github.com/poanetwork/blockscout/pull/2413) - remove outer tables for decoded data -- [#2410](https://github.com/poanetwork/blockscout/pull/2410) - preload smart contract for logs decoding -- [#2405](https://github.com/poanetwork/blockscout/pull/2405) - added templates for table loader and tile loader -- [#2398](https://github.com/poanetwork/blockscout/pull/2398) - show only one decoded candidate -- [#2389](https://github.com/poanetwork/blockscout/pull/2389) - Reduce Lodash lib size (86% of lib methods are not used) -- [#2388](https://github.com/poanetwork/blockscout/pull/2388) - add create2 support to geth's js tracer -- [#2387](https://github.com/poanetwork/blockscout/pull/2387) - fix not existing keys in transaction json rpc -- [#2378](https://github.com/poanetwork/blockscout/pull/2378) - Page performance: exclude moment.js localization files except EN, remove unused css -- [#2368](https://github.com/poanetwork/blockscout/pull/2368) - add two columns of smart contract info -- [#2375](https://github.com/poanetwork/blockscout/pull/2375) - Update created_contract_code_indexed_at on transaction import conflict -- [#2346](https://github.com/poanetwork/blockscout/pull/2346) - Avoid fetching internal transactions of blocks that still need refetching -- [#2350](https://github.com/poanetwork/blockscout/pull/2350) - fix invalid User agent headers -- [#2345](https://github.com/poanetwork/blockscout/pull/2345) - do not override existing market records -- [#2337](https://github.com/poanetwork/blockscout/pull/2337) - set url params for prod explicitly -- [#2341](https://github.com/poanetwork/blockscout/pull/2341) - fix transaction input json encoding -- [#2311](https://github.com/poanetwork/blockscout/pull/2311) - fix market history overriding with zeroes -- [#2310](https://github.com/poanetwork/blockscout/pull/2310) - parse url for api docs -- [#2299](https://github.com/poanetwork/blockscout/pull/2299) - fix interpolation in error message -- [#2303](https://github.com/poanetwork/blockscout/pull/2303) - fix transaction csv download link -- [#2304](https://github.com/poanetwork/blockscout/pull/2304) - footer grid fix for md resolution -- [#2291](https://github.com/poanetwork/blockscout/pull/2291) - dashboard fix for md resolution, transactions load fix, block info row fix, addresses page issue, check mark issue -- [#2326](https://github.com/poanetwork/blockscout/pull/2326) - fix nested constructor arguments + +- [#2421](https://github.com/poanetwork/blockscout/pull/2421) - Fix hiding of loader for txs on the main page +- [#2420](https://github.com/poanetwork/blockscout/pull/2420) - fetch data from cache in healthy endpoint +- [#2416](https://github.com/poanetwork/blockscout/pull/2416) - Fix "page not found" handling in the router +- [#2413](https://github.com/poanetwork/blockscout/pull/2413) - remove outer tables for decoded data +- [#2410](https://github.com/poanetwork/blockscout/pull/2410) - preload smart contract for logs decoding +- [#2405](https://github.com/poanetwork/blockscout/pull/2405) - added templates for table loader and tile loader +- [#2398](https://github.com/poanetwork/blockscout/pull/2398) - show only one decoded candidate +- [#2389](https://github.com/poanetwork/blockscout/pull/2389) - Reduce Lodash lib size (86% of lib methods are not used) +- [#2388](https://github.com/poanetwork/blockscout/pull/2388) - add create2 support to geth's js tracer +- [#2387](https://github.com/poanetwork/blockscout/pull/2387) - fix not existing keys in transaction json rpc +- [#2378](https://github.com/poanetwork/blockscout/pull/2378) - Page performance: exclude moment.js localization files except EN, remove unused css +- [#2368](https://github.com/poanetwork/blockscout/pull/2368) - add two columns of smart contract info +- [#2375](https://github.com/poanetwork/blockscout/pull/2375) - Update created_contract_code_indexed_at on transaction import conflict +- [#2346](https://github.com/poanetwork/blockscout/pull/2346) - Avoid fetching internal transactions of blocks that still need refetching +- [#2350](https://github.com/poanetwork/blockscout/pull/2350) - fix invalid User agent headers +- [#2345](https://github.com/poanetwork/blockscout/pull/2345) - do not override existing market records +- [#2337](https://github.com/poanetwork/blockscout/pull/2337) - set url params for prod explicitly +- [#2341](https://github.com/poanetwork/blockscout/pull/2341) - fix transaction input json encoding +- [#2311](https://github.com/poanetwork/blockscout/pull/2311) - fix market history overriding with zeroes +- [#2310](https://github.com/poanetwork/blockscout/pull/2310) - parse url for api docs +- [#2299](https://github.com/poanetwork/blockscout/pull/2299) - fix interpolation in error message +- [#2303](https://github.com/poanetwork/blockscout/pull/2303) - fix transaction csv download link +- [#2304](https://github.com/poanetwork/blockscout/pull/2304) - footer grid fix for md resolution +- [#2291](https://github.com/poanetwork/blockscout/pull/2291) - dashboard fix for md resolution, transactions load fix, block info row fix, addresses page issue, check mark issue +- [#2326](https://github.com/poanetwork/blockscout/pull/2326) - fix nested constructor arguments ### Chore -- [#2422](https://github.com/poanetwork/blockscout/pull/2422) - check if address_id is binary in token_transfers_csv endpoint -- [#2418](https://github.com/poanetwork/blockscout/pull/2418) - Remove parentheses in market cap percentage -- [#2401](https://github.com/poanetwork/blockscout/pull/2401) - add ENV vars to manage updating period of average block time and market history cache -- [#2363](https://github.com/poanetwork/blockscout/pull/2363) - add parameters example for eth rpc -- [#2342](https://github.com/poanetwork/blockscout/pull/2342) - Upgrade Postgres image version in Docker setup -- [#2325](https://github.com/poanetwork/blockscout/pull/2325) - Reduce function input to address' hash only where possible -- [#2323](https://github.com/poanetwork/blockscout/pull/2323) - Group Explorer caches -- [#2305](https://github.com/poanetwork/blockscout/pull/2305) - Improve Address controllers -- [#2302](https://github.com/poanetwork/blockscout/pull/2302) - fix names for xDai source -- [#2289](https://github.com/poanetwork/blockscout/pull/2289) - Optional websockets for dev environment -- [#2307](https://github.com/poanetwork/blockscout/pull/2307) - add GoJoy to README -- [#2293](https://github.com/poanetwork/blockscout/pull/2293) - remove request idle timeout configuration -- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - bump elixir version to 1.9.0 +- [#2422](https://github.com/poanetwork/blockscout/pull/2422) - check if address_id is binary in token_transfers_csv endpoint +- [#2418](https://github.com/poanetwork/blockscout/pull/2418) - Remove parentheses in market cap percentage +- [#2401](https://github.com/poanetwork/blockscout/pull/2401) - add ENV vars to manage updating period of average block time and market history cache +- [#2363](https://github.com/poanetwork/blockscout/pull/2363) - add parameters example for eth rpc +- [#2342](https://github.com/poanetwork/blockscout/pull/2342) - Upgrade Postgres image version in Docker setup +- [#2325](https://github.com/poanetwork/blockscout/pull/2325) - Reduce function input to address' hash only where possible +- [#2323](https://github.com/poanetwork/blockscout/pull/2323) - Group Explorer caches +- [#2305](https://github.com/poanetwork/blockscout/pull/2305) - Improve Address controllers +- [#2302](https://github.com/poanetwork/blockscout/pull/2302) - fix names for xDai source +- [#2289](https://github.com/poanetwork/blockscout/pull/2289) - Optional websockets for dev environment +- [#2307](https://github.com/poanetwork/blockscout/pull/2307) - add GoJoy to README +- [#2293](https://github.com/poanetwork/blockscout/pull/2293) - remove request idle timeout configuration +- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - bump elixir version to 1.9.0 ## 2.0.1-beta ### Features -- [#2283](https://github.com/poanetwork/blockscout/pull/2283) - Add transactions cache -- [#2182](https://github.com/poanetwork/blockscout/pull/2182) - add market history cache -- [#2109](https://github.com/poanetwork/blockscout/pull/2109) - use bigger updates instead of `Multi` transactions in BlocksTransactionsMismatch -- [#2075](https://github.com/poanetwork/blockscout/pull/2075) - add blocks cache -- [#2151](https://github.com/poanetwork/blockscout/pull/2151) - hide dropdown menu then other networks list is empty -- [#2191](https://github.com/poanetwork/blockscout/pull/2191) - allow to configure token metadata update interval -- [#2146](https://github.com/poanetwork/blockscout/pull/2146) - feat: add eth_getLogs rpc endpoint -- [#2216](https://github.com/poanetwork/blockscout/pull/2216) - Improve token's controllers by avoiding unnecessary preloads -- [#2235](https://github.com/poanetwork/blockscout/pull/2235) - save and show additional validation fields to smart contract -- [#2190](https://github.com/poanetwork/blockscout/pull/2190) - show all token transfers -- [#2193](https://github.com/poanetwork/blockscout/pull/2193) - feat: add BLOCKSCOUT_HOST, and use it in API docs -- [#2266](https://github.com/poanetwork/blockscout/pull/2266) - allow excluding uncles from average block time calculation + +- [#2283](https://github.com/poanetwork/blockscout/pull/2283) - Add transactions cache +- [#2182](https://github.com/poanetwork/blockscout/pull/2182) - add market history cache +- [#2109](https://github.com/poanetwork/blockscout/pull/2109) - use bigger updates instead of `Multi` transactions in BlocksTransactionsMismatch +- [#2075](https://github.com/poanetwork/blockscout/pull/2075) - add blocks cache +- [#2151](https://github.com/poanetwork/blockscout/pull/2151) - hide dropdown menu then other networks list is empty +- [#2191](https://github.com/poanetwork/blockscout/pull/2191) - allow to configure token metadata update interval +- [#2146](https://github.com/poanetwork/blockscout/pull/2146) - feat: add eth_getLogs rpc endpoint +- [#2216](https://github.com/poanetwork/blockscout/pull/2216) - Improve token's controllers by avoiding unnecessary preloads +- [#2235](https://github.com/poanetwork/blockscout/pull/2235) - save and show additional validation fields to smart contract +- [#2190](https://github.com/poanetwork/blockscout/pull/2190) - show all token transfers +- [#2193](https://github.com/poanetwork/blockscout/pull/2193) - feat: add BLOCKSCOUT_HOST, and use it in API docs +- [#2266](https://github.com/poanetwork/blockscout/pull/2266) - allow excluding uncles from average block time calculation ### Fixes -- [#2290](https://github.com/poanetwork/blockscout/pull/2290) - Add eth_get_balance.json to AddressView's render -- [#2286](https://github.com/poanetwork/blockscout/pull/2286) - banner stats issues on sm resolutions, transactions title issue -- [#2284](https://github.com/poanetwork/blockscout/pull/2284) - add 404 status for not existing pages -- [#2244](https://github.com/poanetwork/blockscout/pull/2244) - fix internal transactions failing to be indexed because of constraint -- [#2281](https://github.com/poanetwork/blockscout/pull/2281) - typo issues, dropdown issues -- [#2278](https://github.com/poanetwork/blockscout/pull/2278) - increase threshold for scientific notation -- [#2275](https://github.com/poanetwork/blockscout/pull/2275) - Description for networks selector -- [#2263](https://github.com/poanetwork/blockscout/pull/2263) - added an ability to close network selector on outside click -- [#2257](https://github.com/poanetwork/blockscout/pull/2257) - 'download csv' button added to different tabs -- [#2242](https://github.com/poanetwork/blockscout/pull/2242) - added styles for 'download csv' button -- [#2261](https://github.com/poanetwork/blockscout/pull/2261) - header logo aligned to the center properly -- [#2254](https://github.com/poanetwork/blockscout/pull/2254) - search length issue, tile link wrapping issue -- [#2238](https://github.com/poanetwork/blockscout/pull/2238) - header content alignment issue, hide navbar on outside click -- [#2229](https://github.com/poanetwork/blockscout/pull/2229) - gap issue between qr and copy button in token transfers, top cards width and height issue -- [#2201](https://github.com/poanetwork/blockscout/pull/2201) - footer columns fix -- [#2179](https://github.com/poanetwork/blockscout/pull/2179) - fix docker build error -- [#2165](https://github.com/poanetwork/blockscout/pull/2165) - sort blocks by timestamp when calculating average block time -- [#2175](https://github.com/poanetwork/blockscout/pull/2175) - fix coinmarketcap response errors -- [#2164](https://github.com/poanetwork/blockscout/pull/2164) - fix large numbers in balance view card -- [#2155](https://github.com/poanetwork/blockscout/pull/2155) - fix pending transaction query -- [#2183](https://github.com/poanetwork/blockscout/pull/2183) - tile content aligning for mobile resolution fix, dai logo fix -- [#2162](https://github.com/poanetwork/blockscout/pull/2162) - contract creation tile color changed -- [#2144](https://github.com/poanetwork/blockscout/pull/2144) - 'page not found' images path fixed for goerli -- [#2142](https://github.com/poanetwork/blockscout/pull/2142) - Removed posdao theme and logo, added 'page not found' image for goerli -- [#2138](https://github.com/poanetwork/blockscout/pull/2138) - badge colors issue, api titles issue -- [#2129](https://github.com/poanetwork/blockscout/pull/2129) - Fix for width of explorer elements -- [#2121](https://github.com/poanetwork/blockscout/pull/2121) - Binding of 404 page -- [#2120](https://github.com/poanetwork/blockscout/pull/2120) - footer links and socials focus color issue -- [#2113](https://github.com/poanetwork/blockscout/pull/2113) - renewed logos for rsk, dai, blockscout; themes color changes for lukso; error images for lukso -- [#2112](https://github.com/poanetwork/blockscout/pull/2112) - themes color improvements, dropdown color issue -- [#2110](https://github.com/poanetwork/blockscout/pull/2110) - themes colors issues, ui issues -- [#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 -- [#2093](https://github.com/poanetwork/blockscout/pull/2093) - detect token transfer type for deprecated erc721 spec -- [#2111](https://github.com/poanetwork/blockscout/pull/2111) - improve address transaction controller -- [#2108](https://github.com/poanetwork/blockscout/pull/2108) - fix uncle fetching without full transactions -- [#2128](https://github.com/poanetwork/blockscout/pull/2128) - add new function clause for uncle errors -- [#2123](https://github.com/poanetwork/blockscout/pull/2123) - fix coins percentage view -- [#2119](https://github.com/poanetwork/blockscout/pull/2119) - fix map logging -- [#2130](https://github.com/poanetwork/blockscout/pull/2130) - fix navigation -- [#2148](https://github.com/poanetwork/blockscout/pull/2148) - filter pending logs -- [#2147](https://github.com/poanetwork/blockscout/pull/2147) - add rsk format of checksum -- [#2149](https://github.com/poanetwork/blockscout/pull/2149) - remove pending transaction count -- [#2177](https://github.com/poanetwork/blockscout/pull/2177) - remove duplicate entries from UncleBlock's Fetcher -- [#2169](https://github.com/poanetwork/blockscout/pull/2169) - add more validator reward types for xDai -- [#2173](https://github.com/poanetwork/blockscout/pull/2173) - handle correctly empty transactions -- [#2174](https://github.com/poanetwork/blockscout/pull/2174) - fix reward channel joining -- [#2186](https://github.com/poanetwork/blockscout/pull/2186) - fix net version test -- [#2196](https://github.com/poanetwork/blockscout/pull/2196) - Nethermind client fixes -- [#2237](https://github.com/poanetwork/blockscout/pull/2237) - fix rsk total_supply -- [#2198](https://github.com/poanetwork/blockscout/pull/2198) - reduce transaction status and error constraint -- [#2167](https://github.com/poanetwork/blockscout/pull/2167) - feat: document eth rpc api mimicking endpoints -- [#2225](https://github.com/poanetwork/blockscout/pull/2225) - fix metadata decoding in Solidity 0.5.9 smart contract verification -- [#2204](https://github.com/poanetwork/blockscout/pull/2204) - fix large contract verification -- [#2258](https://github.com/poanetwork/blockscout/pull/2258) - reduce BlocksTransactionsMismatch memory footprint -- [#2247](https://github.com/poanetwork/blockscout/pull/2247) - hide logs search if there are no logs -- [#2248](https://github.com/poanetwork/blockscout/pull/2248) - sort block after query execution for average block time -- [#2249](https://github.com/poanetwork/blockscout/pull/2249) - More transaction controllers improvements -- [#2267](https://github.com/poanetwork/blockscout/pull/2267) - Modify implementation of `where_transaction_has_multiple_internal_transactions` -- [#2270](https://github.com/poanetwork/blockscout/pull/2270) - Remove duplicate params in `Indexer.Fetcher.TokenBalance` -- [#2268](https://github.com/poanetwork/blockscout/pull/2268) - remove not existing assigns in html code -- [#2276](https://github.com/poanetwork/blockscout/pull/2276) - remove port in docs + +- [#2290](https://github.com/poanetwork/blockscout/pull/2290) - Add eth_get_balance.json to AddressView's render +- [#2286](https://github.com/poanetwork/blockscout/pull/2286) - banner stats issues on sm resolutions, transactions title issue +- [#2284](https://github.com/poanetwork/blockscout/pull/2284) - add 404 status for not existing pages +- [#2244](https://github.com/poanetwork/blockscout/pull/2244) - fix internal transactions failing to be indexed because of constraint +- [#2281](https://github.com/poanetwork/blockscout/pull/2281) - typo issues, dropdown issues +- [#2278](https://github.com/poanetwork/blockscout/pull/2278) - increase threshold for scientific notation +- [#2275](https://github.com/poanetwork/blockscout/pull/2275) - Description for networks selector +- [#2263](https://github.com/poanetwork/blockscout/pull/2263) - added an ability to close network selector on outside click +- [#2257](https://github.com/poanetwork/blockscout/pull/2257) - 'download csv' button added to different tabs +- [#2242](https://github.com/poanetwork/blockscout/pull/2242) - added styles for 'download csv' button +- [#2261](https://github.com/poanetwork/blockscout/pull/2261) - header logo aligned to the center properly +- [#2254](https://github.com/poanetwork/blockscout/pull/2254) - search length issue, tile link wrapping issue +- [#2238](https://github.com/poanetwork/blockscout/pull/2238) - header content alignment issue, hide navbar on outside click +- [#2229](https://github.com/poanetwork/blockscout/pull/2229) - gap issue between qr and copy button in token transfers, top cards width and height issue +- [#2201](https://github.com/poanetwork/blockscout/pull/2201) - footer columns fix +- [#2179](https://github.com/poanetwork/blockscout/pull/2179) - fix docker build error +- [#2165](https://github.com/poanetwork/blockscout/pull/2165) - sort blocks by timestamp when calculating average block time +- [#2175](https://github.com/poanetwork/blockscout/pull/2175) - fix coinmarketcap response errors +- [#2164](https://github.com/poanetwork/blockscout/pull/2164) - fix large numbers in balance view card +- [#2155](https://github.com/poanetwork/blockscout/pull/2155) - fix pending transaction query +- [#2183](https://github.com/poanetwork/blockscout/pull/2183) - tile content aligning for mobile resolution fix, dai logo fix +- [#2162](https://github.com/poanetwork/blockscout/pull/2162) - contract creation tile color changed +- [#2144](https://github.com/poanetwork/blockscout/pull/2144) - 'page not found' images path fixed for goerli +- [#2142](https://github.com/poanetwork/blockscout/pull/2142) - Removed posdao theme and logo, added 'page not found' image for goerli +- [#2138](https://github.com/poanetwork/blockscout/pull/2138) - badge colors issue, api titles issue +- [#2129](https://github.com/poanetwork/blockscout/pull/2129) - Fix for width of explorer elements +- [#2121](https://github.com/poanetwork/blockscout/pull/2121) - Binding of 404 page +- [#2120](https://github.com/poanetwork/blockscout/pull/2120) - footer links and socials focus color issue +- [#2113](https://github.com/poanetwork/blockscout/pull/2113) - renewed logos for rsk, dai, blockscout; themes color changes for lukso; error images for lukso +- [#2112](https://github.com/poanetwork/blockscout/pull/2112) - themes color improvements, dropdown color issue +- [#2110](https://github.com/poanetwork/blockscout/pull/2110) - themes colors issues, ui issues +- [#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 +- [#2093](https://github.com/poanetwork/blockscout/pull/2093) - detect token transfer type for deprecated erc721 spec +- [#2111](https://github.com/poanetwork/blockscout/pull/2111) - improve address transaction controller +- [#2108](https://github.com/poanetwork/blockscout/pull/2108) - fix uncle fetching without full transactions +- [#2128](https://github.com/poanetwork/blockscout/pull/2128) - add new function clause for uncle errors +- [#2123](https://github.com/poanetwork/blockscout/pull/2123) - fix coins percentage view +- [#2119](https://github.com/poanetwork/blockscout/pull/2119) - fix map logging +- [#2130](https://github.com/poanetwork/blockscout/pull/2130) - fix navigation +- [#2148](https://github.com/poanetwork/blockscout/pull/2148) - filter pending logs +- [#2147](https://github.com/poanetwork/blockscout/pull/2147) - add rsk format of checksum +- [#2149](https://github.com/poanetwork/blockscout/pull/2149) - remove pending transaction count +- [#2177](https://github.com/poanetwork/blockscout/pull/2177) - remove duplicate entries from UncleBlock's Fetcher +- [#2169](https://github.com/poanetwork/blockscout/pull/2169) - add more validator reward types for xDai +- [#2173](https://github.com/poanetwork/blockscout/pull/2173) - handle correctly empty transactions +- [#2174](https://github.com/poanetwork/blockscout/pull/2174) - fix reward channel joining +- [#2186](https://github.com/poanetwork/blockscout/pull/2186) - fix net version test +- [#2196](https://github.com/poanetwork/blockscout/pull/2196) - Nethermind client fixes +- [#2237](https://github.com/poanetwork/blockscout/pull/2237) - fix rsk total_supply +- [#2198](https://github.com/poanetwork/blockscout/pull/2198) - reduce transaction status and error constraint +- [#2167](https://github.com/poanetwork/blockscout/pull/2167) - feat: document eth rpc api mimicking endpoints +- [#2225](https://github.com/poanetwork/blockscout/pull/2225) - fix metadata decoding in Solidity 0.5.9 smart contract verification +- [#2204](https://github.com/poanetwork/blockscout/pull/2204) - fix large contract verification +- [#2258](https://github.com/poanetwork/blockscout/pull/2258) - reduce BlocksTransactionsMismatch memory footprint +- [#2247](https://github.com/poanetwork/blockscout/pull/2247) - hide logs search if there are no logs +- [#2248](https://github.com/poanetwork/blockscout/pull/2248) - sort block after query execution for average block time +- [#2249](https://github.com/poanetwork/blockscout/pull/2249) - More transaction controllers improvements +- [#2267](https://github.com/poanetwork/blockscout/pull/2267) - Modify implementation of `where_transaction_has_multiple_internal_transactions` +- [#2270](https://github.com/poanetwork/blockscout/pull/2270) - Remove duplicate params in `Indexer.Fetcher.TokenBalance` +- [#2268](https://github.com/poanetwork/blockscout/pull/2268) - remove not existing assigns in html code +- [#2276](https://github.com/poanetwork/blockscout/pull/2276) - remove port in docs ### Chore -- [#2127](https://github.com/poanetwork/blockscout/pull/2127) - use previouse chromedriver version -- [#2118](https://github.com/poanetwork/blockscout/pull/2118) - show only the last decompiled contract -- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - upgrade elixir version to 1.9.0 -- [#2256](https://github.com/poanetwork/blockscout/pull/2256) - use the latest version of chromedriver +- [#2127](https://github.com/poanetwork/blockscout/pull/2127) - use previouse chromedriver version +- [#2118](https://github.com/poanetwork/blockscout/pull/2118) - show only the last decompiled contract +- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - upgrade elixir version to 1.9.0 +- [#2256](https://github.com/poanetwork/blockscout/pull/2256) - use the latest version of chromedriver ## 2.0.0-beta ### Features -- [#2044](https://github.com/poanetwork/blockscout/pull/2044) - New network selector. -- [#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 -- [#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 -- [#1907](https://github.com/poanetwork/blockscout/pull/1907) - dropdown color bug fix (lukso theme) and tooltip color bug fix -- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces -- [#1941](https://github.com/poanetwork/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc -- [#1957](https://github.com/poanetwork/blockscout/pull/1957) - Calculate stakes ratio before insert pools -- [#1956](https://github.com/poanetwork/blockscout/pull/1956) - add logs tab to address -- [#1952](https://github.com/poanetwork/blockscout/pull/1952) - feat: exclude empty contracts by default -- [#1954](https://github.com/poanetwork/blockscout/pull/1954) - feat: use creation init on self destruct -- [#2036](https://github.com/poanetwork/blockscout/pull/2036) - New tables for staking pools and delegators -- [#1974](https://github.com/poanetwork/blockscout/pull/1974) - feat: previous page button logic -- [#1999](https://github.com/poanetwork/blockscout/pull/1999) - load data async on addresses page -- [#1807](https://github.com/poanetwork/blockscout/pull/1807) - New theming capabilites. -- [#2040](https://github.com/poanetwork/blockscout/pull/2040) - Verification links to other explorers for ETH -- [#2037](https://github.com/poanetwork/blockscout/pull/2037) - add address logs search functionality -- [#2012](https://github.com/poanetwork/blockscout/pull/2012) - make all pages pagination async -- [#2064](https://github.com/poanetwork/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups -- [#2100](https://github.com/poanetwork/blockscout/pull/2100) - feat: eth_get_balance rpc endpoint + +- [#2044](https://github.com/poanetwork/blockscout/pull/2044) - New network selector. +- [#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 +- [#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 +- [#1907](https://github.com/poanetwork/blockscout/pull/1907) - dropdown color bug fix (lukso theme) and tooltip color bug fix +- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces +- [#1941](https://github.com/poanetwork/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc +- [#1957](https://github.com/poanetwork/blockscout/pull/1957) - Calculate stakes ratio before insert pools +- [#1956](https://github.com/poanetwork/blockscout/pull/1956) - add logs tab to address +- [#1952](https://github.com/poanetwork/blockscout/pull/1952) - feat: exclude empty contracts by default +- [#1954](https://github.com/poanetwork/blockscout/pull/1954) - feat: use creation init on self destruct +- [#2036](https://github.com/poanetwork/blockscout/pull/2036) - New tables for staking pools and delegators +- [#1974](https://github.com/poanetwork/blockscout/pull/1974) - feat: previous page button logic +- [#1999](https://github.com/poanetwork/blockscout/pull/1999) - load data async on addresses page +- [#1807](https://github.com/poanetwork/blockscout/pull/1807) - New theming capabilites. +- [#2040](https://github.com/poanetwork/blockscout/pull/2040) - Verification links to other explorers for ETH +- [#2037](https://github.com/poanetwork/blockscout/pull/2037) - add address logs search functionality +- [#2012](https://github.com/poanetwork/blockscout/pull/2012) - make all pages pagination async +- [#2064](https://github.com/poanetwork/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups +- [#2100](https://github.com/poanetwork/blockscout/pull/2100) - feat: eth_get_balance rpc endpoint ### Fixes -- [#2228](https://github.com/poanetwork/blockscout/pull/2228) - favorites duplication issues, active radio issue -- [#2207](https://github.com/poanetwork/blockscout/pull/2207) - new 'download csv' button design -- [#2206](https://github.com/poanetwork/blockscout/pull/2206) - added styles for 'Download All Transactions as CSV' button -- [#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. -- [#2066](https://github.com/poanetwork/blockscout/pull/2066) - fixed length of logs search input -- [#2056](https://github.com/poanetwork/blockscout/pull/2056) - log search form styles added -- [#2043](https://github.com/poanetwork/blockscout/pull/2043) - Fixed modal dialog width for 'verify other explorers' -- [#2025](https://github.com/poanetwork/blockscout/pull/2025) - Added a new color to display transactions' errors. -- [#2033](https://github.com/poanetwork/blockscout/pull/2033) - Header nav. dropdown active element color issue -- [#2019](https://github.com/poanetwork/blockscout/pull/2019) - Fixed the missing tx hashes. -- [#2020](https://github.com/poanetwork/blockscout/pull/2020) - Fixed a bug triggered when a second click to a selected tab caused the other tabs to hide. -- [#1944](https://github.com/poanetwork/blockscout/pull/1944) - fixed styles for token's dropdown. -- [#1926](https://github.com/poanetwork/blockscout/pull/1926) - status label alignment -- [#1849](https://github.com/poanetwork/blockscout/pull/1849) - Improve chains menu -- [#1868](https://github.com/poanetwork/blockscout/pull/1868) - fix: logs list endpoint performance -- [#1822](https://github.com/poanetwork/blockscout/pull/1822) - Fix style breaks in decompiled contract code view -- [#1885](https://github.com/poanetwork/blockscout/pull/1885) - highlight reserved words in decompiled code -- [#1896](https://github.com/poanetwork/blockscout/pull/1896) - re-query tokens in top nav automplete -- [#1905](https://github.com/poanetwork/blockscout/pull/1905) - fix reorgs, uncles pagination -- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type -- [#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 -- [#1960](https://github.com/poanetwork/blockscout/pull/1960) - do not remove bold text in decompiled contacts -- [#1966](https://github.com/poanetwork/blockscout/pull/1966) - fix: add fields for contract filter performance -- [#2017](https://github.com/poanetwork/blockscout/pull/2017) - fix: fix to/from filters on tx list pages -- [#2008](https://github.com/poanetwork/blockscout/pull/2008) - add new function clause for xDai network beneficiaries -- [#2009](https://github.com/poanetwork/blockscout/pull/2009) - addresses page improvements -- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions -- [#2062](https://github.com/poanetwork/blockscout/pull/2062) - fix: uniq by hash, instead of transaction -- [#2052](https://github.com/poanetwork/blockscout/pull/2052) - allow bytes32 for name and symbol -- [#2047](https://github.com/poanetwork/blockscout/pull/2047) - fix: show creating internal transactions -- [#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 +- [#2228](https://github.com/poanetwork/blockscout/pull/2228) - favorites duplication issues, active radio issue +- [#2207](https://github.com/poanetwork/blockscout/pull/2207) - new 'download csv' button design +- [#2206](https://github.com/poanetwork/blockscout/pull/2206) - added styles for 'Download All Transactions as CSV' button +- [#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. +- [#2066](https://github.com/poanetwork/blockscout/pull/2066) - fixed length of logs search input +- [#2056](https://github.com/poanetwork/blockscout/pull/2056) - log search form styles added +- [#2043](https://github.com/poanetwork/blockscout/pull/2043) - Fixed modal dialog width for 'verify other explorers' +- [#2025](https://github.com/poanetwork/blockscout/pull/2025) - Added a new color to display transactions' errors. +- [#2033](https://github.com/poanetwork/blockscout/pull/2033) - Header nav. dropdown active element color issue +- [#2019](https://github.com/poanetwork/blockscout/pull/2019) - Fixed the missing tx hashes. +- [#2020](https://github.com/poanetwork/blockscout/pull/2020) - Fixed a bug triggered when a second click to a selected tab caused the other tabs to hide. +- [#1944](https://github.com/poanetwork/blockscout/pull/1944) - fixed styles for token's dropdown. +- [#1926](https://github.com/poanetwork/blockscout/pull/1926) - status label alignment +- [#1849](https://github.com/poanetwork/blockscout/pull/1849) - Improve chains menu +- [#1868](https://github.com/poanetwork/blockscout/pull/1868) - fix: logs list endpoint performance +- [#1822](https://github.com/poanetwork/blockscout/pull/1822) - Fix style breaks in decompiled contract code view +- [#1885](https://github.com/poanetwork/blockscout/pull/1885) - highlight reserved words in decompiled code +- [#1896](https://github.com/poanetwork/blockscout/pull/1896) - re-query tokens in top nav automplete +- [#1905](https://github.com/poanetwork/blockscout/pull/1905) - fix reorgs, uncles pagination +- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type +- [#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 +- [#1960](https://github.com/poanetwork/blockscout/pull/1960) - do not remove bold text in decompiled contacts +- [#1966](https://github.com/poanetwork/blockscout/pull/1966) - fix: add fields for contract filter performance +- [#2017](https://github.com/poanetwork/blockscout/pull/2017) - fix: fix to/from filters on tx list pages +- [#2008](https://github.com/poanetwork/blockscout/pull/2008) - add new function clause for xDai network beneficiaries +- [#2009](https://github.com/poanetwork/blockscout/pull/2009) - addresses page improvements +- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions +- [#2062](https://github.com/poanetwork/blockscout/pull/2062) - fix: uniq by hash, instead of transaction +- [#2052](https://github.com/poanetwork/blockscout/pull/2052) - allow bytes32 for name and symbol +- [#2047](https://github.com/poanetwork/blockscout/pull/2047) - fix: show creating internal transactions +- [#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 -- [#1900](https://github.com/poanetwork/blockscout/pull/1900) - SUPPORTED_CHAINS ENV var -- [#1958](https://github.com/poanetwork/blockscout/pull/1958) - Default value for release link env var -- [#1964](https://github.com/poanetwork/blockscout/pull/1964) - ALLOWED_EVM_VERSIONS env var -- [#1975](https://github.com/poanetwork/blockscout/pull/1975) - add log index to transaction view -- [#1988](https://github.com/poanetwork/blockscout/pull/1988) - Fix wrong parity tasks names in Circle CI -- [#2000](https://github.com/poanetwork/blockscout/pull/2000) - docker/Makefile: always set a container name -- [#2018](https://github.com/poanetwork/blockscout/pull/2018) - Use PORT env variable in dev config -- [#2055](https://github.com/poanetwork/blockscout/pull/2055) - Increase timeout for geth indexers -- [#2069](https://github.com/poanetwork/blockscout/pull/2069) - Docsify integration: static docs page generation +### Chore +- [#1900](https://github.com/poanetwork/blockscout/pull/1900) - SUPPORTED_CHAINS ENV var +- [#1958](https://github.com/poanetwork/blockscout/pull/1958) - Default value for release link env var +- [#1964](https://github.com/poanetwork/blockscout/pull/1964) - ALLOWED_EVM_VERSIONS env var +- [#1975](https://github.com/poanetwork/blockscout/pull/1975) - add log index to transaction view +- [#1988](https://github.com/poanetwork/blockscout/pull/1988) - Fix wrong parity tasks names in Circle CI +- [#2000](https://github.com/poanetwork/blockscout/pull/2000) - docker/Makefile: always set a container name +- [#2018](https://github.com/poanetwork/blockscout/pull/2018) - Use PORT env variable in dev config +- [#2055](https://github.com/poanetwork/blockscout/pull/2055) - Increase timeout for geth indexers +- [#2069](https://github.com/poanetwork/blockscout/pull/2069) - Docsify integration: static docs page generation ## 1.3.15-beta ### Features -- [#1857](https://github.com/poanetwork/blockscout/pull/1857) - Re-implement Geth JS internal transaction tracer in Elixir -- [#1989](https://github.com/poanetwork/blockscout/pull/1989) - fix: consolidate address w/ balance one at a time -- [#2002](https://github.com/poanetwork/blockscout/pull/2002) - Get estimated count of blocks when cache is empty +- [#1857](https://github.com/poanetwork/blockscout/pull/1857) - Re-implement Geth JS internal transaction tracer in Elixir +- [#1989](https://github.com/poanetwork/blockscout/pull/1989) - fix: consolidate address w/ balance one at a time +- [#2002](https://github.com/poanetwork/blockscout/pull/2002) - Get estimated count of blocks when cache is empty ### Fixes -- [#1869](https://github.com/poanetwork/blockscout/pull/1869) - Fix output and gas extraction in JS tracer for Geth -- [#1992](https://github.com/poanetwork/blockscout/pull/1992) - fix: support https for wobserver polling -- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions - +- [#1869](https://github.com/poanetwork/blockscout/pull/1869) - Fix output and gas extraction in JS tracer for Geth +- [#1992](https://github.com/poanetwork/blockscout/pull/1992) - fix: support https for wobserver polling +- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions ## 1.3.14-beta -- [#1812](https://github.com/poanetwork/blockscout/pull/1812) - add pagination to addresses page -- [#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 +- [#1812](https://github.com/poanetwork/blockscout/pull/1812) - add pagination to addresses page +- [#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 ### Fixes -- [#1917](https://github.com/poanetwork/blockscout/pull/1917) - Force block refetch if transaction is re-collated in a different block +- [#1917](https://github.com/poanetwork/blockscout/pull/1917) - Force block refetch if transaction is re-collated in a different block ### Chore -- [#1892](https://github.com/poanetwork/blockscout/pull/1892) - Remove temporary worker modules - +- [#1892](https://github.com/poanetwork/blockscout/pull/1892) - Remove temporary worker modules ## 1.3.13-beta ### Features -- [#1933](https://github.com/poanetwork/blockscout/pull/1933) - add eth_BlockNumber json rpc method +- [#1933](https://github.com/poanetwork/blockscout/pull/1933) - add eth_BlockNumber json rpc method ### Fixes -- [#1875](https://github.com/poanetwork/blockscout/pull/1875) - fix: resolve false positive constructor arguments -- [#1881](https://github.com/poanetwork/blockscout/pull/1881) - fix: store solc versions locally for performance -- [#1898](https://github.com/poanetwork/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments - +- [#1875](https://github.com/poanetwork/blockscout/pull/1875) - fix: resolve false positive constructor arguments +- [#1881](https://github.com/poanetwork/blockscout/pull/1881) - fix: store solc versions locally for performance +- [#1898](https://github.com/poanetwork/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments ## 1.3.12-beta Reverting of synchronous block counter, implemented in #1848 - ## 1.3.11-beta ### Features -- [#1815](https://github.com/poanetwork/blockscout/pull/1815) - Be able to search without prefix "0x" -- [#1813](https://github.com/poanetwork/blockscout/pull/1813) - Add total blocks counter to the main page -- [#1806](https://github.com/poanetwork/blockscout/pull/1806) - Verify contracts with a post request -- [#1848](https://github.com/poanetwork/blockscout/pull/1848) - Add cache for block counter +- [#1815](https://github.com/poanetwork/blockscout/pull/1815) - Be able to search without prefix "0x" +- [#1813](https://github.com/poanetwork/blockscout/pull/1813) - Add total blocks counter to the main page +- [#1806](https://github.com/poanetwork/blockscout/pull/1806) - Verify contracts with a post request +- [#1848](https://github.com/poanetwork/blockscout/pull/1848) - Add cache for block counter ### Fixes -- [#1829](https://github.com/poanetwork/blockscout/pull/1829) - Handle nil quantities in block decoding routine -- [#1830](https://github.com/poanetwork/blockscout/pull/1830) - Make block size field nullable -- [#1840](https://github.com/poanetwork/blockscout/pull/1840) - Handle case when total supply is nil -- [#1838](https://github.com/poanetwork/blockscout/pull/1838) - Block counter calculates only consensus blocks +- [#1829](https://github.com/poanetwork/blockscout/pull/1829) - Handle nil quantities in block decoding routine +- [#1830](https://github.com/poanetwork/blockscout/pull/1830) - Make block size field nullable +- [#1840](https://github.com/poanetwork/blockscout/pull/1840) - Handle case when total supply is nil +- [#1838](https://github.com/poanetwork/blockscout/pull/1838) - Block counter calculates only consensus blocks ### Chore -- [#1814](https://github.com/poanetwork/blockscout/pull/1814) - Clear build artefacts script -- [#1837](https://github.com/poanetwork/blockscout/pull/1837) - Add -f flag to clear_build.sh script delete static folder - +- [#1814](https://github.com/poanetwork/blockscout/pull/1814) - Clear build artefacts script +- [#1837](https://github.com/poanetwork/blockscout/pull/1837) - Add -f flag to clear_build.sh script delete static folder ## 1.3.10-beta ### Features -- [#1739](https://github.com/poanetwork/blockscout/pull/1739) - highlight decompiled source code -- [#1696](https://github.com/poanetwork/blockscout/pull/1696) - full-text search by tokens -- [#1742](https://github.com/poanetwork/blockscout/pull/1742) - Support RSK -- [#1777](https://github.com/poanetwork/blockscout/pull/1777) - show ERC-20 token transfer info on transaction page -- [#1770](https://github.com/poanetwork/blockscout/pull/1770) - set a websocket keepalive from config -- [#1789](https://github.com/poanetwork/blockscout/pull/1789) - add ERC-721 info to transaction overview page -- [#1801](https://github.com/poanetwork/blockscout/pull/1801) - Staking pools fetching +- [#1739](https://github.com/poanetwork/blockscout/pull/1739) - highlight decompiled source code +- [#1696](https://github.com/poanetwork/blockscout/pull/1696) - full-text search by tokens +- [#1742](https://github.com/poanetwork/blockscout/pull/1742) - Support RSK +- [#1777](https://github.com/poanetwork/blockscout/pull/1777) - show ERC-20 token transfer info on transaction page +- [#1770](https://github.com/poanetwork/blockscout/pull/1770) - set a websocket keepalive from config +- [#1789](https://github.com/poanetwork/blockscout/pull/1789) - add ERC-721 info to transaction overview page +- [#1801](https://github.com/poanetwork/blockscout/pull/1801) - Staking pools fetching ### Fixes - - [#1724](https://github.com/poanetwork/blockscout/pull/1724) - Remove internal tx and token balance fetching from realtime fetcher - - [#1727](https://github.com/poanetwork/blockscout/pull/1727) - add logs pagination in rpc api - - [#1740](https://github.com/poanetwork/blockscout/pull/1740) - fix empty block time - - [#1743](https://github.com/poanetwork/blockscout/pull/1743) - sort decompiled smart contracts in lexicographical order - - [#1756](https://github.com/poanetwork/blockscout/pull/1756) - add today's token balance from the previous value - - [#1769](https://github.com/poanetwork/blockscout/pull/1769) - add timestamp to block overview - - [#1768](https://github.com/poanetwork/blockscout/pull/1768) - fix first block parameter - - [#1778](https://github.com/poanetwork/blockscout/pull/1778) - Make websocket optional for realtime fetcher - - [#1790](https://github.com/poanetwork/blockscout/pull/1790) - fix constructor arguments verification - - [#1793](https://github.com/poanetwork/blockscout/pull/1793) - fix top nav autocomplete - - [#1795](https://github.com/poanetwork/blockscout/pull/1795) - fix line numbers for decompiled contracts - - [#1803](https://github.com/poanetwork/blockscout/pull/1803) - use coinmarketcap for total_supply by default - - [#1802](https://github.com/poanetwork/blockscout/pull/1802) - make coinmarketcap's number of pages configurable - - [#1799](https://github.com/poanetwork/blockscout/pull/1799) - Use eth_getUncleByBlockHashAndIndex for uncle block fetching - - [#1531](https://github.com/poanetwork/blockscout/pull/1531) - docker: fix dockerFile for secp256k1 building - - [#1835](https://github.com/poanetwork/blockscout/pull/1835) - fix: ignore `pong` messages without error +- [#1724](https://github.com/poanetwork/blockscout/pull/1724) - Remove internal tx and token balance fetching from realtime fetcher +- [#1727](https://github.com/poanetwork/blockscout/pull/1727) - add logs pagination in rpc api +- [#1740](https://github.com/poanetwork/blockscout/pull/1740) - fix empty block time +- [#1743](https://github.com/poanetwork/blockscout/pull/1743) - sort decompiled smart contracts in lexicographical order +- [#1756](https://github.com/poanetwork/blockscout/pull/1756) - add today's token balance from the previous value +- [#1769](https://github.com/poanetwork/blockscout/pull/1769) - add timestamp to block overview +- [#1768](https://github.com/poanetwork/blockscout/pull/1768) - fix first block parameter +- [#1778](https://github.com/poanetwork/blockscout/pull/1778) - Make websocket optional for realtime fetcher +- [#1790](https://github.com/poanetwork/blockscout/pull/1790) - fix constructor arguments verification +- [#1793](https://github.com/poanetwork/blockscout/pull/1793) - fix top nav autocomplete +- [#1795](https://github.com/poanetwork/blockscout/pull/1795) - fix line numbers for decompiled contracts +- [#1803](https://github.com/poanetwork/blockscout/pull/1803) - use coinmarketcap for total_supply by default +- [#1802](https://github.com/poanetwork/blockscout/pull/1802) - make coinmarketcap's number of pages configurable +- [#1799](https://github.com/poanetwork/blockscout/pull/1799) - Use eth_getUncleByBlockHashAndIndex for uncle block fetching +- [#1531](https://github.com/poanetwork/blockscout/pull/1531) - docker: fix dockerFile for secp256k1 building +- [#1835](https://github.com/poanetwork/blockscout/pull/1835) - fix: ignore `pong` messages without error ### Chore - - [#1804](https://github.com/poanetwork/blockscout/pull/1804) - (Chore) Divide chains by Mainnet/Testnet in menu - - [#1783](https://github.com/poanetwork/blockscout/pull/1783) - Update README with the chains that use Blockscout - - [#1780](https://github.com/poanetwork/blockscout/pull/1780) - Update link to the Github repo in the footer - - [#1757](https://github.com/poanetwork/blockscout/pull/1757) - Change twitter acc link to official Blockscout acc twitter - - [#1749](https://github.com/poanetwork/blockscout/pull/1749) - Replace the link in the footer with the official POA announcements tg channel link - - [#1718](https://github.com/poanetwork/blockscout/pull/1718) - Flatten indexer module hierarchy and supervisor tree - - [#1753](https://github.com/poanetwork/blockscout/pull/1753) - Add a check mark to decompiled contract tab - - [#1744](https://github.com/poanetwork/blockscout/pull/1744) - remove `0x0..0` from tests - - [#1763](https://github.com/poanetwork/blockscout/pull/1763) - Describe indexer structure and list existing fetchers - - [#1800](https://github.com/poanetwork/blockscout/pull/1800) - Disable lazy logging check in Credo - +- [#1804](https://github.com/poanetwork/blockscout/pull/1804) - (Chore) Divide chains by Mainnet/Testnet in menu +- [#1783](https://github.com/poanetwork/blockscout/pull/1783) - Update README with the chains that use Blockscout +- [#1780](https://github.com/poanetwork/blockscout/pull/1780) - Update link to the Github repo in the footer +- [#1757](https://github.com/poanetwork/blockscout/pull/1757) - Change twitter acc link to official Blockscout acc twitter +- [#1749](https://github.com/poanetwork/blockscout/pull/1749) - Replace the link in the footer with the official POA announcements tg channel link +- [#1718](https://github.com/poanetwork/blockscout/pull/1718) - Flatten indexer module hierarchy and supervisor tree +- [#1753](https://github.com/poanetwork/blockscout/pull/1753) - Add a check mark to decompiled contract tab +- [#1744](https://github.com/poanetwork/blockscout/pull/1744) - remove `0x0..0` from tests +- [#1763](https://github.com/poanetwork/blockscout/pull/1763) - Describe indexer structure and list existing fetchers +- [#1800](https://github.com/poanetwork/blockscout/pull/1800) - Disable lazy logging check in Credo ## 1.3.9-beta ### Features - - [#1662](https://github.com/poanetwork/blockscout/pull/1662) - allow specifying number of optimization runs - - [#1654](https://github.com/poanetwork/blockscout/pull/1654) - add decompiled code tab - - [#1661](https://github.com/poanetwork/blockscout/pull/1661) - try to compile smart contract with the latest evm version - - [#1665](https://github.com/poanetwork/blockscout/pull/1665) - Add contract verification RPC endpoint. - - [#1706](https://github.com/poanetwork/blockscout/pull/1706) - allow setting update interval for addresses with b +- [#1662](https://github.com/poanetwork/blockscout/pull/1662) - allow specifying number of optimization runs +- [#1654](https://github.com/poanetwork/blockscout/pull/1654) - add decompiled code tab +- [#1661](https://github.com/poanetwork/blockscout/pull/1661) - try to compile smart contract with the latest evm version +- [#1665](https://github.com/poanetwork/blockscout/pull/1665) - Add contract verification RPC endpoint. +- [#1706](https://github.com/poanetwork/blockscout/pull/1706) - allow setting update interval for addresses with b ### Fixes - - [#1669](https://github.com/poanetwork/blockscout/pull/1669) - do not fail if multiple matching tokens are found - - [#1691](https://github.com/poanetwork/blockscout/pull/1691) - decrease token metadata update interval - - [#1688](https://github.com/poanetwork/blockscout/pull/1688) - do not fail if failure reason is atom - - [#1692](https://github.com/poanetwork/blockscout/pull/1692) - exclude decompiled smart contract from encoding - - [#1684](https://github.com/poanetwork/blockscout/pull/1684) - Discard child block with parent_hash not matching hash of imported block - - [#1699](https://github.com/poanetwork/blockscout/pull/1699) - use seconds as transaction cache period measure - - [#1697](https://github.com/poanetwork/blockscout/pull/1697) - fix failing in rpc if balance is empty - - [#1711](https://github.com/poanetwork/blockscout/pull/1711) - rescue failing repo in block number cache update - - [#1712](https://github.com/poanetwork/blockscout/pull/1712) - do not set contract code from transaction input - - [#1714](https://github.com/poanetwork/blockscout/pull/1714) - fix average block time calculation +- [#1669](https://github.com/poanetwork/blockscout/pull/1669) - do not fail if multiple matching tokens are found +- [#1691](https://github.com/poanetwork/blockscout/pull/1691) - decrease token metadata update interval +- [#1688](https://github.com/poanetwork/blockscout/pull/1688) - do not fail if failure reason is atom +- [#1692](https://github.com/poanetwork/blockscout/pull/1692) - exclude decompiled smart contract from encoding +- [#1684](https://github.com/poanetwork/blockscout/pull/1684) - Discard child block with parent_hash not matching hash of imported block +- [#1699](https://github.com/poanetwork/blockscout/pull/1699) - use seconds as transaction cache period measure +- [#1697](https://github.com/poanetwork/blockscout/pull/1697) - fix failing in rpc if balance is empty +- [#1711](https://github.com/poanetwork/blockscout/pull/1711) - rescue failing repo in block number cache update +- [#1712](https://github.com/poanetwork/blockscout/pull/1712) - do not set contract code from transaction input +- [#1714](https://github.com/poanetwork/blockscout/pull/1714) - fix average block time calculation ### Chore - - [#1693](https://github.com/poanetwork/blockscout/pull/1693) - Add a checklist to the PR template - +- [#1693](https://github.com/poanetwork/blockscout/pull/1693) - Add a checklist to the PR template ## 1.3.8-beta ### Features - - [#1611](https://github.com/poanetwork/blockscout/pull/1611) - allow setting the first indexing block - - [#1596](https://github.com/poanetwork/blockscout/pull/1596) - add endpoint to create decompiled contracts - - [#1634](https://github.com/poanetwork/blockscout/pull/1634) - add transaction count cache +- [#1611](https://github.com/poanetwork/blockscout/pull/1611) - allow setting the first indexing block +- [#1596](https://github.com/poanetwork/blockscout/pull/1596) - add endpoint to create decompiled contracts +- [#1634](https://github.com/poanetwork/blockscout/pull/1634) - add transaction count cache ### Fixes - - [#1630](https://github.com/poanetwork/blockscout/pull/1630) - (Fix) colour for release link in the footer - - [#1621](https://github.com/poanetwork/blockscout/pull/1621) - Modify query to fetch failed contract creations - - [#1614](https://github.com/poanetwork/blockscout/pull/1614) - Do not fetch burn address token balance - - [#1639](https://github.com/poanetwork/blockscout/pull/1614) - Optimize token holder count updates when importing address current balances - - [#1643](https://github.com/poanetwork/blockscout/pull/1643) - Set internal_transactions_indexed_at for empty blocks - - [#1647](https://github.com/poanetwork/blockscout/pull/1647) - Fix typo in view - - [#1650](https://github.com/poanetwork/blockscout/pull/1650) - Add petersburg evm version to smart contract verifier - - [#1657](https://github.com/poanetwork/blockscout/pull/1657) - Force consensus loss for parent block if its hash mismatches parent_hash +- [#1630](https://github.com/poanetwork/blockscout/pull/1630) - (Fix) colour for release link in the footer +- [#1621](https://github.com/poanetwork/blockscout/pull/1621) - Modify query to fetch failed contract creations +- [#1614](https://github.com/poanetwork/blockscout/pull/1614) - Do not fetch burn address token balance +- [#1639](https://github.com/poanetwork/blockscout/pull/1614) - Optimize token holder count updates when importing address current balances +- [#1643](https://github.com/poanetwork/blockscout/pull/1643) - Set internal_transactions_indexed_at for empty blocks +- [#1647](https://github.com/poanetwork/blockscout/pull/1647) - Fix typo in view +- [#1650](https://github.com/poanetwork/blockscout/pull/1650) - Add petersburg evm version to smart contract verifier +- [#1657](https://github.com/poanetwork/blockscout/pull/1657) - Force consensus loss for parent block if its hash mismatches parent_hash ### Chore - ## 1.3.7-beta ### Features ### Fixes - - [#1615](https://github.com/poanetwork/blockscout/pull/1615) - Add more logging to code fixer process - - [#1613](https://github.com/poanetwork/blockscout/pull/1613) - Fix USD fee value - - [#1577](https://github.com/poanetwork/blockscout/pull/1577) - Add process to fix contract with code - - [#1583](https://github.com/poanetwork/blockscout/pull/1583) - Chunk JSON-RPC batches in case connection times out +- [#1615](https://github.com/poanetwork/blockscout/pull/1615) - Add more logging to code fixer process +- [#1613](https://github.com/poanetwork/blockscout/pull/1613) - Fix USD fee value +- [#1577](https://github.com/poanetwork/blockscout/pull/1577) - Add process to fix contract with code +- [#1583](https://github.com/poanetwork/blockscout/pull/1583) - Chunk JSON-RPC batches in case connection times out ### Chore - - [#1610](https://github.com/poanetwork/blockscout/pull/1610) - Add PIRL to Readme - +- [#1610](https://github.com/poanetwork/blockscout/pull/1610) - Add PIRL to Readme ## 1.3.6-beta ### Features - - [#1589](https://github.com/poanetwork/blockscout/pull/1589) - RPC endpoint to list addresses - - [#1567](https://github.com/poanetwork/blockscout/pull/1567) - Allow setting different configuration just for realtime fetcher - - [#1562](https://github.com/poanetwork/blockscout/pull/1562) - Add incoming transactions count to contract view - - [#1608](https://github.com/poanetwork/blockscout/pull/1608) - Add listcontracts RPC Endpoint +- [#1589](https://github.com/poanetwork/blockscout/pull/1589) - RPC endpoint to list addresses +- [#1567](https://github.com/poanetwork/blockscout/pull/1567) - Allow setting different configuration just for realtime fetcher +- [#1562](https://github.com/poanetwork/blockscout/pull/1562) - Add incoming transactions count to contract view +- [#1608](https://github.com/poanetwork/blockscout/pull/1608) - Add listcontracts RPC Endpoint ### Fixes - - [#1595](https://github.com/poanetwork/blockscout/pull/1595) - Reduce block_rewards in the catchup fetcher - - [#1590](https://github.com/poanetwork/blockscout/pull/1590) - Added guard for fetching blocks with invalid number - - [#1588](https://github.com/poanetwork/blockscout/pull/1588) - Fix usd value on address page - - [#1586](https://github.com/poanetwork/blockscout/pull/1586) - Exact timestamp display - - [#1581](https://github.com/poanetwork/blockscout/pull/1581) - Consider `creates` param when fetching transactions - - [#1559](https://github.com/poanetwork/blockscout/pull/1559) - Change v column type for Transactions table +- [#1595](https://github.com/poanetwork/blockscout/pull/1595) - Reduce block_rewards in the catchup fetcher +- [#1590](https://github.com/poanetwork/blockscout/pull/1590) - Added guard for fetching blocks with invalid number +- [#1588](https://github.com/poanetwork/blockscout/pull/1588) - Fix usd value on address page +- [#1586](https://github.com/poanetwork/blockscout/pull/1586) - Exact timestamp display +- [#1581](https://github.com/poanetwork/blockscout/pull/1581) - Consider `creates` param when fetching transactions +- [#1559](https://github.com/poanetwork/blockscout/pull/1559) - Change v column type for Transactions table ### Chore - - [#1579](https://github.com/poanetwork/blockscout/pull/1579) - Add SpringChain to the list of Additional Chains Utilizing BlockScout - - [#1578](https://github.com/poanetwork/blockscout/pull/1578) - Refine contributing procedure - - [#1572](https://github.com/poanetwork/blockscout/pull/1572) - Add option to disable block rewards in indexer config - +- [#1579](https://github.com/poanetwork/blockscout/pull/1579) - Add SpringChain to the list of Additional Chains Utilizing BlockScout +- [#1578](https://github.com/poanetwork/blockscout/pull/1578) - Refine contributing procedure +- [#1572](https://github.com/poanetwork/blockscout/pull/1572) - Add option to disable block rewards in indexer config ## 1.3.5-beta ### Features - - [#1560](https://github.com/poanetwork/blockscout/pull/1560) - Allow executing smart contract functions in arbitrarily sized batches - - [#1543](https://github.com/poanetwork/blockscout/pull/1543) - Use trace_replayBlockTransactions API for faster tracing - - [#1558](https://github.com/poanetwork/blockscout/pull/1558) - Allow searching by token symbol - - [#1551](https://github.com/poanetwork/blockscout/pull/1551) Exact date and time for Transaction details page - - [#1547](https://github.com/poanetwork/blockscout/pull/1547) - Verify smart contracts with evm versions - - [#1540](https://github.com/poanetwork/blockscout/pull/1540) - Fetch ERC721 token balances if sender is '0x0..0' - - [#1539](https://github.com/poanetwork/blockscout/pull/1539) - Add the link to release in the footer - - [#1519](https://github.com/poanetwork/blockscout/pull/1519) - Create contract methods - - [#1496](https://github.com/poanetwork/blockscout/pull/1496) - Remove dropped/replaced transactions in pending transactions list - - [#1492](https://github.com/poanetwork/blockscout/pull/1492) - Disable usd value for an empty exchange rate - - [#1466](https://github.com/poanetwork/blockscout/pull/1466) - Decoding candidates for unverified contracts +- [#1560](https://github.com/poanetwork/blockscout/pull/1560) - Allow executing smart contract functions in arbitrarily sized batches +- [#1543](https://github.com/poanetwork/blockscout/pull/1543) - Use trace_replayBlockTransactions API for faster tracing +- [#1558](https://github.com/poanetwork/blockscout/pull/1558) - Allow searching by token symbol +- [#1551](https://github.com/poanetwork/blockscout/pull/1551) Exact date and time for Transaction details page +- [#1547](https://github.com/poanetwork/blockscout/pull/1547) - Verify smart contracts with evm versions +- [#1540](https://github.com/poanetwork/blockscout/pull/1540) - Fetch ERC721 token balances if sender is '0x0..0' +- [#1539](https://github.com/poanetwork/blockscout/pull/1539) - Add the link to release in the footer +- [#1519](https://github.com/poanetwork/blockscout/pull/1519) - Create contract methods +- [#1496](https://github.com/poanetwork/blockscout/pull/1496) - Remove dropped/replaced transactions in pending transactions list +- [#1492](https://github.com/poanetwork/blockscout/pull/1492) - Disable usd value for an empty exchange rate +- [#1466](https://github.com/poanetwork/blockscout/pull/1466) - Decoding candidates for unverified contracts ### Fixes - - [#1545](https://github.com/poanetwork/blockscout/pull/1545) - Fix scheduling of latest block polling in Realtime Fetcher - - [#1554](https://github.com/poanetwork/blockscout/pull/1554) - Encode integer parameters when calling smart contract functions - - [#1537](https://github.com/poanetwork/blockscout/pull/1537) - Fix test that depended on date - - [#1534](https://github.com/poanetwork/blockscout/pull/1534) - Render a nicer error when creator cannot be determined - - [#1527](https://github.com/poanetwork/blockscout/pull/1527) - Add index to value_fetched_at - - [#1518](https://github.com/poanetwork/blockscout/pull/1518) - Select only distinct failed transactions - - [#1516](https://github.com/poanetwork/blockscout/pull/1516) - Fix coin balance params reducer for pending transaction - - [#1511](https://github.com/poanetwork/blockscout/pull/1511) - Set correct log level for production - - [#1510](https://github.com/poanetwork/blockscout/pull/1510) - Fix test that fails every 1st day of the month - - [#1509](https://github.com/poanetwork/blockscout/pull/1509) - Add index to blocks' consensus - - [#1508](https://github.com/poanetwork/blockscout/pull/1508) - Remove duplicated indexes - - [#1505](https://github.com/poanetwork/blockscout/pull/1505) - Use https instead of ssh for absinthe libs - - [#1501](https://github.com/poanetwork/blockscout/pull/1501) - Constructor_arguments must be type `text` - - [#1498](https://github.com/poanetwork/blockscout/pull/1498) - Add index for created_contract_address_hash in transactions - - [#1493](https://github.com/poanetwork/blockscout/pull/1493) - Do not do work in process initialization - - [#1487](https://github.com/poanetwork/blockscout/pull/1487) - Limit geth sync to 128 blocks - - [#1484](https://github.com/poanetwork/blockscout/pull/1484) - Allow decoding input as utf-8 - - [#1479](https://github.com/poanetwork/blockscout/pull/1479) - Remove smoothing from coin balance chart + +- [#1545](https://github.com/poanetwork/blockscout/pull/1545) - Fix scheduling of latest block polling in Realtime Fetcher +- [#1554](https://github.com/poanetwork/blockscout/pull/1554) - Encode integer parameters when calling smart contract functions +- [#1537](https://github.com/poanetwork/blockscout/pull/1537) - Fix test that depended on date +- [#1534](https://github.com/poanetwork/blockscout/pull/1534) - Render a nicer error when creator cannot be determined +- [#1527](https://github.com/poanetwork/blockscout/pull/1527) - Add index to value_fetched_at +- [#1518](https://github.com/poanetwork/blockscout/pull/1518) - Select only distinct failed transactions +- [#1516](https://github.com/poanetwork/blockscout/pull/1516) - Fix coin balance params reducer for pending transaction +- [#1511](https://github.com/poanetwork/blockscout/pull/1511) - Set correct log level for production +- [#1510](https://github.com/poanetwork/blockscout/pull/1510) - Fix test that fails every 1st day of the month +- [#1509](https://github.com/poanetwork/blockscout/pull/1509) - Add index to blocks' consensus +- [#1508](https://github.com/poanetwork/blockscout/pull/1508) - Remove duplicated indexes +- [#1505](https://github.com/poanetwork/blockscout/pull/1505) - Use https instead of ssh for absinthe libs +- [#1501](https://github.com/poanetwork/blockscout/pull/1501) - Constructor_arguments must be type `text` +- [#1498](https://github.com/poanetwork/blockscout/pull/1498) - Add index for created_contract_address_hash in transactions +- [#1493](https://github.com/poanetwork/blockscout/pull/1493) - Do not do work in process initialization +- [#1487](https://github.com/poanetwork/blockscout/pull/1487) - Limit geth sync to 128 blocks +- [#1484](https://github.com/poanetwork/blockscout/pull/1484) - Allow decoding input as utf-8 +- [#1479](https://github.com/poanetwork/blockscout/pull/1479) - Remove smoothing from coin balance chart ### Chore - - [https://github.com/poanetwork/blockscout/pull/1532](https://github.com/poanetwork/blockscout/pull/1532) - Upgrade elixir to 1.8.1 - - [https://github.com/poanetwork/blockscout/pull/1553](https://github.com/poanetwork/blockscout/pull/1553) - Dockerfile: remove 1.7.1 version pin FROM bitwalker/alpine-elixir-phoenix - - [https://github.com/poanetwork/blockscout/pull/1465](https://github.com/poanetwork/blockscout/pull/1465) - Resolve lodash security alert + +- - Upgrade elixir to 1.8.1 +- - Dockerfile: remove 1.7.1 version pin FROM bitwalker/alpine-elixir-phoenix +- - Resolve lodash security alert From 87ed8d6aa56736543adeef65e812ac2ae4d3c1ce Mon Sep 17 00:00:00 2001 From: Ethan van Ballegooyen Date: Thu, 29 Aug 2019 13:05:00 +0200 Subject: [PATCH 053/109] Fixed incorrect numerical order in Chores --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 971696703b..b2c1662db9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,8 +29,8 @@ - [#2646](https://github.com/poanetwork/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout - [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown -- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities - [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted +- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities - [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically - [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases - [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table From 5ed0fe694cd93cebdd32f422442dbbcadc4ed359 Mon Sep 17 00:00:00 2001 From: Ethan van Ballegooyen Date: Thu, 29 Aug 2019 13:14:23 +0200 Subject: [PATCH 054/109] Changelog.md Clean up --- CHANGELOG.md | 855 +++++++++++++++++++++++++-------------------------- 1 file changed, 427 insertions(+), 428 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b2c1662db9..812cf4d350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,574 +1,573 @@ ## Current ### Features - -- [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs -- [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type -- [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method -- [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges -- [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation +- [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs +- [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type +- [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method +- [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges +- [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes - -- [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons -- [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query -- [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues -- [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test -- [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta -- [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint -- [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper -- [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css -- [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload -- [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter -- [#2568](https://github.com/poanetwork/blockscout/pull/2568) - filter pending token transfers -- [#2564](https://github.com/poanetwork/blockscout/pull/2564) - fix first page button for uncles and reorgs -- [#2563](https://github.com/poanetwork/blockscout/pull/2563) - Fix view less transfers button -- [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records +- [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons +- [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query +- [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues +- [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test +- [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta +- [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint +- [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper +- [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css +- [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload +- [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter +- [#2568](https://github.com/poanetwork/blockscout/pull/2568) - filter pending token transfers +- [#2564](https://github.com/poanetwork/blockscout/pull/2564) - fix first page button for uncles and reorgs +- [#2563](https://github.com/poanetwork/blockscout/pull/2563) - Fix view less transfers button +- [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records ### Chore +- [#2646](https://github.com/poanetwork/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout +- [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown +- [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted +- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities +- [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically +- [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases +- [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table +- [#2574](https://github.com/poanetwork/blockscout/pull/2574) - limit request body in json rpc error +- [#2566](https://github.com/poanetwork/blockscout/pull/2566) - upgrade absinthe phoenix -- [#2646](https://github.com/poanetwork/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout -- [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown -- [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted -- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities -- [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically -- [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases -- [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table -- [#2574](https://github.com/poanetwork/blockscout/pull/2574) - limit request body in json rpc error -- [#2566](https://github.com/poanetwork/blockscout/pull/2566) - upgrade absinthe phoenix ## 2.0.3-beta ### Features - -- [#2433](https://github.com/poanetwork/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation -- [#2529](https://github.com/poanetwork/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page -- [#2376](https://github.com/poanetwork/blockscout/pull/2376) - Split API and WebApp routes -- [#2477](https://github.com/poanetwork/blockscout/pull/2477) - aggregate token transfers on transaction page -- [#2458](https://github.com/poanetwork/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks -- [#2456](https://github.com/poanetwork/blockscout/pull/2456) - fetch pending transactions for geth -- [#2403](https://github.com/poanetwork/blockscout/pull/2403) - Return gasPrice field at the result of gettxinfo method +- [#2433](https://github.com/poanetwork/blockscout/pull/2433) - Add a functionality to try Eth RPC methods in the documentation +- [#2529](https://github.com/poanetwork/blockscout/pull/2529) - show both eth value and token transfers on transaction overview page +- [#2376](https://github.com/poanetwork/blockscout/pull/2376) - Split API and WebApp routes +- [#2477](https://github.com/poanetwork/blockscout/pull/2477) - aggregate token transfers on transaction page +- [#2458](https://github.com/poanetwork/blockscout/pull/2458) - Add LAST_BLOCK var to add ability indexing in the range of blocks +- [#2456](https://github.com/poanetwork/blockscout/pull/2456) - fetch pending transactions for geth +- [#2403](https://github.com/poanetwork/blockscout/pull/2403) - Return gasPrice field at the result of gettxinfo method ### Fixes - -- [#2562](https://github.com/poanetwork/blockscout/pull/2562) - Fix dark theme flickering -- [#2560](https://github.com/poanetwork/blockscout/pull/2560) - fix slash before not empty path in docs -- [#2559](https://github.com/poanetwork/blockscout/pull/2559) - fix rsk total supply for empty exchange rate -- [#2553](https://github.com/poanetwork/blockscout/pull/2553) - Dark theme import to the end of sass -- [#2550](https://github.com/poanetwork/blockscout/pull/2550) - correctly encode decimal values for frontend -- [#2549](https://github.com/poanetwork/blockscout/pull/2549) - Fix wrong colour of tooltip -- [#2548](https://github.com/poanetwork/blockscout/pull/2548) - CSS preload support in Firefox -- [#2547](https://github.com/poanetwork/blockscout/pull/2547) - do not show eth value if it's zero on the transaction overview page -- [#2543](https://github.com/poanetwork/blockscout/pull/2543) - do not hide search input during logs search -- [#2524](https://github.com/poanetwork/blockscout/pull/2524) - fix dark theme validator data styles -- [#2532](https://github.com/poanetwork/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page -- [#2528](https://github.com/poanetwork/blockscout/pull/2528) - fix coin history chart data -- [#2520](https://github.com/poanetwork/blockscout/pull/2520) - Hide loading message when fetching is failed -- [#2523](https://github.com/poanetwork/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions -- [#2519](https://github.com/poanetwork/blockscout/pull/2519) - enable `First` page button in pagination -- [#2518](https://github.com/poanetwork/blockscout/pull/2518) - create suggested indexes -- [#2517](https://github.com/poanetwork/blockscout/pull/2517) - remove duplicate indexes -- [#2515](https://github.com/poanetwork/blockscout/pull/2515) - do not aggregate NFT token transfers -- [#2514](https://github.com/poanetwork/blockscout/pull/2514) - Isolating of staking dapp css && extracting of non-critical css -- [#2512](https://github.com/poanetwork/blockscout/pull/2512) - alert link fix -- [#2509](https://github.com/poanetwork/blockscout/pull/2509) - value-ticker gaps fix -- [#2508](https://github.com/poanetwork/blockscout/pull/2508) - logs view columns fix -- [#2506](https://github.com/poanetwork/blockscout/pull/2506) - fix two active tab in the top menu -- [#2503](https://github.com/poanetwork/blockscout/pull/2503) - Mitigate autocompletion library influence to page loading performance -- [#2502](https://github.com/poanetwork/blockscout/pull/2502) - increase reward task timeout -- [#2463](https://github.com/poanetwork/blockscout/pull/2463) - dark theme fixes -- [#2496](https://github.com/poanetwork/blockscout/pull/2496) - fix docker build -- [#2495](https://github.com/poanetwork/blockscout/pull/2495) - fix logs for indexed chain -- [#2459](https://github.com/poanetwork/blockscout/pull/2459) - fix top addresses query -- [#2425](https://github.com/poanetwork/blockscout/pull/2425) - Force to show address view for checksummed address even if it is not in DB -- [#2551](https://github.com/poanetwork/blockscout/pull/2551) - Correctly handle dynamically created Bootstrap tooltips +- [#2562](https://github.com/poanetwork/blockscout/pull/2562) - Fix dark theme flickering +- [#2560](https://github.com/poanetwork/blockscout/pull/2560) - fix slash before not empty path in docs +- [#2559](https://github.com/poanetwork/blockscout/pull/2559) - fix rsk total supply for empty exchange rate +- [#2553](https://github.com/poanetwork/blockscout/pull/2553) - Dark theme import to the end of sass +- [#2550](https://github.com/poanetwork/blockscout/pull/2550) - correctly encode decimal values for frontend +- [#2549](https://github.com/poanetwork/blockscout/pull/2549) - Fix wrong colour of tooltip +- [#2548](https://github.com/poanetwork/blockscout/pull/2548) - CSS preload support in Firefox +- [#2547](https://github.com/poanetwork/blockscout/pull/2547) - do not show eth value if it's zero on the transaction overview page +- [#2543](https://github.com/poanetwork/blockscout/pull/2543) - do not hide search input during logs search +- [#2524](https://github.com/poanetwork/blockscout/pull/2524) - fix dark theme validator data styles +- [#2532](https://github.com/poanetwork/blockscout/pull/2532) - don't show empty token transfers on the transaction overview page +- [#2528](https://github.com/poanetwork/blockscout/pull/2528) - fix coin history chart data +- [#2520](https://github.com/poanetwork/blockscout/pull/2520) - Hide loading message when fetching is failed +- [#2523](https://github.com/poanetwork/blockscout/pull/2523) - Avoid importing internal_transactions of pending transactions +- [#2519](https://github.com/poanetwork/blockscout/pull/2519) - enable `First` page button in pagination +- [#2518](https://github.com/poanetwork/blockscout/pull/2518) - create suggested indexes +- [#2517](https://github.com/poanetwork/blockscout/pull/2517) - remove duplicate indexes +- [#2515](https://github.com/poanetwork/blockscout/pull/2515) - do not aggregate NFT token transfers +- [#2514](https://github.com/poanetwork/blockscout/pull/2514) - Isolating of staking dapp css && extracting of non-critical css +- [#2512](https://github.com/poanetwork/blockscout/pull/2512) - alert link fix +- [#2509](https://github.com/poanetwork/blockscout/pull/2509) - value-ticker gaps fix +- [#2508](https://github.com/poanetwork/blockscout/pull/2508) - logs view columns fix +- [#2506](https://github.com/poanetwork/blockscout/pull/2506) - fix two active tab in the top menu +- [#2503](https://github.com/poanetwork/blockscout/pull/2503) - Mitigate autocompletion library influence to page loading performance +- [#2502](https://github.com/poanetwork/blockscout/pull/2502) - increase reward task timeout +- [#2463](https://github.com/poanetwork/blockscout/pull/2463) - dark theme fixes +- [#2496](https://github.com/poanetwork/blockscout/pull/2496) - fix docker build +- [#2495](https://github.com/poanetwork/blockscout/pull/2495) - fix logs for indexed chain +- [#2459](https://github.com/poanetwork/blockscout/pull/2459) - fix top addresses query +- [#2425](https://github.com/poanetwork/blockscout/pull/2425) - Force to show address view for checksummed address even if it is not in DB +- [#2551](https://github.com/poanetwork/blockscout/pull/2551) - Correctly handle dynamically created Bootstrap tooltips ### Chore +- [#2554](https://github.com/poanetwork/blockscout/pull/2554) - remove extra slash for endpoint url in docs +- [#2552](https://github.com/poanetwork/blockscout/pull/2552) - remove brackets for token holders percentage +- [#2507](https://github.com/poanetwork/blockscout/pull/2507) - update minor version of ecto, ex_machina, phoenix_live_reload +- [#2516](https://github.com/poanetwork/blockscout/pull/2516) - update absinthe plug from fork +- [#2473](https://github.com/poanetwork/blockscout/pull/2473) - get rid of cldr warnings +- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 +- [#2492](https://github.com/poanetwork/blockscout/pull/2492) - hide decoded row if event is not decoded +- [#2490](https://github.com/poanetwork/blockscout/pull/2490) - enable credo duplicated code check +- [#2432](https://github.com/poanetwork/blockscout/pull/2432) - bump credo version +- [#2457](https://github.com/poanetwork/blockscout/pull/2457) - update mix.lock +- [#2435](https://github.com/poanetwork/blockscout/pull/2435) - Replace deprecated extract-text-webpack-plugin with mini-css-extract-plugin +- [#2450](https://github.com/poanetwork/blockscout/pull/2450) - Fix clearance of logs and node_modules folders in clearing script +- [#2434](https://github.com/poanetwork/blockscout/pull/2434) - get rid of timex warnings +- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 +- [#2373](https://github.com/poanetwork/blockscout/pull/2373) - Add script to validate internal_transactions constraint for large DBs -- [#2554](https://github.com/poanetwork/blockscout/pull/2554) - remove extra slash for endpoint url in docs -- [#2552](https://github.com/poanetwork/blockscout/pull/2552) - remove brackets for token holders percentage -- [#2507](https://github.com/poanetwork/blockscout/pull/2507) - update minor version of ecto, ex_machina, phoenix_live_reload -- [#2516](https://github.com/poanetwork/blockscout/pull/2516) - update absinthe plug from fork -- [#2473](https://github.com/poanetwork/blockscout/pull/2473) - get rid of cldr warnings -- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 -- [#2492](https://github.com/poanetwork/blockscout/pull/2492) - hide decoded row if event is not decoded -- [#2490](https://github.com/poanetwork/blockscout/pull/2490) - enable credo duplicated code check -- [#2432](https://github.com/poanetwork/blockscout/pull/2432) - bump credo version -- [#2457](https://github.com/poanetwork/blockscout/pull/2457) - update mix.lock -- [#2435](https://github.com/poanetwork/blockscout/pull/2435) - Replace deprecated extract-text-webpack-plugin with mini-css-extract-plugin -- [#2450](https://github.com/poanetwork/blockscout/pull/2450) - Fix clearance of logs and node_modules folders in clearing script -- [#2434](https://github.com/poanetwork/blockscout/pull/2434) - get rid of timex warnings -- [#2402](https://github.com/poanetwork/blockscout/pull/2402) - bump otp version to 22.0 -- [#2373](https://github.com/poanetwork/blockscout/pull/2373) - Add script to validate internal_transactions constraint for large DBs ## 2.0.2-beta ### Features - -- [#2412](https://github.com/poanetwork/blockscout/pull/2412) - dark theme -- [#2399](https://github.com/poanetwork/blockscout/pull/2399) - decode verified smart contract's logs -- [#2391](https://github.com/poanetwork/blockscout/pull/2391) - Controllers Improvements -- [#2379](https://github.com/poanetwork/blockscout/pull/2379) - Disable network selector when is empty -- [#2374](https://github.com/poanetwork/blockscout/pull/2374) - decode constructor arguments for verified smart contracts -- [#2366](https://github.com/poanetwork/blockscout/pull/2366) - paginate eth logs -- [#2360](https://github.com/poanetwork/blockscout/pull/2360) - add default evm version to smart contract verification -- [#2352](https://github.com/poanetwork/blockscout/pull/2352) - Fetch rewards in parallel with transactions -- [#2294](https://github.com/poanetwork/blockscout/pull/2294) - add healthy block period checking endpoint -- [#2324](https://github.com/poanetwork/blockscout/pull/2324) - set timeout for loading message on the main page +- [#2412](https://github.com/poanetwork/blockscout/pull/2412) - dark theme +- [#2399](https://github.com/poanetwork/blockscout/pull/2399) - decode verified smart contract's logs +- [#2391](https://github.com/poanetwork/blockscout/pull/2391) - Controllers Improvements +- [#2379](https://github.com/poanetwork/blockscout/pull/2379) - Disable network selector when is empty +- [#2374](https://github.com/poanetwork/blockscout/pull/2374) - decode constructor arguments for verified smart contracts +- [#2366](https://github.com/poanetwork/blockscout/pull/2366) - paginate eth logs +- [#2360](https://github.com/poanetwork/blockscout/pull/2360) - add default evm version to smart contract verification +- [#2352](https://github.com/poanetwork/blockscout/pull/2352) - Fetch rewards in parallel with transactions +- [#2294](https://github.com/poanetwork/blockscout/pull/2294) - add healthy block period checking endpoint +- [#2324](https://github.com/poanetwork/blockscout/pull/2324) - set timeout for loading message on the main page ### Fixes - -- [#2421](https://github.com/poanetwork/blockscout/pull/2421) - Fix hiding of loader for txs on the main page -- [#2420](https://github.com/poanetwork/blockscout/pull/2420) - fetch data from cache in healthy endpoint -- [#2416](https://github.com/poanetwork/blockscout/pull/2416) - Fix "page not found" handling in the router -- [#2413](https://github.com/poanetwork/blockscout/pull/2413) - remove outer tables for decoded data -- [#2410](https://github.com/poanetwork/blockscout/pull/2410) - preload smart contract for logs decoding -- [#2405](https://github.com/poanetwork/blockscout/pull/2405) - added templates for table loader and tile loader -- [#2398](https://github.com/poanetwork/blockscout/pull/2398) - show only one decoded candidate -- [#2389](https://github.com/poanetwork/blockscout/pull/2389) - Reduce Lodash lib size (86% of lib methods are not used) -- [#2388](https://github.com/poanetwork/blockscout/pull/2388) - add create2 support to geth's js tracer -- [#2387](https://github.com/poanetwork/blockscout/pull/2387) - fix not existing keys in transaction json rpc -- [#2378](https://github.com/poanetwork/blockscout/pull/2378) - Page performance: exclude moment.js localization files except EN, remove unused css -- [#2368](https://github.com/poanetwork/blockscout/pull/2368) - add two columns of smart contract info -- [#2375](https://github.com/poanetwork/blockscout/pull/2375) - Update created_contract_code_indexed_at on transaction import conflict -- [#2346](https://github.com/poanetwork/blockscout/pull/2346) - Avoid fetching internal transactions of blocks that still need refetching -- [#2350](https://github.com/poanetwork/blockscout/pull/2350) - fix invalid User agent headers -- [#2345](https://github.com/poanetwork/blockscout/pull/2345) - do not override existing market records -- [#2337](https://github.com/poanetwork/blockscout/pull/2337) - set url params for prod explicitly -- [#2341](https://github.com/poanetwork/blockscout/pull/2341) - fix transaction input json encoding -- [#2311](https://github.com/poanetwork/blockscout/pull/2311) - fix market history overriding with zeroes -- [#2310](https://github.com/poanetwork/blockscout/pull/2310) - parse url for api docs -- [#2299](https://github.com/poanetwork/blockscout/pull/2299) - fix interpolation in error message -- [#2303](https://github.com/poanetwork/blockscout/pull/2303) - fix transaction csv download link -- [#2304](https://github.com/poanetwork/blockscout/pull/2304) - footer grid fix for md resolution -- [#2291](https://github.com/poanetwork/blockscout/pull/2291) - dashboard fix for md resolution, transactions load fix, block info row fix, addresses page issue, check mark issue -- [#2326](https://github.com/poanetwork/blockscout/pull/2326) - fix nested constructor arguments +- [#2421](https://github.com/poanetwork/blockscout/pull/2421) - Fix hiding of loader for txs on the main page +- [#2420](https://github.com/poanetwork/blockscout/pull/2420) - fetch data from cache in healthy endpoint +- [#2416](https://github.com/poanetwork/blockscout/pull/2416) - Fix "page not found" handling in the router +- [#2413](https://github.com/poanetwork/blockscout/pull/2413) - remove outer tables for decoded data +- [#2410](https://github.com/poanetwork/blockscout/pull/2410) - preload smart contract for logs decoding +- [#2405](https://github.com/poanetwork/blockscout/pull/2405) - added templates for table loader and tile loader +- [#2398](https://github.com/poanetwork/blockscout/pull/2398) - show only one decoded candidate +- [#2389](https://github.com/poanetwork/blockscout/pull/2389) - Reduce Lodash lib size (86% of lib methods are not used) +- [#2388](https://github.com/poanetwork/blockscout/pull/2388) - add create2 support to geth's js tracer +- [#2387](https://github.com/poanetwork/blockscout/pull/2387) - fix not existing keys in transaction json rpc +- [#2378](https://github.com/poanetwork/blockscout/pull/2378) - Page performance: exclude moment.js localization files except EN, remove unused css +- [#2368](https://github.com/poanetwork/blockscout/pull/2368) - add two columns of smart contract info +- [#2375](https://github.com/poanetwork/blockscout/pull/2375) - Update created_contract_code_indexed_at on transaction import conflict +- [#2346](https://github.com/poanetwork/blockscout/pull/2346) - Avoid fetching internal transactions of blocks that still need refetching +- [#2350](https://github.com/poanetwork/blockscout/pull/2350) - fix invalid User agent headers +- [#2345](https://github.com/poanetwork/blockscout/pull/2345) - do not override existing market records +- [#2337](https://github.com/poanetwork/blockscout/pull/2337) - set url params for prod explicitly +- [#2341](https://github.com/poanetwork/blockscout/pull/2341) - fix transaction input json encoding +- [#2311](https://github.com/poanetwork/blockscout/pull/2311) - fix market history overriding with zeroes +- [#2310](https://github.com/poanetwork/blockscout/pull/2310) - parse url for api docs +- [#2299](https://github.com/poanetwork/blockscout/pull/2299) - fix interpolation in error message +- [#2303](https://github.com/poanetwork/blockscout/pull/2303) - fix transaction csv download link +- [#2304](https://github.com/poanetwork/blockscout/pull/2304) - footer grid fix for md resolution +- [#2291](https://github.com/poanetwork/blockscout/pull/2291) - dashboard fix for md resolution, transactions load fix, block info row fix, addresses page issue, check mark issue +- [#2326](https://github.com/poanetwork/blockscout/pull/2326) - fix nested constructor arguments ### Chore +- [#2422](https://github.com/poanetwork/blockscout/pull/2422) - check if address_id is binary in token_transfers_csv endpoint +- [#2418](https://github.com/poanetwork/blockscout/pull/2418) - Remove parentheses in market cap percentage +- [#2401](https://github.com/poanetwork/blockscout/pull/2401) - add ENV vars to manage updating period of average block time and market history cache +- [#2363](https://github.com/poanetwork/blockscout/pull/2363) - add parameters example for eth rpc +- [#2342](https://github.com/poanetwork/blockscout/pull/2342) - Upgrade Postgres image version in Docker setup +- [#2325](https://github.com/poanetwork/blockscout/pull/2325) - Reduce function input to address' hash only where possible +- [#2323](https://github.com/poanetwork/blockscout/pull/2323) - Group Explorer caches +- [#2305](https://github.com/poanetwork/blockscout/pull/2305) - Improve Address controllers +- [#2302](https://github.com/poanetwork/blockscout/pull/2302) - fix names for xDai source +- [#2289](https://github.com/poanetwork/blockscout/pull/2289) - Optional websockets for dev environment +- [#2307](https://github.com/poanetwork/blockscout/pull/2307) - add GoJoy to README +- [#2293](https://github.com/poanetwork/blockscout/pull/2293) - remove request idle timeout configuration +- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - bump elixir version to 1.9.0 -- [#2422](https://github.com/poanetwork/blockscout/pull/2422) - check if address_id is binary in token_transfers_csv endpoint -- [#2418](https://github.com/poanetwork/blockscout/pull/2418) - Remove parentheses in market cap percentage -- [#2401](https://github.com/poanetwork/blockscout/pull/2401) - add ENV vars to manage updating period of average block time and market history cache -- [#2363](https://github.com/poanetwork/blockscout/pull/2363) - add parameters example for eth rpc -- [#2342](https://github.com/poanetwork/blockscout/pull/2342) - Upgrade Postgres image version in Docker setup -- [#2325](https://github.com/poanetwork/blockscout/pull/2325) - Reduce function input to address' hash only where possible -- [#2323](https://github.com/poanetwork/blockscout/pull/2323) - Group Explorer caches -- [#2305](https://github.com/poanetwork/blockscout/pull/2305) - Improve Address controllers -- [#2302](https://github.com/poanetwork/blockscout/pull/2302) - fix names for xDai source -- [#2289](https://github.com/poanetwork/blockscout/pull/2289) - Optional websockets for dev environment -- [#2307](https://github.com/poanetwork/blockscout/pull/2307) - add GoJoy to README -- [#2293](https://github.com/poanetwork/blockscout/pull/2293) - remove request idle timeout configuration -- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - bump elixir version to 1.9.0 ## 2.0.1-beta ### Features - -- [#2283](https://github.com/poanetwork/blockscout/pull/2283) - Add transactions cache -- [#2182](https://github.com/poanetwork/blockscout/pull/2182) - add market history cache -- [#2109](https://github.com/poanetwork/blockscout/pull/2109) - use bigger updates instead of `Multi` transactions in BlocksTransactionsMismatch -- [#2075](https://github.com/poanetwork/blockscout/pull/2075) - add blocks cache -- [#2151](https://github.com/poanetwork/blockscout/pull/2151) - hide dropdown menu then other networks list is empty -- [#2191](https://github.com/poanetwork/blockscout/pull/2191) - allow to configure token metadata update interval -- [#2146](https://github.com/poanetwork/blockscout/pull/2146) - feat: add eth_getLogs rpc endpoint -- [#2216](https://github.com/poanetwork/blockscout/pull/2216) - Improve token's controllers by avoiding unnecessary preloads -- [#2235](https://github.com/poanetwork/blockscout/pull/2235) - save and show additional validation fields to smart contract -- [#2190](https://github.com/poanetwork/blockscout/pull/2190) - show all token transfers -- [#2193](https://github.com/poanetwork/blockscout/pull/2193) - feat: add BLOCKSCOUT_HOST, and use it in API docs -- [#2266](https://github.com/poanetwork/blockscout/pull/2266) - allow excluding uncles from average block time calculation +- [#2283](https://github.com/poanetwork/blockscout/pull/2283) - Add transactions cache +- [#2182](https://github.com/poanetwork/blockscout/pull/2182) - add market history cache +- [#2109](https://github.com/poanetwork/blockscout/pull/2109) - use bigger updates instead of `Multi` transactions in BlocksTransactionsMismatch +- [#2075](https://github.com/poanetwork/blockscout/pull/2075) - add blocks cache +- [#2151](https://github.com/poanetwork/blockscout/pull/2151) - hide dropdown menu then other networks list is empty +- [#2191](https://github.com/poanetwork/blockscout/pull/2191) - allow to configure token metadata update interval +- [#2146](https://github.com/poanetwork/blockscout/pull/2146) - feat: add eth_getLogs rpc endpoint +- [#2216](https://github.com/poanetwork/blockscout/pull/2216) - Improve token's controllers by avoiding unnecessary preloads +- [#2235](https://github.com/poanetwork/blockscout/pull/2235) - save and show additional validation fields to smart contract +- [#2190](https://github.com/poanetwork/blockscout/pull/2190) - show all token transfers +- [#2193](https://github.com/poanetwork/blockscout/pull/2193) - feat: add BLOCKSCOUT_HOST, and use it in API docs +- [#2266](https://github.com/poanetwork/blockscout/pull/2266) - allow excluding uncles from average block time calculation ### Fixes - -- [#2290](https://github.com/poanetwork/blockscout/pull/2290) - Add eth_get_balance.json to AddressView's render -- [#2286](https://github.com/poanetwork/blockscout/pull/2286) - banner stats issues on sm resolutions, transactions title issue -- [#2284](https://github.com/poanetwork/blockscout/pull/2284) - add 404 status for not existing pages -- [#2244](https://github.com/poanetwork/blockscout/pull/2244) - fix internal transactions failing to be indexed because of constraint -- [#2281](https://github.com/poanetwork/blockscout/pull/2281) - typo issues, dropdown issues -- [#2278](https://github.com/poanetwork/blockscout/pull/2278) - increase threshold for scientific notation -- [#2275](https://github.com/poanetwork/blockscout/pull/2275) - Description for networks selector -- [#2263](https://github.com/poanetwork/blockscout/pull/2263) - added an ability to close network selector on outside click -- [#2257](https://github.com/poanetwork/blockscout/pull/2257) - 'download csv' button added to different tabs -- [#2242](https://github.com/poanetwork/blockscout/pull/2242) - added styles for 'download csv' button -- [#2261](https://github.com/poanetwork/blockscout/pull/2261) - header logo aligned to the center properly -- [#2254](https://github.com/poanetwork/blockscout/pull/2254) - search length issue, tile link wrapping issue -- [#2238](https://github.com/poanetwork/blockscout/pull/2238) - header content alignment issue, hide navbar on outside click -- [#2229](https://github.com/poanetwork/blockscout/pull/2229) - gap issue between qr and copy button in token transfers, top cards width and height issue -- [#2201](https://github.com/poanetwork/blockscout/pull/2201) - footer columns fix -- [#2179](https://github.com/poanetwork/blockscout/pull/2179) - fix docker build error -- [#2165](https://github.com/poanetwork/blockscout/pull/2165) - sort blocks by timestamp when calculating average block time -- [#2175](https://github.com/poanetwork/blockscout/pull/2175) - fix coinmarketcap response errors -- [#2164](https://github.com/poanetwork/blockscout/pull/2164) - fix large numbers in balance view card -- [#2155](https://github.com/poanetwork/blockscout/pull/2155) - fix pending transaction query -- [#2183](https://github.com/poanetwork/blockscout/pull/2183) - tile content aligning for mobile resolution fix, dai logo fix -- [#2162](https://github.com/poanetwork/blockscout/pull/2162) - contract creation tile color changed -- [#2144](https://github.com/poanetwork/blockscout/pull/2144) - 'page not found' images path fixed for goerli -- [#2142](https://github.com/poanetwork/blockscout/pull/2142) - Removed posdao theme and logo, added 'page not found' image for goerli -- [#2138](https://github.com/poanetwork/blockscout/pull/2138) - badge colors issue, api titles issue -- [#2129](https://github.com/poanetwork/blockscout/pull/2129) - Fix for width of explorer elements -- [#2121](https://github.com/poanetwork/blockscout/pull/2121) - Binding of 404 page -- [#2120](https://github.com/poanetwork/blockscout/pull/2120) - footer links and socials focus color issue -- [#2113](https://github.com/poanetwork/blockscout/pull/2113) - renewed logos for rsk, dai, blockscout; themes color changes for lukso; error images for lukso -- [#2112](https://github.com/poanetwork/blockscout/pull/2112) - themes color improvements, dropdown color issue -- [#2110](https://github.com/poanetwork/blockscout/pull/2110) - themes colors issues, ui issues -- [#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 -- [#2093](https://github.com/poanetwork/blockscout/pull/2093) - detect token transfer type for deprecated erc721 spec -- [#2111](https://github.com/poanetwork/blockscout/pull/2111) - improve address transaction controller -- [#2108](https://github.com/poanetwork/blockscout/pull/2108) - fix uncle fetching without full transactions -- [#2128](https://github.com/poanetwork/blockscout/pull/2128) - add new function clause for uncle errors -- [#2123](https://github.com/poanetwork/blockscout/pull/2123) - fix coins percentage view -- [#2119](https://github.com/poanetwork/blockscout/pull/2119) - fix map logging -- [#2130](https://github.com/poanetwork/blockscout/pull/2130) - fix navigation -- [#2148](https://github.com/poanetwork/blockscout/pull/2148) - filter pending logs -- [#2147](https://github.com/poanetwork/blockscout/pull/2147) - add rsk format of checksum -- [#2149](https://github.com/poanetwork/blockscout/pull/2149) - remove pending transaction count -- [#2177](https://github.com/poanetwork/blockscout/pull/2177) - remove duplicate entries from UncleBlock's Fetcher -- [#2169](https://github.com/poanetwork/blockscout/pull/2169) - add more validator reward types for xDai -- [#2173](https://github.com/poanetwork/blockscout/pull/2173) - handle correctly empty transactions -- [#2174](https://github.com/poanetwork/blockscout/pull/2174) - fix reward channel joining -- [#2186](https://github.com/poanetwork/blockscout/pull/2186) - fix net version test -- [#2196](https://github.com/poanetwork/blockscout/pull/2196) - Nethermind client fixes -- [#2237](https://github.com/poanetwork/blockscout/pull/2237) - fix rsk total_supply -- [#2198](https://github.com/poanetwork/blockscout/pull/2198) - reduce transaction status and error constraint -- [#2167](https://github.com/poanetwork/blockscout/pull/2167) - feat: document eth rpc api mimicking endpoints -- [#2225](https://github.com/poanetwork/blockscout/pull/2225) - fix metadata decoding in Solidity 0.5.9 smart contract verification -- [#2204](https://github.com/poanetwork/blockscout/pull/2204) - fix large contract verification -- [#2258](https://github.com/poanetwork/blockscout/pull/2258) - reduce BlocksTransactionsMismatch memory footprint -- [#2247](https://github.com/poanetwork/blockscout/pull/2247) - hide logs search if there are no logs -- [#2248](https://github.com/poanetwork/blockscout/pull/2248) - sort block after query execution for average block time -- [#2249](https://github.com/poanetwork/blockscout/pull/2249) - More transaction controllers improvements -- [#2267](https://github.com/poanetwork/blockscout/pull/2267) - Modify implementation of `where_transaction_has_multiple_internal_transactions` -- [#2270](https://github.com/poanetwork/blockscout/pull/2270) - Remove duplicate params in `Indexer.Fetcher.TokenBalance` -- [#2268](https://github.com/poanetwork/blockscout/pull/2268) - remove not existing assigns in html code -- [#2276](https://github.com/poanetwork/blockscout/pull/2276) - remove port in docs +- [#2290](https://github.com/poanetwork/blockscout/pull/2290) - Add eth_get_balance.json to AddressView's render +- [#2286](https://github.com/poanetwork/blockscout/pull/2286) - banner stats issues on sm resolutions, transactions title issue +- [#2284](https://github.com/poanetwork/blockscout/pull/2284) - add 404 status for not existing pages +- [#2244](https://github.com/poanetwork/blockscout/pull/2244) - fix internal transactions failing to be indexed because of constraint +- [#2281](https://github.com/poanetwork/blockscout/pull/2281) - typo issues, dropdown issues +- [#2278](https://github.com/poanetwork/blockscout/pull/2278) - increase threshold for scientific notation +- [#2275](https://github.com/poanetwork/blockscout/pull/2275) - Description for networks selector +- [#2263](https://github.com/poanetwork/blockscout/pull/2263) - added an ability to close network selector on outside click +- [#2257](https://github.com/poanetwork/blockscout/pull/2257) - 'download csv' button added to different tabs +- [#2242](https://github.com/poanetwork/blockscout/pull/2242) - added styles for 'download csv' button +- [#2261](https://github.com/poanetwork/blockscout/pull/2261) - header logo aligned to the center properly +- [#2254](https://github.com/poanetwork/blockscout/pull/2254) - search length issue, tile link wrapping issue +- [#2238](https://github.com/poanetwork/blockscout/pull/2238) - header content alignment issue, hide navbar on outside click +- [#2229](https://github.com/poanetwork/blockscout/pull/2229) - gap issue between qr and copy button in token transfers, top cards width and height issue +- [#2201](https://github.com/poanetwork/blockscout/pull/2201) - footer columns fix +- [#2179](https://github.com/poanetwork/blockscout/pull/2179) - fix docker build error +- [#2165](https://github.com/poanetwork/blockscout/pull/2165) - sort blocks by timestamp when calculating average block time +- [#2175](https://github.com/poanetwork/blockscout/pull/2175) - fix coinmarketcap response errors +- [#2164](https://github.com/poanetwork/blockscout/pull/2164) - fix large numbers in balance view card +- [#2155](https://github.com/poanetwork/blockscout/pull/2155) - fix pending transaction query +- [#2183](https://github.com/poanetwork/blockscout/pull/2183) - tile content aligning for mobile resolution fix, dai logo fix +- [#2162](https://github.com/poanetwork/blockscout/pull/2162) - contract creation tile color changed +- [#2144](https://github.com/poanetwork/blockscout/pull/2144) - 'page not found' images path fixed for goerli +- [#2142](https://github.com/poanetwork/blockscout/pull/2142) - Removed posdao theme and logo, added 'page not found' image for goerli +- [#2138](https://github.com/poanetwork/blockscout/pull/2138) - badge colors issue, api titles issue +- [#2129](https://github.com/poanetwork/blockscout/pull/2129) - Fix for width of explorer elements +- [#2121](https://github.com/poanetwork/blockscout/pull/2121) - Binding of 404 page +- [#2120](https://github.com/poanetwork/blockscout/pull/2120) - footer links and socials focus color issue +- [#2113](https://github.com/poanetwork/blockscout/pull/2113) - renewed logos for rsk, dai, blockscout; themes color changes for lukso; error images for lukso +- [#2112](https://github.com/poanetwork/blockscout/pull/2112) - themes color improvements, dropdown color issue +- [#2110](https://github.com/poanetwork/blockscout/pull/2110) - themes colors issues, ui issues +- [#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 +- [#2093](https://github.com/poanetwork/blockscout/pull/2093) - detect token transfer type for deprecated erc721 spec +- [#2111](https://github.com/poanetwork/blockscout/pull/2111) - improve address transaction controller +- [#2108](https://github.com/poanetwork/blockscout/pull/2108) - fix uncle fetching without full transactions +- [#2128](https://github.com/poanetwork/blockscout/pull/2128) - add new function clause for uncle errors +- [#2123](https://github.com/poanetwork/blockscout/pull/2123) - fix coins percentage view +- [#2119](https://github.com/poanetwork/blockscout/pull/2119) - fix map logging +- [#2130](https://github.com/poanetwork/blockscout/pull/2130) - fix navigation +- [#2148](https://github.com/poanetwork/blockscout/pull/2148) - filter pending logs +- [#2147](https://github.com/poanetwork/blockscout/pull/2147) - add rsk format of checksum +- [#2149](https://github.com/poanetwork/blockscout/pull/2149) - remove pending transaction count +- [#2177](https://github.com/poanetwork/blockscout/pull/2177) - remove duplicate entries from UncleBlock's Fetcher +- [#2169](https://github.com/poanetwork/blockscout/pull/2169) - add more validator reward types for xDai +- [#2173](https://github.com/poanetwork/blockscout/pull/2173) - handle correctly empty transactions +- [#2174](https://github.com/poanetwork/blockscout/pull/2174) - fix reward channel joining +- [#2186](https://github.com/poanetwork/blockscout/pull/2186) - fix net version test +- [#2196](https://github.com/poanetwork/blockscout/pull/2196) - Nethermind client fixes +- [#2237](https://github.com/poanetwork/blockscout/pull/2237) - fix rsk total_supply +- [#2198](https://github.com/poanetwork/blockscout/pull/2198) - reduce transaction status and error constraint +- [#2167](https://github.com/poanetwork/blockscout/pull/2167) - feat: document eth rpc api mimicking endpoints +- [#2225](https://github.com/poanetwork/blockscout/pull/2225) - fix metadata decoding in Solidity 0.5.9 smart contract verification +- [#2204](https://github.com/poanetwork/blockscout/pull/2204) - fix large contract verification +- [#2258](https://github.com/poanetwork/blockscout/pull/2258) - reduce BlocksTransactionsMismatch memory footprint +- [#2247](https://github.com/poanetwork/blockscout/pull/2247) - hide logs search if there are no logs +- [#2248](https://github.com/poanetwork/blockscout/pull/2248) - sort block after query execution for average block time +- [#2249](https://github.com/poanetwork/blockscout/pull/2249) - More transaction controllers improvements +- [#2267](https://github.com/poanetwork/blockscout/pull/2267) - Modify implementation of `where_transaction_has_multiple_internal_transactions` +- [#2270](https://github.com/poanetwork/blockscout/pull/2270) - Remove duplicate params in `Indexer.Fetcher.TokenBalance` +- [#2268](https://github.com/poanetwork/blockscout/pull/2268) - remove not existing assigns in html code +- [#2276](https://github.com/poanetwork/blockscout/pull/2276) - remove port in docs ### Chore +- [#2127](https://github.com/poanetwork/blockscout/pull/2127) - use previouse chromedriver version +- [#2118](https://github.com/poanetwork/blockscout/pull/2118) - show only the last decompiled contract +- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - upgrade elixir version to 1.9.0 +- [#2256](https://github.com/poanetwork/blockscout/pull/2256) - use the latest version of chromedriver -- [#2127](https://github.com/poanetwork/blockscout/pull/2127) - use previouse chromedriver version -- [#2118](https://github.com/poanetwork/blockscout/pull/2118) - show only the last decompiled contract -- [#2255](https://github.com/poanetwork/blockscout/pull/2255) - upgrade elixir version to 1.9.0 -- [#2256](https://github.com/poanetwork/blockscout/pull/2256) - use the latest version of chromedriver ## 2.0.0-beta ### Features - -- [#2044](https://github.com/poanetwork/blockscout/pull/2044) - New network selector. -- [#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 -- [#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 -- [#1907](https://github.com/poanetwork/blockscout/pull/1907) - dropdown color bug fix (lukso theme) and tooltip color bug fix -- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces -- [#1941](https://github.com/poanetwork/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc -- [#1957](https://github.com/poanetwork/blockscout/pull/1957) - Calculate stakes ratio before insert pools -- [#1956](https://github.com/poanetwork/blockscout/pull/1956) - add logs tab to address -- [#1952](https://github.com/poanetwork/blockscout/pull/1952) - feat: exclude empty contracts by default -- [#1954](https://github.com/poanetwork/blockscout/pull/1954) - feat: use creation init on self destruct -- [#2036](https://github.com/poanetwork/blockscout/pull/2036) - New tables for staking pools and delegators -- [#1974](https://github.com/poanetwork/blockscout/pull/1974) - feat: previous page button logic -- [#1999](https://github.com/poanetwork/blockscout/pull/1999) - load data async on addresses page -- [#1807](https://github.com/poanetwork/blockscout/pull/1807) - New theming capabilites. -- [#2040](https://github.com/poanetwork/blockscout/pull/2040) - Verification links to other explorers for ETH -- [#2037](https://github.com/poanetwork/blockscout/pull/2037) - add address logs search functionality -- [#2012](https://github.com/poanetwork/blockscout/pull/2012) - make all pages pagination async -- [#2064](https://github.com/poanetwork/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups -- [#2100](https://github.com/poanetwork/blockscout/pull/2100) - feat: eth_get_balance rpc endpoint +- [#2044](https://github.com/poanetwork/blockscout/pull/2044) - New network selector. +- [#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 +- [#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 +- [#1907](https://github.com/poanetwork/blockscout/pull/1907) - dropdown color bug fix (lukso theme) and tooltip color bug fix +- [#1859](https://github.com/poanetwork/blockscout/pull/1859) - feat: show raw transaction traces +- [#1941](https://github.com/poanetwork/blockscout/pull/1941) - feat: add on demand fetching and stale attr to rpc +- [#1957](https://github.com/poanetwork/blockscout/pull/1957) - Calculate stakes ratio before insert pools +- [#1956](https://github.com/poanetwork/blockscout/pull/1956) - add logs tab to address +- [#1952](https://github.com/poanetwork/blockscout/pull/1952) - feat: exclude empty contracts by default +- [#1954](https://github.com/poanetwork/blockscout/pull/1954) - feat: use creation init on self destruct +- [#2036](https://github.com/poanetwork/blockscout/pull/2036) - New tables for staking pools and delegators +- [#1974](https://github.com/poanetwork/blockscout/pull/1974) - feat: previous page button logic +- [#1999](https://github.com/poanetwork/blockscout/pull/1999) - load data async on addresses page +- [#1807](https://github.com/poanetwork/blockscout/pull/1807) - New theming capabilites. +- [#2040](https://github.com/poanetwork/blockscout/pull/2040) - Verification links to other explorers for ETH +- [#2037](https://github.com/poanetwork/blockscout/pull/2037) - add address logs search functionality +- [#2012](https://github.com/poanetwork/blockscout/pull/2012) - make all pages pagination async +- [#2064](https://github.com/poanetwork/blockscout/pull/2064) - feat: add fields to tx apis, small cleanups +- [#2100](https://github.com/poanetwork/blockscout/pull/2100) - feat: eth_get_balance rpc endpoint ### Fixes - -- [#2228](https://github.com/poanetwork/blockscout/pull/2228) - favorites duplication issues, active radio issue -- [#2207](https://github.com/poanetwork/blockscout/pull/2207) - new 'download csv' button design -- [#2206](https://github.com/poanetwork/blockscout/pull/2206) - added styles for 'Download All Transactions as CSV' button -- [#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. -- [#2066](https://github.com/poanetwork/blockscout/pull/2066) - fixed length of logs search input -- [#2056](https://github.com/poanetwork/blockscout/pull/2056) - log search form styles added -- [#2043](https://github.com/poanetwork/blockscout/pull/2043) - Fixed modal dialog width for 'verify other explorers' -- [#2025](https://github.com/poanetwork/blockscout/pull/2025) - Added a new color to display transactions' errors. -- [#2033](https://github.com/poanetwork/blockscout/pull/2033) - Header nav. dropdown active element color issue -- [#2019](https://github.com/poanetwork/blockscout/pull/2019) - Fixed the missing tx hashes. -- [#2020](https://github.com/poanetwork/blockscout/pull/2020) - Fixed a bug triggered when a second click to a selected tab caused the other tabs to hide. -- [#1944](https://github.com/poanetwork/blockscout/pull/1944) - fixed styles for token's dropdown. -- [#1926](https://github.com/poanetwork/blockscout/pull/1926) - status label alignment -- [#1849](https://github.com/poanetwork/blockscout/pull/1849) - Improve chains menu -- [#1868](https://github.com/poanetwork/blockscout/pull/1868) - fix: logs list endpoint performance -- [#1822](https://github.com/poanetwork/blockscout/pull/1822) - Fix style breaks in decompiled contract code view -- [#1885](https://github.com/poanetwork/blockscout/pull/1885) - highlight reserved words in decompiled code -- [#1896](https://github.com/poanetwork/blockscout/pull/1896) - re-query tokens in top nav automplete -- [#1905](https://github.com/poanetwork/blockscout/pull/1905) - fix reorgs, uncles pagination -- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type -- [#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 -- [#1960](https://github.com/poanetwork/blockscout/pull/1960) - do not remove bold text in decompiled contacts -- [#1966](https://github.com/poanetwork/blockscout/pull/1966) - fix: add fields for contract filter performance -- [#2017](https://github.com/poanetwork/blockscout/pull/2017) - fix: fix to/from filters on tx list pages -- [#2008](https://github.com/poanetwork/blockscout/pull/2008) - add new function clause for xDai network beneficiaries -- [#2009](https://github.com/poanetwork/blockscout/pull/2009) - addresses page improvements -- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions -- [#2062](https://github.com/poanetwork/blockscout/pull/2062) - fix: uniq by hash, instead of transaction -- [#2052](https://github.com/poanetwork/blockscout/pull/2052) - allow bytes32 for name and symbol -- [#2047](https://github.com/poanetwork/blockscout/pull/2047) - fix: show creating internal transactions -- [#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 +- [#2228](https://github.com/poanetwork/blockscout/pull/2228) - favorites duplication issues, active radio issue +- [#2207](https://github.com/poanetwork/blockscout/pull/2207) - new 'download csv' button design +- [#2206](https://github.com/poanetwork/blockscout/pull/2206) - added styles for 'Download All Transactions as CSV' button +- [#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. +- [#2066](https://github.com/poanetwork/blockscout/pull/2066) - fixed length of logs search input +- [#2056](https://github.com/poanetwork/blockscout/pull/2056) - log search form styles added +- [#2043](https://github.com/poanetwork/blockscout/pull/2043) - Fixed modal dialog width for 'verify other explorers' +- [#2025](https://github.com/poanetwork/blockscout/pull/2025) - Added a new color to display transactions' errors. +- [#2033](https://github.com/poanetwork/blockscout/pull/2033) - Header nav. dropdown active element color issue +- [#2019](https://github.com/poanetwork/blockscout/pull/2019) - Fixed the missing tx hashes. +- [#2020](https://github.com/poanetwork/blockscout/pull/2020) - Fixed a bug triggered when a second click to a selected tab caused the other tabs to hide. +- [#1944](https://github.com/poanetwork/blockscout/pull/1944) - fixed styles for token's dropdown. +- [#1926](https://github.com/poanetwork/blockscout/pull/1926) - status label alignment +- [#1849](https://github.com/poanetwork/blockscout/pull/1849) - Improve chains menu +- [#1868](https://github.com/poanetwork/blockscout/pull/1868) - fix: logs list endpoint performance +- [#1822](https://github.com/poanetwork/blockscout/pull/1822) - Fix style breaks in decompiled contract code view +- [#1885](https://github.com/poanetwork/blockscout/pull/1885) - highlight reserved words in decompiled code +- [#1896](https://github.com/poanetwork/blockscout/pull/1896) - re-query tokens in top nav automplete +- [#1905](https://github.com/poanetwork/blockscout/pull/1905) - fix reorgs, uncles pagination +- [#1904](https://github.com/poanetwork/blockscout/pull/1904) - fix `BLOCK_COUNT_CACHE_TTL` env var type +- [#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 +- [#1960](https://github.com/poanetwork/blockscout/pull/1960) - do not remove bold text in decompiled contacts +- [#1966](https://github.com/poanetwork/blockscout/pull/1966) - fix: add fields for contract filter performance +- [#2017](https://github.com/poanetwork/blockscout/pull/2017) - fix: fix to/from filters on tx list pages +- [#2008](https://github.com/poanetwork/blockscout/pull/2008) - add new function clause for xDai network beneficiaries +- [#2009](https://github.com/poanetwork/blockscout/pull/2009) - addresses page improvements +- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions +- [#2062](https://github.com/poanetwork/blockscout/pull/2062) - fix: uniq by hash, instead of transaction +- [#2052](https://github.com/poanetwork/blockscout/pull/2052) - allow bytes32 for name and symbol +- [#2047](https://github.com/poanetwork/blockscout/pull/2047) - fix: show creating internal transactions +- [#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 -- [#1900](https://github.com/poanetwork/blockscout/pull/1900) - SUPPORTED_CHAINS ENV var -- [#1958](https://github.com/poanetwork/blockscout/pull/1958) - Default value for release link env var -- [#1964](https://github.com/poanetwork/blockscout/pull/1964) - ALLOWED_EVM_VERSIONS env var -- [#1975](https://github.com/poanetwork/blockscout/pull/1975) - add log index to transaction view -- [#1988](https://github.com/poanetwork/blockscout/pull/1988) - Fix wrong parity tasks names in Circle CI -- [#2000](https://github.com/poanetwork/blockscout/pull/2000) - docker/Makefile: always set a container name -- [#2018](https://github.com/poanetwork/blockscout/pull/2018) - Use PORT env variable in dev config -- [#2055](https://github.com/poanetwork/blockscout/pull/2055) - Increase timeout for geth indexers -- [#2069](https://github.com/poanetwork/blockscout/pull/2069) - Docsify integration: static docs page generation +- [#1900](https://github.com/poanetwork/blockscout/pull/1900) - SUPPORTED_CHAINS ENV var +- [#1958](https://github.com/poanetwork/blockscout/pull/1958) - Default value for release link env var +- [#1964](https://github.com/poanetwork/blockscout/pull/1964) - ALLOWED_EVM_VERSIONS env var +- [#1975](https://github.com/poanetwork/blockscout/pull/1975) - add log index to transaction view +- [#1988](https://github.com/poanetwork/blockscout/pull/1988) - Fix wrong parity tasks names in Circle CI +- [#2000](https://github.com/poanetwork/blockscout/pull/2000) - docker/Makefile: always set a container name +- [#2018](https://github.com/poanetwork/blockscout/pull/2018) - Use PORT env variable in dev config +- [#2055](https://github.com/poanetwork/blockscout/pull/2055) - Increase timeout for geth indexers +- [#2069](https://github.com/poanetwork/blockscout/pull/2069) - Docsify integration: static docs page generation + ## 1.3.15-beta ### Features -- [#1857](https://github.com/poanetwork/blockscout/pull/1857) - Re-implement Geth JS internal transaction tracer in Elixir -- [#1989](https://github.com/poanetwork/blockscout/pull/1989) - fix: consolidate address w/ balance one at a time -- [#2002](https://github.com/poanetwork/blockscout/pull/2002) - Get estimated count of blocks when cache is empty +- [#1857](https://github.com/poanetwork/blockscout/pull/1857) - Re-implement Geth JS internal transaction tracer in Elixir +- [#1989](https://github.com/poanetwork/blockscout/pull/1989) - fix: consolidate address w/ balance one at a time +- [#2002](https://github.com/poanetwork/blockscout/pull/2002) - Get estimated count of blocks when cache is empty ### Fixes -- [#1869](https://github.com/poanetwork/blockscout/pull/1869) - Fix output and gas extraction in JS tracer for Geth -- [#1992](https://github.com/poanetwork/blockscout/pull/1992) - fix: support https for wobserver polling -- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions +- [#1869](https://github.com/poanetwork/blockscout/pull/1869) - Fix output and gas extraction in JS tracer for Geth +- [#1992](https://github.com/poanetwork/blockscout/pull/1992) - fix: support https for wobserver polling +- [#2027](https://github.com/poanetwork/blockscout/pull/2027) - fix: `BlocksTransactionsMismatch` ignoring blocks without transactions + ## 1.3.14-beta -- [#1812](https://github.com/poanetwork/blockscout/pull/1812) - add pagination to addresses page -- [#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 +- [#1812](https://github.com/poanetwork/blockscout/pull/1812) - add pagination to addresses page +- [#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 ### Fixes -- [#1917](https://github.com/poanetwork/blockscout/pull/1917) - Force block refetch if transaction is re-collated in a different block +- [#1917](https://github.com/poanetwork/blockscout/pull/1917) - Force block refetch if transaction is re-collated in a different block ### Chore -- [#1892](https://github.com/poanetwork/blockscout/pull/1892) - Remove temporary worker modules +- [#1892](https://github.com/poanetwork/blockscout/pull/1892) - Remove temporary worker modules + ## 1.3.13-beta ### Features -- [#1933](https://github.com/poanetwork/blockscout/pull/1933) - add eth_BlockNumber json rpc method +- [#1933](https://github.com/poanetwork/blockscout/pull/1933) - add eth_BlockNumber json rpc method ### Fixes -- [#1875](https://github.com/poanetwork/blockscout/pull/1875) - fix: resolve false positive constructor arguments -- [#1881](https://github.com/poanetwork/blockscout/pull/1881) - fix: store solc versions locally for performance -- [#1898](https://github.com/poanetwork/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments +- [#1875](https://github.com/poanetwork/blockscout/pull/1875) - fix: resolve false positive constructor arguments +- [#1881](https://github.com/poanetwork/blockscout/pull/1881) - fix: store solc versions locally for performance +- [#1898](https://github.com/poanetwork/blockscout/pull/1898) - check if the constructor has arguments before verifying constructor arguments + ## 1.3.12-beta Reverting of synchronous block counter, implemented in #1848 + ## 1.3.11-beta ### Features -- [#1815](https://github.com/poanetwork/blockscout/pull/1815) - Be able to search without prefix "0x" -- [#1813](https://github.com/poanetwork/blockscout/pull/1813) - Add total blocks counter to the main page -- [#1806](https://github.com/poanetwork/blockscout/pull/1806) - Verify contracts with a post request -- [#1848](https://github.com/poanetwork/blockscout/pull/1848) - Add cache for block counter +- [#1815](https://github.com/poanetwork/blockscout/pull/1815) - Be able to search without prefix "0x" +- [#1813](https://github.com/poanetwork/blockscout/pull/1813) - Add total blocks counter to the main page +- [#1806](https://github.com/poanetwork/blockscout/pull/1806) - Verify contracts with a post request +- [#1848](https://github.com/poanetwork/blockscout/pull/1848) - Add cache for block counter ### Fixes -- [#1829](https://github.com/poanetwork/blockscout/pull/1829) - Handle nil quantities in block decoding routine -- [#1830](https://github.com/poanetwork/blockscout/pull/1830) - Make block size field nullable -- [#1840](https://github.com/poanetwork/blockscout/pull/1840) - Handle case when total supply is nil -- [#1838](https://github.com/poanetwork/blockscout/pull/1838) - Block counter calculates only consensus blocks +- [#1829](https://github.com/poanetwork/blockscout/pull/1829) - Handle nil quantities in block decoding routine +- [#1830](https://github.com/poanetwork/blockscout/pull/1830) - Make block size field nullable +- [#1840](https://github.com/poanetwork/blockscout/pull/1840) - Handle case when total supply is nil +- [#1838](https://github.com/poanetwork/blockscout/pull/1838) - Block counter calculates only consensus blocks ### Chore -- [#1814](https://github.com/poanetwork/blockscout/pull/1814) - Clear build artefacts script -- [#1837](https://github.com/poanetwork/blockscout/pull/1837) - Add -f flag to clear_build.sh script delete static folder +- [#1814](https://github.com/poanetwork/blockscout/pull/1814) - Clear build artefacts script +- [#1837](https://github.com/poanetwork/blockscout/pull/1837) - Add -f flag to clear_build.sh script delete static folder + ## 1.3.10-beta ### Features -- [#1739](https://github.com/poanetwork/blockscout/pull/1739) - highlight decompiled source code -- [#1696](https://github.com/poanetwork/blockscout/pull/1696) - full-text search by tokens -- [#1742](https://github.com/poanetwork/blockscout/pull/1742) - Support RSK -- [#1777](https://github.com/poanetwork/blockscout/pull/1777) - show ERC-20 token transfer info on transaction page -- [#1770](https://github.com/poanetwork/blockscout/pull/1770) - set a websocket keepalive from config -- [#1789](https://github.com/poanetwork/blockscout/pull/1789) - add ERC-721 info to transaction overview page -- [#1801](https://github.com/poanetwork/blockscout/pull/1801) - Staking pools fetching +- [#1739](https://github.com/poanetwork/blockscout/pull/1739) - highlight decompiled source code +- [#1696](https://github.com/poanetwork/blockscout/pull/1696) - full-text search by tokens +- [#1742](https://github.com/poanetwork/blockscout/pull/1742) - Support RSK +- [#1777](https://github.com/poanetwork/blockscout/pull/1777) - show ERC-20 token transfer info on transaction page +- [#1770](https://github.com/poanetwork/blockscout/pull/1770) - set a websocket keepalive from config +- [#1789](https://github.com/poanetwork/blockscout/pull/1789) - add ERC-721 info to transaction overview page +- [#1801](https://github.com/poanetwork/blockscout/pull/1801) - Staking pools fetching ### Fixes -- [#1724](https://github.com/poanetwork/blockscout/pull/1724) - Remove internal tx and token balance fetching from realtime fetcher -- [#1727](https://github.com/poanetwork/blockscout/pull/1727) - add logs pagination in rpc api -- [#1740](https://github.com/poanetwork/blockscout/pull/1740) - fix empty block time -- [#1743](https://github.com/poanetwork/blockscout/pull/1743) - sort decompiled smart contracts in lexicographical order -- [#1756](https://github.com/poanetwork/blockscout/pull/1756) - add today's token balance from the previous value -- [#1769](https://github.com/poanetwork/blockscout/pull/1769) - add timestamp to block overview -- [#1768](https://github.com/poanetwork/blockscout/pull/1768) - fix first block parameter -- [#1778](https://github.com/poanetwork/blockscout/pull/1778) - Make websocket optional for realtime fetcher -- [#1790](https://github.com/poanetwork/blockscout/pull/1790) - fix constructor arguments verification -- [#1793](https://github.com/poanetwork/blockscout/pull/1793) - fix top nav autocomplete -- [#1795](https://github.com/poanetwork/blockscout/pull/1795) - fix line numbers for decompiled contracts -- [#1803](https://github.com/poanetwork/blockscout/pull/1803) - use coinmarketcap for total_supply by default -- [#1802](https://github.com/poanetwork/blockscout/pull/1802) - make coinmarketcap's number of pages configurable -- [#1799](https://github.com/poanetwork/blockscout/pull/1799) - Use eth_getUncleByBlockHashAndIndex for uncle block fetching -- [#1531](https://github.com/poanetwork/blockscout/pull/1531) - docker: fix dockerFile for secp256k1 building -- [#1835](https://github.com/poanetwork/blockscout/pull/1835) - fix: ignore `pong` messages without error + - [#1724](https://github.com/poanetwork/blockscout/pull/1724) - Remove internal tx and token balance fetching from realtime fetcher + - [#1727](https://github.com/poanetwork/blockscout/pull/1727) - add logs pagination in rpc api + - [#1740](https://github.com/poanetwork/blockscout/pull/1740) - fix empty block time + - [#1743](https://github.com/poanetwork/blockscout/pull/1743) - sort decompiled smart contracts in lexicographical order + - [#1756](https://github.com/poanetwork/blockscout/pull/1756) - add today's token balance from the previous value + - [#1769](https://github.com/poanetwork/blockscout/pull/1769) - add timestamp to block overview + - [#1768](https://github.com/poanetwork/blockscout/pull/1768) - fix first block parameter + - [#1778](https://github.com/poanetwork/blockscout/pull/1778) - Make websocket optional for realtime fetcher + - [#1790](https://github.com/poanetwork/blockscout/pull/1790) - fix constructor arguments verification + - [#1793](https://github.com/poanetwork/blockscout/pull/1793) - fix top nav autocomplete + - [#1795](https://github.com/poanetwork/blockscout/pull/1795) - fix line numbers for decompiled contracts + - [#1803](https://github.com/poanetwork/blockscout/pull/1803) - use coinmarketcap for total_supply by default + - [#1802](https://github.com/poanetwork/blockscout/pull/1802) - make coinmarketcap's number of pages configurable + - [#1799](https://github.com/poanetwork/blockscout/pull/1799) - Use eth_getUncleByBlockHashAndIndex for uncle block fetching + - [#1531](https://github.com/poanetwork/blockscout/pull/1531) - docker: fix dockerFile for secp256k1 building + - [#1835](https://github.com/poanetwork/blockscout/pull/1835) - fix: ignore `pong` messages without error ### Chore -- [#1804](https://github.com/poanetwork/blockscout/pull/1804) - (Chore) Divide chains by Mainnet/Testnet in menu -- [#1783](https://github.com/poanetwork/blockscout/pull/1783) - Update README with the chains that use Blockscout -- [#1780](https://github.com/poanetwork/blockscout/pull/1780) - Update link to the Github repo in the footer -- [#1757](https://github.com/poanetwork/blockscout/pull/1757) - Change twitter acc link to official Blockscout acc twitter -- [#1749](https://github.com/poanetwork/blockscout/pull/1749) - Replace the link in the footer with the official POA announcements tg channel link -- [#1718](https://github.com/poanetwork/blockscout/pull/1718) - Flatten indexer module hierarchy and supervisor tree -- [#1753](https://github.com/poanetwork/blockscout/pull/1753) - Add a check mark to decompiled contract tab -- [#1744](https://github.com/poanetwork/blockscout/pull/1744) - remove `0x0..0` from tests -- [#1763](https://github.com/poanetwork/blockscout/pull/1763) - Describe indexer structure and list existing fetchers -- [#1800](https://github.com/poanetwork/blockscout/pull/1800) - Disable lazy logging check in Credo + - [#1804](https://github.com/poanetwork/blockscout/pull/1804) - (Chore) Divide chains by Mainnet/Testnet in menu + - [#1783](https://github.com/poanetwork/blockscout/pull/1783) - Update README with the chains that use Blockscout + - [#1780](https://github.com/poanetwork/blockscout/pull/1780) - Update link to the Github repo in the footer + - [#1757](https://github.com/poanetwork/blockscout/pull/1757) - Change twitter acc link to official Blockscout acc twitter + - [#1749](https://github.com/poanetwork/blockscout/pull/1749) - Replace the link in the footer with the official POA announcements tg channel link + - [#1718](https://github.com/poanetwork/blockscout/pull/1718) - Flatten indexer module hierarchy and supervisor tree + - [#1753](https://github.com/poanetwork/blockscout/pull/1753) - Add a check mark to decompiled contract tab + - [#1744](https://github.com/poanetwork/blockscout/pull/1744) - remove `0x0..0` from tests + - [#1763](https://github.com/poanetwork/blockscout/pull/1763) - Describe indexer structure and list existing fetchers + - [#1800](https://github.com/poanetwork/blockscout/pull/1800) - Disable lazy logging check in Credo + ## 1.3.9-beta ### Features -- [#1662](https://github.com/poanetwork/blockscout/pull/1662) - allow specifying number of optimization runs -- [#1654](https://github.com/poanetwork/blockscout/pull/1654) - add decompiled code tab -- [#1661](https://github.com/poanetwork/blockscout/pull/1661) - try to compile smart contract with the latest evm version -- [#1665](https://github.com/poanetwork/blockscout/pull/1665) - Add contract verification RPC endpoint. -- [#1706](https://github.com/poanetwork/blockscout/pull/1706) - allow setting update interval for addresses with b + - [#1662](https://github.com/poanetwork/blockscout/pull/1662) - allow specifying number of optimization runs + - [#1654](https://github.com/poanetwork/blockscout/pull/1654) - add decompiled code tab + - [#1661](https://github.com/poanetwork/blockscout/pull/1661) - try to compile smart contract with the latest evm version + - [#1665](https://github.com/poanetwork/blockscout/pull/1665) - Add contract verification RPC endpoint. + - [#1706](https://github.com/poanetwork/blockscout/pull/1706) - allow setting update interval for addresses with b ### Fixes -- [#1669](https://github.com/poanetwork/blockscout/pull/1669) - do not fail if multiple matching tokens are found -- [#1691](https://github.com/poanetwork/blockscout/pull/1691) - decrease token metadata update interval -- [#1688](https://github.com/poanetwork/blockscout/pull/1688) - do not fail if failure reason is atom -- [#1692](https://github.com/poanetwork/blockscout/pull/1692) - exclude decompiled smart contract from encoding -- [#1684](https://github.com/poanetwork/blockscout/pull/1684) - Discard child block with parent_hash not matching hash of imported block -- [#1699](https://github.com/poanetwork/blockscout/pull/1699) - use seconds as transaction cache period measure -- [#1697](https://github.com/poanetwork/blockscout/pull/1697) - fix failing in rpc if balance is empty -- [#1711](https://github.com/poanetwork/blockscout/pull/1711) - rescue failing repo in block number cache update -- [#1712](https://github.com/poanetwork/blockscout/pull/1712) - do not set contract code from transaction input -- [#1714](https://github.com/poanetwork/blockscout/pull/1714) - fix average block time calculation + - [#1669](https://github.com/poanetwork/blockscout/pull/1669) - do not fail if multiple matching tokens are found + - [#1691](https://github.com/poanetwork/blockscout/pull/1691) - decrease token metadata update interval + - [#1688](https://github.com/poanetwork/blockscout/pull/1688) - do not fail if failure reason is atom + - [#1692](https://github.com/poanetwork/blockscout/pull/1692) - exclude decompiled smart contract from encoding + - [#1684](https://github.com/poanetwork/blockscout/pull/1684) - Discard child block with parent_hash not matching hash of imported block + - [#1699](https://github.com/poanetwork/blockscout/pull/1699) - use seconds as transaction cache period measure + - [#1697](https://github.com/poanetwork/blockscout/pull/1697) - fix failing in rpc if balance is empty + - [#1711](https://github.com/poanetwork/blockscout/pull/1711) - rescue failing repo in block number cache update + - [#1712](https://github.com/poanetwork/blockscout/pull/1712) - do not set contract code from transaction input + - [#1714](https://github.com/poanetwork/blockscout/pull/1714) - fix average block time calculation ### Chore -- [#1693](https://github.com/poanetwork/blockscout/pull/1693) - Add a checklist to the PR template + - [#1693](https://github.com/poanetwork/blockscout/pull/1693) - Add a checklist to the PR template + ## 1.3.8-beta ### Features -- [#1611](https://github.com/poanetwork/blockscout/pull/1611) - allow setting the first indexing block -- [#1596](https://github.com/poanetwork/blockscout/pull/1596) - add endpoint to create decompiled contracts -- [#1634](https://github.com/poanetwork/blockscout/pull/1634) - add transaction count cache + - [#1611](https://github.com/poanetwork/blockscout/pull/1611) - allow setting the first indexing block + - [#1596](https://github.com/poanetwork/blockscout/pull/1596) - add endpoint to create decompiled contracts + - [#1634](https://github.com/poanetwork/blockscout/pull/1634) - add transaction count cache ### Fixes -- [#1630](https://github.com/poanetwork/blockscout/pull/1630) - (Fix) colour for release link in the footer -- [#1621](https://github.com/poanetwork/blockscout/pull/1621) - Modify query to fetch failed contract creations -- [#1614](https://github.com/poanetwork/blockscout/pull/1614) - Do not fetch burn address token balance -- [#1639](https://github.com/poanetwork/blockscout/pull/1614) - Optimize token holder count updates when importing address current balances -- [#1643](https://github.com/poanetwork/blockscout/pull/1643) - Set internal_transactions_indexed_at for empty blocks -- [#1647](https://github.com/poanetwork/blockscout/pull/1647) - Fix typo in view -- [#1650](https://github.com/poanetwork/blockscout/pull/1650) - Add petersburg evm version to smart contract verifier -- [#1657](https://github.com/poanetwork/blockscout/pull/1657) - Force consensus loss for parent block if its hash mismatches parent_hash + - [#1630](https://github.com/poanetwork/blockscout/pull/1630) - (Fix) colour for release link in the footer + - [#1621](https://github.com/poanetwork/blockscout/pull/1621) - Modify query to fetch failed contract creations + - [#1614](https://github.com/poanetwork/blockscout/pull/1614) - Do not fetch burn address token balance + - [#1639](https://github.com/poanetwork/blockscout/pull/1614) - Optimize token holder count updates when importing address current balances + - [#1643](https://github.com/poanetwork/blockscout/pull/1643) - Set internal_transactions_indexed_at for empty blocks + - [#1647](https://github.com/poanetwork/blockscout/pull/1647) - Fix typo in view + - [#1650](https://github.com/poanetwork/blockscout/pull/1650) - Add petersburg evm version to smart contract verifier + - [#1657](https://github.com/poanetwork/blockscout/pull/1657) - Force consensus loss for parent block if its hash mismatches parent_hash ### Chore + ## 1.3.7-beta ### Features ### Fixes -- [#1615](https://github.com/poanetwork/blockscout/pull/1615) - Add more logging to code fixer process -- [#1613](https://github.com/poanetwork/blockscout/pull/1613) - Fix USD fee value -- [#1577](https://github.com/poanetwork/blockscout/pull/1577) - Add process to fix contract with code -- [#1583](https://github.com/poanetwork/blockscout/pull/1583) - Chunk JSON-RPC batches in case connection times out + - [#1615](https://github.com/poanetwork/blockscout/pull/1615) - Add more logging to code fixer process + - [#1613](https://github.com/poanetwork/blockscout/pull/1613) - Fix USD fee value + - [#1577](https://github.com/poanetwork/blockscout/pull/1577) - Add process to fix contract with code + - [#1583](https://github.com/poanetwork/blockscout/pull/1583) - Chunk JSON-RPC batches in case connection times out ### Chore -- [#1610](https://github.com/poanetwork/blockscout/pull/1610) - Add PIRL to Readme + - [#1610](https://github.com/poanetwork/blockscout/pull/1610) - Add PIRL to Readme + ## 1.3.6-beta ### Features -- [#1589](https://github.com/poanetwork/blockscout/pull/1589) - RPC endpoint to list addresses -- [#1567](https://github.com/poanetwork/blockscout/pull/1567) - Allow setting different configuration just for realtime fetcher -- [#1562](https://github.com/poanetwork/blockscout/pull/1562) - Add incoming transactions count to contract view -- [#1608](https://github.com/poanetwork/blockscout/pull/1608) - Add listcontracts RPC Endpoint + - [#1589](https://github.com/poanetwork/blockscout/pull/1589) - RPC endpoint to list addresses + - [#1567](https://github.com/poanetwork/blockscout/pull/1567) - Allow setting different configuration just for realtime fetcher + - [#1562](https://github.com/poanetwork/blockscout/pull/1562) - Add incoming transactions count to contract view + - [#1608](https://github.com/poanetwork/blockscout/pull/1608) - Add listcontracts RPC Endpoint ### Fixes -- [#1595](https://github.com/poanetwork/blockscout/pull/1595) - Reduce block_rewards in the catchup fetcher -- [#1590](https://github.com/poanetwork/blockscout/pull/1590) - Added guard for fetching blocks with invalid number -- [#1588](https://github.com/poanetwork/blockscout/pull/1588) - Fix usd value on address page -- [#1586](https://github.com/poanetwork/blockscout/pull/1586) - Exact timestamp display -- [#1581](https://github.com/poanetwork/blockscout/pull/1581) - Consider `creates` param when fetching transactions -- [#1559](https://github.com/poanetwork/blockscout/pull/1559) - Change v column type for Transactions table + - [#1595](https://github.com/poanetwork/blockscout/pull/1595) - Reduce block_rewards in the catchup fetcher + - [#1590](https://github.com/poanetwork/blockscout/pull/1590) - Added guard for fetching blocks with invalid number + - [#1588](https://github.com/poanetwork/blockscout/pull/1588) - Fix usd value on address page + - [#1586](https://github.com/poanetwork/blockscout/pull/1586) - Exact timestamp display + - [#1581](https://github.com/poanetwork/blockscout/pull/1581) - Consider `creates` param when fetching transactions + - [#1559](https://github.com/poanetwork/blockscout/pull/1559) - Change v column type for Transactions table ### Chore -- [#1579](https://github.com/poanetwork/blockscout/pull/1579) - Add SpringChain to the list of Additional Chains Utilizing BlockScout -- [#1578](https://github.com/poanetwork/blockscout/pull/1578) - Refine contributing procedure -- [#1572](https://github.com/poanetwork/blockscout/pull/1572) - Add option to disable block rewards in indexer config + - [#1579](https://github.com/poanetwork/blockscout/pull/1579) - Add SpringChain to the list of Additional Chains Utilizing BlockScout + - [#1578](https://github.com/poanetwork/blockscout/pull/1578) - Refine contributing procedure + - [#1572](https://github.com/poanetwork/blockscout/pull/1572) - Add option to disable block rewards in indexer config + ## 1.3.5-beta ### Features -- [#1560](https://github.com/poanetwork/blockscout/pull/1560) - Allow executing smart contract functions in arbitrarily sized batches -- [#1543](https://github.com/poanetwork/blockscout/pull/1543) - Use trace_replayBlockTransactions API for faster tracing -- [#1558](https://github.com/poanetwork/blockscout/pull/1558) - Allow searching by token symbol -- [#1551](https://github.com/poanetwork/blockscout/pull/1551) Exact date and time for Transaction details page -- [#1547](https://github.com/poanetwork/blockscout/pull/1547) - Verify smart contracts with evm versions -- [#1540](https://github.com/poanetwork/blockscout/pull/1540) - Fetch ERC721 token balances if sender is '0x0..0' -- [#1539](https://github.com/poanetwork/blockscout/pull/1539) - Add the link to release in the footer -- [#1519](https://github.com/poanetwork/blockscout/pull/1519) - Create contract methods -- [#1496](https://github.com/poanetwork/blockscout/pull/1496) - Remove dropped/replaced transactions in pending transactions list -- [#1492](https://github.com/poanetwork/blockscout/pull/1492) - Disable usd value for an empty exchange rate -- [#1466](https://github.com/poanetwork/blockscout/pull/1466) - Decoding candidates for unverified contracts + - [#1560](https://github.com/poanetwork/blockscout/pull/1560) - Allow executing smart contract functions in arbitrarily sized batches + - [#1543](https://github.com/poanetwork/blockscout/pull/1543) - Use trace_replayBlockTransactions API for faster tracing + - [#1558](https://github.com/poanetwork/blockscout/pull/1558) - Allow searching by token symbol + - [#1551](https://github.com/poanetwork/blockscout/pull/1551) Exact date and time for Transaction details page + - [#1547](https://github.com/poanetwork/blockscout/pull/1547) - Verify smart contracts with evm versions + - [#1540](https://github.com/poanetwork/blockscout/pull/1540) - Fetch ERC721 token balances if sender is '0x0..0' + - [#1539](https://github.com/poanetwork/blockscout/pull/1539) - Add the link to release in the footer + - [#1519](https://github.com/poanetwork/blockscout/pull/1519) - Create contract methods + - [#1496](https://github.com/poanetwork/blockscout/pull/1496) - Remove dropped/replaced transactions in pending transactions list + - [#1492](https://github.com/poanetwork/blockscout/pull/1492) - Disable usd value for an empty exchange rate + - [#1466](https://github.com/poanetwork/blockscout/pull/1466) - Decoding candidates for unverified contracts ### Fixes - -- [#1545](https://github.com/poanetwork/blockscout/pull/1545) - Fix scheduling of latest block polling in Realtime Fetcher -- [#1554](https://github.com/poanetwork/blockscout/pull/1554) - Encode integer parameters when calling smart contract functions -- [#1537](https://github.com/poanetwork/blockscout/pull/1537) - Fix test that depended on date -- [#1534](https://github.com/poanetwork/blockscout/pull/1534) - Render a nicer error when creator cannot be determined -- [#1527](https://github.com/poanetwork/blockscout/pull/1527) - Add index to value_fetched_at -- [#1518](https://github.com/poanetwork/blockscout/pull/1518) - Select only distinct failed transactions -- [#1516](https://github.com/poanetwork/blockscout/pull/1516) - Fix coin balance params reducer for pending transaction -- [#1511](https://github.com/poanetwork/blockscout/pull/1511) - Set correct log level for production -- [#1510](https://github.com/poanetwork/blockscout/pull/1510) - Fix test that fails every 1st day of the month -- [#1509](https://github.com/poanetwork/blockscout/pull/1509) - Add index to blocks' consensus -- [#1508](https://github.com/poanetwork/blockscout/pull/1508) - Remove duplicated indexes -- [#1505](https://github.com/poanetwork/blockscout/pull/1505) - Use https instead of ssh for absinthe libs -- [#1501](https://github.com/poanetwork/blockscout/pull/1501) - Constructor_arguments must be type `text` -- [#1498](https://github.com/poanetwork/blockscout/pull/1498) - Add index for created_contract_address_hash in transactions -- [#1493](https://github.com/poanetwork/blockscout/pull/1493) - Do not do work in process initialization -- [#1487](https://github.com/poanetwork/blockscout/pull/1487) - Limit geth sync to 128 blocks -- [#1484](https://github.com/poanetwork/blockscout/pull/1484) - Allow decoding input as utf-8 -- [#1479](https://github.com/poanetwork/blockscout/pull/1479) - Remove smoothing from coin balance chart + - [#1545](https://github.com/poanetwork/blockscout/pull/1545) - Fix scheduling of latest block polling in Realtime Fetcher + - [#1554](https://github.com/poanetwork/blockscout/pull/1554) - Encode integer parameters when calling smart contract functions + - [#1537](https://github.com/poanetwork/blockscout/pull/1537) - Fix test that depended on date + - [#1534](https://github.com/poanetwork/blockscout/pull/1534) - Render a nicer error when creator cannot be determined + - [#1527](https://github.com/poanetwork/blockscout/pull/1527) - Add index to value_fetched_at + - [#1518](https://github.com/poanetwork/blockscout/pull/1518) - Select only distinct failed transactions + - [#1516](https://github.com/poanetwork/blockscout/pull/1516) - Fix coin balance params reducer for pending transaction + - [#1511](https://github.com/poanetwork/blockscout/pull/1511) - Set correct log level for production + - [#1510](https://github.com/poanetwork/blockscout/pull/1510) - Fix test that fails every 1st day of the month + - [#1509](https://github.com/poanetwork/blockscout/pull/1509) - Add index to blocks' consensus + - [#1508](https://github.com/poanetwork/blockscout/pull/1508) - Remove duplicated indexes + - [#1505](https://github.com/poanetwork/blockscout/pull/1505) - Use https instead of ssh for absinthe libs + - [#1501](https://github.com/poanetwork/blockscout/pull/1501) - Constructor_arguments must be type `text` + - [#1498](https://github.com/poanetwork/blockscout/pull/1498) - Add index for created_contract_address_hash in transactions + - [#1493](https://github.com/poanetwork/blockscout/pull/1493) - Do not do work in process initialization + - [#1487](https://github.com/poanetwork/blockscout/pull/1487) - Limit geth sync to 128 blocks + - [#1484](https://github.com/poanetwork/blockscout/pull/1484) - Allow decoding input as utf-8 + - [#1479](https://github.com/poanetwork/blockscout/pull/1479) - Remove smoothing from coin balance chart ### Chore - -- - Upgrade elixir to 1.8.1 -- - Dockerfile: remove 1.7.1 version pin FROM bitwalker/alpine-elixir-phoenix -- - Resolve lodash security alert + - [https://github.com/poanetwork/blockscout/pull/1532](https://github.com/poanetwork/blockscout/pull/1532) - Upgrade elixir to 1.8.1 + - [https://github.com/poanetwork/blockscout/pull/1553](https://github.com/poanetwork/blockscout/pull/1553) - Dockerfile: remove 1.7.1 version pin FROM bitwalker/alpine-elixir-phoenix + - [https://github.com/poanetwork/blockscout/pull/1465](https://github.com/poanetwork/blockscout/pull/1465) - Resolve lodash security alert From 690e22cb128e29f1343c19de03a856cb72654c25 Mon Sep 17 00:00:00 2001 From: Ethan van Ballegooyen Date: Thu, 29 Aug 2019 13:17:25 +0200 Subject: [PATCH 055/109] README.md Clean up --- README.md | 41 +++++++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 13c50fd838..07ebb18f5d 100644 --- a/README.md +++ b/README.md @@ -28,33 +28,34 @@ Currently available full-featured block explorers (Etherscan, Etherchain, Blockc ## Supported Projects -| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | -| ------------------------------------------------------ | ----------------------------------------------------- | ---------------------------------------------------- | -| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | -| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | -| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | -| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | -| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | -| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | -| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | -| | | [SpringChain](https://explorer.springrole.com/) | -| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | -| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | -| | | [Tenda](https://tenda.network) | -| | | [GoJoy Chain](https://gojoychain.com/) | -| | | [Xerom](https://blocks.xerom.org/) | +| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | +|--------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------| +| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | +| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | +| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | +| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | +| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | +| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | +| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | +| | | [SpringChain](https://explorer.springrole.com/) | +| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | +| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | +| | | [Tenda](https://tenda.network) | +| | | [GoJoy Chain](https://gojoychain.com/) | +| | | [Xerom](https://blocks.xerom.org/) | + Current BlockScout versions for hosted projects are available [on the forum](https://forum.poa.network/t/deployed-instances-on-blockscout-com/1938). ## Getting Started See the [project documentation](https://poanetwork.github.io/blockscout) for instructions: +- [Requirements](https://poanetwork.github.io/blockscout/#/requirements) +- [Ansible deployment](https://poanetwork.github.io/blockscout/#/ansible-deployment) +- [Manual deployment](https://poanetwork.github.io/blockscout/#/manual-deployment) +- [ENV variables](https://poanetwork.github.io/blockscout/#/env-variables) +- [Configuration options](https://poanetwork.github.io/blockscout/#/dev-env) -- [Requirements](https://poanetwork.github.io/blockscout/#/requirements) -- [Ansible deployment](https://poanetwork.github.io/blockscout/#/ansible-deployment) -- [Manual deployment](https://poanetwork.github.io/blockscout/#/manual-deployment) -- [ENV variables](https://poanetwork.github.io/blockscout/#/env-variables) -- [Configuration options](https://poanetwork.github.io/blockscout/#/dev-env) ## Acknowledgements From 255dce417fcb9fac05d5a0750c6592454a198436 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Thu, 29 Aug 2019 15:57:41 +0300 Subject: [PATCH 056/109] Update README.md --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 07ebb18f5d..0340496862 100644 --- a/README.md +++ b/README.md @@ -28,21 +28,21 @@ Currently available full-featured block explorers (Etherscan, Etherchain, Blockc ## Supported Projects -| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | -|--------------------------------------------------------|-------------------------------------------------------|----------------------------------------------------| -| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | -| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | -| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | -| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | -| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | -| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | -| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | -| | | [SpringChain](https://explorer.springrole.com/) | -| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | -| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | -| | | [Tenda](https://tenda.network) | -| | | [GoJoy Chain](https://gojoychain.com/) | -| | | [Xerom](https://blocks.xerom.org/) | +| **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | **Additional Chains using BlockScout** | +|--------------------------------------------------------|-------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------------| +| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | [Celo Testnet](https://alfajores-blockscout.celo-testnet.org/) | +| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | [Matic Testnet](https://explorer.testnet2.matic.network/) | +| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | | +| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | | +| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | | +| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | | +| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | | +| | | [SpringChain](https://explorer.springrole.com/) | | +| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | | +| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | | +| | | [Tenda](https://tenda.network) | | +| | | [GoJoy Chain](https://gojoychain.com/) | | +| | | [Xerom](https://blocks.xerom.org/) | | Current BlockScout versions for hosted projects are available [on the forum](https://forum.poa.network/t/deployed-instances-on-blockscout-com/1938). From 1808b5f77f199d9b1336e836f556cf2837e4e05d Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 29 Aug 2019 16:21:07 +0300 Subject: [PATCH 057/109] Fixed tooltips issue, header should work fine, fixed buttons colors on Contract Address Details page --- .../_custom_tooltips_block_details.scss | 2 +- .../assets/css/components/_transaction.scss | 83 ++++++++++--------- .../templates/block/overview.html.eex | 14 ++-- 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss index c4175ede5d..91eb3ad01a 100644 --- a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss +++ b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss @@ -10,7 +10,7 @@ position: absolute; width: 50%; background-color: white; - color: #5c34a2; + color: black; text-align: center; border-radius: 6px; left: 25%; diff --git a/apps/block_scout_web/assets/css/components/_transaction.scss b/apps/block_scout_web/assets/css/components/_transaction.scss index b8d7b82e39..15bc0f0e93 100644 --- a/apps/block_scout_web/assets/css/components/_transaction.scss +++ b/apps/block_scout_web/assets/css/components/_transaction.scss @@ -1,46 +1,53 @@ .transaction-bottom-panel { - display: flex; - flex-direction: column; - @media (min-width: 768px) { - flex-direction: row; - justify-content: space-between; - align-items: flex-end; - } + display: flex; + flex-direction: column; + @media (min-width: 768px) { + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } } .transaction-bottom-panel { - display: flex; - flex-direction: column; - @media (min-width: 768px) { - flex-direction: row; - justify-content: space-between; - align-items: flex-end; - } + display: flex; + flex-direction: column; + @media (min-width: 768px) { + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } } .download-all-transactions { - text-align: center; - color: #a3a9b5; - font-size: 13px; - margin-top: 10px; - @media (min-width: 768px) { - margin-top: 30px; - } - .download-all-transactions-link { - display: inline-flex; - align-items: center; - text-decoration: none; - svg { - position: relative; - margin-left: 2px; - top: -3px; - left: 3px; - path { - fill: $primary; - } - } - &:hover { - text-decoration: underline; - } - } + text-align: center; + color: #a3a9b5; + font-size: 13px; + margin-top: 10px; + @media (min-width: 768px) { + margin-top: 30px; + } + .download-all-transactions-link { + display: inline-flex; + align-items: center; + text-decoration: none; + svg { + position: relative; + margin-left: 2px; + top: -3px; + left: 3px; + path { + fill: $primary; + } + } + &:hover { + text-decoration: underline; + } + } +} + +.block-detail-number { + width: 25%; + @include media-breakpoint-down(sm) { + width: 60%; + } } \ No newline at end of file diff --git a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex index 53a63ee9af..7f8fd2a6ff 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex @@ -10,7 +10,7 @@ -

+

<%= if block_type(@block) == "Block" do %> @@ -95,6 +95,9 @@ <%= link( gettext("Position %{index}", index: index), class: "transaction__link", + "data-toggle": "tooltip", + "data-placement": "top" , + "data-original-title": "Index position(s) of referenced stale blocks." , "data-test": "uncle_link", "data-uncle-hash": to_string(relation.uncle_hash), to: block_path(@conn, :show, relation.uncle_hash) @@ -103,14 +106,13 @@ <% end %> - <%= if show_reward?(@block.rewards) do %>
<%= gettext "Gas Used" %>
- <%= @block.gas_used |> BlockScoutWeb.Cldr.Number.to_string! %> - (<%= (Decimal.to_integer(@block.gas_used) / Decimal.to_integer(@block.gas_limit)) |> BlockScoutWeb.Cldr.Number.to_string!(format: "#.#%") %>) + <%= @block.gas_used |> BlockScoutWeb.Cldr.Number.to_string! %> + (<%= (Decimal.to_integer(@block.gas_used) / Decimal.to_integer(@block.gas_limit)) |> BlockScoutWeb.Cldr.Number.to_string!(format: "#.#%") %>)
@@ -153,8 +155,8 @@ <%= if show_reward?(@block.rewards) do %>

<%= gettext "Block Rewards" %>

-
- Amount of distributed reward. Miners receive a static block reward + Tx fees + uncle fees. +
+ <%= for block_reward <- @block.rewards do %>

<%= block_reward_text(block_reward) %> <%= format_wei_value(block_reward.reward, :ether) %>

From 772bc92e6c84a669407d1982908f21e9df266aa7 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 29 Aug 2019 16:55:25 +0300 Subject: [PATCH 058/109] Changes staging --- CHANGELOG.md | 14 + .../assets/css/_images-preload.scss | 23 +- .../_custom_tooltips_block_details.scss | 2 +- .../css/components/_network-selector.scss | 25 +- apps/block_scout_web/assets/package-lock.json | 239 ++++++++++-------- apps/block_scout_web/assets/package.json | 4 +- .../network-selector-icons/aerum-mainnet.png | Bin 4225 -> 0 bytes .../callisto-mainnet.png | Bin 2871 -> 0 bytes .../callisto-mainnet.svg | 5 + .../network-selector-icons/callisto.svg | 7 - .../images/network-selector-icons/core.svg | 4 - .../images/network-selector-icons/dai.svg | 33 --- .../ethereum-classic.png | Bin 2965 -> 0 bytes .../ethereum-classic.svg | 4 + .../ethereum-mainnet.png | Bin 3634 -> 0 bytes .../ethereum-mainnet.svg | 9 + .../network-selector-icons/goerli-testnet.png | Bin 2951 -> 0 bytes .../network-selector-icons/goerli-testnet.svg | 4 + .../network-selector-icons/kovan-testnet.png | Bin 2846 -> 0 bytes .../network-selector-icons/kovan-testnet.svg | 4 + .../lukso-l14-testnet.svg | 6 + .../network-selector-icons/poa-core.png | Bin 1639 -> 0 bytes .../network-selector-icons/poa-core.svg | 4 + .../network-selector-icons/poa-sokol.png | Bin 1714 -> 0 bytes .../network-selector-icons/poa-sokol.svg | 4 + .../rinkeby-testnet.png | Bin 2171 -> 0 bytes .../rinkeby-testnet.svg | 4 + .../images/network-selector-icons/rinkeby.svg | 15 -- .../ropsten-testnet.png | Bin 2409 -> 0 bytes .../ropsten-testnet.svg | 4 + .../images/network-selector-icons/ropsten.svg | 4 - .../network-selector-icons/rsk-mainnet.png | Bin 3811 -> 0 bytes .../network-selector-icons/rsk-mainnet.svg | 4 + .../images/network-selector-icons/sokol.svg | 4 - .../network-selector-icons/xdai-chain.png | Bin 2810 -> 0 bytes .../network-selector-icons/xdai-chain.svg | 4 + .../lib/block_scout_web/etherscan.ex | 5 - .../templates/address_contract/index.html.eex | 4 +- .../templates/address_logs/_logs.html.eex | 85 ++++++- .../templates/layout/_topnav.html.eex | 6 +- .../templates/transaction_log/_logs.html.eex | 86 ++++++- .../views/api/rpc/address_view.ex | 3 +- apps/block_scout_web/mix.exs | 2 +- apps/block_scout_web/priv/gettext/default.pot | 124 ++++----- .../priv/gettext/en/LC_MESSAGES/default.po | 124 ++++----- .../api/rpc/address_controller_test.exs | 35 +-- .../parity/fetched_beneficiaries.ex | 1 + .../ethereum_jsonrpc/rolling_window_test.exs | 116 +++++---- apps/explorer/config/config.exs | 2 +- apps/explorer/lib/explorer/chain.ex | 7 + apps/explorer/lib/explorer/chain/log.ex | 48 +++- .../lib/explorer/chain/token_transfer.ex | 10 +- .../lib/explorer/chain_spec/genesis_data.ex | 1 - apps/explorer/lib/explorer/etherscan.ex | 12 +- .../lib/explorer/smart_contract/verifier.ex | 8 + .../verifier/constructor_arguments.ex | 10 + ...4_add_index_on_token_transfer_token_id.exs | 7 + .../explorer/test/explorer/chain/log_test.exs | 59 ++++- .../explorer/chain/token_transfer_test.exs | 25 -- apps/explorer/test/explorer/chain_test.exs | 26 ++ .../explorer/test/explorer/etherscan_test.exs | 97 +------ .../explorer/smart_contract/verifier_test.exs | 27 ++ .../solidity_5.11_new_whisper_metadata.json | 7 + apps/indexer/lib/indexer/block/fetcher.ex | 4 +- docs/env-variables.md | 98 +++---- mix.lock | 2 +- 66 files changed, 859 insertions(+), 612 deletions(-) delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/aerum-mainnet.png delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/callisto-mainnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/callisto-mainnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/callisto.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/core.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/dai.svg delete mode 100755 apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-classic.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-classic.svg delete mode 100755 apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.svg delete mode 100755 apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.svg create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/lukso-l14-testnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/poa-core.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/poa-core.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/poa-sokol.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/poa-sokol.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/ropsten.svg delete mode 100755 apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/sokol.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.png create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg create mode 100644 apps/explorer/priv/repo/migrations/20190827120224_add_index_on_token_transfer_token_id.exs create mode 100644 apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json diff --git a/CHANGELOG.md b/CHANGELOG.md index a49616a0a5..e345f9216d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,20 @@ ## Current ### Features +- [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs +- [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2499](https://github.com/poanetwork/blockscout/pull/2499) - import emission reward ranges - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons +- [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query +- [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues +- [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test +- [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta +- [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint +- [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper - [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css - [#2570](https://github.com/poanetwork/blockscout/pull/2570) - Network icons preload - [#2569](https://github.com/poanetwork/blockscout/pull/2569) - do not fetch emission rewards for transactions csv exporter @@ -15,7 +24,12 @@ - [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records ### Chore +- [#2634](https://github.com/poanetwork/blockscout/pull/2634) - add Lukso to networks dropdown +- [#2611](https://github.com/poanetwork/blockscout/pull/2611) - fix js dependency vulnerabilities +- [#2617](https://github.com/poanetwork/blockscout/pull/2617) - skip cache update if there are no blocks inserted +- [#2594](https://github.com/poanetwork/blockscout/pull/2594) - do not start genesis data fetching periodically - [#2590](https://github.com/poanetwork/blockscout/pull/2590) - restore backward compatablity with old releases +- [#2577](https://github.com/poanetwork/blockscout/pull/2577) - Need recompile column in the env vars table - [#2574](https://github.com/poanetwork/blockscout/pull/2574) - limit request body in json rpc error - [#2566](https://github.com/poanetwork/blockscout/pull/2566) - upgrade absinthe phoenix diff --git a/apps/block_scout_web/assets/css/_images-preload.scss b/apps/block_scout_web/assets/css/_images-preload.scss index 8356a8f90e..95f4633a56 100644 --- a/apps/block_scout_web/assets/css/_images-preload.scss +++ b/apps/block_scout_web/assets/css/_images-preload.scss @@ -1,15 +1,16 @@ body:after { position:absolute; width:0; height:0; overflow:hidden; z-index:-1; content: - url(/images/network-selector-icons/callisto-mainnet.png) - url(/images/network-selector-icons/ethereum-mainnet.png) - url(/images/network-selector-icons/ethereum-classic.png) - url(/images/network-selector-icons/goerli-testnet.png) - url(/images/network-selector-icons/kovan-testnet.png) - url(/images/network-selector-icons/poa-core.png) - url(/images/network-selector-icons/poa-sokol.png) - url(/images/network-selector-icons/rinkeby-testnet.png) - url(/images/network-selector-icons/rsk-mainnet.png) - url(/images/network-selector-icons/ropsten-testnet.png) - url(/images/network-selector-icons/xdai-chain.png) + url(/images/network-selector-icons/callisto-mainnet.svg) + url(/images/network-selector-icons/ethereum-mainnet.svg) + url(/images/network-selector-icons/ethereum-classic.svg) + url(/images/network-selector-icons/goerli-testnet.svg) + url(/images/network-selector-icons/kovan-testnet.svg) + url(/images/network-selector-icons/poa-core.svg) + url(/images/network-selector-icons/poa-sokol.svg) + url(/images/network-selector-icons/rinkeby-testnet.svg) + url(/images/network-selector-icons/rsk-mainnet.svg) + url(/images/network-selector-icons/ropsten-testnet.svg) + url(/images/network-selector-icons/xdai-chain.svg) + url(/images/network-selector-icons/lukso-l14-testnet.svg) }; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss index 91eb3ad01a..c4175ede5d 100644 --- a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss +++ b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss @@ -10,7 +10,7 @@ position: absolute; width: 50%; background-color: white; - color: black; + color: #5c34a2; text-align: center; border-radius: 6px; left: 25%; diff --git a/apps/block_scout_web/assets/css/components/_network-selector.scss b/apps/block_scout_web/assets/css/components/_network-selector.scss index 7f2a4c020d..9df2d22164 100644 --- a/apps/block_scout_web/assets/css/components/_network-selector.scss +++ b/apps/block_scout_web/assets/css/components/_network-selector.scss @@ -245,37 +245,40 @@ $network-selector-item-icon-dimensions: 30px !default; width: $network-selector-item-icon-dimensions; &-callisto-mainnet { - background-image: url(/images/network-selector-icons/callisto-mainnet.png) + background-image: url(/images/network-selector-icons/callisto-mainnet.svg) } &-ethereum-mainnet { - background-image: url(/images/network-selector-icons/ethereum-mainnet.png) + background-image: url(/images/network-selector-icons/ethereum-mainnet.svg) } &-ethereum-classic { - background-image: url(/images/network-selector-icons/ethereum-classic.png) + background-image: url(/images/network-selector-icons/ethereum-classic.svg) } &-goerli-testnet { - background-image: url(/images/network-selector-icons/goerli-testnet.png) + background-image: url(/images/network-selector-icons/goerli-testnet.svg) } &-kovan-testnet { - background-image: url(/images/network-selector-icons/kovan-testnet.png) + background-image: url(/images/network-selector-icons/kovan-testnet.svg) } &-poa-core { - background-image: url(/images/network-selector-icons/poa-core.png) + background-image: url(/images/network-selector-icons/poa-core.svg) } &-poa-sokol { - background-image: url(/images/network-selector-icons/poa-sokol.png) + background-image: url(/images/network-selector-icons/poa-sokol.svg) } &-rinkeby-testnet { - background-image: url(/images/network-selector-icons/rinkeby-testnet.png) + background-image: url(/images/network-selector-icons/rinkeby-testnet.svg) } &-rsk-mainnet { - background-image: url(/images/network-selector-icons/rsk-mainnet.png) + background-image: url(/images/network-selector-icons/rsk-mainnet.svg) } &-ropsten-testnet { - background-image: url(/images/network-selector-icons/ropsten-testnet.png) + background-image: url(/images/network-selector-icons/ropsten-testnet.svg) } &-xdai-chain { - background-image: url(/images/network-selector-icons/xdai-chain.png) + background-image: url(/images/network-selector-icons/xdai-chain.svg) + } + &-lukso-l14-testnet { + background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg) } } diff --git a/apps/block_scout_web/assets/package-lock.json b/apps/block_scout_web/assets/package-lock.json index a03732e4e0..d00f148391 100644 --- a/apps/block_scout_web/assets/package-lock.json +++ b/apps/block_scout_web/assets/package-lock.json @@ -2678,8 +2678,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "is-svg": { "version": "3.0.0", @@ -2690,16 +2689,6 @@ "html-comment-regex": "^1.1.0" } }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "mdn-data": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", @@ -3638,8 +3627,7 @@ "esprima": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", - "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", - "dev": true + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" }, "globals": { "version": "11.7.0", @@ -3647,16 +3635,6 @@ "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", "dev": true }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3812,12 +3790,6 @@ "acorn-jsx": "^3.0.0" } }, - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", @@ -3980,9 +3952,9 @@ } }, "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { @@ -4293,6 +4265,16 @@ "readable-stream": "^2.0.0" } }, + "fs-minipass": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.6.tgz", + "integrity": "sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "fs-write-stream-atomic": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", @@ -4375,9 +4357,7 @@ "chownr": { "version": "1.0.1", "resolved": false, - "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", - "dev": true, - "optional": true + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=" }, "code-point-at": { "version": "1.1.0", @@ -4442,8 +4422,6 @@ "version": "1.2.5", "resolved": false, "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "dev": true, - "optional": true, "requires": { "minipass": "^2.2.1" } @@ -4577,8 +4555,6 @@ "version": "2.2.4", "resolved": false, "integrity": "sha512-hzXIWWet/BzWhYs2b+u7dRHlruXhwdgvlTMDKC6Cb1U7ps6Ac6yQlR39xsbjWJE377YTCtKwIXIpJ5oP+j5y8g==", - "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.1", "yallist": "^3.0.0" @@ -4588,8 +4564,6 @@ "version": "1.1.0", "resolved": false, "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==", - "dev": true, - "optional": true, "requires": { "minipass": "^2.2.1" } @@ -4798,9 +4772,7 @@ "safe-buffer": { "version": "5.1.1", "resolved": false, - "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", - "dev": true, - "optional": true + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "safer-buffer": { "version": "2.1.2", @@ -4876,22 +4848,6 @@ "dev": true, "optional": true }, - "tar": { - "version": "4.4.1", - "resolved": false, - "integrity": "sha512-O+v1r9yN4tOsvl90p5HAP4AEqbYhx4036AGMm075fH9F8Qwi3oJ+v4u50FkT/KkvywNGtwkk0zRI+8eYm1X/xg==", - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.0.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", - "yallist": "^3.0.2" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": false, @@ -4919,16 +4875,14 @@ "yallist": { "version": "3.0.2", "resolved": false, - "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=", - "dev": true, - "optional": true + "integrity": "sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k=" } } }, "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -5158,15 +5112,23 @@ "dev": true }, "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", "dev": true, "requires": { - "async": "^2.5.0", + "neo-async": "^2.6.0", "optimist": "^0.6.1", "source-map": "^0.6.1", "uglify-js": "^3.1.4" + }, + "dependencies": { + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", + "dev": true + } } }, "har-schema": { @@ -6758,9 +6720,9 @@ } }, "jquery": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", - "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.0.tgz", + "integrity": "sha512-ggRCXln9zEqv6OqAGXFEcshF5dSBvCkzj6Gm2gzuR5fWawaX8t7cxKVkkygKODrDAzKdoYw3l/e3pm3vlT4IbQ==" }, "js-base64": { "version": "2.4.5", @@ -6774,13 +6736,21 @@ "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, "js-yaml": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", - "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", - "esprima": "^2.6.0" + "esprima": "^4.0.0" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + } } }, "jsbn": { @@ -6988,9 +6958,9 @@ } }, "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA==" }, "lodash.assign": { "version": "4.2.0", @@ -7017,9 +6987,9 @@ "dev": true }, "lodash.mergewith": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", - "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==", + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true }, "lodash.sortby": { @@ -7422,6 +7392,36 @@ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true }, + "minipass": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true + } + } + }, + "minizlib": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, "mississippi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", @@ -7608,6 +7608,31 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + }, + "dependencies": { + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + } + } } } }, @@ -8026,18 +8051,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "parse-json": { "version": "4.0.0", @@ -10720,14 +10734,35 @@ "dev": true }, "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "version": "4.4.10", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", + "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", "dev": true, + "optional": true, "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.5", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + }, + "dependencies": { + "chownr": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", + "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==", + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", + "dev": true, + "optional": true + } } }, "terser": { diff --git a/apps/block_scout_web/assets/package.json b/apps/block_scout_web/assets/package.json index 5c92b7b1f9..1169e22859 100644 --- a/apps/block_scout_web/assets/package.json +++ b/apps/block_scout_web/assets/package.json @@ -29,8 +29,8 @@ "highlight.js": "^9.13.1", "highlightjs-solidity": "^1.0.6", "humps": "^2.0.1", - "jquery": "^3.3.1", - "lodash": "^4.17.11", + "jquery": "^3.4.0", + "lodash": "^4.17.13", "moment": "^2.22.1", "nanomorph": "^5.1.3", "numeral": "^2.0.6", diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/aerum-mainnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/aerum-mainnet.png deleted file mode 100644 index cdef9a2edb814eeebcb9317e0fae60b4a858f6ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4225 zcmaJ_c{r47{~v3XP?T(G>?+Jy#xj=3I`)0v$IKYa(ijZk5Lt>GTSP*R64^yYmdctn zjX3s6q3m0By`1-S-rw)K-rncBp6CAF_x1gJzMt>%&;7)ko9eT%@UZ{@05+I`j^**{ zc=9qa9)FdKv}lhPUZSo&(F%to26+$=04*<^Cjtn=c%TrL2oJB|8(j!B0Dw*sZEa7q zH!+67aTpno6CW8827inO0MxFL@E&kq1QFlpVCcq$w9zYVt59<#lsSE$b3q7_^jzPk}zg&pE>camP zWp82*)W#7IK!}W@G+b5z0#s6wkyVseP*ITr%7JB-L11N&th}_WB2)nkm6HSh{RkgN zBX}X9mO6TW$2#7r3wslZcqj-I6ci*ABrk&_pg^)JDk>nb97s-1`q)F-KNw5&AW38W zMSe2qApGG3G@gjYVSy)%9-g=WqPp<0(toFb!T&>x_5Zs}#{~nCJn$e{8SqI;KOId> z{GdE32z=U0GX6MP6P}7or7GQdZIWiPgcu1270I@h8^nKUm#gVowGFgFlX}gCL*- z5ng%(90vGT;!yOjwOs!t-``lTUu!uQ|BF08$6`Py?fpOP{&{pfLnr1x!+X5>XZ#V^ zOAq6wA@2t&`Un*> z71pe&B5BAA_Y?O-zU|R#a?+4}VLxaoRz;^R^tThf6g<*w9E5dRP~XRoiBjN2DKY~5 z+=4loYsv?X7liy-nUk>nJbx4{x7aBK$(Qaj%xg2tu>l8}T74Kit6?ph`;k=}_+eLW zp+FgW+@1sLphoCHL4{j{#&lz5`8g#6ZESSs>bV;iA^iB<)Y-tCQ1Hd4nu>q%ulyISgnQiswa6fRegU}lp-Bm7!w9k>@K;JdH z?0s7AaM!k?$Rc7IKcv%JdAv&MW--5Su20ILQ#OY|^Hv;%~Ny5Ae{jL z$?)MAn20-T*m%|D8C8KIHMlv7)+fzkWBt3mVoOJ8uT*y4Xx$G6Sdwc)_}-;k1uk^l z)L8<>lY6z9+PL0IlgFq*mrbXhCYVq!HCyO>C1$J9`ZmbH{7929U}hpnzN>gv?=AhH z49lNd$YL)P*|Kuqd&`>(oN^~9BUbZ`*817%%J%-p>`CIBi);#^$$Fh{hCXo9pIOg& zxoZmFX8L5X_3rRgIcsBc$bCzN&4Ay(glnP?61yUOUvSBLbs{CB&m9H{XkbJa&aUrE z88>0=J=}c1l`njEE5Wee+9V{k{{bqDfR)hrlIUoau0>~ai@Lg<@qYY12ixUb>G!6m zR{}X}J3X6@-;tsoc?|e`Y8KY4CUyGvk^@LL>!2EF z+*%=$g94J{g!?M8b7bPO2~EX^XI>`WzBLs=iGL=~s3OUh@=BvwLUW_F{b^)v!K2un zyb%BIs)AHUu%4Y~PqFDDJ#$eA5so#S9S8L_<|G>QH?b<^ethk*kyZt>Q=aR=QEFEj z_%;pHe~%t}i%Xq&F3PW9hDGHyMepE6%Y~mykGH*xLnw$`W_oaxIl^l=I!P|>P%?fn z@jLoP8h>ek{v1ZkcAs{xmt)S!R0W-C`(gnBWOnmGn5m6+(e@fuWmv4_>(%B2iX!nhCOLzEoEVJ}vD9{6*dBT6mRh{e|8Zb1i$e=r7eHdQ85`5wP;H)^ujMR{aZrdg zeD=lqUCS`FE)xPhMu3zP+>U6-X&iO zkuotrb>?r@yl8Z7@9Jq0HRQD$^99B;BCwT7<*LwJi>M#susM8aPlBWN+N<(om z*ql;}9P&*GN;BTQvQik^E;v zhIXiPu#69?MEz1?AIqQO>mF92e$VVuM4#Nwx?h&lv%>Wd-eUSBF~C^?l@;cwo3>oy z$i9}`EnQ@zu3r4{LzLmTlc0Y3V?mu#ReN?qxvhk|(WBDt!z&1G*BLAAAufOY&^ZOC zi|t&=e)1k|7O%bS^P4*PM2M>+dLSK|s z&aN1l)hlOu)+We4ig{F#y7-}-PpUqxmon!PUy-ZA2?&p8P!N!FyVCu%bkr%Qe3DEQ+#s~+;;%f)xZkn`ZGt!V|4k=TaC-WNX?=gsqmQt#us z3g6v9H$QLHvtGEl8WxmS>(u^;F{SO3SPt4R$#S5#HWxO+yuAHpT?_Sk+L5J+Jkj0D zu3s>*#OKo*q`{fNverfoJ=gE|@TM=e!)UF@f~!Q&b9ScNiKoyhOf~Q~SmtJ8o74>G z530!0JbxZD@~HhZzp>-jsMVgER0q6pVMUgFXwOD!#yC5fk3p)9l%81-nU&!H7L{n6 zeklb9c4MQPk<$WLuHxmVzlATRx74s&$>c_?!o<0(!}iXH68q^$Pan>%SNGk?%8}O` z9$mJmN)j8esAeVvE#0mv9n*TJ%-)bX;;g0h@(J~R-P1mYOH9Fa-e*c5=h@wUU5B#o z`U;+nF{+R&h~?Nyrh9REC(!zJ)-`FJy1Ho>^Fh2*<#|g+d#gcx6gej37PST5>N#nW z$rvV1)aga?Y|bRDE|k}4C8}Q7xvt_>n<}elpQM9w6z&VltnuLigNlV-J`MbV+PGBG zc6bnl&9^7zrFq))oyxvQdd_w=p5kowfPV!L(v)^@tV*Lze&|cP*d6*ig1KC}H{vo3kRO~f1-e&XNGw+#L`9#|W@ad0d?LFB;S#N- zwrrhofcDJnPHI|BhndyRJ+TmLBTuc&1suL5*>5Gk?3;Y05u!vJ%9L-(&fUmY*pVqH zrzg}l&FP8#s<1Yt6y4!#fx+n{j;Ca0aVF?cRFVxo?};X`2y*4sH)4tRC&IAG^9^_I zur^;z$aSb8AE8ILvS$X#C}@+SCLg)k!%zpvT{U5$Ic|CYL{UG-yQi{S1l~i}eOy`1qIN7J!sD-hRKPUyS)v541tu)tK)LWS(W6q|qHGzz zKNvWR9~sC_{|;0d6OStw7~+h6MVC5tYp}{ zMwj~DZS3;7wSLa{&_4AkPo81Eb}5|FD6P)R<>I1H+$-SVTyv!)_p1Ck7WKPhW=qq1 z7+T_3yZ)D*I<9g5Gjdyc6$p^bWyh~;FZVq@-DFm;SBqSz`yO9hz~5dy*T}SMLtm_< zxYxCYD5xVl^P*q7uZk%j7@3aJl`;)nrYJ1PpU_Evr z$!4H3QdQT&U5AQ~#yq$aUm^d&U4Xb_@bD>7DxwdM0K}Yjy|K!>l%dKSPCwt*GE1e~ ziM!MS(PPexTdS~;&Z8)Q3^^x>*Rw2`!Nw4P-y)*F$fANDkR(+F^)N(^_9? y8jIRHGHASf_J`elri;J2O@L|08KXZKcmVrK!v=l99jhll1z@_SI%U`0Z~Y6TXpFu9 diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/callisto-mainnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/callisto-mainnet.png deleted file mode 100644 index 2e9f2b2730b309d9df7f0216700bebf5a638ac26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2871 zcmbVO2~<;88cxD0h`6F?fiw;(l`JnLA$cSSSrDpWGs-qvUXlk%N%CS|fPh$tOWluJ z2kL@pI#QRSxFQu)GA`g$mRKD{aE8br&_O^H$K`;|3tQ_Po#UBz&b#j}-~ZkJ`|p4M z^R~oBFZOVo?S{kQJfb3n@z^)n{<=D2E&FIV0sBnQMkb*+oclEUi^uIRo`u6XJyl8) z^@-x8pbSw{AUPt1DF(F`L*sDVMFuS-%YgMnDV(m<@JM}C)g+=)&Lbr-#Wb;204tP{ zxjJ}RZnQ*}n<3-KNsB^>Tmy&^s9`-sG^kY?6g2Qi!@MBYw@*_^#9@d&gGUOtZ%9lO z#}WmI4kj`wEV2w>Fp0q&3cw0ta5#ZPIt^e`X>2MGL${kEGD+wIG$6ot;g|4x%8sbSl8%aHupol};yP2r`9jDcxqhZ1VMm0cMDnOyxC5-{a;{Od*tH;r(J|6zf-}e%u zk{m5ejfYVrQzwHl_}sCrP`xM%b8%GcM;ME;V2ysAq>3&fC2sj*WB*j0^M z!9qw6^GJ3CnZ_j3gC%qTWY9r6K&AzOG};JMjL4N~Iq!oqF;MV3P%P=>kRJLNuviR6 zX;3|+k-`NSxZfCX?^ zEHa$}*sll{2D>m=r_6%o5jsRo98O(O`JPa57&JyOEm-tnsUx=X4~L2ML0js$Gm%OZ z%dec#3a|`bJ=#+#G2gJ80YWnSZN>yan9roq$@e+@ac4V1nyr8_%6C)qoqQXCp-7rO z8`8ny=~y0oWd4s>$`p_$9mYy5m1NgSwHKoianzAR_)Yil+V2Y27#ypH_U?EY#s=es z9M)jeI;>0|&ZFJL;T*f8gy9lHb5F5)v)A(JwfVi8@|wzD&ZLyU(gRZJSCN6j%@(&U ze}0{6-Q>2=oquKWYunVKTl`dNNnyG7t!=wSlEj+NzV@Eulz|lS6=_TM9XrwUBYYvo z4;0*nJ92uty)Pfv4SEh%*VXNN^u}}_ZRB+}#C}$|>z8kduIIv*5Xe>n*%fQQ33ERe z=DrSV|A5U{10GC|cIYLToO@jk?*?wVb#1gzQYXK3GPv*cw_f$koxFepx^kV1v4Kma zB%;Om$}-CsJyUOfZebD*hIUP*;f@myyXh;<4n24;eEM+jISw^0a|Bmf{cTj6N9y6Q zBkrIz)V4c$;~tW6(ty9VWlOZnHdoLJrm|wG*23_&_`tJ+uU6UM)NLnbZ{nuryDXj3 z^|QGZ|1bVOITIB4d4zioOD5(OzkOk8-}Tnfrn5XXd=E})_YJvx z_sZ5Vheh)e@u71bR@d8{|6PDy_Dk&L_HT3?Dx1b?Q-P-u>VJ~A-LA~V@^Y@YF7ddyn?=~io@;qBM%xqGHbnKbx>%5B4 zKy~X%;F*p)r;0Wp2@Be{J5`q6_)E5fPt=NiNlurppn12Amv?>Pr(NAOSYLEWQq}cp z`cG446((3+3Q~;y7M~UCO>=^3e)zQ7MNr#P5JT!+d&AV^U^=xk+4I>q+|FA=(YM|< zZwAg2ViNQF2dw>~DKEIv3ps~|g7ZwaU;lwDYQHZ!nyDICdbQznS!H*%yCR$4*s$SY zyZg<}5uM%xttMsb55Sv{f@j4UC(i`VS9%OO*nZ|F^cCe4_(N@xGpYv-wdmV*P7Zt#hs1WpZQ4^{fWHr zSDWd0fp0)o+`j#h9G@wQ{L-_<7xzCoonRj7(R6o7rX8v}LwFrm8pmB0u`+9AmCL!@ zl)cC4t%VkMix^0%&1`79k+7KDt*DpfR$Ox!a4PDqyxiI(ou>*?mulm0_$3#fqU_8W z0B+_iyzkh;@>*VaU{?+%QEaSMd3Eld+8W6X%p4fZmTinwF5`)91rRMxo?2x(|*;8}z?xB#mx(5rY>H=JQoGB9zBB!Gk2H3s}JQ6y$&!=c6@4SwQ zM;5;feKbf*NbzZ|027z<{2S}<|5Vo&E99=NKda7Mf17tN%VAC1%xmqI?&6MKhOL6W zqv?8s@J9~@;L+^6GjGi?w4V5cdvzdmY25h@nKh61`1U=%)m`oft-r46xwPceUsuzg zEU)AF>dMp=f4nHFih6tU-obuGGr#2TZo-`jUGlzxK>iHhfs?F<^{4%x&rSg*84hQp z9BlqN?1;I%sAI>}E`1ns8b+thw{CUJJt_W5U9M=Hjvx5${L=&B9^^iAuutQeB=f@V z^fzmL$}&szS + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/callisto.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/callisto.svg deleted file mode 100644 index 7adabb6538..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/callisto.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/core.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/core.svg deleted file mode 100644 index 63c66a6baa..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/core.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/dai.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/dai.svg deleted file mode 100644 index c4f800733e..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/dai.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-classic.png b/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-classic.png deleted file mode 100755 index 5ca5d8fe7bbbe31f48a59dd2f908d48c7f723654..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2965 zcmbVO2~-nV7NuQT6~q>h03j$UlBE(Li!2=y0zm^Y24w`4B2@{2Bo&fCg3f3QgONd_ z4Y&htalsasc5Ig(RFD=_gvO;2Sw=u{8O0G16bGCNOWK*%IiATmm8$yx-uvHu|NVC= zmmd{wXFb!}!otFi8^IQ!_vNO`avb`9_WG|e=*>zQ@dveqg^i=>`pRNgk+X%x#2%?I zRujux#1J8J0tg{VFhM6*qG$_?z!04h6s5u%Y!WPyDuQq?f4YRjN}(X!GJhV4r)0s& z(uh?mc*&|Lp=edAhz{XGg0X=*1}Y$jH6T_emnqZ?T@Y?qmw`T;hKV@rFhr9Ygkzc( z#K!XYSQes!vHpYrya@2~$5QD8Ab{dWr~6{bB!EUF(TD&A4+Jp$NDML=JNm<+tEnI{ zL%`;Yu7$n@;gU5PC4)%RYPAF{g@C9eM1W4G6G>zunT$sfcy*>i1M2V!wbz&e8&-={ zQl&~>{SfMe~A(5G@OjpT<(*%i#und-? zFg5B5FvqD(Ml^^z8Tm{S%+uynC>bmj3~CUS5J6;PyUZU`!LnGUUG>M#<$)rp!X!P< zafa=6iVVqsBD` zN4ufv(cFg77jq+r6{xfdZPQOnQoGRZ&*ie2Lf!oryKf+_G1K+oTXCM#EZNeCq9eJO z!}~g7tnJ3-{52D+n`iv6>(o6- z7dl`(#Y|g-l%;S2le<>c#ue@jn-wMU>Tu4DzinH7w-&S5cdl@G*_HSA>A9(>a_?eg(Z!yx92&$q z+&Y8d@!!vdritbp7Q47nK6KJrg6_ZB?C72Hd}B_l!9L@{M#_!E^{497;@^TdOL)Q^ zzI`9I;_V#K_!{V`RX`ubaJH@dxXbGo;$Q6wa(>{lc~qN>n#A=0VW_I1X+gt9yR3tP z9r4G0tU8yB=R|s*{z6SlxioI49Py z>tFK0Tl*^^UDvv1$0+cZ{h^0gIkw$H6%AhpHvVzygd5#$vjScZULPVjCwAQ@b}Dk; zj<2qYUa8WzlDNVBlD^!&?* z0|nSKuQ$_HP4f02lCuuAHa*O1LT*piRy#Xsw{g94_Uh9%ekf{Kl#pZP7W}HigF0V6 z5FJ0WIo`-G4a~DK7_v&ep2T1r8$%B0wMR)(@>4IH6PqqAo7B=*!6L;I8h*Vs#er$f zgd84EYr72mv+|fYwh2EJ^KHn=cq^pL5FXN)ac|=+Z8qPn;(A)G%vbQdCA{>;IetFs z#ZqAD6Fx&aKfY!>?dqEJ%BqV6gFm;NZf>a;&fbvG*>&f|!HR8KWSo0`=7&|OPAX%qM6a>+jC+Cw{v2fY2?Mj8d{Q0FIIBfrTlytdp^?X~n0 z%}|a3PeFQaQ}iAh@d?L1r36=x@m2R5R{cs{wfgZ6s&-TG{wMLx_4 zKb|f)n?Jt#v3rs;BUo=^h}n1KU~yg8KOCwH-5-ZKu%&+W!%pHmKYlP~YyDqb-=FRfzkBkx jy1d_Ys^PZPezPY;E3DeKetXFT(}y!REQ) + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.png deleted file mode 100755 index 3752a925440ad10ab87f768adee9240b3ba9395d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3634 zcmbVP2~<@rq<~EU|3!wjzxA)KpS51@d-v|M@7d>`bJlwYygXdA z)Q!|(FqoE`E5ipG{pFXc0`&hw)4zP7K~3zsRRV))=*X`{u#?#aFqqOC9?MVa$8@J~ zL;?#oR}=_X$OK{t4TIS_$i!?;C?G`!0>M0?9ct`)Eegrw+M%{sF|kZB9SGsMMuWhn zXb%=AI+R1^q8#jzwlWGtAONInq)fmUN+>cr)Ms7_bT6OAppc&-(oj1TRlXt8kLiV^ zi$DNrWkE!9aF$j`YqAB7NU$W6*CX**90`LZVQ>UAj!3b@Qt)`>+z$oq26BTaJ`Cr% zy`U#MRESh6reH9Uk&zaW1Pc)ujKPt~WDFLM!Q;^o0xgLWO4%~BP_lZSfdNQ3AWtmi ziG)ZwBRfzOF115Jp3X`Th!<#ulDRNJ0mI1HVhqj#E0;76WHSFZR3KPDOQb%)@BaQR zv4j;R1~5K=L=+Bk00_Q%ek+O8DFSkFPV7H0c8UOm(gkxaXTeq+4)Q;TiOazNd_Vxf zB#dZGR2BO!C}!@0tJhmg)&84UQpCupm-d`3QNIS{s{^t z9hWU-{}V8iNpTZOq--GvaAVk^Ag3&NJT8S}1>m?G0vpZY5OHWr0*;Gj2L%z)mShf* z%*9%9EQ#FDenIvO5hq+8!+CoyWRJrUX$&kKXGtbl<8V%7G8RX0A~CF~)>JBl-SK&lZ%}1W*c^E^LxR|lY{zjOGXo$V}XWC#FJ z{vkF0JKttu5>b#ek_`gXU?>m1l>g*E=l`rFCxk5w2A~#;LCLjZ9u9Rw`Rzg*h8`9gIUt0nL8wg!Twmq~gQ@)N#-Orfy`$NmJU0a!+-o*q4aJJa z6;PG&@d5r=2{zN6STv12%iXBAjFbOp166SYuQ>tqT}pZVEe}f|c-%=ZSznR1G_Ee{ zz(M`j4e?<6Z-Gz2Aav3416w@>pKg-L^_^$NJ`GQOuy2bgzHt1Up_LxhQLK$nRH>)_ zWfhO;)SCD7g-Tz*9& zfu|2XsrjUo=)`PA4;vb;*DF1L^CD#L!opkj_F%-ys*)mqoqLyR zC+SA5=(3Rp)Bb)JXXP-`xSCqsb1_LuS>e~UH%_}FPwcqDO<_^<{o&~k6Y%80*N5L# zyqVD&apoX0m0#VAjdit#CoG1qYtq?&xBjCt2XX4z;8)tg`ue`xbI$h1TXn5F>f2rM zQMqa@JiyjIR|hc-KEa7?W2gNB{21lf)YZ7P2Wr3qT5)9@BGWnj#`pf4uPDL;%EQ7| zUB7C(_hZ+OVFA~PComRy0UR}ic1muo!)`)M1J2rd3oGCZEn;u$GXcpAb$-*OfSTPu zkgjFqX1X?~6_hK&*F2tNvk?}Nv9V9!VQJ~zMbbPCHQQZZlMdacZY&5Y zVAmZ!dF&k#akNM|tomI%hrcJ_=yB0*!>f76_D@cZy4YAbNCEz1qvb0EdiRVyeT(_V z$xo=EEu>!*Qj%6jFWbJs_wniM?99x}*D0#|yv*D^k`OI1C8ebWcHI>uWtCyLy0)XF zlHS=~TzsMA*XRcpev2JtF)=YRnc}4#D-4$_p-<4*4V$*=Mf_xKWu~N{D|Tycs_iXb zyh`>kNy{Jt+@OBEdGhUB#iftP2)Jogp_jpHmc}#EyI$%dg&?)$5YgDfongD~{g^Y| z*r+uypmyMZ!DXz8QY7;An>TN^h3M+To{h^K35 z4L!#ul>!&#=da>|_-vX;&y%Cnv08yV1nV~4aeQhj+2R>dK=WIaJ~YBg?Y|m36J6yFFM4lbJ#_@VO3zb*ol87thF@+qt{b1Imi$s$bbQMmnr-C_QGIOR;?}r)=tXEC_hD9! zz_=d#^lr2)E2}Zf%yJV^^lPnHQBkqZ1*RbEeefXoK)CisKu>ptesm0-M$aEjICsv3 zTY*3vHS^ObD=Z8O47_Dp+EHA*w!mk2mGgpWVQ93$1U0hrQ7uMxu zcUb$s%u^1ZdhIv~7};#>$1+r2RpvDH^z@vv7WF1k{QdhfLwQRu+pnF=J%x-|rjyRO zw;rCL{E8)Y+({r18sfUkw*An*A!DUog%$#PC|h)MbmWzDhgGb7S*Mk?HRnP;o2{I6 z;+doLat}Ygv8m}yj$!Apba#~zW-_#jxcS^zZ%xsjxVu&L4j~xobM2JtMZx?4M4rK5 zyqQ;k*O~Z}A+_hbcYELMH_37jirM_JIdO;g&8rL_|5C3fwGJDOEUCN_@%S1Nu0lF* zShk2E6uvt0wP)JXxPSkc^YZ0OU!m|KKSJuBHUy9N(^jd9-m%qp`|3;R^%ft-yNdta zmW$c^(+Sr#Zzd;F`zO4U7Axkqty;NqhwjeK&XQ}CB^XT05K>ED;}UGEZTmqDb^Xn@ zU8>nWyq@lTPkFhcJ8$2{m6z|zZx2Z`H=j;x0$O{kR%);l;{(a$$!s#GFSH;It~E6D zA_I(9y{fCLXU-}azgrGdOUuYGcBo%Pz!R1lo%q#zBHHl-_$lJlPD+xVe;*vGn_?5% zBlA+ONkPYxRQ=Y?Ju=zITb@uXcHD(T=yygv!d<_&CS~7hsyl!Eu7tZL%c^NqG;;9J zFZDVPo1p6HZGtI}-3pp`zbEC^<@G6EMn*<~d8L}8w;tETWPD!(%W4c=p6Fy!Rwg)a z`nFjiW(pOVm#w0Dd)ZoborE+7id~r7BG@|hHoLyRJDu5JqX|p6vHFs4!<~le>g$~8 zu8Q;QG6U}`7Hbm9J@CnkO?|@hnxt(7#nnpXM=Holi)ej&`V4d?4qutLoxEgJTctNu zAH#?W+}$>u6I0n`*y)j;bblp&uffQhA@dJPi6fCKk`y$K2Ad5S+VA5ho&~Y(2b)Sv z4mEiv3$|SJciLulnT}w!C;D`2;|odsg^i{&Gczqyt(2le-l4`7np!I1LE1+srP3A( zNw31)Ft zA-vn$8%-7V)h(@Uqa~*K_$HsAnjAZMEUDVI;=V)b1DzGBD!nZ&nm>c8S#2GiIL{X^ zUR)8zUHFZ8|FCh~ao2MQ;bjw|pa?Cflxa60q1Z{z!s kBvtq~`~Nb$%$w0D+5X*&mCM%cm4DT_Ie9QH(sq6GA6;jw6aWAK diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.svg new file mode 100644 index 0000000000..cb0276593b --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/ethereum-mainnet.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.png deleted file mode 100644 index 7a3ac4ae48681ce23628e25c247b0ed70dc23cac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2951 zcmV;23wZR2P)^@RCwC#T?tGT+Zq1xAt)juyr?RANMZeQE5GynYCo$=|=p#ymkYBOR$ofyAl zjAU%V7|Q9-Sf809%C+JHse*s|1!Swl!^Je`S_nPc4HjO7{}O^v96B) z=g%2pwJpZxJ0*_a@Vm!G}Px~yUnc}1Lpisu7ROKH)lM+*pO;2 zg1H6}MhX1|Kby_SL^FO>e<53FKgPX0M_|H&He3@wnL_`8v4^Rx9iU07ETKm-&M-CA z#B{Dvm4rsTzljV;vQ#7ZaE&6J721b~pAAhdD+M%KU(tfBNNA)B2bdb_1`<&d9Tgf0 zl@+FT4r4iKB-XTqo=+|)?^HuTvw3=jMvd>6re;p#S6stNg+@syz|_lWsAaJVg+?5o zWNKAqBylY@g~k^GT{W6Ib?Q)PXejyl`BiyeK0ZD)b?Q_)e*8F{J9my!Q&TB8I9T}I z;lqd1!Gi}WD=UlEu3bwJ5fQSd1`U(TjnArq20mbpk@*ZveB{WH)W3g!YTLFg1qS~A zoR*Z7P)<$`ojrS&_Uze1xw*Lx?K?3skrpgiP;T3?W5;OPv}xtGb?w@fHf`FZoER1N z@874PLx}=d-(97-L`k{-qG{t z&yARVqOFZaS7(CsBmfg^)v8sBsc;638#ktP>(*)7T5D|HyqWUy@;?2$xVV^>En8;y zy`4LE(uE5bKK=W{hYz%JMb?@Gt8Z~M}mo8lrUJVk_2imGa|Bi8? z%)MhZ?%%&(@hohCmA7coB07Km{HJZ<;o&rM=1dwgWQg$69z1w3J$drP8(qDn&{j1a zakBS5cI;T8$XLOXCr>UXvT9G~%$Y-{PMs32)Ioy=d8WAwd~O>(;Hy35@#!Zia9lPo6xfoLqwe zZKEJ`C)s<(1VuP<oi_oM=6NMv2 zjG!AgZqVYzi|N|6YetLR2||A*FCV~#Qf>_Otj58x6LlJxT z?%hTT9fi{_y{)Th)271hw{PDzWEL<}8#iurNMsehzP_|{=~AO_wviAz!ib5B@bcwL zLuP>$sdaMSzJ06MeRw(f`T3fG)siJk6qnQ>L_lciKR-jjAVN`5k@OjK>()&(@|jzdMCO+7tna9w5@RUXAcFdiCmM_r226QY9a)1>~$xoH#*!`t-50 z*8>I&pdCAQ$eyM@gm&xC(o#}VbZ7P8_gV|xrArq@99tlvuN4%j*tc(=ozSW&GC=4+ zn2xvJYBmszh=7DrWw6fRSpx+LBLJZbT_ucGcFt+Tr(sX6)1_K?{P?lrk=VjEB9(+9 zLxk3f-f(A^i3SZC2)82_tp}p-=`~{xqSV(2p^*nhxNM7%kPtf;FFrorZl!PAwoTJ4 z$h>m2!gK?Wk0TYx-m9owq=ZM2k#^fq*?9HpRXOS{l4@N!dR8S)hREMHD5!b{q4Q+# z70DVAqNAgw9!IMXpr?HRg$7ZZ!?S14j1c-q2%Rl^uV@(%K~#aR3U1!KDcp`qdS%f1 z4q6@zKsJQFC3~-@PoEavXy7`D+5(&f>U|>50c{4A2aDuU3-$DsTeFj~}lz=7@lt z^otkLpZo)DbJQw0mPKFLN0>5Y3QeCrUGwwz@82t-GVcE9-KfldBM*TDnR`wBKL)*1$N3B}5()44ok|A_uBB!OL z3C)C>+dv8we!9pMA+V{anGz=htq!+t-7>;#pj`AX)nosM5l6rTkdj0K$63IyMdAr% zD$V$o1wqNl$&{V#xB~_AhB1oT93(-}R$bAEFs70L4d@UXMOkzM!AxNV>+e&J{Oqe#kwM-{~hQ41jmRYy${+TS#q%#bdeBZu(mCHOT zDvH9w!jw=QExTB`NCsWMeqC{~FnMR&Xi-W-lVnUxjN($NW&`#Y_8Qqe6b3F|zHD^p zyZbA+=kk#`~YY9FqGBv6) zifk9Ht=9Et-8jNEBS(dX5133YdNjM2qkwBw=8Vul zF5_f!@rwt%4AAE1Tq|-`XaKG7X{MfqEP)@5JguQC z8Oi+rIQk!*ZKu3MmWoVX4H6l1jpcJER|&0}5&T5OijeSrR-G^q)27!h1r#QilDx(dI%T)CnWFrPUy5h&qX~*Zhl?0yWb0riJ#^K xv|hlDRUgVvLV(o`3}WW<)#}kNVE>;00{|uRSeAoP$^ifX002ovPDHLkV1oOejy(VX diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.svg new file mode 100644 index 0000000000..01b44f13a8 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/goerli-testnet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.png deleted file mode 100755 index 4fabf2fd7105b5b25abe6910d9bdb7f459395c2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2846 zcmbVO2~-nV77cAHv<}#Y9@~~U9m}N!$x;b~RK|cIL5PyTU}ymmEs}!NfuusJFacai z4~PPd?b?b+yS6&Gj{=I0f`WhqL17vZ6-LDc6c5U(PK70{Gcw0BIko)y|GxX*eeeBu zk`^fUwI4fqEQLa`m-2Ho-MBnCSPCZ{6cXGWt^kswxR6Eo~9sedq^}yXjR?f*{Gf zp}oj2A)qD*oq)wM7z|7Umx<}4Ss(;KEH;P5;V?)915eNru#us~rwubm5L~H8bp(oO z=@v#f5{oB<0O{$V1dYy0tHp=HL-P*(Kr!={O<2ZiE%}O z4q*i$I2Ny0A|!m;@K!kCvz&BsNbDyV`z%Magw z`l(Z61cs}z5rSY{wuV9{5bF_`!1M|Xiyh8#;4lkaEVg9TojywjD^ab5+S#IN$O@6b z1R?}T1jJywGdLa!5E8g^1t6Qj<_g&CL8uH#N%-o%19XDL+%h8=5Yr6BJCxZ zGTsuyVS5#6&-P}!xq%Sq25~(=&#f0KWrPIN6C{0$NqmDDy1L_ z(`#U|EKm&`jj(juXn<}_k3fvYVtO)gWOTXj&r8MPKs^?P#*zzokgqpg>LccXq(BCT z30jT_83v0mM2{{AAsBTt3^R$5LoDF`Ng28Jd-=J2QGc97JdMo7x{O7lPKZ4icIQG@~3Bcf=s z4o0ef=)?LSv{b5LZ8So*SQcQ>%Ca=0L2<0XB>b*>VC}ueH4G=ap=D@o!{mpxkt14? zT2Hp=W|xTPp^RQrUUkr{^xL+Kzj7k>ANO9I%YHm6EP_$J_2sJGTjwIyEn9G3 z54qmmgzcEwSX|Uqn^e`4lO*pFPH(-uEb?0_-Bv&HHRd~7s-)imz57_yajN*NIU|sD z&DK0ybM_x<^U!At6n+`W}~@t2=2a(Mm8>B-Xq?AHeb?Qz`vrOTf-b$T|K zv7}6gLtkp2@3_K$7Wy*QXG4;6f%nuMQd`H4E3FUx`EF;Ld#-un(!F!I(^0R?Z4bot zc~LRb6{>TeQ#*E^L5+WFFtyBG+Vxz%n6r(+D+p{KttKS+v#*JcB~`$p8QJqsGB3|8 z{iEqjndXa@kG~`d-Zr5vnWbKsC9F8AL zJ=HU3$+)WR3Bi=puXK}HbB}~sMqn6sV6$I1F75lo0&HQC95?X4_ zxpdn8K%=niFJre8fUonsMU8pQ`~~#VGLC-pmE+Nef@uM#y5#HJGpCvXd?mZJE@WK$ z^v&nZHt4FhgMF)_)~g-Li~bS5I|grgawjbyz0mC6ODb;7-kE`LEB&MEU5Ic{T~SM; zLSq^?T$#8f+75FqyD?*Ngtr60ucGFpO!eJ%KDqeBgte7ZQYhW~FF7@ptClscMK?02 z+VPnuPCAFr-2Lu1Puw5K^-5m4-H;IfRbOKFp84|Cx9+d<{KM%>lJotPn(w-I-J-f& z>Ms(w(xpj9o7<{pWN>y!9j}A!=gjvrG`kMJe)+O8Yo9}A)jMf$MQJ=0+U^$Ta=Lfj z3v>CXoP5R$?AVx_5lw}Ae@!g>HgD_edm(9>;Gzq)re?zP?4nGwtoQK2mI7KO=*lcP zadqmQh>%%dZMX=GCEvwZ?BR%Fo~@^~KHZAvY`^SS+DxTYI87Gp^FAQO7hV9J(wg3k zT0L7mtuf?9xP0PH>8aN#qO-PAo6ZB*O?ERJcTbM*yRCji?|kQ>sm(I%cUtb;-^X1# zYx>DhW2a|!b$0F#vchK%+h+@b_JZ83JIBKg6vybi;zQ;#YQv64H}(8Ifx0ecg(#r+ zXv=uQ@T5s@*V1{-=7#Ci)9z`e!b?X>3MM4PsqTsHtx3(!lO?;hx2WxHI}f-z%wj{T zxV_`+Y2;a}OATrLY4<)!TWOqM$=PG6p^w&_c>Sv5#_N_fD<-6v3^(Vu`oei%hu99yx#x56xwf}mw42)<<*aX diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.svg new file mode 100644 index 0000000000..d04f204e62 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/kovan-testnet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/lukso-l14-testnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/lukso-l14-testnet.svg new file mode 100644 index 0000000000..bc849bbf9d --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/lukso-l14-testnet.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/poa-core.png b/apps/block_scout_web/assets/static/images/network-selector-icons/poa-core.png deleted file mode 100644 index 68bb5976f15b7125fca21f56aaa8b663ba68d705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1639 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901SGegx)utgBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFl%InM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWnQpS7iK&9QrJkXg zv5BRnj)IYap@qJIg}$M&uA!NgiGh`okpdJb0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WA zUs__T1av9H3%LbwWAlok!2}F2{ffi_eM3D1ke6TzeSPsO&CP|YE-nd5MYtEM!Nnn! z1*!T$sm1xFMajU3OH&3}Rbb^@l$uzQUlfv`p92fUfQL?oT3Q+yxH*|P zn;JQ~8aTQ+xxw_h~)xn-XroG5X;Q2UXBl}3}*6~3lfs;t4{uD4Edm1U}VKc4YGqg2~T@QP>2 z)RJKDZCx`KT7`1!NiB>G;ug(u)a>Hh#^?9%$x=n%clY*`@AR(zRlEFB_4{@2pU-<< z`TxSYnEQ)kx18N3&1CVQfte4JXl7%VDLBB0OmOB_Gkv{Ro{)e3WOH5k{O&M#5Vp5efRP9>OR}l!tb|E`+M8Z(&z14vgzlR)~_$094aZ?_f-3se4I~e-;4Iy zi&M{wzg=)^;l+FNq_WPfIdo*_orw9iN7_DT-pzhL`Q>{vv8BiFoMzp8lKh1m>zOUrZr{F>n<{Jr|?-@k8W73Y39mAO}&QFyJ})|pI= z_6gf2 + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/poa-sokol.png b/apps/block_scout_web/assets/static/images/network-selector-icons/poa-sokol.png deleted file mode 100644 index da38f9834b4a9e107805b552115e0995249357f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1714 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S901SGegx)utgBuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFl%InM3hAM`dB6B=jtVb)aX^@765fKFxc2v6eK2Rr0UTq__OB&@Hb09I0xZL0)vRD^GUf^&XRs)DJWnQpS7iK&9QrJkXg zv5BRnj)IYap@qJIg}$M&uA!NgiGh`okpdJb0c|TvNwW%aaf8|g1^l#~=$>Fbx5 zm+O@q>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_NvxE5l51Ni9w;$}A|!%+FH*nV6WA zUs__T1av9H3%LbwWAlok!2}F2{ffi_eM3D1ke6TzeSPsO&CP|YE-nd5MYtEM!Nnn! z1*!T$sm1xFMajU3OH&3}Rbb^@l$uzQUlfv`p92fUfQL?oT3Q+yxH*|P zn;JQ~8aTQ+xxw_hL~eJfq<0 z;uunK>&@)*-qMaD$FHu7(iIe1A{xw-F)eDvrRJ^2tJZ|CkE^~~zbyPe+xkbo{l5HM zwi(j48q03Ty9C@?q46WdFfZ-cUGvSGtqp7BEm_LTKYjar@B3bJ<}&^I$oEZmBl!gw z*b8tY9*YKM1iCY0dFl59!uf@N&W8M}l-_sp-p!Mz`qv)&8d`R9W5BE&f3cLOF?BD$ zT60B|S){eQ-?qHk-Mn+>M4_zXdsThz`5kuToaCb4IVEg=#ufeZsl42xemfRk_`c{c*d`{wZn)$)}=Esxjth{o&N>0g;6k<#e=b6b~l9*GJ7ijeGmP9X7+SxrEB?_ ze_qegm04bRFR#Gql}7pm+12g$h2_j8r}01ga&eV-^GoOTQ}X2GFC2e#lciL3T3p3U ze_p#9htv(zKg)PEyw^_sS5w$zyhKIjYV0G0yAyBCwEdyX+0s^G}|H`RMp^nQhe3RS;Y zl~-SQIb(KQ*3|xv$CG}uwkG-n>z{kp=WyfC;sqa+Po>GnsAjgTe-##-zI2KVZ&352 zlRht(o|L@1dY8qQO@|-xT(g;EVE4@T@Rx#+e^=JzpZVeLn6}r(RVI6DZB}NPdD@|q zy|H4e*>^|vm(2dlZ@0H|@>%cdPSsweOPm%~SCLa2COhE(qYM;HTy>Yj09bRVzu{ty R_zS8 + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.png deleted file mode 100644 index 0e3993eb36794e52a26fef65eb90a33b9ff48b29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2171 zcmaJ@2~bn#77i$gAXvasM4%y9ihYm;60$%9LXwIQOCVHMAtaY1KyqVpApw*fsZs$g zS_=``$|@j>R7zct85OJw%8pv36%Ya{wStAGFQH&N^B(Wc-24CM%=x~v&Y64EXW!@g zx@NjC7);-D57k$72B}{iZPk}h<*unZwnMZ4$PbK!WNZllbLWB)0Nhi^<^jF{n;Ub<} zP&66wS5N^AAGil70pK{KlRXE6#li7JB*w`ROC;LC9ncs83Qa&^9PKeqBrKZb-~eBJ z5GrpHZY0T2DK0d*F#^90o%p647Wn z1?z!xaHpZ&=@j}JmI`uWg@6cJ!*c(|QrE?*2SO-Td8PsqK^(xPOF$ufC2^8q{aD=B zvWsD_&sfycmL8=rYn-C6Px zrDEn_q1y*39pAiTZoZ`1^`Ytha8@c)tMRi7A*m;I^Zo_5C}yREq~`0E8{DdE9>SYx zY*JcgMam{_KmA8xYoY>_2ht&4*yRS&ME46Wr|Z|rejxegyWr{Ko~~12l>Hi? zwq4TY>EuN#SQT_}zc+s3!`~b3x~Zc&sW*iaAT#V}=%&k+Ut_&%k_j@A{1B^|9xCBw@8yr)KjP7Wxg2L7 z*t%?_`7^z813~*_J}jH6$g>W)mzYbxZafhB@E9qmFLQ(5i23QD zN0morL(J>&jKYXVP8Y{4D`K*v_a=H9`|Q#Jt{Wv7Y&JROkTyY?GMh@wf`6V7w%mv7 zsW{%BVkk~2P#6{QCd~K`w6sFH^y0uOPV8h1wBzV^h^;xZx@Fp-ua%UKO2oJF3e7wE zxZ4UsEBcY?HeMZ15}cDn8w}HqC4#}_{hyLEQHx={W4VE4uCutE7{-pEKHtj`L2}cfFJV;;o1I7&8Gk!9d?@M^I zB|DR4s>CTNBM~2c!n-d%^R5JIv2U1fpWbX0c<1dEa>ugOC)THrPnqbs6goO;Hodx1 zv_+@4MG;g#=~sBRpMN_jRP=LTnMp&-b-y+fvSj#&{>abhiqW{{>-9?g{HO?+^AjI> zD=)yOR+3ve!@Q{d%M0Y)pKjj?7PrVI+p82w%lZo#PWV`I ztW}#^^NINWJEOE*{rOHpr&kcR{IJu|4hyMc(`!3|qq1dOQIhJHBeX5+&zg&Ns{SSl z8+F06&v^95nL1Y}_m8{`g4uBRBY911biw__wrYmu>=Ft6s`mG{4~KtiVn7G=pU-^t z)wEFsV?b<6Pfy$JHQbiMJACf!_StM^6jBE}*VS{^X?Se@>|W<%?MeAgBQM4y`JI&k z@rC}^T*qL=$&K@^)(5hki)q^49sjjt)Jw;(N411jmQLFI7bzOB{OZ@}t%PuY_3wZu LZ6CFs5}x)S!$o_{ diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.svg new file mode 100644 index 0000000000..7a1c7de013 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby-testnet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby.svg deleted file mode 100644 index 1991096926..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/rinkeby.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.png deleted file mode 100644 index bc5afa1a2e9332b98ca1981afb9d87995809b68a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2409 zcmV-v36}PWP)YH1 zb`Jdx$DA;rsScjUx93uHGMHZ!VpkMm$^(9|5;hTe$o28pL`9Q!uTizz|RMIS>K zK;o-_^D@^=ps78(9{mM64O)-VI8W<2k4iyja+`Dkv|cUXJZ7o_JpjEAJsMiSMsr>V z$Ob)}zvW)gcGQdWJX{uN8t~bH?gDL3l;@wAfl$!d=x@;(&~}y1401$)?#$n27Ff#S zySlT{pxx+ic#ObOP<@z*+epywp~qNk8;O{#Gz#=%=oc)eG4(t%iVHOL_df*zgDkB` zHfEH2r=V@z{migfHYsAX?sf(8c5{X_TsT>DgzYeb8F?<4kmZ10?QM|kH0I{1sSm(k z6#>}!PXlZ@TL-n`XA5Z{YCih&sHHZ>oFNUUoC3i!54mY}SoMGhdZdW0nJ!ib;N?AD zD6aC0hFyy8kFIQP)v;VO?37m9{V5GG}ZC%w0%0ahLH zL1~RKs{k^SZScY{H{@qIZvKqYT=i?6_GJoGXj*LX?Wzvy#|s}@?w4T)r!M8P8v$6h z&ubWDt+K>xE#L2j^A)%1WlEFMmY@X?v6R6cru|QL$wopYQw9+T;R<4Suk{vc_eXr;A?P@*f@n8)a8L2+Zv=Qi878}Dg zD-tx-nlmjfhHECXy$PCz`#M=%jPIAB@6&^xVlfe>DSFWP77t+>9|BENF(Xw*;t<&4 zayyiRCbn(@JqVh&ok5uT3+$~8>R?w5n%EAaD2AwxWB`Jm-QQ*Sbsx`j!kBIjGgKc# zXk=%g86sIU)CJRW9Z*zhOfNAv%?7>O+rcCnM4(Nxtc$?(Zr>^&h`IEY=YS>A%CTD= z6*(Oj0^PylAY2^@w8!EgTpj|QYH<**6awwDIEWX4uCg!)SG5INj=WB@fZlzv0X{xn z2mjXiVQ6OuEVtTv6_*E*=<*K7NUGCSG z8(gUJYir~VmNvjkd%W5#c5_9aUHr3G``sJ$pe-|?(SiLR;X!Xog~m_ zq*oPqJL^j@E!nk4RL41~wib<3(+Z^Qhy{~$%?Y|CVU*@sHC4%J%E_OyQ?2p^VAsW4 zMQ|{7P~RTwfj;SWNOjv_Or`@?KbRD@Y^*7{@UyGOC27A)*Pv^?gV!9W8~CSHOV_+g zs*Y2%nv|xp=(H`Vvn;ff_Va?IsH;AOG-T@nFmHRU)-sVSIz%fy)H6IRJ9Szd{vx&# zWR$RSOoLh^3Lpcs^@Z-MT`D3tan%oVw$;McbM=|j4O}C*L{2S zUN_9hbKa~%mX2`4Tzu#X-n$a1v-(DcJ>vPXPG%%84tGHp-Ig>e$!m_q-$!1H*U;Y; zU6XBET9UOMbmyPiqx@&Jj3^%H?tp2z;Z??4hke?}TiiVayvCb{ykV^vO6&ga(uPc{ zBMWWhGnsmbpHN{F8ATd)kqbw-8?_QX$`?CNOjXEiY*UNeGsD`zEFo5jCehg(H6o*U zhT(Ut%uV+h z9vf_$ngr>dTcx=Sdxl=YEiVsp?WDVdXncjL5CJ_#+Lqi8qHMa4)o-E?(n-0W85zZE z*zD3nrWuj>+iRtO-Z&)*dZq?%V2WW0*4Kr5y+$Wh7!C66N_6P?ME&&1V5vF!5rX?w zqTVLlU|LI9v~=4NEw(8D z6D%WBsB7GeYth1^JJ}ybFBzDG{m2rzEv0j;$E1%k`6z5~Utt5*G9aLV|8HYwH%*y&7>j{GGg>mFbP^D38CQ@?=y be*p#n#vo&@_q@Em00000NkvXXu0mjfg-w8~ diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.svg new file mode 100644 index 0000000000..96ccf5f9b4 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten-testnet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten.svg deleted file mode 100644 index 87c98f79d2..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/ropsten.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.png b/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.png deleted file mode 100755 index c7c0e067c83fd0222cbee6d354e73ed5e2eb02b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3811 zcmbVP2{@E%8%A~|TgZ|zLY7&LVJ1V<5VABeWT`aGe8a>n&5XS)6`@XK38gG8vL+>k zlBFn0XhD&sjgq1tN2>pul5@`gpZ@Dy|9sc?eed_a_jA9`{XEb6T-PL$UG102YRHO+ zh%9q-uyq69KEhjC418AKee40gWVjCAd=U{jW#KIS4z;m{ScTz10u~^kLc&-GhQgRbEO2lX)(nHgnL^M=lqCXbi9ngbP*^+$iASR$3qL5h8;{PwyV-77*bDq3 zKm!Bf1l z$VlDE2^J8bpr=11u(*q~Z2m%+zVko$H5)YsXI6Ml66ZA97n-b=x8hr3q#YfbQlIKNth)P%YdN)GX@HY zF#{~Amf!sX?QJ=4Kwm%fIm>xWd6U53EYo6!$(h#yJ#L-+T! zKQ*qOaIhN+hl_0({8(({02`#{fo=N!Si6IWh;*i-Es+w|H}1>y?e#0qtzw1Zk>y1x$Th4y0eS9~mIgXT7^Lln- zWw11VX1PJ3ftFT95KMKr;j@l`s@CH<tS9zP<|v3R?5S3bzYt zJ;F}~mbAd9Labs36+8QIE=8K8wATnS1R51 zW=Ps9SLE27w&GatZu~d_t+|ZOR=A(~sbzEd>CTHow>I$sO3;(LM8MjdY59QoX(WyUVt(eG7^_k&dwU!(0W*%sZ{;Nru%@7;SJ z9zM~m@oDWlnYSK<{radU0BJFDOP?t)L8)OSZm_U#ju&2HbNnV`)fynD&$I zSF?B>=T{G)$VRT$#-ta^Mr)ZoMr>e@M&KwSlAwz9_Sux%+;Q!>;+!iI9yJgDmu&eA z{(vFhwY-axVXY}+>9GAkGP!KLE8IKY{K=?k_?rWyzQmn7Oq|c!+YTPl?~osYgp_!w zHfqSPbY!lq8GOLfo;0zR(wf?zd?P(I$>!aNGkqv!GR~;qF}kGLz|_zwT0(13qeuLh zp}LOhU~OYzZ!5m7*05)*W+3JH@ieD>B?Cx7W%_6+RpMgB=s}eY`i%MM=yQ6qQcogQ zwj@j(IyQ-BKIbJ^*%yq&wh11tjH=cb*WEjoYL&9{25hi8I!jk&V9&heNB5}nW?hM% zDZ?uxzLc~yPEmW{_;JyRF{a#U_H}mM*@;4`qwY-Js$q$fb=WVBm+TuaQE{~#*yvK< zNExYj#yzX`rlPY)3?n@J=HDllorMd$4}TEwsk(=XPc{WBOtu$ADnQiFjI_8*Z|J0+ zbsTk#jIN~tsh08|#5!|{8DywOmd=@C%@9w0?bLl;x7zLE)?qw4!ck&%tG3;}H_}qm z;J3QvW5db(aT6t_BM&wrBYl!FkB0G(-6l6pq{7#dCA0G}j|v)-*H4_zH7w+v{7uEJ zFBLr$kx{}cpeCfLLdgt!jjOs=>-=LPBSdB;xjhRIcM3qT4b!upG zQ{bZKJM!l7CYk{fO^>z|Qu67SPvpxG_O{3D8wzN^9jWb9u;8}B9FjLy>_1)f9+zW~ zX(L7z+ZS*(-A{+c-CAVu^t_YobEZtbX@XMs@0hORL*;&nFw1?n$iwRmTKg%w-m!Z)da*1eqf%-Pa!Xx4-ms-a4jyjN(!1)-6t9mTXM3x|Z9k<*b2YsXO!3DN5#Q zYPue-eNXP#r)S$Ot-jKx7Tlm{f^n{t-;op4b@cs*p(h$j9=wyImGoT;lgS zLr-_m9-Zlz{Q|FXTFQQ-vCRlWeR@)SkA7mp?29QXtlsu|;CRPtDW+drNA>cM;`iZZ z^0DrkiDDU?+bZ-z`PEi0nDyH8ilsOm!?fg`|D$r3~PE=xvaa8Yi$^ znN)cnKeD}%SnNd^U*0ADJNaaWV8|fnlHn+x>nI(~Dv*eRy}q*CjHo>RJS`>uQ^Sy~N7be_k-8q0sBIYm zqNNq1K@&p`8$;0tYa#Vw9xv76*YNCS&oi0}F{WD2#u?AfdD267^(?J_GnKPO?liH> z-7VHUFJ8gcldNTuHvKikeY^GM8j7DR@8A^|nKNnai4}oP(S&p9avQMv%N(R?YO2Jg zUZ}Lrooj#hCi!mc?j&dD$W`h`M+*IVO@@3BCUW&>t{aqw$J8s;kxz!#X$JBJtT@&je7~2$93#iG`Td6sTj#6^l>s@puY}^sFsvoG0wl3u44DLq+q^~zdC&T yVF;mSNP;MR*xFcE&vP)Lsww8zm!5U85vVE_eJwtW4Leg6iawHyQh diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.svg new file mode 100644 index 0000000000..61965fb810 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/rsk-mainnet.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/sokol.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/sokol.svg deleted file mode 100644 index b2ced66189..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/sokol.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.png b/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.png deleted file mode 100644 index 5fb54a4175012bb372cd0a003bdf0525abf8c04f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2810 zcmVY@(q=M zg379xXf#2zNN6y15))Hr8Z&XyGzPJ$iL?`q(P=tW+a#uOw3y5!#IzYP@tnr!gX?Dl*G z83_D?WL(Q+ewwv`Ytuo~u`iJyB4c6bA(qMhC2NZ(XB{3Je3v5MMvjJ|k8ETG@^{EW zUV1dmXA6)!hl!GVF`BihfVFXOJz5xCho;f`Gvxg+eDNIfR2L!5TJ-1?x%(DO_+&jUG+6(cTfJZ~Ik`ETSH7`X^#I+(*e zOON;HNcL-v1s!AAT^;FZ7u*l|IWn0;H(D!_EO-?~ebOtddEF z^(c!s+lpKsTfS2m$aKsD$Ho%xjS@ZGu%hMwblH0((@h8nfem-fbh&)WGZFJj!D_dO zGLS4@Ml#ds9fRQ#H3o|l*M5YJ4M$|9TpBq67LG|!T<#;7mh#A9Q^QeF29*ZJCAarz zy4Mz~HB!89J`LZrHp-^^+qg6s>px09IE-oD!nAVuy7hlz-6~>nY}rm9)}vANc6%B! zf_?Tn?Z~{^@1UuxLsH7oK7Q~H+FT?3;iN2T1*M_1QlPr>YQ7We2K7ifoy`VA^jhpN zpZ%{If3)6!7tS7l9+}nQS;3L;(ogSkTFz>`MrovA!$wnGmaa}vyPc%l{-z^Si^=A} zHZ#24ctSSa%DAbJKKjnE3w=k|#MPI(CK zmFbmD*6WZ}u?H;Oo#NkPjQ+6q?u8KJCmks`(ta5pKUoCbcDq)JCi@slHhMBL0MxZz zee6O9<@xIU&}OqrN*j#|-I|o%H&3O{a!PLNwu)tU_w;~P?PI!~Or|3hG)6<`RajFa z@1E0PlXp?fXoVpAD^tSRFuqL)ZE`YsLa*Dbu>-37m`DgkSc z`%kG+UMi!*)&;z@i*!sjIs!PtDRR-zA9g$c2Fy!kaE1sn9bvo$&;QX_1z)!`xZE1b z^H0pn;bK5Id4~QPcuSHb;r?*upg4C{3Q9|PfU~wR`qKuQU>>`Gr3+p3s{Nw-EC))n z674eO;dFf~h*nt0Q}6>0;mXv^00Mv=xCPnhb{;!HnDHm@_mm9q5#-fPY4S}OVjfNx zY_HO+qn*c|yu~yZqWzWcc!)xGobm{KcIZy@4DH-0`q{CQ;lc2Dm-A7cWtewI!%5zn z)Iz4i!qaUwH7Fd`C(m-bMeCAgie+$SIxdsxsORNp5A-oY{*+A7&2|@*m&%~BI6^J; z=qg@*`3)1(AbFJZDmLx==#+8Msf>*iXY3$VA0rs~v!oSQlJT$MG!lb9QmLfhN7+y1_%clG4hk7WyP$hoO2#bUHQ3;ai zUpLKxW34|xLx<+${TZ^+)oi&%6Bq>pA(5~;`CcvU zbNPk&%dEZoI*PT3)6NNtg%yd@WV^)n+T(Dj<1c+KZW}Rz&11)1{oK-++v2U=Z-qPPS*}wnxx|lSjX0B^Tawez*i0#9AUge$Y!;| zh6dzYsTmL@<6>Xw>V#Dl#n97ZcUl%*d$D4lm{!t7$GWy)od$KoqomW)-k=iM5gYOo zwd~fi#Ho-KsbCem@&GhmzbacErFpsXplo>$V4YOAiuU=_`UTI~nCa;IcDEWePYnr& zwUh3XRSHexip=K~m-~ge7Iv|zpA@KWl0hX+@9rNa?ft$4dCr^lj`Hz^{Cl#%*C0LJ zs&2Qyrc;MpE`KBDp}bO{x=99-#mjmoT^8R|^i9y^_q;hOY?zV`<7Hgz8@6s(d2BCq z*j(QzPI+E9_N`ck6i5b=#mgwDe>kUa?kObfxkb11fD5gP27!*jfVM})*FBQc+UJuONgQMYh;>n&5v0TR6dj)xL;xCheR>vzoM2QcDhmFM^;DeM>$Fb3=vrmD3W`|OI!*n)q zyhS1-{Q@~`CZan%9MbR!F+piI-W5%N(a#a5Ga{feN_;-j^{TwztD zXcu;1UPdki$I-r#BV5U(i-+0&is0(Y5x*HrvvJZ9aWo;?+ zRDqs;`y0hZvXRdqFAc%C#U&jE|(r*kqrwYQdb+8<`q z&M#mDzOK4IsNtoI1ZOW`r!z&u*^dy|ZvZ1@wy@r+$qU$(;{O5+0A^ZhFpVTZ;s5{u M07*qoM6N<$f+W~&*Z=?k diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg new file mode 100644 index 0000000000..e6f660410a --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/lib/block_scout_web/etherscan.ex b/apps/block_scout_web/lib/block_scout_web/etherscan.ex index 867b56e746..021a0b3aa1 100644 --- a/apps/block_scout_web/lib/block_scout_web/etherscan.ex +++ b/apps/block_scout_web/lib/block_scout_web/etherscan.ex @@ -713,11 +713,6 @@ defmodule BlockScoutWeb.Etherscan do type: "timestamp", definition: "When the block was collated.", example: ~s("1480072029") - }, - blockReward: %{ - type: "block reward", - definition: "The reward given to the miner of a block.", - example: ~s("5003251945421042780") } } } diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex index e8d6501e02..73f1bbe591 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex @@ -73,7 +73,7 @@

<%= gettext "Contract ABI" %>

-
@@ -89,7 +89,7 @@ <% {:selfdestructed, transaction_init} -> %>

<%= gettext "Contract Creation Code" %>

-
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/address_logs/_logs.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/address_logs/_logs.html.eex index e49adf8801..92a8ebc6cc 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/address_logs/_logs.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/address_logs/_logs.html.eex @@ -1,4 +1,19 @@
"> + <% decoded_result = decode(@log, @log.transaction) %> + <%= case decoded_result do %> + <%= {:error, :contract_not_verified, _cadidates} -> %> +
+ <%= gettext "To see accurate decoded input data, the contract must be verified." %> + <%= case @log.transaction do %> + <% %{to_address: %{hash: hash}} -> %> + <%= gettext "Verify the contract " %><%= gettext "here" %> + <% _ -> %> + <%= nil %> + <% end %> +
+ <% _ -> %> + <%= nil %> + <% end %>
<%= gettext "Transaction" %>
@@ -11,19 +26,7 @@ ) %>

- <%= case decode(@log, @log.transaction) do %> - <% {:error, :contract_not_verified} -> %> -
<%= gettext "Decoded" %>
-
-
- <%= gettext "To see decoded input data, the contract must be verified." %> - <%= case @log.transaction do %> - <% %{to_address: %{hash: hash}} -> %> - <%= gettext "Verify the contract " %><%= gettext "here" %> - <% _ -> %> - <%= nil %> - <% end %> -
+ <%= case decoded_result do %> <% {:error, :could_not_decode} -> %>
<%= gettext "Decoded" %>
@@ -81,7 +84,61 @@ <% end %> -
+
+ <% {:error, :contract_not_verified, results} -> %> + <%= for {:ok, method_id, text, mapping} <- results do %> +
<%= gettext "Decoded" %>
+
+ + + + + + + + + +
Method Id0x<%= method_id %>
Call<%= text %>
+
+ " class="table thead-light table-bordered"> + + + + + + + + <%= for {name, type, indexed?, value} <- mapping do %> + + + + + + + + <% end %> +
<%= gettext "Name" %><%= gettext "Type" %><%= gettext "Indexed?" %><%= gettext "Data" %>
+ <%= case BlockScoutWeb.ABIEncodedValueView.copy_text(type, value) do %> + <% :error -> %> + <%= nil %> + <% copy_text -> %> + + + + + + <% end %> + <%= name %><%= type %><%= indexed? %> +
<%= BlockScoutWeb.ABIEncodedValueView.value_html(type, value) %>
+
+
+ <% end %> <% _ -> %> <%= nil %> <% end %> 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 970206636c..9d640e55e5 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 @@ -99,7 +99,7 @@
<% end %> -

- <%= case decode(@log, @transaction) do %> - <% {:error, :contract_not_verified} -> %> -
<%= gettext "Decoded" %>
-
-
- <%= gettext "To see decoded input data, the contract must be verified." %> - <%= case @transaction do %> - <% %{to_address: %{hash: hash}} -> %> - <%= gettext "Verify the contract " %><%= gettext "here" %> - <% _ -> %> - <%= nil %> - <% end %> -
+ <%= case decoded_result do %> <% {:error, :could_not_decode} -> %>
<%= gettext "Decoded" %>
@@ -83,7 +87,61 @@ <% end %> -
+
+ <% {:error, :contract_not_verified, results} -> %> + <%= for {:ok, method_id, text, mapping} <- results do %> +
<%= gettext "Decoded" %>
+
+ + + + + + + + + +
Method Id0x<%= method_id %>
Call<%= text %>
+
+ " class="table thead-light table-bordered"> + + + + + + + + <%= for {name, type, indexed?, value} <- mapping do %> + + + + + + + + <% end %> +
<%= gettext "Name" %><%= gettext "Type" %><%= gettext "Indexed?" %><%= gettext "Data" %>
+ <%= case BlockScoutWeb.ABIEncodedValueView.copy_text(type, value) do %> + <% :error -> %> + <%= nil %> + <% copy_text -> %> + + + + + + <% end %> + <%= name %><%= type %><%= indexed? %> +
<%= BlockScoutWeb.ABIEncodedValueView.value_html(type, value) %>
+
+
+ <% end %> <% _ -> %> <%= nil %> <% end %> diff --git a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex index 2ec350da71..8063b1db40 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/api/rpc/address_view.ex @@ -157,8 +157,7 @@ defmodule BlockScoutWeb.API.RPC.AddressView do defp prepare_block(block) do %{ "blockNumber" => to_string(block.number), - "timeStamp" => to_string(block.timestamp), - "blockReward" => to_string(block.reward.value) + "timeStamp" => to_string(block.timestamp) } end diff --git a/apps/block_scout_web/mix.exs b/apps/block_scout_web/mix.exs index e54907177f..de55cb0eb7 100644 --- a/apps/block_scout_web/mix.exs +++ b/apps/block_scout_web/mix.exs @@ -99,7 +99,7 @@ defmodule BlockScoutWeb.Mixfile do {:logger_file_backend, "~> 0.0.10"}, {:math, "~> 0.3.0"}, {:mock, "~> 0.3.0", only: [:test], runtime: false}, - {:phoenix, "~> 1.4"}, + {:phoenix, "== 1.4.0"}, {:phoenix_ecto, "~> 4.0"}, {:phoenix_html, "~> 2.10"}, {:phoenix_live_reload, "~> 1.2", only: [:dev]}, diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 886a88e4c0..c2c324f51e 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -23,7 +23,7 @@ msgid "%{block_type} Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:15 +#: lib/block_scout_web/templates/block/overview.html.eex:19 msgid "%{block_type} Height:" msgstr "" @@ -33,7 +33,7 @@ msgid "%{block_type}s" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:21 +#: lib/block_scout_web/templates/block/overview.html.eex:27 #: lib/block_scout_web/templates/chain/_block.html.eex:11 msgid "%{count} Transactions" msgstr "" @@ -98,7 +98,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:3 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 #: lib/block_scout_web/views/address_view.ex:99 msgid "Address" msgstr "" @@ -152,7 +152,7 @@ msgid "Block Confirmations" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:13 +#: lib/block_scout_web/templates/block/overview.html.eex:17 msgid "Block Height: %{height}" msgstr "" @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:58 +#: lib/block_scout_web/templates/block/overview.html.eex:70 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:105 -#: lib/block_scout_web/templates/block/overview.html.eex:152 +#: lib/block_scout_web/templates/block/overview.html.eex:117 +#: lib/block_scout_web/templates/block/overview.html.eex:171 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:98 -#: lib/block_scout_web/templates/block/overview.html.eex:146 +#: lib/block_scout_web/templates/block/overview.html.eex:110 +#: lib/block_scout_web/templates/block/overview.html.eex:165 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:45 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/block/overview.html.eex:133 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -558,11 +558,13 @@ msgid "Must be set to:" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:106 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 #: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:56 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:109 msgid "Name" msgstr "" @@ -572,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/block/overview.html.eex:85 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -606,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:45 +#: lib/block_scout_web/templates/block/overview.html.eex:55 msgid "Parent Hash" msgstr "" @@ -623,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:84 +#: lib/block_scout_web/templates/block/overview.html.eex:96 msgid "Position %{index}" msgstr "" @@ -836,22 +838,17 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:67 +#: lib/block_scout_web/templates/block/overview.html.eex:79 msgid "Total Difficulty" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 -msgid "Total Supply" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/chain/show.html.eex:56 msgid "Total transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 #: lib/block_scout_web/views/transaction_view.ex:262 msgid "Transaction" msgstr "" @@ -904,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/block/overview.html.eex:92 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1128,12 +1125,12 @@ msgid "Static Call" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:16 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:28 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:16 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:28 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:36 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:37 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:90 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:32 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:40 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:93 msgid "Decoded" msgstr "" @@ -1142,12 +1139,6 @@ msgstr "" msgid "Method Id" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 -msgid "To see decoded input data, the contract must be verified." -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 @@ -1155,16 +1146,16 @@ msgid "Transaction Inputs" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 msgid "Verify the contract " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 msgid "here" msgstr "" @@ -1283,7 +1274,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:139 +#: lib/block_scout_web/templates/block/overview.html.eex:155 msgid "Block Rewards" msgstr "" @@ -1318,7 +1309,9 @@ msgid "To have guaranteed accuracy, use the link above to verify the contract's msgstr "" #, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:6 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:6 msgid "To see accurate decoded input data, the contract must be verified." msgstr "" @@ -1393,7 +1386,7 @@ msgid "Copy Source Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:13 +#: lib/block_scout_web/templates/block/overview.html.eex:17 msgid "Genesis Block" msgstr "" @@ -1777,9 +1770,11 @@ msgid "Constructor Arguments" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:63 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:66 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:119 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:65 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:69 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:122 msgid "Copy Value" msgstr "" @@ -1789,29 +1784,35 @@ msgid "Create2" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:118 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:56 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:109 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:175 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:55 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:121 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:59 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:112 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:179 msgid "Data" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:35 msgid "Failed to decode log data." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:52 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:55 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:108 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:58 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:111 msgid "Indexed?" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:47 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:49 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:103 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:106 msgid "Log Data" msgstr "" @@ -1823,14 +1824,21 @@ msgid "Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:88 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:91 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:145 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:149 msgid "Topics" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:51 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:107 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:57 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:110 msgid "Type" msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" +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 8fd1e1ff2e..dd60e9394d 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 @@ -23,7 +23,7 @@ msgid "%{block_type} Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:15 +#: lib/block_scout_web/templates/block/overview.html.eex:19 msgid "%{block_type} Height:" msgstr "" @@ -33,7 +33,7 @@ msgid "%{block_type}s" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:21 +#: lib/block_scout_web/templates/block/overview.html.eex:27 #: lib/block_scout_web/templates/chain/_block.html.eex:11 msgid "%{count} Transactions" msgstr "" @@ -98,7 +98,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:3 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 #: lib/block_scout_web/views/address_view.ex:99 msgid "Address" msgstr "" @@ -152,7 +152,7 @@ msgid "Block Confirmations" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:13 +#: lib/block_scout_web/templates/block/overview.html.eex:17 msgid "Block Height: %{height}" msgstr "" @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:58 +#: lib/block_scout_web/templates/block/overview.html.eex:70 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:105 -#: lib/block_scout_web/templates/block/overview.html.eex:152 +#: lib/block_scout_web/templates/block/overview.html.eex:117 +#: lib/block_scout_web/templates/block/overview.html.eex:171 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:98 -#: lib/block_scout_web/templates/block/overview.html.eex:146 +#: lib/block_scout_web/templates/block/overview.html.eex:110 +#: lib/block_scout_web/templates/block/overview.html.eex:165 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:45 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/block/overview.html.eex:133 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -558,11 +558,13 @@ msgid "Must be set to:" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:106 #: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 #: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:52 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:56 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:109 msgid "Name" msgstr "" @@ -572,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/block/overview.html.eex:85 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -606,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:45 +#: lib/block_scout_web/templates/block/overview.html.eex:55 msgid "Parent Hash" msgstr "" @@ -623,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:84 +#: lib/block_scout_web/templates/block/overview.html.eex:96 msgid "Position %{index}" msgstr "" @@ -836,22 +838,17 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:67 +#: lib/block_scout_web/templates/block/overview.html.eex:79 msgid "Total Difficulty" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 -msgid "Total Supply" -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/chain/show.html.eex:56 msgid "Total transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:3 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 #: lib/block_scout_web/views/transaction_view.ex:262 msgid "Transaction" msgstr "" @@ -904,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/block/overview.html.eex:92 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1128,12 +1125,12 @@ msgid "Static Call" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:16 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:28 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:16 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:28 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:36 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:37 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:90 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:32 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:40 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:93 msgid "Decoded" msgstr "" @@ -1142,12 +1139,6 @@ msgstr "" msgid "Method Id" msgstr "" -#, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 -msgid "To see decoded input data, the contract must be verified." -msgstr "" - #, elixir-format #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 @@ -1155,16 +1146,16 @@ msgid "Transaction Inputs" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 msgid "Verify the contract " msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:22 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:22 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 msgid "here" msgstr "" @@ -1284,7 +1275,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:139 +#: lib/block_scout_web/templates/block/overview.html.eex:155 msgid "Block Rewards" msgstr "" @@ -1319,7 +1310,9 @@ msgid "To have guaranteed accuracy, use the link above to verify the contract's msgstr "" #, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:6 #: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:6 msgid "To see accurate decoded input data, the contract must be verified." msgstr "" @@ -1394,7 +1387,7 @@ msgid "Copy Source Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:13 +#: lib/block_scout_web/templates/block/overview.html.eex:17 msgid "Genesis Block" msgstr "" @@ -1778,9 +1771,11 @@ msgid "Constructor Arguments" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:63 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:66 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:119 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:65 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:69 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:122 msgid "Copy Value" msgstr "" @@ -1790,29 +1785,35 @@ msgid "Create2" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:118 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:56 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:109 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:175 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:55 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:121 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:59 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:112 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:179 msgid "Data" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:35 msgid "Failed to decode log data." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:52 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:55 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:108 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:58 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:111 msgid "Indexed?" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:47 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:49 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:103 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:106 msgid "Log Data" msgstr "" @@ -1824,14 +1825,21 @@ msgid "Reward" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:88 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:91 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:145 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:149 msgid "Topics" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/address_logs/_logs.html.eex:51 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:107 #: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 -#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:57 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:110 msgid "Type" msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" +msgstr "" diff --git a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs index 7e88d4717f..96716f0935 100644 --- a/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs +++ b/apps/block_scout_web/test/block_scout_web/controllers/api/rpc/address_controller_test.exs @@ -2266,7 +2266,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do end test "returns all the required fields", %{conn: conn} do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block = insert(:block, number: Enum.random(Range.new(range.from, range.to))) @@ -2274,17 +2274,10 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do |> insert(gas_price: 1) |> with_block(block, gas_used: 1) - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(1)) - |> Wei.from(:wei) - expected_result = [ %{ "blockNumber" => to_string(block.number), - "timeStamp" => to_string(block.timestamp), - "blockReward" => to_string(expected_reward.value) + "timeStamp" => to_string(block.timestamp) } ] @@ -2306,7 +2299,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do end test "with a block with one transaction", %{conn: conn} do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block = insert(:block, number: Enum.random(Range.new(range.from, range.to))) @@ -2314,12 +2307,6 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do |> insert(gas_price: 1) |> with_block(block, gas_used: 1) - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(1)) - |> Wei.from(:wei) - params = %{ "module" => "account", "action" => "getminedblocks", @@ -2329,8 +2316,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do expected_result = [ %{ "blockNumber" => to_string(block.number), - "timeStamp" => to_string(block.timestamp), - "blockReward" => to_string(expected_reward.value) + "timeStamp" => to_string(block.timestamp) } ] @@ -2346,7 +2332,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do end test "with pagination options", %{conn: conn} do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block_numbers = Range.new(range.from, range.to) @@ -2361,12 +2347,6 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do |> insert(gas_price: 2) |> with_block(block2, gas_used: 2) - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(4)) - |> Wei.from(:wei) - params = %{ "module" => "account", "action" => "getminedblocks", @@ -2380,8 +2360,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do expected_result = [ %{ "blockNumber" => to_string(block2.number), - "timeStamp" => to_string(block2.timestamp), - "blockReward" => to_string(expected_reward.value) + "timeStamp" => to_string(block2.timestamp) } ] @@ -2683,7 +2662,7 @@ defmodule BlockScoutWeb.API.RPC.AddressControllerTest do }) end - defp resolve_schema(result \\ %{}) do + defp resolve_schema(result) do %{ "type" => "object", "properties" => %{ diff --git a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/fetched_beneficiaries.ex b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/fetched_beneficiaries.ex index fea1a4c8aa..b2a90d53bc 100644 --- a/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/fetched_beneficiaries.ex +++ b/apps/ethereum_jsonrpc/lib/ethereum_jsonrpc/parity/fetched_beneficiaries.ex @@ -182,4 +182,5 @@ defmodule EthereumJSONRPC.Parity.FetchedBeneficiaries do defp get_address_type(reward_type, index) when reward_type == "external" and index == 10, do: :validator defp get_address_type(reward_type, _index) when reward_type == "block", do: :validator defp get_address_type(reward_type, _index) when reward_type == "uncle", do: :uncle + defp get_address_type(reward_type, _index) when reward_type == "emptyStep", do: :validator end diff --git a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/rolling_window_test.exs b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/rolling_window_test.exs index 43f400434a..5f8db2a821 100644 --- a/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/rolling_window_test.exs +++ b/apps/ethereum_jsonrpc/test/ethereum_jsonrpc/rolling_window_test.exs @@ -1,27 +1,8 @@ defmodule EthereumJSONRPC.RollingWindowTest do - use ExUnit.Case, - # The same named process is used for all tests and they use the same key in the table, so they would interfere - async: false + use ExUnit.Case, async: true alias EthereumJSONRPC.RollingWindow - @table :table - - setup do - # We set `window_length` to a large time frame so that we can sweep manually to simulate - # time passing - {:ok, pid} = - RollingWindow.start_link([table: @table, duration: :timer.minutes(120), window_count: 3], name: RollingWindow) - - on_exit(fn -> Process.exit(pid, :normal) end) - - :ok - end - - defp sweep do - GenServer.call(RollingWindow, :sweep) - end - test "start_link/2" do assert {:ok, _} = RollingWindow.start_link(table: :test_table, duration: 5, window_count: 1) end @@ -29,7 +10,7 @@ defmodule EthereumJSONRPC.RollingWindowTest do describe "init/1" do test "raises when duration isn't evenly divisble by window_count" do assert_raise ArgumentError, ~r"evenly divisible", fn -> - RollingWindow.init(table: @table, duration: :timer.seconds(2), window_count: 3) + RollingWindow.init(table: :init_test_table, duration: :timer.seconds(2), window_count: 3) end end @@ -40,61 +21,85 @@ defmodule EthereumJSONRPC.RollingWindowTest do end test "when no increments have happened, inspect returns an empty list" do - assert RollingWindow.inspect(@table, :foobar) == [] + table = :no_increments_have_happened + start_rolling_window(table) + + assert RollingWindow.inspect(table, :foobar) == [] end test "when no increments have happened, count returns 0" do - assert RollingWindow.count(@table, :foobar) == 0 + table = :no_increments_have_happened_empty_list + start_rolling_window(table) + + assert RollingWindow.count(table, :foobar) == 0 end test "when an increment has happened, inspect returns the count for that window" do - RollingWindow.inc(@table, :foobar) + table = :no_increments_have_happened_count + start_rolling_window(table) - assert RollingWindow.inspect(@table, :foobar) == [1] + RollingWindow.inc(table, :foobar) + + assert RollingWindow.inspect(table, :foobar) == [1] end test "when an increment has happened, count returns the count for that window" do - RollingWindow.inc(@table, :foobar) + table = :no_increments_have_happened_count1 + start_rolling_window(table) + + RollingWindow.inc(table, :foobar) - assert RollingWindow.count(@table, :foobar) == 1 + assert RollingWindow.count(table, :foobar) == 1 end test "when an increment has happened in multiple windows, inspect returns the count for both windows" do - RollingWindow.inc(@table, :foobar) - sweep() - RollingWindow.inc(@table, :foobar) + table = :no_increments_have_happened_multiple_windows + start_rolling_window(table) - assert RollingWindow.inspect(@table, :foobar) == [1, 1] + RollingWindow.inc(table, :foobar) + sweep(table) + RollingWindow.inc(table, :foobar) + + assert RollingWindow.inspect(table, :foobar) == [1, 1] end test "when an increment has happened in multiple windows, count returns the sum of both windows" do - RollingWindow.inc(@table, :foobar) - sweep() - RollingWindow.inc(@table, :foobar) + table = :no_increments_have_happened_multiple_windows1 + start_rolling_window(table) + + RollingWindow.inc(table, :foobar) + sweep(table) + RollingWindow.inc(table, :foobar) - assert RollingWindow.count(@table, :foobar) == 2 + assert RollingWindow.count(table, :foobar) == 2 end test "when an increment has happened, but has been swept times, it no longer appears in inspect" do - RollingWindow.inc(@table, :foobar) - sweep() - sweep() - RollingWindow.inc(@table, :foobar) - sweep() - RollingWindow.inc(@table, :foobar) - - assert RollingWindow.inspect(@table, :foobar) == [1, 1, 0] + table = :no_increments_have_happened_multiple_windows3 + start_rolling_window(table) + + RollingWindow.inc(table, :foobar) + sweep(table) + sweep(table) + RollingWindow.inc(table, :foobar) + sweep(table) + RollingWindow.inc(table, :foobar) + + assert RollingWindow.inspect(table, :foobar) == [1, 1, 0] end test "when an increment has happened, but has been swept times, it no longer is included in count" do - RollingWindow.inc(@table, :foobar) - sweep() - sweep() - RollingWindow.inc(@table, :foobar) - sweep() - RollingWindow.inc(@table, :foobar) - - assert RollingWindow.count(@table, :foobar) == 2 + table = :no_increments_have_happened_multiple_windows4 + start_rolling_window(table) + + RollingWindow.inc(table, :foobar) + sweep(table) + sweep(table) + RollingWindow.inc(table, :foobar) + sweep(table) + RollingWindow.inc(table, :foobar) + + assert RollingWindow.count(table, :foobar) == 2 end test "sweeping schedules another sweep" do @@ -102,4 +107,13 @@ defmodule EthereumJSONRPC.RollingWindowTest do RollingWindow.handle_info(:sweep, state) assert_receive(:sweep) end + + defp start_rolling_window(table_name) do + {:ok, _pid} = + RollingWindow.start_link([table: table_name, duration: :timer.minutes(120), window_count: 3], name: table_name) + end + + defp sweep(name) do + GenServer.call(name, :sweep) + end end diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 95c80ba445..93298073e0 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -27,7 +27,7 @@ config :explorer, Explorer.Counters.AverageBlockTime, enabled: true, period: average_block_period -config :explorer, Explorer.ChainSpec.GenesisData, enabled: true, chain_spec_path: System.get_env("CHAIN_SPEC_PATH") +config :explorer, Explorer.ChainSpec.GenesisData, enabled: false, chain_spec_path: System.get_env("CHAIN_SPEC_PATH") config :explorer, Explorer.Chain.Cache.BlockNumber, enabled: true diff --git a/apps/explorer/lib/explorer/chain.ex b/apps/explorer/lib/explorer/chain.ex index 58253c0f27..b2c18e8a50 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -2967,6 +2967,13 @@ defmodule Explorer.Chain do |> CoinBalance.fetch_coin_balances(paging_options) |> page_coin_balances(paging_options) |> Repo.all() + |> Enum.dedup_by(fn record -> + if record.delta == Decimal.new(0) do + :dup + else + System.unique_integer() + end + end) end def get_coin_balance(address_hash, block_number) do diff --git a/apps/explorer/lib/explorer/chain/log.ex b/apps/explorer/lib/explorer/chain/log.ex index b6c5c00a2d..7916b56fb3 100644 --- a/apps/explorer/lib/explorer/chain/log.ex +++ b/apps/explorer/lib/explorer/chain/log.ex @@ -6,7 +6,8 @@ defmodule Explorer.Chain.Log do require Logger alias ABI.{Event, FunctionSelector} - alias Explorer.Chain.{Address, Data, Hash, Transaction} + alias Explorer.Chain.{Address, ContractMethod, Data, Hash, Transaction} + alias Explorer.Repo @required_attrs ~w(address_hash data index transaction_hash)a @optional_attrs ~w(first_topic second_topic third_topic fourth_topic type)a @@ -114,7 +115,50 @@ defmodule Explorer.Chain.Log do do: {:ok, identifier, text, mapping} end - def decode(_log, _transaction), do: {:error, :contract_not_verified} + def decode(log, transaction) do + case log.first_topic do + "0x" <> hex_part -> + case Integer.parse(hex_part, 16) do + {number, ""} -> + <> = :binary.encode_unsigned(number) + find_candidates(method_id, log, transaction) + + _ -> + {:error, :could_not_decode} + end + + _ -> + {:error, :could_not_decode} + end + end + + defp find_candidates(method_id, log, transaction) do + candidates_query = + from( + contract_method in ContractMethod, + where: contract_method.identifier == ^method_id, + limit: 3 + ) + + candidates = + candidates_query + |> Repo.all() + |> Enum.flat_map(fn contract_method -> + case find_and_decode([contract_method.abi], log, transaction) do + {:ok, selector, mapping} -> + identifier = Base.encode16(selector.method_id, case: :lower) + text = function_call(selector.function, mapping) + + [{:ok, identifier, text, mapping}] + + _ -> + [] + end + end) + |> Enum.take(1) + + {:error, :contract_not_verified, candidates} + end defp find_and_decode(abi, log, transaction) do with {%FunctionSelector{} = selector, mapping} <- diff --git a/apps/explorer/lib/explorer/chain/token_transfer.ex b/apps/explorer/lib/explorer/chain/token_transfer.ex index 2aa291cb6f..619de87db2 100644 --- a/apps/explorer/lib/explorer/chain/token_transfer.ex +++ b/apps/explorer/lib/explorer/chain/token_transfer.ex @@ -27,7 +27,7 @@ defmodule Explorer.Chain.TokenTransfer do import Ecto.Changeset import Ecto.Query, only: [from: 2, limit: 2, where: 3] - alias Explorer.Chain.{Address, Hash, Token, TokenTransfer, Transaction} + alias Explorer.Chain.{Address, Hash, TokenTransfer, Transaction} alias Explorer.{PagingOptions, Repo} @default_paging_options %PagingOptions{page_size: 50} @@ -238,12 +238,8 @@ defmodule Explorer.Chain.TokenTransfer do def address_to_unique_tokens(contract_address_hash) do from( tt in TokenTransfer, - join: t in Token, - on: tt.token_contract_address_hash == t.contract_address_hash, - join: ts in Transaction, - on: tt.transaction_hash == ts.hash, - where: t.contract_address_hash == ^contract_address_hash and t.type == "ERC-721", - order_by: [desc: ts.block_number], + where: tt.token_contract_address_hash == ^contract_address_hash, + order_by: [desc: tt.block_number], distinct: tt.token_id, preload: [:to_address], select: tt diff --git a/apps/explorer/lib/explorer/chain_spec/genesis_data.ex b/apps/explorer/lib/explorer/chain_spec/genesis_data.ex index a156aae6d7..690be2eb19 100644 --- a/apps/explorer/lib/explorer/chain_spec/genesis_data.ex +++ b/apps/explorer/lib/explorer/chain_spec/genesis_data.ex @@ -18,7 +18,6 @@ defmodule Explorer.ChainSpec.GenesisData do @impl GenServer def init(_) do - :timer.send_interval(@interval, :import) Process.send_after(self(), :import, @interval) {:ok, %{}} diff --git a/apps/explorer/lib/explorer/etherscan.ex b/apps/explorer/lib/explorer/etherscan.ex index ca31cc5c3c..848f5ae620 100644 --- a/apps/explorer/lib/explorer/etherscan.ex +++ b/apps/explorer/lib/explorer/etherscan.ex @@ -8,8 +8,7 @@ defmodule Explorer.Etherscan do alias Explorer.Etherscan.Logs alias Explorer.{Chain, Repo} alias Explorer.Chain.Address.TokenBalance - alias Explorer.Chain.{Block, Hash, InternalTransaction, Transaction, Wei} - alias Explorer.Chain.Block.EmissionReward + alias Explorer.Chain.{Block, Hash, InternalTransaction, Transaction} @default_options %{ order_by_direction: :asc, @@ -187,22 +186,15 @@ defmodule Explorer.Etherscan do query = from( b in Block, - left_join: t in assoc(b, :transactions), - inner_join: r in EmissionReward, - on: fragment("? <@ ?", b.number, r.block_range), where: b.miner_hash == ^address_hash, order_by: [desc: b.number], group_by: b.number, group_by: b.timestamp, - group_by: r.reward, limit: ^merged_options.page_size, offset: ^offset(merged_options), select: %{ number: b.number, - timestamp: b.timestamp, - reward: %Wei{ - value: fragment("coalesce(sum(? * ?), 0) + ?", t.gas_used, t.gas_price, r.reward) - } + timestamp: b.timestamp } ) diff --git a/apps/explorer/lib/explorer/smart_contract/verifier.ex b/apps/explorer/lib/explorer/smart_contract/verifier.ex index 7aa9957bab..4c2daa680c 100644 --- a/apps/explorer/lib/explorer/smart_contract/verifier.ex +++ b/apps/explorer/lib/explorer/smart_contract/verifier.ex @@ -115,6 +115,14 @@ defmodule Explorer.SmartContract.Verifier do |> Enum.reverse() |> :binary.list_to_bin() + # Solidity >= 0.5.11 https://github.com/ethereum/solidity/blob/develop/Changelog.md#0511-2019-08-12 + # Metadata: Update the swarm hash to the current specification, changes bzzr0 to bzzr1 and urls to use bzz-raw:// + "a265627a7a72315820" <> + <<_::binary-size(64)>> <> "64736f6c6343" <> <<_::binary-size(6)>> <> "0032" <> _constructor_arguments -> + extracted + |> Enum.reverse() + |> :binary.list_to_bin() + <> <> rest -> do_extract_bytecode([next | extracted], rest) end diff --git a/apps/explorer/lib/explorer/smart_contract/verifier/constructor_arguments.ex b/apps/explorer/lib/explorer/smart_contract/verifier/constructor_arguments.ex index 61167a4559..6e25b3cc52 100644 --- a/apps/explorer/lib/explorer/smart_contract/verifier/constructor_arguments.ex +++ b/apps/explorer/lib/explorer/smart_contract/verifier/constructor_arguments.ex @@ -48,6 +48,16 @@ defmodule Explorer.SmartContract.Verifier.ConstructorArguments do extract_constructor_arguments(constructor_arguments, passed_constructor_arguments) end + # Solidity >= 0.5.11 https://github.com/ethereum/solidity/blob/develop/Changelog.md#0511-2019-08-12 + # Metadata: Update the swarm hash to the current specification, changes bzzr0 to bzzr1 and urls to use bzz-raw:// + "a265627a7a72315820" <> + <<_::binary-size(64)>> <> "64736f6c6343" <> <<_::binary-size(6)>> <> "0032" <> constructor_arguments -> + if passed_constructor_arguments == constructor_arguments do + true + else + extract_constructor_arguments(constructor_arguments, passed_constructor_arguments) + end + <<>> -> passed_constructor_arguments == "" diff --git a/apps/explorer/priv/repo/migrations/20190827120224_add_index_on_token_transfer_token_id.exs b/apps/explorer/priv/repo/migrations/20190827120224_add_index_on_token_transfer_token_id.exs new file mode 100644 index 0000000000..b92f216fd4 --- /dev/null +++ b/apps/explorer/priv/repo/migrations/20190827120224_add_index_on_token_transfer_token_id.exs @@ -0,0 +1,7 @@ +defmodule Explorer.Repo.Migrations.AddIndexOnTokenTransferTokenId do + use Ecto.Migration + + def change do + create_if_not_exists(index(:token_transfers, [:token_id])) + end +end diff --git a/apps/explorer/test/explorer/chain/log_test.exs b/apps/explorer/test/explorer/chain/log_test.exs index 28be44a1af..e4ce0695bc 100644 --- a/apps/explorer/test/explorer/chain/log_test.exs +++ b/apps/explorer/test/explorer/chain/log_test.exs @@ -2,7 +2,8 @@ defmodule Explorer.Chain.LogTest do use Explorer.DataCase alias Ecto.Changeset - alias Explorer.Chain.Log + alias Explorer.Chain.{Log, SmartContract} + alias Explorer.Repo doctest Log @@ -47,7 +48,7 @@ defmodule Explorer.Chain.LogTest do log = insert(:log, transaction: transaction) - assert Log.decode(log, transaction) == {:error, :contract_not_verified} + assert Log.decode(log, transaction) == {:error, :could_not_decode} end test "that a contract call transaction that has a verified contract returns the decoded input data" do @@ -100,5 +101,59 @@ defmodule Explorer.Chain.LogTest do {"_belly", "bool", true, true} ]} end + + test "finds decoding candidates" do + params = + params_for(:smart_contract, %{ + abi: [ + %{ + "anonymous" => false, + "inputs" => [ + %{"indexed" => true, "name" => "_from_human", "type" => "string"}, + %{"indexed" => false, "name" => "_number", "type" => "uint256"}, + %{"indexed" => true, "name" => "_belly", "type" => "bool"} + ], + "name" => "WantsPets", + "type" => "event" + } + ] + }) + + # changeset has a callback to insert contract methods + %SmartContract{} + |> SmartContract.changeset(params) + |> Repo.insert!() + + topic1 = "0x" <> Base.encode16(:keccakf1600.hash(:sha3_256, "WantsPets(string,uint256,bool)"), case: :lower) + topic2 = "0x" <> Base.encode16(:keccakf1600.hash(:sha3_256, "bob"), case: :lower) + topic3 = "0x0000000000000000000000000000000000000000000000000000000000000001" + data = "0x0000000000000000000000000000000000000000000000000000000000000000" + + transaction = insert(:transaction) + + log = + insert(:log, + transaction: transaction, + first_topic: topic1, + second_topic: topic2, + third_topic: topic3, + fourth_topic: nil, + data: data + ) + + assert Log.decode(log, transaction) == + {:error, :contract_not_verified, + [ + {:ok, "eb9b3c4c", "WantsPets(string indexed _from_human, uint256 _number, bool indexed _belly)", + [ + {"_from_human", "string", true, + {:dynamic, + <<56, 228, 122, 123, 113, 157, 206, 99, 102, 42, 234, 244, 52, 64, 50, 111, 85, 27, 138, 126, + 225, 152, 206, 227, 92, 181, 213, 23, 242, 210, 150, 162>>}}, + {"_number", "uint256", false, 0}, + {"_belly", "bool", true, true} + ]} + ]} + end end end diff --git a/apps/explorer/test/explorer/chain/token_transfer_test.exs b/apps/explorer/test/explorer/chain/token_transfer_test.exs index 5d9608e66b..b388fafcbe 100644 --- a/apps/explorer/test/explorer/chain/token_transfer_test.exs +++ b/apps/explorer/test/explorer/chain/token_transfer_test.exs @@ -188,31 +188,6 @@ defmodule Explorer.Chain.TokenTransferTest do assert Enum.map(results, & &1.token_id) == [last_owner.token_id] assert Enum.map(results, & &1.to_address_hash) == [last_owner.to_address_hash] end - - test "won't return tokens that aren't uniques" do - token_contract_address = insert(:contract_address) - token = insert(:token, contract_address: token_contract_address, type: "ERC-20") - - transaction = - :transaction - |> insert() - |> with_block(insert(:block, number: 1)) - - insert( - :token_transfer, - to_address: build(:address), - transaction: transaction, - token_contract_address: token_contract_address, - token: token - ) - - results = - token_contract_address.hash - |> TokenTransfer.address_to_unique_tokens() - |> Repo.all() - - assert results == [] - end end describe "where_any_address_fields_match/3" do diff --git a/apps/explorer/test/explorer/chain_test.exs b/apps/explorer/test/explorer/chain_test.exs index f49be6da4e..10788b60ba 100644 --- a/apps/explorer/test/explorer/chain_test.exs +++ b/apps/explorer/test/explorer/chain_test.exs @@ -4159,4 +4159,30 @@ defmodule Explorer.ChainTest do assert Chain.staking_pools_count(:inactive) == 1 end end + + describe "address_to_coin_balances/2" do + test "deduplicates records by zero delta" do + address = insert(:address) + + 1..5 + |> Enum.each(fn block_number -> + insert(:block, number: block_number) + insert(:fetched_balance, value: 1, block_number: block_number, address_hash: address.hash) + end) + + insert(:block, number: 6) + insert(:fetched_balance, value: 2, block_number: 6, address_hash: address.hash) + + assert [first, second, third] = Chain.address_to_coin_balances(address.hash, []) + + assert first.block_number == 6 + assert first.delta == Decimal.new(1) + + assert second.block_number == 5 + assert second.delta == Decimal.new(0) + + assert third.block_number == 1 + assert third.delta == Decimal.new(1) + end + end end diff --git a/apps/explorer/test/explorer/etherscan_test.exs b/apps/explorer/test/explorer/etherscan_test.exs index 420dd3e7d2..ded7f2cc30 100644 --- a/apps/explorer/test/explorer/etherscan_test.exs +++ b/apps/explorer/test/explorer/etherscan_test.exs @@ -4,7 +4,7 @@ defmodule Explorer.EtherscanTest do import Explorer.Factory alias Explorer.{Etherscan, Chain} - alias Explorer.Chain.{Transaction, Wei} + alias Explorer.Chain.Transaction describe "list_transactions/2" do test "with empty db" do @@ -1170,7 +1170,7 @@ defmodule Explorer.EtherscanTest do describe "list_blocks/1" do test "it returns all required fields" do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block = insert(:block, number: Enum.random(Range.new(range.from, range.to))) @@ -1181,17 +1181,10 @@ defmodule Explorer.EtherscanTest do |> insert(gas_price: 1) |> with_block(block, gas_used: 1) - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(1)) - |> Wei.from(:wei) - expected = [ %{ number: block.number, - timestamp: block.timestamp, - reward: expected_reward + timestamp: block.timestamp } ] @@ -1199,32 +1192,14 @@ defmodule Explorer.EtherscanTest do end test "with block containing multiple transactions" do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block = insert(:block, number: Enum.random(Range.new(range.from, range.to))) - # irrelevant transaction - insert(:transaction) - - :transaction - |> insert(gas_price: 1) - |> with_block(block, gas_used: 1) - - :transaction - |> insert(gas_price: 1) - |> with_block(block, gas_used: 2) - - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(3)) - |> Wei.from(:wei) - expected = [ %{ number: block.number, - timestamp: block.timestamp, - reward: expected_reward + timestamp: block.timestamp } ] @@ -1232,7 +1207,7 @@ defmodule Explorer.EtherscanTest do end test "with block without transactions" do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block = insert(:block, number: Enum.random(Range.new(range.from, range.to))) @@ -1242,8 +1217,7 @@ defmodule Explorer.EtherscanTest do expected = [ %{ number: block.number, - timestamp: block.timestamp, - reward: emission_reward.reward + timestamp: block.timestamp } ] @@ -1251,7 +1225,7 @@ defmodule Explorer.EtherscanTest do end test "with multiple blocks" do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block_numbers = Range.new(range.from, range.to) @@ -1262,47 +1236,14 @@ defmodule Explorer.EtherscanTest do block1 = insert(:block, number: block_number1, miner: address) block2 = insert(:block, number: block_number2, miner: address) - # irrelevant transaction - insert(:transaction) - - :transaction - |> insert(gas_price: 2) - |> with_block(block1, gas_used: 2) - - :transaction - |> insert(gas_price: 2) - |> with_block(block1, gas_used: 2) - - :transaction - |> insert(gas_price: 3) - |> with_block(block2, gas_used: 3) - - :transaction - |> insert(gas_price: 3) - |> with_block(block2, gas_used: 3) - - expected_reward_block1 = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(8)) - |> Wei.from(:wei) - - expected_reward_block2 = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(18)) - |> Wei.from(:wei) - expected = [ %{ number: block2.number, - timestamp: block2.timestamp, - reward: expected_reward_block2 + timestamp: block2.timestamp }, %{ number: block1.number, - timestamp: block1.timestamp, - reward: expected_reward_block1 + timestamp: block1.timestamp } ] @@ -1310,7 +1251,7 @@ defmodule Explorer.EtherscanTest do end test "with pagination options" do - %{block_range: range} = emission_reward = insert(:emission_reward) + %{block_range: range} = insert(:emission_reward) block_numbers = Range.new(range.from, range.to) @@ -1321,29 +1262,17 @@ defmodule Explorer.EtherscanTest do block1 = insert(:block, number: block_number1, miner: address) block2 = insert(:block, number: block_number2, miner: address) - :transaction - |> insert(gas_price: 2) - |> with_block(block1, gas_used: 2) - - expected_reward = - emission_reward.reward - |> Wei.to(:wei) - |> Decimal.add(Decimal.new(4)) - |> Wei.from(:wei) - expected1 = [ %{ number: block2.number, - timestamp: block2.timestamp, - reward: emission_reward.reward + timestamp: block2.timestamp } ] expected2 = [ %{ number: block1.number, - timestamp: block1.timestamp, - reward: expected_reward + timestamp: block1.timestamp } ] diff --git a/apps/explorer/test/explorer/smart_contract/verifier_test.exs b/apps/explorer/test/explorer/smart_contract/verifier_test.exs index 9633804c60..fba0622964 100644 --- a/apps/explorer/test/explorer/smart_contract/verifier_test.exs +++ b/apps/explorer/test/explorer/smart_contract/verifier_test.exs @@ -56,6 +56,33 @@ defmodule Explorer.SmartContract.VerifierTest do assert abi != nil end + test "verifies smart contract with new `whisper` metadata (bzz0 => bzz1) in solidity 0.5.11" do + contract_data = + "#{File.cwd!()}/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json" + |> File.read!() + |> Jason.decode!() + + compiler_version = contract_data["compiler_version"] + name = contract_data["name"] + optimize = false + contract = contract_data["contract"] + expected_bytecode = contract_data["bytecode"] + evm_version = contract_data["evm_version"] + + contract_address = insert(:contract_address, contract_code: "0x" <> expected_bytecode) + + params = %{ + "contract_source_code" => contract, + "compiler_version" => compiler_version, + "evm_version" => evm_version, + "name" => name, + "optimization" => optimize + } + + assert {:ok, %{abi: abi}} = Verifier.evaluate_authenticity(contract_address.hash, params) + assert abi != nil + end + test "verifies smart contract with constructor arguments", %{ contract_code_info: contract_code_info } do diff --git a/apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json b/apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json new file mode 100644 index 0000000000..bd0301ef78 --- /dev/null +++ b/apps/explorer/test/support/fixture/smart_contract/solidity_5.11_new_whisper_metadata.json @@ -0,0 +1,7 @@ +{ + "bytecode": "608060405260043610610105576000357c0100000000000000000000000000000000000000000000000000000000900480638da5cb5b116100a7578063d4ee1d9011610076578063d4ee1d90146105dc578063dc39d06d14610633578063dd62ed3e146106a6578063f2fde38b1461072b57610105565b80638da5cb5b1461037857806395d89b41146103cf578063a9059cbb1461045f578063cae9ca51146104d257610105565b806323b872dd116100e357806323b872dd14610238578063313ce567146102cb57806370a08231146102fc57806379ba50971461036157610105565b806306fdde031461010a578063095ea7b31461019a57806318160ddd1461020d575b600080fd5b34801561011657600080fd5b5061011f61077c565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561015f578082015181840152602081019050610144565b50505050905090810190601f16801561018c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156101a657600080fd5b506101f3600480360360408110156101bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061081a565b604051808215151515815260200191505060405180910390f35b34801561021957600080fd5b5061022261090c565b6040518082815260200191505060405180910390f35b34801561024457600080fd5b506102b16004803603606081101561025b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610967565b604051808215151515815260200191505060405180910390f35b3480156102d757600080fd5b506102e0610c12565b604051808260ff1660ff16815260200191505060405180910390f35b34801561030857600080fd5b5061034b6004803603602081101561031f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c25565b6040518082815260200191505060405180910390f35b34801561036d57600080fd5b50610376610c6e565b005b34801561038457600080fd5b5061038d610e0b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103db57600080fd5b506103e4610e30565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610424578082015181840152602081019050610409565b50505050905090810190601f1680156104515780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561046b57600080fd5b506104b86004803603604081101561048257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610ece565b604051808215151515815260200191505060405180910390f35b3480156104de57600080fd5b506105c2600480360360608110156104f557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561053c57600080fd5b82018360208201111561054e57600080fd5b8035906020019184600183028401116401000000008311171561057057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611069565b604051808215151515815260200191505060405180910390f35b3480156105e857600080fd5b506105f16112b8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561063f57600080fd5b5061068c6004803603604081101561065657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112de565b604051808215151515815260200191505060405180910390f35b3480156106b257600080fd5b50610715600480360360408110156106c957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611440565b6040518082815260200191505060405180910390f35b34801561073757600080fd5b5061077a6004803603602081101561074e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114c7565b005b60038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156108125780601f106107e757610100808354040283529160200191610812565b820191906000526020600020905b8154815290600101906020018083116107f557829003601f168201915b505050505081565b600081600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b6000610962600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460055461156490919063ffffffff16565b905090565b60006109bb82600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461156490919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610a8d82600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461156490919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610b5f82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461157e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b600460009054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cc857600080fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60028054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610ec65780601f10610e9b57610100808354040283529160200191610ec6565b820191906000526020600020905b815481529060010190602001808311610ea957829003601f168201915b505050505081565b6000610f2282600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461156490919063ffffffff16565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610fb782600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461157e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600082600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925856040518082815260200191505060405180910390a38373ffffffffffffffffffffffffffffffffffffffff16638f4ffcb1338530866040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561124657808201518184015260208101905061122b565b50505050905090810190601f1680156112735780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561129557600080fd5b505af11580156112a9573d6000803e3d6000fd5b50505050600190509392505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133957600080fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156113fd57600080fd5b505af1158015611411573d6000803e3d6000fd5b505050506040513d602081101561142757600080fd5b8101908080519060200190929190505050905092915050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461152057600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008282111561157357600080fd5b818303905092915050565b600081830190508281101561159257600080fd5b9291505056fea265627a7a7231582073fbadbc806cc1f3349b3f98d58b62f7fa417e82d98f41bafd3dd9f9be4e4fa764736f6c634300050b0032", + "compiler_version": "v0.5.11+commit.c082d0b4", + "contract": "/**\r\n *Submitted for verification at Etherscan.io on 2019-08-16\r\n*/\r\n\r\npragma solidity ^0.5.0;\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// 'FIXED' 'Example Fixed Supply Token' token contract\r\n\r\n//\r\n\r\n// Symbol : FIXED\r\n\r\n// Name : Example Fixed Supply Token\r\n\r\n// Total supply: 1,000,000.000000000000000000\r\n\r\n// Decimals : 18\r\n\r\n//\r\n\r\n// Enjoy.\r\n\r\n//\r\n\r\n// (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence.\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// Safe maths\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\nlibrary SafeMath {\r\n\r\n function add(uint a, uint b) internal pure returns (uint c) {\r\n\r\n c = a + b;\r\n\r\n require(c >= a);\r\n\r\n }\r\n\r\n function sub(uint a, uint b) internal pure returns (uint c) {\r\n\r\n require(b <= a);\r\n\r\n c = a - b;\r\n\r\n }\r\n\r\n function mul(uint a, uint b) internal pure returns (uint c) {\r\n\r\n c = a * b;\r\n\r\n require(a == 0 || c / a == b);\r\n\r\n }\r\n\r\n function div(uint a, uint b) internal pure returns (uint c) {\r\n\r\n require(b > 0);\r\n\r\n c = a / b;\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// ERC Token Standard #20 Interface\r\n\r\n// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\ncontract ERC20Interface {\r\n\r\n function totalSupply() public view returns (uint);\r\n\r\n function balanceOf(address tokenOwner) public view returns (uint balance);\r\n\r\n function allowance(address tokenOwner, address spender) public view returns (uint remaining);\r\n\r\n function transfer(address to, uint tokens) public returns (bool success);\r\n\r\n function approve(address spender, uint tokens) public returns (bool success);\r\n\r\n function transferFrom(address from, address to, uint tokens) public returns (bool success);\r\n\r\n\r\n event Transfer(address indexed from, address indexed to, uint tokens);\r\n\r\n event Approval(address indexed tokenOwner, address indexed spender, uint tokens);\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// Contract function to receive approval and execute function in one call\r\n\r\n//\r\n\r\n// Borrowed from MiniMeToken\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\ncontract ApproveAndCallFallBack {\r\n\r\n function receiveApproval(address from, uint256 tokens, address token, bytes memory data) public;\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// Owned contract\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\ncontract Owned {\r\n\r\n address public owner;\r\n\r\n address public newOwner;\r\n\r\n\r\n event OwnershipTransferred(address indexed _from, address indexed _to);\r\n\r\n\r\n constructor() public {\r\n\r\n owner = msg.sender;\r\n\r\n }\r\n\r\n\r\n modifier onlyOwner {\r\n\r\n require(msg.sender == owner);\r\n\r\n _;\r\n\r\n }\r\n\r\n\r\n function transferOwnership(address _newOwner) public onlyOwner {\r\n\r\n newOwner = _newOwner;\r\n\r\n }\r\n\r\n function acceptOwnership() public {\r\n\r\n require(msg.sender == newOwner);\r\n\r\n emit OwnershipTransferred(owner, newOwner);\r\n\r\n owner = newOwner;\r\n\r\n newOwner = address(0);\r\n\r\n }\r\n\r\n}\r\n\r\n\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\n// ERC20 Token, with the addition of symbol, name and decimals and a\r\n\r\n// fixed supply\r\n\r\n// ----------------------------------------------------------------------------\r\n\r\ncontract FixedSupplyToken is ERC20Interface, Owned {\r\n\r\n using SafeMath for uint;\r\n\r\n\r\n string public symbol;\r\n\r\n string public name;\r\n\r\n uint8 public decimals;\r\n\r\n uint _totalSupply;\r\n\r\n\r\n mapping(address => uint) balances;\r\n\r\n mapping(address => mapping(address => uint)) allowed;\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Constructor\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n constructor() public {\r\n\r\n symbol = \"TEST\";\r\n\r\n name = \"Test Token\";\r\n\r\n decimals = 18;\r\n\r\n _totalSupply = 1000000 * 10**uint(decimals);\r\n\r\n balances[owner] = _totalSupply;\r\n\r\n emit Transfer(address(0), owner, _totalSupply);\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Total supply\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function totalSupply() public view returns (uint) {\r\n\r\n return _totalSupply.sub(balances[address(0)]);\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Get the token balance for account `tokenOwner`\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function balanceOf(address tokenOwner) public view returns (uint balance) {\r\n\r\n return balances[tokenOwner];\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Transfer the balance from token owner's account to `to` account\r\n\r\n // - Owner's account must have sufficient balance to transfer\r\n\r\n // - 0 value transfers are allowed\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function transfer(address to, uint tokens) public returns (bool success) {\r\n\r\n balances[msg.sender] = balances[msg.sender].sub(tokens);\r\n\r\n balances[to] = balances[to].add(tokens);\r\n\r\n emit Transfer(msg.sender, to, tokens);\r\n\r\n return true;\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Token owner can approve for `spender` to transferFrom(...) `tokens`\r\n\r\n // from the token owner's account\r\n\r\n //\r\n\r\n // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md\r\n\r\n // recommends that there are no checks for the approval double-spend attack\r\n\r\n // as this should be implemented in user interfaces\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function approve(address spender, uint tokens) public returns (bool success) {\r\n\r\n allowed[msg.sender][spender] = tokens;\r\n\r\n emit Approval(msg.sender, spender, tokens);\r\n\r\n return true;\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Transfer `tokens` from the `from` account to the `to` account\r\n\r\n //\r\n\r\n // The calling account must already have sufficient tokens approve(...)-d\r\n\r\n // for spending from the `from` account and\r\n\r\n // - From account must have sufficient balance to transfer\r\n\r\n // - Spender must have sufficient allowance to transfer\r\n\r\n // - 0 value transfers are allowed\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function transferFrom(address from, address to, uint tokens) public returns (bool success) {\r\n\r\n balances[from] = balances[from].sub(tokens);\r\n\r\n allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens);\r\n\r\n balances[to] = balances[to].add(tokens);\r\n\r\n emit Transfer(from, to, tokens);\r\n\r\n return true;\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Returns the amount of tokens approved by the owner that can be\r\n\r\n // transferred to the spender's account\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function allowance(address tokenOwner, address spender) public view returns (uint remaining) {\r\n\r\n return allowed[tokenOwner][spender];\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Token owner can approve for `spender` to transferFrom(...) `tokens`\r\n\r\n // from the token owner's account. The `spender` contract function\r\n\r\n // `receiveApproval(...)` is then executed\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function approveAndCall(address spender, uint tokens, bytes memory data) public returns (bool success) {\r\n\r\n allowed[msg.sender][spender] = tokens;\r\n\r\n emit Approval(msg.sender, spender, tokens);\r\n\r\n ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data);\r\n\r\n return true;\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Don't accept ETH\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function () external payable {\r\n\r\n revert();\r\n\r\n }\r\n\r\n\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n // Owner can transfer out any accidentally sent ERC20 tokens\r\n\r\n // ------------------------------------------------------------------------\r\n\r\n function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) {\r\n\r\n return ERC20Interface(tokenAddress).transfer(owner, tokens);\r\n\r\n }\r\n\r\n}", + "name": "FixedSupplyToken", + "evm_version": "byzantium" +} diff --git a/apps/indexer/lib/indexer/block/fetcher.ex b/apps/indexer/lib/indexer/block/fetcher.ex index 6a4eb3661b..a8b28d1391 100644 --- a/apps/indexer/lib/indexer/block/fetcher.ex +++ b/apps/indexer/lib/indexer/block/fetcher.ex @@ -183,7 +183,7 @@ defmodule Indexer.Block.Fetcher do end end - defp update_block_cache(blocks) do + defp update_block_cache(blocks) when is_list(blocks) do max_block = Enum.max_by(blocks, fn block -> block.number end) min_block = Enum.min_by(blocks, fn block -> block.number end) @@ -192,6 +192,8 @@ defmodule Indexer.Block.Fetcher do BlocksCache.update(blocks) end + defp update_block_cache(_), do: :ok + defp update_transactions_cache(transactions) do Transactions.update(transactions) end diff --git a/docs/env-variables.md b/docs/env-variables.md index 60c9eee442..a0fae07bc3 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -14,52 +14,54 @@ $ export NETWORK=POA ``` -| Variable | Required | Description | Default | Version | -| --- | --- | --- | ---| --- | -| `NETWORK`| :white_check_mark: | Environment variable for the main EVM network such as Ethereum Network or POA Network | POA Network | all | -| `SUBNETWORK` | :white_check_mark: | Environment variable for the subnetwork such as Core or Sokol Network | Sokol Testnet | all | -| `NETWORK_ICON` | :white_check_mark: | Environment variable for the main network icon or testnet icon. Two options are `_test_network_icon.html` and `_network_icon.html` | `_test_network_icon.html` | all | -| `LOGO` | :white_check_mark: | Environment variable for the logo image location. The logo files names for different chains can be found [here](https://github.com/poanetwork/blockscout/tree/master/apps/block_scout_web/assets/static/images) | /images/blockscout_logo.svg | all | -| `ETHEREUM_JSONRPC_VARIANT` | :white_check_mark: | This environment variable is used to tell the application which RPC Client the node is using (i.e. Geth, Parity, or Ganache) | parity | all | -| `ETHEREUM_JSONRPC_HTTP_URL` | :white_check_mark: | The RPC endpoint used to fetch blocks, transactions, receipts, tokens. | localhost:8545 | all | -| `ETHEREUM_JSONRPC_TRACE_URL` | | The RPC endpoint specifically for the Geth/Parity client used by trace_block and trace_replayTransaction. This can be used to designate a tracing node. | localhost:8545 | all | -| `ETHEREUM_JSONRPC_WS_URL` | :white_check_mark: | The WebSockets RPC endpoint used to subscribe to the `newHeads` subscription alerting the indexer to fetch new blocks. | ws://localhost:8546 | all | -| `NETWORK_PATH` | | Used to set a network path other than what is displayed in the root directory. An example would be to add /eth/mainnet/ to the root directory. | (empty) | all | -| `SECRET_KEY_BASE` | :white_check_mark: | Use mix phx.gen.secret to generate a new Secret Key Base string to protect production assets. | (empty) | all | -| `CHECK_ORIGIN` | | Used to check the origin of requests when the origin header is present. It defaults to false. In case of true, it will check against the host value. | false | all | -| `PORT` | :white_check_mark: | Default port the application runs on is 4000 | 4000 | all | -| `COIN` | :white_check_mark: | The coin here is checked via the Coinmarketcap API to obtain USD prices on graphs and other areas of the UI | POA | all | -| `METADATA_CONTRACT` | | This environment variable is specifically used by POA Network to obtain Validators information to display in the UI. | (empty) | all | -| `VALIDATORS_CONTRACT` | | This environment variable is specifically used by POA Network to obtain the Emission Fund contract. | (empty) | all | -| `SUPPLY_MODULE` | | This environment variable is used by the xDai Chain in order to tell the application how to calculate the total supply of the chain. | false | all | -| `SOURCE_MODULE` | | This environment variable is used to calculate the exchange rate and is specifically used by the xDai Chain. | false | all | -| `DATABASE_URL` | | Production environment variable to define the Database endpoint. | (empty) | all | -| `POOL_SIZE` | | Production environment variable to define the number of database connections allowed. | 20 | all | -| `ECTO_USE_SSL` | | Production environment variable to use SSL on Ecto queries. | true | all | -| `DATADOG_HOST` | | Host configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/) | (empty) | all | -| `DATADOG_PORT` | | Port configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/). | (empty} | all | +| Variable | Required | Description | Default | Version | Need recompile | +| --- | --- | --- | ---| --- | --- | +| `NETWORK`| :white_check_mark: | Environment variable for the main EVM network such as Ethereum Network or POA Network | POA Network | all | | +| `SUBNETWORK` | :white_check_mark: | Environment variable for the subnetwork such as Core or Sokol Network | Sokol Testnet | all | | +| `NETWORK_ICON` | :white_check_mark: | Environment variable for the main network icon or testnet icon. Two options are `_test_network_icon.html` and `_network_icon.html` | `_test_network_icon.html` | all | | +| `LOGO` | :white_check_mark: | Environment variable for the logo image location. The logo files names for different chains can be found [here](https://github.com/poanetwork/blockscout/tree/master/apps/block_scout_web/assets/static/images) | /images/blockscout_logo.svg | all | | +| `ETHEREUM_JSONRPC_VARIANT` | :white_check_mark: | This environment variable is used to tell the application which RPC Client the node is using (i.e. Geth, Parity, or Ganache) | parity | all | | +| `ETHEREUM_JSONRPC_HTTP_URL` | :white_check_mark: | The RPC endpoint used to fetch blocks, transactions, receipts, tokens. | localhost:8545 | all | | +| `ETHEREUM_JSONRPC_TRACE_URL` | | The RPC endpoint specifically for the Geth/Parity client used by trace_block and trace_replayTransaction. This can be used to designate a tracing node. | localhost:8545 | all | | +| `ETHEREUM_JSONRPC_WS_URL` | :white_check_mark: | The WebSockets RPC endpoint used to subscribe to the `newHeads` subscription alerting the indexer to fetch new blocks. | ws://localhost:8546 | all | | +| `NETWORK_PATH` | | Used to set a network path other than what is displayed in the root directory. An example would be to add /eth/mainnet/ to the root directory. | (empty) | all | | +| `SECRET_KEY_BASE` | :white_check_mark: | Use mix phx.gen.secret to generate a new Secret Key Base string to protect production assets. | (empty) | all | | +| `CHECK_ORIGIN` | | Used to check the origin of requests when the origin header is present. It defaults to false. In case of true, it will check against the host value. | false | all | | +| `PORT` | :white_check_mark: | Default port the application runs on is 4000 | 4000 | all | | +| `COIN` | :white_check_mark: | The coin here is checked via the Coinmarketcap API to obtain USD prices on graphs and other areas of the UI | POA | all | | +| `METADATA_CONTRACT` | | This environment variable is specifically used by POA Network to obtain Validators information to display in the UI. | (empty) | all | | +| `VALIDATORS_CONTRACT` | | This environment variable is specifically used by POA Network to obtain the Emission Fund contract. | (empty) | all | | +| `SUPPLY_MODULE` | | This environment variable is used by the xDai Chain in order to tell the application how to calculate the total supply of the chain. | false | all | | +| `SOURCE_MODULE` | | This environment variable is used to calculate the exchange rate and is specifically used by the xDai Chain. | false | all | | +| `DATABASE_URL` | | Production environment variable to define the Database endpoint. | (empty) | all | | +| `POOL_SIZE` | | Production environment variable to define the number of database connections allowed. | 20 | all | | +| `ECTO_USE_SSL` | | Production environment variable to use SSL on Ecto queries. | true | all | | +| `DATADOG_HOST` | | Host configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/) | (empty) | all | | +| `DATADOG_PORT` | | Port configuration setting for [Datadog integration](https://docs.datadoghq.com/integrations/). | (empty} | all | | | `SPANDEX_BATCH_SIZE` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | -| `SPANDEX_SYNC_THRESHOLD` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | -| `HEART_BEAT_TIMEOUT` | | Production environment variable to restart the application in the event of a crash. | 30 | all | -| `HEART_COMMAND` | | Production environment variable to restart the application in the event of a crash. | systemctl restart explorer.service | all | -| `BLOCKSCOUT_VERSION` | | Added to the footer to signify the current BlockScout version. | (empty) | v1.3.4+ | -| `RELEASE_LINK` | | The link to Blockscout release notes in the footer. | https: //github.com/poanetwork/
blockscout/releases/
tag/${BLOCKSCOUT_VERSION} | v1.3.5+ | -| `ELIXIR_VERSION` | | Elixir version to install on the node before Blockscout deploy. | (empty) | all | -| `BLOCK_TRANSFORMER` | | Transformer for blocks: base or clique. | base | v1.3.4+ | -| `GRAPHIQL _TRANSACTION` | | Default transaction in query to GraphiQL. | (empty) | v1.3.4+ | -| `FIRST_BLOCK` | | The block number, where indexing begins from. | 0 | v1.3.8+ | -| `LAST_BLOCK` | | The block number, where indexing stops. | (empty) | v2.0.3+ | -| `TXS_COUNT_CACHE_PERIOD` | | Interval in seconds to restart the task, which calculates the total txs count. | 60 * 60 * 2 | v1.3.9+ | -| `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | -| `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | -| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | -| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | -| `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | -| `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | -| `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | -| `DISABLE_WEBAPP` | | If `true`, endpoints to webapp are hidden (compile-time) | `false` | v2.0.3+ | -| `DISABLE_READ_API` | | If `true`, read-only endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | -| `DISABLE_WRITE_API` | | If `true`, write endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | -| `DISABLE_INDEXER` | | If `true`, indexer application doesn't run | `false` | v2.0.3+ | -| `WEBAPP_URL` | | Link to web application instance, e.g. `http://host/path` | (empty) | v2.0.3+ | -| `API_URL` | | Link to API instance, e.g. `http://host/path` | (empty) | v2.0.3+ | +| `SPANDEX_SYNC_THRESHOLD` | | [Spandex](https://github.com/spandex-project/spandex) and Datadog configuration setting. | (empty) | all | | +| `HEART_BEAT_TIMEOUT` | | Production environment variable to restart the application in the event of a crash. | 30 | all | | +| `HEART_COMMAND` | | Production environment variable to restart the application in the event of a crash. | systemctl restart explorer.service | all | | +| `BLOCKSCOUT_VERSION` | | Added to the footer to signify the current BlockScout version. | (empty) | v1.3.4+ | | +| `RELEASE_LINK` | | The link to Blockscout release notes in the footer. | https: //github.com/poanetwork/
blockscout/releases/
tag/${BLOCKSCOUT_VERSION} | v1.3.5+ | | +| `ELIXIR_VERSION` | | Elixir version to install on the node before Blockscout deploy. | (empty) | all | | +| `BLOCK_TRANSFORMER` | | Transformer for blocks: base or clique. | base | v1.3.4+ | | +| `GRAPHIQL_TRANSACTION` | | Default transaction in query to GraphiQL. | (empty) | v1.2.0+ | :white_check_mark: | +| `FIRST_BLOCK` | | The block number, where indexing begins from. | 0 | v1.3.8+ | | +| `LAST_BLOCK` | | The block number, where indexing stops. | (empty) | v2.0.3+ | | +| `TXS_COUNT_CACHE_PERIOD` | | Interval in seconds to restart the task, which calculates the total txs count. | 60 * 60 * 2 | v1.3.9+ | | +| `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | | +| `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | +| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | +| `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | +| `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | +| `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | | +| `AVERAGE_BLOCK_CACHE_PERIOD` | | Update of average block cache, in seconds | 30 minutes | v2.0.2+ | +| `MARKET_HISTORY_CACHE_PERIOD` | | Update of market history cache, in seconds | 6 hours | v2.0.2+ | +| `DISABLE_WEBAPP` | | If `true`, endpoints to webapp are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | +| `DISABLE_READ_API` | | If `true`, read-only endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | +| `DISABLE_WRITE_API` | | If `true`, write endpoints to API are hidden (compile-time) | `false` | v2.0.3+ | :white_check_mark: | +| `DISABLE_INDEXER` | | If `true`, indexer application doesn't run | `false` | v2.0.3+ | :white_check_mark: | +| `WEBAPP_URL` | | Link to web application instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | +| `API_URL` | | Link to API instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | +| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | | diff --git a/mix.lock b/mix.lock index d589137148..e0d75af01a 100644 --- a/mix.lock +++ b/mix.lock @@ -81,7 +81,7 @@ "optimal": {:hex, :optimal, "0.3.6", "46bbf52fbbbd238cda81e02560caa84f93a53c75620f1fe19e81e4ae7b07d1dd", [:mix], [], "hexpm"}, "parallel_stream": {:hex, :parallel_stream, "1.0.6", "b967be2b23f0f6787fab7ed681b4c45a215a81481fb62b01a5b750fa8f30f76c", [:mix], [], "hexpm"}, "parse_trans": {:hex, :parse_trans, "3.2.0", "2adfa4daf80c14dc36f522cf190eb5c4ee3e28008fc6394397c16f62a26258c2", [:rebar3], [], "hexpm"}, - "phoenix": {:hex, :phoenix, "1.4.9", "746d098e10741c334d88143d3c94cab1756435f94387a63441792e66ec0ee974", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.8.1 or ~> 1.9", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm"}, + "phoenix": {:hex, :phoenix, "1.4.0", "56fe9a809e0e735f3e3b9b31c1b749d4b436e466d8da627b8d82f90eaae714d2", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 1.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}], "hexpm"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.0.0", "c43117a136e7399ea04ecaac73f8f23ee0ffe3e07acfcb8062fe5f4c9f0f6531", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, "phoenix_form_awesomplete": {:hex, :phoenix_form_awesomplete, "0.1.5", "d09aade160b584e3428e1e095645482396f17bddda4f566f1118f12d2598d11c", [:mix], [{:phoenix_html, "~> 2.10", [hex: :phoenix_html, repo: "hexpm", optional: false]}], "hexpm"}, "phoenix_html": {:hex, :phoenix_html, "2.13.3", "850e292ff6e204257f5f9c4c54a8cb1f6fbc16ed53d360c2b780a3d0ba333867", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm"}, From 6e780a7e5a7b8580b562613897ce8585f42ac43f Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 29 Aug 2019 17:11:11 +0300 Subject: [PATCH 059/109] Changed text color on top miner address tooltip --- .../assets/css/components/_custom_tooltips_block_details.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss index c4175ede5d..91eb3ad01a 100644 --- a/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss +++ b/apps/block_scout_web/assets/css/components/_custom_tooltips_block_details.scss @@ -10,7 +10,7 @@ position: absolute; width: 50%; background-color: white; - color: #5c34a2; + color: black; text-align: center; border-radius: 6px; left: 25%; From b479aae84a152b02a642ac35a1ab19aa7f817cef Mon Sep 17 00:00:00 2001 From: saneery Date: Thu, 29 Aug 2019 17:17:54 +0300 Subject: [PATCH 060/109] Set not full path to api on ajax queries --- apps/block_scout_web/assets/js/lib/try_api.js | 4 ++-- apps/block_scout_web/assets/js/lib/try_eth_api.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/block_scout_web/assets/js/lib/try_api.js b/apps/block_scout_web/assets/js/lib/try_api.js index 02d82a65ef..6c33779f30 100644 --- a/apps/block_scout_web/assets/js/lib/try_api.js +++ b/apps/block_scout_web/assets/js/lib/try_api.js @@ -56,7 +56,7 @@ function handleSuccess (query, xhr, clickedButton) { } function dropDomain (url) { - return url.split('/').slice(1).join('/') + return new URL(url).pathname } // Show 'Try it out' UI for a module/action. @@ -128,7 +128,7 @@ $('button[data-try-api-ui-button-type="execute"]').click(event => { } $.ajax({ - url: '/' + dropDomain(composeRequestUrl(query)), + url: dropDomain(composeRequestUrl(query)), success: (_data, _status, xhr) => { handleSuccess(query, xhr, clickedButton) }, diff --git a/apps/block_scout_web/assets/js/lib/try_eth_api.js b/apps/block_scout_web/assets/js/lib/try_eth_api.js index c59d71dbcc..30299431be 100644 --- a/apps/block_scout_web/assets/js/lib/try_eth_api.js +++ b/apps/block_scout_web/assets/js/lib/try_eth_api.js @@ -45,7 +45,7 @@ function parseInput (input) { } function dropDomain (url) { - return url.split('/').slice(1).join('/') + return new URL(url).pathname } $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { @@ -67,7 +67,7 @@ $('button[data-try-eth-api-ui-button-type="execute"]').click(event => { const url = $('[data-endpoint-url]').attr('data-endpoint-url') $.ajax({ - url: '/' + dropDomain(url), + url: dropDomain(url), type: 'POST', data: JSON.stringify(formData), dataType: 'json', From 0f02e91e99226252663ab722aac57825526a9746 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 29 Aug 2019 17:18:33 +0300 Subject: [PATCH 061/109] Tried to resolve gettext issue again --- apps/block_scout_web/priv/gettext/default.pot | 12 ++++++------ .../priv/gettext/en/LC_MESSAGES/default.po | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index c2c324f51e..5a4fbff204 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:117 -#: lib/block_scout_web/templates/block/overview.html.eex:171 +#: lib/block_scout_web/templates/block/overview.html.eex:119 +#: lib/block_scout_web/templates/block/overview.html.eex:173 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:110 -#: lib/block_scout_web/templates/block/overview.html.eex:165 +#: lib/block_scout_web/templates/block/overview.html.eex:112 +#: lib/block_scout_web/templates/block/overview.html.eex:167 msgid "Gas Used" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:133 +#: lib/block_scout_web/templates/block/overview.html.eex:135 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -1274,7 +1274,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:155 +#: lib/block_scout_web/templates/block/overview.html.eex:157 msgid "Block Rewards" 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 dd60e9394d..39a96b04d0 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 @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:117 -#: lib/block_scout_web/templates/block/overview.html.eex:171 +#: lib/block_scout_web/templates/block/overview.html.eex:119 +#: lib/block_scout_web/templates/block/overview.html.eex:173 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:110 -#: lib/block_scout_web/templates/block/overview.html.eex:165 +#: lib/block_scout_web/templates/block/overview.html.eex:112 +#: lib/block_scout_web/templates/block/overview.html.eex:167 msgid "Gas Used" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:133 +#: lib/block_scout_web/templates/block/overview.html.eex:135 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -1275,7 +1275,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:155 +#: lib/block_scout_web/templates/block/overview.html.eex:157 msgid "Block Rewards" msgstr "" From 5b96c10126186c5d1875bd23d39d2bd43a94aee0 Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 19:34:42 +0300 Subject: [PATCH 062/109] Removed unnecessary lines. --- apps/block_scout_web/assets/css/app.scss | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/apps/block_scout_web/assets/css/app.scss b/apps/block_scout_web/assets/css/app.scss index c5d07c2ae2..b4c9649d66 100644 --- a/apps/block_scout_web/assets/css/app.scss +++ b/apps/block_scout_web/assets/css/app.scss @@ -1,12 +1,10 @@ @import "./mixins"; /* Phoenix flash messages */ - .alert:empty { - display: none; + display: none; } - /* This file is for your main application css. */ // Font Awesome @@ -109,18 +107,15 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "components/radio_big"; @import "components/btn_no_border"; @import "components/custom_tooltips_block_details"; -@import "components/_erc721_token_image_container"; - @import "theme/dark-theme"; - :export { - dashboardBannerChartAxisFontColor: $dashboard-banner-chart-axis-font-color; - dashboardLineColorMarket: $dashboard-line-color-market; - dashboardLineColorPrice: $dashboard-line-color-price; - primary: $primary; - secondary: $secondary; - darkprimary: $dark-primary; - darksecondary: $dark-secondary; + dashboardBannerChartAxisFontColor: $dashboard-banner-chart-axis-font-color; + dashboardLineColorMarket: $dashboard-line-color-market; + dashboardLineColorPrice: $dashboard-line-color-price; + primary: $primary; + secondary: $secondary; + darkprimary: $dark-primary; + darksecondary: $dark-secondary; } From e1f2b7246dc5254193638e9384d14b405d7258c6 Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 19:40:19 +0300 Subject: [PATCH 063/109] Delete _erc721_token_image_container.scss --- .../css/components/_erc721_token_image_container.scss | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 apps/block_scout_web/assets/css/components/_erc721_token_image_container.scss diff --git a/apps/block_scout_web/assets/css/components/_erc721_token_image_container.scss b/apps/block_scout_web/assets/css/components/_erc721_token_image_container.scss deleted file mode 100644 index b5f9cb6a92..0000000000 --- a/apps/block_scout_web/assets/css/components/_erc721_token_image_container.scss +++ /dev/null @@ -1,10 +0,0 @@ -/* ERC721 image block */ -.erc721-image { - display: flex; - justify-content: center; -} - -.erc721-image img { - height: 80px; -} -/* ERC721 image block end */ From 10e7baf8f7ff42527c33f8debf777d5c5e92a468 Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 19:45:00 +0300 Subject: [PATCH 064/109] Update _dashboard-banner.scss --- .../assets/css/components/_dashboard-banner.scss | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss index 5a6dcc46bd..0fb092044d 100644 --- a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss +++ b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss @@ -24,7 +24,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa height: auto; } } - .dashboard-banner { display: flex; justify-content: space-between; @@ -34,7 +33,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa flex-direction: column; } } - .dashboard-banner-network-graph { flex-grow: 1; padding: 15px 0 0 0; @@ -44,7 +42,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa padding-top: 20px; } } - .dashboard-banner-chart { flex-grow: 1; margin: 0 0 35px 0; @@ -62,7 +59,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa width: 100%; } } - .dashboard-banner-chart-legend { display: flex; /* grid-template-columns: 1fr 1fr; */ @@ -121,7 +117,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa line-height: 1.2; } } - .dashboard-banner-network-plain-container { align-items: center; align-self: flex-end; @@ -169,7 +164,6 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa } } } - .dashboard-banner-network-stats { column-gap: 25px; display: grid; @@ -198,4 +192,4 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa font-size: 0.9rem; } } -} \ No newline at end of file +} From 7971212d4f2d74c6038167e1790f6fcc7677410f Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 19:50:50 +0300 Subject: [PATCH 065/109] Update overview.html.eex --- .../templates/block/overview.html.eex | 31 +++++-------------- 1 file changed, 8 insertions(+), 23 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex index 7f8fd2a6ff..42bfb43986 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex @@ -4,50 +4,35 @@
-

+

<%= gettext("%{block_type} Details", block_type: block_type(@block)) %>

- - - -

- - <%= if block_type(@block) == "Block" do %> - + +

+ <%= if block_type(@block) == "Block" do %> <%= gettext("Block Height: %{height}", height: @block.number) %> <%= if @block.number == 0, do: "- " <> gettext("Genesis Block")%> <% else %> <%= gettext("%{block_type} Height:", block_type: block_type(@block)) %> <%= link(@block, to: block_path(BlockScoutWeb.Endpoint, :show, @block.number)) %> - <% end %> - + <% end %>

-
<%= gettext "%{count} Transactions", count: @block_transaction_count %> - <%= if @block.size do %> <%= Cldr.Unit.new(:byte, @block.size) |> cldr_unit_to_string!() %> <% end %> -
-
- - -
- -
<%= gettext "Hash" %>
- +
+
<%= gettext "Hash" %>
<%= to_string(@block.hash) %>
-
- <%= unless @block.number == 0 do %> @@ -108,7 +93,7 @@ <% end %> <%= if show_reward?(@block.rewards) do %> -
+
<%= gettext "Gas Used" %>
<%= @block.gas_used |> BlockScoutWeb.Cldr.Number.to_string! %> From 36f82388aec76f553a843a015ed83671b5b34da1 Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 19:55:55 +0300 Subject: [PATCH 066/109] Update _details.html.eex --- .../block_scout_web/templates/tokens/overview/_details.html.eex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex index 7102ea0970..c4fbdc2af2 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex @@ -71,7 +71,7 @@ <%= if total_supply?(@token) do %>
-
+

<%= gettext "Total Supply" %>

From c2efa10e71d9276bf3ac73e2b87e54cee06e8b66 Mon Sep 17 00:00:00 2001 From: Yegor Date: Thu, 29 Aug 2019 20:00:52 +0300 Subject: [PATCH 067/109] Update index.html.eex --- .../transaction_internal_transaction/index.html.eex | 6 ------ 1 file changed, 6 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex index 7b112377f3..70162a3be8 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex @@ -23,10 +23,4 @@ <%= render BlockScoutWeb.CommonComponentsView, "_pagination_container.html", position: "bottom", cur_page_number: "1", show_pagination_limit: true, data_next_page_button: true, data_prev_page_button: true %>

- - - - - - \ No newline at end of file From a3794779de61885d2968f582d4ad61b7d226610e Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 29 Aug 2019 20:16:56 +0300 Subject: [PATCH 068/109] Gettext issue should be fixed --- apps/block_scout_web/priv/gettext/default.pot | 34 +++++++++---------- .../priv/gettext/en/LC_MESSAGES/default.po | 34 +++++++++---------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 5a4fbff204..5bbd00fa38 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -23,7 +23,7 @@ msgid "%{block_type} Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:19 +#: lib/block_scout_web/templates/block/overview.html.eex:15 msgid "%{block_type} Height:" msgstr "" @@ -33,7 +33,7 @@ msgid "%{block_type}s" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:27 +#: lib/block_scout_web/templates/block/overview.html.eex:21 #: lib/block_scout_web/templates/chain/_block.html.eex:11 msgid "%{count} Transactions" msgstr "" @@ -152,7 +152,7 @@ msgid "Block Confirmations" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:17 +#: lib/block_scout_web/templates/block/overview.html.eex:13 msgid "Block Height: %{height}" msgstr "" @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:70 +#: lib/block_scout_web/templates/block/overview.html.eex:55 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:119 -#: lib/block_scout_web/templates/block/overview.html.eex:173 +#: lib/block_scout_web/templates/block/overview.html.eex:104 +#: lib/block_scout_web/templates/block/overview.html.eex:158 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:112 -#: lib/block_scout_web/templates/block/overview.html.eex:167 +#: lib/block_scout_web/templates/block/overview.html.eex:97 +#: lib/block_scout_web/templates/block/overview.html.eex:152 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:45 +#: lib/block_scout_web/templates/block/overview.html.eex:33 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:135 +#: lib/block_scout_web/templates/block/overview.html.eex:120 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -574,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:85 +#: lib/block_scout_web/templates/block/overview.html.eex:70 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -608,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:55 +#: lib/block_scout_web/templates/block/overview.html.eex:40 msgid "Parent Hash" msgstr "" @@ -625,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:96 +#: lib/block_scout_web/templates/block/overview.html.eex:81 msgid "Position %{index}" msgstr "" @@ -838,7 +838,7 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:79 +#: lib/block_scout_web/templates/block/overview.html.eex:64 msgid "Total Difficulty" msgstr "" @@ -901,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:92 +#: lib/block_scout_web/templates/block/overview.html.eex:77 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1274,7 +1274,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:157 +#: lib/block_scout_web/templates/block/overview.html.eex:142 msgid "Block Rewards" msgstr "" @@ -1386,7 +1386,7 @@ msgid "Copy Source Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:17 +#: lib/block_scout_web/templates/block/overview.html.eex:13 msgid "Genesis Block" 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 39a96b04d0..eb8d71480d 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 @@ -23,7 +23,7 @@ msgid "%{block_type} Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:19 +#: lib/block_scout_web/templates/block/overview.html.eex:15 msgid "%{block_type} Height:" msgstr "" @@ -33,7 +33,7 @@ msgid "%{block_type}s" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:27 +#: lib/block_scout_web/templates/block/overview.html.eex:21 #: lib/block_scout_web/templates/chain/_block.html.eex:11 msgid "%{count} Transactions" msgstr "" @@ -152,7 +152,7 @@ msgid "Block Confirmations" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:17 +#: lib/block_scout_web/templates/block/overview.html.eex:13 msgid "Block Height: %{height}" msgstr "" @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:70 +#: lib/block_scout_web/templates/block/overview.html.eex:55 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:119 -#: lib/block_scout_web/templates/block/overview.html.eex:173 +#: lib/block_scout_web/templates/block/overview.html.eex:104 +#: lib/block_scout_web/templates/block/overview.html.eex:158 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:112 -#: lib/block_scout_web/templates/block/overview.html.eex:167 +#: lib/block_scout_web/templates/block/overview.html.eex:97 +#: lib/block_scout_web/templates/block/overview.html.eex:152 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:45 +#: lib/block_scout_web/templates/block/overview.html.eex:33 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:135 +#: lib/block_scout_web/templates/block/overview.html.eex:120 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -574,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:85 +#: lib/block_scout_web/templates/block/overview.html.eex:70 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -608,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:55 +#: lib/block_scout_web/templates/block/overview.html.eex:40 msgid "Parent Hash" msgstr "" @@ -625,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:96 +#: lib/block_scout_web/templates/block/overview.html.eex:81 msgid "Position %{index}" msgstr "" @@ -838,7 +838,7 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:79 +#: lib/block_scout_web/templates/block/overview.html.eex:64 msgid "Total Difficulty" msgstr "" @@ -901,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:92 +#: lib/block_scout_web/templates/block/overview.html.eex:77 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1275,7 +1275,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:157 +#: lib/block_scout_web/templates/block/overview.html.eex:142 msgid "Block Rewards" msgstr "" @@ -1387,7 +1387,7 @@ msgid "Copy Source Code" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:17 +#: lib/block_scout_web/templates/block/overview.html.eex:13 msgid "Genesis Block" msgstr "" From 085d018b7f59d35e2d59b4636cacce5f1549ffca Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Sun, 1 Sep 2019 23:51:32 +0300 Subject: [PATCH 069/109] Update README.md LUKSO L14 testnet in the list of hosted chains --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 0340496862..138ddf18d8 100644 --- a/README.md +++ b/README.md @@ -30,17 +30,17 @@ Currently available full-featured block explorers (Etherscan, Etherchain, Blockc | **Hosted Mainnets** | **Hosted Testnets** | **Additional Chains using BlockScout** | **Additional Chains using BlockScout** | |--------------------------------------------------------|-------------------------------------------------------|------------------------------------------------------|----------------------------------------------------------------| -| [Aerum](https://blockscout.com/aerum/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | [Celo Testnet](https://alfajores-blockscout.celo-testnet.org/) | -| [Callisto](https://blockscout.com/callisto/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | [Matic Testnet](https://explorer.testnet2.matic.network/) | -| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | | -| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | | -| [POA Core Network](https://blockscout.com/poa/core) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | | -| [RSK](https://blockscout.com/rsk/mainnet) | | [PIRL](http://pirl.es/) | | -| [xDai Chain](https://blockscout.com/poa/dai) | | [SafeChain](https://explorer.safechain.io) | | +| [Callisto](https://blockscout.com/callisto/mainnet) | [Goerli Testnet](https://blockscout.com/eth/goerli) | [ARTIS](https://explorer.sigma1.artis.network) | [Celo Testnet](https://alfajores-blockscout.celo-testnet.org/) | +| [Ethereum Classic](https://blockscout.com/etc/mainnet) | [Kovan Testnet](https://blockscout.com/eth/kovan) | [Ether-1](https://blocks.ether1.wattpool.net/) | [Matic Testnet](https://explorer.testnet2.matic.network/) | +| [Ethereum Mainnet](https://blockscout.com/eth/mainnet) | [LUKSO L14 Testnet](https://blockscout.com/lukso/l14) | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | | +| [POA Core Network](https://blockscout.com/poa/core) | [POA Sokol Testnet](https://blockscout.com/poa/sokol) | [Fuse Network](https://explorer.fuse.io/) | | +| [RSK](https://blockscout.com/rsk/mainnet) | [Rinkeby Testnet](https://blockscout.com/eth/rinkeby) | [Oasis Labs](https://blockexplorer.oasiscloud.io/) | | +| [xDai Chain](https://blockscout.com/poa/dai) | [Ropsten Testnet](https://blockscout.com/eth/ropsten) | [Petrichor](https://explorer.petrachor.com/) | | +| | | [PIRL](http://pirl.es/) | | +| | | [SafeChain](https://explorer.safechain.io) | | | | | [SpringChain](https://explorer.springrole.com/) | | -| | | [Kotti Testnet](https://kottiexplorer.ethernode.io/) | | -| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | | | | | [Tenda](https://tenda.network) | | +| | | [Loom](http://plasma-blockexplorer.dappchains.com/) | | | | | [GoJoy Chain](https://gojoychain.com/) | | | | | [Xerom](https://blocks.xerom.org/) | | From 44cf49ea7580108815d94a1dd72d92f9e246c53d Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 09:58:56 +0300 Subject: [PATCH 070/109] fix market_cap calculation --- apps/block_scout_web/lib/block_scout_web/views/chain_view.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex index 506d6ff3c8..528cf3671f 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex @@ -4,7 +4,7 @@ defmodule BlockScoutWeb.ChainView do alias BlockScoutWeb.LayoutView defp market_cap(:standard, exchange_rate) do - exchange_rate.market_cap_usd + Decimal.mult(exchange_rate.available_supply, exchange_rate.usd_value) end defp market_cap(module, exchange_rate) do From ff1b7568d6762ec9a2cd84628347f9c2a5d6abb6 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 10:51:14 +0300 Subject: [PATCH 071/109] fix tests --- .../lib/block_scout_web/views/chain_view.ex | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex index 528cf3671f..3033dbc0fe 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex @@ -3,8 +3,13 @@ defmodule BlockScoutWeb.ChainView do alias BlockScoutWeb.LayoutView - defp market_cap(:standard, exchange_rate) do - Decimal.mult(exchange_rate.available_supply, exchange_rate.usd_value) + defp market_cap(:standard, %{available_supply: available_supply, usd_value: usd_value}) + when is_nil(available_supply) or is_nil(usd_value) do + Decimal.new(0) + end + + defp market_cap(:standard, %{available_supply: available_supply, usd_value: usd_value}) do + Decimal.mult(available_supply, usd_value) end defp market_cap(module, exchange_rate) do From d2d99eb60b3170d7f5aa158c150ca7ea3093d510 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 10:57:15 +0300 Subject: [PATCH 072/109] add fallback --- apps/block_scout_web/lib/block_scout_web/views/chain_view.ex | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex index 3033dbc0fe..a5f0ebef50 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/chain_view.ex @@ -12,6 +12,10 @@ defmodule BlockScoutWeb.ChainView do Decimal.mult(available_supply, usd_value) end + defp market_cap(:standard, exchange_rate) do + exchange_rate.market_cap_usd + end + defp market_cap(module, exchange_rate) do module.market_cap(exchange_rate) end From f28e866f8fd766d91bb8d6d63a8f42214d5c2e9d Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 11:27:45 +0300 Subject: [PATCH 073/109] check if blockscout comment is already added --- .../lib/explorer/chain/smart_contract.ex | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/explorer/lib/explorer/chain/smart_contract.ex b/apps/explorer/lib/explorer/chain/smart_contract.ex index bbddd51100..a3c198c642 100644 --- a/apps/explorer/lib/explorer/chain/smart_contract.ex +++ b/apps/explorer/lib/explorer/chain/smart_contract.ex @@ -279,17 +279,34 @@ defmodule Explorer.Chain.SmartContract do end def add_submitted_comment(contract_lines, inserted_at) when is_list(contract_lines) do - index = + etherscan_index = Enum.find(contract_lines, fn line -> String.contains?(line, "Submitted for verification at Etherscan.io") end) - if index do - List.replace_at(contract_lines, index, "* Submitted for verification at blockscout.com on #{inserted_at}") - else - header = ["/**", "* Submitted for verification at blockscout.com on #{inserted_at}", "*/"] + blockscout_index = + Enum.find(contract_lines, fn line -> + String.contains?(line, "Submitted for verification at blockscout.com") + end) + + cond do + etherscan_index && blockscout_index -> + List.replace_at(contract_lines, etherscan_index, "*") + + etherscan_index && !blockscout_index -> + List.replace_at( + contract_lines, + etherscan_index, + "* Submitted for verification at blockscout.com on #{inserted_at}" + ) + + !etherscan_index && !blockscout_index -> + header = ["/**", "* Submitted for verification at blockscout.com on #{inserted_at}", "*/"] + + header ++ contract_lines - header ++ contract_lines + true -> + contract_lines end end From 164f61ef42f133bb9a2d1c23a6df7f21982af07b Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:18:16 +0300 Subject: [PATCH 074/109] update gettext --- apps/block_scout_web/priv/gettext/default.pot | 1844 +++++++++++++++++ .../priv/gettext/en/LC_MESSAGES/default.po | 1844 +++++++++++++++++ 2 files changed, 3688 insertions(+) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index e69de29bb2..8ab78b1a4c 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -0,0 +1,1844 @@ +#, elixir-format +#: lib/block_scout_web/views/address_token_balance_view.ex:7 +msgid "%{count} token" +msgid_plural "%{count} tokens" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:27 +msgid "%{count} transaction" +msgid_plural "%{count} transactions" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:192 +msgid " Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:14 +msgid " is recommended." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:3 +msgid "%{address} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:8 +msgid "%{block_type} Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:15 +msgid "%{block_type} Height:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:10 +msgid "%{block_type}s" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:21 +#: lib/block_scout_web/templates/chain/_block.html.eex:11 +msgid "%{count} Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:2 +msgid "%{subnetwork} %{network} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_default_title.html.eex:2 +msgid "%{subnetwork} Explorer - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:187 +msgid "(Awaiting internal transactions for status)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:82 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:104 +msgid "(query)" +msgstr "" + +#, elixir-format +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:75 +msgid ">=" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:73 +msgid "A string with the name of the action to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:62 +msgid "A string with the name of the module to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:104 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:4 +msgid "API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:4 +msgid "API endpoints for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:2 +msgid "API for the %{subnetwork} - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:81 +msgid "APIs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:71 +msgid "Accounts" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +msgid "Action" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 +#: lib/block_scout_web/views/address_view.ex:99 +msgid "Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/index.html.eex:4 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:60 +msgid "Addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:21 +#: lib/block_scout_web/views/address_internal_transaction_view.ex:8 +#: lib/block_scout_web/views/address_transaction_view.ex:8 +msgid "All" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 +msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:47 +msgid "Average block time" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:30 +msgid "Back Home" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:3 +msgid "Balance" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 +msgid "Balances" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:5 +#: lib/block_scout_web/templates/api_docs/index.html.eex:5 +msgid "Base URL:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex:8 +msgid "Block" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_link.html.eex:2 +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:3 +msgid "Block %{block_number} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:72 +msgid "Block Confirmations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/404.html.eex:7 +msgid "Block Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Block Height: %{height}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:57 +msgid "Block Mined, awaiting import..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:58 +msgid "Block Number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:21 +msgid "Block Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:139 +msgid "Block Rewards" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:15 +msgid "Block not found, please try again later." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:4 +msgid "BlockScout provides analytics data, API, and Smart Contract tools for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:87 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:31 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:35 +msgid "Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:56 +msgid "Blocks Indexed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:32 +#: lib/block_scout_web/templates/address/overview.html.eex:97 +#: lib/block_scout_web/templates/address_validation/index.html.eex:13 +#: lib/block_scout_web/views/address_view.ex:311 +msgid "Blocks Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:17 +msgid "Blockscout is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:28 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:74 +msgid "CSV" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:21 +msgid "Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:22 +msgid "Call Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:54 +msgid "Cancel" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:11 +msgid "Change Network" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:36 +msgid "Chat" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:106 +msgid "Clear" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:37 +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:42 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:165 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:187 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:126 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:149 +#: lib/block_scout_web/views/address_view.ex:307 +msgid "Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:20 +#: lib/block_scout_web/views/address_view.ex:310 +msgid "Coin Balance History" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 +msgid "Compiler" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:34 +msgid "Compiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:4 +msgid "Connection Lost" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:10 +#: lib/block_scout_web/templates/block/index.html.eex:6 +msgid "Connection Lost, click to load newer blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer internal transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:10 +msgid "Connection Lost, click to load newer validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:53 +msgid "Constructor Arguments" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:75 +msgid "Contract ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:18 +#: lib/block_scout_web/views/address_view.ex:97 +msgid "Contract Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:16 +#: lib/block_scout_web/views/address_view.ex:37 +#: lib/block_scout_web/views/address_view.ex:71 +msgid "Contract Address Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:105 +msgid "Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:264 +msgid "Contract Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:263 +msgid "Contract Creation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +msgid "Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:118 +msgid "Contract Libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:29 +msgid "Contract Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:26 +msgid "Contract name:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:63 +msgid "Contract source code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 +msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:35 +msgid "Contribute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +msgid "Copy ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:13 +#: lib/block_scout_web/templates/address/overview.html.eex:17 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:20 +msgid "Copy Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 +msgid "Copy Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:93 +msgid "Copy Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 +msgid "Copy Decompiled Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:65 +msgid "Copy Source Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:16 +msgid "Copy Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:20 +msgid "Copy Txn Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:66 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:119 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:69 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:122 +msgid "Copy Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:25 +msgid "Create" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:26 +msgid "Create2" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:107 +msgid "Created by" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:116 +msgid "Curl" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:56 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:109 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:175 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:59 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:112 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:179 +msgid "Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:63 +msgid "Decimals" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:37 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:90 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:32 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:40 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:93 +msgid "Decoded" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_view.ex:308 +msgid "Decompiled Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:52 +msgid "Decompiled code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 +msgid "Decompiled contract code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 +msgid "Decompiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:23 +msgid "Delegate Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:60 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:150 +msgid "Description" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:8 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127 +msgid "Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:58 +msgid "Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:98 +msgid "Displaying the init data provided of the creating transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:22 +msgid "During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:84 +msgid "ERC-20 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:85 +msgid "ERC-721 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:50 +msgid "ETH" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:4 +msgid "ETH RPC API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:51 +msgid "EVM Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:7 +msgid "Easy Cowboy! This block does not exist yet!" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:5 +msgid "Emission Contract" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:60 +msgid "Emission Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:93 +msgid "Enter the Solidity Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:49 +msgid "Error rendering value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:32 +msgid "Error trying to fetch balances." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:191 +msgid "Error: %{reason}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:189 +msgid "Error: (Awaiting internal transactions for reason)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:120 +msgid "Error: Could not determine contract creator." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:95 +msgid "Eth RPC" +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: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 +#: lib/block_scout_web/templates/transaction/overview.html.eex:209 +#: lib/block_scout_web/views/wei_helpers.ex:78 +msgid "Ether" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:164 +msgid "Example Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:99 +msgid "Execute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:120 +msgid "External libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 +msgid "Failed to decode input data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:35 +msgid "Failed to decode log data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:24 +msgid "Favorites" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:29 +msgid "Fetching tokens..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:16 +msgid "For any existing contracts in the database, insert all ABI entries into the contract_methods table. Use this in case you have verified smart contracts before early March 2019 and you want other contracts with the same functions to show those ABI's as candidate matches." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:41 +msgid "Forked Blocks (Reorgs)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44 +#: 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_transaction_view.ex:7 +msgid "From" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:18 +msgid "GET" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:227 +msgid "Gas" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:56 +#: lib/block_scout_web/templates/block/overview.html.eex:105 +#: lib/block_scout_web/templates/block/overview.html.eex:152 +msgid "Gas Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:61 +#: lib/block_scout_web/templates/block/overview.html.eex:98 +#: lib/block_scout_web/templates/block/overview.html.eex:146 +msgid "Gas Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Genesis Block" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:19 +msgid "Github" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:85 +msgid "GraphQL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:20 +#: lib/block_scout_web/views/wei_helpers.ex:77 +msgid "Gwei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:38 +msgid "Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:115 +#: lib/block_scout_web/templates/transaction/overview.html.eex:119 +msgid "Hex (Default)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:11 +msgid "However, in general, the" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +msgid "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." +msgstr "" + +#, elixir-format +#: 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/transaction/not_found.html.eex:26 +msgid "If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:12 +msgid "If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:79 +msgid "Incoming Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:55 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:108 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:58 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:111 +msgid "Indexed?" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:58 +msgid "Indexing Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:3 +msgid "Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:6 +msgid "Internal Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:14 +#: 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_internal_transaction/index.html.eex:6 +#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/transaction_view.ex:317 +msgid "Internal Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:6 +msgid "Invalid Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:17 +#: lib/block_scout_web/views/tokens/overview_view.ex:38 +msgid "Inventory" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:16 +msgid "It could still be in the TX Pool of a different node, waiting to be broadcasted." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:89 +msgid "Last Balance Update: Block #" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:59 +msgid "Less than" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:155 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:177 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:199 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:221 +msgid "Library Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:123 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:145 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:167 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:189 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:211 +msgid "Library Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:24 +msgid "License Expires" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:10 +msgid "License ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:237 +msgid "Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22 +#: lib/block_scout_web/templates/chain/show.html.eex:13 +msgid "Loading chart" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 +#: lib/block_scout_web/templates/chain/show.html.eex:99 +#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 +msgid "Loading..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 +msgid "Loading...." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:103 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:106 +msgid "Log Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:26 +#: lib/block_scout_web/templates/address_logs/index.html.eex:8 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 +#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/transaction_view.ex:318 +msgid "Logs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:44 +msgid "Main Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:22 +msgid "Mainnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:31 +#: 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" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:172 +#: lib/block_scout_web/views/transaction_view.ex:172 +msgid "Max of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:4 +msgid "Method Id" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/chain/_block.html.eex:15 +msgid "Miner" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:56 +msgid "Miner Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:223 +msgid "Model" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +msgid "Module" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 +msgid "More internal transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 +#: lib/block_scout_web/templates/transaction/index.html.eex:10 +msgid "More transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:63 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:74 +msgid "Must be set to:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:106 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:56 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:109 +msgid "Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:9 +msgid "New Smart Contract Verification" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:67 +msgid "No" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/transaction/overview.html.eex:79 +msgid "Nonce" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:36 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:68 +msgid "OUT" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:30 +msgid "Optimization enabled" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:39 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:83 +msgid "Optimization runs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:68 +msgid "Other Explorers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:18 +msgid "Owner Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:26 +msgid "POST" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:39 +msgid "Page" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:40 +msgid "Parameters" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:45 +msgid "Parent Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:59 +#: lib/block_scout_web/views/transaction_view.ex:186 +#: lib/block_scout_web/views/transaction_view.ex:220 +msgid "Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 +msgid "Pending Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:84 +msgid "Position %{index}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:17 +msgid "Potential matches from our contract method database:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:24 +#: 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:144 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:36 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:105 +msgid "QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:22 +msgid "Query" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:90 +msgid "RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:109 +msgid "Raw Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 +#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/views/transaction_view.ex:319 +msgid "Raw Trace" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:58 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 +#: lib/block_scout_web/views/address_view.ex:309 +#: lib/block_scout_web/views/tokens/overview_view.ex:37 +msgid "Read Contract" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11 +msgid "Records" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:155 +msgid "Request URL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:250 +msgid "Reset" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:134 +msgid "Response Body" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:147 +msgid "Responses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:47 +#: lib/block_scout_web/templates/chain/_block.html.eex:23 +#: lib/block_scout_web/views/internal_transaction_view.ex:28 +msgid "Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:21 +msgid "Run" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:14 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:127 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:144 +msgid "Search" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:121 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:125 +msgid "Search by address, token symbol name, transaction hash, or block number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:18 +msgid "Search network" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex:30 +msgid "Search tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:27 +msgid "Self-Destruct" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:124 +msgid "Server Response" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5 +msgid "Show" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:34 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:37 +msgid "Show QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:48 +msgid "Show Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34 +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 +#: lib/block_scout_web/templates/address_logs/index.html.eex:21 +#: lib/block_scout_web/templates/address_token/index.html.eex:13 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:20 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:59 +#: lib/block_scout_web/templates/address_validation/index.html.eex:22 +#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/chain/show.html.eex:91 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19 +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20 +#: lib/block_scout_web/templates/transaction/index.html.eex:20 +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:13 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:12 +msgid "Something went wrong, click to reload." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:117 +msgid "Something went wrong, click to retry." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:7 +msgid "Sorry, We are unable to locate this transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:24 +msgid "Static Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:34 +msgid "Submit an Issue" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 +#: lib/block_scout_web/views/transaction_view.ex:188 +msgid "Success" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:37 +msgid "Support" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:21 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:32 +#: lib/block_scout_web/templates/transaction/overview.html.eex:84 +msgid "TX Fee" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:25 +msgid "Telegram" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:57 +msgid "Test Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:23 +msgid "Testnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:18 +msgid "There are no blocks validated by this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:18 +msgid "There are no blocks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:26 +msgid "There are no holders for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65 +msgid "There are no internal transactions for this address." +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:15 +msgid "There are no internal transactions for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:26 +msgid "There are no logs for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_log/index.html.eex:18 +msgid "There are no logs for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23 +msgid "There are no pending transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:15 +msgid "There are no token transfers for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:17 +msgid "There are no token transfers for this transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:18 +msgid "There are no tokens for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:26 +msgid "There are no tokens." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:64 +msgid "There are no transactions for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/index.html.eex:28 +msgid "There are no transactions for this block." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:26 +msgid "There are no transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25 +msgid "There are no transfers for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39 +msgid "There is no coin history for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 +msgid "There is no decompilded contracts for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25 +#: lib/block_scout_web/templates/chain/show.html.eex:16 +msgid "There was a problem loading the chart." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:6 +msgid "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:7 +msgid "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:11 +msgid "This block has not been processed yet." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:10 +msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:35 +msgid "This transaction is pending confirmation." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33 +#: 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_transaction_view.ex:6 +msgid "To" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:19 +msgid "To have guaranteed accuracy, use the link above to verify the contract's source code." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:6 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:6 +msgid "To see accurate decoded input data, the contract must be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:20 +msgid "Toggle navigation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:10 +msgid "Token Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:9 +#: lib/block_scout_web/views/tokens/overview_view.ex:36 +msgid "Token Holders" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:11 +msgid "Token ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 +#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 +#: lib/block_scout_web/views/transaction_view.ex:262 +msgid "Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 +#: lib/block_scout_web/views/tokens/overview_view.ex:35 +#: lib/block_scout_web/views/transaction_view.ex:316 +msgid "Token Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:8 +#: lib/block_scout_web/templates/address_token/index.html.eex:8 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 +#: lib/block_scout_web/views/address_view.ex:304 +msgid "Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:13 +msgid "Top Accounts - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:12 +msgid "Topic" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:145 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:149 +msgid "Topics" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:67 +msgid "Total Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:64 +msgid "Total blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:56 +msgid "Total transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 +#: lib/block_scout_web/views/transaction_view.ex:265 +msgid "Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:3 +msgid "Transaction %{transaction} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:11 +msgid "Transaction %{transaction}, %{subnetwork} %{transaction}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:11 +msgid "Transaction Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 +msgid "Transaction Inputs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:101 +msgid "Transaction Speed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:3 +#: 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:18 +#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:50 +#: lib/block_scout_web/views/address_view.ex:305 +msgid "Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:84 +msgid "Transactions Sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:31 +msgid "Transactions sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:61 +msgid "Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:47 +msgid "Try it out" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:22 +msgid "Twitter" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:107 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:57 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:110 +msgid "Type" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:122 +msgid "UTF-8" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:64 +msgid "Uncle Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:38 +msgid "Uncles" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:6 +msgid "Unique Token" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:12 +msgid "Use the search box to find a hosted network, or select from the list of available networks below." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:231 +msgid "Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:54 +msgid "Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:4 +msgid "Validated Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:35 +msgid "Validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:30 +msgid "Validator Creation Date" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:5 +msgid "Validator Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:52 +msgid "Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:179 +#: lib/block_scout_web/templates/transaction/overview.html.eex:209 +msgid "Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:11 +#: lib/block_scout_web/templates/address_contract/index.html.eex:16 +msgid "Verify & Publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:249 +msgid "Verify & publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 +msgid "Verify the contract " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:83 +msgid "Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:86 +msgid "View All Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:107 +msgid "View All Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:55 +msgid "View Contract" +msgstr "" + +#, elixir-format +#: 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:52 +msgid "View More Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:9 +msgid "View the account balance, transactions, and other data for %{address} on the %{network}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:10 +msgid "View the transactions, token transfers, and uncles for block number %{block_number}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:10 +msgid "View transaction %{transaction} on %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:49 +msgid "WEI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:72 +msgid "Wallet addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/wei_helpers.ex:76 +msgid "Wei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:72 +msgid "Yes" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:112 +msgid "at" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:12 +msgid "custom RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:23 +msgid "false" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 +msgid "here" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:9 +msgid "here." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:8 +msgid "is not a valid transaction hash" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:39 +msgid "of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:70 +msgid "required" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +msgid "string" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:22 +msgid "true" +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 e69de29bb2..8ab78b1a4c 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 @@ -0,0 +1,1844 @@ +#, elixir-format +#: lib/block_scout_web/views/address_token_balance_view.ex:7 +msgid "%{count} token" +msgid_plural "%{count} tokens" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:27 +msgid "%{count} transaction" +msgid_plural "%{count} transactions" +msgstr[0] "" +msgstr[1] "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:192 +msgid " Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:14 +msgid " is recommended." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:3 +msgid "%{address} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:8 +msgid "%{block_type} Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:15 +msgid "%{block_type} Height:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:10 +msgid "%{block_type}s" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:21 +#: lib/block_scout_web/templates/chain/_block.html.eex:11 +msgid "%{count} Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:2 +msgid "%{subnetwork} %{network} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_default_title.html.eex:2 +msgid "%{subnetwork} Explorer - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:187 +msgid "(Awaiting internal transactions for status)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:82 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:104 +msgid "(query)" +msgstr "" + +#, elixir-format +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:75 +msgid ">=" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:73 +msgid "A string with the name of the action to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:62 +msgid "A string with the name of the module to be invoked." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:104 +msgid "ABI-encoded Constructor Arguments (if required by the contract)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:4 +msgid "API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:4 +msgid "API endpoints for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_metatags.html.eex:2 +msgid "API for the %{subnetwork} - BlockScout" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:81 +msgid "APIs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:71 +msgid "Accounts" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +msgid "Action" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:16 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:19 +#: lib/block_scout_web/views/address_view.ex:99 +msgid "Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/index.html.eex:4 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:60 +msgid "Addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:27 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:21 +#: lib/block_scout_web/views/address_internal_transaction_view.ex:8 +#: lib/block_scout_web/views/address_transaction_view.ex:8 +msgid "All" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:15 +msgid "Anything not in this list is not supported. Click on the method to be taken to the documentation for that method, and check the notes section for any potential differences." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:47 +msgid "Average block time" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:30 +msgid "Back Home" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:3 +msgid "Balance" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 +msgid "Balances" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:5 +#: lib/block_scout_web/templates/api_docs/index.html.eex:5 +msgid "Base URL:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/_coin_balances.html.eex:8 +msgid "Block" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_link.html.eex:2 +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:3 +msgid "Block %{block_number} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:72 +msgid "Block Confirmations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/404.html.eex:7 +msgid "Block Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Block Height: %{height}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:57 +msgid "Block Mined, awaiting import..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:58 +msgid "Block Number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:21 +msgid "Block Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:139 +msgid "Block Rewards" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:15 +msgid "Block not found, please try again later." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/_metatags.html.eex:4 +msgid "BlockScout provides analytics data, API, and Smart Contract tools for the %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:87 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:31 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:35 +msgid "Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:56 +msgid "Blocks Indexed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:32 +#: lib/block_scout_web/templates/address/overview.html.eex:97 +#: lib/block_scout_web/templates/address_validation/index.html.eex:13 +#: lib/block_scout_web/views/address_view.ex:311 +msgid "Blocks Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:17 +msgid "Blockscout is a tool for inspecting and analyzing EVM based blockchains. Blockchain explorer for Ethereum Networks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:28 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:74 +msgid "CSV" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:21 +msgid "Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:22 +msgid "Call Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:253 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:47 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:54 +msgid "Cancel" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:11 +msgid "Change Network" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:36 +msgid "Chat" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:137 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:106 +msgid "Clear" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:37 +#: 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 "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:42 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:165 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:187 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:126 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:149 +#: lib/block_scout_web/views/address_view.ex:307 +msgid "Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:20 +#: lib/block_scout_web/views/address_view.ex:310 +msgid "Coin Balance History" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:40 +msgid "Compiler" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:34 +msgid "Compiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:4 +msgid "Connection Lost" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:10 +#: lib/block_scout_web/templates/block/index.html.eex:6 +msgid "Connection Lost, click to load newer blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer internal transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/index.html.eex:15 +msgid "Connection Lost, click to load newer transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:10 +msgid "Connection Lost, click to load newer validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:53 +msgid "Constructor Arguments" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:75 +msgid "Contract ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:18 +#: lib/block_scout_web/views/address_view.ex:97 +msgid "Contract Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:16 +#: lib/block_scout_web/views/address_view.ex:37 +#: lib/block_scout_web/views/address_view.ex:71 +msgid "Contract Address Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:105 +msgid "Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:264 +msgid "Contract Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:263 +msgid "Contract Creation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:91 +msgid "Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:118 +msgid "Contract Libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:29 +msgid "Contract Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:26 +msgid "Contract name:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:63 +msgid "Contract source code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:97 +msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:35 +msgid "Contribute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:77 +msgid "Copy ABI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:13 +#: lib/block_scout_web/templates/address/overview.html.eex:17 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:20 +msgid "Copy Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:107 +msgid "Copy Contract Byte Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:93 +msgid "Copy Contract Creation Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17 +msgid "Copy Decompiled Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:65 +msgid "Copy Source Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:16 +msgid "Copy Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:20 +msgid "Copy Txn Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:66 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:119 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:31 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:69 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:122 +msgid "Copy Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:25 +msgid "Create" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:26 +msgid "Create2" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:107 +msgid "Created by" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:146 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:116 +msgid "Curl" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:56 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:109 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:175 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:21 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:59 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:112 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:179 +msgid "Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:63 +msgid "Decimals" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:31 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:37 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:90 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:32 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:40 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:93 +msgid "Decoded" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_view.ex:308 +msgid "Decompiled Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:52 +msgid "Decompiled code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:15 +msgid "Decompiled contract code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:8 +msgid "Decompiler version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:23 +msgid "Delegate Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:53 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:188 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:60 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:150 +msgid "Description" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:8 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127 +msgid "Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:58 +msgid "Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:98 +msgid "Displaying the init data provided of the creating transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:22 +msgid "During times when the network is busy (i.e during ICOs) it can take a while for your transaction to propagate through the network and for us to index it." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:84 +msgid "ERC-20 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:85 +msgid "ERC-721 " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:50 +msgid "ETH" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:4 +msgid "ETH RPC API Documentation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:45 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:51 +msgid "EVM Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:7 +msgid "Easy Cowboy! This block does not exist yet!" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:5 +msgid "Emission Contract" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:60 +msgid "Emission Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:93 +msgid "Enter the Solidity Contract Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:49 +msgid "Error rendering value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:32 +msgid "Error trying to fetch balances." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:191 +msgid "Error: %{reason}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:189 +msgid "Error: (Awaiting internal transactions for reason)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:120 +msgid "Error: Could not determine contract creator." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:95 +msgid "Eth RPC" +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: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 +#: lib/block_scout_web/templates/transaction/overview.html.eex:209 +#: lib/block_scout_web/views/wei_helpers.ex:78 +msgid "Ether" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:211 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:164 +msgid "Example Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:128 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:99 +msgid "Execute" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:120 +msgid "External libraries" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:32 +msgid "Failed to decode input data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:34 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:35 +msgid "Failed to decode log data." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:24 +msgid "Favorites" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_balance_card.html.eex:29 +msgid "Fetching tokens..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:16 +msgid "For any existing contracts in the database, insert all ABI entries into the contract_methods table. Use this in case you have verified smart contracts before early March 2019 and you want other contracts with the same functions to show those ABI's as candidate matches." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:41 +msgid "Forked Blocks (Reorgs)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:44 +#: 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_transaction_view.ex:7 +msgid "From" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:18 +msgid "GET" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:227 +msgid "Gas" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:56 +#: lib/block_scout_web/templates/block/overview.html.eex:105 +#: lib/block_scout_web/templates/block/overview.html.eex:152 +msgid "Gas Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:61 +#: lib/block_scout_web/templates/block/overview.html.eex:98 +#: lib/block_scout_web/templates/block/overview.html.eex:146 +msgid "Gas Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:13 +msgid "Genesis Block" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:19 +msgid "Github" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:85 +msgid "GraphQL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:20 +#: lib/block_scout_web/views/wei_helpers.ex:77 +msgid "Gwei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:38 +msgid "Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:115 +#: lib/block_scout_web/templates/transaction/overview.html.eex:119 +msgid "Hex (Default)" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:11 +msgid "However, in general, the" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:18 +msgid "IMPORTANT: This information is a best guess based on similar functions from other verified contracts." +msgstr "" + +#, elixir-format +#: 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/transaction/not_found.html.eex:26 +msgid "If it still does not show up after 1 hour, please check with your sender/exchange/wallet/transaction provider for additional information." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:12 +msgid "If you have just submitted this transaction please wait for at least 30 seconds before refreshing this page." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:79 +msgid "Incoming Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:55 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:108 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:58 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:111 +msgid "Indexed?" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:58 +msgid "Indexing Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:3 +msgid "Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:6 +msgid "Internal Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:14 +#: 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_internal_transaction/index.html.eex:6 +#: lib/block_scout_web/views/address_view.ex:306 +#: lib/block_scout_web/views/transaction_view.ex:317 +msgid "Internal Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:6 +msgid "Invalid Transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:17 +#: lib/block_scout_web/views/tokens/overview_view.ex:38 +msgid "Inventory" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:16 +msgid "It could still be in the TX Pool of a different node, waiting to be broadcasted." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:89 +msgid "Last Balance Update: Block #" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/app.html.eex:59 +msgid "Less than" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:133 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:155 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:177 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:199 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:221 +msgid "Library Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:123 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:145 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:167 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:189 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:211 +msgid "Library Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:24 +msgid "License Expires" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:10 +msgid "License ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:237 +msgid "Limit" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:22 +#: lib/block_scout_web/templates/chain/show.html.eex:13 +msgid "Loading chart" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 +#: lib/block_scout_web/templates/chain/show.html.eex:99 +#: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 +msgid "Loading..." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:247 +msgid "Loading...." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:50 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:103 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:53 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:106 +msgid "Log Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:26 +#: lib/block_scout_web/templates/address_logs/index.html.eex:8 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:8 +#: lib/block_scout_web/views/address_view.ex:312 +#: lib/block_scout_web/views/transaction_view.ex:318 +msgid "Logs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:44 +msgid "Main Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:22 +msgid "Mainnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:31 +#: 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" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/transaction_view.ex:172 +#: lib/block_scout_web/views/transaction_view.ex:172 +msgid "Max of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:4 +msgid "Method Id" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:38 +#: lib/block_scout_web/templates/block/overview.html.eex:121 +#: lib/block_scout_web/templates/chain/_block.html.eex:15 +msgid "Miner" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:56 +msgid "Miner Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:223 +msgid "Model" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +msgid "Module" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:10 +msgid "More internal transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 +#: lib/block_scout_web/templates/transaction/index.html.eex:10 +msgid "More transactions have come in" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:63 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:74 +msgid "Must be set to:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:53 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:106 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:52 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:59 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:19 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:56 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:109 +msgid "Name" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:9 +msgid "New Smart Contract Verification" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:67 +msgid "No" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:73 +#: lib/block_scout_web/templates/transaction/overview.html.eex:79 +msgid "Nonce" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:36 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:68 +msgid "OUT" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:30 +msgid "Optimization enabled" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:39 +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:83 +msgid "Optimization runs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:68 +msgid "Other Explorers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:18 +msgid "Owner Address" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:19 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:26 +msgid "POST" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:39 +msgid "Page" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:33 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:40 +msgid "Parameters" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:45 +msgid "Parent Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:59 +#: lib/block_scout_web/views/transaction_view.ex:186 +#: lib/block_scout_web/views/transaction_view.ex:220 +msgid "Pending" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:4 +msgid "Pending Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:84 +msgid "Position %{index}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:17 +msgid "Potential matches from our contract method database:" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:24 +#: 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:144 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:36 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:105 +msgid "QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:22 +msgid "Query" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:90 +msgid "RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:109 +msgid "Raw Input" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 +#: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 +#: lib/block_scout_web/views/transaction_view.ex:319 +msgid "Raw Trace" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:58 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:25 +#: lib/block_scout_web/views/address_view.ex:309 +#: lib/block_scout_web/views/tokens/overview_view.ex:37 +msgid "Read Contract" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:11 +msgid "Records" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:155 +msgid "Request URL" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:250 +msgid "Reset" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:173 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:134 +msgid "Response Body" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:185 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:147 +msgid "Responses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_tile.html.eex:47 +#: lib/block_scout_web/templates/chain/_block.html.eex:23 +#: lib/block_scout_web/views/internal_transaction_view.ex:28 +msgid "Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/admin/dashboard/index.html.eex:21 +msgid "Run" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:14 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:127 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:144 +msgid "Search" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:121 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:125 +msgid "Search by address, token symbol name, transaction hash, or block number" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:18 +msgid "Search network" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/address_token_balance/_token_balances.html.eex:30 +msgid "Search tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:27 +msgid "Self-Destruct" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:163 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:124 +msgid "Server Response" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:5 +msgid "Show" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:34 +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:37 +msgid "Show QR Code" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:48 +msgid "Show Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:34 +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:61 +#: lib/block_scout_web/templates/address_logs/index.html.eex:21 +#: lib/block_scout_web/templates/address_token/index.html.eex:13 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:20 +#: lib/block_scout_web/templates/address_transaction/index.html.eex:59 +#: lib/block_scout_web/templates/address_validation/index.html.eex:22 +#: lib/block_scout_web/templates/block_transaction/index.html.eex:23 +#: lib/block_scout_web/templates/chain/show.html.eex:91 +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:19 +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:21 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:20 +#: lib/block_scout_web/templates/transaction/index.html.eex:20 +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/index.html.eex:13 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:12 +msgid "Something went wrong, click to reload." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:117 +msgid "Something went wrong, click to retry." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/not_found.html.eex:7 +msgid "Sorry, We are unable to locate this transaction Hash" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/internal_transaction_view.ex:24 +msgid "Static Call" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:34 +msgid "Submit an Issue" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 +#: lib/block_scout_web/views/transaction_view.ex:188 +msgid "Success" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:37 +msgid "Support" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:21 +#: lib/block_scout_web/templates/transaction/_tile.html.eex:32 +#: lib/block_scout_web/templates/transaction/overview.html.eex:84 +msgid "TX Fee" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:25 +msgid "Telegram" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:57 +msgid "Test Networks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:23 +msgid "Testnet" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_validation/index.html.eex:18 +msgid "There are no blocks validated by this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/index.html.eex:18 +msgid "There are no blocks." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:26 +msgid "There are no holders for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:65 +msgid "There are no internal transactions for this address." +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/transaction_internal_transaction/index.html.eex:15 +msgid "There are no internal transactions for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:26 +msgid "There are no logs for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_log/index.html.eex:18 +msgid "There are no logs for this transaction." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/pending_transaction/index.html.eex:23 +msgid "There are no pending transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:15 +msgid "There are no token transfers for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:17 +msgid "There are no token transfers for this transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_token/index.html.eex:18 +msgid "There are no tokens for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/index.html.eex:26 +msgid "There are no tokens." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_transaction/index.html.eex:64 +msgid "There are no transactions for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block_transaction/index.html.eex:28 +msgid "There are no transactions for this block." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:26 +msgid "There are no transactions." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:25 +msgid "There are no transfers for this Token." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:39 +msgid "There is no coin history for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:27 +msgid "There is no decompilded contracts for this address." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:25 +#: lib/block_scout_web/templates/chain/show.html.eex:16 +msgid "There was a problem loading the chart." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/index.html.eex:6 +msgid "This API is provided for developers transitioning their applications from Etherscan to BlockScout. It supports GET and POST requests." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:7 +msgid "This API is provided to support some rpc methods in the exact format specified for ethereum nodes, which can be found " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_transaction_view.ex:11 +msgid "This block has not been processed yet." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:10 +msgid "This is useful to allow sending requests to blockscout without having to change anything about the request." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:35 +msgid "This transaction is pending confirmation." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:33 +#: 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_transaction_view.ex:6 +msgid "To" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:19 +msgid "To have guaranteed accuracy, use the link above to verify the contract's source code." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:6 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:8 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:6 +msgid "To see accurate decoded input data, the contract must be verified." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:20 +msgid "Toggle navigation" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:10 +msgid "Token Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/holder/index.html.eex:16 +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:9 +#: lib/block_scout_web/views/tokens/overview_view.ex:36 +msgid "Token Holders" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:11 +msgid "Token ID" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 +#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 +#: lib/block_scout_web/views/transaction_view.ex:262 +msgid "Token Transfer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:3 +#: lib/block_scout_web/templates/tokens/transfer/index.html.eex:15 +#: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 +#: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 +#: lib/block_scout_web/views/tokens/overview_view.ex:35 +#: lib/block_scout_web/views/transaction_view.ex:316 +msgid "Token Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:8 +#: lib/block_scout_web/templates/address_token/index.html.eex:8 +#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:9 +#: lib/block_scout_web/views/address_view.ex:304 +msgid "Tokens" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:13 +msgid "Top Accounts - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/index.html.eex:12 +msgid "Topic" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:145 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:149 +msgid "Topics" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:67 +msgid "Total Difficulty" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:75 +msgid "Total Supply" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:64 +msgid "Total blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:56 +msgid "Total transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 +#: lib/block_scout_web/views/transaction_view.ex:265 +msgid "Transaction" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:3 +msgid "Transaction %{transaction} - %{subnetwork} Explorer" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:11 +msgid "Transaction %{transaction}, %{subnetwork} %{transaction}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:11 +msgid "Transaction Details" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:2 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:16 +msgid "Transaction Inputs" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:101 +msgid "Transaction Speed" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tabs.html.eex:3 +#: 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:18 +#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:50 +#: lib/block_scout_web/views/address_view.ex:305 +msgid "Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:84 +msgid "Transactions Sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:31 +msgid "Transactions sent" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:61 +msgid "Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:40 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:47 +msgid "Try it out" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:22 +msgid "Twitter" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:54 +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:107 +#: lib/block_scout_web/templates/transaction/_decoded_input_body.html.eex:20 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:57 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:110 +msgid "Type" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:122 +msgid "UTF-8" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/block_view.ex:64 +msgid "Uncle Reward" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/overview.html.eex:80 +#: lib/block_scout_web/templates/layout/_topnav.html.eex:38 +msgid "Uncles" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/inventory/_token.html.eex:6 +msgid "Unique Token" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_network_selector.html.eex:12 +msgid "Use the search box to find a hosted network, or select from the list of available networks below." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:231 +msgid "Used" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_topnav.html.eex:54 +msgid "Validated" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/index.html.eex:4 +msgid "Validated Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_tile.html.eex:35 +msgid "Validations" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:30 +msgid "Validator Creation Date" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_validator_metadata_modal.html.eex:5 +msgid "Validator Data" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:52 +msgid "Validator Info" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/overview.html.eex:179 +#: lib/block_scout_web/templates/transaction/overview.html.eex:209 +msgid "Value" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract/index.html.eex:11 +#: lib/block_scout_web/templates/address_contract/index.html.eex:16 +msgid "Verify & Publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:249 +msgid "Verify & publish" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 +msgid "Verify the contract " +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/layout/_footer.html.eex:83 +msgid "Version" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:86 +msgid "View All Blocks" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:107 +msgid "View All Transactions" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:55 +msgid "View Contract" +msgstr "" + +#, elixir-format +#: 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:52 +msgid "View More Transfers" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/_metatags.html.eex:9 +msgid "View the account balance, transactions, and other data for %{address} on the %{network}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/block/_metatags.html.eex:10 +msgid "View the transactions, token transfers, and uncles for block number %{block_number}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/_metatags.html.eex:10 +msgid "View transaction %{transaction} on %{subnetwork}" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:49 +msgid "WEI" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/chain/show.html.eex:72 +msgid "Wallet addresses" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/wei_helpers.ex:76 +msgid "Wei" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_contract_verification/new.html.eex:72 +msgid "Yes" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address/overview.html.eex:112 +msgid "at" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:12 +msgid "custom RPC" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:23 +msgid "false" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/address_logs/_logs.html.eex:9 +#: lib/block_scout_web/templates/transaction/_decoded_input.html.eex:11 +#: lib/block_scout_web/templates/transaction_log/_logs.html.eex:9 +msgid "here" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/eth_rpc.html.eex:9 +msgid "here." +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/transaction/invalid.html.eex:8 +msgid "is not a valid transaction hash" +msgstr "" + +#, elixir-format +#: +#: lib/block_scout_web/templates/common_components/_pagination_container.html.eex:39 +msgid "of" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:58 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:69 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:81 +#: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:70 +msgid "required" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:59 +#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:70 +msgid "string" +msgstr "" + +#, elixir-format +#: lib/block_scout_web/views/address_contract_view.ex:22 +msgid "true" +msgstr "" From 9813870728a9097dd6969744b8056b43ed141228 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:22:49 +0300 Subject: [PATCH 075/109] add default case --- .../lib/block_scout_web/views/transaction_view.ex | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex b/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex index 864dd6c1dc..121bd6ad5e 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex @@ -135,14 +135,11 @@ defmodule BlockScoutWeb.TransactionView do def confirmations(%Transaction{block: block}, named_arguments) when is_list(named_arguments) do case block do - nil -> - 0 - %Block{consensus: true} -> {:ok, confirmations} = Chain.confirmations(block, named_arguments) BlockScoutWeb.Cldr.Number.to_string!(confirmations, format: "#,###") - %Block{consensus: false} -> + _ -> 0 end end From 6b3801be8360929acf3c080d2f263d1c48f22741 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:25:13 +0300 Subject: [PATCH 076/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bce3c66497..ca60257372 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks - [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates - [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons - [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query From 403216a87208f53f508e1143f98347c60bd350cb Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:25:57 +0300 Subject: [PATCH 077/109] fix gettext --- apps/block_scout_web/priv/gettext/default.pot | 32 +++++++++---------- .../priv/gettext/en/LC_MESSAGES/default.po | 32 +++++++++---------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 8ab78b1a4c..92d2604165 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -59,7 +59,7 @@ msgid "%{subnetwork} Explorer - BlockScout" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:187 +#: lib/block_scout_web/views/transaction_view.ex:184 msgid "(Awaiting internal transactions for status)" msgstr "" @@ -397,12 +397,12 @@ msgid "Contract Byte Code" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:264 +#: lib/block_scout_web/views/transaction_view.ex:261 msgid "Contract Call" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:263 +#: lib/block_scout_web/views/transaction_view.ex:260 msgid "Contract Creation" msgstr "" @@ -652,12 +652,12 @@ msgid "Error trying to fetch balances." msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:191 +#: lib/block_scout_web/views/transaction_view.ex:188 msgid "Error: %{reason}" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:189 +#: lib/block_scout_web/views/transaction_view.ex:186 msgid "Error: (Awaiting internal transactions for reason)" msgstr "" @@ -855,7 +855,7 @@ msgstr "" #: 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/views/address_view.ex:306 -#: lib/block_scout_web/views/transaction_view.ex:317 +#: lib/block_scout_web/views/transaction_view.ex:314 msgid "Internal Transactions" msgstr "" @@ -951,7 +951,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/views/address_view.ex:312 -#: lib/block_scout_web/views/transaction_view.ex:318 +#: lib/block_scout_web/views/transaction_view.ex:315 msgid "Logs" msgstr "" @@ -974,8 +974,8 @@ msgid "Market Cap" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:172 -#: lib/block_scout_web/views/transaction_view.ex:172 +#: lib/block_scout_web/views/transaction_view.ex:169 +#: lib/block_scout_web/views/transaction_view.ex:169 msgid "Max of" msgstr "" @@ -1103,8 +1103,8 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/layout/_topnav.html.eex:59 -#: lib/block_scout_web/views/transaction_view.ex:186 -#: lib/block_scout_web/views/transaction_view.ex:220 +#: lib/block_scout_web/views/transaction_view.ex:183 +#: lib/block_scout_web/views/transaction_view.ex:217 msgid "Pending" msgstr "" @@ -1155,7 +1155,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 -#: lib/block_scout_web/views/transaction_view.ex:319 +#: lib/block_scout_web/views/transaction_view.ex:316 msgid "Raw Trace" msgstr "" @@ -1302,7 +1302,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 -#: lib/block_scout_web/views/transaction_view.ex:188 +#: lib/block_scout_web/views/transaction_view.ex:185 msgid "Success" msgstr "" @@ -1500,7 +1500,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 -#: lib/block_scout_web/views/transaction_view.ex:262 +#: lib/block_scout_web/views/transaction_view.ex:259 msgid "Token Transfer" msgstr "" @@ -1510,7 +1510,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 #: lib/block_scout_web/views/tokens/overview_view.ex:35 -#: lib/block_scout_web/views/transaction_view.ex:316 +#: lib/block_scout_web/views/transaction_view.ex:313 msgid "Token Transfers" msgstr "" @@ -1560,7 +1560,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 -#: lib/block_scout_web/views/transaction_view.ex:265 +#: lib/block_scout_web/views/transaction_view.ex:262 msgid "Transaction" 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 8ab78b1a4c..92d2604165 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 @@ -59,7 +59,7 @@ msgid "%{subnetwork} Explorer - BlockScout" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:187 +#: lib/block_scout_web/views/transaction_view.ex:184 msgid "(Awaiting internal transactions for status)" msgstr "" @@ -397,12 +397,12 @@ msgid "Contract Byte Code" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:264 +#: lib/block_scout_web/views/transaction_view.ex:261 msgid "Contract Call" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:263 +#: lib/block_scout_web/views/transaction_view.ex:260 msgid "Contract Creation" msgstr "" @@ -652,12 +652,12 @@ msgid "Error trying to fetch balances." msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:191 +#: lib/block_scout_web/views/transaction_view.ex:188 msgid "Error: %{reason}" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:189 +#: lib/block_scout_web/views/transaction_view.ex:186 msgid "Error: (Awaiting internal transactions for reason)" msgstr "" @@ -855,7 +855,7 @@ msgstr "" #: 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/views/address_view.ex:306 -#: lib/block_scout_web/views/transaction_view.ex:317 +#: lib/block_scout_web/views/transaction_view.ex:314 msgid "Internal Transactions" msgstr "" @@ -951,7 +951,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: lib/block_scout_web/templates/transaction_log/index.html.eex:8 #: lib/block_scout_web/views/address_view.ex:312 -#: lib/block_scout_web/views/transaction_view.ex:318 +#: lib/block_scout_web/views/transaction_view.ex:315 msgid "Logs" msgstr "" @@ -974,8 +974,8 @@ msgid "Market Cap" msgstr "" #, elixir-format -#: lib/block_scout_web/views/transaction_view.ex:172 -#: lib/block_scout_web/views/transaction_view.ex:172 +#: lib/block_scout_web/views/transaction_view.ex:169 +#: lib/block_scout_web/views/transaction_view.ex:169 msgid "Max of" msgstr "" @@ -1103,8 +1103,8 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/layout/_topnav.html.eex:59 -#: lib/block_scout_web/views/transaction_view.ex:186 -#: lib/block_scout_web/views/transaction_view.ex:220 +#: lib/block_scout_web/views/transaction_view.ex:183 +#: lib/block_scout_web/views/transaction_view.ex:217 msgid "Pending" msgstr "" @@ -1155,7 +1155,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: lib/block_scout_web/templates/transaction_raw_trace/index.html.eex:7 -#: lib/block_scout_web/views/transaction_view.ex:319 +#: lib/block_scout_web/views/transaction_view.ex:316 msgid "Raw Trace" msgstr "" @@ -1302,7 +1302,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 -#: lib/block_scout_web/views/transaction_view.ex:188 +#: lib/block_scout_web/views/transaction_view.ex:185 msgid "Success" msgstr "" @@ -1500,7 +1500,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 -#: lib/block_scout_web/views/transaction_view.ex:262 +#: lib/block_scout_web/views/transaction_view.ex:259 msgid "Token Transfer" msgstr "" @@ -1510,7 +1510,7 @@ msgstr "" #: lib/block_scout_web/templates/transaction/_tabs.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/index.html.eex:7 #: lib/block_scout_web/views/tokens/overview_view.ex:35 -#: lib/block_scout_web/views/transaction_view.ex:316 +#: lib/block_scout_web/views/transaction_view.ex:313 msgid "Token Transfers" msgstr "" @@ -1560,7 +1560,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 -#: lib/block_scout_web/views/transaction_view.ex:265 +#: lib/block_scout_web/views/transaction_view.ex:262 msgid "Transaction" msgstr "" From a2783579ce652c7f0cdd81101b06416fa918f88d Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:37:37 +0300 Subject: [PATCH 078/109] fix tests --- apps/block_scout_web/lib/block_scout_web/views/wei_helpers.ex | 4 ++-- .../test/block_scout_web/views/block_view_test.exs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/views/wei_helpers.ex b/apps/block_scout_web/lib/block_scout_web/views/wei_helpers.ex index c9dfefa7b7..992909524a 100644 --- a/apps/block_scout_web/lib/block_scout_web/views/wei_helpers.ex +++ b/apps/block_scout_web/lib/block_scout_web/views/wei_helpers.ex @@ -35,7 +35,7 @@ defmodule BlockScoutWeb.WeiHelpers do "10,000 Gwei" iex> format_wei_value(%Wei{value: Decimal.new(1, 10, 21)}, :ether) - "10,000 POA" + "10,000 Ether" # With formatting options @@ -43,7 +43,7 @@ defmodule BlockScoutWeb.WeiHelpers do ...> %Wei{value: Decimal.new(1000500000000000000)}, ...> :ether ...> ) - "1.0005 POA" + "1.0005 Ether" iex> format_wei_value( ...> %Wei{value: Decimal.new(10)}, diff --git a/apps/block_scout_web/test/block_scout_web/views/block_view_test.exs b/apps/block_scout_web/test/block_scout_web/views/block_view_test.exs index a25922cd07..d707404628 100644 --- a/apps/block_scout_web/test/block_scout_web/views/block_view_test.exs +++ b/apps/block_scout_web/test/block_scout_web/views/block_view_test.exs @@ -91,7 +91,7 @@ defmodule BlockScoutWeb.BlockViewTest do block = Repo.preload(block, :rewards) - assert BlockView.combined_rewards_value(block) == "3.000042 POA" + assert BlockView.combined_rewards_value(block) == "3.000042 Ether" end end end From f48ef86227156a3293b5b2ee731de6b93d8f1a27 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Mon, 2 Sep 2019 14:50:07 +0300 Subject: [PATCH 079/109] fix remaining tests --- .../block_scout_web/features/viewing_addresses_test.exs | 2 +- .../views/address_coin_balance_view_test.exs | 8 ++++---- .../test/block_scout_web/views/transaction_view_test.exs | 7 ++----- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/apps/block_scout_web/test/block_scout_web/features/viewing_addresses_test.exs b/apps/block_scout_web/test/block_scout_web/features/viewing_addresses_test.exs index 7f42b4cbcc..b5f17afc49 100644 --- a/apps/block_scout_web/test/block_scout_web/features/viewing_addresses_test.exs +++ b/apps/block_scout_web/test/block_scout_web/features/viewing_addresses_test.exs @@ -73,7 +73,7 @@ defmodule BlockScoutWeb.ViewingAddressesTest do session |> AddressPage.visit_page(address) - |> assert_text(AddressPage.balance(), "0.0000000000000005 POA") + |> assert_text(AddressPage.balance(), "0.0000000000000005 Ether") end describe "viewing contract creator" do diff --git a/apps/block_scout_web/test/block_scout_web/views/address_coin_balance_view_test.exs b/apps/block_scout_web/test/block_scout_web/views/address_coin_balance_view_test.exs index e7b56ff560..348dc96f6c 100644 --- a/apps/block_scout_web/test/block_scout_web/views/address_coin_balance_view_test.exs +++ b/apps/block_scout_web/test/block_scout_web/views/address_coin_balance_view_test.exs @@ -8,13 +8,13 @@ defmodule BlockScoutWeb.AddressCoinBalanceViewTest do test "format the wei value in ether" do wei = Wei.from(Decimal.new(1_340_000_000), :gwei) - assert AddressCoinBalanceView.format(wei) == "1.34 POA" + assert AddressCoinBalanceView.format(wei) == "1.34 Ether" end test "format negative values" do wei = Wei.from(Decimal.new(-1_340_000_000), :gwei) - assert AddressCoinBalanceView.format(wei) == "-1.34 POA" + assert AddressCoinBalanceView.format(wei) == "-1.34 Ether" end end @@ -50,13 +50,13 @@ defmodule BlockScoutWeb.AddressCoinBalanceViewTest do test "format positive values" do value = Decimal.new(1_340_000_000_000_000_000) - assert AddressCoinBalanceView.format_delta(value) == "1.34 POA" + assert AddressCoinBalanceView.format_delta(value) == "1.34 Ether" end test "format negative values" do value = Decimal.new(-1_340_000_000_000_000_000) - assert AddressCoinBalanceView.format_delta(value) == "1.34 POA" + assert AddressCoinBalanceView.format_delta(value) == "1.34 Ether" end end end diff --git a/apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs b/apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs index 69cca69f41..e8505b144e 100644 --- a/apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs +++ b/apps/block_scout_web/test/block_scout_web/views/transaction_view_test.exs @@ -136,7 +136,7 @@ defmodule BlockScoutWeb.TransactionViewTest do gas_used: nil ) - expected_value = "Max of 0.009 POA" + expected_value = "Max of 0.009 Ether" assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether) end @@ -144,12 +144,9 @@ defmodule BlockScoutWeb.TransactionViewTest do {:ok, gas_price} = Wei.cast(3_000_000_000) transaction = build(:transaction, gas_price: gas_price, gas_used: Decimal.from_float(1_034_234.0)) - expected_value = "0.003102702 POA" + expected_value = "0.003102702 Ether" assert expected_value == TransactionView.formatted_fee(transaction, denomination: :ether) end - - test "with fee but no available exchange_rate" do - end end describe "formatted_status/1" do From a72242ac90352fa58d096855f7b5b3ccf15bf2ad Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 17:47:27 +0300 Subject: [PATCH 080/109] Revert some unintentional changes --- apps/block_scout_web/assets/css/app.scss | 11 +- .../assets/css/components/_card.scss | 344 ++++++++++-------- .../templates/block/overview.html.eex | 21 +- 3 files changed, 207 insertions(+), 169 deletions(-) diff --git a/apps/block_scout_web/assets/css/app.scss b/apps/block_scout_web/assets/css/app.scss index b4c9649d66..4563ec33d5 100644 --- a/apps/block_scout_web/assets/css/app.scss +++ b/apps/block_scout_web/assets/css/app.scss @@ -13,10 +13,13 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "fa-brands"; @import "fa-regular"; @import "fa-solid"; + // Bootstrap Core CSS @import "node_modules/bootstrap/scss/functions"; @import "node_modules/bootstrap/scss/mixins"; + @import "theme/variables"; + @import "node_modules/bootstrap/scss/root"; @import "node_modules/bootstrap/scss/reboot"; @import "node_modules/bootstrap/scss/grid"; @@ -35,6 +38,7 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "node_modules/bootstrap/scss/utilities/position"; @import "node_modules/bootstrap/scss/utilities/borders"; @import "node_modules/bootstrap/scss/progress"; + // Bootstrap Components @import "node_modules/bootstrap/scss/alert"; @import "node_modules/bootstrap/scss/badge"; @@ -46,10 +50,13 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "node_modules/bootstrap/scss/pagination"; @import "node_modules/bootstrap/scss/tables"; @import "node_modules/bootstrap/scss/transitions"; + // Code highlight @import "node_modules/highlight.js/styles/default"; + //Custom theme @import "theme/fonts"; + // Custom SCSS @import "layout"; @import "typography"; @@ -107,7 +114,9 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; @import "components/radio_big"; @import "components/btn_no_border"; @import "components/custom_tooltips_block_details"; + @import "theme/dark-theme"; + :export { dashboardBannerChartAxisFontColor: $dashboard-banner-chart-axis-font-color; dashboardLineColorMarket: $dashboard-line-color-market; @@ -117,5 +126,3 @@ $fa-font-path: "~@fortawesome/fontawesome-free/webfonts"; darkprimary: $dark-primary; darksecondary: $dark-secondary; } - - diff --git a/apps/block_scout_web/assets/css/components/_card.scss b/apps/block_scout_web/assets/css/components/_card.scss index 80d97305b5..0e5fa8cb2a 100644 --- a/apps/block_scout_web/assets/css/components/_card.scss +++ b/apps/block_scout_web/assets/css/components/_card.scss @@ -7,214 +7,244 @@ $card-background-1: $primary !default; $card-background-1-text-color: #fff !default; $card-tab-icon-color: #20b760 !default; $card-tab-icon-color-active: #fff !default; + .card { - background-color: $card-background-color; - border-radius: $card-default-border-radius; - border: none; - box-shadow: 0 0 30px 0 rgba(202, 199, 226, 0.5); - margin-bottom: $common-container-margin; - .block-details-row { - flex-direction: row; + background-color: $card-background-color; + border-radius: $card-default-border-radius; + border: none; + box-shadow: 0 0 30px 0 rgba(202, 199, 226, 0.5); + margin-bottom: $common-container-margin; + + .block-details-row { + flex-direction: row; + @include media-breakpoint-down(sm) { + flex-direction: column; + } + + .block-detail-el { + & + .block-detail-el { @include media-breakpoint-down(sm) { - flex-direction: column; - } - .block-detail-el { - &+.block-detail-el { - @include media-breakpoint-down(sm) { - margin-top: 6px; - } - } + margin-top: 6px; } + } } + } } .card-background-1 { - background-color: $card-background-1; + background-color: $card-background-1; + color: $card-background-1-text-color; + + a:not(.dropdown-item), + a:not(.dropdown-item):hover { color: $card-background-1-text-color; - a:not(.dropdown-item), - a:not(.dropdown-item):hover { - color: $card-background-1-text-color; - } + } } .card-header { - background: transparent; - border-bottom: 1px solid $base-border-color; - padding: $card-vertical-padding $card-horizontal-padding; - &-tabs { - margin: (-$card-spacer-y) (-$card-spacer-x); - } + background: transparent; + border-bottom: 1px solid $base-border-color; + padding: $card-vertical-padding $card-horizontal-padding; + + &-tabs { + margin: (-$card-spacer-y) (-$card-spacer-x); + } } .card-title { - font-size: 18px; - font-weight: normal; - line-height: 1.2rem; - margin-bottom: 2rem; - &.lg-card-title { - @media (max-width: 374px) { - font-size: 13px; - } - } - &.margin-bottom-md { - margin-bottom: 25px; - } - &.margin-bottom-sm { - margin-bottom: 15px; - } - &.margin-bottom-xs { - margin-bottom: 10px; - } - &.margin-bottom-0 { - margin-bottom: 0; + font-size: 18px; + font-weight: normal; + line-height: 1.2rem; + margin-bottom: 2rem; + + &.lg-card-title { + @media (max-width: 374px) { + font-size: 13px; } - .card-title-container & { - line-height: 1.2; - margin: 0; - @include media-breakpoint-down(sm) { - margin-bottom: 25px; - } + } + + &.margin-bottom-md { + margin-bottom: 25px; + } + + &.margin-bottom-sm { + margin-bottom: 15px; + } + + &.margin-bottom-xs { + margin-bottom: 10px; + } + + &.margin-bottom-0 { + margin-bottom: 0; + } + + .card-title-container & { + line-height: 1.2; + margin: 0; + + @include media-breakpoint-down(sm) { + margin-bottom: 25px; } + } } .card-subtitle { - color: #333; - font-size: 12px; - font-weight: normal; - line-height: 1.2; - margin: 0 0 30px; - &.margin-bottom-0 { - margin-bottom: 0; - } + color: #333; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + margin: 0 0 30px; + + &.margin-bottom-0 { + margin-bottom: 0; + } } .card-title-container { - align-items: center; - display: flex; - justify-content: space-between; - padding: 25px $card-horizontal-padding; - @include media-breakpoint-down(sm) { - flex-direction: column; - } + align-items: center; + display: flex; + justify-content: space-between; + padding: 25px $card-horizontal-padding; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } } .card-title-controls { - align-items: center; - display: flex; - justify-content: flex-end; - @include media-breakpoint-down(sm) { - flex-direction: column; + align-items: center; + display: flex; + justify-content: flex-end; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } + + .card-title-control { + margin-right: 20px; + + &:last-child { + margin-right: 0; } - .card-title-control { - margin-right: 20px; - &:last-child { - margin-right: 0; - } - @include media-breakpoint-down(sm) { - margin-bottom: 20px; - margin-right: 0; - &:last-child { - margin-bottom: 0; - } - } + + @include media-breakpoint-down(sm) { + margin-bottom: 20px; + margin-right: 0; + + &:last-child { + margin-bottom: 0; + } } + } } .card-body { - padding: $card-horizontal-padding; + padding: $card-horizontal-padding; } .card-body-flex-column-space-between { - display: flex; - flex-direction: column; - justify-content: space-between; + display: flex; + flex-direction: column; + justify-content: space-between; } .card-server-response-body { - max-height: 400px; - overflow-y: auto; + max-height: 400px; + overflow-y: auto; } .card-chain-blocks { - height: auto; - [class*="col-"]:last-child { - .tile { - margin-bottom: 0; - } + height: auto; + + [class*="col-"]:last-child { + .tile { + margin-bottom: 0; } + } } .card-chain-transactions { - height: auto; - .tile { - margin-bottom: 0; - } + height: auto; + + .tile { + margin-bottom: 0; + } } .card-tabs { - align-items: center; - border-top-left-radius: $card-default-border-radius; - border-top-right-radius: $card-default-border-radius; - border-bottom: 1px solid $base-border-color; - display: flex; - justify-content: flex-start; - overflow: hidden; - @include media-breakpoint-down(md) { - flex-direction: column; - } + align-items: center; + border-top-left-radius: $card-default-border-radius; + border-top-right-radius: $card-default-border-radius; + border-bottom: 1px solid $base-border-color; + display: flex; + justify-content: flex-start; + overflow: hidden; + + @include media-breakpoint-down(md) { + flex-direction: column; + } } .card-tab { - align-items: center; - background-color: $card-background-color; - color: #333; - cursor: pointer; - display: flex; - font-size: 14px; - font-weight: normal; - height: 70px; - padding: 0 25px; - text-align: center; - transition: $transition-cont; - &:hover { - background-color: rgba($card-tab-active, .15); - color: $card-tab-active; - text-decoration: none; + align-items: center; + background-color: $card-background-color; + color: #333; + cursor: pointer; + display: flex; + font-size: 14px; + font-weight: normal; + height: 70px; + padding: 0 25px; + text-align: center; + transition: $transition-cont; + + &:hover { + background-color: rgba($card-tab-active, .15); + color: $card-tab-active; + text-decoration: none; + } + + @include media-breakpoint-down(md) { + display: none; + width: 100%; + } + + .fa-check-circle { + color: $card-tab-icon-color; + margin-left: 6px; + } + + &.active { + background-color: $card-tab-active; + color: #fff; + cursor: default; + text-decoration: none; + + .fa-check-circle { + color: $card-tab-icon-color-active; } + @include media-breakpoint-down(md) { + cursor: pointer; + display: flex; + order: -1; + + &::after { + border-bottom: 0; + border-left: 0.3em solid transparent; + border-right: 0.3em solid transparent; + border-top: 0.3em solid; + content: ""; + display: inline-block; + height: 0; + margin-left: 10px; + width: 0; + } + + &.noCaret::after { display: none; - width: 100%; - } - .fa-check-circle { - color: $card-tab-icon-color; - margin-left: 6px; - } - &.active { - background-color: $card-tab-active; - color: #fff; - cursor: default; - text-decoration: none; - .fa-check-circle { - color: $card-tab-icon-color-active; - } - @include media-breakpoint-down(md) { - cursor: pointer; - display: flex; - order: -1; - &::after { - border-bottom: 0; - border-left: 0.3em solid transparent; - border-right: 0.3em solid transparent; - border-top: 0.3em solid; - content: ""; - display: inline-block; - height: 0; - margin-left: 10px; - width: 0; - } - &.noCaret::after { - display: none; - } - } + } } + } } \ No newline at end of file diff --git a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex index 42bfb43986..a621a00c03 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex @@ -7,29 +7,33 @@

<%= gettext("%{block_type} Details", block_type: block_type(@block)) %>

- -

- <%= if block_type(@block) == "Block" do %> + +

+ <%= if block_type(@block) == "Block" do %> <%= gettext("Block Height: %{height}", height: @block.number) %> <%= if @block.number == 0, do: "- " <> gettext("Genesis Block")%> <% else %> <%= gettext("%{block_type} Height:", block_type: block_type(@block)) %> <%= link(@block, to: block_path(BlockScoutWeb.Endpoint, :show, @block.number)) %> - <% end %> + <% end %>

<%= gettext "%{count} Transactions", count: @block_transaction_count %> + <%= if @block.size do %> <%= Cldr.Unit.new(:byte, @block.size) |> cldr_unit_to_string!() %> <% end %> +
+
+ -
+
<%= gettext "Hash" %>
<%= to_string(@block.hash) %>
@@ -91,6 +95,7 @@
<% end %> + <%= if show_reward?(@block.rewards) do %>
@@ -135,17 +140,13 @@
-
+
- <%= if show_reward?(@block.rewards) do %>

<%= gettext "Block Rewards" %>

- <%= for block_reward <- @block.rewards do %> -

<%= block_reward_text(block_reward) %> <%= format_wei_value(block_reward.reward, :ether) %>

- <% end %>
<% else %> From fd83e040382cd3fcaa52bc449d70f78546c487a1 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 18:04:04 +0300 Subject: [PATCH 081/109] Additional cleanup --- apps/block_scout_web/assets/css/components/_card.scss | 2 +- .../lib/block_scout_web/templates/block/overview.html.eex | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_card.scss b/apps/block_scout_web/assets/css/components/_card.scss index 0e5fa8cb2a..0737e1b355 100644 --- a/apps/block_scout_web/assets/css/components/_card.scss +++ b/apps/block_scout_web/assets/css/components/_card.scss @@ -247,4 +247,4 @@ $card-tab-icon-color-active: #fff !default; } } } -} \ No newline at end of file +} diff --git a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex index a621a00c03..752fd314e3 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/block/overview.html.eex @@ -34,7 +34,7 @@
-
<%= gettext "Hash" %>
+
<%= gettext "Hash" %>
<%= to_string(@block.hash) %>
@@ -57,7 +57,7 @@
<%= gettext "Difficulty" %>
-
+
<%= @block.difficulty |> BlockScoutWeb.Cldr.Number.to_string! %>
@@ -146,7 +146,7 @@

<%= gettext "Block Rewards" %>

<%= for block_reward <- @block.rewards do %> -

<%= block_reward_text(block_reward) %> <%= format_wei_value(block_reward.reward, :ether) %>

+

<%= block_reward_text(block_reward) %> <%= format_wei_value(block_reward.reward, :ether) %>

<% end %>
<% else %> @@ -157,7 +157,6 @@ (<%= (Decimal.to_integer(@block.gas_used) / Decimal.to_integer(@block.gas_limit)) |> BlockScoutWeb.Cldr.Number.to_string!(format: "#.#%") %>)

<%= @block.gas_limit |> BlockScoutWeb.Cldr.Number.to_string! %><%= gettext "Gas Limit" %>

-
<% end %>
From 0771ecc5bae3310599835bc67f0a21acce4cedc5 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 18:06:12 +0300 Subject: [PATCH 082/109] gettext fix --- apps/block_scout_web/priv/gettext/default.pot | 26 +++++++++---------- .../priv/gettext/en/LC_MESSAGES/default.po | 26 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index 5bbd00fa38..8ed33c7405 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:55 +#: lib/block_scout_web/templates/block/overview.html.eex:59 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:104 -#: lib/block_scout_web/templates/block/overview.html.eex:158 +#: lib/block_scout_web/templates/block/overview.html.eex:109 +#: lib/block_scout_web/templates/block/overview.html.eex:159 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:97 -#: lib/block_scout_web/templates/block/overview.html.eex:152 +#: lib/block_scout_web/templates/block/overview.html.eex:102 +#: lib/block_scout_web/templates/block/overview.html.eex:153 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:33 +#: lib/block_scout_web/templates/block/overview.html.eex:37 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:120 +#: lib/block_scout_web/templates/block/overview.html.eex:125 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -574,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:70 +#: lib/block_scout_web/templates/block/overview.html.eex:74 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -608,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:40 +#: lib/block_scout_web/templates/block/overview.html.eex:44 msgid "Parent Hash" msgstr "" @@ -625,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:81 +#: lib/block_scout_web/templates/block/overview.html.eex:85 msgid "Position %{index}" msgstr "" @@ -838,7 +838,7 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:64 +#: lib/block_scout_web/templates/block/overview.html.eex:68 msgid "Total Difficulty" msgstr "" @@ -901,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:77 +#: lib/block_scout_web/templates/block/overview.html.eex:81 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1274,7 +1274,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:142 +#: lib/block_scout_web/templates/block/overview.html.eex:146 msgid "Block Rewards" 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 eb8d71480d..dcfd8b3a9e 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 @@ -349,7 +349,7 @@ msgid "Details" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:55 +#: lib/block_scout_web/templates/block/overview.html.eex:59 msgid "Difficulty" msgstr "" @@ -422,15 +422,15 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:56 -#: lib/block_scout_web/templates/block/overview.html.eex:104 -#: lib/block_scout_web/templates/block/overview.html.eex:158 +#: lib/block_scout_web/templates/block/overview.html.eex:109 +#: lib/block_scout_web/templates/block/overview.html.eex:159 msgid "Gas Limit" msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:61 -#: lib/block_scout_web/templates/block/overview.html.eex:97 -#: lib/block_scout_web/templates/block/overview.html.eex:152 +#: lib/block_scout_web/templates/block/overview.html.eex:102 +#: lib/block_scout_web/templates/block/overview.html.eex:153 msgid "Gas Used" msgstr "" @@ -446,7 +446,7 @@ msgid "Gwei" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:33 +#: lib/block_scout_web/templates/block/overview.html.eex:37 msgid "Hash" msgstr "" @@ -524,7 +524,7 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/block/_tile.html.eex:38 -#: lib/block_scout_web/templates/block/overview.html.eex:120 +#: lib/block_scout_web/templates/block/overview.html.eex:125 #: lib/block_scout_web/templates/chain/_block.html.eex:15 msgid "Miner" msgstr "" @@ -574,7 +574,7 @@ msgid "No" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:70 +#: lib/block_scout_web/templates/block/overview.html.eex:74 #: lib/block_scout_web/templates/transaction/overview.html.eex:79 msgid "Nonce" msgstr "" @@ -608,7 +608,7 @@ msgid "Parameters" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:40 +#: lib/block_scout_web/templates/block/overview.html.eex:44 msgid "Parent Hash" msgstr "" @@ -625,7 +625,7 @@ msgid "Pending Transactions" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:81 +#: lib/block_scout_web/templates/block/overview.html.eex:85 msgid "Position %{index}" msgstr "" @@ -838,7 +838,7 @@ msgid "Top Accounts - %{subnetwork} Explorer" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:64 +#: lib/block_scout_web/templates/block/overview.html.eex:68 msgid "Total Difficulty" msgstr "" @@ -901,7 +901,7 @@ msgid "Twitter" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:77 +#: lib/block_scout_web/templates/block/overview.html.eex:81 #: lib/block_scout_web/templates/layout/_topnav.html.eex:38 msgid "Uncles" msgstr "" @@ -1275,7 +1275,7 @@ msgid "Validator Info" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/block/overview.html.eex:142 +#: lib/block_scout_web/templates/block/overview.html.eex:146 msgid "Block Rewards" msgstr "" From c57c399457a8b69981e1bc5fd1f3378cb2a28989 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 18:55:24 +0300 Subject: [PATCH 083/109] Cleanup _dashboard-banner.scss --- .../css/components/_dashboard-banner.scss | 369 ++++++++++-------- .../assets/css/components/_transaction.scss | 84 ++-- 2 files changed, 244 insertions(+), 209 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss index 0fb092044d..2372b53630 100644 --- a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss +++ b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss @@ -1,5 +1,8 @@ $dashboard-banner-gradient-start: $primary !default; -$dashboard-banner-gradient-end: lighten( $dashboard-banner-gradient-start, 5%) !default; +$dashboard-banner-gradient-end: lighten( + $dashboard-banner-gradient-start, + 5% +) !default; $dashboard-banner-network-plain-container-background-color: lighten( $dashboard-banner-gradient-end, 5%) !default; $dashboard-line-color-price: lighten( $dashboard-banner-gradient-end, 5%) !default; $dashboard-line-color-market: $secondary !default; @@ -10,186 +13,218 @@ $dashboard-banner-chart-legend-value-color: $dashboard-stats-item-value-color !d $dashboard-stats-item-border-color: $primary !default; $dashboard-banner-network-plain-container-height: 205px; $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !default; + .dashboard-banner-container { - @include gradient-container(); - margin-bottom: 3rem; - overflow: hidden; - padding: 0; - position: relative; - height: 249px; - @include media-breakpoint-down(sm) { - height: auto; - } - @include media-breakpoint-down(md) { - height: auto; - } + @include gradient-container(); + margin-bottom: 3rem; + overflow: hidden; + padding: 0; + position: relative; + height: 249px; + @include media-breakpoint-down(sm) { + height: auto; + } + @include media-breakpoint-down(md) { + height: auto; + } } + .dashboard-banner { - display: flex; - justify-content: space-between; - position: relative; - z-index: 9; - @include media-breakpoint-down(sm) { - flex-direction: column; - } + display: flex; + justify-content: space-between; + position: relative; + z-index: 9; + + @include media-breakpoint-down(sm) { + flex-direction: column; + } } + .dashboard-banner-network-graph { - flex-grow: 1; - padding: 15px 0 0 0; - @include media-breakpoint-down(md) { - display: flex; - flex-direction: column; - padding-top: 20px; - } + flex-grow: 1; + padding: 15px 0 0 0; + + @include media-breakpoint-down(md) { + display: flex; + flex-direction: column; + padding-top: 20px; + } } + .dashboard-banner-chart { - flex-grow: 1; - margin: 0 0 35px 0; - max-width: 350px; - position: relative; - @include media-breakpoint-down(md) { - flex-grow: 0; - margin-bottom: 20px; - margin-top: auto; - max-width: 100%; - } - >canvas { - max-height: 100%; - max-width: 100%; - width: 100%; - } + flex-grow: 1; + margin: 0 0 35px 0; + max-width: 350px; + position: relative; + + @include media-breakpoint-down(md) { + flex-grow: 0; + margin-bottom: 20px; + margin-top: auto; + max-width: 100%; + } + + > canvas { + max-height: 100%; + max-width: 100%; + width: 100%; + } } + .dashboard-banner-chart-legend { - display: flex; - /* grid-template-columns: 1fr 1fr; */ - padding-bottom: 12px; - .dashboard-banner-chart-legend-item { - padding-bottom: 3px; - padding-left: 12px; - padding-top: 3px; - position: relative; - padding-right: 60px; - @include media-breakpoint-down(md) { - display: flex; - flex-direction: row; - } - @media (max-width: 599px) { - padding-top: 0; - padding-bottom: 0; - flex-direction: column; - } - &::before { - border-radius: 2px; - content: ""; - height: 100%; - left: 0; - position: absolute; - top: 0; - width: 4px; - } - &:nth-child(1)::before { - background-color: $dashboard-line-color-price; - } - &:nth-child(2)::before { - background-color: $dashboard-line-color-market; - } - } - .dashboard-banner-chart-legend-label { - color: $dashboard-banner-chart-legend-label-color; - display: block; - font-size: 12px; - font-weight: 600; - line-height: 1.2; - margin: 0 0 5px; - @media (max-width: 374px) { - position: relative; - top: -2px; - } - @include media-breakpoint-down(md) { - margin: 0 5px 0 0; - } - } - .dashboard-banner-chart-legend-value { - color: $dashboard-banner-chart-legend-value-color; - display: block; - font-size: 12px; - font-weight: normal; - line-height: 1.2; - } + display: flex; + grid-template-columns: 1fr 1fr; + padding-bottom: 12px; + + .dashboard-banner-chart-legend-item { + padding-bottom: 3px; + padding-left: 12px; + padding-top: 3px; + position: relative; + padding-right: 60px; + + @include media-breakpoint-down(md) { + display: flex; + flex-direction: row; + } + + @media (max-width: 599px) { + padding-top: 0; + padding-bottom: 0; + flex-direction: column; + } + + &::before { + border-radius: 2px; + content: ""; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 4px; + } + + &:nth-child(1)::before { + background-color: $dashboard-line-color-price; + } + + &:nth-child(2)::before { + background-color: $dashboard-line-color-market; + } + } + + .dashboard-banner-chart-legend-label { + color: $dashboard-banner-chart-legend-label-color; + display: block; + font-size: 12px; + font-weight: 600; + line-height: 1.2; + margin: 0 0 5px; + + @media (max-width: 374px) { + position: relative; + top: -2px; + } + + @include media-breakpoint-down(md) { + margin: 0 5px 0 0; + } + } + + .dashboard-banner-chart-legend-value { + color: $dashboard-banner-chart-legend-value-color; + display: block; + font-size: 12px; + font-weight: normal; + line-height: 1.2; + } } + .dashboard-banner-network-plain-container { - align-items: center; - align-self: flex-end; + align-items: center; + align-self: flex-end; + background-color: $dashboard-banner-network-plain-container-background-color; + border-top-left-radius: 10px; + display: flex; + height: $dashboard-banner-network-plain-container-height; + justify-content: center; + margin: 0 0 0 30px; + max-width: 100%; + padding: 30px 0 30px 60px; + width: 750px; + position: relative; + + @include media-breakpoint-down(lg) { + margin-top: 15px; + width: 550px; + } + + @include media-breakpoint-down(md) { + border-top-right-radius: 10px; + height: auto; + justify-content: flex-start; + margin-left: 0; + max-width: 100%; + padding: 20px 0 20px 20px; + width: 250px; + box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); + } + + @include media-breakpoint-down(sm) { + width: 100%; + } + + &::after { background-color: $dashboard-banner-network-plain-container-background-color; - border-top-left-radius: 10px; - display: flex; + bottom: 0; + content: ""; + display: block; height: $dashboard-banner-network-plain-container-height; - justify-content: center; - margin: 45px 0 0 30px; - max-width: 100%; - padding: 30px 0 30px 60px; - width: 750px; - position: relative; - @include media-breakpoint-down(lg) { - margin-top: 50px; - width: 550px; - } + left: 0; + position: absolute; + width: 9999px; + z-index: -1; + box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); + border-top-left-radius: 10px; + @include media-breakpoint-down(md) { - border-top-right-radius: 10px; - height: auto; - justify-content: flex-start; - margin-left: 0; - max-width: 100%; - padding: 20px 0 20px 20px; - width: 250px; - box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); - } - @include media-breakpoint-down(sm) { - width: 100%; - } - &::after { - background-color: $dashboard-banner-network-plain-container-background-color; - bottom: 0; - content: ""; - display: block; - height: $dashboard-banner-network-plain-container-height; - left: 0; - position: absolute; - width: 9999px; - z-index: -1; - box-shadow: 0 0 35px 0 rgba(0, 0, 0, 0.2); - border-top-left-radius: 10px; - @include media-breakpoint-down(md) { - display: none; - } + display: none; } + } } + .dashboard-banner-network-stats { - column-gap: 25px; - display: grid; - grid-template-columns: 1fr 1fr 1fr 1fr; - @include media-breakpoint-down(lg) { - grid-template-columns: 1fr 1fr; - row-gap: 20px; - } - @include media-breakpoint-down(md) { - grid-template-columns: 1fr; - row-gap: 20px; - } - @include media-breakpoint-down(sm) { - column-gap: 10px; - grid-template-columns: 1fr 1fr; - } - @include stats-item( $dashboard-stats-item-border-color, $dashboard-stats-item-label-color, $dashboard-stats-item-value-color); - .dashboard-banner-network-stats-item { - @media (max-width: 374px) { - padding-left: calc(0.6rem + 4px); - padding-right: 0.5rem; - } - } - .dashboard-banner-network-stats-value { - @media (max-width: 374px) { - font-size: 0.9rem; - } - } -} + column-gap: 25px; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + + @include media-breakpoint-down(lg) { + grid-template-columns: 1fr 1fr; + row-gap: 20px; + } + + @include media-breakpoint-down(md) { + grid-template-columns: 1fr; + row-gap: 20px; + } + + @include media-breakpoint-down(sm) { + column-gap: 10px; + grid-template-columns: 1fr 1fr; + } + + @include stats-item($dashboard-stats-item-border-color, $dashboard-stats-item-label-color, $dashboard-stats-item-value-color); + + .dashboard-banner-network-stats-item { + @media (max-width: 374px) { + padding-left: calc(0.6rem + 4px); + padding-right: 0.5rem; + } + } + + .dashboard-banner-network-stats-value { + @media (max-width: 374px) { + font-size: 0.9rem; + } + } +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_transaction.scss b/apps/block_scout_web/assets/css/components/_transaction.scss index 15bc0f0e93..35cb0d59c0 100644 --- a/apps/block_scout_web/assets/css/components/_transaction.scss +++ b/apps/block_scout_web/assets/css/components/_transaction.scss @@ -1,53 +1,53 @@ .transaction-bottom-panel { - display: flex; - flex-direction: column; - @media (min-width: 768px) { - flex-direction: row; - justify-content: space-between; - align-items: flex-end; - } + display: flex; + flex-direction: column; + @media (min-width: 768px) { + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } } .transaction-bottom-panel { - display: flex; - flex-direction: column; - @media (min-width: 768px) { - flex-direction: row; - justify-content: space-between; - align-items: flex-end; - } + display: flex; + flex-direction: column; + @media (min-width: 768px) { + flex-direction: row; + justify-content: space-between; + align-items: flex-end; + } } .download-all-transactions { - text-align: center; - color: #a3a9b5; - font-size: 13px; - margin-top: 10px; - @media (min-width: 768px) { - margin-top: 30px; - } - .download-all-transactions-link { - display: inline-flex; - align-items: center; - text-decoration: none; - svg { - position: relative; - margin-left: 2px; - top: -3px; - left: 3px; - path { - fill: $primary; - } - } - &:hover { - text-decoration: underline; - } - } + text-align: center; + color: #a3a9b5; + font-size: 13px; + margin-top: 10px; + @media (min-width: 768px) { + margin-top: 30px; + } + .download-all-transactions-link { + display: inline-flex; + align-items: center; + text-decoration: none; + svg { + position: relative; + margin-left: 2px; + top: -3px; + left: 3px; + path { + fill: $primary; + } + } + &:hover { + text-decoration: underline; + } + } } .block-detail-number { - width: 25%; - @include media-breakpoint-down(sm) { - width: 60%; - } + width: 25%; + @include media-breakpoint-down(sm) { + width: 60%; + } } \ No newline at end of file From ed11cabcf64f78e0c8fdd133211e432175787f3a Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 19:14:28 +0300 Subject: [PATCH 084/109] Add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca60257372..9c8889f9e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2659](https://github.com/poanetwork/blockscout/pull/2659) - Multipurpose front-end part update - [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks - [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates - [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons From e8a2848edc7081f486a935d6f018dd0be6895f3e Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Mon, 2 Sep 2019 19:18:50 +0300 Subject: [PATCH 085/109] Remove unnecessary whitespaces --- .../assets/css/components/_dashboard-banner.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss index 2372b53630..7f8c83482f 100644 --- a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss +++ b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss @@ -3,8 +3,8 @@ $dashboard-banner-gradient-end: lighten( $dashboard-banner-gradient-start, 5% ) !default; -$dashboard-banner-network-plain-container-background-color: lighten( $dashboard-banner-gradient-end, 5%) !default; -$dashboard-line-color-price: lighten( $dashboard-banner-gradient-end, 5%) !default; +$dashboard-banner-network-plain-container-background-color: lighten($dashboard-banner-gradient-end, 5%) !default; +$dashboard-line-color-price: lighten($dashboard-banner-gradient-end, 5%) !default; $dashboard-line-color-market: $secondary !default; $dashboard-stats-item-label-color: #fff !default; $dashboard-stats-item-value-color: rgba(#fff, 0.8) !default; From 327b762528f5fbffb478ee5aead16c276725eef4 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 3 Sep 2019 12:56:38 +0300 Subject: [PATCH 086/109] find index of the comment instead of item --- apps/explorer/lib/explorer/chain/smart_contract.ex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/explorer/lib/explorer/chain/smart_contract.ex b/apps/explorer/lib/explorer/chain/smart_contract.ex index a3c198c642..0db7d7e613 100644 --- a/apps/explorer/lib/explorer/chain/smart_contract.ex +++ b/apps/explorer/lib/explorer/chain/smart_contract.ex @@ -280,12 +280,12 @@ defmodule Explorer.Chain.SmartContract do def add_submitted_comment(contract_lines, inserted_at) when is_list(contract_lines) do etherscan_index = - Enum.find(contract_lines, fn line -> + Enum.find_index(contract_lines, fn line -> String.contains?(line, "Submitted for verification at Etherscan.io") end) blockscout_index = - Enum.find(contract_lines, fn line -> + Enum.find_index(contract_lines, fn line -> String.contains?(line, "Submitted for verification at blockscout.com") end) From 87ab56b33d868c8247dcc37e6916229a2c13530f Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 3 Sep 2019 15:46:47 +0300 Subject: [PATCH 087/109] fetch address counters async In this PR (https://github.com/poanetwork/blockscout/pull/2636) we started fetching transactions and rewards in parallel using elixir tasks. This PR uses similar approach to fetch validation and transaction counters on address page. --- .../address_contract_controller.ex | 8 ++++-- .../controllers/address_controller.ex | 28 +++++++++++++++++++ .../address_read_contract_controller.ex | 8 ++++-- .../address_transaction_controller.ex | 8 ++++-- 4 files changed, 43 insertions(+), 9 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex index 5db900b12b..4ff45fe101 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex @@ -1,7 +1,7 @@ defmodule BlockScoutWeb.AddressContractController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] alias Explorer.{Chain, Market} alias Explorer.ExchangeRates.Token @@ -20,14 +20,16 @@ defmodule BlockScoutWeb.AddressContractController do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", address: address, coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex index 9f955fa672..5916359281 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_controller.ex @@ -69,6 +69,34 @@ defmodule BlockScoutWeb.AddressController do redirect(conn, to: address_transaction_path(conn, :index, id)) end + def transaction_and_validation_count(%Hash{byte_count: unquote(Hash.Address.byte_count())} = address_hash) do + transaction_count_task = + Task.async(fn -> + transaction_count(address_hash) + end) + + validation_count_task = + Task.async(fn -> + validation_count(address_hash) + end) + + [transaction_count_task, validation_count_task] + |> Task.yield_many(:timer.seconds(30)) + |> Enum.map(fn {_task, res} -> + case res do + {:ok, result} -> + result + + {:exit, reason} -> + raise "Query fetching address counters terminated: #{inspect(reason)}" + + nil -> + raise "Query fetching address counters timed out." + end + end) + |> List.to_tuple() + end + def transaction_count(%Hash{byte_count: unquote(Hash.Address.byte_count())} = address_hash) do Chain.total_transactions_sent_by_address(address_hash) end diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex index 0849689dce..2625dbd47f 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex @@ -12,7 +12,7 @@ defmodule BlockScoutWeb.AddressReadContractController do alias Explorer.ExchangeRates.Token alias Indexer.Fetcher.CoinBalanceOnDemand - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] def index(conn, %{"address_id" => address_hash_string}) do address_options = [ @@ -27,14 +27,16 @@ defmodule BlockScoutWeb.AddressReadContractController do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", address: address, coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex index f30c3cb0cd..9236c433a7 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex @@ -5,7 +5,7 @@ defmodule BlockScoutWeb.AddressTransactionController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [current_filter: 1, paging_options: 1, next_page_params: 3, split_list_by_page: 1] alias BlockScoutWeb.TransactionView @@ -96,6 +96,8 @@ defmodule BlockScoutWeb.AddressTransactionController do def index(conn, %{"address_id" => address_hash_string} = params) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", @@ -103,8 +105,8 @@ defmodule BlockScoutWeb.AddressTransactionController do coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), filter: params["filter"], - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash), + transaction_count: transaction_count, + validation_count: validation_count, current_path: current_path(conn) ) else From c856a5926096ee644d12ab5ade22eec339b0c217 Mon Sep 17 00:00:00 2001 From: saneery Date: Wed, 21 Aug 2019 14:52:38 +0300 Subject: [PATCH 088/109] Add caches updating independently from Indexer --- CHANGELOG.md | 1 + apps/explorer/config/config.exs | 13 +++++- apps/explorer/lib/explorer/application.ex | 4 +- .../lib/explorer/chain/cache/block_number.ex | 4 +- .../lib/explorer/chain/cache/blocks.ex | 4 +- .../lib/explorer/chain/cache/transactions.ex | 4 +- .../lib/explorer/chain/ordered_cache.ex | 42 +++++++++++++++---- .../chain/cache/block_number_test.exs | 6 +-- 8 files changed, 61 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f347667b27..4d8ddf8ca0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes +- [#2612](https://github.com/poanetwork/blockscout/pull/2612) - Add cache updating independently from Indexer - [#2659](https://github.com/poanetwork/blockscout/pull/2659) - Multipurpose front-end part update - [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks - [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 10e8a66e82..e118362b40 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -29,7 +29,10 @@ config :explorer, Explorer.Counters.AverageBlockTime, config :explorer, Explorer.ChainSpec.GenesisData, enabled: false, chain_spec_path: System.get_env("CHAIN_SPEC_PATH") -config :explorer, Explorer.Chain.Cache.BlockNumber, enabled: true +config :explorer, Explorer.Chain.Cache.BlockNumber, + enabled: true, + ttl_check_interval: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(1), else: false), + global_ttl: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(5)) config :explorer, Explorer.ExchangeRates.Source.CoinGecko, coin_id: System.get_env("COIN_GECKO_ID", "poa-network") @@ -123,6 +126,14 @@ market_history_cache_period = config :explorer, Explorer.Market.MarketHistoryCache, period: market_history_cache_period +config :explorer, Explorer.Chain.Cache.Blocks, + ttl_check_interval: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(1), else: false), + global_ttl: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(5)) + +config :explorer, Explorer.Chain.Cache.Transactions, + ttl_check_interval: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(1), else: false), + global_ttl: if(System.get_env("DISABLE_INDEXER") == "true", do: :timer.seconds(5)) + # Import environment specific config. This must remain at the bottom # of this file so it overrides the configuration defined above. import_config "#{Mix.env()}.exs" diff --git a/apps/explorer/lib/explorer/application.ex b/apps/explorer/lib/explorer/application.ex index 1bd2778762..7c55d28f76 100644 --- a/apps/explorer/lib/explorer/application.ex +++ b/apps/explorer/lib/explorer/application.ex @@ -56,9 +56,7 @@ defmodule Explorer.Application do opts = [strategy: :one_for_one, name: Explorer.Supervisor] - res = Supervisor.start_link(children, opts) - - res + Supervisor.start_link(children, opts) end defp configurable_children do diff --git a/apps/explorer/lib/explorer/chain/cache/block_number.ex b/apps/explorer/lib/explorer/chain/cache/block_number.ex index d19551fa59..fb5f1b515a 100644 --- a/apps/explorer/lib/explorer/chain/cache/block_number.ex +++ b/apps/explorer/lib/explorer/chain/cache/block_number.ex @@ -7,7 +7,9 @@ defmodule Explorer.Chain.Cache.BlockNumber do use Explorer.Chain.MapCache, name: :block_number, - keys: [:min, :max] + keys: [:min, :max], + ttl_check_interval: Application.get_env(:explorer, __MODULE__)[:ttl_check_interval], + global_ttl: Application.get_env(:explorer, __MODULE__)[:global_ttl] alias Explorer.Chain diff --git a/apps/explorer/lib/explorer/chain/cache/blocks.ex b/apps/explorer/lib/explorer/chain/cache/blocks.ex index 4a18646d37..d2a5b47061 100644 --- a/apps/explorer/lib/explorer/chain/cache/blocks.ex +++ b/apps/explorer/lib/explorer/chain/cache/blocks.ex @@ -11,7 +11,9 @@ defmodule Explorer.Chain.Cache.Blocks do ids_list_key: "block_numbers", preload: :transactions, preload: [miner: :names], - preload: :rewards + preload: :rewards, + ttl_check_interval: Application.get_env(:explorer, __MODULE__)[:ttl_check_interval], + global_ttl: Application.get_env(:explorer, __MODULE__)[:global_ttl] @type element :: Block.t() diff --git a/apps/explorer/lib/explorer/chain/cache/transactions.ex b/apps/explorer/lib/explorer/chain/cache/transactions.ex index 7dee7ec87d..e9b8a40a9e 100644 --- a/apps/explorer/lib/explorer/chain/cache/transactions.ex +++ b/apps/explorer/lib/explorer/chain/cache/transactions.ex @@ -16,7 +16,9 @@ defmodule Explorer.Chain.Cache.Transactions do token_transfers: :token, token_transfers: :from_address, token_transfers: :to_address - ] + ], + ttl_check_interval: Application.get_env(:explorer, __MODULE__)[:ttl_check_interval], + global_ttl: Application.get_env(:explorer, __MODULE__)[:global_ttl] @type element :: Transaction.t() diff --git a/apps/explorer/lib/explorer/chain/ordered_cache.ex b/apps/explorer/lib/explorer/chain/ordered_cache.ex index 2a1c0fc689..5365fe0f76 100644 --- a/apps/explorer/lib/explorer/chain/ordered_cache.ex +++ b/apps/explorer/lib/explorer/chain/ordered_cache.ex @@ -26,7 +26,10 @@ defmodule Explorer.Chain.OrderedCache do preload: [transaction: :hash] ``` Additionally all of the options accepted by `ConCache.start_link/1` can be - provided as well. By default only `ttl_check_interval:` is set (to `false`). + provided as well. Unless specified, only these values have defaults: + - `:ttl_check_interval` is set (to `false`). + - `:callback` is only set if `:ttl_check_interval` is not `false` to call the + `remove_deleted_from_index` function, that removes expired values from the index. It's also possible, and advised, to override the implementation of the `c:prevails?/2` and `c:element_to_id/1` callbacks. @@ -131,10 +134,7 @@ defmodule Explorer.Chain.OrderedCache do max_size = Keyword.get(opts, :max_size, 100) preloads = Keyword.get(opts, :preloads) || Keyword.get_values(opts, :preload) - concache_params = - opts - |> Keyword.drop([:ids_list_key, :max_size, :preloads, :preload]) - |> Keyword.put_new(:ttl_check_interval, false) + concache_params = Keyword.drop(opts, [:ids_list_key, :max_size, :preloads, :preload]) # credo:disable-for-next-line Credo.Check.Refactor.LongQuoteBlocks quote do @@ -206,6 +206,19 @@ defmodule Explorer.Chain.OrderedCache do ### Updating function + def remove_deleted_from_index({:delete, _cache_pid, id}) do + # simply check with `ConCache.get` because it is faster + if Enum.member?(ids_list(), id) do + ConCache.update(cache_name(), ids_list_key(), fn ids -> + updated_list = List.delete(ids || [], id) + # ids_list is set to never expire + {:ok, %ConCache.Item{value: updated_list, ttl: :infinity}} + end) + end + end + + def remove_deleted_from_index(_), do: nil + @impl OrderedCache def update(elements) when is_nil(elements), do: :ok @@ -217,7 +230,8 @@ defmodule Explorer.Chain.OrderedCache do |> Enum.sort(&prevails?(&1, &2)) |> merge_and_update(ids || [], max_size()) - {:ok, updated_list} + # ids_list is set to never expire + {:ok, %ConCache.Item{value: updated_list, ttl: :infinity}} end) end @@ -308,7 +322,21 @@ defmodule Explorer.Chain.OrderedCache do provided to this function will override the ones set by using the macro """ def child_spec(params) do - params = Keyword.merge(unquote(concache_params), params) + # params specified in `use` + merged_params = + unquote(concache_params) + # params specified in `child_spec` + |> Keyword.merge(params) + # `:ttl_check_interval` needs to be specified, defaults to `false` + |> Keyword.put_new(:ttl_check_interval, false) + + # if `:ttl_check_interval` is not `false` the expired values need to be + # removed from the cache's index + params = + case merged_params[:ttl_check_interval] do + false -> merged_params + _ -> Keyword.put_new(merged_params, :callback, &remove_deleted_from_index/1) + end Supervisor.child_spec({ConCache, params}, id: child_id()) end diff --git a/apps/explorer/test/explorer/chain/cache/block_number_test.exs b/apps/explorer/test/explorer/chain/cache/block_number_test.exs index 64170695eb..87107fe45c 100644 --- a/apps/explorer/test/explorer/chain/cache/block_number_test.exs +++ b/apps/explorer/test/explorer/chain/cache/block_number_test.exs @@ -11,7 +11,7 @@ defmodule Explorer.Chain.Cache.BlockNumberTest do end) end - describe "get_max/1" do + describe "get_max/0" do test "returns max number" do insert(:block, number: 5) @@ -19,7 +19,7 @@ defmodule Explorer.Chain.Cache.BlockNumberTest do end end - describe "get_min/1" do + describe "get_min/0" do test "returns min number" do insert(:block, number: 2) @@ -27,7 +27,7 @@ defmodule Explorer.Chain.Cache.BlockNumberTest do end end - describe "get_all/1" do + describe "get_all/0" do test "returns min and max number" do insert(:block, number: 6) From 9f835ba8affa6b7ba035eb38f653d0d3fa333fc1 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 3 Sep 2019 16:52:09 +0300 Subject: [PATCH 089/109] replace all transaction and validation count methods --- .../controllers/address_coin_balance_controller.ex | 8 +++++--- .../controllers/address_decompiled_contract_controller.ex | 8 +++++--- .../address_internal_transaction_controller.ex | 8 +++++--- .../controllers/address_logs_controller.ex | 8 +++++--- .../controllers/address_token_controller.ex | 8 +++++--- .../controllers/address_token_transfer_controller.ex | 8 +++++--- .../controllers/address_validation_controller.ex | 8 +++++--- 7 files changed, 35 insertions(+), 21 deletions(-) diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex index 8b39de91a7..97ab7c8490 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex @@ -5,7 +5,7 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [paging_options: 1, next_page_params: 3, split_list_by_page: 1] alias BlockScoutWeb.AddressCoinBalanceView @@ -60,12 +60,14 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do def index(conn, %{"address_id" => address_hash_string}) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render(conn, "index.html", address: address, coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash), + transaction_count: transaction_count, + validation_count: validation_count, current_path: current_path(conn) ) else diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_decompiled_contract_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_decompiled_contract_controller.ex index be591ce384..e9f5cbe62e 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_decompiled_contract_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_decompiled_contract_controller.ex @@ -1,7 +1,7 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] alias Explorer.{Chain, Market} alias Explorer.ExchangeRates.Token @@ -10,14 +10,16 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do def index(conn, %{"address_id" => address_hash_string}) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.find_decompiled_contract_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", address: address, coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex index 15aa87e69a..ee3a66aab2 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex @@ -5,7 +5,7 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [current_filter: 1, paging_options: 1, next_page_params: 3, split_list_by_page: 1] alias BlockScoutWeb.InternalTransactionView @@ -63,6 +63,8 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do def index(conn, %{"address_id" => address_hash_string} = params) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", @@ -71,8 +73,8 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do current_path: current_path(conn), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), filter: params["filter"], - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex index d3ea4e5303..73bd14bfd6 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex @@ -3,7 +3,7 @@ defmodule BlockScoutWeb.AddressLogsController do Manages events logs tab. """ - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_count_and_validation_count: 1] import BlockScoutWeb.Chain, only: [paging_options: 1, next_page_params: 3, split_list_by_page: 1] alias BlockScoutWeb.AddressLogsView @@ -56,6 +56,8 @@ defmodule BlockScoutWeb.AddressLogsController do def index(conn, %{"address_id" => address_hash_string}) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", @@ -63,8 +65,8 @@ defmodule BlockScoutWeb.AddressLogsController do current_path: current_path(conn), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else _ -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex index d77baa605a..f8a3a9f750 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_controller.ex @@ -1,7 +1,7 @@ defmodule BlockScoutWeb.AddressTokenController do use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [next_page_params: 3, paging_options: 1, split_list_by_page: 1] alias BlockScoutWeb.AddressTokenView @@ -57,6 +57,8 @@ defmodule BlockScoutWeb.AddressTokenController do def index(conn, %{"address_id" => address_hash_string} = _params) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", @@ -64,8 +66,8 @@ defmodule BlockScoutWeb.AddressTokenController do current_path: current_path(conn), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex index 4e0023b067..7d0c8c1284 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex @@ -7,7 +7,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do alias Indexer.Fetcher.CoinBalanceOnDemand alias Phoenix.View - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [next_page_params: 3, paging_options: 1, split_list_by_page: 1] @@ -77,6 +77,8 @@ defmodule BlockScoutWeb.AddressTokenTransferController do {:ok, token_hash} <- Chain.string_to_address_hash(token_hash_string), {:ok, address} <- Chain.hash_to_address(address_hash), {:ok, token} <- Chain.token_from_address_hash(token_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", @@ -85,8 +87,8 @@ defmodule BlockScoutWeb.AddressTokenTransferController do exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), current_path: current_path(conn), token: token, - transaction_count: transaction_count(address_hash), - validation_count: validation_count(address_hash) + transaction_count: transaction_count, + validation_count: validation_count ) else :error -> diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex index 7226dffcf8..d8d558d5fb 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex @@ -4,7 +4,7 @@ defmodule BlockScoutWeb.AddressValidationController do """ use BlockScoutWeb, :controller - import BlockScoutWeb.AddressController, only: [transaction_count: 1, validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [paging_options: 1, next_page_params: 3, split_list_by_page: 1] @@ -69,14 +69,16 @@ defmodule BlockScoutWeb.AddressValidationController do def index(conn, %{"address_id" => address_hash_string}) do with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), {:ok, address} <- Chain.find_or_insert_address_from_hash(address_hash) do + {transaction_count, validation_count} = transaction_and_validation_count(address_hash) + render( conn, "index.html", address: address, coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), current_path: current_path(conn), - transaction_count: transaction_count(address.hash), - validation_count: validation_count(address.hash), + transaction_count: transaction_count, + validation_count: validation_count, exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null() ) else From 7bdc81be36d761d38b603d7d34e2ec6e4e50ae28 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 3 Sep 2019 16:54:42 +0300 Subject: [PATCH 090/109] fix build --- .../lib/block_scout_web/controllers/address_logs_controller.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex b/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex index 73bd14bfd6..f08378e980 100644 --- a/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex +++ b/apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex @@ -3,7 +3,7 @@ defmodule BlockScoutWeb.AddressLogsController do Manages events logs tab. """ - import BlockScoutWeb.AddressController, only: [transaction_count_and_validation_count: 1] + import BlockScoutWeb.AddressController, only: [transaction_and_validation_count: 1] import BlockScoutWeb.Chain, only: [paging_options: 1, next_page_params: 3, split_list_by_page: 1] alias BlockScoutWeb.AddressLogsView From 776ad8dc0387683d09b8ee0d39de68821f35b793 Mon Sep 17 00:00:00 2001 From: Ayrat Badykov Date: Tue, 3 Sep 2019 16:55:38 +0300 Subject: [PATCH 091/109] add CHANGELOG entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f347667b27..b4a0628cfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2663](https://github.com/poanetwork/blockscout/pull/2663) - Fetch address counters in parallel - [#2636](https://github.com/poanetwork/blockscout/pull/2636) - Execute all address' transactions page queries in parallel - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type - [#2581](https://github.com/poanetwork/blockscout/pull/2581) - Add generic Map-like Cache behaviour and implementation From 5b04f221b5b2a0e12905160bce9d7d29b71c171a Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 5 Sep 2019 14:22:12 +0300 Subject: [PATCH 092/109] New theme for xUSDT created --- .../assets/css/theme/_variables.scss | 3 +- .../theme/_xusdt_variables-non-critical.scss | 7 ++ .../assets/css/theme/_xusdt_variables.scss | 85 +++++++++++++++++++ 3 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 apps/block_scout_web/assets/css/theme/_xusdt_variables-non-critical.scss create mode 100644 apps/block_scout_web/assets/css/theme/_xusdt_variables.scss diff --git a/apps/block_scout_web/assets/css/theme/_variables.scss b/apps/block_scout_web/assets/css/theme/_variables.scss index bff54cc6bf..48a617fa30 100644 --- a/apps/block_scout_web/assets/css/theme/_variables.scss +++ b/apps/block_scout_web/assets/css/theme/_variables.scss @@ -1,5 +1,6 @@ @import "theme/base_variables"; -@import "neutral_variables"; +//@import "neutral_variables"; +@import "xusdt_variables"; // @import "dai_variables"; // @import "ethereum_classic_variables"; // @import "ethereum_variables"; diff --git a/apps/block_scout_web/assets/css/theme/_xusdt_variables-non-critical.scss b/apps/block_scout_web/assets/css/theme/_xusdt_variables-non-critical.scss new file mode 100644 index 0000000000..7f337f9bf5 --- /dev/null +++ b/apps/block_scout_web/assets/css/theme/_xusdt_variables-non-critical.scss @@ -0,0 +1,7 @@ +// general +$primary: #2b9f7a; +$secondary: #20745a; +$tertiary: #fff; +$additional-font: #fff; + +$btn-line-color: $secondary; // button border and font color && hover bg color \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss b/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss new file mode 100644 index 0000000000..d60c82ab72 --- /dev/null +++ b/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss @@ -0,0 +1,85 @@ +// general +$primary: #2b9f7a; +$secondary: #20745a; +$tertiary: #fff; +$additional-font: #fff; + +$tile-body-a-color: $secondary; +$tile-type-block-color: $secondary; +$tile-type-progress-bar-color: $secondary; +a.tile-title { color: $secondary !important; } + +// footer +$footer-background-color: #282d31; +$footer-title-color: #fff; +$footer-text-color: $additional-font; +$footer-item-disc-color: $secondary; +$footer-social-icon-color: $secondary; + +// dashboard +$dashboard-line-color-price: #fff; // price left border + +$dashboard-banner-chart-legend-label-color: #fff; +$dashboard-stats-item-label-color: $dashboard-banner-chart-legend-label-color; +$dashboard-banner-chart-legend-value-color: #fff; // chart labels +$dashboard-stats-item-value-color: #fff; // stat values + +$dashboard-stats-item-border-color: $secondary; // stat border + +$dashboard-banner-gradient-start: $primary; // gradient begin + +$dashboard-banner-gradient-end: #289371; // gradient end + +$dashboard-banner-network-plain-container-background-color: #2ea780; // stats bg + + +// navigation +.navbar { box-shadow: 0px 0px 30px 0px rgba(21, 53, 80, 0.12); } // header shadow +$dropdown-menu-item-hover-color: $primary !default; +$dropdown-menu-item-hover-background: rgba($primary, .1) !default; +$header-icon-color-hover: $primary; +$header-icon-border-color-hover: $primary; + +// buttons +$btn-line-bg: #fff; // button bg +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code +$btn-address-card-icon-color: $primary; // btn address color + +//links & tile +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { color: $primary !important; } + +// card +$card-background-1: $primary; +$card-tab-active: $primary; + +.layout-container { + .dashboard-banner-container { + background-image: linear-gradient( + to bottom, + $dashboard-banner-gradient-start, + $dashboard-banner-gradient-end + ); + } +} + +// Badges +$badge-neutral-color: $primary; +$badge-neutral-background-color: rgba($primary, .1); +$api-text-monospace-color: $primary; + +// Tokens dropdown +.token-balance-dropdown[aria-labelledby="dropdown-tokens"] { + .dropdown-items .dropdown-item:hover { + color: $primary !important; + } +} + +// Dark theme +$dark-primary: #2b9f7a; +$dark-secondary: #20745a; +$dark-primary-alternate: #2b9f7a; \ No newline at end of file From f12ba4163cff81a2a3c3c9cdc95f8332253fe909 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Thu, 5 Sep 2019 23:26:56 +0300 Subject: [PATCH 093/109] Final changes for xUSDT theme performed --- .../assets/css/theme/_variables.scss | 4 ++-- .../assets/css/theme/_xusdt_variables.scss | 22 ++++++++++++++----- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/apps/block_scout_web/assets/css/theme/_variables.scss b/apps/block_scout_web/assets/css/theme/_variables.scss index 48a617fa30..15571b454b 100644 --- a/apps/block_scout_web/assets/css/theme/_variables.scss +++ b/apps/block_scout_web/assets/css/theme/_variables.scss @@ -1,6 +1,6 @@ @import "theme/base_variables"; -//@import "neutral_variables"; -@import "xusdt_variables"; +@import "neutral_variables"; +// @import "xusdt_variables"; // @import "dai_variables"; // @import "ethereum_classic_variables"; // @import "ethereum_variables"; diff --git a/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss b/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss index d60c82ab72..ac3b2fa4e0 100644 --- a/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss +++ b/apps/block_scout_web/assets/css/theme/_xusdt_variables.scss @@ -4,10 +4,10 @@ $secondary: #20745a; $tertiary: #fff; $additional-font: #fff; -$tile-body-a-color: $secondary; -$tile-type-block-color: $secondary; -$tile-type-progress-bar-color: $secondary; -a.tile-title { color: $secondary !important; } +$tile-body-a-color: $primary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { color: $primary !important; } // footer $footer-background-color: #282d31; @@ -82,4 +82,16 @@ $api-text-monospace-color: $primary; // Dark theme $dark-primary: #2b9f7a; $dark-secondary: #20745a; -$dark-primary-alternate: #2b9f7a; \ No newline at end of file +$dark-primary-alternate: #2b9f7a; + +.dark-theme-applied .dashboard-banner-chart-legend .dashboard-banner-chart-legend-item:nth-child(1)::before { + background-color: white!important; +} + +.dark-theme-applied .dashboard-banner-chart-legend .dashboard-banner-chart-legend-item:nth-child(2)::before { + background-color: $primary!important; +} + +.dark-theme-applied .tile .tile-body a, .dark-theme-applied .tile span[data-address-hash] { + color: #2b9f7a; +} \ No newline at end of file From b79609511a7dce922d9fcab5c01077ce9818fea0 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Fri, 6 Sep 2019 13:05:09 +0300 Subject: [PATCH 094/109] Logos added --- .../assets/static/images/xusdt-logo-footer.svg | 3 +++ apps/block_scout_web/assets/static/images/xusdt-logo-top.svg | 4 ++++ 2 files changed, 7 insertions(+) create mode 100644 apps/block_scout_web/assets/static/images/xusdt-logo-footer.svg create mode 100644 apps/block_scout_web/assets/static/images/xusdt-logo-top.svg diff --git a/apps/block_scout_web/assets/static/images/xusdt-logo-footer.svg b/apps/block_scout_web/assets/static/images/xusdt-logo-footer.svg new file mode 100644 index 0000000000..53763fdec4 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/xusdt-logo-footer.svg @@ -0,0 +1,3 @@ + + + diff --git a/apps/block_scout_web/assets/static/images/xusdt-logo-top.svg b/apps/block_scout_web/assets/static/images/xusdt-logo-top.svg new file mode 100644 index 0000000000..1e0ac1b3c8 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/xusdt-logo-top.svg @@ -0,0 +1,4 @@ + + + + From e6b9a8991de12eebbf16a59e618dd2cafd914a76 Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Fri, 6 Sep 2019 16:18:51 +0300 Subject: [PATCH 095/109] 2.0.4 --- CHANGELOG.md | 10 +++++----- docs/env-variables.md | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1459ecb8ac..6e2e7de5f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,10 @@ ## Current ### Features -- [#2588](https://github.com/poanetwork/blockscout/pull/2588) - add verification submission comment -- [#2505](https://github.com/poanetwork/blockscout/pull/2505) - support POA Network emission rewards - [#2636](https://github.com/poanetwork/blockscout/pull/2636) - Execute all address' transactions page queries in parallel - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type +- [#2588](https://github.com/poanetwork/blockscout/pull/2588) - add verification submission comment +- [#2505](https://github.com/poanetwork/blockscout/pull/2505) - support POA Network emission rewards - [#2581](https://github.com/poanetwork/blockscout/pull/2581) - Add generic Map-like Cache behaviour and implementation - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method - [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs @@ -12,16 +12,15 @@ - [#2497](https://github.com/poanetwork/blockscout/pull/2497) - Add generic Ordered Cache behaviour and implementation ### Fixes -- [#2612](https://github.com/poanetwork/blockscout/pull/2612) - Add cache updating independently from Indexer - [#2659](https://github.com/poanetwork/blockscout/pull/2659) - Multipurpose front-end part update -- [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks -- [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates - [#2640](https://github.com/poanetwork/blockscout/pull/2640) - SVG network icons - [#2635](https://github.com/poanetwork/blockscout/pull/2635) - optimize ERC721 inventory query - [#2626](https://github.com/poanetwork/blockscout/pull/2626) - Fixing 2 Mobile UI Issues - [#2623](https://github.com/poanetwork/blockscout/pull/2623) - fix a blinking test - [#2616](https://github.com/poanetwork/blockscout/pull/2616) - deduplicate coin history records by delta - [#2613](https://github.com/poanetwork/blockscout/pull/2613) - fix getminedblocks rpc endpoint +- [#2612](https://github.com/poanetwork/blockscout/pull/2612) - Add cache updating independently from Indexer +- [#2610](https://github.com/poanetwork/blockscout/pull/2610) - use CoinGecko instead of CoinMarketcap for exchange rates - [#2592](https://github.com/poanetwork/blockscout/pull/2592) - process new metadata format for whisper - [#2591](https://github.com/poanetwork/blockscout/pull/2591) - Fix url error in API page - [#2572](https://github.com/poanetwork/blockscout/pull/2572) - Ease non-critical css @@ -31,6 +30,7 @@ - [#2564](https://github.com/poanetwork/blockscout/pull/2564) - fix first page button for uncles and reorgs - [#2563](https://github.com/poanetwork/blockscout/pull/2563) - Fix view less transfers button - [#2538](https://github.com/poanetwork/blockscout/pull/2538) - fetch the last not empty coin balance records +- [#2468](https://github.com/poanetwork/blockscout/pull/2468) - fix confirmations for non consensus blocks ### Chore - [#2646](https://github.com/poanetwork/blockscout/pull/2646) - Added Xerom to list of Additional Chains using BlockScout diff --git a/docs/env-variables.md b/docs/env-variables.md index 5ae0b55433..7e023ef621 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -52,7 +52,7 @@ $ export NETWORK=POA | `TXS_COUNT_CACHE_PERIOD` | | Interval in seconds to restart the task, which calculates the total txs count. | 60 * 60 * 2 | v1.3.9+ | | | | `ADDRESS_WITH_BALANCES`
`_UPDATE_INTERVAL`| | Interval in seconds to restart the task, which calculates addresses with balances. | 30 * 60 | v1.3.9+ | | | | `LINK_TO_OTHER_EXPLORERS` | | true/false. If true, links to other explorers are added in the footer | (empty) | v1.3.0+ | | | -| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | master | +| `COINMARKETCAP_PAGES` | | the number of pages on coinmarketcap to list in order to find token's price | 10 | v1.3.10+ | | v2.0.4 | | `SUPPORTED_CHAINS` | | Array of supported chains that displays in the footer and in the chains dropdown. This var was introduced in this PR [#1900](https://github.com/poanetwork/blockscout/pull/1900) and looks like an array of JSON objects. | (empty) | v2.0.0+ | | | | `BLOCK_COUNT_CACHE_PERIOD ` | | time to live of cache in seconds. This var was introduced in [#1876](https://github.com/poanetwork/blockscout/pull/1876) | 600 | v2.0.0+ | | | | `ALLOWED_EVM_VERSIONS ` | | the comma-separated list of allowed EVM versions for contracts verification. This var was introduced in [#1964](https://github.com/poanetwork/blockscout/pull/1964) | "homestead, tangerineWhistle, spuriousDragon, byzantium, constantinople, petersburg" | v2.0.0+ | | | @@ -64,7 +64,7 @@ $ export NETWORK=POA | `DISABLE_INDEXER` | | If `true`, indexer application doesn't run | `false` | v2.0.3+ | :white_check_mark: | | | `WEBAPP_URL` | | Link to web application instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | | | `API_URL` | | Link to API instance, e.g. `http://host/path` | (empty) | v2.0.3+ | | | -| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | master | | | -| `COIN_GECKO_ID` | | CoinGecko coin id required for fetching an exchange rate | poa-network | master | | | -| `EMISSION_FORMAT` | | Should be set to `POA` if you have block emission indentical to POA Network. This env var is used only if `CHAIN_SPEC_PATH` is set | `STANDARD` | master | | | -| `REWARDS_CONTRACT_ADDRESS` | | Emission rewards contract address. This env var is used only if `EMISSION_FORMAT` is set to `POA` | `0xeca443e8e1ab29971a45a9c57a6a9875701698a5` | master | | | +| `CHAIN_SPEC_PATH` | | Chain specification path (absolute file system path or url) to import block emission reward ranges and genesis account balances from | (empty) | v2.0.4+ | | | +| `COIN_GECKO_ID` | | CoinGecko coin id required for fetching an exchange rate | poa-network | v2.0.4+ | | | +| `EMISSION_FORMAT` | | Should be set to `POA` if you have block emission indentical to POA Network. This env var is used only if `CHAIN_SPEC_PATH` is set | `STANDARD` | v2.0.4+ | | | +| `REWARDS_CONTRACT_ADDRESS` | | Emission rewards contract address. This env var is used only if `EMISSION_FORMAT` is set to `POA` | `0xeca443e8e1ab29971a45a9c57a6a9875701698a5` | v2.0.4+ | | | From 27ce90c57158f230e41c6ff4905857f243163baa Mon Sep 17 00:00:00 2001 From: Victor Baranov Date: Fri, 6 Sep 2019 16:30:01 +0300 Subject: [PATCH 096/109] bump version: patch 2.0.4 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e2e7de5f6..08ed9cf838 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ ## Current +### Features + +### Fixes + +### Chore + + +## 2.0.4-beta + ### Features - [#2636](https://github.com/poanetwork/blockscout/pull/2636) - Execute all address' transactions page queries in parallel - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type From c93f93528457aec91c0165d19c59a005c1b220bd Mon Sep 17 00:00:00 2001 From: Yegor San Date: Fri, 6 Sep 2019 16:55:43 +0300 Subject: [PATCH 097/109] Added icons for new network, added non-critical value etc --- apps/block_scout_web/assets/css/_images-preload.scss | 1 + .../assets/css/components/_network-selector.scss | 3 +++ .../assets/css/theme/_variables-non-critical.scss | 1 + .../static/images/network-selector-icons/circle-xusdt.svg | 4 ++++ 4 files changed, 9 insertions(+) create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/circle-xusdt.svg diff --git a/apps/block_scout_web/assets/css/_images-preload.scss b/apps/block_scout_web/assets/css/_images-preload.scss index 95f4633a56..031cf20888 100644 --- a/apps/block_scout_web/assets/css/_images-preload.scss +++ b/apps/block_scout_web/assets/css/_images-preload.scss @@ -13,4 +13,5 @@ body:after { url(/images/network-selector-icons/ropsten-testnet.svg) url(/images/network-selector-icons/xdai-chain.svg) url(/images/network-selector-icons/lukso-l14-testnet.svg) + url(/images/network-selector-icons/circle-xusdt.svg) }; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_network-selector.scss b/apps/block_scout_web/assets/css/components/_network-selector.scss index 9df2d22164..ab6f38a4d4 100644 --- a/apps/block_scout_web/assets/css/components/_network-selector.scss +++ b/apps/block_scout_web/assets/css/components/_network-selector.scss @@ -280,6 +280,9 @@ $network-selector-item-icon-dimensions: 30px !default; &-lukso-l14-testnet { background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg) } + &-xusdt-mainnet { + background-image: url(/images/network-selector-icons/circle-xusdt.svg) + } } .network-selector-item-title { diff --git a/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss b/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss index 232b9cc647..39762ec68a 100644 --- a/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss +++ b/apps/block_scout_web/assets/css/theme/_variables-non-critical.scss @@ -1,5 +1,6 @@ @import "theme/base_variables"; @import "neutral_variables-non-critical"; +// @import "xusdt_variables-non-critical"; // @import "dai_variables-non-critical"; // @import "ethereum_classic_variables-non-critical"; // @import "ethereum_variables-non-critical"; diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xusdt.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xusdt.svg new file mode 100644 index 0000000000..de660df5d8 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xusdt.svg @@ -0,0 +1,4 @@ + + + + From 53af4f5843f00d5020a3c1aae39835686d1c254b Mon Sep 17 00:00:00 2001 From: Yegor San Date: Fri, 6 Sep 2019 17:12:00 +0300 Subject: [PATCH 098/109] Added changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e345f9216d..af33f5b9ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2672](https://github.com/poanetwork/blockscout/pull/2672) - added new theme for xUSDT - [#2555](https://github.com/poanetwork/blockscout/pull/2555) - find and show decoding candidates for logs - [#2596](https://github.com/poanetwork/blockscout/pull/2596) - support AuRa's empty step reward type - [#2561](https://github.com/poanetwork/blockscout/pull/2561) - Add token's type to the response of tokenlist method From 3b1c962a9d78a33626e083eac05f8301bf6b592b Mon Sep 17 00:00:00 2001 From: Yegor San Date: Fri, 6 Sep 2019 18:59:30 +0300 Subject: [PATCH 099/109] changed icon value to &-xusdt-chain --- .../assets/css/components/_network-selector.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/assets/css/components/_network-selector.scss b/apps/block_scout_web/assets/css/components/_network-selector.scss index ab6f38a4d4..e3ffea33de 100644 --- a/apps/block_scout_web/assets/css/components/_network-selector.scss +++ b/apps/block_scout_web/assets/css/components/_network-selector.scss @@ -280,7 +280,7 @@ $network-selector-item-icon-dimensions: 30px !default; &-lukso-l14-testnet { background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg) } - &-xusdt-mainnet { + &-xusdt-chain { background-image: url(/images/network-selector-icons/circle-xusdt.svg) } } From c6246635579ef0801629e0336f844b07a9d26f87 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sat, 7 Sep 2019 02:46:55 +0300 Subject: [PATCH 100/109] New xdai theme styles added --- .../assets/css/_images-preload.scss | 2 +- .../css/components/_network-selector.scss | 2 +- .../assets/css/theme/_dai_variables.scss | 58 ++++++++++++------- .../network-selector-icons/circle-xdai.svg | 4 ++ .../assets/static/images/xdai-logo-top.svg | 5 ++ .../assets/static/images/xdai.svg | 5 ++ 6 files changed, 53 insertions(+), 23 deletions(-) create mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg create mode 100644 apps/block_scout_web/assets/static/images/xdai-logo-top.svg create mode 100644 apps/block_scout_web/assets/static/images/xdai.svg diff --git a/apps/block_scout_web/assets/css/_images-preload.scss b/apps/block_scout_web/assets/css/_images-preload.scss index 031cf20888..88ae4f93b0 100644 --- a/apps/block_scout_web/assets/css/_images-preload.scss +++ b/apps/block_scout_web/assets/css/_images-preload.scss @@ -11,7 +11,7 @@ body:after { url(/images/network-selector-icons/rinkeby-testnet.svg) url(/images/network-selector-icons/rsk-mainnet.svg) url(/images/network-selector-icons/ropsten-testnet.svg) - url(/images/network-selector-icons/xdai-chain.svg) + url(/images/network-selector-icons/circle-xdai.svg) url(/images/network-selector-icons/lukso-l14-testnet.svg) url(/images/network-selector-icons/circle-xusdt.svg) }; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_network-selector.scss b/apps/block_scout_web/assets/css/components/_network-selector.scss index e3ffea33de..da8320b678 100644 --- a/apps/block_scout_web/assets/css/components/_network-selector.scss +++ b/apps/block_scout_web/assets/css/components/_network-selector.scss @@ -275,7 +275,7 @@ $network-selector-item-icon-dimensions: 30px !default; background-image: url(/images/network-selector-icons/ropsten-testnet.svg) } &-xdai-chain { - background-image: url(/images/network-selector-icons/xdai-chain.svg) + background-image: url(/images/network-selector-icons/circle-xdai.svg) } &-lukso-l14-testnet { background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg) diff --git a/apps/block_scout_web/assets/css/theme/_dai_variables.scss b/apps/block_scout_web/assets/css/theme/_dai_variables.scss index 6722369c7f..edfc1a26fd 100644 --- a/apps/block_scout_web/assets/css/theme/_dai_variables.scss +++ b/apps/block_scout_web/assets/css/theme/_dai_variables.scss @@ -1,23 +1,23 @@ // general -$primary: #17314f; -$secondary: #15bba6; -$tertiary: #93d7ff; +$primary: #233174; +$secondary: #15f9bb; +$tertiary: #5a77ff; $additional-font: #fff; // footer -$footer-background-color: $primary; +$footer-background-color:#202d6a; $footer-title-color: #fff; -$footer-text-color: #96bde8; +$footer-text-color: #b5c2ff; $footer-item-disc-color: $secondary; .footer-logo { filter: brightness(0) invert(1); } - +.footer-social-icon { color: $secondary!important; } // dashboard $dashboard-line-color-price: $tertiary; // price left border $dashboard-line-color-market: $secondary; $dashboard-banner-chart-legend-label-color: $footer-text-color; -$dashboard-stats-item-label-color: $footer-text-color; +$dashboard-stats-item-label-color: #b4c1ff; $dashboard-banner-chart-legend-value-color: #fff; // chart labels $dashboard-stats-item-value-color: #fff; // stat values @@ -25,9 +25,11 @@ $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: #1e2a63; +// gradient end -$dashboard-banner-network-plain-container-background-color: #20446e; // stats bg +$dashboard-banner-network-plain-container-background-color: #273781 +; // stats bg // navigation @@ -35,20 +37,20 @@ $dashboard-banner-network-plain-container-background-color: #20446e; // stats bg // 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 +$btn-line-color: $primary; // button border and font color && hover bg color +$btn-copy-color: $primary; // btn copy +$btn-qr-color: $primary; // btn qr-code $btn-address-card-icon-color: $secondary; // btn address color //links & tile -$tile-body-a-color: $secondary; -$tile-type-block-color: $secondary; -$tile-type-progress-bar-color: $secondary; -a.tile-title { color: $secondary !important; } +$tile-body-a-color: $tertiary; +$tile-type-block-color: $primary; +$tile-type-progress-bar-color: $primary; +a.tile-title { color: $primary !important; } // card -$card-background-1: $secondary; -$card-tab-active: $secondary; +$card-background-1: $primary; +$card-tab-active: $primary; .layout-container { .dashboard-banner-container { @@ -66,6 +68,20 @@ $badge-neutral-background-color: rgba(#20446e, .1); $api-text-monospace-color: #20446e; // Dark theme -$dark-primary: #15bba6; -$dark-secondary: #93d7ff; -$dark-primary-alternate: #15bba6; \ No newline at end of file +$dark-primary: #233174; +$dark-secondary:#15f9bb; +$dark-tertiary: #5a77ff; + +.dark-theme-applied .tile .tile-body a, .dark-theme-applied .tile span[data-address-hash] { + color: $dark-tertiary!important; +} + +.dark-theme-applied .btn-line { + background-color: transparent!important; + border-color: $dark-tertiary!important; + color: $dark-tertiary!important; +} + +.dark-theme-applied .btn-line:hover { + color: $additional-font!important; +} \ No newline at end of file diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg new file mode 100644 index 0000000000..ac045d3112 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/block_scout_web/assets/static/images/xdai-logo-top.svg b/apps/block_scout_web/assets/static/images/xdai-logo-top.svg new file mode 100644 index 0000000000..538f3bc4c3 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/xdai-logo-top.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/block_scout_web/assets/static/images/xdai.svg b/apps/block_scout_web/assets/static/images/xdai.svg new file mode 100644 index 0000000000..daf2a92604 --- /dev/null +++ b/apps/block_scout_web/assets/static/images/xdai.svg @@ -0,0 +1,5 @@ + + + + + From b2ec14fa6c159c7124c485bcca7d9f057b690859 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sat, 7 Sep 2019 02:58:08 +0300 Subject: [PATCH 101/109] Fix for dashboard banner --- .../assets/css/components/_dashboard-banner.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss index 7f8c83482f..0cf8071caf 100644 --- a/apps/block_scout_web/assets/css/components/_dashboard-banner.scss +++ b/apps/block_scout_web/assets/css/components/_dashboard-banner.scss @@ -148,7 +148,7 @@ $dashboard-banner-chart-axis-font-color: $dashboard-stats-item-value-color !defa display: flex; height: $dashboard-banner-network-plain-container-height; justify-content: center; - margin: 0 0 0 30px; + margin: 45px 0 0 30px; max-width: 100%; padding: 30px 0 30px 60px; width: 750px; From eff8194febc70cab089882dbc6023f7d26b9fd62 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sat, 7 Sep 2019 23:29:52 +0300 Subject: [PATCH 102/109] Added Changelog.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62f0d9fdcf..06ce0a42b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2678](https://github.com/poanetwork/blockscout/pull/2678) - fixed dashboard banner height bug - [#2672](https://github.com/poanetwork/blockscout/pull/2672) - added new theme for xUSDT ### Fixes From e78a4e092f8a783e520372dc8c64c7f2e95a0a33 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sat, 7 Sep 2019 23:47:33 +0300 Subject: [PATCH 103/109] All requested changes performed. --- apps/block_scout_web/assets/css/_images-preload.scss | 2 +- .../assets/css/components/_network-selector.scss | 2 +- .../static/images/{xdai-logo-top.svg => dai-logo.svg} | 0 .../block_scout_web/assets/static/images/dai_logo.svg | 11 ----------- .../images/network-selector-icons/circle-xdai.svg | 4 ---- .../images/network-selector-icons/xdai-chain.svg | 4 ++-- apps/block_scout_web/assets/static/images/xdai.svg | 5 ----- 7 files changed, 4 insertions(+), 24 deletions(-) rename apps/block_scout_web/assets/static/images/{xdai-logo-top.svg => dai-logo.svg} (100%) delete mode 100644 apps/block_scout_web/assets/static/images/dai_logo.svg delete mode 100644 apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg delete mode 100644 apps/block_scout_web/assets/static/images/xdai.svg diff --git a/apps/block_scout_web/assets/css/_images-preload.scss b/apps/block_scout_web/assets/css/_images-preload.scss index 88ae4f93b0..031cf20888 100644 --- a/apps/block_scout_web/assets/css/_images-preload.scss +++ b/apps/block_scout_web/assets/css/_images-preload.scss @@ -11,7 +11,7 @@ body:after { url(/images/network-selector-icons/rinkeby-testnet.svg) url(/images/network-selector-icons/rsk-mainnet.svg) url(/images/network-selector-icons/ropsten-testnet.svg) - url(/images/network-selector-icons/circle-xdai.svg) + url(/images/network-selector-icons/xdai-chain.svg) url(/images/network-selector-icons/lukso-l14-testnet.svg) url(/images/network-selector-icons/circle-xusdt.svg) }; \ No newline at end of file diff --git a/apps/block_scout_web/assets/css/components/_network-selector.scss b/apps/block_scout_web/assets/css/components/_network-selector.scss index da8320b678..e3ffea33de 100644 --- a/apps/block_scout_web/assets/css/components/_network-selector.scss +++ b/apps/block_scout_web/assets/css/components/_network-selector.scss @@ -275,7 +275,7 @@ $network-selector-item-icon-dimensions: 30px !default; background-image: url(/images/network-selector-icons/ropsten-testnet.svg) } &-xdai-chain { - background-image: url(/images/network-selector-icons/circle-xdai.svg) + background-image: url(/images/network-selector-icons/xdai-chain.svg) } &-lukso-l14-testnet { background-image: url(/images/network-selector-icons/lukso-l14-testnet.svg) diff --git a/apps/block_scout_web/assets/static/images/xdai-logo-top.svg b/apps/block_scout_web/assets/static/images/dai-logo.svg similarity index 100% rename from apps/block_scout_web/assets/static/images/xdai-logo-top.svg rename to apps/block_scout_web/assets/static/images/dai-logo.svg diff --git a/apps/block_scout_web/assets/static/images/dai_logo.svg b/apps/block_scout_web/assets/static/images/dai_logo.svg deleted file mode 100644 index 3ce9609c84..0000000000 --- a/apps/block_scout_web/assets/static/images/dai_logo.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg deleted file mode 100644 index ac045d3112..0000000000 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/circle-xdai.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg b/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg index e6f660410a..ac045d3112 100644 --- a/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg +++ b/apps/block_scout_web/assets/static/images/network-selector-icons/xdai-chain.svg @@ -1,4 +1,4 @@ - - + + diff --git a/apps/block_scout_web/assets/static/images/xdai.svg b/apps/block_scout_web/assets/static/images/xdai.svg deleted file mode 100644 index daf2a92604..0000000000 --- a/apps/block_scout_web/assets/static/images/xdai.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - From d4e1bdfd4259d0d32bf40546de4ca124c839daa7 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sun, 8 Sep 2019 01:41:21 +0300 Subject: [PATCH 104/109] Added fixed height for card chain blocks and transactions. --- apps/block_scout_web/assets/css/components/_card.scss | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_card.scss b/apps/block_scout_web/assets/css/components/_card.scss index 0737e1b355..37cbaf973d 100644 --- a/apps/block_scout_web/assets/css/components/_card.scss +++ b/apps/block_scout_web/assets/css/components/_card.scss @@ -155,7 +155,7 @@ $card-tab-icon-color-active: #fff !default; } .card-chain-blocks { - height: auto; + height: 233px; [class*="col-"]:last-child { .tile { @@ -165,7 +165,7 @@ $card-tab-icon-color-active: #fff !default; } .card-chain-transactions { - height: auto; + height: 664px; .tile { margin-bottom: 0; From 1bd1835b487ce1b6b3aebf84ee47b6af8022c55b Mon Sep 17 00:00:00 2001 From: Yegor San Date: Sun, 8 Sep 2019 01:48:25 +0300 Subject: [PATCH 105/109] Added CHANGELOG.md entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62f0d9fdcf..a83c8f376b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ ## Current ### Features +- [#2679](https://github.com/poanetwork/blockscout/pull/2679) - added fixed height for card chain blocks and card chain transactions - [#2672](https://github.com/poanetwork/blockscout/pull/2672) - added new theme for xUSDT ### Fixes From 2bb4d27113b21dd1e3505cdf157f24852a34c90b Mon Sep 17 00:00:00 2001 From: Yegor San Date: Mon, 9 Sep 2019 09:17:42 +0300 Subject: [PATCH 106/109] Added dai_logo.svg --- .../assets/static/images/{dai-logo.svg => dai_logo.svg} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename apps/block_scout_web/assets/static/images/{dai-logo.svg => dai_logo.svg} (100%) diff --git a/apps/block_scout_web/assets/static/images/dai-logo.svg b/apps/block_scout_web/assets/static/images/dai_logo.svg similarity index 100% rename from apps/block_scout_web/assets/static/images/dai-logo.svg rename to apps/block_scout_web/assets/static/images/dai_logo.svg From f75ab1df6baedc4298b79d807671a8733c3da177 Mon Sep 17 00:00:00 2001 From: pasqu4le Date: Fri, 6 Sep 2019 17:51:27 +0200 Subject: [PATCH 107/109] Use Task.start instead of Task.async in caches --- CHANGELOG.md | 1 + apps/explorer/lib/explorer/chain/cache/block_count.ex | 4 ++-- apps/explorer/lib/explorer/chain/cache/transaction_count.ex | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 06ce0a42b7..0a18eb049f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - [#2672](https://github.com/poanetwork/blockscout/pull/2672) - added new theme for xUSDT ### Fixes +- [#2682](https://github.com/poanetwork/blockscout/pull/2682) - Use Task.start instead of Task.async in caches ### Chore diff --git a/apps/explorer/lib/explorer/chain/cache/block_count.ex b/apps/explorer/lib/explorer/chain/cache/block_count.ex index c4e6c6a4a0..ef1e587dfe 100644 --- a/apps/explorer/lib/explorer/chain/cache/block_count.ex +++ b/apps/explorer/lib/explorer/chain/cache/block_count.ex @@ -28,8 +28,8 @@ defmodule Explorer.Chain.Cache.BlockCount do defp handle_fallback(:async_task) do # If this gets called it means an async task was requested, but none exists # so a new one needs to be launched - task = - Task.async(fn -> + {:ok, task} = + Task.start(fn -> try do result = Chain.fetch_count_consensus_block() diff --git a/apps/explorer/lib/explorer/chain/cache/transaction_count.ex b/apps/explorer/lib/explorer/chain/cache/transaction_count.ex index e81bae7414..d6b2f7ae0d 100644 --- a/apps/explorer/lib/explorer/chain/cache/transaction_count.ex +++ b/apps/explorer/lib/explorer/chain/cache/transaction_count.ex @@ -29,8 +29,8 @@ defmodule Explorer.Chain.Cache.TransactionCount do defp handle_fallback(:async_task) do # If this gets called it means an async task was requested, but none exists # so a new one needs to be launched - task = - Task.async(fn -> + {:ok, task} = + Task.start(fn -> try do result = Repo.aggregate(Transaction, :count, :hash, timeout: :infinity) From 25dd5fc2d2d0a99f55f13a3919749bc9d178b6fe Mon Sep 17 00:00:00 2001 From: Yegor San Date: Mon, 9 Sep 2019 15:29:12 +0300 Subject: [PATCH 108/109] Created new loaders for blocks chain container, added 2 more loaders to transaction card, fixed height issue. --- .../assets/css/components/_card.scss | 7 +-- .../assets/css/components/_tile.scss | 12 +++++ .../templates/chain/show.html.eex | 49 ++++++++++++++++--- .../common_components/_tile-loader.html.eex | 48 ++++++++++++++++++ 4 files changed, 107 insertions(+), 9 deletions(-) diff --git a/apps/block_scout_web/assets/css/components/_card.scss b/apps/block_scout_web/assets/css/components/_card.scss index 37cbaf973d..8fff120deb 100644 --- a/apps/block_scout_web/assets/css/components/_card.scss +++ b/apps/block_scout_web/assets/css/components/_card.scss @@ -155,8 +155,8 @@ $card-tab-icon-color-active: #fff !default; } .card-chain-blocks { - height: 233px; - + min-height: 233px; + max-height: auto; [class*="col-"]:last-child { .tile { margin-bottom: 0; @@ -165,7 +165,8 @@ $card-tab-icon-color-active: #fff !default; } .card-chain-transactions { - height: 664px; + min-height: 664px; + max-height: auto; .tile { margin-bottom: 0; diff --git a/apps/block_scout_web/assets/css/components/_tile.scss b/apps/block_scout_web/assets/css/components/_tile.scss index e621e4fd6d..79441d0722 100644 --- a/apps/block_scout_web/assets/css/components/_tile.scss +++ b/apps/block_scout_web/assets/css/components/_tile.scss @@ -562,3 +562,15 @@ $cube-quantity: 5; transform: scale(0); } } + +.dark-block-loader { + width: auto; + height: 15px; + background-color: #e2e5ec; + margin-bottom: 5px; + border-radius: 4px; +} + +.dark-theme-applied .dark-block-loader { + background-color: #313355; +} diff --git a/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex index 8285d429e0..cb42c2c338 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/chain/show.html.eex @@ -91,13 +91,50 @@ <%= gettext "Something went wrong, click to reload." %> -
diff --git a/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tile-loader.html.eex b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tile-loader.html.eex index 6607baaeae..91195d51db 100644 --- a/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tile-loader.html.eex +++ b/apps/block_scout_web/lib/block_scout_web/templates/common_components/_tile-loader.html.eex @@ -46,6 +46,54 @@
+
+
+
+ + + + + + +
+
+ + +
+
+ + + + + + +
+
+
+
+
+
+ + + + + + +
+
+ + +
+
+ + + + + + +
+
+
From b7e79559b930b29a22428adec6b69b720171f057 Mon Sep 17 00:00:00 2001 From: Yegor San Date: Mon, 9 Sep 2019 17:52:08 +0300 Subject: [PATCH 109/109] Internationalization added --- apps/block_scout_web/priv/gettext/default.pot | 9 ++++----- .../priv/gettext/en/LC_MESSAGES/default.po | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/apps/block_scout_web/priv/gettext/default.pot b/apps/block_scout_web/priv/gettext/default.pot index f34f711620..9aec6fbce9 100644 --- a/apps/block_scout_web/priv/gettext/default.pot +++ b/apps/block_scout_web/priv/gettext/default.pot @@ -1090,7 +1090,6 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 -#: lib/block_scout_web/templates/chain/show.html.eex:99 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 msgid "Loading..." msgstr "" @@ -1168,7 +1167,7 @@ msgid "More internal transactions have come in" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/chain/show.html.eex:148 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 #: lib/block_scout_web/templates/transaction/index.html.eex:10 msgid "More transactions have come in" @@ -1431,7 +1430,7 @@ msgid "Something went wrong, click to reload." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:117 +#: lib/block_scout_web/templates/chain/show.html.eex:154 msgid "Something went wrong, click to retry." msgstr "" @@ -1595,7 +1594,7 @@ msgstr "" #: 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:18 -#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/chain/show.html.eex:145 #: lib/block_scout_web/templates/layout/_topnav.html.eex:50 #: lib/block_scout_web/views/address_view.ex:305 msgid "Transactions" @@ -1732,7 +1731,7 @@ msgid "View All Blocks" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:107 +#: lib/block_scout_web/templates/chain/show.html.eex:144 msgid "View All Transactions" 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 f34f711620..9aec6fbce9 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 @@ -1090,7 +1090,6 @@ msgstr "" #, elixir-format #: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 -#: lib/block_scout_web/templates/chain/show.html.eex:99 #: lib/block_scout_web/templates/tokens/read_contract/index.html.eex:21 msgid "Loading..." msgstr "" @@ -1168,7 +1167,7 @@ msgid "More internal transactions have come in" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:111 +#: lib/block_scout_web/templates/chain/show.html.eex:148 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:10 #: lib/block_scout_web/templates/transaction/index.html.eex:10 msgid "More transactions have come in" @@ -1431,7 +1430,7 @@ msgid "Something went wrong, click to reload." msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:117 +#: lib/block_scout_web/templates/chain/show.html.eex:154 msgid "Something went wrong, click to retry." msgstr "" @@ -1595,7 +1594,7 @@ msgstr "" #: 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:18 -#: lib/block_scout_web/templates/chain/show.html.eex:108 +#: lib/block_scout_web/templates/chain/show.html.eex:145 #: lib/block_scout_web/templates/layout/_topnav.html.eex:50 #: lib/block_scout_web/views/address_view.ex:305 msgid "Transactions" @@ -1732,7 +1731,7 @@ msgid "View All Blocks" msgstr "" #, elixir-format -#: lib/block_scout_web/templates/chain/show.html.eex:107 +#: lib/block_scout_web/templates/chain/show.html.eex:144 msgid "View All Transactions" msgstr ""