Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
bb::ProofCompressor Class Reference

Compresses Chonk proofs from vector<fr> to compact byte representations. More...

#include <proof_compression.hpp>

Static Public Member Functions

static constexpr size_t compressed_size_bytes_for_elements (size_t compressed_elements)
 
static size_t eccvm_compressed_element_count ()
 
static size_t eccvm_compressed_size_bytes ()
 
static size_t compressed_element_count (size_t mega_num_public_inputs=0)
 Count the total compressed elements for a Chonk proof. Each element (scalar or commitment, either curve) compresses to exactly 32 bytes.
 
static size_t compressed_mega_num_public_inputs (size_t compressed_bytes)
 Derive mega_num_public_inputs from compressed proof size.
 
static std::vector< uint8_t > compress_chonk_proof (const ChonkProof &proof)
 
static ChonkProof decompress_chonk_proof (const std::vector< uint8_t > &compressed, size_t mega_num_public_inputs)
 

Static Public Attributes

static constexpr size_t BYTES_PER_COMPRESSED_ELEMENT = 32
 
static constexpr size_t BN254_SCALAR_FIELD_ELEMENTS = proof_compression_detail::BN254_FRS_PER_SCALAR
 
static constexpr size_t BN254_COMMITMENT_FIELD_ELEMENTS = proof_compression_detail::BN254_FRS_PER_COMM
 
static constexpr size_t GRUMPKIN_SCALAR_FIELD_ELEMENTS = proof_compression_detail::GRUMPKIN_FRS_PER_SCALAR
 
static constexpr size_t GRUMPKIN_COMMITMENT_FIELD_ELEMENTS = proof_compression_detail::GRUMPKIN_FRS_PER_COMM
 
static constexpr size_t ECCVM_PROOF_FIELD_ELEMENTS = proof_compression_detail::EXPECTED_ECCVM_FRS
 

Private Types

using Fr = curve::BN254::ScalarField
 
using Fq = curve::BN254::BaseField
 

Static Private Member Functions

template<typename Field >
static bool y_is_negative (const Field &y)
 True if y is in the "upper half" of its field, used for point compression sign bit.
 
static void write_u256 (std::vector< uint8_t > &out, const uint256_t &val)
 
static uint256_t read_u256 (const std::vector< uint8_t > &data, size_t &pos)
 
static Fq reconstruct_fq (const Fr &lo, const Fr &hi)
 
static std::pair< Fr, Frsplit_fq (const Fq &val)
 

Static Private Attributes

static constexpr uint256_t SIGN_BIT_MASK = uint256_t(1) << 255
 
static constexpr uint64_t NUM_LIMB_BITS = 68
 
static constexpr uint64_t FQ_SPLIT_BITS = NUM_LIMB_BITS * 2
 

Detailed Description

Compresses Chonk proofs from vector<fr> to compact byte representations.

Compression techniques:

  1. Point compression: store only x-coordinate + sign bit (instead of x and y)
  2. Fq-as-u256: store each Fq coordinate as 32 bytes (instead of 2 Fr for lo/hi split)
  3. Fr-as-u256: store each Fr scalar as 32 bytes (uniform encoding)

Every element compresses to exactly 32 bytes regardless of type:

  • BN254 commitment (4 Fr → 32 bytes): point compression on Fq coordinates
  • BN254 scalar (1 Fr → 32 bytes): direct u256 encoding
  • Grumpkin commitment (2 Fr → 32 bytes): point compression on Fr coordinates
  • Grumpkin scalar (2 Fr → 32 bytes): reconstruct Fq, write as u256

Definition at line 322 of file proof_compression.hpp.

Member Typedef Documentation

◆ Fq

Definition at line 324 of file proof_compression.hpp.

◆ Fr

Definition at line 323 of file proof_compression.hpp.

Member Function Documentation

◆ compress_chonk_proof()

static std::vector< uint8_t > bb::ProofCompressor::compress_chonk_proof ( const ChonkProof proof)
inlinestatic

Definition at line 432 of file proof_compression.hpp.

◆ compressed_element_count()

static size_t bb::ProofCompressor::compressed_element_count ( size_t  mega_num_public_inputs = 0)
inlinestatic

Count the total compressed elements for a Chonk proof. Each element (scalar or commitment, either curve) compresses to exactly 32 bytes.

Definition at line 403 of file proof_compression.hpp.

◆ compressed_mega_num_public_inputs()

static size_t bb::ProofCompressor::compressed_mega_num_public_inputs ( size_t  compressed_bytes)
inlinestatic

Derive mega_num_public_inputs from compressed proof size.

Parameters
compressed_bytesTotal size of the compressed proof in bytes.

Definition at line 415 of file proof_compression.hpp.

