Create Address Tags and UI

Add tags to controllers

Get rid of private_tags

Add address tags link into topnav

Add model to get tags
account
Oleg Sovetnik 3 years ago committed by Viktor Baranov
parent 4cf8976bdb
commit 69f9dcdd0f
  1. 81
      apps/block_scout_web/lib/block_scout_web/controllers/account/tag_address_controller.ex
  2. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_coin_balance_controller.ex
  3. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_contract_controller.ex
  4. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_decompiled_contract_controller.ex
  5. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_internal_transaction_controller.ex
  6. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_logs_controller.ex
  7. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_read_contract_controller.ex
  8. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_read_proxy_controller.ex
  9. 9
      apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex
  10. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex
  11. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_validation_controller.ex
  12. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_write_contract_controller.ex
  13. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_write_proxy_controller.ex
  14. 5
      apps/block_scout_web/lib/block_scout_web/controllers/tokens/contract_controller.ex
  15. 5
      apps/block_scout_web/lib/block_scout_web/controllers/tokens/holder_controller.ex
  16. 5
      apps/block_scout_web/lib/block_scout_web/controllers/tokens/transfer_controller.ex
  17. 71
      apps/block_scout_web/lib/block_scout_web/models/add_tag_address.ex
  18. 67
      apps/block_scout_web/lib/block_scout_web/models/get_address_tags.ex
  19. 3
      apps/block_scout_web/lib/block_scout_web/templates/account/auth/profile.html.eex
  20. 13
      apps/block_scout_web/lib/block_scout_web/templates/account/common/_nav.html.eex
  21. 38
      apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/index.html.eex
  22. 41
      apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/new.html.eex
  23. 11
      apps/block_scout_web/lib/block_scout_web/templates/account/tag_address/row.html.eex
  24. 11
      apps/block_scout_web/lib/block_scout_web/templates/account/watchlist/show.html.eex
  25. 12
      apps/block_scout_web/lib/block_scout_web/templates/account/watchlist_address/edit.html.eex
  26. 12
      apps/block_scout_web/lib/block_scout_web/templates/account/watchlist_address/new.html.eex
  27. 16
      apps/block_scout_web/lib/block_scout_web/templates/address/_labels.html.eex
  28. 3
      apps/block_scout_web/lib/block_scout_web/templates/address/overview.html.eex
  29. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_coin_balance/index.html.eex
  30. 48
      apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex
  31. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_decompiled_contract/index.html.eex
  32. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_internal_transaction/index.html.eex
  33. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_logs/index.html.eex
  34. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_read_contract/index.html.eex
  35. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_read_proxy/index.html.eex
  36. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_token/index.html.eex
  37. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_token_transfer/index.html.eex
  38. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_transaction/index.html.eex
  39. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_validation/index.html.eex
  40. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_write_contract/index.html.eex
  41. 4
      apps/block_scout_web/lib/block_scout_web/templates/address_write_proxy/index.html.eex
  42. 1
      apps/block_scout_web/lib/block_scout_web/templates/layout/_topnav.html.eex
  43. 2
      apps/block_scout_web/lib/block_scout_web/templates/tokens/contract/index.html.eex
  44. 2
      apps/block_scout_web/lib/block_scout_web/templates/tokens/holder/index.html.eex
  45. 2
      apps/block_scout_web/lib/block_scout_web/templates/tokens/inventory/index.html.eex
  46. 3
      apps/block_scout_web/lib/block_scout_web/templates/tokens/overview/_details.html.eex
  47. 2
      apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/index.html.eex
  48. 4
      apps/block_scout_web/lib/block_scout_web/templates/transaction/_tile.html.eex
  49. 4
      apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex
  50. 3
      apps/block_scout_web/lib/block_scout_web/views/account/common_view.ex
  51. 7
      apps/block_scout_web/lib/block_scout_web/views/account/tag_address_view.ex
  52. 1
      apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex
  53. 16
      apps/block_scout_web/lib/block_scout_web/web_router.ex
  54. 228
      apps/block_scout_web/priv/gettext/default.pot
  55. 228
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po
  56. 3
      apps/explorer/lib/explorer/accounts/identity.ex
  57. 32
      apps/explorer/lib/explorer/accounts/tag_address.ex
  58. 1
      apps/explorer/lib/explorer/exchange_rates/token.ex
  59. 37
      apps/explorer/lib/explorer/tags/address_to_tag.ex
  60. 20
      apps/explorer/priv/repo/migrations/20220212222222_create_account_tag_addresses.exs
  61. 4
      docker/Makefile

@ -0,0 +1,81 @@
defmodule BlockScoutWeb.Account.TagAddressController do
use BlockScoutWeb, :controller
alias BlockScoutWeb.Account.AuthController
alias Ecto.Changeset
alias Explorer.Accounts.TagAddress
alias Explorer.Repo
import BlockScoutWeb.Account.AuthController, only: [authenticate!: 1]
def index(conn, _params) do
case AuthController.current_user(conn) do
nil ->
conn
# |> put_flash(:info, "Sign in to see address tags")
|> redirect(to: root())
%{} = user ->
render(
conn,
"index.html",
address_tags: address_tags(user)
)
end
end
def new(conn, _params) do
authenticate!(conn)
render(conn, "new.html", new_tag: new_tag())
end
def create(conn, %{"tag_address" => params}) do
current_user = authenticate!(conn)
case AddTagAddress.call(current_user.id, params) do
{:ok, _tag_address} ->
conn
# |> put_flash(:info, "Tag Address created!")
|> redirect(to: tag_address_path(conn, :index))
{:error, message = message} ->
conn
# |> put_flash(:error, message)
|> render("new.html", new_tag: changeset_with_error(params, message))
end
end
def delete(conn, %{"id" => id}) do
current_user = authenticate!(conn)
TagAddress
|> Repo.get_by(id: id, identity_id: current_user.id)
|> Repo.delete()
conn
# |> put_flash(:info, "Tag Address removed successfully.")
|> redirect(to: tag_address_path(conn, :index))
end
def address_tags(user) do
TagAddress
|> Repo.all(identity_id: user.id)
|> Repo.preload(:address)
end
defp new_tag, do: TagAddress.changeset(%TagAddress{}, %{})
defp changeset_with_error(params, message) do
%{changeset(params) | action: :insert}
|> Changeset.add_error(:address_hash, message)
end
defp changeset(params) do
TagAddress.changeset(%TagAddress{}, params)
end
defp root do
System.get_env("NETWORK_PATH") || "/"
end
end

@ -12,7 +12,6 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.{Address, Wei} alias Explorer.Chain.{Address, Wei}
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View alias Phoenix.View
@ -74,7 +73,7 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
{:ok, address} <- Chain.hash_to_address(address_hash), {:ok, address} <- Chain.hash_to_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render(conn, "index.html", render(conn, "index.html",
address: address, address: address,
@ -82,7 +81,7 @@ defmodule BlockScoutWeb.AddressCoinBalanceController do
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -7,7 +7,6 @@ defmodule BlockScoutWeb.AddressContractController do
alias BlockScoutWeb.AddressContractVerificationController, as: VerificationController alias BlockScoutWeb.AddressContractVerificationController, as: VerificationController
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -26,7 +25,7 @@ defmodule BlockScoutWeb.AddressContractController do
_ <- VerificationController.check_and_verify(address_hash_string), _ <- VerificationController.check_and_verify(address_hash_string),
{:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do {:ok, address} <- Chain.find_contract_address(address_hash, address_options, true) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -35,7 +34,7 @@ defmodule BlockScoutWeb.AddressContractController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -5,7 +5,6 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do
alias BlockScoutWeb.Account.AuthController alias BlockScoutWeb.Account.AuthController
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -13,7 +12,7 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do
{:ok, address} <- Chain.find_decompiled_contract_address(address_hash), {:ok, address} <- Chain.find_decompiled_contract_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -22,7 +21,7 @@ defmodule BlockScoutWeb.AddressDecompiledContractController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -12,7 +12,6 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.{Address, Wei} alias Explorer.Chain.{Address, Wei}
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View alias Phoenix.View
@ -81,7 +80,7 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
{:ok, address} <- Chain.hash_to_address(address_hash), {:ok, address} <- Chain.hash_to_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -92,7 +91,7 @@ defmodule BlockScoutWeb.AddressInternalTransactionController do
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
filter: params["filter"], filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -9,7 +9,6 @@ defmodule BlockScoutWeb.AddressLogsController do
alias BlockScoutWeb.Account.AuthController alias BlockScoutWeb.Account.AuthController
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View alias Phoenix.View
@ -60,7 +59,7 @@ defmodule BlockScoutWeb.AddressLogsController do
{:ok, address} <- Chain.hash_to_address(address_hash), {:ok, address} <- Chain.hash_to_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -70,7 +69,7 @@ defmodule BlockScoutWeb.AddressLogsController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
private_tags: private_tags tags: tags
) )
else else
_ -> _ ->

@ -13,7 +13,6 @@ defmodule BlockScoutWeb.AddressReadContractController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -32,7 +31,7 @@ defmodule BlockScoutWeb.AddressReadContractController do
false <- is_nil(address.smart_contract), false <- is_nil(address.smart_contract),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -43,7 +42,7 @@ defmodule BlockScoutWeb.AddressReadContractController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
_ -> _ ->

@ -7,7 +7,6 @@ defmodule BlockScoutWeb.AddressReadProxyController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -26,7 +25,7 @@ defmodule BlockScoutWeb.AddressReadProxyController do
false <- is_nil(address.smart_contract), false <- is_nil(address.smart_contract),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -37,7 +36,7 @@ defmodule BlockScoutWeb.AddressReadProxyController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
_ -> _ ->

@ -6,7 +6,6 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View alias Phoenix.View
@ -104,7 +103,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
{:ok, token} <- Chain.token_from_address_hash(token_hash), {:ok, token} <- Chain.token_from_address_hash(token_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -115,7 +114,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
token: token, token: token,
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->
@ -199,7 +198,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
{:ok, address} <- Chain.hash_to_address(address_hash), {:ok, address} <- Chain.hash_to_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -210,7 +209,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
filter: params["filter"], filter: params["filter"],
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -9,7 +9,6 @@ defmodule BlockScoutWeb.AddressTransactionController do
alias BlockScoutWeb.{AccessHelpers, Controller, TransactionView} alias BlockScoutWeb.{AccessHelpers, Controller, TransactionView}
alias BlockScoutWeb.Account.AuthController alias BlockScoutWeb.Account.AuthController
alias Explorer.Tags.AddressToTag
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.{ alias Explorer.Chain.{
@ -117,7 +116,7 @@ defmodule BlockScoutWeb.AddressTransactionController do
{:ok, address} <- Chain.hash_to_address(address_hash), {:ok, address} <- Chain.hash_to_address(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -128,7 +127,7 @@ defmodule BlockScoutWeb.AddressTransactionController do
filter: params["filter"], filter: params["filter"],
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}),
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
private_tags: private_tags tags: tags
) )
else else
:error -> :error ->

@ -10,7 +10,6 @@ defmodule BlockScoutWeb.AddressValidationController do
alias BlockScoutWeb.{AccessHelpers, BlockView, Controller} alias BlockScoutWeb.{AccessHelpers, BlockView, Controller}
alias BlockScoutWeb.Account.AuthController alias BlockScoutWeb.Account.AuthController
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
alias Phoenix.View alias Phoenix.View
@ -75,7 +74,7 @@ defmodule BlockScoutWeb.AddressValidationController do
{:ok, address} <- Chain.find_or_insert_address_from_hash(address_hash), {:ok, address} <- Chain.find_or_insert_address_from_hash(address_hash),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -85,7 +84,7 @@ defmodule BlockScoutWeb.AddressValidationController do
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
counters_path: address_path(conn, :address_counters, %{"id" => address_hash_string}), 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_exchange_rate(Explorer.coin()) || Token.null(),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -13,7 +13,6 @@ defmodule BlockScoutWeb.AddressWriteContractController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -32,7 +31,7 @@ defmodule BlockScoutWeb.AddressWriteContractController do
false <- is_nil(address.smart_contract), false <- is_nil(address.smart_contract),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -43,7 +42,7 @@ defmodule BlockScoutWeb.AddressWriteContractController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
_ -> _ ->

@ -7,7 +7,6 @@ defmodule BlockScoutWeb.AddressWriteProxyController do
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.CoinBalanceOnDemand alias Indexer.Fetcher.CoinBalanceOnDemand
def index(conn, %{"address_id" => address_hash_string} = params) do def index(conn, %{"address_id" => address_hash_string} = params) do
@ -26,7 +25,7 @@ defmodule BlockScoutWeb.AddressWriteProxyController do
false <- is_nil(address.smart_contract), false <- is_nil(address.smart_contract),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -37,7 +36,7 @@ defmodule BlockScoutWeb.AddressWriteProxyController do
coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address), coin_balance_status: CoinBalanceOnDemand.trigger_fetch(address),
exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(), exchange_rate: Market.get_exchange_rate(Explorer.coin()) || Token.null(),
counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}), counters_path: address_path(conn, :address_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
_ -> _ ->

@ -5,7 +5,6 @@ defmodule BlockScoutWeb.Tokens.ContractController do
alias BlockScoutWeb.{AccessHelpers, TabHelpers} alias BlockScoutWeb.{AccessHelpers, TabHelpers}
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.Tags.AddressToTag
def index(conn, %{"token_id" => address_hash_string} = params) do def index(conn, %{"token_id" => address_hash_string} = params) do
options = [necessity_by_association: %{[contract_address: :smart_contract] => :optional}] options = [necessity_by_association: %{[contract_address: :smart_contract] => :optional}]
@ -15,7 +14,7 @@ defmodule BlockScoutWeb.Tokens.ContractController do
{:ok, token} <- Chain.token_from_address_hash(address_hash, options), {:ok, token} <- Chain.token_from_address_hash(address_hash, options),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
%{type: type, action: action} = %{type: type, action: action} =
cond do cond do
@ -39,7 +38,7 @@ defmodule BlockScoutWeb.Tokens.ContractController do
action: action, action: action,
token: Market.add_price(token), token: Market.add_price(token),
counters_path: token_path(conn, :token_counters, %{"id" => Address.checksum(address_hash)}), counters_path: token_path(conn, :token_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -6,7 +6,6 @@ defmodule BlockScoutWeb.Tokens.HolderController do
alias BlockScoutWeb.Tokens.HolderView alias BlockScoutWeb.Tokens.HolderView
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.Tags.AddressToTag
alias Phoenix.View alias Phoenix.View
import BlockScoutWeb.Chain, import BlockScoutWeb.Chain,
@ -64,7 +63,7 @@ defmodule BlockScoutWeb.Tokens.HolderController do
{:ok, token} <- Chain.token_from_address_hash(address_hash, options), {:ok, token} <- Chain.token_from_address_hash(address_hash, options),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -72,7 +71,7 @@ defmodule BlockScoutWeb.Tokens.HolderController do
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
token: Market.add_price(token), token: Market.add_price(token),
counters_path: token_path(conn, :token_counters, %{"id" => Address.checksum(address_hash)}), counters_path: token_path(conn, :token_counters, %{"id" => Address.checksum(address_hash)}),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -6,7 +6,6 @@ defmodule BlockScoutWeb.Tokens.TransferController do
alias BlockScoutWeb.Tokens.TransferView alias BlockScoutWeb.Tokens.TransferView
alias Explorer.{Chain, Market} alias Explorer.{Chain, Market}
alias Explorer.Chain.Address alias Explorer.Chain.Address
alias Explorer.Tags.AddressToTag
alias Indexer.Fetcher.TokenTotalSupplyOnDemand alias Indexer.Fetcher.TokenTotalSupplyOnDemand
alias Phoenix.View alias Phoenix.View
@ -68,7 +67,7 @@ defmodule BlockScoutWeb.Tokens.TransferController do
{:ok, token} <- Chain.token_from_address_hash(address_hash, options), {:ok, token} <- Chain.token_from_address_hash(address_hash, options),
{:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do {:ok, false} <- AccessHelpers.restricted_access?(address_hash_string, params) do
current_user = AuthController.current_user(conn) current_user = AuthController.current_user(conn)
private_tags = AddressToTag.get_private_tags_on_address(address_hash, current_user) tags = GetAddressTags.call(address_hash, current_user)
render( render(
conn, conn,
@ -77,7 +76,7 @@ defmodule BlockScoutWeb.Tokens.TransferController do
current_path: Controller.current_full_path(conn), current_path: Controller.current_full_path(conn),
token: Market.add_price(token), token: Market.add_price(token),
token_total_supply_status: TokenTotalSupplyOnDemand.trigger_fetch(address_hash), token_total_supply_status: TokenTotalSupplyOnDemand.trigger_fetch(address_hash),
private_tags: private_tags tags: tags
) )
else else
{:restricted_access, _} -> {:restricted_access, _} ->

@ -0,0 +1,71 @@
defmodule AddTagAddress do
@moduledoc """
Create tag address, associated with Address and Identity
"""
alias Explorer.Accounts.TagAddress
alias Explorer.{Chain, Repo}
alias Explorer.Chain.Address
def call(identity_id, %{"address_hash" => address_hash_string} = params) do
case format_address(address_hash_string) do
{:ok, address_hash} ->
try_create_tag_address(identity_id, address_hash, params)
:error ->
{:error, "Wrong address, "}
end
end
defp try_create_tag_address(identity_id, address_hash, params) do
case find_tag_address(identity_id, address_hash) do
%TagAddress{} ->
{:error, "Address tag already exists!"}
nil ->
with {:ok, %Address{} = address} <- find_or_create_address(address_hash) do
address
|> build_tag_address(identity_id, params)
|> Repo.insert()
end
end
end
defp format_address(address_hash_string) do
Chain.string_to_address_hash(address_hash_string)
end
defp find_tag_address(identity_id, address_hash) do
Repo.get_by(TagAddress,
address_hash: address_hash,
identity_id: identity_id
)
end
defp find_or_create_address(address_hash) do
with {:error, :address_not_found} <- find_address(address_hash),
do: create_address(address_hash)
end
defp create_address(address_hash) do
with {:error, _} <- Repo.insert(%Address{hash: address_hash}),
do: {:error, :wrong_address}
end
defp find_address(address_hash) do
case Repo.get(Address, address_hash) do
nil -> {:error, :address_not_found}
%Address{} = address -> {:ok, address}
end
end
defp build_tag_address(address, identity_id, %{"name" => name}) do
TagAddress.changeset(
%TagAddress{
identity_id: identity_id,
address_hash: address.hash
},
%{name: name}
)
end
end

@ -0,0 +1,67 @@
defmodule GetAddressTags do
@moduledoc """
Get various types of tags associated with the address
"""
import Ecto.Query, only: [from: 2]
alias Explorer.Accounts.{TagAddress, WatchlistAddress}
alias Explorer.Chain.Hash
alias Explorer.Repo
alias Explorer.Tags.{AddressTag, AddressToTag}
def call(nil, nil),
do: %{personal_tags: [], watchlist_names: []}
def call(%Hash{} = address_hash, current_user) do
%{
# common_tags: get_tags_on_address(address_hash),
personal_tags: get_personal_tags(address_hash, current_user),
watchlist_names: get_watchlist_names_on_address(address_hash, current_user)
}
end
def get_tags_on_address(%Hash{} = address_hash) do
query =
from(
tt in AddressTag,
left_join: att in AddressToTag,
on: tt.id == att.tag_id,
where: att.address_hash == ^address_hash,
where: tt.label != ^"validator",
select: %{label: tt.label, display_name: tt.display_name}
)
Repo.all(query)
end
def get_tags_on_address(_), do: []
def get_personal_tags(%Hash{} = address_hash, %{id: id}) do
query =
from(
ta in TagAddress,
where: ta.address_hash == ^address_hash,
where: ta.identity_id == ^id,
select: %{label: ta.name, display_name: ta.name}
)
Repo.all(query)
end
def get_personal_tags(_, _), do: []
def get_watchlist_names_on_address(%Hash{} = address_hash, %{watchlist_id: watchlist_id}) do
query =
from(
wa in WatchlistAddress,
where: wa.address_hash == ^address_hash,
where: wa.watchlist_id == ^watchlist_id,
select: %{label: wa.name, display_name: wa.name}
)
Repo.all(query)
end
def get_watchlist_names_on_address(_, _), do: []
end

@ -8,6 +8,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="dropdown-item fs-14" href="<%= watchlist_path(@conn, :show) %>">Watchlist</a> <a class="dropdown-item fs-14" href="<%= watchlist_path(@conn, :show) %>">Watchlist</a>
</li> </li>
<li class="nav-item">
<a class="dropdown-item fs-14" href="<%= tag_address_path(@conn, :index) %>">Address Tags</a>
</li>
</ul> </ul>
</div> </div>
<div class="col-md"> <div class="col-md">

@ -0,0 +1,13 @@
<div class="col-2 mb-3">
<ul class="nav flex-column">
<li class="nav-item">
<a class="dropdown-item fs-14" aria-current="page" href="<%= auth_path(@conn, :profile) %>">Profile</a>
</li>
<li class="nav-item">
<a class="dropdown-item fs-14" href="<%= watchlist_path(@conn, :show) %>">Watchlist</a>
</li>
<li class="nav-item">
<a class="dropdown-item fs-14" href="<%= tag_address_path(@conn, :index) %>">Address Tags</a>
</li>
</ul>
</div>

@ -0,0 +1,38 @@
<section class="container">
<div class="row">
<%= render BlockScoutWeb.Account.CommonView, "_nav.html", conn: @conn %>
<div class="col-md">
<div class="card">
<div class="card-body" >
<h1 class="card-title list-title-description header-account">Address Tags</h1>
<br>
<div class="col-sm">
<div class="mb-3 row o-flow-x">
<%= if @address_tags == [] do %>
<div style="min-width: 100%;">
<div class="tile tile-muted text-center" data-selector="empty-coin-balances-list">
You don't have address tags yet
</div>
</div>
<h2></h2>
<% else %>
<table class="table mb-3 table-watchlist">
<thead style="font-size: 14px; color: #6c757d" >
<tr>
<th scope="col">Name</th>
<th scope="col">Address</th>
</tr>
</thead>
<tbody style="font-size: 15px; color: #6c757d" >
<%= Enum.map(@address_tags, fn at ->
render(TagAddressView, "row.html", address_tag: at, conn: @conn)
end) %>
</tbody>
</table>
<% end %>
</div>
</div>
<a class="button button-primary button-sm" href="<%= tag_address_path(@conn, :new) %>">Add address tag</a>
</div>
</div>
</section>

@ -0,0 +1,41 @@
<section class="container">
<div class="row">
<div class="col-2 mb-3">
<ul class="nav flex-column">
<li class="nav-item">
<a class="dropdown-item fs-14" aria-current="page" href="<%= auth_path(@conn, :profile) %>">Profile</a>
</li>
<li class="nav-item">
<a class="dropdown-item acc-link-active fs-14" style="font-size: 14px;" href="#">Watchlist</a>
</li>
</ul>
</div>
<div class="col-sm-10">
<div class="card">
<div class="card-body" >
<h1 class="card-title list-title-description header-account">Add address tag</h1>
<div class="col-sm-10 card-body-account">
<%= form_for @new_tag, tag_address_path(@conn, :create), fn f -> %>
<div class="form-group">
<%= label f, :address_hash, "Address", class: "control-label", style: "font-size: 14px" %>
<%= text_input f, :address_hash, class: "form-control", placeholder: "0x0000000000000000000000000000000000000000" %>
<%= error_tag f, :address_hash, style: "color: #ff7986;" %>
</div>
<div class="form-group">
<%= label f, :name, "Name", class: "control-label", style: "font-size: 14px" %>
<%= text_input f, :name, class: "form-control", placeholder: "Name this address" %>
<%= error_tag f, :name %>
</div>
<div class="form-group float-right form-input">
<a class="btn btn-line" href="<%= tag_address_path(@conn, :index) %>"> Back to Address Tags (Cancel)</a>
<%= submit "Save", class: "button button-primary button-sm ml-3" %>
</div>
<% end %>
</div>
</div>
</div>
</div>
</div>
</section>

@ -0,0 +1,11 @@
<tr>
<td><%= @address_tag.name %></td>
<td>
<div>
<%= link(trimmed_hash(@address_tag.address_hash), to: address_path(@conn, :show, @address_tag.address_hash)) %>
<%= render BlockScoutWeb.CommonComponentsView, "_btn_copy.html",
additional_classes: ["btn-copy-icon-small", "btn-copy-icon-custom", "btn-copy-icon-no-borders"], clipboard_text: @address_tag.address_hash, aria_label: gettext("Copy Address"), title: gettext("Copy Address"), style: "display: inline-block; vertical-align: text-bottom; position: initial; margin-top: 1px;" %>
<%= link "Remove Tag", to: tag_address_path(@conn, :delete, @address_tag.id), method: :delete, class: "btn btn-danger white button-sm", style: "color: #fff !important;" %>
</div>
</td>
</tr>

@ -1,15 +1,6 @@
<section class="container"> <section class="container">
<div class="row"> <div class="row">
<div class="col-2 mb-3"> <%= render BlockScoutWeb.Account.CommonView, "_nav.html", conn: @conn %>
<ul class="nav flex-column">
<li class="nav-item">
<a class="dropdown-item fs-14" aria-current="page" href="<%= auth_path(@conn, :profile) %>">Profile</a>
</li>
<li class="nav-item">
<a class="dropdown-item acc-link-active fs-14" href="#">Watchlist</a>
</li>
</ul>
</div>
<div class="col-md"> <div class="col-md">
<div class="card"> <div class="card">
<div class="card-body" > <div class="card-body" >

@ -1,16 +1,6 @@
<section class="container"> <section class="container">
<div class="row"> <div class="row">
<div class="col-2 mb-3"> <%= render BlockScoutWeb.Account.CommonView, "_nav.html", conn: @conn %>
<ul class="nav flex-column">
<li class="nav-item">
<a class="dropdown-item fs-14" aria-current="page" style="font-size: 14px;" href="<%= auth_path(@conn, :profile) %>">Profile</a>
</li>
<li class="nav-item">
<a class="dropdown-item acc-link-active fs-14" style="font-size: 14px;" href="#">Watchlist</a>
</li>
</ul>
</div>
<div class="col-sm-10"> <div class="col-sm-10">
<div class="card"> <div class="card">
<div class="card-body" > <div class="card-body" >

@ -1,16 +1,6 @@
<section class="container"> <section class="container">
<div class="row"> <div class="row">
<div class="col-2 mb-3"> <%= render BlockScoutWeb.Account.CommonView, "_nav.html", conn: @conn %>
<ul class="nav flex-column">
<li class="nav-item">
<a class="dropdown-item fs-14" aria-current="page" href="<%= auth_path(@conn, :profile) %>">Profile</a>
</li>
<li class="nav-item">
<a class="dropdown-item acc-link-active fs-14" style="font-size: 14px;" href="#">Watchlist</a>
</li>
</ul>
</div>
<div class="col-sm-10"> <div class="col-sm-10">
<div class="card"> <div class="card">
<div class="card-body" > <div class="card-body" >

@ -1,8 +1,14 @@
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= for personal_tag <- @tags.personal_tags do %>
<%= for private_tag <- private_tags do %> <%= if personal_tag.label =~ "dark forest" do %>
<%= if private_tag.label =~ "dark forest" do %> <%= render BlockScoutWeb.FormView, "_tag.html", text: personal_tag.display_name, additional_classes: ["df", "ml-1"] %>
<%= render BlockScoutWeb.FormView, "_tag.html", text: private_tag.display_name, additional_classes: ["df", "ml-1"] %>
<% else %> <% else %>
<%= render BlockScoutWeb.FormView, "_tag.html", text: private_tag.display_name, additional_classes: [tag_name_to_label(private_tag.label), "ml-1"] %> <%= render BlockScoutWeb.FormView, "_tag.html", text: personal_tag.display_name, additional_classes: [tag_name_to_label(personal_tag.label), "ml-1"] %>
<% end %>
<% end %>
<%= for watchlist_name <- @tags.watchlist_names do %>
<%= if watchlist_name.label =~ "dark forest" do %>
<%= render BlockScoutWeb.FormView, "_tag.html", text: watchlist_name.display_name, additional_classes: ["df", "ml-1"] %>
<% else %>
<%= render BlockScoutWeb.FormView, "_tag.html", text: watchlist_name.display_name, additional_classes: [tag_name_to_label(watchlist_name.label), "ml-1"] %>
<% end %> <% end %>
<% end %> <% end %>

@ -5,7 +5,6 @@
<% circles_addresses_list = CustomContractsHelpers.get_custom_addresses_list(:circles_addresses) %> <% circles_addresses_list = CustomContractsHelpers.get_custom_addresses_list(:circles_addresses) %>
<% current_address = "0x" <> Base.encode16(@address.hash.bytes, case: :lower) %> <% current_address = "0x" <> Base.encode16(@address.hash.bytes, case: :lower) %>
<% created_from_address_hash = if from_address_hash(@address), do: "0x" <> Base.encode16(from_address_hash(@address).bytes, case: :lower), else: nil %> <% created_from_address_hash = if from_address_hash(@address), do: "0x" <> Base.encode16(from_address_hash(@address).bytes, case: :lower), else: nil %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %>
<div class="row js-ad-dependant-mb-2 js-ad-dependant-mb-5-reverse"> <div class="row js-ad-dependant-mb-2 js-ad-dependant-mb-5-reverse">
<!-- Address details --> <!-- Address details -->
<div class="col-md-12 js-ad-dependant-mb-2"> <div class="col-md-12 js-ad-dependant-mb-2">
@ -29,7 +28,7 @@
<% end %> <% end %>
<h1 class="card-title lg-card-title mb-2-desktop"> <h1 class="card-title lg-card-title mb-2-desktop">
<div class="title-with-label"><%= address_title(@address) %> <%= gettext "Details" %></div> <div class="title-with-label"><%= address_title(@address) %> <%= gettext "Details" %></div>
<%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @address.hash, private_tags: private_tags %> <%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @address.hash, tags: @tags %>
<!-- buttons --> <!-- buttons -->
<span class="overview-title-buttons float-right"> <span class="overview-title-buttons float-right">
<%= render BlockScoutWeb.CommonComponentsView, "_btn_copy.html", <%= render BlockScoutWeb.CommonComponentsView, "_btn_copy.html",

@ -3,9 +3,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section> <section>
<div class="card"> <div class="card">

@ -8,9 +8,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
@ -157,20 +155,14 @@
<button type="button" class="btn-line" style="float: left;" id="button" data-clipboard-text="<%= creation_code(@address) %>" aria-label="copy contract creation code"> <button type="button" class="btn-line" style="float: left;" id="button" data-clipboard-text="<%= creation_code(@address) %>" aria-label="copy contract creation code">
<%= gettext "Copy Contract Creation Code" %> <%= gettext "Copy Contract Creation Code" %>
</button> </button>
<%= if match?({:selfdestructed, _}, contract_creation_code) do %> <%= if !fully_verified do %>
<div class="button button-disabled button-sm float-right ml-3"> <% path = address_verify_contract_path(@conn, :new, @address.hash) %>
<%= gettext("Verify & Publish") %> <%= link(
</div> gettext("Verify & Publish"),
<% else %> to: path,
<%= if !fully_verified do %> class: "button button-primary button-sm float-right ml-3",
<% path = address_verify_contract_path(@conn, :new, @address.hash) %> "data-test": "verify_and_publish"
<%= link( ) %>
gettext("Verify & Publish"),
to: path,
class: "button button-primary button-sm float-right ml-3",
"data-test": "verify_and_publish"
) %>
<% end %>
<% end %> <% end %>
</div> </div>
</div> </div>
@ -194,20 +186,14 @@
<button type="button" class="btn-line" style="float: left;" id="button" data-clipboard-text="<%= contract_code %>" aria-label="copy contract creation code"> <button type="button" class="btn-line" style="float: left;" id="button" data-clipboard-text="<%= contract_code %>" aria-label="copy contract creation code">
<%= gettext "Copy Deployed ByteCode" %> <%= gettext "Copy Deployed ByteCode" %>
</button> </button>
<%= if match?({:selfdestructed, _}, contract_creation_code) and !creation_code(@address) do %> <%= if !fully_verified and !creation_code(@address) do %>
<div class="button button-disabled button-sm float-right ml-3"> <% path = address_verify_contract_path(@conn, :new, @address.hash) %>
<%= gettext("Verify & Publish") %> <%= link(
</div> gettext("Verify & Publish"),
<% else %> to: path,
<%= if !fully_verified and !creation_code(@address) do %> class: "button button-primary button-sm float-right ml-3",
<% path = address_verify_contract_path(@conn, :new, @address.hash) %> "data-test": "verify_and_publish"
<%= link( ) %>
gettext("Verify & Publish"),
to: path,
class: "button button-primary button-sm float-right ml-3",
"data-test": "verify_and_publish"
) %>
<% end %>
<% end %> <% end %>
</div> </div>
</div> </div>

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>
<% contract = last_decompiled_contract_version(@address.decompiled_smart_contracts) %> <% contract = last_decompiled_contract_version(@address.decompiled_smart_contracts) %>

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section data-page="address-internal-transactions"> <section data-page="address-internal-transactions">
<div class="card"> <div class="card">

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section data-page="address-logs"> <section data-page="address-logs">
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>

@ -2,9 +2,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>

@ -2,9 +2,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section id="tokens"> <section id="tokens">
<div class="card"> <div class="card">

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section data-page="address-token-transfers" id="transfers"> <section data-page="address-token-transfers" id="transfers">
<div class="card"> <div class="card">

@ -2,9 +2,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section data-page="address-transactions" id="txs"> <section data-page="address-transactions" id="txs">
<div class="card"> <div class="card">

@ -1,9 +1,7 @@
<section class="container"> <section class="container">
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<section data-page="blocks-validated"> <section data-page="blocks-validated">
<div class="card"> <div class="card">

@ -2,9 +2,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>

@ -2,9 +2,7 @@
<% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %> <% is_proxy = BlockScoutWeb.AddressView.smart_contract_is_proxy?(@address) %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, tags: @tags %>
<%= render BlockScoutWeb.AddressView, "overview.html", address: @address, is_proxy: is_proxy, conn: @conn, exchange_rate: @exchange_rate, coin_balance_status: @coin_balance_status, counters_path: @counters_path, private_tags: private_tags %>
<div class="card"> <div class="card">
<%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %> <%= render BlockScoutWeb.AddressView, "_tabs.html", address: @address, is_proxy: is_proxy, conn: @conn %>

@ -185,6 +185,7 @@
</div> </div>
<a href="<%= auth_path(@conn, :profile) %>" class= "dropdown-item">Profile</a> <a href="<%= auth_path(@conn, :profile) %>" class= "dropdown-item">Profile</a>
<a href="<%= watchlist_path(@conn, :show) %>" class= "dropdown-item">Watch list</a> <a href="<%= watchlist_path(@conn, :show) %>" class= "dropdown-item">Watch list</a>
<a href="<%= tag_address_path(@conn, :index) %>" class= "dropdown-item">Address Tags</a>
<a href="<%= BlockScoutWeb.LayoutView.sign_out_link %>" class= "dropdown-item">Sign out</a> <a href="<%= BlockScoutWeb.LayoutView.sign_out_link %>" class= "dropdown-item">Sign out</a>
</div> </div>
</li> </li>

@ -4,7 +4,7 @@
"_details.html", "_details.html",
token: @token, token: @token,
counters_path: @counters_path, counters_path: @counters_path,
private_tags: (if assigns[:private_tags], do: @private_tags, else: []), tags: @tags,
conn: @conn conn: @conn
) %> ) %>

@ -4,7 +4,7 @@
"_details.html", "_details.html",
token: @token, token: @token,
counters_path: @counters_path, counters_path: @counters_path,
private_tags: (if assigns[:private_tags], do: @private_tags, else: []), tags: @tags,
conn: @conn conn: @conn
) %> ) %>

