From 57132b7fea5709985ec5862edbf08f63b664b2c6 Mon Sep 17 00:00:00 2001 From: Yan Guiborat Date: Thu, 22 Dec 2022 13:07:25 +0100 Subject: [PATCH] Add burning address to I/O storage nodes only if it's intentional (#749) * Removing unneeded potential addition of burning address * Remove fetching the last address of burning addresses * Add burning address only if part of recipients originally --- lib/archethic/account/mem_tables_loader.ex | 28 ------------------- lib/archethic/mining/distributed_workflow.ex | 2 -- lib/archethic/mining/standalone_workflow.ex | 2 -- lib/archethic/transaction_chain.ex | 10 +++++++ .../account/mem_tables_loader_test.exs | 9 +++++- 5 files changed, 18 insertions(+), 33 deletions(-) diff --git a/lib/archethic/account/mem_tables_loader.ex b/lib/archethic/account/mem_tables_loader.ex index a13074d36..5086f734a 100644 --- a/lib/archethic/account/mem_tables_loader.ex +++ b/lib/archethic/account/mem_tables_loader.ex @@ -9,10 +9,6 @@ defmodule Archethic.Account.MemTablesLoader do alias Archethic.Crypto - alias Archethic.Election - - alias Archethic.P2P - alias Archethic.TransactionChain alias Archethic.TransactionChain.Transaction alias Archethic.TransactionChain.Transaction.ValidationStamp @@ -24,8 +20,6 @@ defmodule Archethic.Account.MemTablesLoader do alias Archethic.TransactionChain.Transaction.ValidationStamp.LedgerOperations.VersionedUnspentOutput - alias Archethic.Utils - require Logger alias Archethic.Reward @@ -81,7 +75,6 @@ defmodule Archethic.Account.MemTablesLoader do timestamp: timestamp, protocol_version: protocol_version, ledger_operations: %LedgerOperations{ - fee: fee, unspent_outputs: unspent_outputs, transaction_movements: transaction_movements } @@ -96,27 +89,6 @@ defmodule Archethic.Account.MemTablesLoader do TokenLedger.spend_all_unspent_outputs(previous_address) end - burn_storage_nodes = - Election.storage_nodes( - LedgerOperations.burning_address(), - P2P.authorized_and_available_nodes(timestamp) - ) - - transaction_movements = - if Utils.key_in_node_list?(burn_storage_nodes, Crypto.first_node_public_key()) and - fee > 0 do - [ - %TransactionMovement{ - to: LedgerOperations.burning_address(), - amount: fee, - type: :UCO - } - | transaction_movements - ] - else - transaction_movements - end - :ok = set_transaction_movements( address, diff --git a/lib/archethic/mining/distributed_workflow.ex b/lib/archethic/mining/distributed_workflow.ex index 1e0864b6a..0b3be3874 100644 --- a/lib/archethic/mining/distributed_workflow.ex +++ b/lib/archethic/mining/distributed_workflow.ex @@ -38,7 +38,6 @@ defmodule Archethic.Mining.DistributedWorkflow do alias Archethic.TransactionChain alias Archethic.TransactionChain.Transaction - alias Archethic.TransactionChain.Transaction.ValidationStamp.LedgerOperations alias Archethic.TransactionChain.Transaction.CrossValidationStamp alias Archethic.TransactionChain.Transaction.ValidationStamp alias Archethic.TransactionChain.TransactionSummary @@ -189,7 +188,6 @@ defmodule Archethic.Mining.DistributedWorkflow do else resolved_addresses |> Enum.map(fn {_origin, resolved} -> resolved end) - |> Enum.concat([LedgerOperations.burning_address()]) |> Election.io_storage_nodes(authorized_nodes) end diff --git a/lib/archethic/mining/standalone_workflow.ex b/lib/archethic/mining/standalone_workflow.ex index 5977a15e4..3792c9cee 100644 --- a/lib/archethic/mining/standalone_workflow.ex +++ b/lib/archethic/mining/standalone_workflow.ex @@ -29,7 +29,6 @@ defmodule Archethic.Mining.StandaloneWorkflow do alias Archethic.TransactionChain alias Archethic.TransactionChain.Transaction - alias Archethic.TransactionChain.Transaction.ValidationStamp.LedgerOperations alias Archethic.TransactionChain.TransactionSummary require Logger @@ -83,7 +82,6 @@ defmodule Archethic.Mining.StandaloneWorkflow do else resolved_addresses |> Enum.map(fn {_origin, resolved} -> resolved end) - |> Enum.concat([LedgerOperations.burning_address()]) |> Election.io_storage_nodes(authorized_nodes) end diff --git a/lib/archethic/transaction_chain.ex b/lib/archethic/transaction_chain.ex index 128604c6b..1d9176768 100644 --- a/lib/archethic/transaction_chain.ex +++ b/lib/archethic/transaction_chain.ex @@ -43,6 +43,8 @@ defmodule Archethic.TransactionChain do alias __MODULE__.TransactionData alias __MODULE__.Transaction.ValidationStamp + alias __MODULE__.Transaction.ValidationStamp.LedgerOperations + alias __MODULE__.Transaction.ValidationStamp.LedgerOperations.TransactionMovement.Type, as: TransactionMovementType @@ -539,6 +541,8 @@ defmodule Archethic.TransactionChain do tx = %Transaction{data: %TransactionData{recipients: recipients}}, time = %DateTime{} ) do + burning_address = LedgerOperations.burning_address() + addresses = tx |> Transaction.get_movements() @@ -549,6 +553,9 @@ defmodule Archethic.TransactionChain do TaskSupervisor, addresses, fn + {^burning_address, type} -> + {{burning_address, type}, burning_address} + {to, type} -> case resolve_last_address(to, time) do {:ok, resolved} -> @@ -558,6 +565,9 @@ defmodule Archethic.TransactionChain do {{to, type}, to} end + ^burning_address -> + {burning_address, burning_address} + to -> case resolve_last_address(to, time) do {:ok, resolved} -> diff --git a/test/archethic/account/mem_tables_loader_test.exs b/test/archethic/account/mem_tables_loader_test.exs index 27291f2fb..85207e1dc 100644 --- a/test/archethic/account/mem_tables_loader_test.exs +++ b/test/archethic/account/mem_tables_loader_test.exs @@ -148,7 +148,9 @@ defmodule Archethic.Account.MemTablesLoaderTest do timestamp: ^timestamp } } - ] = UCOLedger.get_unspent_outputs(LedgerOperations.burning_address()) + ] = TokenLedger.get_unspent_outputs(LedgerOperations.burning_address()) + + assert [] = UCOLedger.get_unspent_outputs(LedgerOperations.burning_address()) assert [ %VersionedUnspentOutput{ @@ -255,6 +257,11 @@ defmodule Archethic.Account.MemTablesLoaderTest do to: "@Bob3", amount: 1_000_000_000, type: {:token, "@CharlieToken", 0} + }, + %TransactionMovement{ + to: LedgerOperations.burning_address(), + amount: 100_000_000, + type: {:token, "@Charlie2", 0} } ], unspent_outputs: [