Merge branch 'master' into vb-transaction-history

pull/3065/head
Victor Baranov 5 years ago committed by GitHub
commit 978841de8d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      CHANGELOG.md
  2. 6
      apps/block_scout_web/lib/block_scout_web/channels/address_channel.ex
  3. 6
      apps/block_scout_web/lib/block_scout_web/channels/transaction_channel.ex
  4. 5
      apps/block_scout_web/lib/block_scout_web/controllers/address_token_transfer_controller.ex
  5. 6
      apps/block_scout_web/lib/block_scout_web/controllers/address_transaction_controller.ex
  6. 4
      apps/block_scout_web/lib/block_scout_web/controllers/block_transaction_controller.ex
  7. 4
      apps/block_scout_web/lib/block_scout_web/controllers/pending_transaction_controller.ex
  8. 9
      apps/block_scout_web/lib/block_scout_web/controllers/recent_transactions_controller.ex
  9. 6
      apps/block_scout_web/lib/block_scout_web/controllers/tokens/instance/transfer_controller.ex
  10. 6
      apps/block_scout_web/lib/block_scout_web/controllers/tokens/transfer_controller.ex
  11. 4
      apps/block_scout_web/lib/block_scout_web/controllers/transaction_controller.ex
  12. 4
      apps/block_scout_web/lib/block_scout_web/controllers/transaction_token_transfer_controller.ex
  13. 2
      apps/block_scout_web/lib/block_scout_web/templates/address_contract/index.html.eex
  14. 2
      apps/block_scout_web/lib/block_scout_web/templates/tokens/instance/overview/_details.html.eex
  15. 13
      apps/block_scout_web/lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex
  16. 2
      apps/block_scout_web/lib/block_scout_web/templates/transaction/_tile.html.eex
  17. 41
      apps/block_scout_web/lib/block_scout_web/templates/transaction/overview.html.eex
  18. 9
      apps/block_scout_web/lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex
  19. 28
      apps/block_scout_web/lib/block_scout_web/views/address_contract_view.ex
  20. 109
      apps/block_scout_web/lib/block_scout_web/views/transaction_view.ex
  21. 84
      apps/block_scout_web/priv/gettext/default.pot
  22. 84
      apps/block_scout_web/priv/gettext/en/LC_MESSAGES/default.po

@ -2,6 +2,9 @@
### Features ### Features
- [#3069](https://github.com/poanetwork/blockscout/pull/3069) - Make a link to address page on decoded constructor argument of address type
- [#3067](https://github.com/poanetwork/blockscout/pull/3067) - Show proper title of the tile or container for token burnings/mintings instead of "Token Transfer"
- [#3066](https://github.com/poanetwork/blockscout/pull/3066) - ERC-721 token instance page: link to token added
- [#3065](https://github.com/poanetwork/blockscout/pull/3065) - Transactions history chart - [#3065](https://github.com/poanetwork/blockscout/pull/3065) - Transactions history chart
### Fixes ### Fixes

@ -13,6 +13,9 @@ defmodule BlockScoutWeb.AddressChannel do
intercept(["balance_update", "coin_balance", "count", "internal_transaction", "transaction", "verification_result"]) intercept(["balance_update", "coin_balance", "count", "internal_transaction", "transaction", "verification_result"])
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def join("addresses:" <> address_hash, _params, socket) do def join("addresses:" <> address_hash, _params, socket) do
{:ok, %{}, assign(socket, :address_hash, address_hash)} {:ok, %{}, assign(socket, :address_hash, address_hash)}
end end
@ -129,7 +132,8 @@ defmodule BlockScoutWeb.AddressChannel do
"_tile.html", "_tile.html",
conn: socket, conn: socket,
current_address: address, current_address: address,
transaction: transaction transaction: transaction,
burn_address_hash: @burn_address_hash
) )
push(socket, event, %{ push(socket, event, %{

@ -5,11 +5,15 @@ defmodule BlockScoutWeb.TransactionChannel do
use BlockScoutWeb, :channel use BlockScoutWeb, :channel
alias BlockScoutWeb.TransactionView alias BlockScoutWeb.TransactionView
alias Explorer.Chain
alias Explorer.Chain.Hash alias Explorer.Chain.Hash
alias Phoenix.View alias Phoenix.View
intercept(["pending_transaction", "transaction"]) intercept(["pending_transaction", "transaction"])
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def join("transactions:new_transaction", _params, socket) do def join("transactions:new_transaction", _params, socket) do
{:ok, %{}, socket} {:ok, %{}, socket}
end end
@ -34,6 +38,7 @@ defmodule BlockScoutWeb.TransactionChannel do
TransactionView, TransactionView,
"_tile.html", "_tile.html",
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: socket conn: socket
) )
@ -53,6 +58,7 @@ defmodule BlockScoutWeb.TransactionChannel do
TransactionView, TransactionView,
"_tile.html", "_tile.html",
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: socket conn: socket
) )

@ -24,6 +24,9 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
} }
] ]
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index( def index(
conn, conn,
%{ %{
@ -67,6 +70,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
"_tile.html", "_tile.html",
conn: conn, conn: conn,
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
current_address: address current_address: address
) )
end) end)
@ -151,6 +155,7 @@ defmodule BlockScoutWeb.AddressTokenTransferController do
"_tile.html", "_tile.html",
conn: conn, conn: conn,
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
current_address: address current_address: address
) )
end) end)