◆ compressed_size_bytes_for_elements()

static constexpr size_t bb::ProofCompressor::compressed_size_bytes_for_elements ( size_t  compressed_elements)
inlinestaticconstexpr

Definition at line 381 of file proof_compression.hpp.

◆ decompress_chonk_proof()

static ChonkProof bb::ProofCompressor::decompress_chonk_proof ( const std::vector< uint8_t > &  compressed,
size_t  mega_num_public_inputs 
)
inlinestatic

Definition at line 498 of file proof_compression.hpp.

◆ eccvm_compressed_element_count()

static size_t bb::ProofCompressor::eccvm_compressed_element_count ( )
inlinestatic

Definition at line 386 of file proof_compression.hpp.

◆ eccvm_compressed_size_bytes()

static size_t bb::ProofCompressor::eccvm_compressed_size_bytes ( )
inlinestatic

Definition at line 394 of file proof_compression.hpp.

◆ read_u256()

static uint256_t bb::ProofCompressor::read_u256 ( const std::vector< uint8_t > &  data,
size_t &  pos 
)
inlinestaticprivate

Definition at line 349 of file proof_compression.hpp.

◆ reconstruct_fq()

static Fq bb::ProofCompressor::reconstruct_fq ( const Fr lo,
const Fr hi 
)
inlinestaticprivate

Definition at line 361 of file proof_compression.hpp.

◆ split_fq()

static std::pair< Fr, Fr > bb::ProofCompressor::split_fq ( const Fq val)
inlinestaticprivate

Definition at line 366 of file proof_compression.hpp.

◆ write_u256()

static void bb::ProofCompressor::write_u256 ( std::vector< uint8_t > &  out,
const uint256_t val 
)
inlinestaticprivate

Definition at line 342 of file proof_compression.hpp.

◆ y_is_negative()

template<typename Field >
static bool bb::ProofCompressor::y_is_negative ( const Field &  y)
inlinestaticprivate

True if y is in the "upper half" of its field, used for point compression sign bit.

Definition at line 333 of file proof_compression.hpp.

Member Data Documentation

◆ BN254_COMMITMENT_FIELD_ELEMENTS

constexpr size_t bb::ProofCompressor::BN254_COMMITMENT_FIELD_ELEMENTS = proof_compression_detail::BN254_FRS_PER_COMM
staticconstexpr

Definition at line 376 of file proof_compression.hpp.

◆ BN254_SCALAR_FIELD_ELEMENTS

constexpr size_t bb::ProofCompressor::BN254_SCALAR_FIELD_ELEMENTS = proof_compression_detail::BN254_FRS_PER_SCALAR
staticconstexpr

Definition at line 375 of file proof_compression.hpp.

◆ BYTES_PER_COMPRESSED_ELEMENT

constexpr size_t bb::ProofCompressor::BYTES_PER_COMPRESSED_ELEMENT = 32
staticconstexpr

Definition at line 374 of file proof_compression.hpp.

◆ ECCVM_PROOF_FIELD_ELEMENTS

constexpr size_t bb::ProofCompressor::ECCVM_PROOF_FIELD_ELEMENTS = proof_compression_detail::EXPECTED_ECCVM_FRS
staticconstexpr

Definition at line 379 of file proof_compression.hpp.

◆ FQ_SPLIT_BITS

constexpr uint64_t bb::ProofCompressor::FQ_SPLIT_BITS = NUM_LIMB_BITS * 2
staticconstexprprivate

Definition at line 330 of file proof_compression.hpp.

◆ GRUMPKIN_COMMITMENT_FIELD_ELEMENTS

constexpr size_t bb::ProofCompressor::GRUMPKIN_COMMITMENT_FIELD_ELEMENTS = proof_compression_detail::GRUMPKIN_FRS_PER_COMM
staticconstexpr

Definition at line 378 of file proof_compression.hpp.

◆ GRUMPKIN_SCALAR_FIELD_ELEMENTS

constexpr size_t bb::ProofCompressor::GRUMPKIN_SCALAR_FIELD_ELEMENTS = proof_compression_detail::GRUMPKIN_FRS_PER_SCALAR
staticconstexpr

Definition at line 377 of file proof_compression.hpp.

◆ NUM_LIMB_BITS

constexpr uint64_t bb::ProofCompressor::NUM_LIMB_BITS = 68
staticconstexprprivate

Definition at line 329 of file proof_compression.hpp.

◆ SIGN_BIT_MASK

constexpr uint256_t bb::ProofCompressor::SIGN_BIT_MASK = uint256_t(1) << 255
staticconstexprprivate

Definition at line 326 of file proof_compression.hpp.


The documentation for this class was generated from the following file: