diff --git a/CHANGELOG.md b/CHANGELOG.md index 12ee5af871..bce3c66497 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 +- [#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 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..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 @@ -3,6 +3,15 @@ defmodule BlockScoutWeb.ChainView do alias BlockScoutWeb.LayoutView + 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(:standard, exchange_rate) do exchange_rate.market_cap_usd end diff --git a/apps/explorer/config/config.exs b/apps/explorer/config/config.exs index 93298073e0..10e8a66e82 100644 --- a/apps/explorer/config/config.exs +++ b/apps/explorer/config/config.exs @@ -31,8 +31,7 @@ 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 = if 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 0ab2993b73..1581bd4846 100644 --- a/apps/explorer/lib/explorer/chain.ex +++ b/apps/explorer/lib/explorer/chain.ex @@ -2727,7 +2727,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..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,34 +10,18 @@ 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 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"]} @@ -83,7 +65,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..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,43 +11,50 @@ defmodule Explorer.ExchangeRates.Source.CoinGecko do @behaviour Source @impl Source - def format_data(data) do + def format_data(%{"market_data" => _} = json_data) 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"]) + market_data = json_data["market_data"] + {:ok, last_updated, 0} = DateTime.from_iso8601(market_data["last_updated"]) - current_price = to_decimal(item["current_price"]) + current_price = to_decimal(market_data["current_price"]["usd"]) - id = item["id"] - btc_value = if id != "btc", do: Decimal.div(current_price, btc_price), else: 1 + 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 format_data(_), do: [] + + @impl Source + 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" 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..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() @@ -45,7 +53,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_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"}] """ 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 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..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,32 +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 """ - [ - { - "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_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 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 + } + ] +} diff --git a/docs/env-variables.md b/docs/env-variables.md index a0fae07bc3..dd01cbe26f 100644 --- a/docs/env-variables.md +++ b/docs/env-variables.md @@ -14,54 +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 | | +| 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 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 | | | +| `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 | | |