@ -4,7 +4,7 @@
"_details.html", "_details.html",
token: @token, token: @token,
counters_path: @counters_path, counters_path: @counters_path,
private_tags: (if assigns[:private_tags], do: @private_tags, else: []), tags: @tags,
conn: @conn conn: @conn
) %> ) %>

@ -2,7 +2,6 @@
<% address_hash_str = "0x" <> Base.encode16(@token.contract_address_hash.bytes, case: :lower) %> <% address_hash_str = "0x" <> Base.encode16(@token.contract_address_hash.bytes, case: :lower) %>
<% {:ok, created_from_address} = if @token.contract_address_hash, do: Chain.hash_to_address(@token.contract_address_hash), else: {:ok, nil} %> <% {:ok, created_from_address} = if @token.contract_address_hash, do: Chain.hash_to_address(@token.contract_address_hash), else: {:ok, nil} %>
<% created_from_address_hash = if from_address_hash(created_from_address), do: "0x" <> Base.encode16(from_address_hash(created_from_address).bytes, case: :lower), else: nil %> <% created_from_address_hash = if from_address_hash(created_from_address), do: "0x" <> Base.encode16(from_address_hash(created_from_address).bytes, case: :lower), else: nil %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %>
<section class="address-overview" data-page="token-details" data-page-address-hash="<%= @token.contract_address_hash %>"> <section class="address-overview" data-page="token-details" data-page-address-hash="<%= @token.contract_address_hash %>">
<%= render BlockScoutWeb.Advertisement.TextAdView, "index.html", conn: @conn %> <%= render BlockScoutWeb.Advertisement.TextAdView, "index.html", conn: @conn %>
<div class="row js-ad-dependant-mb-2 js-ad-dependant-mb-5-reverse"> <div class="row js-ad-dependant-mb-2 js-ad-dependant-mb-5-reverse">
@ -34,7 +33,7 @@
<% else %> <% else %>
<%= gettext("Token Details") %> <%= gettext("Token Details") %>
<% end %> <% end %>
<%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @token.contract_address_hash, private_tags: private_tags %> <%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @token.contract_address_hash, tags: @tags %>
</div> </div>
<!-- buttons --> <!-- buttons -->
<span class="overview-title-buttons token float-right"> <span class="overview-title-buttons token float-right">

@ -4,7 +4,7 @@
"_details.html", "_details.html",
token: @token, token: @token,
counters_path: @counters_path, counters_path: @counters_path,
private_tags: (if assigns[:private_tags], do: @private_tags, else: []), tags: @tags,
conn: @conn conn: @conn
) %> ) %>

