From 596c6a34b747db37e79196d3ea4ff979a151d34f Mon Sep 17 00:00:00 2001 From: neylix Date: Wed, 22 Jun 2022 18:33:22 +0200 Subject: [PATCH] Remove unused Reward function --- .../mining/pending_transaction_validation.ex | 8 +- lib/archethic/replication.ex | 3 - lib/archethic/reward.ex | 82 ++----------------- .../reward/network_pool_scheduler.ex | 48 +++++------ 4 files changed, 33 insertions(+), 108 deletions(-) diff --git a/lib/archethic/mining/pending_transaction_validation.ex b/lib/archethic/mining/pending_transaction_validation.ex index b31bf21ba9..7a2ceb3063 100644 --- a/lib/archethic/mining/pending_transaction_validation.ex +++ b/lib/archethic/mining/pending_transaction_validation.ex @@ -27,7 +27,7 @@ defmodule Archethic.Mining.PendingTransactionValidation do alias Archethic.TransactionChain.TransactionData alias Archethic.TransactionChain.TransactionData.Ledger alias Archethic.TransactionChain.TransactionData.Ownership - alias Archethic.TransactionChain.TransactionData.UCOLedger + alias Archethic.TransactionChain.TransactionData.NFTLedger alias Archethic.Utils @@ -104,12 +104,12 @@ defmodule Archethic.Mining.PendingTransactionValidation do type: :node_rewards, data: %TransactionData{ ledger: %Ledger{ - uco: %UCOLedger{transfers: uco_transfers} + nft: %NFTLedger{transfers: nft_transfers} } } }) do - case Reward.get_transfers_for_in_need_validation_nodes(Reward.last_scheduling_date()) do - ^uco_transfers -> + case Reward.get_transfers(Reward.last_scheduling_date()) do + ^nft_transfers -> :ok _ -> diff --git a/lib/archethic/replication.ex b/lib/archethic/replication.ex index 9b5c2b48dd..e570067047 100644 --- a/lib/archethic/replication.ex +++ b/lib/archethic/replication.ex @@ -28,8 +28,6 @@ defmodule Archethic.Replication do alias Archethic.OracleChain - alias Archethic.Reward - alias Archethic.SharedSecrets alias __MODULE__.TransactionContext @@ -553,7 +551,6 @@ defmodule Archethic.Replication do Contracts.load_transaction(tx) BeaconChain.load_transaction(tx) OracleChain.load_transaction(tx) - Reward.load_transaction(tx) :ok end end diff --git a/lib/archethic/reward.ex b/lib/archethic/reward.ex index d46c8cad6c..8b65d050d9 100644 --- a/lib/archethic/reward.ex +++ b/lib/archethic/reward.ex @@ -3,20 +3,10 @@ defmodule Archethic.Reward do Module which handles the rewards and transfer scheduling """ - alias Archethic.Election - alias Archethic.OracleChain - alias Archethic.P2P - alias Archethic.P2P.Message.GetTransactionChain - alias Archethic.P2P.Message.GetUnspentOutputs - alias Archethic.P2P.Message.TransactionList - alias Archethic.P2P.Message.UnspentOutputList - alias Archethic.P2P.Node - alias __MODULE__.NetworkPoolScheduler - alias Archethic.TransactionChain alias Archethic.TransactionChain.Transaction alias Archethic.TransactionChain.TransactionData alias Archethic.TransactionChain.TransactionData.UCOLedger.Transfer @@ -56,76 +46,14 @@ defmodule Archethic.Reward do end @doc """ - Return the list of transfers to rewards the validation nodes which receive less than the minimum validation node reward - - This will get and check all the unspent outputs after the last reward date and determine which were mining reward - and compare it with the minimum of rewards for a validation node + Return the list of transfers to rewards the validation nodes for a specific date """ - @spec get_transfers_for_in_need_validation_nodes(last_reward_date :: DateTime.t()) :: - reward_transfers :: list(Transfer.t()) - def get_transfers_for_in_need_validation_nodes(last_date = %DateTime{}) do - min_validation_nodes_reward = min_validation_nodes_reward() - - Task.async_stream( - P2P.authorized_and_available_nodes(), - fn node = %Node{reward_address: reward_address} -> - mining_rewards = - reward_address - |> get_transactions_after(last_date) - |> Task.async_stream(&get_reward_unspent_outputs/1, timeout: 500, on_exit: :kill_task) - |> Stream.filter(&match?({:ok, _}, &1)) - |> Enum.flat_map(& &1) - - {node, mining_rewards} - end - ) - |> Enum.filter(fn {_, balance} -> balance < min_validation_nodes_reward end) - |> Enum.map(fn {%Node{reward_address: address}, amount} -> - %Transfer{to: address, amount: min_validation_nodes_reward - amount} - end) - end - - defp get_transactions_after(address, date) do - {:ok, last_address} = TransactionChain.resolve_last_address(address, DateTime.utc_now()) - - last_address - |> Election.chain_storage_nodes(P2P.available_nodes()) - |> P2P.nearest_nodes() - |> get_transaction_chain_after(address, date) - end - - defp get_transaction_chain_after([node | rest], address, date) do - case P2P.send_message(node, %GetTransactionChain{address: address}) do - {:ok, %TransactionList{transactions: transactions, more?: false}} -> - transactions - - {:error, _} -> - get_transaction_chain_after(rest, address, date) - end + @spec get_transfers(last_reward_date :: DateTime.t()) :: reward_transfers :: list(Transfer.t()) + def get_transfers(_last_date = %DateTime{}) do + # TODO + [] end - defp get_reward_unspent_outputs(%Transaction{address: address}) do - address - |> Election.chain_storage_nodes(P2P.available_nodes()) - |> P2P.nearest_nodes() - |> get_unspent_outputs(address) - |> Enum.filter(&(&1.type == :reward)) - end - - defp get_unspent_outputs([node | rest], address) do - case P2P.send_message(node, %GetUnspentOutputs{address: address}) do - {:ok, %UnspentOutputList{unspent_outputs: unspent_outputs}} -> - unspent_outputs - - {:error, _} -> - get_unspent_outputs(rest, address) - end - end - - defp get_unspent_outputs([], _), do: {:error, :network_issue} - - def load_transaction(_), do: :ok - @doc """ Returns the last date of the rewards scheduling from the network pool """ diff --git a/lib/archethic/reward/network_pool_scheduler.ex b/lib/archethic/reward/network_pool_scheduler.ex index bd725c9550..08d2d9e492 100644 --- a/lib/archethic/reward/network_pool_scheduler.ex +++ b/lib/archethic/reward/network_pool_scheduler.ex @@ -15,10 +15,10 @@ defmodule Archethic.Reward.NetworkPoolScheduler do alias Archethic.Reward - alias Archethic.TransactionChain.Transaction - alias Archethic.TransactionChain.TransactionData - alias Archethic.TransactionChain.TransactionData.Ledger - alias Archethic.TransactionChain.TransactionData.UCOLedger + # alias Archethic.TransactionChain.Transaction + # alias Archethic.TransactionChain.TransactionData + # alias Archethic.TransactionChain.TransactionData.Ledger + # alias Archethic.TransactionChain.TransactionData.UCOLedger alias Archethic.Utils @@ -84,7 +84,7 @@ defmodule Archethic.Reward.NetworkPoolScheduler do if sender?() do interval |> get_last_date - |> Reward.get_transfers_for_in_need_validation_nodes() + |> Reward.get_transfers() |> send_rewards() end @@ -140,25 +140,25 @@ defmodule Archethic.Reward.NetworkPoolScheduler do defp send_rewards([]), do: :ok - defp send_rewards(transfers) do - Logger.debug("Sending node reward transaction") - - Transaction.new(:node_rewards, %TransactionData{ - code: """ - condition inherit: [ - # We need to ensure the transaction type keep consistent - # So we can apply specific rules during the transaction verification - type: node_rewards - ] - """, - ledger: %Ledger{ - uco: %UCOLedger{ - transfers: transfers - } - } - }) - |> Archethic.send_new_transaction() - end + # defp send_rewards(transfers) do + # Logger.debug("Sending node reward transaction") + + # Transaction.new(:node_rewards, %TransactionData{ + # code: """ + # condition inherit: [ + # # We need to ensure the transaction type keep consistent + # # So we can apply specific rules during the transaction verification + # type: node_rewards + # ] + # """, + # ledger: %Ledger{ + # uco: %UCOLedger{ + # transfers: transfers + # } + # } + # }) + # |> Archethic.send_new_transaction() + # end defp schedule(interval) do Process.send_after(self(), :send_rewards, Utils.time_offset(interval) * 1000)