From 4de36a81cbf57d65d2b9628c267469ecaf38b5d4 Mon Sep 17 00:00:00 2001 From: Neylix Date: Mon, 30 Dec 2024 14:58:17 +0100 Subject: [PATCH] Forbid transaction V4 on mainnet --- .../mining/pending_transaction_validation.ex | 13 +++++++++++++ lib/archethic/mining/validation_context.ex | 3 ++- 2 files changed, 15 insertions(+), 1 deletion(-) 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),