Skip to content

Commit

Permalink
Remove ReplicateTransactionChain message
Browse files Browse the repository at this point in the history
  • Loading branch information
Neylix authored and samuelmanzanera committed Mar 24, 2023
1 parent e974dde commit fac844e
Show file tree
Hide file tree
Showing 8 changed files with 21 additions and 219 deletions.
9 changes: 1 addition & 8 deletions lib/archethic/mining/distributed_workflow.ex
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ defmodule Archethic.Mining.DistributedWorkflow do
alias Archethic.P2P.Message.NotifyPreviousChain
alias Archethic.P2P.Message.NotifyReplicationValidation
alias Archethic.P2P.Message.ReplicationAttestationMessage
alias Archethic.P2P.Message.ReplicateTransactionChain
alias Archethic.P2P.Message.ReplicatePendingTransactionChain
alias Archethic.P2P.Message.ReplicateTransaction
alias Archethic.P2P.Message.ReplicationError
Expand Down Expand Up @@ -779,13 +778,7 @@ defmodule Archethic.Mining.DistributedWorkflow do

context
|> ValidationContext.get_io_replication_nodes()
|> P2P.broadcast_message(
if Transaction.network_type?(validated_tx.type),
do: %ReplicateTransactionChain{
transaction: validated_tx
},
else: %ReplicateTransaction{transaction: validated_tx}
)
|> P2P.broadcast_message(%ReplicateTransaction{transaction: validated_tx})

:keep_state_and_data
end
Expand Down
9 changes: 1 addition & 8 deletions lib/archethic/mining/standalone_workflow.ex
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ defmodule Archethic.Mining.StandaloneWorkflow do
alias Archethic.P2P.Message.NotifyPreviousChain
alias Archethic.P2P.Message.ReplicationAttestationMessage
alias Archethic.P2P.Message.ReplicateTransaction
alias Archethic.P2P.Message.ReplicateTransactionChain
alias Archethic.P2P.Message.ReplicatePendingTransactionChain
alias Archethic.P2P.Message.ReplicationError
alias Archethic.P2P.Message.ValidationError
Expand Down Expand Up @@ -361,13 +360,7 @@ defmodule Archethic.Mining.StandaloneWorkflow do
transaction_type: validated_tx.type
)
end)
|> P2P.broadcast_message(
if Transaction.network_type?(validated_tx.type),
do: %ReplicateTransactionChain{
transaction: validated_tx
},
else: %ReplicateTransaction{transaction: validated_tx}
)
|> P2P.broadcast_message(%ReplicateTransaction{transaction: validated_tx})
end

defp notify_previous_chain(
Expand Down
3 changes: 0 additions & 3 deletions lib/archethic/p2p/message.ex
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ defmodule Archethic.P2P.Message do
Ping,
RegisterBeaconUpdates,
ReplicateTransaction,
ReplicateTransactionChain,
ReplicationError,
ShardRepair,
StartMining,
Expand Down Expand Up @@ -97,7 +96,6 @@ defmodule Archethic.P2P.Message do
| CrossValidate.t()
| CrossValidationDone.t()
| ReplicateTransaction.t()
| ReplicateTransactionChain.t()
| GetLastTransaction.t()
| GetBalance.t()
| GetTransactionInputs.t()
Expand Down Expand Up @@ -177,7 +175,6 @@ defmodule Archethic.P2P.Message do
def get_timeout(%NewTransaction{}), do: get_max_timeout()
def get_timeout(%StartMining{}), do: get_max_timeout()
def get_timeout(%ReplicateTransaction{}), do: get_max_timeout()
def get_timeout(%ReplicateTransactionChain{}), do: get_max_timeout()
def get_timeout(%ValidateTransaction{}), do: get_max_timeout()

def get_timeout(%GetTransactionChain{}) do
Expand Down
3 changes: 1 addition & 2 deletions lib/archethic/p2p/message/message_id.ex
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ defmodule Archethic.P2P.MessageId do
AddMiningContext,
CrossValidate,
CrossValidationDone,
ReplicateTransactionChain,
ReplicateTransaction,
AcknowledgeStorage,
NotifyEndOfNodeSync,
Expand Down Expand Up @@ -91,7 +90,7 @@ defmodule Archethic.P2P.MessageId do
AddMiningContext => 8,
CrossValidate => 9,
CrossValidationDone => 10,
ReplicateTransactionChain => 11,
# Message number 11 is available
ReplicateTransaction => 12,
AcknowledgeStorage => 13,
NotifyEndOfNodeSync => 14,
Expand Down
38 changes: 16 additions & 22 deletions lib/archethic/p2p/message/replicate_transaction.ex
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ defmodule Archethic.P2P.Message.ReplicateTransaction do
alias Archethic.P2P.Message.Ok
alias Archethic.Replication
alias Archethic.Utils
alias Archethic.TaskSupervisor
alias Archethic.TransactionChain
alias Archethic.TransactionChain.Transaction
alias Archethic.TransactionChain.Transaction.ValidationStamp
Expand All @@ -29,33 +30,26 @@ defmodule Archethic.P2P.Message.ReplicateTransaction do
},
_
) do
resolved_addresses = TransactionChain.resolve_transaction_addresses(tx, validation_time)

