Skip to content

Commit

Permalink
Reduce confirmations when creating beacon summary
Browse files Browse the repository at this point in the history
to have all confirmations available
  • Loading branch information
Neylix committed Mar 6, 2023
1 parent 972c95b commit 132ddcc
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 5 deletions.
31 changes: 31 additions & 0 deletions lib/archethic/beacon_chain/replication_attestation.ex
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,37 @@ defmodule Archethic.BeaconChain.ReplicationAttestation do
end
end

@doc """
Take a list of attestations and reduce them to return a list of unique attestation
for a transaction with all the confirmations
"""
@spec reduce_confirmations(Enumerable.t(t())) :: Stream.t(t())
def reduce_confirmations(attestations) do
attestations
|> Stream.transform(
# start function, init acc
fn -> %{} end,
# reducer function, return empty enum, accumulate replication attestation by address in acc
fn attestation = %__MODULE__{
transaction_summary: %TransactionSummary{address: address},
confirmations: confirmations
},
acc ->
# Accumulate distinct confirmations in a replication attestation
acc =
Map.update(acc, address, attestation, fn reduced_attest ->
Map.update!(reduced_attest, :confirmations, &((&1 ++ confirmations) |> Enum.uniq()))
end)

{[], acc}
end,
# last function, return acc in the enumeration
fn acc -> {Map.values(acc), acc} end,
# after function, do nothing
fn _ -> :ok end
)
end

defp check_transaction_summary(nodes, expected_summary, timeout \\ 500)

defp check_transaction_summary([], _, _), do: {:error, :network_issue}
Expand Down
6 changes: 1 addition & 5 deletions lib/archethic/beacon_chain/summary.ex
Original file line number Diff line number Diff line change
Expand Up @@ -205,11 +205,7 @@ defmodule Archethic.BeaconChain.Summary do
transaction_attestations =
slots
|> Stream.flat_map(& &1.transaction_attestations)
|> Stream.uniq_by(fn %ReplicationAttestation{
transaction_summary: %TransactionSummary{address: address}
} ->
address
end)
|> ReplicationAttestation.reduce_confirmations()
|> Enum.sort_by(
fn %ReplicationAttestation{
transaction_summary: %TransactionSummary{timestamp: timestamp}
Expand Down

0 comments on commit 132ddcc

Please sign in to comment.