use super::*;
use boojum::cs::implementations::proof::Proof;
use boojum::field::SmallField;
use boojum::gadgets::{queue::*, traits::allocatable::*};
use crate::base_structures::precompile_input_outputs::PrecompileFunctionOutputDataWitness;
use crate::base_structures::vm_state::*;
use crate::code_unpacker_sha256::input::CodeDecommitterOutputDataWitness;
use crate::fsm_input_output::circuit_inputs::main_vm::VmOutputDataWitness;
use crate::linear_hasher::input::LinearHasherOutputDataWitness;
use crate::log_sorter::input::EventsDeduplicatorOutputDataWitness;
use crate::fsm_input_output::ClosedFormInputCompactFormWitness;
use crate::storage_application::input::StorageApplicationOutputDataWitness;
use crate::storage_validity_by_grand_product::input::StorageDeduplicatorOutputDataWitness;
use boojum::gadgets::num::Num;
use boojum::gadgets::recursion::recursive_tree_hasher::RecursiveTreeHasher;
use std::collections::VecDeque;
use crate::recursion::leaf_layer::input::*;
use crate::recursion::*;
use boojum::field::FieldExtension;
#[derive(Derivative, serde::Serialize, serde::Deserialize)]
#[derivative(Clone, Debug)]
#[serde(
bound = "<H::CircuitOutput as CSAllocatable<F>>::Witness: serde::Serialize + serde::de::DeserializeOwned,
[RecursionLeafParametersWitness<F>; NUM_BASE_LAYER_CIRCUITS]: serde::Serialize + serde::de::DeserializeOwned"
)]
pub struct SchedulerCircuitInstanceWitness<
F: SmallField,
H: RecursiveTreeHasher<F, Num<F>>,
EXT: FieldExtension<2, BaseField = F>,
> {
pub prev_block_data: BlockPassthroughDataWitness<F>,
pub block_meta_parameters: BlockMetaParametersWitness<F>,
pub vm_end_of_execution_observable_output: VmOutputDataWitness<F>,
pub decommits_sorter_observable_output: CodeDecommittmentsDeduplicatorOutputDataWitness<F>,
pub code_decommitter_observable_output: CodeDecommitterOutputDataWitness<F>,
pub log_demuxer_observable_output: LogDemuxerOutputDataWitness<F>,
pub keccak256_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub sha256_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub ecrecover_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub secp256r1_verify_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub modexp_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub ecadd_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub ecmul_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub ecpairing_observable_output: PrecompileFunctionOutputDataWitness<F>,
pub storage_sorter_observable_output: StorageDeduplicatorOutputDataWitness<F>,
pub storage_application_observable_output: StorageApplicationOutputDataWitness<F>,
pub events_sorter_observable_output: EventsDeduplicatorOutputDataWitness<F>,
pub l1messages_sorter_observable_output: EventsDeduplicatorOutputDataWitness<F>,
pub l1messages_linear_hasher_observable_output: LinearHasherOutputDataWitness<F>,
pub storage_log_tail: [F; QUEUE_STATE_WIDTH],
pub per_circuit_closed_form_inputs: VecDeque<ClosedFormInputCompactFormWitness<F>>,
pub bootloader_heap_memory_state: QueueTailStateWitness<F, FULL_SPONGE_QUEUE_STATE_WIDTH>,
pub ram_sorted_queue_state: QueueTailStateWitness<F, FULL_SPONGE_QUEUE_STATE_WIDTH>,
pub decommits_sorter_intermediate_queue_state:
QueueTailStateWitness<F, FULL_SPONGE_QUEUE_STATE_WIDTH>,
pub rollup_storage_sorter_intermediate_queue_state: QueueTailStateWitness<F, QUEUE_STATE_WIDTH>,
pub events_sorter_intermediate_queue_state: QueueTailStateWitness<F, QUEUE_STATE_WIDTH>,
pub l1messages_sorter_intermediate_queue_state: QueueTailStateWitness<F, QUEUE_STATE_WIDTH>,
pub transient_storage_sorter_intermediate_queue_state:
QueueTailStateWitness<F, QUEUE_STATE_WIDTH>,
pub previous_block_meta_hash: [u8; 32],
pub previous_block_aux_hash: [u8; 32],
pub eip4844_witnesses: [Option<EIP4844OutputDataWitness<F>>; MAX_4844_BLOBS_PER_BLOCK],
#[derivative(Debug = "ignore")]
pub proof_witnesses: VecDeque<Proof<F, H::NonCircuitSimulator, EXT>>,
}
impl<F: SmallField, H: RecursiveTreeHasher<F, Num<F>>, EXT: FieldExtension<2, BaseField = F>>
SchedulerCircuitInstanceWitness<F, H, EXT>
{
pub fn placeholder() -> Self {
Self {
prev_block_data: BlockPassthroughData::placeholder_witness(),
block_meta_parameters: BlockMetaParameters::placeholder_witness(),
vm_end_of_execution_observable_output: VmOutputData::placeholder_witness(),
decommits_sorter_observable_output:
CodeDecommittmentsDeduplicatorOutputData::placeholder_witness(),
code_decommitter_observable_output: CodeDecommitterOutputData::placeholder_witness(),
log_demuxer_observable_output: LogDemuxerOutputData::placeholder_witness(),
keccak256_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
sha256_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
ecrecover_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
secp256r1_verify_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
modexp_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
ecadd_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
ecmul_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
ecpairing_observable_output: PrecompileFunctionOutputData::placeholder_witness(),
storage_sorter_observable_output: StorageDeduplicatorOutputData::placeholder_witness(),
storage_application_observable_output:
StorageApplicationOutputData::placeholder_witness(),
events_sorter_observable_output: EventsDeduplicatorOutputData::placeholder_witness(),
l1messages_sorter_observable_output: EventsDeduplicatorOutputData::placeholder_witness(
),
l1messages_linear_hasher_observable_output: LinearHasherOutputData::placeholder_witness(
),
storage_log_tail: [F::ZERO; QUEUE_STATE_WIDTH],
per_circuit_closed_form_inputs: VecDeque::new(),
bootloader_heap_memory_state: QueueTailState::placeholder_witness(),
ram_sorted_queue_state: QueueTailState::placeholder_witness(),
decommits_sorter_intermediate_queue_state: QueueTailState::placeholder_witness(),
rollup_storage_sorter_intermediate_queue_state: QueueTailState::placeholder_witness(),
events_sorter_intermediate_queue_state: QueueTailState::placeholder_witness(),
l1messages_sorter_intermediate_queue_state: QueueTailState::placeholder_witness(),
transient_storage_sorter_intermediate_queue_state: QueueTailState::placeholder_witness(
),
previous_block_meta_hash: [0u8; 32],
previous_block_aux_hash: [0u8; 32],
eip4844_witnesses: std::array::from_fn(|_| None),
proof_witnesses: VecDeque::new(),
}
}
}