From 149ef773c7dff71a682af8918d7a2f4b225d384b Mon Sep 17 00:00:00 2001 From: Federico De Felici Date: Fri, 10 Oct 2025 11:43:22 +0200 Subject: [PATCH] test: aac add insta static reduction for vm_error, #6568 --- stackslib/src/chainstate/stacks/events.rs | 3 ++- stackslib/src/chainstate/tests/consensus.rs | 23 ++++++++++++++++++- ...pend_block_with_contract_call_success.snap | 8 +++++++ ...nsensus__append_stx_transfers_success.snap | 12 ++++++++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/stackslib/src/chainstate/stacks/events.rs b/stackslib/src/chainstate/stacks/events.rs index b9a716abbb9..a1d62930cc8 100644 --- a/stackslib/src/chainstate/stacks/events.rs +++ b/stackslib/src/chainstate/stacks/events.rs @@ -52,7 +52,8 @@ pub struct StacksTransactionReceipt { pub execution_cost: ExecutionCost, pub microblock_header: Option, pub tx_index: u32, - /// This is really a string-formatted CheckError (which can't be clone()'ed) + /// This is really a string-formatted CheckError (which can't be clone()'ed), + /// and is not consensus critical. pub vm_error: Option, } diff --git a/stackslib/src/chainstate/tests/consensus.rs b/stackslib/src/chainstate/tests/consensus.rs index f224f72646b..67b1f488b1d 100644 --- a/stackslib/src/chainstate/tests/consensus.rs +++ b/stackslib/src/chainstate/tests/consensus.rs @@ -31,7 +31,7 @@ use clarity::vm::ast::stack_depth_checker::AST_CALL_STACK_DEPTH_BUFFER; use clarity::vm::costs::ExecutionCost; use clarity::vm::types::PrincipalData; use clarity::vm::{Value as ClarityValue, MAX_CALL_STACK_DEPTH}; -use serde::{Deserialize, Serialize}; +use serde::{Deserialize, Serialize, Serializer}; use stacks_common::bitvec::BitVec; use crate::burnchains::PoxConstants; @@ -154,6 +154,19 @@ fn epoch_3_0_onwards(first_burnchain_height: u64) -> EpochList { ]) } +/// Serialize an optional string field appending a non-consensus breaking info message. +fn serialize_opt_string_ncb( + value: &Option, + serializer: S, +) -> Result +where + S: Serializer, +{ + let original = value.clone().unwrap_or("None".to_string()); + let changed = format!("{original} [NON-CONSENSUS BREAKING]"); + serializer.serialize_str(&changed) +} + /// Represents the expected output of a transaction in a test. #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] pub struct ExpectedTransactionOutput { @@ -161,6 +174,9 @@ pub struct ExpectedTransactionOutput { pub return_type: ClarityValue, /// The expected execution cost of the transaction. pub cost: ExecutionCost, + /// The possible Clarity VM error message associated to the transaction (non-consensus breaking) + #[serde(serialize_with = "serialize_opt_string_ncb")] + pub vm_error: Option, } /// Represents the expected outputs for a block's execution. @@ -198,6 +214,7 @@ impl ExpectedResult { .map(|r| ExpectedTransactionOutput { return_type: r.result.clone(), cost: r.execution_cost.clone(), + vm_error: r.vm_error.clone(), }) .collect(); let total_block_cost = epoch_receipt.anchored_block_cost.clone(); @@ -738,6 +755,7 @@ fn test_append_block_with_contract_upload_success() { read_count: 1, runtime: 8114, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -763,6 +781,7 @@ fn test_append_block_with_contract_upload_success() { read_count: 1, runtime: 8114, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -788,6 +807,7 @@ fn test_append_block_with_contract_upload_success() { read_count: 1, runtime: 8114, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -813,6 +833,7 @@ fn test_append_block_with_contract_upload_success() { read_count: 1, runtime: 8114, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( diff --git a/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_block_with_contract_call_success.snap b/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_block_with_contract_call_success.snap index 8aec4b5474c..f1df5f32db1 100644 --- a/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_block_with_contract_call_success.snap +++ b/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_block_with_contract_call_success.snap @@ -18,6 +18,7 @@ expression: result read_count: 1, runtime: 11968, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -31,6 +32,7 @@ expression: result read_count: 3, runtime: 499, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -56,6 +58,7 @@ expression: result read_count: 1, runtime: 11968, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -69,6 +72,7 @@ expression: result read_count: 3, runtime: 499, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -94,6 +98,7 @@ expression: result read_count: 1, runtime: 11968, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -107,6 +112,7 @@ expression: result read_count: 3, runtime: 499, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -132,6 +138,7 @@ expression: result read_count: 1, runtime: 11968, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -145,6 +152,7 @@ expression: result read_count: 3, runtime: 499, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( diff --git a/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_stx_transfers_success.snap b/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_stx_transfers_success.snap index c4be6d8a746..9e25b0e5e7f 100644 --- a/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_stx_transfers_success.snap +++ b/stackslib/src/chainstate/tests/snapshots/blockstack_lib__chainstate__tests__consensus__append_stx_transfers_success.snap @@ -18,6 +18,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -31,6 +32,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -44,6 +46,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -69,6 +72,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -82,6 +86,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -95,6 +100,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -120,6 +126,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -133,6 +140,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -146,6 +154,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost( @@ -171,6 +180,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -184,6 +194,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ExpectedTransactionOutput( return_type: Response(ResponseData( @@ -197,6 +208,7 @@ expression: result read_count: 0, runtime: 0, ), + vm_error: "None [NON-CONSENSUS BREAKING]", ), ], total_block_cost: ExecutionCost(