Skip to content

Commit

Permalink
Display MUCO => UCO in explorer
Browse files Browse the repository at this point in the history
  • Loading branch information
Neylix committed Jan 9, 2024
1 parent 17acbd2 commit 3380043
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 77 deletions.
144 changes: 88 additions & 56 deletions lib/archethic_web/explorer/components/amount.ex
Original file line number Diff line number Diff line change
Expand Up @@ -20,28 +20,7 @@ defmodule ArchethicWeb.Explorer.Components.Amount do

def uco(assigns) do
assigns =
assign(
assigns,
%{
amount: from_bigint(assigns.amount),
tooltip:
case Map.get(assigns, :uco_price_at_time) do
nil ->
"now: " <>
format_usd_amount(
assigns.amount,
assigns.uco_price_now[:usd]
)

_ ->
format_full_usd_amount(
assigns.amount,
assigns.uco_price_at_time[:usd],
assigns.uco_price_now[:usd]
)
end
}
)
assign(assigns, %{amount: from_bigint(assigns.amount), tooltip: get_uco_tooltip(assigns)})

~H"""
<span class="mono" data-tooltip={@tooltip}>
Expand All @@ -50,49 +29,62 @@ defmodule ArchethicWeb.Explorer.Components.Amount do
"""
end

def token(assigns) do
decimals =
Map.get(assigns.token_properties, assigns.token_address, %{}) |> Map.get(:decimals, 8)
def token(
assigns = %{
amount: amount,
token_properties: token_properties,
token_address: token_address,
token_id: token_id
}
) do
token_properties = Map.get(token_properties, token_address, %{})
decimals = Map.get(token_properties, :decimals, 8)

assigns =
assign(assigns, %{
amount: from_bigint(amount, decimals),
token_name: get_token_name(token_properties, token_address, token_id)
})

~H"""
<span class="mono">
<%= @amount %>
<%= link(to:
Routes.live_path(
@socket,
ArchethicWeb.Explorer.TransactionDetailsLive,
Base.encode16(@token_address)
)
) do %>
<span class="tag is-gradient mono"><%= @token_name %></span>
<% end %>
</span>
"""
end

def reward(
assigns = %{
amount: amount,
token_properties: token_properties,
token_address: token_address
}
) do
token_properties = Map.get(token_properties, token_address, %{})
decimals = Map.get(token_properties, :decimals, 8)

assigns =
assign(assigns, %{
amount: from_bigint(assigns.amount, decimals),
token_name:
if assigns.token_id > 0 do
"NFT ##{assigns.token_id}"
else
case Map.get(assigns.token_properties, assigns.token_address, %{})
|> Map.get(:symbol) do
nil ->
short_address(assigns.token_address)

symbol ->
if String.length(symbol) > @max_symbol_len do
content_tag(
"span",
String.slice(symbol, 0..(@max_symbol_len - 1)) <> "...",
"data-tooltip":
symbol <> " minted at " <> Base.encode16(assigns.token_address),
class: "mono"
)
else
content_tag(
"span",
symbol,
"data-tooltip":
symbol <> " minted at " <> Base.encode16(assigns.token_address),
class: "mono"
)
end
end
end
amount: from_bigint(amount, decimals),
token_name: get_token_name(token_properties, token_address, 0),
tooltip: get_uco_tooltip(assigns)
})

~H"""
<span class="mono">
<%= @amount %>
<%= link( to:
<%= link(to:
Routes.live_path(
@socket,
ArchethicWeb.Explorer.TransactionDetailsLive,
Expand All @@ -102,6 +94,46 @@ defmodule ArchethicWeb.Explorer.Components.Amount do
<span class="tag is-gradient mono"><%= @token_name %></span>
<% end %>
</span>
<span class="tag is-gradient mono" data-tooltip={@tooltip}> UCO </span>
"""
end

defp get_token_name(_, _, token_id) when token_id > 0, do: "NFT ##{token_id}"

defp get_token_name(token_properties, token_address, _token_id) do
case Map.get(token_properties, :symbol) do
nil ->
short_address(token_address)