@ -1,7 +1,7 @@
<% status = transaction_status(@transaction) %> <% status = transaction_status(@transaction) %>
<% error_in_internal_tx = @transaction.has_error_in_internal_txs %> <% error_in_internal_tx = @transaction.has_error_in_internal_txs %>
<% current_user = AuthController.current_user(@conn) %> <% current_user = AuthController.current_user(@conn) %>
<% private_tags = AddressToTag.get_private_tags_on_address(@transaction.to_address_hash, current_user) %> <% tags = GetAddressTags.call(@transaction.to_address_hash, current_user) %>
<div class="tile tile-type-<%= type_suffix(@transaction) %> fade-in <%= status_class(@transaction) %>" data-test="<%= type_suffix(@transaction) %>" data-identifier-hash="<%= @transaction.hash %>"> <div class="tile tile-type-<%= type_suffix(@transaction) %> fade-in <%= status_class(@transaction) %>" data-test="<%= type_suffix(@transaction) %>" data-identifier-hash="<%= @transaction.hash %>">
<div class="row tile-body" data-selector="token-transfers-toggle" data-test="chain_transaction"> <div class="row tile-body" data-selector="token-transfers-toggle" data-test="chain_transaction">
<!-- Color Block --> <!-- Color Block -->
@ -33,7 +33,7 @@
<%= if method_name do %> <%= if method_name do %>
<%= render BlockScoutWeb.FormView, "_tag.html", text: method_name, additional_classes: ["method", "ml-1"] %> <%= render BlockScoutWeb.FormView, "_tag.html", text: method_name, additional_classes: ["method", "ml-1"] %>
<% end %> <% end %>
<%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @transaction.to_address_hash, height_auto: true, private_tags: private_tags %> <%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @transaction.to_address_hash, height_auto: true, tags: tags %>
</div> </div>
</span> </span>
<span> <span>

@ -26,7 +26,7 @@
<% address_hash_str = if to_address_hash, do: "0x" <> Base.encode16(to_address_hash.bytes, case: :lower), else: nil %> <% address_hash_str = if to_address_hash, do: "0x" <> Base.encode16(to_address_hash.bytes, case: :lower), else: nil %>
<% {:ok, created_from_address} = if to_address_hash, do: Chain.hash_to_address(to_address_hash), else: {:ok, nil} %> <% {:ok, created_from_address} = if to_address_hash, do: Chain.hash_to_address(to_address_hash), else: {:ok, nil} %>
<% created_from_address_hash_str = if from_address_hash(created_from_address), do: "0x" <> Base.encode16(from_address_hash(created_from_address).bytes, case: :lower), else: nil %> <% created_from_address_hash_str = if from_address_hash(created_from_address), do: "0x" <> Base.encode16(from_address_hash(created_from_address).bytes, case: :lower), else: nil %>
<% private_tags = if assigns[:private_tags], do: @private_tags, else: [] %> <% tags = if assigns[:tags], do: @tags, else: %{common_tags: [], personal_tags: [], watchlist_names: []} %>
<%= render BlockScoutWeb.Advertisement.TextAdView, "index.html", conn: @conn %> <%= render BlockScoutWeb.Advertisement.TextAdView, "index.html", conn: @conn %>
<section class="fs-14" data-page="transaction-details" data-page-transaction-hash="<%= @transaction %>"> <section class="fs-14" data-page="transaction-details" data-page-transaction-hash="<%= @transaction %>">
<div class="row"> <div class="row">
@ -50,7 +50,7 @@
<div style="display: inline-block; vertical-align: bottom; line-height: 25px;"> <div style="display: inline-block; vertical-align: bottom; line-height: 25px;">
<%= gettext "Transaction Details" %> <%= gettext "Transaction Details" %>
</div> </div>
<%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @transaction.to_address_hash, private_tags: private_tags %> <%= render BlockScoutWeb.AddressView, "_labels.html", address_hash: @transaction.to_address_hash, tags: tags %>
</h1> </h1>
<%= if status == :pending do %> <%= if status == :pending do %>
<div class="tile tile-muted d-flex justify-content-center align-items-center mb-4"> <div class="tile tile-muted d-flex justify-content-center align-items-center mb-4">

@ -0,0 +1,3 @@
defmodule BlockScoutWeb.Account.CommonView do
use BlockScoutWeb, :view
end

@ -0,0 +1,7 @@
defmodule BlockScoutWeb.Account.TagAddressView do
use BlockScoutWeb, :view
import BlockScoutWeb.AddressView, only: [trimmed_hash: 1]
alias BlockScoutWeb.Account.TagAddressView
end

@ -9,7 +9,6 @@ defmodule BlockScoutWeb.TransactionView do
alias Explorer.Chain.{Address, Block, InternalTransaction, Transaction, Wei} alias Explorer.Chain.{Address, Block, InternalTransaction, Transaction, Wei}
alias Explorer.Counters.AverageBlockTime alias Explorer.Counters.AverageBlockTime
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Explorer.Tags.AddressToTag
alias Timex.Duration alias Timex.Duration
import BlockScoutWeb.Gettext import BlockScoutWeb.Gettext

