Skip to content

Commit fd80906

Browse files
Jocn2020jonathanpwang
authored andcommitted
chore: remove all Stateful implementations (#1376)
* remove all stateful implementations * remove all ByteStateful trait * fix clippy, lint * nit * chore: update stark-backend commit --------- Co-authored-by: Jonathan Wang <[email protected]>
1 parent c36c3e0 commit fd80906

File tree

43 files changed

+94
-360
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+94
-360
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ lto = "thin"
104104

105105
[workspace.dependencies]
106106
# Stark Backend
107-
openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", rev = "5819e43af08f6625a246e5e389757970f7c2a80c", default-features = false }
108-
openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", rev = "5819e43af08f6625a246e5e389757970f7c2a80c", default-features = false }
107+
openvm-stark-backend = { git = "https://github.com/openvm-org/stark-backend.git", rev = "bc364134b8315c27bfd29c6e77ac79fe77090137", default-features = false }
108+
openvm-stark-sdk = { git = "https://github.com/openvm-org/stark-backend.git", rev = "bc364134b8315c27bfd29c6e77ac79fe77090137", default-features = false }
109109

110110
# OpenVM
111111
openvm-sdk = { path = "crates/sdk", default-features = false }

crates/circuits/primitives/src/bitwise_op_lookup/mod.rs

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
use std::{
22
borrow::{Borrow, BorrowMut},
33
mem::size_of,
4-
sync::{
5-
atomic::{AtomicU32, Ordering},
6-
Arc,
7-
},
4+
sync::{atomic::AtomicU32, Arc},
85
};
96

10-
use itertools::Itertools;
117
use openvm_circuit_primitives_derive::AlignedBorrow;
128
use openvm_stark_backend::{
139
config::{StarkGenericConfig, Val},
@@ -17,7 +13,7 @@ use openvm_stark_backend::{
1713
p3_matrix::{dense::RowMajorMatrix, Matrix},
1814
prover::types::AirProofInput,
1915
rap::{get_air_name, BaseAirWithPublicValues, PartitionedBaseAir},
20-
AirRef, Chip, ChipUsageGetter, Stateful,
16+
AirRef, Chip, ChipUsageGetter,
2117
};
2218

2319
mod bus;
@@ -260,20 +256,3 @@ impl<const NUM_BITS: usize> ChipUsageGetter for SharedBitwiseOperationLookupChip
260256
self.0.trace_width()
261257
}
262258
}
263-
264-
impl<const NUM_BITS: usize> Stateful<Vec<u8>> for SharedBitwiseOperationLookupChip<NUM_BITS> {
265-
fn load_state(&mut self, state: Vec<u8>) {
266-
// AtomicU32 can be deserialized as u32
267-
let (count_range, count_xor): (Vec<u32>, Vec<u32>) = bitcode::deserialize(&state).unwrap();
268-
for (x, v) in self.0.count_range.iter().zip_eq(count_range) {
269-
x.store(v, Ordering::Relaxed);
270-
}
271-
for (x, v) in self.0.count_xor.iter().zip_eq(count_xor) {
272-
x.store(v, Ordering::Relaxed);
273-
}
274-
}
275-
276-
fn store_state(&self) -> Vec<u8> {
277-
bitcode::serialize(&(&self.0.count_range, &self.0.count_xor)).unwrap()
278-
}
279-
}

crates/circuits/primitives/src/range_tuple/mod.rs

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,9 @@
55
66
use std::{
77
mem::size_of,
8-
sync::{
9-
atomic::{AtomicU32, Ordering},
10-
Arc,
11-
},
8+
sync::{atomic::AtomicU32, Arc},
129
};
1310

14-
use itertools::Itertools;
1511
use openvm_stark_backend::{
1612
config::{StarkGenericConfig, Val},
1713
interaction::InteractionBuilder,
@@ -20,7 +16,7 @@ use openvm_stark_backend::{
2016
p3_matrix::{dense::RowMajorMatrix, Matrix},
2117
prover::types::AirProofInput,
2218
rap::{get_air_name, BaseAirWithPublicValues, PartitionedBaseAir},
23-
AirRef, Chip, ChipUsageGetter, Stateful,
19+
AirRef, Chip, ChipUsageGetter,
2420
};
2521

2622
mod bus;
@@ -239,16 +235,3 @@ impl<const N: usize> ChipUsageGetter for SharedRangeTupleCheckerChip<N> {
239235
self.0.trace_width()
240236
}
241237
}
242-
243-
impl<const N: usize> Stateful<Vec<u8>> for SharedRangeTupleCheckerChip<N> {
244-
fn load_state(&mut self, state: Vec<u8>) {
245-
let vals: Vec<u32> = bitcode::deserialize(&state).unwrap();
246-
for (x, v) in self.0.count.iter().zip_eq(vals) {
247-
x.store(v, Ordering::Relaxed);
248-
}
249-
}
250-
251-
fn store_state(&self) -> Vec<u8> {
252-
bitcode::serialize(&self.0.count).unwrap()
253-
}
254-
}

