From 12e5da97cd37fa40c9d88ffc0db72a258fdcf27f Mon Sep 17 00:00:00 2001 From: Tim Mecklem Date: Tue, 19 Jun 2018 11:21:14 -0400 Subject: [PATCH] Show correct internal transaction type and contract link --- .../index.html.eex | 13 ++++++++++++- .../index.html.eex | 13 ++++++++++++- .../views/internal_transaction_view.ex | 5 +++++ .../views/internal_transaction_view_test.exs | 19 +++++++++++++++++++ 4 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 apps/explorer_web/test/explorer_web/views/internal_transaction_view_test.exs diff --git a/apps/explorer_web/lib/explorer_web/templates/address_internal_transaction/index.html.eex b/apps/explorer_web/lib/explorer_web/templates/address_internal_transaction/index.html.eex index 602fd4326f..80db35c435 100644 --- a/apps/explorer_web/lib/explorer_web/templates/address_internal_transaction/index.html.eex +++ b/apps/explorer_web/lib/explorer_web/templates/address_internal_transaction/index.html.eex @@ -103,7 +103,18 @@ <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.from_address %> - <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> + <%= if ExplorerWeb.InternalTransactionView.contract?(internal_transaction) do %> + + <%= link( + gettext("Contract Creation"), + class: "transaction__link", + "data-address-hash": internal_transaction.created_contract_address_hash, + to: address_path(ExplorerWeb.Endpoint, :show, @locale, internal_transaction.created_contract_address_hash), + title: internal_transaction.created_contract_address_hash + ) %> + <% else %> + <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> + <% end %> <%= ExplorerWeb.TransactionView.value(internal_transaction, include_label: false) %> diff --git a/apps/explorer_web/lib/explorer_web/templates/transaction_internal_transaction/index.html.eex b/apps/explorer_web/lib/explorer_web/templates/transaction_internal_transaction/index.html.eex index 34c4a9b2ec..c5b44b4d68 100644 --- a/apps/explorer_web/lib/explorer_web/templates/transaction_internal_transaction/index.html.eex +++ b/apps/explorer_web/lib/explorer_web/templates/transaction_internal_transaction/index.html.eex @@ -41,7 +41,18 @@ <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.from_address %> - <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> + <%= if ExplorerWeb.InternalTransactionView.contract?(internal_transaction) do %> + + <%= link( + gettext("Contract Creation"), + class: "transaction__link", + "data-address-hash": internal_transaction.created_contract_address_hash, + to: address_path(ExplorerWeb.Endpoint, :show, @locale, internal_transaction.created_contract_address_hash), + title: internal_transaction.created_contract_address_hash + ) %> + <% else %> + <%= render ExplorerWeb.AddressView, "_link.html", conn: @conn, address: internal_transaction.to_address %> + <% end %> <%= ExplorerWeb.TransactionView.value(internal_transaction, include_label: false) %> <%= ExplorerWeb.TransactionView.gas(internal_transaction) %> diff --git a/apps/explorer_web/lib/explorer_web/views/internal_transaction_view.ex b/apps/explorer_web/lib/explorer_web/views/internal_transaction_view.ex index 5b82153dc0..68084933a4 100644 --- a/apps/explorer_web/lib/explorer_web/views/internal_transaction_view.ex +++ b/apps/explorer_web/lib/explorer_web/views/internal_transaction_view.ex @@ -1,4 +1,9 @@ defmodule ExplorerWeb.InternalTransactionView do use ExplorerWeb, :view @dialyzer :no_match + + alias Explorer.Chain.InternalTransaction + + def contract?(%InternalTransaction{type: :create}), do: true + def contract?(_), do: false end diff --git a/apps/explorer_web/test/explorer_web/views/internal_transaction_view_test.exs b/apps/explorer_web/test/explorer_web/views/internal_transaction_view_test.exs new file mode 100644 index 0000000000..ba118f5bd1 --- /dev/null +++ b/apps/explorer_web/test/explorer_web/views/internal_transaction_view_test.exs @@ -0,0 +1,19 @@ +defmodule ExplorerWeb.InternalTransactionViewTest do + use ExplorerWeb.ConnCase, async: true + + alias ExplorerWeb.InternalTransactionView + + describe "contract?/1" do + test "with internal transaction of type create returns true" do + internal_transaction = build(:internal_transaction_create) + + assert InternalTransactionView.contract?(internal_transaction) + end + + test "with non-create type internal transaction returns false" do + internal_transaction = build(:internal_transaction) + + refute InternalTransactionView.contract?(internal_transaction) + end + end +end