Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Store and display native coin market cap from the DB #7585

Merged
merged 8 commits into from Jun 20, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -7,6 +7,7 @@
- [#7653](https://github.com/blockscout/blockscout/pull/7653) - Add support for DEPOSIT and WITHDRAW token transfer event in older contracts
- [#7628](https://github.com/blockscout/blockscout/pull/7628) - Support partially verified property from verifier MS; Add property to track contracts automatically verified via eth-bytecode-db
- [#7603](https://github.com/blockscout/blockscout/pull/7603) - Add Polygon Edge and optimism genesis files support
- [#7585](https://github.com/blockscout/blockscout/pull/7585) - Store and display native coin market cap from the DB
- [#7513](https://github.com/blockscout/blockscout/pull/7513) - Add Polygon Edge support
- [#7532](https://github.com/blockscout/blockscout/pull/7532) - Handle empty id in json rpc responses
- [#7544](https://github.com/blockscout/blockscout/pull/7544) - Add ERC-1155 signatures to uncataloged_token_transfer_block_numbers
Expand Down
Expand Up @@ -18,7 +18,6 @@ defmodule BlockScoutWeb.AddressChannel do
alias Explorer.{Chain, Market, Repo}
alias Explorer.Chain.{Hash, Transaction, Wei}
alias Explorer.Chain.Hash.Address, as: AddressHash
alias Explorer.ExchangeRates.Token
alias Phoenix.View

intercept([
Expand All @@ -43,7 +42,7 @@ defmodule BlockScoutWeb.AddressChannel do
with {:ok, casted_address_hash} <- AddressHash.cast(socket.assigns.address_hash),
{:ok, address = %{fetched_coin_balance: balance}} when not is_nil(balance) <-
Chain.hash_to_address(casted_address_hash),
exchange_rate <- Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate <- Market.get_coin_exchange_rate(),
{:ok, rendered} <- render_balance_card(address, exchange_rate, socket) do
reply =
{:ok,
Expand Down Expand Up @@ -233,7 +232,7 @@ defmodule BlockScoutWeb.AddressChannel do
) do
push(socket, "current_coin_balance", %{
coin_balance: (coin_balance && coin_balance.value) || %Wei{value: Decimal.new(0)},
exchange_rate: (Market.get_exchange_rate(Explorer.coin()) || Token.null()).usd_value,
exchange_rate: Market.get_coin_exchange_rate().usd_value,
block_number: block_number
})
end
Expand All @@ -248,7 +247,7 @@ defmodule BlockScoutWeb.AddressChannel do
conn: socket,
address: Chain.hash_to_address(hash),
coin_balance: (coin_balance && coin_balance.value) || %Wei{value: Decimal.new(0)},
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate: Market.get_coin_exchange_rate()
)

rendered_link =
Expand Down
Expand Up @@ -8,7 +8,6 @@ defmodule BlockScoutWeb.Account.Api.V1.UserController do
alias Explorer.Account.Api.Key, as: ApiKey
alias Explorer.Account.CustomABI
alias Explorer.Account.{Identity, PublicTagsRequest, TagAddress, TagTransaction, WatchlistAddress}
alias Explorer.ExchangeRates.Token
alias Explorer.{Market, Repo}
alias Plug.CSRFProtection

Expand All @@ -34,7 +33,7 @@ defmodule BlockScoutWeb.Account.Api.V1.UserController do
conn
|> put_status(200)
|> render(:watchlist_addresses, %{
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
watchlist_addresses: watchlist_with_addresses.watchlist_addresses
})
end
Expand Down Expand Up @@ -103,7 +102,7 @@ defmodule BlockScoutWeb.Account.Api.V1.UserController do
|> put_status(200)
|> render(:watchlist_address, %{
watchlist_address: watchlist_address,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate: Market.get_coin_exchange_rate()
})
end
end
Expand Down Expand Up @@ -160,7 +159,7 @@ defmodule BlockScoutWeb.Account.Api.V1.UserController do
|> put_status(200)
|> render(:watchlist_address, %{
watchlist_address: watchlist_address,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate: Market.get_coin_exchange_rate()
})
end
end
Expand Down
Expand Up @@ -12,7 +12,6 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
alias BlockScoutWeb.{AccessHelper, AddressCoinBalanceView, Controller}
alias Explorer.{Chain, Market}
alias Explorer.Chain.{Address, Wei}
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -76,7 +75,7 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
render(conn, "index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
tags: get_address_tags(address_hash, current_user(conn))
Expand All @@ -102,7 +101,7 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
"index.html",
address: address,
coin_balance_status: nil,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
current_path: Controller.current_full_path(conn),
tags: get_address_tags(address_hash, current_user(conn))
Expand Down
Expand Up @@ -7,7 +7,6 @@ defmodule BlockScoutWeb.AddressContractController do

alias BlockScoutWeb.AccessHelper
alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token
alias Explorer.SmartContract.Solidity.PublishHelper
alias Indexer.Fetcher.CoinBalanceOnDemand

Expand All @@ -31,7 +30,7 @@ defmodule BlockScoutWeb.AddressContractController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down
Expand Up @@ -16,7 +16,6 @@ defmodule BlockScoutWeb.AddressController do

alias Explorer.{Chain, Market}
alias Explorer.Chain.Wei
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand All @@ -41,7 +40,7 @@ defmodule BlockScoutWeb.AddressController do
)
end

exchange_rate = Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate = Market.get_coin_exchange_rate()
total_supply = Chain.total_supply()

items_count_str = Map.get(params, "items_count")
Expand Down Expand Up @@ -101,7 +100,7 @@ defmodule BlockScoutWeb.AddressController do
"_show_address_transactions.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
Expand Down Expand Up @@ -131,7 +130,7 @@ defmodule BlockScoutWeb.AddressController do
"_show_address_transactions.html",
address: address,
coin_balance_status: nil,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
Expand Down
Expand Up @@ -6,7 +6,6 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do

alias BlockScoutWeb.AccessHelper
alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand

def index(conn, %{"address_id" => address_hash_string} = params) do
Expand All @@ -18,7 +17,7 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down
Expand Up @@ -12,7 +12,6 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
alias BlockScoutWeb.{AccessHelper, Controller, InternalTransactionView}
alias Explorer.{Chain, Market}
alias Explorer.Chain.{Address, Wei}
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -86,7 +85,7 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
current_path: Controller.current_full_path(conn),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
tags: get_address_tags(address_hash, current_user(conn))
Expand All @@ -113,7 +112,7 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
address: address,
filter: params["filter"],
coin_balance_status: nil,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
current_path: Controller.current_full_path(conn),
tags: get_address_tags(address_hash, current_user(conn))
Expand Down
Expand Up @@ -11,7 +11,6 @@ defmodule BlockScoutWeb.AddressLogsController do

alias BlockScoutWeb.{AccessHelper, AddressLogsView, Controller}
alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -67,7 +66,7 @@ defmodule BlockScoutWeb.AddressLogsController do
address: address,
current_path: Controller.current_full_path(conn),
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down
Expand Up @@ -15,7 +15,6 @@ defmodule BlockScoutWeb.AddressReadContractController do
alias BlockScoutWeb.AddressView
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token
alias Explorer.SmartContract.Reader
alias Indexer.Fetcher.CoinBalanceOnDemand

Expand All @@ -40,7 +39,7 @@ defmodule BlockScoutWeb.AddressReadContractController do
type: :regular,
action: :read,
custom_abi: custom_abi?,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate: Market.get_coin_exchange_rate()
]

with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string),
Expand Down
Expand Up @@ -8,7 +8,6 @@ defmodule BlockScoutWeb.AddressReadProxyController do
alias BlockScoutWeb.AccessHelper
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand

def index(conn, %{"address_id" => address_hash_string} = params) do
Expand All @@ -33,7 +32,7 @@ defmodule BlockScoutWeb.AddressReadProxyController do
type: :proxy,
action: :read,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down
Expand Up @@ -8,7 +8,6 @@ defmodule BlockScoutWeb.AddressTokenController do
alias BlockScoutWeb.{AccessHelper, AddressTokenView, Controller}
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -73,7 +72,7 @@ defmodule BlockScoutWeb.AddressTokenController do
address: address,
current_path: Controller.current_full_path(conn),
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down
Expand Up @@ -5,7 +5,6 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
import BlockScoutWeb.Models.GetAddressTags, only: [get_address_tags: 2]

alias BlockScoutWeb.{AccessHelper, Controller, TransactionView}
alias Explorer.ExchangeRates.Token
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Indexer.Fetcher.CoinBalanceOnDemand
Expand Down Expand Up @@ -109,7 +108,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
current_path: Controller.current_full_path(conn),
token: token,
Expand Down Expand Up @@ -202,7 +201,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
Expand Down
Expand Up @@ -23,7 +23,6 @@ defmodule BlockScoutWeb.AddressTransactionController do

alias Explorer.Chain.Wei

alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -124,7 +123,7 @@ defmodule BlockScoutWeb.AddressTransactionController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
Expand Down Expand Up @@ -154,7 +153,7 @@ defmodule BlockScoutWeb.AddressTransactionController do
"index.html",
address: address,
coin_balance_status: nil,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
Expand Down
Expand Up @@ -12,7 +12,6 @@ defmodule BlockScoutWeb.AddressValidationController do
import BlockScoutWeb.Models.GetAddressTags, only: [get_address_tags: 2]

alias BlockScoutWeb.{AccessHelper, BlockView, Controller}
alias Explorer.ExchangeRates.Token
alias Explorer.{Chain, Market}
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View
Expand Down Expand Up @@ -83,7 +82,7 @@ defmodule BlockScoutWeb.AddressValidationController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
tags: get_address_tags(address_hash, current_user(conn))
)
else
Expand Down
Expand Up @@ -16,7 +16,6 @@ defmodule BlockScoutWeb.AddressWithdrawalController do

alias Explorer.Chain.Wei

alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View

Expand Down Expand Up @@ -78,7 +77,7 @@ defmodule BlockScoutWeb.AddressWithdrawalController do
"index.html",
address: address,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
tags: get_address_tags(address_hash, current_user(conn))
Expand Down Expand Up @@ -107,7 +106,7 @@ defmodule BlockScoutWeb.AddressWithdrawalController do
"index.html",
address: address,
coin_balance_status: nil,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn),
tags: get_address_tags(address_hash, current_user(conn))
Expand Down
Expand Up @@ -15,7 +15,6 @@ defmodule BlockScoutWeb.AddressWriteContractController do
alias BlockScoutWeb.AddressView
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand

def index(conn, %{"address_id" => address_hash_string} = params) do
Expand All @@ -35,7 +34,7 @@ defmodule BlockScoutWeb.AddressWriteContractController do
type: :regular,
action: :write,
custom_abi: custom_abi?,
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null()
exchange_rate: Market.get_coin_exchange_rate()
]

with false <- AddressView.contract_interaction_disabled?(),
Expand Down
Expand Up @@ -8,7 +8,6 @@ defmodule BlockScoutWeb.AddressWriteProxyController do
alias BlockScoutWeb.{AccessHelper, AddressView}
alias Explorer.{Chain, Market}
alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token
alias Indexer.Fetcher.CoinBalanceOnDemand

def index(conn, %{"address_id" => address_hash_string} = params) do
Expand All @@ -34,7 +33,7 @@ defmodule BlockScoutWeb.AddressWriteProxyController do
type: :proxy,
action: :write,
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
exchange_rate: Market.get_coin_exchange_rate(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
tags: get_address_tags(address_hash, current_user(conn))
)
Expand Down