@ -23,6 +23,9 @@ defmodule BlockScoutWeb.AddressTransactionController do
} }
] ]
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"address_id" => address_hash_string, "type" => "JSON"} = params) do def index(conn, %{"address_id" => address_hash_string, "type" => "JSON"} = params) do
address_options = [necessity_by_association: %{:names => :optional}] address_options = [necessity_by_association: %{:names => :optional}]
@ -69,7 +72,8 @@ defmodule BlockScoutWeb.AddressTransactionController do
"_tile.html", "_tile.html",
conn: conn, conn: conn,
current_address: address, current_address: address,
transaction: transaction transaction: transaction,
burn_address_hash: @burn_address_hash
) )
end end
end) end)

@ -10,6 +10,9 @@ defmodule BlockScoutWeb.BlockTransactionController do
alias Explorer.Chain alias Explorer.Chain
alias Phoenix.View alias Phoenix.View
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"block_hash_or_number" => formatted_block_hash_or_number, "type" => "JSON"} = params) do def index(conn, %{"block_hash_or_number" => formatted_block_hash_or_number, "type" => "JSON"} = params) do
case param_block_hash_or_number_to_block(formatted_block_hash_or_number, []) do case param_block_hash_or_number_to_block(formatted_block_hash_or_number, []) do
{:ok, block} -> {:ok, block} ->
@ -51,6 +54,7 @@ defmodule BlockScoutWeb.BlockTransactionController do
TransactionView, TransactionView,
"_tile.html", "_tile.html",
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: conn conn: conn
) )
end) end)

@ -7,6 +7,9 @@ defmodule BlockScoutWeb.PendingTransactionController do
alias Explorer.Chain alias Explorer.Chain
alias Phoenix.View alias Phoenix.View
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"type" => "JSON"} = params) do def index(conn, %{"type" => "JSON"} = params) do
full_options = full_options =
Keyword.merge( Keyword.merge(
@ -44,6 +47,7 @@ defmodule BlockScoutWeb.PendingTransactionController do
TransactionView, TransactionView,
"_tile.html", "_tile.html",
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: conn conn: conn
) )
end), end),

@ -5,6 +5,9 @@ defmodule BlockScoutWeb.RecentTransactionsController do
alias Explorer.Chain.Hash alias Explorer.Chain.Hash
alias Phoenix.View alias Phoenix.View
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, _params) do def index(conn, _params) do
if ajax?(conn) do if ajax?(conn) do
recent_transactions = recent_transactions =
@ -23,7 +26,11 @@ defmodule BlockScoutWeb.RecentTransactionsController do
%{ %{
transaction_hash: Hash.to_string(transaction.hash), transaction_hash: Hash.to_string(transaction.hash),
transaction_html: transaction_html:
View.render_to_string(BlockScoutWeb.TransactionView, "_tile.html", transaction: transaction, conn: conn) View.render_to_string(BlockScoutWeb.TransactionView, "_tile.html",
transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: conn
)
} }
end) end)

@ -8,6 +8,9 @@ defmodule BlockScoutWeb.Tokens.Instance.TransferController do
import BlockScoutWeb.Chain, only: [split_list_by_page: 1, paging_options: 1, next_page_params: 3] import BlockScoutWeb.Chain, only: [split_list_by_page: 1, paging_options: 1, next_page_params: 3]
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"token_id" => token_address_hash, "instance_id" => token_id, "type" => "JSON"} = params) do def index(conn, %{"token_id" => token_address_hash, "instance_id" => token_id, "type" => "JSON"} = params) do
with {:ok, hash} <- Chain.string_to_address_hash(token_address_hash), with {:ok, hash} <- Chain.string_to_address_hash(token_address_hash),
{:ok, token} <- Chain.token_from_address_hash(hash), {:ok, token} <- Chain.token_from_address_hash(hash),
@ -37,7 +40,8 @@ defmodule BlockScoutWeb.Tokens.Instance.TransferController do
"_token_transfer.html", "_token_transfer.html",
conn: conn, conn: conn,
token: token, token: token,
token_transfer: transfer token_transfer: transfer,
burn_address_hash: @burn_address_hash
) )
end) end)

@ -8,6 +8,9 @@ defmodule BlockScoutWeb.Tokens.TransferController do
import BlockScoutWeb.Chain, only: [split_list_by_page: 1, paging_options: 1, next_page_params: 3] import BlockScoutWeb.Chain, only: [split_list_by_page: 1, paging_options: 1, next_page_params: 3]
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"token_id" => address_hash_string, "type" => "JSON"} = params) do def index(conn, %{"token_id" => address_hash_string, "type" => "JSON"} = params) do
with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string), with {:ok, address_hash} <- Chain.string_to_address_hash(address_hash_string),
{:ok, token} <- Chain.token_from_address_hash(address_hash), {:ok, token} <- Chain.token_from_address_hash(address_hash),
@ -35,7 +38,8 @@ defmodule BlockScoutWeb.Tokens.TransferController do
"_token_transfer.html", "_token_transfer.html",
conn: conn, conn: conn,
token: token, token: token,
token_transfer: transfer token_transfer: transfer,
burn_address_hash: @burn_address_hash
) )
end) end)

@ -7,6 +7,9 @@ defmodule BlockScoutWeb.TransactionController do
alias Explorer.Chain alias Explorer.Chain
alias Phoenix.View alias Phoenix.View
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"type" => "JSON"} = params) do def index(conn, %{"type" => "JSON"} = params) do
full_options = full_options =
Keyword.merge( Keyword.merge(
@ -42,6 +45,7 @@ defmodule BlockScoutWeb.TransactionController do
TransactionView, TransactionView,
"_tile.html", "_tile.html",
transaction: transaction, transaction: transaction,
burn_address_hash: @burn_address_hash,
conn: conn conn: conn
) )
end), end),

