Skip to content

Commit

Permalink
Remove unused Reward function
Browse files Browse the repository at this point in the history
  • Loading branch information
Neylix committed Jun 22, 2022
1 parent c9c195a commit 596c6a3
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 108 deletions.
8 changes: 4 additions & 4 deletions lib/archethic/mining/pending_transaction_validation.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

_ ->
Expand Down
3 changes: 0 additions & 3 deletions lib/archethic/replication.ex
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,6 @@ defmodule Archethic.Replication do

alias Archethic.OracleChain

alias Archethic.Reward

alias Archethic.SharedSecrets

alias __MODULE__.TransactionContext
Expand Down Expand Up @@ -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
82 changes: 5 additions & 77 deletions lib/archethic/reward.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
"""
Expand Down
48 changes: 24 additions & 24 deletions lib/archethic/reward/network_pool_scheduler.ex
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 596c6a3

Please sign in to comment.