crates/circuits/primitives/src/var_range/mod.rs

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,7 @@
66
use core::mem::size_of;
77
use std::{
88
borrow::{Borrow, BorrowMut},
9-
sync::{
10-
atomic::{AtomicU32, Ordering},
11-
Arc,
12-
},
9+
sync::{atomic::AtomicU32, Arc},
1310
};
1411

1512
use openvm_circuit_primitives_derive::AlignedBorrow;
@@ -21,7 +18,7 @@ use openvm_stark_backend::{
2118
p3_matrix::{dense::RowMajorMatrix, Matrix},
2219
prover::types::AirProofInput,
2320
rap::{get_air_name, BaseAirWithPublicValues, PartitionedBaseAir},
24-
AirRef, Chip, ChipUsageGetter, Stateful,
21+
AirRef, Chip, ChipUsageGetter,
2522
};
2623
use tracing::instrument;
2724

@@ -271,19 +268,6 @@ impl ChipUsageGetter for SharedVariableRangeCheckerChip {
271268
}
272269
}
273270

274-
impl Stateful<Vec<u8>> for SharedVariableRangeCheckerChip {
275-
fn load_state(&mut self, state: Vec<u8>) {
276-
let count_vals: Vec<u32> = bitcode::deserialize(&state).unwrap();
277-
for (x, val) in self.0.count.iter().zip(count_vals) {
278-
x.store(val, Ordering::Relaxed);
279-
}
280-
}
281-
282-
fn store_state(&self) -> Vec<u8> {
283-
bitcode::serialize(&self.0.count).unwrap()
284-
}
285-
}
286-
287271
impl AsRef<VariableRangeCheckerChip> for SharedVariableRangeCheckerChip {
288272
fn as_ref(&self) -> &VariableRangeCheckerChip {
289273
&self.0

crates/sdk/src/config/global.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ use openvm_circuit::{
1111
arch::{
1212
SystemConfig, SystemExecutor, SystemPeriphery, VmChipComplex, VmConfig, VmInventoryError,
1313
},
14-
circuit_derive::{BytesStateful, Chip, ChipUsageGetter},
14+
circuit_derive::{Chip, ChipUsageGetter},
1515
derive::{AnyEnum, InstructionExecutor},
1616
};
1717
use openvm_ecc_circuit::{
@@ -63,7 +63,7 @@ pub struct SdkVmConfig {
6363
pub castf: Option<CastFExtension>,
6464
}
6565

66-
#[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum, BytesStateful)]
66+
#[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum)]
6767
pub enum SdkVmConfigExecutor<F: PrimeField32> {
6868
#[any_enum]
6969
System(SystemExecutor<F>),
@@ -93,7 +93,7 @@ pub enum SdkVmConfigExecutor<F: PrimeField32> {
9393
CastF(CastFExtensionExecutor<F>),
9494
}
9595

96-
#[derive(From, ChipUsageGetter, Chip, AnyEnum, BytesStateful)]
96+
#[derive(From, ChipUsageGetter, Chip, AnyEnum)]
9797
pub enum SdkVmConfigPeriphery<F: PrimeField32> {
9898
#[any_enum]
9999
System(SystemPeriphery<F>),

crates/vm/derive/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,14 +344,14 @@ pub fn vm_generic_config_derive(input: proc_macro::TokenStream) -> proc_macro::T
344344
let periphery_type = Ident::new(&format!("{}Periphery", name), name.span());
345345

346346
TokenStream::from(quote! {
347-
#[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum, ::openvm_circuit_primitives_derive::BytesStateful)]
347+
#[derive(ChipUsageGetter, Chip, InstructionExecutor, From, AnyEnum)]
348348
pub enum #executor_type<F: PrimeField32> {
349349
#[any_enum]
350350
#source_name_upper(#source_executor_type<F>),
351351
#(#executor_enum_fields)*
352352
}
353353

354-
#[derive(ChipUsageGetter, Chip, From, AnyEnum, ::openvm_circuit_primitives_derive::BytesStateful)]
354+
#[derive(ChipUsageGetter, Chip, From, AnyEnum)]
355355
pub enum #periphery_type<F: PrimeField32> {
356356
#[any_enum]
357357
#source_name_upper(#source_periphery_type<F>),

crates/vm/src/arch/config.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use derive_new::new;
44
use openvm_circuit::system::memory::MemoryTraceHeights;
55
use openvm_instructions::program::DEFAULT_MAX_NUM_PUBLIC_VALUES;
66
use openvm_poseidon2_air::Poseidon2Config;
7-
use openvm_stark_backend::{p3_field::PrimeField32, ChipUsageGetter, Stateful};
7+
use openvm_stark_backend::{p3_field::PrimeField32, ChipUsageGetter};
88
use serde::{de::DeserializeOwned, Deserialize, Serialize};
99

1010
use super::{
@@ -25,8 +25,8 @@ pub fn vm_poseidon2_config<F: PrimeField32>() -> Poseidon2Config<F> {
2525
}
2626

2727
pub trait VmConfig<F: PrimeField32>: Clone + Serialize + DeserializeOwned {
28-
type Executor: InstructionExecutor<F> + AnyEnum + ChipUsageGetter + Stateful<Vec<u8>>;
29-
type Periphery: AnyEnum + ChipUsageGetter + Stateful<Vec<u8>>;
28+
type Executor: InstructionExecutor<F> + AnyEnum + ChipUsageGetter;
29+
type Periphery: AnyEnum + ChipUsageGetter;
3030

3131
/// Must contain system config
3232
fn system(&self) -> &SystemConfig;

crates/vm/src/arch/extensions.rs

Lines changed: 4 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,15 +7,14 @@ use std::{
77

88
use derive_more::derive::From;
99
use getset::Getters;
10-
use itertools::Itertools;
1110
#[cfg(feature = "bench-metrics")]
1211
use metrics::counter;
1312
use openvm_circuit_derive::{AnyEnum, InstructionExecutor};
1413
use openvm_circuit_primitives::{
1514
utils::next_power_of_two_or_zero,
1615
var_range::{SharedVariableRangeCheckerChip, VariableRangeCheckerBus},
1716
};
18-
use openvm_circuit_primitives_derive::{BytesStateful, Chip, ChipUsageGetter};
17+
use openvm_circuit_primitives_derive::{Chip, ChipUsageGetter};
1918
use openvm_instructions::{
2019
program::Program, LocalOpcode, PhantomDiscriminant, PublishOpcode, SystemOpcode, VmOpcode,
2120
};
@@ -25,7 +24,7 @@ use openvm_stark_backend::{
2524
p3_field::{FieldAlgebra, PrimeField32},
2625
p3_matrix::Matrix,
2726
prover::types::{AirProofInput, CommittedTraceData, ProofInput},
28-
AirRef, Chip, ChipUsageGetter, Stateful,
27+
AirRef, Chip, ChipUsageGetter,
2928
};
3029
use rustc_hash::FxHashMap;
3130
use serde::{Deserialize, Serialize};
@@ -39,7 +38,6 @@ use crate::metrics::VmMetrics;
3938
use crate::system::{
4039
connector::VmConnectorChip,
4140
memory::{
42-
interface::MemoryInterface,
4341
merkle::{DirectCompressionBus, MemoryMerkleBus},
4442
offline_checker::{MemoryBridge, MemoryBus},
4543
online::MemoryLogEntry,
@@ -406,26 +404,6 @@ impl<E, P> VmInventory<E, P> {
406404
}
407405
}
408406

409-
impl<E: Stateful<Vec<u8>>, P: Stateful<Vec<u8>>> Stateful<VmInventoryState> for VmInventory<E, P> {
410-
fn load_state(&mut self, state: VmInventoryState) {
411-
for (e, s) in self.executors.iter_mut().zip_eq(state.executors) {
412-
e.load_state(s)
413-
}
414-
for (p, s) in self.periphery.iter_mut().zip_eq(state.periphery) {
415-
p.load_state(s)
416-
}
417-
}
418-
419-
fn store_state(&self) -> VmInventoryState {
420-
let executors = self.executors.iter().map(|e| e.store_state()).collect();
421-
let periphery = self.periphery.iter().map(|p| p.store_state()).collect();
422-
VmInventoryState {
423-
executors,
424-
periphery,
425-
}
426-
}
427-
}
428-
429407
impl VmInventoryTraceHeights {
430408
/// Round all trace heights to the next power of two. This will round trace heights of 0 to 1.
431409
pub fn round_to_next_power_of_two(&mut self) {
@@ -548,37 +526,13 @@ impl<F: PrimeField32> SystemBase<F> {
548526
}
549527
}
550528

551-
impl<F: PrimeField32> Stateful<SystemBaseState<F>> for SystemBase<F> {
552-
fn load_state(&mut self, state: SystemBaseState<F>) {
553-
self.range_checker_chip.load_state(state.range_checker_chip);
554-
if let Some(initial_memory) = state.initial_memory {
555-
self.memory_controller.set_initial_memory(initial_memory);
556-
}
557-
self.memory_controller.set_memory_logs(state.memory_logs);
558-
self.connector_chip.load_state(state.connector_chip);
559-
self.program_chip.load_state(state.program_chip);
560-
}
561-
fn store_state(&self) -> SystemBaseState<F> {
562-
SystemBaseState {
563-
range_checker_chip: self.range_checker_chip.store_state(),
564-
initial_memory: match &self.memory_controller.interface_chip {
565-
MemoryInterface::Volatile { .. } => None,
566-
MemoryInterface::Persistent { initial_memory, .. } => Some(initial_memory.clone()),
567-
},
568-
memory_logs: self.memory_controller.get_memory_logs(),
569-
connector_chip: self.connector_chip.store_state(),
570-
program_chip: self.program_chip.store_state(),
571-
}
572-
}
573-
}
574-
575-
#[derive(ChipUsageGetter, Chip, AnyEnum, From, InstructionExecutor, BytesStateful)]
529+
#[derive(ChipUsageGetter, Chip, AnyEnum, From, InstructionExecutor)]
576530
pub enum SystemExecutor<F: PrimeField32> {
577531
PublicValues(PublicValuesChip<F>),
578532
Phantom(RefCell<PhantomChip<F>>),
579533
}
580534

581-
#[derive(ChipUsageGetter, Chip, AnyEnum, From, BytesStateful)]
535+
#[derive(ChipUsageGetter, Chip, AnyEnum, From)]
582536
pub enum SystemPeriphery<F: PrimeField32> {
583537
/// Poseidon2 chip with direct compression interactions
584538
Poseidon2(Poseidon2PeripheryChip<F>),
@@ -1122,22 +1076,6 @@ impl<F: PrimeField32, E, P> VmChipComplex<F, E, P> {
11221076
}
11231077
}
11241078

1125-
impl<F: PrimeField32, E: Stateful<Vec<u8>>, P: Stateful<Vec<u8>>> Stateful<VmChipComplexState<F>>
1126-
for VmChipComplex<F, E, P>
1127-
{
1128-
fn load_state(&mut self, state: VmChipComplexState<F>) {
1129-
self.base.load_state(state.base);
1130-
self.inventory.load_state(state.inventory);
1131-
}
1132-
1133-
fn store_state(&self) -> VmChipComplexState<F> {
1134-
VmChipComplexState {
1135-
base: self.base.store_state(),
1136-
inventory: self.inventory.store_state(),
1137-
}
1138-
}
1139-
}
1140-
11411079
struct VmProofInputBuilder<SC: StarkGenericConfig> {
11421080
curr_air_id: usize,
11431081
proof_input_per_air: Vec<(usize, AirProofInput<SC>)>,

crates/vm/src/arch/integration_api.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ use openvm_stark_backend::{
1717
p3_maybe_rayon::prelude::*,
1818
prover::types::AirProofInput,
1919
rap::{get_air_name, BaseAirWithPublicValues, PartitionedBaseAir},
20-
AirRef, Chip, ChipUsageGetter, Stateful,
20+
AirRef, Chip, ChipUsageGetter,
2121
};
2222
use serde::{de::DeserializeOwned, Deserialize, Serialize};
2323

@@ -225,18 +225,6 @@ where
225225
}
226226
}
227227

228-
impl<F, A: VmAdapterChip<F>, C: VmCoreChip<F, A::Interface>> Stateful<Vec<u8>>
229-
for VmChipWrapper<F, A, C>
230-
{
231-
fn load_state(&mut self, state: Vec<u8>) {
232-
self.records = bitcode::deserialize(&state).unwrap();
233-
}
234-
235-
fn store_state(&self) -> Vec<u8> {
236-
bitcode::serialize(&self.records).unwrap()
237-
}
238-
}
239-
240228
impl<F, A, M> InstructionExecutor<F> for VmChipWrapper<F, A, M>
241229
where
242230
F: PrimeField32,

0 commit comments

Comments
 (0)