@ -8,6 +8,9 @@ defmodule BlockScoutWeb.TransactionTokenTransferController do
alias Explorer.ExchangeRates.Token alias Explorer.ExchangeRates.Token
alias Phoenix.View alias Phoenix.View
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
def index(conn, %{"transaction_id" => hash_string, "type" => "JSON"} = params) do def index(conn, %{"transaction_id" => hash_string, "type" => "JSON"} = params) do
with {:ok, hash} <- Chain.string_to_transaction_hash(hash_string), with {:ok, hash} <- Chain.string_to_transaction_hash(hash_string),
:ok <- Chain.check_transaction_exists(hash) do :ok <- Chain.check_transaction_exists(hash) do
@ -43,6 +46,7 @@ defmodule BlockScoutWeb.TransactionTokenTransferController do
TransactionTokenTransferView, TransactionTokenTransferView,
"_token_transfer.html", "_token_transfer.html",
token_transfer: transfer, token_transfer: transfer,
burn_address_hash: @burn_address_hash,
conn: conn conn: conn
) )
end) end)

@ -53,7 +53,7 @@
<h3><%= gettext "Constructor Arguments" %></h3> <h3><%= gettext "Constructor Arguments" %></h3>
</div> </div>
<div class="tile tile-muted mb-4"> <div class="tile tile-muted mb-4">
<pre class="pre-wrap pre-scrollable"><code class="nohighlight"><%= raw(format_constructor_arguments(@address.smart_contract)) %></code> <pre class="pre-wrap pre-scrollable"><code class="nohighlight"><%= raw(format_constructor_arguments(@address.smart_contract, @conn)) %></code>
</pre> </pre>
</div> </div>
</section> </section>

@ -5,7 +5,7 @@
<div class="card-body"> <div class="card-body">
<h1 class="card-title"> <h1 class="card-title">
<%= if token_name?(@token) do %> <%= if token_name?(@token) do %>
<%= @token.name %> <%= link(@token.name, to: token_path(BlockScoutWeb.Endpoint, :show, @token.contract_address_hash)) %>
<% else %> <% else %>
<%= gettext("Token Details") %> <%= gettext("Token Details") %>
<% end %> <% end %>

@ -2,7 +2,16 @@
<div class="row tile-body"> <div class="row tile-body">
<!-- Color Block --> <!-- Color Block -->
<div class="tile-transaction-type-block col-md-2 d-flex flex-row flex-md-column"> <div class="tile-transaction-type-block col-md-2 d-flex flex-row flex-md-column">
<span class="tile-label"><%= gettext "Token Transfer" %></span> <span class="tile-label">
<%= cond do %>
<% @token_transfer.to_address.hash == @burn_address_hash -> %>
<%= gettext("Token Burning") %>
<% @token_transfer.from_address.hash == @burn_address_hash -> %>
<%= gettext("Token Minting") %>
<% true -> %>
<%= gettext("Token Transfer") %>
<% end %>
</span>
</div> </div>
<!-- Content --> <!-- Content -->
<div class="col-md-7 col-lg-8 d-flex flex-column pr-2 pr-sm-2 pr-md-0"> <div class="col-md-7 col-lg-8 d-flex flex-column pr-2 pr-sm-2 pr-md-0">
@ -37,7 +46,7 @@
<%= value %> <%= value %>
<% end %> <% end %>
<%= " "%> <%= " "%>
<%= @token_transfer.token.symbol %> <%= link(@token_transfer.token.symbol, to: token_path(BlockScoutWeb.Endpoint, :show, @token_transfer.token.contract_address_hash)) %>
</span> </span>
</span> </span>
</div> </div>

@ -42,7 +42,7 @@
<div class="collapse token-transfer-toggle" id="transaction-<%= @transaction.hash %>"> <div class="collapse token-transfer-toggle" id="transaction-<%= @transaction.hash %>">
<%= for token_transfer <- remaining_token_transfers do %> <%= for token_transfer <- remaining_token_transfers do %>
<%= render "_token_transfer.html", address: assigns[:current_address], token_transfer: token_transfer %> <%= render "_token_transfer.html", address: assigns[:current_address], token_transfer: token_transfer, burn_address_hash: @burn_address_hash %>
<% end %> <% end %>
</div> </div>
</div> </div>

@ -191,9 +191,11 @@
<% end %> <% end %>
</div> </div>
<% end %> <% end %>
<% token_transfers = aggregate_token_transfers(transaction_with_transfers.token_transfers) %>
<%= if Enum.count(token_transfers) > 0 do %>
<h2 class="card-title balance-card-title"><%= token_type_name(type)%><%= gettext " Token Transfer" %></h2> <h2 class="card-title balance-card-title"><%= token_type_name(type)%><%= gettext " Token Transfer" %></h2>
<div class="text-right"> <div class="text-right">
<%= for transfer <- aggregate_token_transfers(transaction_with_transfers.token_transfers) do %> <%= for transfer <- token_transfers do %>
<h3 class="address-balance-text"> <h3 class="address-balance-text">
<%= case token_transfer_amount(transfer) do %> <%= case token_transfer_amount(transfer) do %>
<% {:ok, :erc721_instance} -> %> <% {:ok, :erc721_instance} -> %>
@ -206,6 +208,43 @@
</h3> </h3>
<% end %> <% end %>
</div> </div>
<% end %>
<% mintings = aggregate_token_mintings(transaction_with_transfers.token_transfers) %>
<%= if Enum.count(mintings) > 0 do %>
<h2 class="card-title balance-card-title"><%= token_type_name(type)%><%= gettext " Token Minting" %></h2>
<div class="text-right">
<%= for transfer <- mintings do %>
<h3 class="address-balance-text">
<%= case token_transfer_amount(transfer) do %>
<% {:ok, :erc721_instance} -> %>
<%= "TokenID ["%><%= link(transfer.token_id, to: token_instance_path(@conn, :show, transfer.token.contract_address_hash, to_string(transfer.token_id))) %><%= "]" %>
<% {:ok, value} -> %>
<%= value %>
<% end %>
<%= " "%>
<%= link(token_symbol(transfer.token), to: token_path(BlockScoutWeb.Endpoint, :show, transfer.token.contract_address_hash)) %>
</h3>
<% end %>
</div>
<% end %>
<% burnings = aggregate_token_burnings(transaction_with_transfers.token_transfers) %>
<%= if Enum.count(burnings) > 0 do %>
<h2 class="card-title balance-card-title"><%= token_type_name(type)%><%= gettext " Token Burning" %></h2>
<div class="text-right">
<%= for transfer <- burnings do %>
<h3 class="address-balance-text">
<%= case token_transfer_amount(transfer) do %>
<% {:ok, :erc721_instance} -> %>
<%= "TokenID ["%><%= link(transfer.token_id, to: token_instance_path(@conn, :show, transfer.token.contract_address_hash, to_string(transfer.token_id))) %><%= "]" %>
<% {:ok, value} -> %>
<%= value %>
<% end %>
<%= " "%>
<%= link(token_symbol(transfer.token), to: token_path(BlockScoutWeb.Endpoint, :show, transfer.token.contract_address_hash)) %>
</h3>
<% end %>
</div>
<% end %>
</div> </div>
</div> </div>
<% _ -> %> <% _ -> %>

