From 31d557de32a2ac7b8b7c578e0576ff7126f9bd64 Mon Sep 17 00:00:00 2001 From: Apoorv-2204 <90304197+apoorv-2204@users.noreply.github.com> Date: Fri, 5 Aug 2022 19:30:01 +0530 Subject: [PATCH] Add max confirmations in the transaction's confirmation notification (#489) --- .../graphql_schema/transaction_attestation.ex | 1 + lib/archethic_web/transaction_subscriber.ex | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/archethic_web/graphql_schema/transaction_attestation.ex b/lib/archethic_web/graphql_schema/transaction_attestation.ex index f652cddb9..58f7b19df 100644 --- a/lib/archethic_web/graphql_schema/transaction_attestation.ex +++ b/lib/archethic_web/graphql_schema/transaction_attestation.ex @@ -10,5 +10,6 @@ defmodule ArchethicWeb.GraphQLSchema.TransactionAttestation do object :transaction_attestation do field(:address, :address) field(:nb_confirmations, :integer) + field(:max_confirmations, :integer) end end diff --git a/lib/archethic_web/transaction_subscriber.ex b/lib/archethic_web/transaction_subscriber.ex index f84e183be..8beadb10e 100644 --- a/lib/archethic_web/transaction_subscriber.ex +++ b/lib/archethic_web/transaction_subscriber.ex @@ -13,6 +13,10 @@ defmodule ArchethicWeb.TransactionSubscriber do require Logger + alias Archethic.P2P + + alias Archethic.Election + def start_link(opts) do GenServer.start_link(__MODULE__, opts, name: __MODULE__) end @@ -63,7 +67,12 @@ defmodule ArchethicWeb.TransactionSubscriber do def handle_cast({:register, tx_address, start_time}, state) do {:noreply, - Map.put(state, tx_address, %{status: :pending, start_time: start_time, nb_confirmations: 0})} + Map.put(state, tx_address, %{ + status: :pending, + start_time: start_time, + nb_confirmations: 0, + max_confirmations: get_max_confirmations(tx_address) + })} end def handle_info( @@ -76,12 +85,18 @@ defmodule ArchethicWeb.TransactionSubscriber do }}, state ) do - %{nb_confirmations: nb_confirmations} = Map.get(state, tx_address, %{nb_confirmations: 0}) + %{nb_confirmations: nb_confirmations, max_confirmations: max_confirmations} = + Map.get(state, tx_address, %{nb_confirmations: 0, max_confirmations: 0}) + total_confirmations = nb_confirmations + length(confirmations) Subscription.publish( Endpoint, - %{address: tx_address, nb_confirmations: total_confirmations}, + %{ + address: tx_address, + nb_confirmations: total_confirmations, + max_confirmations: max_confirmations + }, transaction_confirmed: tx_address ) @@ -130,4 +145,10 @@ defmodule ArchethicWeb.TransactionSubscriber do {:noreply, new_state} end + + def get_max_confirmations(tx_address) do + tx_address + |> Election.chain_storage_nodes(P2P.authorized_nodes()) + |> Enum.count() + end end