From 8eb7ae74fcfaa1d1f68561041f3bdfce001cf247 Mon Sep 17 00:00:00 2001 From: Santiago Pittella <87827390+SantiagoPittella@users.noreply.github.com> Date: Fri, 15 Sep 2023 15:21:32 -0300 Subject: [PATCH] rollback to events extracted from rpc (#160) * rollback to events extracted from rpc * fix warning --- lib/starknet_explorer/data.ex | 28 ++- .../live/pages/block_detail.ex | 235 +++++++++++++++--- 2 files changed, 219 insertions(+), 44 deletions(-) diff --git a/lib/starknet_explorer/data.ex b/lib/starknet_explorer/data.ex index f10b8fc5..8d7d2561 100644 --- a/lib/starknet_explorer/data.ex +++ b/lib/starknet_explorer/data.ex @@ -1,5 +1,5 @@ defmodule StarknetExplorer.Data do - alias StarknetExplorer.{Rpc, Transaction, Block, TransactionReceipt, Calldata, Events} + alias StarknetExplorer.{Rpc, Transaction, Block, TransactionReceipt, Calldata} alias StarknetExplorer.{Rpc, Transaction, Block, TransactionReceipt} alias StarknetExplorerWeb.Utils @@ -163,6 +163,22 @@ defmodule StarknetExplorer.Data do {:ok, tx} end + # This behavior is modified for testing porpouses. + # def get_block_events_paginated(block, pagination, network) do + # # If the entries are empty, means that the events was not fetch yet. + # with %Scrivener.Page{entries: []} <- Events.paginate_events(pagination, block.number, network) do + # :ok = Events.store_events_from_rpc(block, network) + # get_block_events_paginated(block, pagination, network) + # else + # page -> page + # end + # end + def get_block_events_paginated(block_hash, pagination, network) do + {:ok, events} = Rpc.get_block_events_paginated(block_hash, pagination, network) + + events + end + def full_transaction(tx_hash, network) do tx = case Transaction.get_by_hash_with_receipt(tx_hash) do @@ -280,16 +296,6 @@ defmodule StarknetExplorer.Data do ) end - def get_block_events_paginated(block, pagination, network) do - # If the entries are empty, means that the events was not fetch yet. - with %Scrivener.Page{entries: []} <- Events.paginate_events(pagination, block.number, network) do - :ok = Events.store_events_from_rpc(block, network) - get_block_events_paginated(block, pagination, network) - else - page -> page - end - end - def get_class_at(block_number, contract_address, network) do {:ok, class_hash} = Rpc.get_class_at(%{"block_number" => block_number}, contract_address, network) diff --git a/lib/starknet_explorer_web/live/pages/block_detail.ex b/lib/starknet_explorer_web/live/pages/block_detail.ex index f91492d7..e42627af 100644 --- a/lib/starknet_explorer_web/live/pages/block_detail.ex +++ b/lib/starknet_explorer_web/live/pages/block_detail.ex @@ -178,34 +178,107 @@ defmodule StarknetExplorerWeb.BlockDetailLive do {:noreply, socket} end - def handle_event("inc_events", _page, socket) do - page = + # This behavior was changed temporary for testing. + # def handle_event("inc_events", _page, socket) do + # page = + # Data.get_block_events_paginated( + # socket.assigns.block, + # %{page: socket.assigns.page.page_number + 1}, + # socket.assigns.network + # ) + + # assigns = [ + # page: page, + # view: "events" + # ] + + # {:noreply, assign(socket, assigns)} + # end + + # def handle_event("dec_events", _page, socket) do + # page = + # Data.get_block_events_paginated( + # socket.assigns.block, + # # This isn't working + # %{page: socket.assigns.page.page_number - 1}, + # socket.assigns.network + # ) + + # assigns = [ + # page: page, + # view: "events" + # ] + + # {:noreply, assign(socket, assigns)} + # end + + # @impl true + # def handle_event( + # "select-view", + # %{"view" => "events"}, + # socket + # ) do + # page = + # Data.get_block_events_paginated( + # socket.assigns.block, + # %{}, + # socket.assigns.network + # ) + + # assigns = [ + # page: page, + # view: "events" + # ] + + # {:noreply, assign(socket, assigns)} + # end + + @chunk_size 30 + defp get_previous_continuation_token(token) when token < @chunk_size, do: 0 + defp get_previous_continuation_token(token), do: token - @chunk_size + + def handle_event("inc_events", _value, socket) do + continuation_token = Map.get(socket.assigns, :idx_first, 0) + @chunk_size + + events = Data.get_block_events_paginated( - socket.assigns.block, - %{page: socket.assigns.page.page_number + 1}, + socket.assigns.block.hash, + %{ + "chunk_size" => @chunk_size, + "continuation_token" => Integer.to_string(continuation_token) + }, socket.assigns.network - ) + )["events"] assigns = [ - page: page, - view: "events" + events: events, + view: "events", + idx_first: continuation_token, + idx_last: length(events) + continuation_token ] {:noreply, assign(socket, assigns)} end - def handle_event("dec_events", _page, socket) do - page = + def handle_event("dec_events", _value, socket) do + continuation_token = + get_previous_continuation_token(Map.get(socket.assigns, :idx_first, @chunk_size)) + + events = Data.get_block_events_paginated( - socket.assigns.block, - # This isn't working - %{page: socket.assigns.page.page_number - 1}, + socket.assigns.block.hash, + %{ + "chunk_size" => @chunk_size, + "continuation_token" => Integer.to_string(continuation_token) + }, socket.assigns.network - ) + )["events"] assigns = [ - page: page, - view: "events" + events: events, + view: "events", + idx_first: continuation_token, + idx_last: length(events) + continuation_token ] {:noreply, assign(socket, assigns)} @@ -217,16 +290,19 @@ defmodule StarknetExplorerWeb.BlockDetailLive do %{"view" => "events"}, socket ) do - page = + events = Data.get_block_events_paginated( - socket.assigns.block, - %{}, + socket.assigns.block.hash, + %{"chunk_size" => @chunk_size}, socket.assigns.network ) assigns = [ - page: page, - view: "events" + events: events["events"], + view: "events", + idx_first: 0, + idx_last: @chunk_size, + chunk_size: @chunk_size ] {:noreply, assign(socket, assigns)} @@ -625,20 +701,22 @@ defmodule StarknetExplorerWeb.BlockDetailLive do
From Address
Age
- <%= for event <- @page.entries do %> + <%= for {idx, event = %{"block_number" => block_number, "from_address" => from_address, "transaction_hash" => tx_hash}} <- Enum.with_index(@events, fn element, index -> {index, element} end) do %>
Identifier
+ <% identifier = + Integer.to_string(block_number) <> "_" <> Integer.to_string(idx + @idx_first) %>
<%= live_redirect( - event.id, - to: ~p"/#{@network}/events/#{event.id}", + identifier, + to: ~p"/#{@network}/events/#{identifier}", class: "text-hover-blue" ) %>
@@ -647,7 +725,7 @@ defmodule StarknetExplorerWeb.BlockDetailLive do Block Number
- <%= live_redirect(to_string(event.block_number), + <%= live_redirect(to_string(block_number), to: ~p"/#{@network}/blocks/#{@block.hash}" ) %> @@ -671,21 +749,21 @@ defmodule StarknetExplorerWeb.BlockDetailLive do
Transaction Hash
- <%= live_redirect(event.transaction_hash |> Utils.shorten_block_hash(), - to: ~p"/#{@network}/transactions/#{event.transaction_hash}" + <%= live_redirect(tx_hash |> Utils.shorten_block_hash(), + to: ~p"/#{@network}/transactions/#{tx_hash}" ) %>
Name
- <%= event.name %> + <%= Data.get_event_name(event, @network) %>
From Address
- <%= live_redirect(event.from_address |> Utils.shorten_block_hash(), - to: ~p"/#{@network}/contracts/#{event.from_address}" + <%= live_redirect(from_address |> Utils.shorten_block_hash(), + to: ~p"/#{@network}/contracts/#{from_address}" ) %>
@@ -695,13 +773,104 @@ defmodule StarknetExplorerWeb.BlockDetailLive do
<% end %>
- <%= if @page.page_number > 1 do %> + <%= if @idx_first != 0 do %> <% end %> - <%= if @page.page_number < @page.total_pages do %> + Showing from <%= @idx_first %> to <%= @idx_last %> + <%= if length(@events) >= @chunk_size do %> <% end %>
""" end + + # def render_info(assigns = %{block: _block, view: "events"}) do + # ~H""" + #
+ #
Identifier
+ #
Block Number
+ #
Transaction Hash
+ #
Name
+ #
From Address
+ #
Age
+ #
+ # <%= for event <- @page.entries do %> + #
+ #
+ #
Identifier
+ #
+ #
+ #
+ # <%= live_redirect( + # event.id, + # to: ~p"/#{@network}/events/#{event.id}", + # class: "text-hover-blue" + # ) %> + #
+ #
+ #
+ # + # + #
+ #
+ #
+ #
+ #
+ #
+ #
Block Number
+ #
+ # + # <%= live_redirect(to_string(event.block_number), + # to: ~p"/#{@network}/blocks/#{@block.hash}" + # ) %> + # + #
+ #
+ #
+ #
Transaction Hash
+ #
+ # <%= live_redirect(event.transaction_hash |> Utils.shorten_block_hash(), + # to: ~p"/#{@network}/transactions/#{event.transaction_hash}" + # ) %> + #
+ #
+ #
+ #
Name
+ #
+ # <%= event.name %> + #
+ #
+ #
From Address
+ #
+ # <%= live_redirect(event.from_address |> Utils.shorten_block_hash(), + # to: ~p"/#{@network}/contracts/#{event.from_address}" + # ) %> + #
+ #
+ #
Age
+ #
<%= @block_age %>
+ #
+ #
+ # <% end %> + #
+ # <%= if @page.page_number > 1 do %> + # + # <% end %> + # <%= if @page.page_number < @page.total_pages do %> + # + # <% end %> + #
+ # """ + # end end