@ -1,7 +1,14 @@
<div class="tile tile-type-token-transfer fade-in"> <div class="tile tile-type-token-transfer fade-in">
<div class="row justify-content-end"> <div class="row justify-content-end">
<div class="col-12 col-md-4 col-lg-2 d-flex align-items-center justify-content-start justify-content-lg-center tile-label"> <div class="col-12 col-md-4 col-lg-2 d-flex align-items-center justify-content-start justify-content-lg-center tile-label">
<%= cond do %>
<% @token_transfer.to_address.hash == @burn_address_hash -> %>
<%= gettext("Token Burning") %>
<% @token_transfer.from_address.hash == @burn_address_hash -> %>
<%= gettext("Token Minting") %>
<% true -> %>
<%= gettext("Token Transfer") %> <%= gettext("Token Transfer") %>
<% end %>
</div> </div>
<div class="col-12 col-md-8 col-lg-10 d-flex flex-column text-nowrap"> <div class="col-12 col-md-8 col-lg-10 d-flex flex-column text-nowrap">
@ -15,7 +22,7 @@
<span class="tile-title text-truncate"> <span class="tile-title text-truncate">
<%= case token_transfer_amount(@token_transfer) do%> <%= case token_transfer_amount(@token_transfer) do%>
<% {:ok, :erc721_instance} -> %> <% {:ok, :erc721_instance} -> %>
<%= "TokenID ["%><%= link(@token_transfer.token_id, to: token_instance_path(@conn, :show, @token_transfer.token.contract_address_hash, to_string(@token_transfer.token_id))) %><%= "]" %> <%= "TokenID2 ["%><%= link(@token_transfer.token_id, to: token_instance_path(@conn, :show, @token_transfer.token.contract_address_hash, to_string(@token_transfer.token_id))) %><%= "]" %>
<% {:ok, value} -> %> <% {:ok, value} -> %>
<%= value %> <%= value %>
<% end %> <% end %>

