diff --git a/lib/archethic/mining/pending_transaction_validation.ex b/lib/archethic/mining/pending_transaction_validation.ex index 9bd2de28e..6ac6ef14a 100644 --- a/lib/archethic/mining/pending_transaction_validation.ex +++ b/lib/archethic/mining/pending_transaction_validation.ex @@ -69,6 +69,19 @@ defmodule Archethic.Mining.PendingTransactionValidation do @tx_max_size Application.compile_env!(:archethic, :transaction_data_content_max_size) + @prod? Mix.env() == :prod + + @doc """ + Ensure transaction version is allowed + Used to differentiate mainnet / testnet network + """ + @spec(validate_transaction_version(transaction :: Transaction.t()) :: :ok, {:error, String.t()}) + def validate_transaction_version(%Transaction{version: version}) do + if @prod? and System.get_env("ARCHETHIC_NETWORK_TYPE") != "testnet" and version >= 4, + do: {:error, "Transaction V4 are not yet supported on mainnet"}, + else: :ok + end + @doc """ Ensure transaction size does not exceed the limit size """ diff --git a/lib/archethic/mining/validation_context.ex b/lib/archethic/mining/validation_context.ex index 8b1a127dd..49b8d66de 100644 --- a/lib/archethic/mining/validation_context.ex +++ b/lib/archethic/mining/validation_context.ex @@ -301,7 +301,8 @@ defmodule Archethic.Mining.ValidationContext do ) do start = System.monotonic_time() - with :ok <- PendingTransactionValidation.validate_previous_public_key(tx), + with :ok <- PendingTransactionValidation.validate_transaction_version(tx), + :ok <- PendingTransactionValidation.validate_previous_public_key(tx), :ok <- PendingTransactionValidation.validate_previous_signature(tx), :ok <- PendingTransactionValidation.validate_size(tx), :ok <- PendingTransactionValidation.validate_contract(tx),