48 BB_ASSERT(results.size() >= 2,
"Need at least 2 results to compare");
52 "All results must have public_inputs to compare");
54 for (
size_t i = 1; i < results.size(); ++i) {
55 const auto& prev = results[i - 1];
56 const auto& curr = results[i];
58 std::vector<std::string> mismatches;
61 if (prev.gas_used != curr.gas_used) {
62 mismatches.push_back(
"gas_used");
64 if (prev.revert_code != curr.revert_code) {
65 mismatches.push_back(
"revert_code");
67 if (prev.public_tx_effect != curr.public_tx_effect) {
68 mismatches.push_back(
"public_tx_effect");
72 mismatches.push_back(
"call_stack_metadata");
76 const auto& pi_prev = prev.public_inputs.value();
77 const auto& pi_curr = curr.public_inputs.value();
79 if (pi_prev.end_tree_snapshots != pi_curr.end_tree_snapshots) {
80 mismatches.push_back(
"public_inputs.end_tree_snapshots");
82 if (pi_prev.end_gas_used != pi_curr.end_gas_used) {
83 mismatches.push_back(
"public_inputs.end_gas_used");
85 if (pi_prev.accumulated_data_array_lengths != pi_curr.accumulated_data_array_lengths) {
86 mismatches.push_back(
"public_inputs.accumulated_data_array_lengths");
88 if (pi_prev.accumulated_data != pi_curr.accumulated_data) {
89 mismatches.push_back(
"public_inputs.accumulated_data");
91 if (pi_prev.transaction_fee != pi_curr.transaction_fee) {
92 mismatches.push_back(
"public_inputs.transaction_fee");
94 if (pi_prev.reverted != pi_curr.reverted) {
95 mismatches.push_back(
"public_inputs.reverted");
98 if (!mismatches.empty()) {
99 fuzz_info(
"=== Mismatch between results ", i - 1,
" and ", i,
" ===");
100 for (
const auto&
field : mismatches) {