@ -2,6 +2,7 @@ defmodule BlockScoutWeb.AddressContractView do
use BlockScoutWeb, :view use BlockScoutWeb, :view
alias ABI.{FunctionSelector, TypeDecoder} alias ABI.{FunctionSelector, TypeDecoder}
alias Explorer.Chain
alias Explorer.Chain.{Address, Data, InternalTransaction, SmartContract} alias Explorer.Chain.{Address, Data, InternalTransaction, SmartContract}
def render("scripts.html", %{conn: conn}) do def render("scripts.html", %{conn: conn}) do
@ -22,7 +23,7 @@ defmodule BlockScoutWeb.AddressContractView do
def format_optimization_text(true), do: gettext("true") def format_optimization_text(true), do: gettext("true")
def format_optimization_text(false), do: gettext("false") def format_optimization_text(false), do: gettext("false")
def format_constructor_arguments(contract) do def format_constructor_arguments(contract, conn) do
constructor_abi = Enum.find(contract.abi, fn el -> el["type"] == "constructor" && el["inputs"] != [] end) constructor_abi = Enum.find(contract.abi, fn el -> el["type"] == "constructor" && el["inputs"] != [] end)
input_types = Enum.map(constructor_abi["inputs"], &FunctionSelector.parse_specification_type/1) input_types = Enum.map(constructor_abi["inputs"], &FunctionSelector.parse_specification_type/1)
@ -32,10 +33,23 @@ defmodule BlockScoutWeb.AddressContractView do
|> decode_data(input_types) |> decode_data(input_types)
|> Enum.zip(constructor_abi["inputs"]) |> Enum.zip(constructor_abi["inputs"])
|> Enum.reduce({0, "#{contract.constructor_arguments}\n\n"}, fn {val, %{"type" => type}}, {count, acc} -> |> Enum.reduce({0, "#{contract.constructor_arguments}\n\n"}, fn {val, %{"type" => type}}, {count, acc} ->
address_hash = "0x" <> Base.encode16(val, case: :lower)
address =
case Chain.string_to_address_hash(address_hash) do
{:ok, address} -> address
_ -> nil
end
formatted_val = formatted_val =
if type =~ "address" || type =~ "bytes" do cond do
type =~ "address" ->
get_formatted_address_data(address, address_hash, conn)
type =~ "bytes" ->
Base.encode16(val, case: :lower) Base.encode16(val, case: :lower)
else
true ->
val val
end end
@ -47,6 +61,14 @@ defmodule BlockScoutWeb.AddressContractView do
_ -> contract.constructor_arguments _ -> contract.constructor_arguments
end end
defp get_formatted_address_data(address, address_hash, conn) do
if address != nil do
"<a href=" <> address_path(conn, :show, address) <> ">" <> address_hash <> "</a>"
else
address_hash
end
end
defp decode_data("0x" <> encoded_data, types) do defp decode_data("0x" <> encoded_data, types) do
decode_data(encoded_data, types) decode_data(encoded_data, types)
end end

@ -14,6 +14,17 @@ defmodule BlockScoutWeb.TransactionView do
@tabs ["token_transfers", "internal_transactions", "logs", "raw_trace"] @tabs ["token_transfers", "internal_transactions", "logs", "raw_trace"]
{:ok, burn_address_hash} = Chain.string_to_address_hash("0x0000000000000000000000000000000000000000")
@burn_address_hash burn_address_hash
@token_burning_title "Token Burning"
@token_minting_title "Token Minting"
@token_transfer_title "Token Transfer"
@token_burning_type "token-burning"
@token_minting_type "token-minting"
@token_transfer_type "token-transfer"
defguardp is_transaction_type(mod) when mod in [InternalTransaction, Transaction] defguardp is_transaction_type(mod) when mod in [InternalTransaction, Transaction]
defdelegate formatted_timestamp(block), to: BlockView defdelegate formatted_timestamp(block), to: BlockView
@ -43,7 +54,44 @@ defmodule BlockScoutWeb.TransactionView do
{transfers, nft_transfers} = {transfers, nft_transfers} =
token_transfers token_transfers
|> Enum.reduce({%{}, []}, fn token_transfer, acc -> |> Enum.reduce({%{}, []}, fn token_transfer, acc ->
if token_transfer.to_address_hash != @burn_address_hash &&
token_transfer.from_address_hash != @burn_address_hash do
aggregate_reducer(token_transfer, acc)
else
acc
end
end)
final_transfers = Map.values(transfers)
final_transfers ++ nft_transfers
end
def aggregate_token_mintings(token_transfers) do
{transfers, nft_transfers} =
token_transfers
|> Enum.reduce({%{}, []}, fn token_transfer, acc ->
if token_transfer.from_address_hash == @burn_address_hash do
aggregate_reducer(token_transfer, acc)
else
acc
end
end)
final_transfers = Map.values(transfers)
final_transfers ++ nft_transfers
end
def aggregate_token_burnings(token_transfers) do
{transfers, nft_transfers} =
token_transfers
|> Enum.reduce({%{}, []}, fn token_transfer, acc ->
if token_transfer.to_address_hash == @burn_address_hash do
aggregate_reducer(token_transfer, acc) aggregate_reducer(token_transfer, acc)
else
acc
end
end) end)
final_transfers = Map.values(transfers) final_transfers = Map.values(transfers)
@ -55,7 +103,9 @@ defmodule BlockScoutWeb.TransactionView do
new_entry = %{ new_entry = %{
token: token_transfer.token, token: token_transfer.token,
amount: nil, amount: nil,
token_id: token_transfer.token_id token_id: token_transfer.token_id,
to_address_hash: token_transfer.to_address_hash,
from_address_hash: token_transfer.from_address_hash
} }
{acc1, [new_entry | acc2]} {acc1, [new_entry | acc2]}
@ -65,7 +115,9 @@ defmodule BlockScoutWeb.TransactionView do
new_entry = %{ new_entry = %{
token: token_transfer.token, token: token_transfer.token,
amount: token_transfer.amount, amount: token_transfer.amount,
token_id: token_transfer.token_id token_id: token_transfer.token_id,
to_address_hash: token_transfer.to_address_hash,
from_address_hash: token_transfer.from_address_hash
} }
existing_entry = Map.get(acc1, token_transfer.token_contract_address, %{new_entry | amount: Decimal.new(0)}) existing_entry = Map.get(acc1, token_transfer.token_contract_address, %{new_entry | amount: Decimal.new(0)})
@ -257,10 +309,23 @@ defmodule BlockScoutWeb.TransactionView do
def transaction_display_type(%Transaction{} = transaction) do def transaction_display_type(%Transaction{} = transaction) do
cond do cond do
involves_token_transfers?(transaction) -> gettext("Token Transfer") involves_token_transfers?(transaction) ->
contract_creation?(transaction) -> gettext("Contract Creation") token_transfer_type = get_token_transfer_type(transaction.token_transfers)
involves_contract?(transaction) -> gettext("Contract Call")
true -> gettext("Transaction") case token_transfer_type do
@token_minting_type -> gettext(@token_minting_title)
@token_burning_type -> gettext(@token_burning_title)
@token_transfer_type -> gettext(@token_transfer_title)
end
contract_creation?(transaction) ->
gettext("Contract Creation")
involves_contract?(transaction) ->
gettext("Contract Call")
true ->
gettext("Transaction")
end end
end end
@ -315,4 +380,36 @@ defmodule BlockScoutWeb.TransactionView do
defp tab_name(["internal_transactions"]), do: gettext("Internal Transactions") defp tab_name(["internal_transactions"]), do: gettext("Internal Transactions")
defp tab_name(["logs"]), do: gettext("Logs") defp tab_name(["logs"]), do: gettext("Logs")
defp tab_name(["raw_trace"]), do: gettext("Raw Trace") defp tab_name(["raw_trace"]), do: gettext("Raw Trace")
defp get_token_transfer_type(token_transfers) do
token_transfers
|> Enum.reduce("", fn token_transfer, type ->
cond do
token_transfer.to_address_hash == @burn_address_hash ->
update_transfer_type_if_burning(type)
token_transfer.from_address_hash == @burn_address_hash ->
update_transfer_type_if_minting(type)
true ->
@token_transfer_type
end
end)
end
defp update_transfer_type_if_minting(type) do
case type do
"" -> @token_minting_type
@token_burning_type -> @token_transfer_type
_ -> type
end
end
defp update_transfer_type_if_burning(type) do
case type do
"" -> @token_burning_type
@token_minting_type -> @token_transfer_type
_ -> type
end
end
end end

@ -13,7 +13,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:194 #: lib/block_scout_web/templates/transaction/overview.html.eex:196
msgid " Token Transfer" msgid " Token Transfer"
msgstr "" msgstr ""
@ -59,7 +59,7 @@ msgid "%{subnetwork} Explorer - BlockScout"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:184 #: lib/block_scout_web/views/transaction_view.ex:236
msgid "(Awaiting internal transactions for status)" msgid "(Awaiting internal transactions for status)"
msgstr "" msgstr ""
@ -183,7 +183,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/block/_link.html.eex:2 #: lib/block_scout_web/templates/block/_link.html.eex:2
#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:28 #: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:28
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:48 #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:57
msgid "Block #%{number}" msgid "Block #%{number}"
msgstr "" msgstr ""
@ -218,7 +218,7 @@ msgid "Block Number"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:21 #: lib/block_scout_web/views/transaction_view.ex:32
msgid "Block Pending" msgid "Block Pending"
msgstr "" msgstr ""
@ -355,12 +355,12 @@ msgid "Contract Byte Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:262 #: lib/block_scout_web/views/transaction_view.ex:325
msgid "Contract Call" msgid "Contract Call"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:261 #: lib/block_scout_web/views/transaction_view.ex:322
msgid "Contract Creation" msgid "Contract Creation"
msgstr "" msgstr ""
@ -558,12 +558,12 @@ msgid "During times when the network is busy (i.e during ICOs) it can take a whi
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:84 #: lib/block_scout_web/views/transaction_view.ex:136
msgid "ERC-20 " msgid "ERC-20 "
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:85 #: lib/block_scout_web/views/transaction_view.ex:137
msgid "ERC-721 " msgid "ERC-721 "
msgstr "" msgstr ""
@ -621,12 +621,12 @@ msgid "Error trying to fetch balances."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:188 #: lib/block_scout_web/views/transaction_view.ex:240
msgid "Error: %{reason}" msgid "Error: %{reason}"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:186 #: lib/block_scout_web/views/transaction_view.ex:238
msgid "Error: (Awaiting internal transactions for reason)" msgid "Error: (Awaiting internal transactions for reason)"
msgstr "" msgstr ""
@ -647,7 +647,7 @@ msgstr ""
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20 #: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
#: lib/block_scout_web/templates/transaction/_tile.html.eex:29 #: lib/block_scout_web/templates/transaction/_tile.html.eex:29
#: lib/block_scout_web/templates/transaction/overview.html.eex:181 #: lib/block_scout_web/templates/transaction/overview.html.eex:181
#: lib/block_scout_web/templates/transaction/overview.html.eex:216 #: lib/block_scout_web/templates/transaction/overview.html.eex:255
#: lib/block_scout_web/views/wei_helpers.ex:78 #: lib/block_scout_web/views/wei_helpers.ex:78
msgid "Ether" msgid "Ether"
msgstr "" msgstr ""
@ -776,7 +776,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: 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:185 #: lib/block_scout_web/views/transaction_view.ex:237
msgid "Success" msgid "Success"
msgstr "" msgstr ""
@ -889,9 +889,9 @@ msgid "Token ID"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:12
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:10
#: lib/block_scout_web/views/transaction_view.ex:260 #: lib/block_scout_web/views/transaction_view.ex:318
msgid "Token Transfer" msgid "Token Transfer"
msgstr "" msgstr ""
@ -906,7 +906,7 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:314 #: lib/block_scout_web/views/address_view.ex:314
#: lib/block_scout_web/views/tokens/instance/overview_view.ex:90 #: lib/block_scout_web/views/tokens/instance/overview_view.ex:90
#: lib/block_scout_web/views/tokens/overview_view.ex:35 #: lib/block_scout_web/views/tokens/overview_view.ex:35
#: lib/block_scout_web/views/transaction_view.ex:314 #: lib/block_scout_web/views/transaction_view.ex:379
msgid "Token Transfers" msgid "Token Transfers"
msgstr "" msgstr ""
@ -922,7 +922,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 #: lib/block_scout_web/templates/address_logs/_logs.html.eex:18
#: lib/block_scout_web/views/transaction_view.ex:263 #: lib/block_scout_web/views/transaction_view.ex:328
msgid "Transaction" msgid "Transaction"
msgstr "" msgstr ""
@ -1005,7 +1005,7 @@ msgid "License ID"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:244 #: lib/block_scout_web/templates/transaction/overview.html.eex:283
msgid "Limit" msgid "Limit"
msgstr "" msgstr ""
@ -1047,8 +1047,8 @@ msgid "Market Cap"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:169 #: lib/block_scout_web/views/transaction_view.ex:221
#: lib/block_scout_web/views/transaction_view.ex:169 #: lib/block_scout_web/views/transaction_view.ex:221
msgid "Max of" msgid "Max of"
msgstr "" msgstr ""
@ -1160,8 +1160,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/layout/_topnav.html.eex:59 #: lib/block_scout_web/templates/layout/_topnav.html.eex:59
#: lib/block_scout_web/views/transaction_view.ex:183 #: lib/block_scout_web/views/transaction_view.ex:235
#: lib/block_scout_web/views/transaction_view.ex:217 #: lib/block_scout_web/views/transaction_view.ex:269
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
@ -1209,7 +1209,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: 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:317 #: lib/block_scout_web/views/transaction_view.ex:382
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
@ -1545,7 +1545,7 @@ msgid "Use the search box to find a hosted network, or select from the list of a
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:238 #: lib/block_scout_web/templates/transaction/overview.html.eex:277
msgid "Used" msgid "Used"
msgstr "" msgstr ""
@ -1576,7 +1576,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:181 #: lib/block_scout_web/templates/transaction/overview.html.eex:181
#: lib/block_scout_web/templates/transaction/overview.html.eex:216 #: lib/block_scout_web/templates/transaction/overview.html.eex:255
msgid "Value" msgid "Value"
msgstr "" msgstr ""
@ -1678,7 +1678,7 @@ msgid "custom RPC"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:23 #: lib/block_scout_web/views/address_contract_view.ex:24
msgid "false" msgid "false"
msgstr "" msgstr ""
@ -1720,7 +1720,7 @@ msgid "string"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:22 #: lib/block_scout_web/views/address_contract_view.ex:23
msgid "true" msgid "true"
msgstr "" msgstr ""
@ -1753,7 +1753,7 @@ msgid "Decimals"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:234 #: lib/block_scout_web/templates/transaction/overview.html.eex:273
msgid "Gas" msgid "Gas"
msgstr "" msgstr ""
@ -1839,7 +1839,7 @@ msgstr ""
#: 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:313 #: lib/block_scout_web/views/address_view.ex:313
#: lib/block_scout_web/views/transaction_view.ex:315 #: lib/block_scout_web/views/transaction_view.ex:380
msgid "Internal Transactions" msgid "Internal Transactions"
msgstr "" msgstr ""
@ -1849,7 +1849,7 @@ msgstr ""
#: 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:320 #: lib/block_scout_web/views/address_view.ex:320
#: lib/block_scout_web/views/transaction_view.ex:316 #: lib/block_scout_web/views/transaction_view.ex:381
msgid "Logs" msgid "Logs"
msgstr "" msgstr ""
@ -1880,3 +1880,27 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:312 #: lib/block_scout_web/views/address_view.ex:312
msgid "Transactions" msgid "Transactions"
msgstr "" msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:232
msgid " Token Burning"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:8
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:6
#: lib/block_scout_web/views/transaction_view.ex:317
msgid "Token Burning"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:214
msgid " Token Minting"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:10
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:316
msgid "Token Minting"
msgstr ""

@ -13,7 +13,7 @@ msgstr[0] ""
msgstr[1] "" msgstr[1] ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:194 #: lib/block_scout_web/templates/transaction/overview.html.eex:196
msgid " Token Transfer" msgid " Token Transfer"
msgstr "" msgstr ""
@ -59,7 +59,7 @@ msgid "%{subnetwork} Explorer - BlockScout"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:184 #: lib/block_scout_web/views/transaction_view.ex:236
msgid "(Awaiting internal transactions for status)" msgid "(Awaiting internal transactions for status)"
msgstr "" msgstr ""
@ -183,7 +183,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/block/_link.html.eex:2 #: lib/block_scout_web/templates/block/_link.html.eex:2
#: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:28 #: lib/block_scout_web/templates/internal_transaction/_tile.html.eex:28
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:48 #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:57
msgid "Block #%{number}" msgid "Block #%{number}"
msgstr "" msgstr ""
@ -218,7 +218,7 @@ msgid "Block Number"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:21 #: lib/block_scout_web/views/transaction_view.ex:32
msgid "Block Pending" msgid "Block Pending"
msgstr "" msgstr ""
@ -355,12 +355,12 @@ msgid "Contract Byte Code"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:262 #: lib/block_scout_web/views/transaction_view.ex:325
msgid "Contract Call" msgid "Contract Call"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:261 #: lib/block_scout_web/views/transaction_view.ex:322
msgid "Contract Creation" msgid "Contract Creation"
msgstr "" msgstr ""
@ -558,12 +558,12 @@ msgid "During times when the network is busy (i.e during ICOs) it can take a whi
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:84 #: lib/block_scout_web/views/transaction_view.ex:136
msgid "ERC-20 " msgid "ERC-20 "
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:85 #: lib/block_scout_web/views/transaction_view.ex:137
msgid "ERC-721 " msgid "ERC-721 "
msgstr "" msgstr ""
@ -621,12 +621,12 @@ msgid "Error trying to fetch balances."
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:188 #: lib/block_scout_web/views/transaction_view.ex:240
msgid "Error: %{reason}" msgid "Error: %{reason}"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:186 #: lib/block_scout_web/views/transaction_view.ex:238
msgid "Error: (Awaiting internal transactions for reason)" msgid "Error: (Awaiting internal transactions for reason)"
msgstr "" msgstr ""
@ -647,7 +647,7 @@ msgstr ""
#: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20 #: lib/block_scout_web/templates/transaction/_pending_tile.html.eex:20
#: lib/block_scout_web/templates/transaction/_tile.html.eex:29 #: lib/block_scout_web/templates/transaction/_tile.html.eex:29
#: lib/block_scout_web/templates/transaction/overview.html.eex:181 #: lib/block_scout_web/templates/transaction/overview.html.eex:181
#: lib/block_scout_web/templates/transaction/overview.html.eex:216 #: lib/block_scout_web/templates/transaction/overview.html.eex:255
#: lib/block_scout_web/views/wei_helpers.ex:78 #: lib/block_scout_web/views/wei_helpers.ex:78
msgid "Ether" msgid "Ether"
msgstr "" msgstr ""
@ -776,7 +776,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: 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:185 #: lib/block_scout_web/views/transaction_view.ex:237
msgid "Success" msgid "Success"
msgstr "" msgstr ""
@ -889,9 +889,9 @@ msgid "Token ID"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:5 #: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:12
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:4 #: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:10
#: lib/block_scout_web/views/transaction_view.ex:260 #: lib/block_scout_web/views/transaction_view.ex:318
msgid "Token Transfer" msgid "Token Transfer"
msgstr "" msgstr ""
@ -906,7 +906,7 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:314 #: lib/block_scout_web/views/address_view.ex:314
#: lib/block_scout_web/views/tokens/instance/overview_view.ex:90 #: lib/block_scout_web/views/tokens/instance/overview_view.ex:90
#: lib/block_scout_web/views/tokens/overview_view.ex:35 #: lib/block_scout_web/views/tokens/overview_view.ex:35
#: lib/block_scout_web/views/transaction_view.ex:314 #: lib/block_scout_web/views/transaction_view.ex:379
msgid "Token Transfers" msgid "Token Transfers"
msgstr "" msgstr ""
@ -922,7 +922,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/address_logs/_logs.html.eex:18 #: lib/block_scout_web/templates/address_logs/_logs.html.eex:18
#: lib/block_scout_web/views/transaction_view.ex:263 #: lib/block_scout_web/views/transaction_view.ex:328
msgid "Transaction" msgid "Transaction"
msgstr "" msgstr ""
@ -1005,7 +1005,7 @@ msgid "License ID"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:244 #: lib/block_scout_web/templates/transaction/overview.html.eex:283
msgid "Limit" msgid "Limit"
msgstr "" msgstr ""
@ -1047,8 +1047,8 @@ msgid "Market Cap"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/transaction_view.ex:169 #: lib/block_scout_web/views/transaction_view.ex:221
#: lib/block_scout_web/views/transaction_view.ex:169 #: lib/block_scout_web/views/transaction_view.ex:221
msgid "Max of" msgid "Max of"
msgstr "" msgstr ""
@ -1160,8 +1160,8 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/layout/_topnav.html.eex:59 #: lib/block_scout_web/templates/layout/_topnav.html.eex:59
#: lib/block_scout_web/views/transaction_view.ex:183 #: lib/block_scout_web/views/transaction_view.ex:235
#: lib/block_scout_web/views/transaction_view.ex:217 #: lib/block_scout_web/views/transaction_view.ex:269
msgid "Pending" msgid "Pending"
msgstr "" msgstr ""
@ -1209,7 +1209,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: 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:317 #: lib/block_scout_web/views/transaction_view.ex:382
msgid "Raw Trace" msgid "Raw Trace"
msgstr "" msgstr ""
@ -1545,7 +1545,7 @@ msgid "Use the search box to find a hosted network, or select from the list of a
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:238 #: lib/block_scout_web/templates/transaction/overview.html.eex:277
msgid "Used" msgid "Used"
msgstr "" msgstr ""
@ -1576,7 +1576,7 @@ msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:181 #: lib/block_scout_web/templates/transaction/overview.html.eex:181
#: lib/block_scout_web/templates/transaction/overview.html.eex:216 #: lib/block_scout_web/templates/transaction/overview.html.eex:255
msgid "Value" msgid "Value"
msgstr "" msgstr ""
@ -1678,7 +1678,7 @@ msgid "custom RPC"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:23 #: lib/block_scout_web/views/address_contract_view.ex:24
msgid "false" msgid "false"
msgstr "" msgstr ""
@ -1720,7 +1720,7 @@ msgid "string"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/views/address_contract_view.ex:22 #: lib/block_scout_web/views/address_contract_view.ex:23
msgid "true" msgid "true"
msgstr "" msgstr ""
@ -1753,7 +1753,7 @@ msgid "Decimals"
msgstr "" msgstr ""
#, elixir-format #, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:234 #: lib/block_scout_web/templates/transaction/overview.html.eex:273
msgid "Gas" msgid "Gas"
msgstr "" msgstr ""
@ -1839,7 +1839,7 @@ msgstr ""
#: 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:313 #: lib/block_scout_web/views/address_view.ex:313
#: lib/block_scout_web/views/transaction_view.ex:315 #: lib/block_scout_web/views/transaction_view.ex:380
msgid "Internal Transactions" msgid "Internal Transactions"
msgstr "" msgstr ""
@ -1849,7 +1849,7 @@ msgstr ""
#: 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:320 #: lib/block_scout_web/views/address_view.ex:320
#: lib/block_scout_web/views/transaction_view.ex:316 #: lib/block_scout_web/views/transaction_view.ex:381
msgid "Logs" msgid "Logs"
msgstr "" msgstr ""
@ -1880,3 +1880,27 @@ msgstr ""
#: lib/block_scout_web/views/address_view.ex:312 #: lib/block_scout_web/views/address_view.ex:312
msgid "Transactions" msgid "Transactions"
msgstr "" msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:232
msgid " Token Burning"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:8
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:6
#: lib/block_scout_web/views/transaction_view.ex:317
msgid "Token Burning"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/transaction/overview.html.eex:214
msgid " Token Minting"
msgstr ""
#, elixir-format
#: lib/block_scout_web/templates/tokens/transfer/_token_transfer.html.eex:10
#: lib/block_scout_web/templates/transaction_token_transfer/_token_transfer.html.eex:8
#: lib/block_scout_web/views/transaction_view.ex:316
msgid "Token Minting"
msgstr ""

Loading…
Cancel
Save