@ -30,7 +30,16 @@ defmodule BlockScoutWeb.WebRouter do
scope "/account", BlockScoutWeb do scope "/account", BlockScoutWeb do
pipe_through(:browser) pipe_through(:browser)
resources("/watchlist", Account.WatchlistController, only: [:show], singleton: true, as: :watchlist) resources("/tag_address", Account.TagAddressController,
only: [:index, :new, :create, :edit, :update, :delete],
as: :tag_address
)
resources("/watchlist", Account.WatchlistController,
only: [:show],
singleton: true,
as: :watchlist
)
resources("/watchlist_address", Account.WatchlistAddressController, resources("/watchlist_address", Account.WatchlistAddressController,
only: [:new, :create, :edit, :update, :delete], only: [:new, :create, :edit, :update, :delete],
@ -65,7 +74,10 @@ defmodule BlockScoutWeb.WebRouter do
resources("/blocks", BlockController, as: :blocks, only: [:index]) resources("/blocks", BlockController, as: :blocks, only: [:index])
resources "/blocks", BlockController, as: :block_secondary, only: [:show], param: "hash_or_number" do resources "/blocks", BlockController,
as: :block_secondary,
only: [:show],
param: "hash_or_number" do
resources("/transactions", BlockTransactionController, only: [:index], as: :transaction) resources("/transactions", BlockTransactionController, only: [:index], as: :transaction)
end end

@ -63,7 +63,7 @@ msgstr ""
msgid "%{subnetwork} Explorer - BlockScout" msgid "%{subnetwork} Explorer - BlockScout"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:351 #: lib/block_scout_web/views/transaction_view.ex:350
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "(Awaiting internal transactions for status)" msgid "(Awaiting internal transactions for status)"
msgstr "" msgstr ""
@ -189,7 +189,7 @@ msgstr ""
msgid "All functions displayed below are from ABI of that contract. In order to verify current contract, proceed with" msgid "All functions displayed below are from ABI of that contract. In order to verify current contract, proceed with"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All metadata displayed below is from that contract. In order to verify current contract, click" msgid "All metadata displayed below is from that contract. In order to verify current contract, click"
msgstr "" msgstr ""
@ -241,7 +241,7 @@ msgstr ""
msgid "Balance" msgid "Balance"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:16 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Balances" msgid "Balances"
msgstr "" msgstr ""
@ -296,7 +296,7 @@ msgstr ""
msgid "Block Mined, awaiting import..." msgid "Block Mined, awaiting import..."
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:35 #: lib/block_scout_web/views/transaction_view.ex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Block Pending" msgid "Block Pending"
msgstr "" msgstr ""
@ -441,12 +441,12 @@ msgstr ""
msgid "Compiler" msgid "Compiler"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:67 #: lib/block_scout_web/templates/address_contract/index.html.eex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Compiler version" msgid "Compiler version"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:344 #: lib/block_scout_web/views/transaction_view.ex:343
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Confirmed" msgid "Confirmed"
msgstr "" msgstr ""
@ -472,30 +472,30 @@ msgstr ""
msgid "Connection Lost" msgid "Connection Lost"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:12
#: lib/block_scout_web/templates/block/index.html.eex:5 #: lib/block_scout_web/templates/block/index.html.eex:5
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer blocks" msgid "Connection Lost, click to load newer blocks"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer internal transactions" msgid "Connection Lost, click to load newer internal transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:13 #: lib/block_scout_web/templates/address_transaction/index.html.eex:11
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:16 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:16
#: lib/block_scout_web/templates/transaction/index.html.eex:22 #: lib/block_scout_web/templates/transaction/index.html.eex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_validation/index.html.eex:12 #: lib/block_scout_web/templates/address_validation/index.html.eex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer validations" msgid "Connection Lost, click to load newer validations"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:92 #: lib/block_scout_web/templates/address_contract/index.html.eex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Constructor Arguments" msgid "Constructor Arguments"
msgstr "" msgstr ""
@ -506,7 +506,7 @@ msgstr ""
msgid "Contract" msgid "Contract"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:124 #: lib/block_scout_web/templates/address_contract/index.html.eex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract ABI" msgid "Contract ABI"
msgstr "" msgstr ""
@ -524,18 +524,18 @@ msgstr ""
msgid "Contract Address Pending" msgid "Contract Address Pending"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:459 #: lib/block_scout_web/views/transaction_view.ex:458
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Call" msgid "Contract Call"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:456 #: lib/block_scout_web/views/transaction_view.ex:455
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Creation" msgid "Contract Creation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:140 #: lib/block_scout_web/templates/address_contract/index.html.eex:138
#: lib/block_scout_web/templates/address_contract/index.html.eex:155 #: lib/block_scout_web/templates/address_contract/index.html.eex:153
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Creation Code" msgid "Contract Creation Code"
msgstr "" msgstr ""
@ -546,29 +546,29 @@ msgstr ""
msgid "Contract Libraries" msgid "Contract Libraries"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:76 #: lib/block_scout_web/templates/address/overview.html.eex:75
#: lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_name_field.html.eex:3 #: lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_name_field.html.eex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Name" msgid "Contract Name"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:27 #: lib/block_scout_web/templates/address_contract/index.html.eex:25
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:11 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB" msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:59 #: lib/block_scout_web/templates/address_contract/index.html.eex:57
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract name:" msgid "Contract name:"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:102 #: lib/block_scout_web/templates/address_contract/index.html.eex:100
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract source code" msgid "Contract source code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:146 #: lib/block_scout_web/templates/address_contract/index.html.eex:144
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr "" msgstr ""
@ -578,35 +578,37 @@ msgstr ""
msgid "Contribute" msgid "Contribute"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:126 #: lib/block_scout_web/templates/address_contract/index.html.eex:124
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy ABI" msgid "Copy ABI"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/account/tag_address/row.html.eex:7
#: lib/block_scout_web/templates/account/tag_address/row.html.eex:7
#: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:7 #: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:7
#: lib/block_scout_web/templates/address/overview.html.eex:38
#: lib/block_scout_web/templates/address/overview.html.eex:39 #: lib/block_scout_web/templates/address/overview.html.eex:39
#: lib/block_scout_web/templates/address/overview.html.eex:40
#: lib/block_scout_web/templates/block/overview.html.eex:104 #: lib/block_scout_web/templates/block/overview.html.eex:104
#: lib/block_scout_web/templates/block/overview.html.eex:105 #: lib/block_scout_web/templates/block/overview.html.eex:105
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:43
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:44 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:44
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Address" msgid "Copy Address"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:142 #: lib/block_scout_web/templates/address_contract/index.html.eex:140
#: lib/block_scout_web/templates/address_contract/index.html.eex:158 #: lib/block_scout_web/templates/address_contract/index.html.eex:156
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Contract Creation Code" msgid "Copy Contract Creation Code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:21 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Decompiled Contract Code" msgid "Copy Decompiled Contract Code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:185 #: lib/block_scout_web/templates/address_contract/index.html.eex:177
#: lib/block_scout_web/templates/address_contract/index.html.eex:195 #: lib/block_scout_web/templates/address_contract/index.html.eex:187
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Deployed ByteCode" msgid "Copy Deployed ByteCode"
msgstr "" msgstr ""
@ -642,8 +644,8 @@ msgstr ""
msgid "Copy Raw Trace" msgid "Copy Raw Trace"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:104 #: lib/block_scout_web/templates/address_contract/index.html.eex:102
#: lib/block_scout_web/templates/address_contract/index.html.eex:115 #: lib/block_scout_web/templates/address_contract/index.html.eex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Source Code" msgid "Copy Source Code"
msgstr "" msgstr ""
@ -703,7 +705,7 @@ msgstr ""
msgid "Create2" msgid "Create2"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:103 #: lib/block_scout_web/templates/address/overview.html.eex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Creator" msgid "Creator"
msgstr "" msgstr ""
@ -743,7 +745,7 @@ msgid "Date & time of transaction inclusion, including length of time for confir
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:132 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decimals" msgid "Decimals"
msgstr "" msgstr ""
@ -769,12 +771,12 @@ msgstr ""
msgid "Decompiled code" msgid "Decompiled code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decompiled contract code" msgid "Decompiled contract code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:12 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decompiler version" msgid "Decompiler version"
msgstr "" msgstr ""
@ -784,8 +786,8 @@ msgstr ""
msgid "Delegate Call" msgid "Delegate Call"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:175
#: lib/block_scout_web/templates/address_contract/index.html.eex:183 #: lib/block_scout_web/templates/address_contract/index.html.eex:183
#: lib/block_scout_web/templates/address_contract/index.html.eex:191
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Deployed ByteCode" msgid "Deployed ByteCode"
msgstr "" msgstr ""
@ -798,7 +800,7 @@ msgstr ""
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:31 #: lib/block_scout_web/templates/address/overview.html.eex:30
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 #: 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 #: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -810,7 +812,7 @@ msgstr ""
msgid "Difficulty" msgid "Difficulty"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:147 #: lib/block_scout_web/templates/address_contract/index.html.eex:145
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Displaying the init data provided of the creating transaction." msgid "Displaying the init data provided of the creating transaction."
msgstr "" msgstr ""
@ -845,17 +847,17 @@ msgstr ""
msgid "EIP-1167" msgid "EIP-1167"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:216 #: lib/block_scout_web/views/transaction_view.ex:215
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-1155 " msgid "ERC-1155 "
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:214 #: lib/block_scout_web/views/transaction_view.ex:213
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-20 " msgid "ERC-20 "
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:215 #: lib/block_scout_web/views/transaction_view.ex:214
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-721 " msgid "ERC-721 "
msgstr "" msgstr ""
@ -873,7 +875,7 @@ msgstr ""
msgid "ETH RPC API Documentation" msgid "ETH RPC API Documentation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:78 #: lib/block_scout_web/templates/address_contract/index.html.eex:76
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:26 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:26
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -926,17 +928,17 @@ msgstr ""
msgid "Error trying to fetch balances." msgid "Error trying to fetch balances."
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:355 #: lib/block_scout_web/views/transaction_view.ex:354
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: %{reason}" msgid "Error: %{reason}"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:353 #: lib/block_scout_web/views/transaction_view.ex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: (Awaiting internal transactions for reason)" msgid "Error: (Awaiting internal transactions for reason)"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:120 #: lib/block_scout_web/templates/address/overview.html.eex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: Could not determine contract creator." msgid "Error: Could not determine contract creator."
msgstr "" msgstr ""
@ -946,8 +948,8 @@ msgstr ""
msgid "Eth RPC" msgid "Eth RPC"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/account/watchlist_address/edit.html.eex:37 #: lib/block_scout_web/templates/account/watchlist_address/edit.html.eex:27
#: lib/block_scout_web/templates/account/watchlist_address/new.html.eex:35 #: lib/block_scout_web/templates/account/watchlist_address/new.html.eex:25
#: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:21 #: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:21
#: lib/block_scout_web/templates/address/_current_coin_balance.html.eex:11 #: lib/block_scout_web/templates/address/_current_coin_balance.html.eex:11
#: lib/block_scout_web/templates/address/index.html.eex:5 #: lib/block_scout_web/templates/address/index.html.eex:5
@ -986,7 +988,7 @@ msgstr ""
msgid "Export Data" msgid "Export Data"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:226 #: lib/block_scout_web/templates/address_contract/index.html.eex:212
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "External libraries" msgid "External libraries"
msgstr "" msgstr ""
@ -1012,7 +1014,7 @@ msgstr ""
msgid "Fetching gas used..." msgid "Fetching gas used..."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:113 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Fetching holders..." msgid "Fetching holders..."
msgstr "" msgstr ""
@ -1143,7 +1145,7 @@ msgstr ""
msgid "Hex (Default)" msgid "Hex (Default)"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:109 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Holders" msgid "Holders"
msgstr "" msgstr ""
@ -1220,11 +1222,11 @@ msgid "Internal Transaction"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:28 #: lib/block_scout_web/templates/address/_tabs.html.eex:28
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: 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/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:361 #: lib/block_scout_web/views/address_view.ex:361
#: lib/block_scout_web/views/transaction_view.ex:514 #: lib/block_scout_web/views/transaction_view.ex:513
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Transactions" msgid "Internal Transactions"
msgstr "" msgstr ""
@ -1296,7 +1298,7 @@ msgstr ""
msgid "List of token transferred in the transaction." msgid "List of token transferred in the transaction."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:20 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Loading chart..." msgid "Loading chart..."
msgstr "" msgstr ""
@ -1307,10 +1309,10 @@ msgstr ""
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:133 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:133
#: lib/block_scout_web/templates/address_contract_verification_via_standard_json_input/new.html.eex:49 #: lib/block_scout_web/templates/address_contract_verification_via_standard_json_input/new.html.eex:49
#: lib/block_scout_web/templates/address_contract_verification_vyper/new.html.eex:45 #: lib/block_scout_web/templates/address_contract_verification_vyper/new.html.eex:45
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:12
#: lib/block_scout_web/templates/address_read_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_read_proxy/index.html.eex:12
#: lib/block_scout_web/templates/address_write_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_write_contract/index.html.eex:12
#: lib/block_scout_web/templates/address_write_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_write_proxy/index.html.eex:12
#: lib/block_scout_web/templates/tokens/contract/index.html.eex:17 #: lib/block_scout_web/templates/tokens/contract/index.html.eex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Loading..." msgid "Loading..."
@ -1327,11 +1329,11 @@ msgid "Log Index"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:41 #: lib/block_scout_web/templates/address/_tabs.html.eex:41
#: lib/block_scout_web/templates/address_logs/index.html.eex:12 #: lib/block_scout_web/templates/address_logs/index.html.eex:10
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: 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/templates/transaction_log/index.html.eex:8
#: lib/block_scout_web/views/address_view.ex:372 #: lib/block_scout_web/views/address_view.ex:372
#: lib/block_scout_web/views/transaction_view.ex:515 #: lib/block_scout_web/views/transaction_view.ex:514
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Logs" msgid "Logs"
msgstr "" msgstr ""
@ -1343,7 +1345,7 @@ msgstr ""
#: lib/block_scout_web/templates/chain/show.html.eex:52 #: lib/block_scout_web/templates/chain/show.html.eex:52
#: lib/block_scout_web/templates/layout/app.html.eex:46 #: lib/block_scout_web/templates/layout/app.html.eex:46
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:85 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84
#: lib/block_scout_web/views/address_view.ex:142 #: lib/block_scout_web/views/address_view.ex:142
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Market Cap" msgid "Market Cap"
@ -1359,7 +1361,7 @@ msgstr ""
msgid "Max Priority Fee per Gas" msgid "Max Priority Fee per Gas"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:321 #: lib/block_scout_web/views/transaction_view.ex:320
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Max of" msgid "Max of"
msgstr "" msgstr ""
@ -1419,12 +1421,12 @@ msgstr ""
msgid "Module" msgid "Module"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:14 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "More internal transactions have come in" msgid "More internal transactions have come in"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:48 #: lib/block_scout_web/templates/address_transaction/index.html.eex:46
#: lib/block_scout_web/templates/chain/show.html.eex:216 #: lib/block_scout_web/templates/chain/show.html.eex:216
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:13 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:13
#: lib/block_scout_web/templates/transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction/index.html.eex:19
@ -1502,7 +1504,7 @@ msgstr ""
msgid "Not unique Token" msgid "Not unique Token"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of accounts holding the token" msgid "Number of accounts holding the token"
msgstr "" msgstr ""
@ -1512,7 +1514,7 @@ msgstr ""
msgid "Number of blocks validated by this validator." msgid "Number of blocks validated by this validator."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of digits that come after the decimal place when displaying token value" msgid "Number of digits that come after the decimal place when displaying token value"
msgstr "" msgstr ""
@ -1522,7 +1524,7 @@ msgstr ""
msgid "Number of transactions related to this address." msgid "Number of transactions related to this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of transfers for the token" msgid "Number of transfers for the token"
msgstr "" msgstr ""
@ -1543,12 +1545,12 @@ msgstr ""
msgid "Only the first" msgid "Only the first"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:63 #: lib/block_scout_web/templates/address_contract/index.html.eex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Optimization enabled" msgid "Optimization enabled"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:72 #: lib/block_scout_web/templates/address_contract/index.html.eex:70
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:58 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:58
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1628,12 +1630,12 @@ msgstr ""
#: lib/block_scout_web/templates/chain/show.html.eex:41 #: lib/block_scout_web/templates/chain/show.html.eex:41
#: lib/block_scout_web/templates/layout/app.html.eex:47 #: lib/block_scout_web/templates/layout/app.html.eex:47
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:96 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price" msgid "Price"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:94
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price per token on the exchanges" msgid "Price per token on the exchanges"
msgstr "" msgstr ""
@ -1678,7 +1680,7 @@ msgstr ""
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: 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/templates/transaction_raw_trace/index.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:516 #: lib/block_scout_web/views/transaction_view.ex:515
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
@ -1751,7 +1753,7 @@ msgstr ""
msgid "Run" msgid "Run"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:18 #: lib/block_scout_web/templates/address_logs/index.html.eex:16
#: lib/block_scout_web/templates/layout/_search.html.eex:34 #: lib/block_scout_web/templates/layout/_search.html.eex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search" msgid "Search"
@ -1897,7 +1899,7 @@ msgid "Submit an Issue"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:352 #: lib/block_scout_web/views/transaction_view.ex:351
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Success" msgid "Success"
msgstr "" msgstr ""
@ -1938,12 +1940,12 @@ msgstr ""
msgid "The hash of the block from which this block was generated." msgid "The hash of the block from which this block was generated."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:75 #: lib/block_scout_web/templates/address/overview.html.eex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The name found in the source code of the Contract." msgid "The name found in the source code of the Contract."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:86 #: lib/block_scout_web/templates/address/overview.html.eex:85
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The name of the validator." msgid "The name of the validator."
msgstr "" msgstr ""
@ -1968,7 +1970,7 @@ msgstr ""
msgid "The status of the transaction: Confirmed or Unconfirmed." msgid "The status of the transaction: Confirmed or Unconfirmed."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:68
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The total amount of tokens issued" msgid "The total amount of tokens issued"
msgstr "" msgstr ""
@ -1978,7 +1980,7 @@ msgstr ""
msgid "The total gas amount used in the block and its percentage of gas filled in the block." msgid "The total gas amount used in the block and its percentage of gas filled in the block."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_validation/index.html.eex:18 #: lib/block_scout_web/templates/address_validation/index.html.eex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no blocks validated by this address." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
@ -1993,7 +1995,7 @@ msgstr ""
msgid "There are no holders for this Token." msgid "There are no holders for this Token."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:56 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
@ -2003,7 +2005,7 @@ msgstr ""
msgid "There are no internal transactions for this transaction." msgid "There are no internal transactions for this transaction."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:30 #: lib/block_scout_web/templates/address_logs/index.html.eex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no logs for this address." msgid "There are no logs for this address."
msgstr "" msgstr ""
@ -2018,7 +2020,7 @@ msgstr ""
msgid "There are no pending transactions." msgid "There are no pending transactions."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:55 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
@ -2028,7 +2030,7 @@ msgstr ""
msgid "There are no token transfers for this transaction" msgid "There are no token transfers for this transaction"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_token/index.html.eex:67 #: lib/block_scout_web/templates/address_token/index.html.eex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no tokens for this address." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -2038,7 +2040,7 @@ msgstr ""
msgid "There are no tokens." msgid "There are no tokens."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:57 #: lib/block_scout_web/templates/address_transaction/index.html.eex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no transactions for this address." msgid "There are no transactions for this address."
msgstr "" msgstr ""
@ -2060,17 +2062,17 @@ msgstr ""
msgid "There are no transfers for this Token." msgid "There are no transfers for this Token."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:37 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There is no coin history for this address." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There is no decompilded contracts for this address." msgid "There is no decompilded contracts for this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:23 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:21
#: lib/block_scout_web/templates/chain/show.html.eex:9 #: lib/block_scout_web/templates/chain/show.html.eex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
@ -2091,12 +2093,12 @@ msgstr ""
msgid "This block has not been processed yet." msgid "This block has not been processed yet."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:43 #: lib/block_scout_web/templates/address_contract/index.html.eex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This contract has been partially verified via Sourcify." msgid "This contract has been partially verified via Sourcify."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:47 #: lib/block_scout_web/templates/address_contract/index.html.eex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This contract has been verified via Sourcify." msgid "This contract has been verified via Sourcify."
msgstr "" msgstr ""
@ -2145,25 +2147,25 @@ msgstr ""
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:56 #: lib/block_scout_web/templates/address/overview.html.eex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token" msgid "Token"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:3 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:3
#: lib/block_scout_web/views/transaction_view.ex:450 #: lib/block_scout_web/views/transaction_view.ex:449
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Burning" msgid "Token Burning"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:7 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:451 #: lib/block_scout_web/views/transaction_view.ex:450
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Creation" msgid "Token Creation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:10 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:10
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:35 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Details" msgid "Token Details"
msgstr "" msgstr ""
@ -2185,20 +2187,20 @@ msgid "Token ID"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:5 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:5
#: lib/block_scout_web/views/transaction_view.ex:449 #: lib/block_scout_web/views/transaction_view.ex:448
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Minting" msgid "Token Minting"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:9 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:9
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:11 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:11
#: lib/block_scout_web/views/transaction_view.ex:452 #: lib/block_scout_web/views/transaction_view.ex:451
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Transfer" msgid "Token Transfer"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:13 #: lib/block_scout_web/templates/address/_tabs.html.eex:13
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:21 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3
#: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16 #: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16
#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:5 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:5
@ -2208,17 +2210,17 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:363 #: lib/block_scout_web/views/address_view.ex:363
#: lib/block_scout_web/views/tokens/instance/overview_view.ex:195 #: lib/block_scout_web/views/tokens/instance/overview_view.ex:195
#: lib/block_scout_web/views/tokens/overview_view.ex:39 #: lib/block_scout_web/views/tokens/overview_view.ex:39
#: lib/block_scout_web/views/transaction_view.ex:513 #: lib/block_scout_web/views/transaction_view.ex:512
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Transfers" msgid "Token Transfers"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:55 #: lib/block_scout_web/templates/address/overview.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token name and symbol." msgid "Token name and symbol."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:143 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token type" msgid "Token type"
msgstr "" msgstr ""
@ -2259,7 +2261,7 @@ msgstr ""
msgid "Top Accounts - %{subnetwork} Explorer" msgid "Top Accounts - %{subnetwork} Explorer"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:16 #: lib/block_scout_web/templates/address_logs/index.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Topic" msgid "Topic"
msgstr "" msgstr ""
@ -2275,7 +2277,7 @@ msgstr ""
msgid "Total Difficulty" msgid "Total Difficulty"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total Supply * Price" msgid "Total Supply * Price"
msgstr "" msgstr ""
@ -2295,7 +2297,7 @@ msgstr ""
msgid "Total gas limit provided by all transactions in the block." msgid "Total gas limit provided by all transactions in the block."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:70 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total supply" msgid "Total supply"
msgstr "" msgstr ""
@ -2311,7 +2313,7 @@ msgid "Total transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 #: lib/block_scout_web/templates/address_logs/_logs.html.eex:19
#: lib/block_scout_web/views/transaction_view.ex:462 #: lib/block_scout_web/views/transaction_view.ex:461
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transaction" msgid "Transaction"
msgstr "" msgstr ""
@ -2381,7 +2383,7 @@ msgstr ""
msgid "Transactions" msgid "Transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:102 #: lib/block_scout_web/templates/address/overview.html.eex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transactions and address of creation." msgid "Transactions and address of creation."
msgstr "" msgstr ""
@ -2395,7 +2397,7 @@ msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:237 #: lib/block_scout_web/templates/address/overview.html.eex:237
#: lib/block_scout_web/templates/address/overview.html.eex:245 #: lib/block_scout_web/templates/address/overview.html.eex:245
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:120 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transfers" msgid "Transfers"
msgstr "" msgstr ""
@ -2422,7 +2424,7 @@ msgstr ""
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type of the token standard" msgid "Type of the token standard"
msgstr "" msgstr ""
@ -2443,7 +2445,7 @@ msgstr ""
msgid "Uncles" msgid "Uncles"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:343 #: lib/block_scout_web/views/transaction_view.ex:342
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unconfirmed" msgid "Unconfirmed"
msgstr "" msgstr ""
@ -2493,7 +2495,7 @@ msgstr ""
msgid "Validator Data" msgid "Validator Data"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:87 #: lib/block_scout_web/templates/address/overview.html.eex:86
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Validator Name" msgid "Validator Name"
msgstr "" msgstr ""
@ -2508,17 +2510,15 @@ msgstr ""
msgid "Value sent in the native token (and USD) if applicable." msgid "Value sent in the native token (and USD) if applicable."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:84 #: lib/block_scout_web/templates/address_contract/index.html.eex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Verified at" msgid "Verified at"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:27
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:29
#: lib/block_scout_web/templates/address_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_contract/index.html.eex:161
#: lib/block_scout_web/templates/address_contract/index.html.eex:162 #: lib/block_scout_web/templates/address_contract/index.html.eex:192
#: lib/block_scout_web/templates/address_contract/index.html.eex:168
#: lib/block_scout_web/templates/address_contract/index.html.eex:199
#: lib/block_scout_web/templates/address_contract/index.html.eex:205
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Verify & Publish" msgid "Verify & Publish"
@ -2673,7 +2673,7 @@ msgstr ""
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:112 #: lib/block_scout_web/templates/address/overview.html.eex:111
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "at" msgid "at"
msgstr "" msgstr ""
@ -2693,7 +2693,7 @@ msgstr ""
msgid "burned from transactions included in the block (Base fee (per unit of gas) * Gas Used)." msgid "burned from transactions included in the block (Base fee (per unit of gas) * Gas Used)."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "button" msgid "button"
msgstr "" msgstr ""

@ -63,7 +63,7 @@ msgstr ""
msgid "%{subnetwork} Explorer - BlockScout" msgid "%{subnetwork} Explorer - BlockScout"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:351 #: lib/block_scout_web/views/transaction_view.ex:350
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "(Awaiting internal transactions for status)" msgid "(Awaiting internal transactions for status)"
msgstr "" msgstr ""
@ -189,7 +189,7 @@ msgstr ""
msgid "All functions displayed below are from ABI of that contract. In order to verify current contract, proceed with" msgid "All functions displayed below are from ABI of that contract. In order to verify current contract, proceed with"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "All metadata displayed below is from that contract. In order to verify current contract, click" msgid "All metadata displayed below is from that contract. In order to verify current contract, click"
msgstr "" msgstr ""
@ -241,7 +241,7 @@ msgstr ""
msgid "Balance" msgid "Balance"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:16 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Balances" msgid "Balances"
msgstr "" msgstr ""
@ -296,7 +296,7 @@ msgstr ""
msgid "Block Mined, awaiting import..." msgid "Block Mined, awaiting import..."
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:35 #: lib/block_scout_web/views/transaction_view.ex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Block Pending" msgid "Block Pending"
msgstr "" msgstr ""
@ -441,12 +441,12 @@ msgstr ""
msgid "Compiler" msgid "Compiler"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:67 #: lib/block_scout_web/templates/address_contract/index.html.eex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Compiler version" msgid "Compiler version"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:344 #: lib/block_scout_web/views/transaction_view.ex:343
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Confirmed" msgid "Confirmed"
msgstr "" msgstr ""
@ -472,30 +472,30 @@ msgstr ""
msgid "Connection Lost" msgid "Connection Lost"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:14 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:12
#: lib/block_scout_web/templates/block/index.html.eex:5 #: lib/block_scout_web/templates/block/index.html.eex:5
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer blocks" msgid "Connection Lost, click to load newer blocks"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:15
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer internal transactions" msgid "Connection Lost, click to load newer internal transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:13 #: lib/block_scout_web/templates/address_transaction/index.html.eex:11
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:16 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:16
#: lib/block_scout_web/templates/transaction/index.html.eex:22 #: lib/block_scout_web/templates/transaction/index.html.eex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer transactions" msgid "Connection Lost, click to load newer transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_validation/index.html.eex:12 #: lib/block_scout_web/templates/address_validation/index.html.eex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Connection Lost, click to load newer validations" msgid "Connection Lost, click to load newer validations"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:92 #: lib/block_scout_web/templates/address_contract/index.html.eex:90
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Constructor Arguments" msgid "Constructor Arguments"
msgstr "" msgstr ""
@ -506,7 +506,7 @@ msgstr ""
msgid "Contract" msgid "Contract"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:124 #: lib/block_scout_web/templates/address_contract/index.html.eex:122
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract ABI" msgid "Contract ABI"
msgstr "" msgstr ""
@ -524,18 +524,18 @@ msgstr ""
msgid "Contract Address Pending" msgid "Contract Address Pending"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:459 #: lib/block_scout_web/views/transaction_view.ex:458
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Call" msgid "Contract Call"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:456 #: lib/block_scout_web/views/transaction_view.ex:455
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Creation" msgid "Contract Creation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:140 #: lib/block_scout_web/templates/address_contract/index.html.eex:138
#: lib/block_scout_web/templates/address_contract/index.html.eex:155 #: lib/block_scout_web/templates/address_contract/index.html.eex:153
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Creation Code" msgid "Contract Creation Code"
msgstr "" msgstr ""
@ -546,29 +546,29 @@ msgstr ""
msgid "Contract Libraries" msgid "Contract Libraries"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:76 #: lib/block_scout_web/templates/address/overview.html.eex:75
#: lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_name_field.html.eex:3 #: lib/block_scout_web/templates/address_contract_verification_common_fields/_contract_name_field.html.eex:3
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract Name" msgid "Contract Name"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:27 #: lib/block_scout_web/templates/address_contract/index.html.eex:25
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:11 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:11
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB" msgid "Contract is not verified. However, we found a verified contract with the same bytecode in Blockscout DB"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:59 #: lib/block_scout_web/templates/address_contract/index.html.eex:57
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract name:" msgid "Contract name:"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:102 #: lib/block_scout_web/templates/address_contract/index.html.eex:100
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contract source code" msgid "Contract source code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:146 #: lib/block_scout_web/templates/address_contract/index.html.eex:144
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified." msgid "Contracts that self destruct in their constructors have no contract code published and cannot be verified."
msgstr "" msgstr ""
@ -578,35 +578,37 @@ msgstr ""
msgid "Contribute" msgid "Contribute"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:126 #: lib/block_scout_web/templates/address_contract/index.html.eex:124
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy ABI" msgid "Copy ABI"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/account/tag_address/row.html.eex:7
#: lib/block_scout_web/templates/account/tag_address/row.html.eex:7
#: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:7 #: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:7
#: lib/block_scout_web/templates/address/overview.html.eex:38
#: lib/block_scout_web/templates/address/overview.html.eex:39 #: lib/block_scout_web/templates/address/overview.html.eex:39
#: lib/block_scout_web/templates/address/overview.html.eex:40
#: lib/block_scout_web/templates/block/overview.html.eex:104 #: lib/block_scout_web/templates/block/overview.html.eex:104
#: lib/block_scout_web/templates/block/overview.html.eex:105 #: lib/block_scout_web/templates/block/overview.html.eex:105
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:43
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:44 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:44
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Address" msgid "Copy Address"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:142 #: lib/block_scout_web/templates/address_contract/index.html.eex:140
#: lib/block_scout_web/templates/address_contract/index.html.eex:158 #: lib/block_scout_web/templates/address_contract/index.html.eex:156
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Contract Creation Code" msgid "Copy Contract Creation Code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:21 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Decompiled Contract Code" msgid "Copy Decompiled Contract Code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:185 #: lib/block_scout_web/templates/address_contract/index.html.eex:177
#: lib/block_scout_web/templates/address_contract/index.html.eex:195 #: lib/block_scout_web/templates/address_contract/index.html.eex:187
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Deployed ByteCode" msgid "Copy Deployed ByteCode"
msgstr "" msgstr ""
@ -642,8 +644,8 @@ msgstr ""
msgid "Copy Raw Trace" msgid "Copy Raw Trace"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:104 #: lib/block_scout_web/templates/address_contract/index.html.eex:102
#: lib/block_scout_web/templates/address_contract/index.html.eex:115 #: lib/block_scout_web/templates/address_contract/index.html.eex:113
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Copy Source Code" msgid "Copy Source Code"
msgstr "" msgstr ""
@ -703,7 +705,7 @@ msgstr ""
msgid "Create2" msgid "Create2"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:103 #: lib/block_scout_web/templates/address/overview.html.eex:102
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Creator" msgid "Creator"
msgstr "" msgstr ""
@ -743,7 +745,7 @@ msgid "Date & time of transaction inclusion, including length of time for confir
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:52
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:132 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decimals" msgid "Decimals"
msgstr "" msgstr ""
@ -769,12 +771,12 @@ msgstr ""
msgid "Decompiled code" msgid "Decompiled code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:19 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decompiled contract code" msgid "Decompiled contract code"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:12 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:10
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Decompiler version" msgid "Decompiler version"
msgstr "" msgstr ""
@ -784,8 +786,8 @@ msgstr ""
msgid "Delegate Call" msgid "Delegate Call"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:175
#: lib/block_scout_web/templates/address_contract/index.html.eex:183 #: lib/block_scout_web/templates/address_contract/index.html.eex:183
#: lib/block_scout_web/templates/address_contract/index.html.eex:191
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Deployed ByteCode" msgid "Deployed ByteCode"
msgstr "" msgstr ""
@ -798,7 +800,7 @@ msgstr ""
msgid "Description" msgid "Description"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:31 #: lib/block_scout_web/templates/address/overview.html.eex:30
#: lib/block_scout_web/templates/api_docs/_action_tile.html.eex:166 #: 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 #: lib/block_scout_web/templates/api_docs/_eth_rpc_item.html.eex:127
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -810,7 +812,7 @@ msgstr ""
msgid "Difficulty" msgid "Difficulty"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:147 #: lib/block_scout_web/templates/address_contract/index.html.eex:145
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Displaying the init data provided of the creating transaction." msgid "Displaying the init data provided of the creating transaction."
msgstr "" msgstr ""
@ -845,17 +847,17 @@ msgstr ""
msgid "EIP-1167" msgid "EIP-1167"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:216 #: lib/block_scout_web/views/transaction_view.ex:215
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-1155 " msgid "ERC-1155 "
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:214 #: lib/block_scout_web/views/transaction_view.ex:213
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-20 " msgid "ERC-20 "
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:215 #: lib/block_scout_web/views/transaction_view.ex:214
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "ERC-721 " msgid "ERC-721 "
msgstr "" msgstr ""
@ -873,7 +875,7 @@ msgstr ""
msgid "ETH RPC API Documentation" msgid "ETH RPC API Documentation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:78 #: lib/block_scout_web/templates/address_contract/index.html.eex:76
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:26 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:26
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:22
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -926,17 +928,17 @@ msgstr ""
msgid "Error trying to fetch balances." msgid "Error trying to fetch balances."
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:355 #: lib/block_scout_web/views/transaction_view.ex:354
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: %{reason}" msgid "Error: %{reason}"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:353 #: lib/block_scout_web/views/transaction_view.ex:352
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: (Awaiting internal transactions for reason)" msgid "Error: (Awaiting internal transactions for reason)"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:120 #: lib/block_scout_web/templates/address/overview.html.eex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Error: Could not determine contract creator." msgid "Error: Could not determine contract creator."
msgstr "" msgstr ""
@ -946,8 +948,8 @@ msgstr ""
msgid "Eth RPC" msgid "Eth RPC"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/account/watchlist_address/edit.html.eex:37 #: lib/block_scout_web/templates/account/watchlist_address/edit.html.eex:27
#: lib/block_scout_web/templates/account/watchlist_address/new.html.eex:35 #: lib/block_scout_web/templates/account/watchlist_address/new.html.eex:25
#: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:21 #: lib/block_scout_web/templates/account/watchlist_address/row.html.eex:21
#: lib/block_scout_web/templates/address/_current_coin_balance.html.eex:11 #: lib/block_scout_web/templates/address/_current_coin_balance.html.eex:11
#: lib/block_scout_web/templates/address/index.html.eex:5 #: lib/block_scout_web/templates/address/index.html.eex:5
@ -986,7 +988,7 @@ msgstr ""
msgid "Export Data" msgid "Export Data"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:226 #: lib/block_scout_web/templates/address_contract/index.html.eex:212
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "External libraries" msgid "External libraries"
msgstr "" msgstr ""
@ -1012,7 +1014,7 @@ msgstr ""
msgid "Fetching gas used..." msgid "Fetching gas used..."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:113 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:112
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Fetching holders..." msgid "Fetching holders..."
msgstr "" msgstr ""
@ -1143,7 +1145,7 @@ msgstr ""
msgid "Hex (Default)" msgid "Hex (Default)"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:109 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Holders" msgid "Holders"
msgstr "" msgstr ""
@ -1220,11 +1222,11 @@ msgid "Internal Transaction"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:28 #: lib/block_scout_web/templates/address/_tabs.html.eex:28
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:19 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:17
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:11 #: 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/templates/transaction_internal_transaction/index.html.eex:6
#: lib/block_scout_web/views/address_view.ex:361 #: lib/block_scout_web/views/address_view.ex:361
#: lib/block_scout_web/views/transaction_view.ex:514 #: lib/block_scout_web/views/transaction_view.ex:513
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Internal Transactions" msgid "Internal Transactions"
msgstr "" msgstr ""
@ -1296,7 +1298,7 @@ msgstr ""
msgid "List of token transferred in the transaction." msgid "List of token transferred in the transaction."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:20 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:18
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Loading chart..." msgid "Loading chart..."
msgstr "" msgstr ""
@ -1307,10 +1309,10 @@ msgstr ""
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:133 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:133
#: lib/block_scout_web/templates/address_contract_verification_via_standard_json_input/new.html.eex:49 #: lib/block_scout_web/templates/address_contract_verification_via_standard_json_input/new.html.eex:49
#: lib/block_scout_web/templates/address_contract_verification_vyper/new.html.eex:45 #: lib/block_scout_web/templates/address_contract_verification_vyper/new.html.eex:45
#: lib/block_scout_web/templates/address_read_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_read_contract/index.html.eex:12
#: lib/block_scout_web/templates/address_read_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_read_proxy/index.html.eex:12
#: lib/block_scout_web/templates/address_write_contract/index.html.eex:14 #: lib/block_scout_web/templates/address_write_contract/index.html.eex:12
#: lib/block_scout_web/templates/address_write_proxy/index.html.eex:14 #: lib/block_scout_web/templates/address_write_proxy/index.html.eex:12
#: lib/block_scout_web/templates/tokens/contract/index.html.eex:17 #: lib/block_scout_web/templates/tokens/contract/index.html.eex:17
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Loading..." msgid "Loading..."
@ -1327,11 +1329,11 @@ msgid "Log Index"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:41 #: lib/block_scout_web/templates/address/_tabs.html.eex:41
#: lib/block_scout_web/templates/address_logs/index.html.eex:12 #: lib/block_scout_web/templates/address_logs/index.html.eex:10
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:17 #: 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/templates/transaction_log/index.html.eex:8
#: lib/block_scout_web/views/address_view.ex:372 #: lib/block_scout_web/views/address_view.ex:372
#: lib/block_scout_web/views/transaction_view.ex:515 #: lib/block_scout_web/views/transaction_view.ex:514
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Logs" msgid "Logs"
msgstr "" msgstr ""
@ -1343,7 +1345,7 @@ msgstr ""
#: lib/block_scout_web/templates/chain/show.html.eex:52 #: lib/block_scout_web/templates/chain/show.html.eex:52
#: lib/block_scout_web/templates/layout/app.html.eex:46 #: lib/block_scout_web/templates/layout/app.html.eex:46
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:85 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84
#: lib/block_scout_web/views/address_view.ex:142 #: lib/block_scout_web/views/address_view.ex:142
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Market Cap" msgid "Market Cap"
@ -1359,7 +1361,7 @@ msgstr ""
msgid "Max Priority Fee per Gas" msgid "Max Priority Fee per Gas"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:321 #: lib/block_scout_web/views/transaction_view.ex:320
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Max of" msgid "Max of"
msgstr "" msgstr ""
@ -1419,12 +1421,12 @@ msgstr ""
msgid "Module" msgid "Module"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:14 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:12
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "More internal transactions have come in" msgid "More internal transactions have come in"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:48 #: lib/block_scout_web/templates/address_transaction/index.html.eex:46
#: lib/block_scout_web/templates/chain/show.html.eex:216 #: lib/block_scout_web/templates/chain/show.html.eex:216
#: lib/block_scout_web/templates/pending_transaction/index.html.eex:13 #: lib/block_scout_web/templates/pending_transaction/index.html.eex:13
#: lib/block_scout_web/templates/transaction/index.html.eex:19 #: lib/block_scout_web/templates/transaction/index.html.eex:19
@ -1502,7 +1504,7 @@ msgstr ""
msgid "Not unique Token" msgid "Not unique Token"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:108 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:107
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of accounts holding the token" msgid "Number of accounts holding the token"
msgstr "" msgstr ""
@ -1512,7 +1514,7 @@ msgstr ""
msgid "Number of blocks validated by this validator." msgid "Number of blocks validated by this validator."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:131 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:130
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of digits that come after the decimal place when displaying token value" msgid "Number of digits that come after the decimal place when displaying token value"
msgstr "" msgstr ""
@ -1522,7 +1524,7 @@ msgstr ""
msgid "Number of transactions related to this address." msgid "Number of transactions related to this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:118
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Number of transfers for the token" msgid "Number of transfers for the token"
msgstr "" msgstr ""
@ -1543,12 +1545,12 @@ msgstr ""
msgid "Only the first" msgid "Only the first"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:63 #: lib/block_scout_web/templates/address_contract/index.html.eex:61
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Optimization enabled" msgid "Optimization enabled"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:72 #: lib/block_scout_web/templates/address_contract/index.html.eex:70
#: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:58 #: lib/block_scout_web/templates/address_contract_verification_via_flattened_code/new.html.eex:58
#: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54 #: lib/block_scout_web/templates/address_contract_verification_via_multi_part_files/new.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
@ -1628,12 +1630,12 @@ msgstr ""
#: lib/block_scout_web/templates/chain/show.html.eex:41 #: lib/block_scout_web/templates/chain/show.html.eex:41
#: lib/block_scout_web/templates/layout/app.html.eex:47 #: lib/block_scout_web/templates/layout/app.html.eex:47
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:96 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price" msgid "Price"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:95 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:94
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Price per token on the exchanges" msgid "Price per token on the exchanges"
msgstr "" msgstr ""
@ -1678,7 +1680,7 @@ msgstr ""
#: lib/block_scout_web/templates/transaction/_tabs.html.eex:24 #: 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/templates/transaction_raw_trace/index.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:516 #: lib/block_scout_web/views/transaction_view.ex:515
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
@ -1751,7 +1753,7 @@ msgstr ""
msgid "Run" msgid "Run"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:18 #: lib/block_scout_web/templates/address_logs/index.html.eex:16
#: lib/block_scout_web/templates/layout/_search.html.eex:34 #: lib/block_scout_web/templates/layout/_search.html.eex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Search" msgid "Search"
@ -1897,7 +1899,7 @@ msgid "Submit an Issue"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8 #: lib/block_scout_web/templates/transaction/_emission_reward_tile.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:352 #: lib/block_scout_web/views/transaction_view.ex:351
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Success" msgid "Success"
msgstr "" msgstr ""
@ -1938,12 +1940,12 @@ msgstr ""
msgid "The hash of the block from which this block was generated." msgid "The hash of the block from which this block was generated."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:75 #: lib/block_scout_web/templates/address/overview.html.eex:74
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The name found in the source code of the Contract." msgid "The name found in the source code of the Contract."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:86 #: lib/block_scout_web/templates/address/overview.html.eex:85
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The name of the validator." msgid "The name of the validator."
msgstr "" msgstr ""
@ -1968,7 +1970,7 @@ msgstr ""
msgid "The status of the transaction: Confirmed or Unconfirmed." msgid "The status of the transaction: Confirmed or Unconfirmed."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:68
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "The total amount of tokens issued" msgid "The total amount of tokens issued"
msgstr "" msgstr ""
@ -1978,7 +1980,7 @@ msgstr ""
msgid "The total gas amount used in the block and its percentage of gas filled in the block." msgid "The total gas amount used in the block and its percentage of gas filled in the block."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_validation/index.html.eex:18 #: lib/block_scout_web/templates/address_validation/index.html.eex:16
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no blocks validated by this address." msgid "There are no blocks validated by this address."
msgstr "" msgstr ""
@ -1993,7 +1995,7 @@ msgstr ""
msgid "There are no holders for this Token." msgid "There are no holders for this Token."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:56 #: lib/block_scout_web/templates/address_internal_transaction/index.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no internal transactions for this address." msgid "There are no internal transactions for this address."
msgstr "" msgstr ""
@ -2003,7 +2005,7 @@ msgstr ""
msgid "There are no internal transactions for this transaction." msgid "There are no internal transactions for this transaction."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:30 #: lib/block_scout_web/templates/address_logs/index.html.eex:28
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no logs for this address." msgid "There are no logs for this address."
msgstr "" msgstr ""
@ -2018,7 +2020,7 @@ msgstr ""
msgid "There are no pending transactions." msgid "There are no pending transactions."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:55 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:53
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no token transfers for this address." msgid "There are no token transfers for this address."
msgstr "" msgstr ""
@ -2028,7 +2030,7 @@ msgstr ""
msgid "There are no token transfers for this transaction" msgid "There are no token transfers for this transaction"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_token/index.html.eex:67 #: lib/block_scout_web/templates/address_token/index.html.eex:65
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no tokens for this address." msgid "There are no tokens for this address."
msgstr "" msgstr ""
@ -2038,7 +2040,7 @@ msgstr ""
msgid "There are no tokens." msgid "There are no tokens."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_transaction/index.html.eex:57 #: lib/block_scout_web/templates/address_transaction/index.html.eex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There are no transactions for this address." msgid "There are no transactions for this address."
msgstr "" msgstr ""
@ -2060,17 +2062,17 @@ msgstr ""
msgid "There are no transfers for this Token." msgid "There are no transfers for this Token."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:37 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:35
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There is no coin history for this address." msgid "There is no coin history for this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_decompiled_contract/index.html.eex:29
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There is no decompilded contracts for this address." msgid "There is no decompilded contracts for this address."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_coin_balance/index.html.eex:23 #: lib/block_scout_web/templates/address_coin_balance/index.html.eex:21
#: lib/block_scout_web/templates/chain/show.html.eex:9 #: lib/block_scout_web/templates/chain/show.html.eex:9
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "There was a problem loading the chart." msgid "There was a problem loading the chart."
@ -2091,12 +2093,12 @@ msgstr ""
msgid "This block has not been processed yet." msgid "This block has not been processed yet."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:43 #: lib/block_scout_web/templates/address_contract/index.html.eex:41
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This contract has been partially verified via Sourcify." msgid "This contract has been partially verified via Sourcify."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:47 #: lib/block_scout_web/templates/address_contract/index.html.eex:45
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "This contract has been verified via Sourcify." msgid "This contract has been verified via Sourcify."
msgstr "" msgstr ""
@ -2145,25 +2147,25 @@ msgstr ""
msgid "Toggle navigation" msgid "Toggle navigation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:56 #: lib/block_scout_web/templates/address/overview.html.eex:55
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token" msgid "Token"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:3 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:3
#: lib/block_scout_web/views/transaction_view.ex:450 #: lib/block_scout_web/views/transaction_view.ex:449
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Burning" msgid "Token Burning"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:7 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:7
#: lib/block_scout_web/views/transaction_view.ex:451 #: lib/block_scout_web/views/transaction_view.ex:450
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Creation" msgid "Token Creation"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:10 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:10
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:35 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:34
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Details" msgid "Token Details"
msgstr "" msgstr ""
@ -2185,20 +2187,20 @@ msgid "Token ID"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:5 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:5
#: lib/block_scout_web/views/transaction_view.ex:449 #: lib/block_scout_web/views/transaction_view.ex:448
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Minting" msgid "Token Minting"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:9 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:9
#: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:11 #: lib/block_scout_web/templates/common_components/_token_transfer_type_display_name.html.eex:11
#: lib/block_scout_web/views/transaction_view.ex:452 #: lib/block_scout_web/views/transaction_view.ex:451
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Transfer" msgid "Token Transfer"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/_tabs.html.eex:13 #: lib/block_scout_web/templates/address/_tabs.html.eex:13
#: lib/block_scout_web/templates/address_token_transfer/index.html.eex:21 #: lib/block_scout_web/templates/address_token_transfer/index.html.eex:19
#: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3 #: lib/block_scout_web/templates/tokens/instance/overview/_tabs.html.eex:3
#: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16 #: lib/block_scout_web/templates/tokens/instance/transfer/index.html.eex:16
#: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:5 #: lib/block_scout_web/templates/tokens/overview/_tabs.html.eex:5
@ -2208,17 +2210,17 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:363 #: lib/block_scout_web/views/address_view.ex:363
#: lib/block_scout_web/views/tokens/instance/overview_view.ex:195 #: lib/block_scout_web/views/tokens/instance/overview_view.ex:195
#: lib/block_scout_web/views/tokens/overview_view.ex:39 #: lib/block_scout_web/views/tokens/overview_view.ex:39
#: lib/block_scout_web/views/transaction_view.ex:513 #: lib/block_scout_web/views/transaction_view.ex:512
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token Transfers" msgid "Token Transfers"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:55 #: lib/block_scout_web/templates/address/overview.html.eex:54
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token name and symbol." msgid "Token name and symbol."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:143 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Token type" msgid "Token type"
msgstr "" msgstr ""
@ -2259,7 +2261,7 @@ msgstr ""
msgid "Top Accounts - %{subnetwork} Explorer" msgid "Top Accounts - %{subnetwork} Explorer"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/index.html.eex:16 #: lib/block_scout_web/templates/address_logs/index.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Topic" msgid "Topic"
msgstr "" msgstr ""
@ -2275,7 +2277,7 @@ msgstr ""
msgid "Total Difficulty" msgid "Total Difficulty"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:84 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:83
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total Supply * Price" msgid "Total Supply * Price"
msgstr "" msgstr ""
@ -2295,7 +2297,7 @@ msgstr ""
msgid "Total gas limit provided by all transactions in the block." msgid "Total gas limit provided by all transactions in the block."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:70 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:69
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Total supply" msgid "Total supply"
msgstr "" msgstr ""
@ -2311,7 +2313,7 @@ msgid "Total transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:19 #: lib/block_scout_web/templates/address_logs/_logs.html.eex:19
#: lib/block_scout_web/views/transaction_view.ex:462 #: lib/block_scout_web/views/transaction_view.ex:461
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transaction" msgid "Transaction"
msgstr "" msgstr ""
@ -2381,7 +2383,7 @@ msgstr ""
msgid "Transactions" msgid "Transactions"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:102 #: lib/block_scout_web/templates/address/overview.html.eex:101
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transactions and address of creation." msgid "Transactions and address of creation."
msgstr "" msgstr ""
@ -2395,7 +2397,7 @@ msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:237 #: lib/block_scout_web/templates/address/overview.html.eex:237
#: lib/block_scout_web/templates/address/overview.html.eex:245 #: lib/block_scout_web/templates/address/overview.html.eex:245
#: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50 #: lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex:50
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:120 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:119
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Transfers" msgid "Transfers"
msgstr "" msgstr ""
@ -2422,7 +2424,7 @@ msgstr ""
msgid "Type" msgid "Type"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/tokens/overview/_details.html.eex:142 #: lib/block_scout_web/templates/tokens/overview/_details.html.eex:141
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Type of the token standard" msgid "Type of the token standard"
msgstr "" msgstr ""
@ -2443,7 +2445,7 @@ msgstr ""
msgid "Uncles" msgid "Uncles"
msgstr "" msgstr ""
#: lib/block_scout_web/views/transaction_view.ex:343 #: lib/block_scout_web/views/transaction_view.ex:342
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Unconfirmed" msgid "Unconfirmed"
msgstr "" msgstr ""
@ -2493,7 +2495,7 @@ msgstr ""
msgid "Validator Data" msgid "Validator Data"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:87 #: lib/block_scout_web/templates/address/overview.html.eex:86
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Validator Name" msgid "Validator Name"
msgstr "" msgstr ""
@ -2508,17 +2510,15 @@ msgstr ""
msgid "Value sent in the native token (and USD) if applicable." msgid "Value sent in the native token (and USD) if applicable."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:84 #: lib/block_scout_web/templates/address_contract/index.html.eex:82
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Verified at" msgid "Verified at"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:27
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:29
#: lib/block_scout_web/templates/address_contract/index.html.eex:31 #: lib/block_scout_web/templates/address_contract/index.html.eex:161
#: lib/block_scout_web/templates/address_contract/index.html.eex:162 #: lib/block_scout_web/templates/address_contract/index.html.eex:192
#: lib/block_scout_web/templates/address_contract/index.html.eex:168
#: lib/block_scout_web/templates/address_contract/index.html.eex:199
#: lib/block_scout_web/templates/address_contract/index.html.eex:205
#: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14 #: lib/block_scout_web/templates/smart_contract/_functions.html.eex:14
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "Verify & Publish" msgid "Verify & Publish"
@ -2673,7 +2673,7 @@ msgstr ""
msgid "Yes" msgid "Yes"
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address/overview.html.eex:112 #: lib/block_scout_web/templates/address/overview.html.eex:111
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "at" msgid "at"
msgstr "" msgstr ""
@ -2693,7 +2693,7 @@ msgstr ""
msgid "burned from transactions included in the block (Base fee (per unit of gas) * Gas Used)." msgid "burned from transactions included in the block (Base fee (per unit of gas) * Gas Used)."
msgstr "" msgstr ""
#: lib/block_scout_web/templates/address_contract/index.html.eex:29 #: lib/block_scout_web/templates/address_contract/index.html.eex:27
#, elixir-autogen, elixir-format #, elixir-autogen, elixir-format
msgid "button" msgid "button"
msgstr "" msgstr ""

@ -5,12 +5,13 @@ defmodule Explorer.Accounts.Identity do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
alias Explorer.Accounts.Watchlist alias Explorer.Accounts.{TagAddress, Watchlist}
schema "account_identities" do schema "account_identities" do
field(:uid, :string) field(:uid, :string)
field(:email, :string) field(:email, :string)
field(:name, :string) field(:name, :string)
has_many(:tag_addresses, TagAddress)
has_many(:watchlists, Watchlist) has_many(:watchlists, Watchlist)
timestamps() timestamps()

@ -0,0 +1,32 @@
defmodule Explorer.Accounts.TagAddress do
@moduledoc """
Watchlist is root entity for WatchlistAddresses
"""
use Ecto.Schema
import Ecto.Changeset
alias Explorer.Accounts.Identity
alias Explorer.Chain.{Address, Hash}
schema "account_tag_addresses" do
field(:name, :string)
belongs_to(:identity, Identity)
belongs_to(:address, Address,
foreign_key: :address_hash,
references: :hash,
type: Hash.Address
)
timestamps()
end
@doc false
def changeset(tag, attrs) do
tag
|> cast(attrs, [:name, :identity_id, :address_hash])
|> validate_required([:name, :identity_id, :address_hash])
end
end

@ -30,6 +30,7 @@ defmodule Explorer.ExchangeRates.Token do
volume_24h_usd: Decimal.t() volume_24h_usd: Decimal.t()
} }
@derive Jason.Encoder
@enforce_keys ~w(available_supply total_supply btc_value id last_updated market_cap_usd name symbol usd_value volume_24h_usd)a @enforce_keys ~w(available_supply total_supply btc_value id last_updated market_cap_usd name symbol usd_value volume_24h_usd)a
defstruct ~w(available_supply total_supply btc_value id last_updated market_cap_usd name symbol usd_value volume_24h_usd)a defstruct ~w(available_supply total_supply btc_value id last_updated market_cap_usd name symbol usd_value volume_24h_usd)a