symbol ->
if String.length(symbol) > @max_symbol_len do
content_tag(
"span",
String.slice(symbol, 0..(@max_symbol_len - 1)) <> "...",
"data-tooltip": symbol <> " minted at " <> Base.encode16(token_address),
class: "mono"
)
else
content_tag(
"span",
symbol,
"data-tooltip": symbol <> " minted at " <> Base.encode16(token_address),
class: "mono"
)
end
end
end

defp get_uco_tooltip(%{
uco_price_at_time: uco_price_at_time,
uco_price_now: uco_price_now,
amount: amount
})
when uco_price_at_time != nil do
format_full_usd_amount(amount, uco_price_at_time[:usd], uco_price_now[:usd])
end

defp get_uco_tooltip(%{uco_price_now: uco_price_now, amount: amount}) do
"now: " <> format_usd_amount(amount, uco_price_now[:usd])
end
end
36 changes: 24 additions & 12 deletions lib/archethic_web/explorer/live/transaction_details_live.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ defmodule ArchethicWeb.Explorer.TransactionDetailsLive do
alias Archethic.Crypto
alias Archethic.OracleChain
alias Archethic.PubSub
alias Archethic.Reward
alias Archethic.TaskSupervisor
alias Archethic.TransactionChain.Transaction
alias Archethic.TransactionChain.Transaction.ValidationStamp
Expand Down Expand Up @@ -305,18 +306,29 @@ defmodule ArchethicWeb.Explorer.TransactionDetailsLive do
{uco_movements, rest} = Enum.split(movements, uco_transfers_count)
{token_movements, mint_movements} = Enum.split(rest, token_transfers_count)

List.flatten([
uco_movements
|> Enum.zip_with(uco_transfers, fn movement, %UCOTransfer{to: address} ->
{movement, address}
end),
token_movements
|> Enum.zip_with(token_transfers, fn movement, %TokenTransfer{to: address} ->
{movement, address}
end),
mint_movements
|> Enum.map(&{&1, nil})
])
zipped_uco_movements =
Enum.zip_with(uco_movements, uco_transfers, fn movement, %UCOTransfer{to: address} ->
{movement, address, false}
end)

zipped_token_movements =
Enum.zip_with(
token_movements,
token_transfers,
fn movement, %TokenTransfer{to: address, token_address: token_address} ->
reward_token_address =
if Reward.is_reward_token?(token_address), do: token_address, else: nil

{movement, address, reward_token_address}
end
)

[
zipped_uco_movements,
zipped_token_movements,
Enum.map(mint_movements, &{&1, nil})
]
|> List.flatten()
end

defp filter_inputs(
Expand Down
32 changes: 23 additions & 9 deletions lib/archethic_web/explorer/live/transaction_details_live.html.heex
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@
Movements (<%= movements_count %>)
</div>
<ul class="column">
<%= for {movement, transfer_address} <- @movements_zipped do %>
<%= for {movement, transfer_address, reward_token_address} <- @movements_zipped do %>
<%= case movement.type do %>
<% :UCO -> %>
<li class="columns">
Expand Down Expand Up @@ -216,14 +216,28 @@
) %>
</div>

<div class="column is-narrow">
<span class="ae-label">Amount</span>
<Amount.uco
amount={movement.amount}
uco_price_at_time={@uco_price_at_time}
uco_price_now={@uco_price_now}
/>
</div>
<%= if reward_token_address != nil do %>
<div class="column is-narrow">
<span class="ae-label">Amount</span>
<Amount.reward
amount={movement.amount}
token_address={reward_token_address}
token_properties={@token_properties}
socket={@socket}
uco_price_at_time={@uco_price_at_time}
uco_price_now={@uco_price_now}
/>
</div>
<% else %>
<div class="column is-narrow">
<span class="ae-label">Amount</span>
<Amount.uco
amount={movement.amount}
uco_price_at_time={@uco_price_at_time}
uco_price_now={@uco_price_now}
/>
</div>
<% end %>
</li>
<% {:token, token_address, token_id} -> %>
<li class="columns">
Expand Down

0 comments on commit 3380043

Please sign in to comment.