Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ constexpr std::tuple<size_t, size_t> HONK_RECURSION_CONSTANTS(
// ========================================

// Gate count for Chonk recursive verification (Ultra with RollupIO)
inline constexpr size_t CHONK_RECURSION_GATES = 1491593;
inline constexpr size_t CHONK_RECURSION_GATES = 1491767;

// ========================================
// Hypernova Recursion Constants
Expand Down Expand Up @@ -147,7 +147,7 @@ inline constexpr size_t HIDING_KERNEL_ULTRA_OPS = 127;
// ========================================

// Gate count for ECCVM recursive verifier (Ultra-arithmetized)
inline constexpr size_t ECCVM_RECURSIVE_VERIFIER_GATE_COUNT = 224336;
inline constexpr size_t ECCVM_RECURSIVE_VERIFIER_GATE_COUNT = 224510;

// ========================================
// Goblin AVM Recursive Verifier Constants
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,11 +99,13 @@ template <typename FF_> class ECCVMTranscriptRelationImpl {
INFINITY_ACC_X = 29,
// Infinity flag consistency: acc_y = 0 when accumulator empty
INFINITY_ACC_Y = 30,
// Boundary: accumulator_not_empty must be 0 at lagrange_first row
ACCUMULATOR_NOT_EMPTY_INIT = 31,
NUM_SUBRELATIONS,
};

static constexpr std::array<size_t, 31> SUBRELATION_PARTIAL_LENGTHS{
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
static constexpr std::array<size_t, 32> SUBRELATION_PARTIAL_LENGTHS{
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
};
static_assert(NUM_SUBRELATIONS == SUBRELATION_PARTIAL_LENGTHS.size());

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -566,5 +566,14 @@ void ECCVMTranscriptRelationImpl<FF>::accumulate(ContainerOverSubrelations& accu
is_accumulator_empty * transcript_accumulator_x * scaling_factor; // degree 2
std::get<INFINITY_ACC_Y>(accumulator) +=
is_accumulator_empty * transcript_accumulator_y * scaling_factor; // degree 2

/**
* @brief Enforce accumulator_not_empty = 0 at the lagrange_first row.
* Without this, a malicious prover can set accumulator_not_empty = 1 at the lagrange_first row,
* which disables INFINITY_ACC_X/Y above, allowing arbitrary accumulator coordinates to be injected
* without any relation catching it.
*/
std::get<ACCUMULATOR_NOT_EMPTY_INIT>(accumulator) +=
lagrange_first * View(in.transcript_accumulator_not_empty) * scaling_factor; // degree 2
}
} // namespace bb
Loading