@ -7,7 +7,6 @@ defmodule Explorer.Tags.AddressToTag do
import Ecto.Changeset import Ecto.Changeset
alias Explorer.Accounts.WatchlistAddress
alias Explorer.{Chain, Repo} alias Explorer.{Chain, Repo}
alias Explorer.Chain.{Address, Hash} alias Explorer.Chain.{Address, Hash}
alias Explorer.Tags.{AddressTag, AddressToTag} alias Explorer.Tags.{AddressTag, AddressToTag}
@ -66,42 +65,6 @@ defmodule Explorer.Tags.AddressToTag do
|> Repo.all() |> Repo.all()
end end
def get_tags_on_address(address_hash) when is_nil(address_hash), do: []
def get_tags_on_address(address_hash) do
query =
from(
tt in AddressTag,
left_join: att in AddressToTag,
on: tt.id == att.tag_id,
where: att.address_hash == ^address_hash,
where: tt.label != ^"validator",
select: tt
)
query
|> Repo.all()
end
def get_private_tags_on_address(address_hash, _current_user) when is_nil(address_hash), do: []
def get_private_tags_on_address(address_hash, current_user) do
if current_user do
query =
from(
wa in WatchlistAddress,
where: wa.address_hash == ^address_hash,
where: wa.watchlist_id == ^current_user.watchlist_id,
select: %{label: wa.name, display_name: wa.name}
)
query
|> Repo.all()
else
[]
end
end
def set_tag_to_addresses(tag_id, address_hash_string_list) do def set_tag_to_addresses(tag_id, address_hash_string_list) do
current_address_hashes = get_address_hashes_mapped_to_tag(tag_id) current_address_hashes = get_address_hashes_mapped_to_tag(tag_id)

