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 dcd582f0a..79a96cb5c 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 @@ -79,7 +78,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: [