diff --git a/lib/archethic/beacon_chain/slot.ex b/lib/archethic/beacon_chain/slot.ex index 8c0646b2a..c05191234 100644 --- a/lib/archethic/beacon_chain/slot.ex +++ b/lib/archethic/beacon_chain/slot.ex @@ -631,36 +631,32 @@ defmodule Archethic.BeaconChain.Slot do def empty?(%__MODULE__{}), do: false - # This function will be used during the summary day of 1.0.8 upgrade. This function can be deleted after the upgrade. - def transform_1_0_8_summaries(slots) when is_list(slots) do - Task.Supervisor.async_stream_nolink( - TaskSupervisor, - slots, - &transform_1_0_8_summaries/1 - ) - |> Stream.filter(&match?({:ok, _}, &1)) - |> Enum.map(fn {:ok, slot} -> slot end) - end - - def transform_1_0_8_summaries(slot = %__MODULE__{transaction_attestations: attestations}) do + @doc """ + Apply a tranformation of a transaction summary based on the blockchain version + """ + @spec transform(binary(), t()) :: t() + def transform( + "1.0.8", + slot = %__MODULE__{transaction_attestations: attestations} + ) do if Enum.any?(attestations, fn %ReplicationAttestation{version: version} -> version == 1 end) do - new_attestations = do_transform(attestations) + new_attestations = + Task.Supervisor.async_stream_nolink( + TaskSupervisor, + attestations, + fn attestation = %ReplicationAttestation{transaction_summary: summary} -> + new_summary = TransactionSummary.transform("1.0.8", summary) + %ReplicationAttestation{attestation | transaction_summary: new_summary} + end + ) + |> Stream.filter(&match?({:ok, _}, &1)) + |> Enum.map(fn {:ok, attestation} -> attestation end) + %__MODULE__{slot | transaction_attestations: new_attestations} else slot end end - defp do_transform(attestations) do - Task.Supervisor.async_stream_nolink( - TaskSupervisor, - attestations, - fn attestation = %ReplicationAttestation{transaction_summary: summary} -> - new_summary = TransactionSummary.transform_1_0_8_summary(summary) - %ReplicationAttestation{attestation | transaction_summary: new_summary} - end - ) - |> Stream.filter(&match?({:ok, _}, &1)) - |> Enum.map(fn {:ok, attestation} -> attestation end) - end + def transform(_, slot), do: slot end diff --git a/lib/archethic/beacon_chain/subset.ex b/lib/archethic/beacon_chain/subset.ex index 3633cf8f3..9a505a478 100644 --- a/lib/archethic/beacon_chain/subset.ex +++ b/lib/archethic/beacon_chain/subset.ex @@ -99,7 +99,7 @@ defmodule Archethic.BeaconChain.Subset do end def handle_call(:get_current_slot, _from, state = %{current_slot: current_slot}) do - current_slot = Slot.transform_1_0_8_summaries(current_slot) + current_slot = Slot.transform("1.0.8", current_slot) {:reply, current_slot, state} end @@ -353,7 +353,7 @@ defmodule Archethic.BeaconChain.Subset do defp broadcast_beacon_slot(subset, next_time, slot) do nodes = P2P.authorized_and_available_nodes(next_time, true) - slot = Slot.transform_1_0_8_summaries(slot) + slot = Slot.transform("1.0.8", slot) subset |> Election.beacon_storage_nodes(next_time, nodes) diff --git a/lib/archethic/beacon_chain/subset/summary_cache.ex b/lib/archethic/beacon_chain/subset/summary_cache.ex index e72574349..798090a2b 100644 --- a/lib/archethic/beacon_chain/subset/summary_cache.ex +++ b/lib/archethic/beacon_chain/subset/summary_cache.ex @@ -61,7 +61,7 @@ defmodule Archethic.BeaconChain.Subset.SummaryCache do Enum.each(BeaconChain.list_subsets(), fn subset -> :ets.take(@table_name, subset) |> Enum.each(fn {subset, slot} -> - slot = Slot.transform_1_0_8_summaries(slot) + slot = Slot.transform("1.0.8", slot) backup_slot(slot, "") :ets.insert(@table_name, {subset, slot}) end) diff --git a/lib/archethic/transaction_chain/transaction_summary.ex b/lib/archethic/transaction_chain/transaction_summary.ex index 8b166a5f6..02c86fee7 100644 --- a/lib/archethic/transaction_chain/transaction_summary.ex +++ b/lib/archethic/transaction_chain/transaction_summary.ex @@ -214,14 +214,12 @@ defmodule Archethic.TransactionChain.TransactionSummary do end @doc """ - This function will be used during the summary day of 1.0.8 upgrade. This function can be deleted after the upgrade. - Migrate this function into files 1.0.8-migrate_old_tx_summaries - Transform a TransactionSummary without version into a TransactionSummary v1 + Apply a tranformation of a transaction summary based on the blockchain version """ - @spec transform_1_0_8_summary(t()) :: t() - def transform_1_0_8_summary(tx_summary = %__MODULE__{version: 1}), do: tx_summary + @spec transform(binary(), t()) :: t() + def transform("1.0.8", tx_summary = %__MODULE__{version: 1}), do: tx_summary - def transform_1_0_8_summary(%__MODULE__{address: address}) do + def transform("1.0.8", %__MODULE__{address: address}) do transaction = case TransactionChain.get_transaction(address) do {:ok, tx} -> @@ -237,6 +235,8 @@ defmodule Archethic.TransactionChain.TransactionSummary do from_transaction(transaction) end + def transform(_, tx_summary), do: tx_summary + @doc """ This function will be used during the summary day of 1.0.8 upgrade. This function can be deleted after the upgrade. Migrate this function into files 1.0.8-migrate_old_tx_summaries diff --git a/priv/migration_tasks/prod/1.0.8-migrate_old_tx_summaries.exs b/priv/migration_tasks/prod/1.0.8-migrate_old_tx_summaries.exs index e6643ad96..f2288ec5a 100644 --- a/priv/migration_tasks/prod/1.0.8-migrate_old_tx_summaries.exs +++ b/priv/migration_tasks/prod/1.0.8-migrate_old_tx_summaries.exs @@ -79,7 +79,7 @@ defmodule Migration_1_0_8 do end defp create_attestation(tx_summary) do - new_tx_summary = TransactionSummary.transform_1_0_8_summary(tx_summary) + new_tx_summary = TransactionSummary.transform("1.0.8", tx_summary) %ReplicationAttestation{version: 1, transaction_summary: new_tx_summary} end