@ -0,0 +1,20 @@
defmodule Explorer.Repo.Migrations.CreateAccountTagAddresses do
use Ecto.Migration
def change do
create table(:account_tag_addresses) do
add(:name, :string)
add(:identity_id, references(:account_identities, on_delete: :delete_all))
add(
:address_hash,
references(:addresses, column: :hash, type: :bytea, on_delete: :delete_all)
)
timestamps()
end
create(index(:account_tag_addresses, [:identity_id]))
create(index(:account_tag_addresses, [:address_hash]))
end
end

@ -374,10 +374,10 @@ ifdef SENDGRID_API_KEY
BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_API_KEY=$(SENDGRID_API_KEY)' BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_API_KEY=$(SENDGRID_API_KEY)'
endif endif
ifdef SENDGRID_SENDER ifdef SENDGRID_SENDER
BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_API_KEY=$(SENDGRID_SENDER)' BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_SENDER=$(SENDGRID_SENDER)'
endif endif
ifdef SENDGRID_TEMPLATE ifdef SENDGRID_TEMPLATE
BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_API_KEY=$(SENDGRID_TEMPLATE)' BLOCKSCOUT_CONTAINER_PARAMS += -e 'SENDGRID_TEMPLATE=$(SENDGRID_TEMPLATE)'
endif endif
ifdef API_RATE_LIMIT ifdef API_RATE_LIMIT

Loading…
Cancel
Save