io_storage_nodes =
Task.Supervisor.start_child(TaskSupervisor, fn ->
if Transaction.network_type?(tx.type) do
P2P.list_nodes()
Replication.validate_and_store_transaction_chain(tx)
else
resolved_addresses
|> Enum.map(fn {_origin, resolved} -> resolved end)
|> Enum.concat([LedgerOperations.burning_address()])
|> Election.io_storage_nodes(P2P.authorized_and_available_nodes(validation_time))
end
resolved_addresses = TransactionChain.resolve_transaction_addresses(tx, validation_time)

# Replicate tx only if the current node is one of the I/O storage nodes
if Utils.key_in_node_list?(io_storage_nodes, Crypto.first_node_public_key()) do
case Replication.validate_and_store_transaction(tx) do
:ok ->
%Ok{}
io_storage_nodes =
resolved_addresses
|> Enum.map(fn {_origin, resolved} -> resolved end)
|> Enum.concat([LedgerOperations.burning_address()])
|> Election.io_storage_nodes(P2P.authorized_and_available_nodes(validation_time))

{:error, :transaction_already_exists} ->
%ReplicationError{address: tx.address, reason: :transaction_already_exists}

{:error, invalid_tx_reason} ->
%ReplicationError{address: tx.address, reason: invalid_tx_reason}
# Replicate tx only if the current node is one of the I/O storage nodes
if Utils.key_in_node_list?(io_storage_nodes, Crypto.first_node_public_key()) do
Replication.validate_and_store_transaction(tx)
end
end
else
%Ok{}
end
end)

%Ok{}
end

@spec serialize(t()) :: bitstring()
Expand Down
104 changes: 0 additions & 104 deletions lib/archethic/p2p/message/replicate_transaction_chain.ex

This file was deleted.

4 changes: 2 additions & 2 deletions test/archethic/mining/distributed_workflow_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ defmodule Archethic.Mining.DistributedWorkflowTest do
alias Archethic.P2P.Message.Ok
alias Archethic.P2P.Message.Ping
alias Archethic.P2P.Message.NotifyReplicationValidation
alias Archethic.P2P.Message.ReplicateTransactionChain
alias Archethic.P2P.Message.ReplicateTransaction
alias Archethic.P2P.Message.ReplicatePendingTransactionChain
alias Archethic.P2P.Message.UnspentOutputList
alias Archethic.P2P.Message.ValidationError
Expand Down Expand Up @@ -874,7 +874,7 @@ defmodule Archethic.Mining.DistributedWorkflowTest do

{:ok, %Ok{}}

_, %ReplicateTransactionChain{}, _ ->
_, %ReplicateTransaction{}, _ ->
{:ok, %Ok{}}

_, %ReplicationAttestationMessage{}, _ ->
Expand Down
70 changes: 0 additions & 70 deletions test/archethic/p2p/messages_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,6 @@ defmodule Archethic.P2P.MessageTest do
Ping,
RegisterBeaconUpdates,
ReplicateTransaction,
ReplicateTransactionChain,
StartMining,
ShardRepair,
TransactionChainLength,
Expand Down Expand Up @@ -320,75 +319,6 @@ defmodule Archethic.P2P.MessageTest do
|> elem(0)
end

test "ReplicateTransactionChain message" do
msg = %ReplicateTransactionChain{
transaction: %Transaction{
address:
<<0, 0, 46, 140, 65, 49, 7, 111, 10, 130, 53, 72, 25, 43, 47, 81, 130, 161, 225, 87,
144, 186, 117, 170, 105, 205, 173, 102, 49, 176, 8, 45, 49, 82>>,
type: :transfer,
data: %TransactionData{},
previous_public_key:
<<0, 0, 221, 122, 240, 119, 132, 26, 237, 200, 88, 209, 23, 240, 176, 190, 89, 67,
120, 61, 106, 117, 10, 14, 12, 177, 171, 237, 66, 113, 45, 18, 195, 249>>,
previous_signature:
<<206, 119, 19, 59, 13, 255, 98, 28, 80, 65, 115, 97, 216, 28, 51, 237, 180, 94, 197,
228, 50, 240, 155, 61, 242, 17, 172, 225, 223, 8, 104, 220, 195, 33, 46, 185, 88,
223, 224, 105, 41, 107, 67, 6, 92, 78, 15, 142, 47, 192, 214, 66, 124, 30, 228, 167,
96, 61, 68, 188, 152, 246, 42, 246>>,
origin_signature:
<<238, 102, 94, 142, 31, 243, 44, 162, 254, 161, 177, 121, 166, 204, 152, 126, 66,
207, 0, 75, 174, 126, 64, 226, 155, 92, 71, 152, 119, 80, 150, 119, 88, 40, 110,
175, 135, 180, 179, 28, 57, 84, 35, 156, 173, 212, 235, 155, 226, 41, 148, 171, 132,
196, 120, 51, 136, 4, 78, 123, 70, 44, 76, 162>>,
validation_stamp: %ValidationStamp{
timestamp: ~U[2020-06-26 06:37:04.000Z],
proof_of_work:
<<0, 0, 206, 159, 122, 114, 106, 65, 116, 18, 224, 214, 2, 26, 213, 36, 82, 175,
176, 180, 191, 255, 46, 113, 134, 227, 253, 189, 81, 16, 97, 33, 114, 85>>,
proof_of_integrity:
<<0, 63, 70, 80, 109, 148, 124, 179, 105, 198, 92, 39, 212, 240, 48, 96, 69, 244,
213, 246, 75, 82, 83, 170, 121, 42, 105, 30, 23, 3, 231, 178, 153>>,
proof_of_election:
<<74, 224, 26, 42, 253, 85, 104, 246, 72, 244, 189, 182, 165, 94, 92, 20, 166, 149,
124, 246, 219, 170, 160, 168, 206, 214, 236, 215, 211, 121, 95, 149, 132, 136,
114, 244, 132, 44, 255, 222, 98, 76, 247, 125, 45, 170, 95, 51, 46, 229, 21, 32,
226, 99, 16, 5, 107, 207, 32, 240, 23, 85, 219, 247>>,
ledger_operations: %LedgerOperations{
fee: 1_000_000,
transaction_movements: [],
unspent_outputs: []
},
signature:
<<231, 4, 252, 234, 6, 126, 91, 87, 41, 70, 76, 220, 116, 238, 128, 189, 94, 124,
207, 90, 32, 143, 239, 153, 101, 148, 189, 125, 25, 235, 20, 207, 168, 10, 86, 59,
14, 249, 104, 144, 141, 151, 232, 149, 24, 189, 225, 56, 65, 208, 220, 202, 169,
166, 36, 248, 98, 108, 241, 114, 47, 102, 176, 212>>,
protocol_version: ArchethicCase.current_protocol_version()
},
cross_validation_stamps: [
%CrossValidationStamp{
node_public_key:
<<0, 0, 161, 146, 84, 231, 250, 25, 216, 247, 158, 26, 32, 219, 6, 128, 253, 127,
119, 121, 206, 58, 142, 140, 194, 61, 235, 224, 193, 56, 82, 253, 19, 131>>,
signature:
<<44, 66, 52, 214, 59, 145, 63, 7, 237, 115, 10, 255, 237, 85, 175, 115, 177, 85,
20, 76, 108, 118, 141, 190, 6, 84, 28, 134, 37, 235, 114, 30, 169, 151, 124,
242, 58, 26, 146, 125, 89, 64, 181, 253, 58, 199, 73, 12, 237, 134, 93, 73, 157,
123, 248, 199, 252, 138, 202, 227, 69, 83, 11, 29>>,
inconsistencies: []
}
]
}
}

assert msg ==
msg
|> Message.encode()
|> Message.decode()
|> elem(0)
end

test "ReplicateTransaction message" do
msg = %ReplicateTransaction{
transaction: %Transaction{
Expand Down

0 comments on commit fac844e

Please sign in to comment.