From b7890e661539d687ca422530118af9d1ff77a24f Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Feb 2024 17:25:30 -0800 Subject: [PATCH 01/30] feat: serializable execution record --- Cargo.lock | 112 ++++++- core/Cargo.toml | 3 +- core/src/alu/mod.rs | 4 +- core/src/bytes/event.rs | 3 +- core/src/bytes/opcode.rs | 3 +- core/src/cpu/event.rs | 4 +- core/src/cpu/memory.rs | 10 +- core/src/field/event.rs | 4 +- core/src/runtime/instruction.rs | 4 +- core/src/runtime/mod.rs | 1 - core/src/runtime/opcode.rs | 3 +- core/src/runtime/program.rs | 3 +- core/src/runtime/record.rs | 7 +- .../precompiles/blake3/compress/mod.rs | 4 +- .../precompiles/blake3/compress/trace.rs | 2 +- .../src/syscall/precompiles/edwards/ed_add.rs | 2 +- .../precompiles/edwards/ed_decompress.rs | 8 +- .../syscall/precompiles/k256/decompress.rs | 7 +- .../syscall/precompiles/keccak256/execute.rs | 4 +- core/src/syscall/precompiles/keccak256/mod.rs | 7 +- core/src/syscall/precompiles/mod.rs | 5 +- .../precompiles/sha256/compress/execute.rs | 4 +- .../precompiles/sha256/compress/mod.rs | 7 +- .../precompiles/sha256/compress/trace.rs | 2 +- .../precompiles/sha256/extend/execute.rs | 10 +- .../syscall/precompiles/sha256/extend/mod.rs | 13 +- .../precompiles/sha256/extend/trace.rs | 2 +- .../weierstrass/weierstrass_add.rs | 4 +- .../weierstrass/weierstrass_double.rs | 6 +- examples/chess/script/Cargo.lock | 308 +++++++++++++++++- examples/ed25519/script/Cargo.lock | 308 +++++++++++++++++- examples/fibonacci-io/script/Cargo.lock | 174 +++++++++- examples/fibonacci/script/Cargo.lock | 308 +++++++++++++++++- examples/io/script/Cargo.lock | 308 +++++++++++++++++- examples/json/script/Cargo.lock | 308 +++++++++++++++++- examples/regex/script/Cargo.lock | 308 +++++++++++++++++- examples/rsa/script/Cargo.lock | 308 +++++++++++++++++- examples/ssz-withdrawals/script/Cargo.lock | 308 +++++++++++++++++- examples/tendermint/script/Cargo.lock | 308 +++++++++++++++++- 39 files changed, 3070 insertions(+), 124 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 401507e7e8..02c21a20b7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -312,6 +312,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.3", ] @@ -361,7 +362,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -584,6 +585,41 @@ dependencies = [ "syn 2.0.51", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.51", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.51", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -591,7 +627,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -614,6 +650,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", + "serde", ] [[package]] @@ -969,7 +1006,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap", + "indexmap 2.2.3", "slab", "tokio", "tokio-util", @@ -986,6 +1023,12 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -1118,6 +1161,12 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "0.5.0" @@ -1128,6 +1177,17 @@ dependencies = [ "unicode-normalization", ] +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -1135,7 +1195,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -1794,7 +1855,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -2259,6 +2320,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.51", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -2392,7 +2483,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools 0.12.1", "k256", @@ -2425,6 +2516,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -2506,6 +2598,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -2765,7 +2863,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/core/Cargo.toml b/core/Cargo.toml index 7014e87893..f0ce879216 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -5,7 +5,7 @@ edition = "2021" [dependencies] bincode = "1.3.3" -serde = { version = "1.0", features = ["derive"] } +serde = { version = "1.0", features = ["derive", "rc"] } p3-field = { workspace = true } p3-air = { workspace = true } p3-matrix = { workspace = true } @@ -55,6 +55,7 @@ petgraph = "0.6.4" tiny-keccak = { version = "2.0.2", features = ["keccak"] } hashbrown = "0.14.3" num_cpus = "1.16.0" +serde_with = "3.6.1" [dev-dependencies] criterion = "0.5.1" diff --git a/core/src/alu/mod.rs b/core/src/alu/mod.rs index ebac0aa07b..51d68dfa30 100644 --- a/core/src/alu/mod.rs +++ b/core/src/alu/mod.rs @@ -16,10 +16,12 @@ pub use sll::*; pub use sr::*; pub use sub::*; +use serde::{Deserialize, Serialize}; + use crate::runtime::Opcode; /// A standard format for describing ALU operations that need to be proven. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Copy, Serialize, Deserialize)] pub struct AluEvent { /// The clock cycle that the operation occurs on. pub clk: u32, diff --git a/core/src/bytes/event.rs b/core/src/bytes/event.rs index 65da312345..466401b53b 100644 --- a/core/src/bytes/event.rs +++ b/core/src/bytes/event.rs @@ -1,7 +1,8 @@ use super::ByteOpcode; +use serde::{Deserialize, Serialize}; /// A byte lookup event. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] pub struct ByteLookupEvent { /// The opcode of the operation. pub opcode: ByteOpcode, diff --git a/core/src/bytes/opcode.rs b/core/src/bytes/opcode.rs index afa761dca3..8fae62ad6d 100644 --- a/core/src/bytes/opcode.rs +++ b/core/src/bytes/opcode.rs @@ -1,9 +1,10 @@ use p3_field::Field; +use serde::{Deserialize, Serialize}; use crate::{bytes::NUM_BYTE_OPS, runtime::Opcode}; /// A byte opcode which the chip can process. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] pub enum ByteOpcode { /// Bitwise AND. AND = 0, diff --git a/core/src/cpu/event.rs b/core/src/cpu/event.rs index 905f1c3c87..8f96febc47 100644 --- a/core/src/cpu/event.rs +++ b/core/src/cpu/event.rs @@ -1,9 +1,11 @@ +use serde::{Deserialize, Serialize}; + use crate::runtime::Instruction; use super::memory::MemoryRecordEnum; /// A standard format for describing CPU operations that need to be proven. -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Serialize, Deserialize)] pub struct CpuEvent { /// The current shard. pub shard: u32, diff --git a/core/src/cpu/memory.rs b/core/src/cpu/memory.rs index 06a320f05e..8fd25edcf6 100644 --- a/core/src/cpu/memory.rs +++ b/core/src/cpu/memory.rs @@ -1,17 +1,19 @@ -#[derive(Debug, Copy, Clone)] +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Copy, Clone, Serialize, Deserialize)] pub enum MemoryRecordEnum { Read(MemoryReadRecord), Write(MemoryWriteRecord), } -#[derive(Debug, Copy, Clone, Default)] +#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)] pub struct MemoryRecord { pub value: u32, pub shard: u32, pub timestamp: u32, } -#[derive(Debug, Copy, Clone, Default)] +#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)] #[non_exhaustive] pub struct MemoryReadRecord { pub value: u32, @@ -21,7 +23,7 @@ pub struct MemoryReadRecord { pub prev_timestamp: u32, } -#[derive(Debug, Copy, Clone, Default)] +#[derive(Debug, Copy, Clone, Default, Serialize, Deserialize)] #[non_exhaustive] pub struct MemoryWriteRecord { pub value: u32, diff --git a/core/src/field/event.rs b/core/src/field/event.rs index 49fe5eda9f..c9236e0783 100644 --- a/core/src/field/event.rs +++ b/core/src/field/event.rs @@ -1,5 +1,7 @@ +use serde::{Deserialize, Serialize}; + /// A standard format for proving operations over a triplet of field elements. -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)] pub struct FieldEvent { pub ltu: bool, pub b: u32, diff --git a/core/src/runtime/instruction.rs b/core/src/runtime/instruction.rs index 79097e29b9..edb8d960c9 100644 --- a/core/src/runtime/instruction.rs +++ b/core/src/runtime/instruction.rs @@ -1,9 +1,11 @@ use core::fmt::Debug; +use serde::{Deserialize, Serialize}; + use super::Opcode; /// An instruction specifies an operation to execute and the operands. -#[derive(Clone, Copy)] +#[derive(Clone, Copy, Serialize, Deserialize)] pub struct Instruction { pub opcode: Opcode, pub op_a: u32, diff --git a/core/src/runtime/mod.rs b/core/src/runtime/mod.rs index dbf98e6754..4c2d3d3b5f 100644 --- a/core/src/runtime/mod.rs +++ b/core/src/runtime/mod.rs @@ -85,7 +85,6 @@ impl Runtime { pub fn new(program: Program) -> Self { let program_arc = Arc::new(program); let record = ExecutionRecord { - program: program_arc.clone(), ..Default::default() }; // Write pc trace to file if TRACE_FILE is set diff --git a/core/src/runtime/opcode.rs b/core/src/runtime/opcode.rs index 2c91f5963e..c2badab376 100644 --- a/core/src/runtime/opcode.rs +++ b/core/src/runtime/opcode.rs @@ -1,9 +1,10 @@ use std::fmt::Display; use p3_field::Field; +use serde::{Deserialize, Serialize}; /// An opcode specifies which operation to execute. -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] #[allow(non_camel_case_types)] pub enum Opcode { // Arithmetic instructions. diff --git a/core/src/runtime/program.rs b/core/src/runtime/program.rs index 5b59ce4f72..065394a8ca 100644 --- a/core/src/runtime/program.rs +++ b/core/src/runtime/program.rs @@ -1,9 +1,10 @@ +use serde::{Deserialize, Serialize}; use std::collections::BTreeMap; use super::Instruction; /// A program that can be executed by the VM. -#[derive(Debug, Clone, Default)] +#[derive(Debug, Clone, Default, Serialize, Deserialize)] pub struct Program { /// The instructions of the program. pub instructions: Vec, diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 2ab1d70d94..762e70bd7e 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -16,10 +16,11 @@ use crate::syscall::precompiles::keccak256::KeccakPermuteEvent; use crate::syscall::precompiles::sha256::{ShaCompressEvent, ShaExtendEvent}; use crate::syscall::precompiles::{ECAddEvent, ECDoubleEvent}; use crate::utils::env; +use serde::{Deserialize, Serialize}; /// A record of the execution of a program. Contains event data for everything that happened during /// the execution of the shard. -#[derive(Default, Clone, Debug)] +#[derive(Default, Clone, Debug, Serialize, Deserialize)] pub struct ExecutionRecord { /// The index of the shard. pub index: u32, @@ -30,9 +31,6 @@ pub struct ExecutionRecord { /// A trace of the CPU events which get emitted during execution. pub cpu_events: Vec, - /// Multiplicity counts for each instruction in the program. - pub instruction_counts: HashMap, - /// A trace of the ADD, and ADDI events. pub add_events: Vec, @@ -171,7 +169,6 @@ impl ExecutionRecord { .map(|(i, chunk)| { let mut shard = ExecutionRecord::default(); shard.index = (i + 1) as u32; - shard.program = self.program.clone(); shard.cpu_events = chunk.to_vec(); shard diff --git a/core/src/syscall/precompiles/blake3/compress/mod.rs b/core/src/syscall/precompiles/blake3/compress/mod.rs index 1d7df224c6..66286c282a 100644 --- a/core/src/syscall/precompiles/blake3/compress/mod.rs +++ b/core/src/syscall/precompiles/blake3/compress/mod.rs @@ -27,6 +27,8 @@ mod g; mod trace; use crate::cpu::{MemoryReadRecord, MemoryWriteRecord}; +use serde::{Deserialize, Serialize}; + /// The number of `Word`s in the message of the compress inner operation. pub(crate) const MSG_SIZE: usize = 16; @@ -88,7 +90,7 @@ pub(crate) fn g_func(input: [u32; 6]) -> [u32; 4] { [a, b, c, d] } -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct Blake3CompressInnerEvent { pub clk: u32, pub shard: u32, diff --git a/core/src/syscall/precompiles/blake3/compress/trace.rs b/core/src/syscall/precompiles/blake3/compress/trace.rs index 9629d2696f..fa49130b7c 100644 --- a/core/src/syscall/precompiles/blake3/compress/trace.rs +++ b/core/src/syscall/precompiles/blake3/compress/trace.rs @@ -32,7 +32,7 @@ impl MachineAir for Blake3CompressInnerChip { let mut new_field_events = Vec::new(); for i in 0..input.blake3_compress_inner_events.len() { - let event = input.blake3_compress_inner_events[i]; + let event = &input.blake3_compress_inner_events[i]; let mut clk = event.clk; for round in 0..ROUND_COUNT { diff --git a/core/src/syscall/precompiles/edwards/ed_add.rs b/core/src/syscall/precompiles/edwards/ed_add.rs index 869dfc148e..86b0dca4e6 100644 --- a/core/src/syscall/precompiles/edwards/ed_add.rs +++ b/core/src/syscall/precompiles/edwards/ed_add.rs @@ -116,7 +116,7 @@ impl Syscall for EdAddAssignChip { fn execute(&self, rt: &mut SyscallContext) -> u32 { let event = create_ec_add_event::(rt); - rt.record_mut().ed_add_events.push(event); + rt.record_mut().ed_add_events.push(event.clone()); event.p_ptr + 1 } } diff --git a/core/src/syscall/precompiles/edwards/ed_decompress.rs b/core/src/syscall/precompiles/edwards/ed_decompress.rs index 5c5522f9e7..3bac534ff9 100644 --- a/core/src/syscall/precompiles/edwards/ed_decompress.rs +++ b/core/src/syscall/precompiles/edwards/ed_decompress.rs @@ -34,13 +34,15 @@ use p3_air::{Air, AirBuilder, BaseAir}; use p3_field::AbstractField; use p3_field::PrimeField32; use p3_matrix::MatrixRowSlices; +use serde::Deserialize; +use serde::Serialize; use std::marker::PhantomData; use p3_matrix::dense::RowMajorMatrix; use sp1_derive::AlignedBorrow; use std::fmt::Debug; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct EdDecompressEvent { pub shard: u32, pub clk: u32, @@ -284,10 +286,10 @@ impl MachineAir for EdDecompressChip = row.as_mut_slice().borrow_mut(); - cols.populate::(event, output); + cols.populate::(event.clone(), output); rows.push(row); } diff --git a/core/src/syscall/precompiles/k256/decompress.rs b/core/src/syscall/precompiles/k256/decompress.rs index df2220bdc0..dc20304d45 100644 --- a/core/src/syscall/precompiles/k256/decompress.rs +++ b/core/src/syscall/precompiles/k256/decompress.rs @@ -37,13 +37,14 @@ use p3_air::{Air, BaseAir}; use p3_field::AbstractField; use p3_field::PrimeField32; use p3_matrix::MatrixRowSlices; +use serde::{Deserialize, Serialize}; use std::str::FromStr; use p3_matrix::dense::RowMajorMatrix; use sp1_derive::AlignedBorrow; use std::fmt::Debug; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct K256DecompressEvent { pub shard: u32, pub clk: u32, @@ -298,10 +299,10 @@ impl MachineAir for K256DecompressChip { let mut rows = Vec::new(); for i in 0..input.k256_decompress_events.len() { - let event = input.k256_decompress_events[i]; + let event = &input.k256_decompress_events[i]; let mut row = [F::zero(); NUM_K256_DECOMPRESS_COLS]; let cols: &mut K256DecompressCols = row.as_mut_slice().borrow_mut(); - cols.populate(event, output); + cols.populate(event.clone(), output); rows.push(row); } diff --git a/core/src/syscall/precompiles/keccak256/execute.rs b/core/src/syscall/precompiles/keccak256/execute.rs index cdea160110..07a2a1eb6d 100644 --- a/core/src/syscall/precompiles/keccak256/execute.rs +++ b/core/src/syscall/precompiles/keccak256/execute.rs @@ -105,8 +105,8 @@ impl Syscall for KeccakPermuteChip { clk: saved_clk, pre_state: saved_state.as_slice().try_into().unwrap(), post_state: state.as_slice().try_into().unwrap(), - state_read_records: state_read_records.as_slice().try_into().unwrap(), - state_write_records: state_write_records.as_slice().try_into().unwrap(), + state_read_records, + state_write_records, state_addr: state_ptr, }); diff --git a/core/src/syscall/precompiles/keccak256/mod.rs b/core/src/syscall/precompiles/keccak256/mod.rs index c91d401705..bdd4c734da 100644 --- a/core/src/syscall/precompiles/keccak256/mod.rs +++ b/core/src/syscall/precompiles/keccak256/mod.rs @@ -1,6 +1,7 @@ use crate::syscall::precompiles::{MemoryReadRecord, MemoryWriteRecord}; use p3_keccak_air::KeccakAir; +use serde::{Deserialize, Serialize}; mod air; pub mod columns; @@ -12,14 +13,14 @@ const STATE_SIZE: usize = 25; // The permutation state is 25 u64's. Our word size is 32 bits, so it is 50 words. const STATE_NUM_WORDS: usize = 25 * 2; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct KeccakPermuteEvent { pub shard: u32, pub clk: u32, pub pre_state: [u64; STATE_SIZE], pub post_state: [u64; STATE_SIZE], - pub state_read_records: [MemoryReadRecord; STATE_NUM_WORDS], - pub state_write_records: [MemoryWriteRecord; STATE_NUM_WORDS], + pub state_read_records: Vec, + pub state_write_records: Vec, pub state_addr: u32, } diff --git a/core/src/syscall/precompiles/mod.rs b/core/src/syscall/precompiles/mod.rs index afac749ffc..dda993c4e7 100644 --- a/core/src/syscall/precompiles/mod.rs +++ b/core/src/syscall/precompiles/mod.rs @@ -6,6 +6,7 @@ pub mod sha256; pub mod weierstrass; use num::BigUint; +use serde::{Deserialize, Serialize}; use crate::air::SP1AirBuilder; use crate::operations::field::params::Limbs; @@ -15,7 +16,7 @@ use crate::utils::ec::{AffinePoint, EllipticCurve}; use crate::{cpu::MemoryReadRecord, cpu::MemoryWriteRecord}; /// Elliptic curve add event. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ECAddEvent { pub shard: u32, pub clk: u32, @@ -75,7 +76,7 @@ pub fn create_ec_add_event(rt: &mut SyscallContext) -> ECAddEv } /// Elliptic curve double event. -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ECDoubleEvent { pub shard: u32, pub clk: u32, diff --git a/core/src/syscall/precompiles/sha256/compress/execute.rs b/core/src/syscall/precompiles/sha256/compress/execute.rs index 04dafb3720..853b6ba299 100644 --- a/core/src/syscall/precompiles/sha256/compress/execute.rs +++ b/core/src/syscall/precompiles/sha256/compress/execute.rs @@ -89,10 +89,10 @@ impl Syscall for ShaCompressChip { shard, clk: saved_clk, w_and_h_ptr: saved_w_ptr, - w: original_w.try_into().unwrap(), + w: original_w, h: hx, h_read_records: h_read_records.try_into().unwrap(), - w_i_read_records: w_i_read_records.try_into().unwrap(), + w_i_read_records, h_write_records: h_write_records.try_into().unwrap(), }); diff --git a/core/src/syscall/precompiles/sha256/compress/mod.rs b/core/src/syscall/precompiles/sha256/compress/mod.rs index b368598de0..406e2d7282 100644 --- a/core/src/syscall/precompiles/sha256/compress/mod.rs +++ b/core/src/syscall/precompiles/sha256/compress/mod.rs @@ -1,4 +1,5 @@ use crate::cpu::{MemoryReadRecord, MemoryWriteRecord}; +use serde::{Deserialize, Serialize}; mod air; mod columns; @@ -16,15 +17,15 @@ pub const SHA_COMPRESS_K: [u32; 64] = [ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, ]; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ShaCompressEvent { pub shard: u32, pub clk: u32, pub w_and_h_ptr: u32, - pub w: [u32; 64], + pub w: Vec, pub h: [u32; 8], pub h_read_records: [MemoryReadRecord; 8], - pub w_i_read_records: [MemoryReadRecord; 64], + pub w_i_read_records: Vec, pub h_write_records: [MemoryWriteRecord; 8], } diff --git a/core/src/syscall/precompiles/sha256/compress/trace.rs b/core/src/syscall/precompiles/sha256/compress/trace.rs index eda1c55109..5356bc6052 100644 --- a/core/src/syscall/precompiles/sha256/compress/trace.rs +++ b/core/src/syscall/precompiles/sha256/compress/trace.rs @@ -28,7 +28,7 @@ impl MachineAir for ShaCompressChip { let mut new_field_events = Vec::new(); for i in 0..input.sha_compress_events.len() { - let mut event = input.sha_compress_events[i]; + let mut event = input.sha_compress_events[i].clone(); let og_h = event.h; let mut v = [0u32; 8].map(Word::from); diff --git a/core/src/syscall/precompiles/sha256/extend/execute.rs b/core/src/syscall/precompiles/sha256/extend/execute.rs index de71f1df11..2eff0d798d 100644 --- a/core/src/syscall/precompiles/sha256/extend/execute.rs +++ b/core/src/syscall/precompiles/sha256/extend/execute.rs @@ -71,11 +71,11 @@ impl Syscall for ShaExtendChip { shard, clk: clk_init, w_ptr: w_ptr_init, - w_i_minus_15_reads: w_i_minus_15_reads.try_into().unwrap(), - w_i_minus_2_reads: w_i_minus_2_reads.try_into().unwrap(), - w_i_minus_16_reads: w_i_minus_16_reads.try_into().unwrap(), - w_i_minus_7_reads: w_i_minus_7_reads.try_into().unwrap(), - w_i_writes: w_i_writes.try_into().unwrap(), + w_i_minus_15_reads, + w_i_minus_2_reads, + w_i_minus_16_reads, + w_i_minus_7_reads, + w_i_writes, }); w_ptr diff --git a/core/src/syscall/precompiles/sha256/extend/mod.rs b/core/src/syscall/precompiles/sha256/extend/mod.rs index 8238ed647b..e1ace15248 100644 --- a/core/src/syscall/precompiles/sha256/extend/mod.rs +++ b/core/src/syscall/precompiles/sha256/extend/mod.rs @@ -7,17 +7,18 @@ mod trace; pub use columns::*; use crate::cpu::{MemoryReadRecord, MemoryWriteRecord}; +use serde::{Deserialize, Serialize}; -#[derive(Debug, Clone, Copy)] +#[derive(Debug, Clone, Serialize, Deserialize)] pub struct ShaExtendEvent { pub shard: u32, pub clk: u32, pub w_ptr: u32, - pub w_i_minus_15_reads: [MemoryReadRecord; 48], - pub w_i_minus_2_reads: [MemoryReadRecord; 48], - pub w_i_minus_16_reads: [MemoryReadRecord; 48], - pub w_i_minus_7_reads: [MemoryReadRecord; 48], - pub w_i_writes: [MemoryWriteRecord; 48], + pub w_i_minus_15_reads: Vec, + pub w_i_minus_2_reads: Vec, + pub w_i_minus_16_reads: Vec, + pub w_i_minus_7_reads: Vec, + pub w_i_writes: Vec, } #[derive(Default)] diff --git a/core/src/syscall/precompiles/sha256/extend/trace.rs b/core/src/syscall/precompiles/sha256/extend/trace.rs index baadd67034..30c5bbc8fe 100644 --- a/core/src/syscall/precompiles/sha256/extend/trace.rs +++ b/core/src/syscall/precompiles/sha256/extend/trace.rs @@ -21,7 +21,7 @@ impl MachineAir for ShaExtendChip { let mut new_field_events = Vec::new(); for i in 0..input.sha_extend_events.len() { - let event = input.sha_extend_events[i]; + let event = input.sha_extend_events[i].clone(); for j in 0..48usize { let mut row = [F::zero(); NUM_SHA_EXTEND_COLS]; let cols: &mut ShaExtendCols = row.as_mut_slice().borrow_mut(); diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs index 732a4c794d..a00dc34247 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_add.rs @@ -68,7 +68,7 @@ pub struct WeierstrassAddAssignChip { impl Syscall for WeierstrassAddAssignChip { fn execute(&self, rt: &mut SyscallContext) -> u32 { let event = create_ec_add_event::(rt); - rt.record_mut().weierstrass_add_events.push(event); + rt.record_mut().weierstrass_add_events.push(event.clone()); event.p_ptr + 1 } @@ -159,7 +159,7 @@ impl MachineAir let mut new_field_events = Vec::new(); for i in 0..input.weierstrass_add_events.len() { - let event = input.weierstrass_add_events[i]; + let event = input.weierstrass_add_events[i].clone(); let mut row = [F::zero(); NUM_WEIERSTRASS_ADD_COLS]; let cols: &mut WeierstrassAddAssignCols = row.as_mut_slice().borrow_mut(); diff --git a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs index ced770596d..d8c8efaf45 100644 --- a/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs +++ b/core/src/syscall/precompiles/weierstrass/weierstrass_double.rs @@ -66,7 +66,9 @@ pub struct WeierstrassDoubleAssignChip { impl Syscall for WeierstrassDoubleAssignChip { fn execute(&self, rt: &mut SyscallContext) -> u32 { let event = create_ec_double_event::(rt); - rt.record_mut().weierstrass_double_events.push(event); + rt.record_mut() + .weierstrass_double_events + .push(event.clone()); event.p_ptr + 1 } @@ -172,7 +174,7 @@ impl MachineAir let mut new_field_events = Vec::new(); for i in 0..input.weierstrass_double_events.len() { - let event = input.weierstrass_double_events[i]; + let event = input.weierstrass_double_events[i].clone(); let mut row = [F::zero(); NUM_WEIERSTRASS_DOUBLE_COLS]; let cols: &mut WeierstrassDoubleAssignCols = row.as_mut_slice().borrow_mut(); diff --git a/examples/chess/script/Cargo.lock b/examples/chess/script/Cargo.lock index 9d3b141dc5..887449de77 100644 --- a/examples/chess/script/Cargo.lock +++ b/examples/chess/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -194,6 +221,19 @@ dependencies = [ "sp1-core", ] +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -213,7 +253,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -252,6 +292,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -350,6 +396,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -357,7 +438,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -373,6 +454,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -490,6 +581,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -600,6 +697,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -637,6 +740,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -644,7 +787,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -662,6 +806,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -784,6 +937,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1154,7 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1185,6 +1344,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1427,6 +1592,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1514,7 +1709,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1546,6 +1741,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/ed25519/script/Cargo.lock b/examples/ed25519/script/Cargo.lock index 89bf403a39..271b3edd57 100644 --- a/examples/ed25519/script/Cargo.lock +++ b/examples/ed25519/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -490,6 +581,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -600,6 +697,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -637,6 +740,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -644,7 +787,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -662,6 +806,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -784,6 +937,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1154,7 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1185,6 +1344,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1427,6 +1592,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1514,7 +1709,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1546,6 +1741,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/fibonacci-io/script/Cargo.lock b/examples/fibonacci-io/script/Cargo.lock index a50242c03c..54200f9fa0 100644 --- a/examples/fibonacci-io/script/Cargo.lock +++ b/examples/fibonacci-io/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -249,6 +255,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -271,7 +278,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -414,6 +421,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -421,7 +463,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -437,6 +479,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -562,6 +614,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -672,6 +730,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -732,6 +796,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -739,7 +820,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -888,6 +970,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1258,7 +1346,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1289,6 +1377,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1534,6 +1628,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1621,7 +1745,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1653,6 +1777,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1691,6 +1816,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1767,6 +1898,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1788,7 +1950,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/fibonacci/script/Cargo.lock b/examples/fibonacci/script/Cargo.lock index 553727610c..67b28bcb67 100644 --- a/examples/fibonacci/script/Cargo.lock +++ b/examples/fibonacci/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -490,6 +581,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -600,6 +697,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -637,6 +740,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -644,7 +787,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -662,6 +806,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -784,6 +937,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1154,7 +1313,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1185,6 +1344,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1427,6 +1592,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1514,7 +1709,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1546,6 +1741,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/io/script/Cargo.lock b/examples/io/script/Cargo.lock index 4717679665..76527bd615 100644 --- a/examples/io/script/Cargo.lock +++ b/examples/io/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -663,6 +807,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -785,6 +938,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1155,7 +1314,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1186,6 +1345,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1428,6 +1593,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1515,7 +1710,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1547,6 +1742,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1577,6 +1773,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1653,6 +1855,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1674,7 +1907,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1789,6 +2022,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1811,6 +2098,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/json/script/Cargo.lock b/examples/json/script/Cargo.lock index 8e289a65e1..b87a4b63d8 100644 --- a/examples/json/script/Cargo.lock +++ b/examples/json/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -655,6 +799,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "json-script" version = "0.1.0" @@ -794,6 +947,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1164,7 +1323,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1195,6 +1354,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1437,6 +1602,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1524,7 +1719,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1556,6 +1751,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1586,6 +1782,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1662,6 +1864,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1683,7 +1916,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1798,6 +2031,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1820,6 +2107,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/regex/script/Cargo.lock b/examples/regex/script/Cargo.lock index e7144e80df..938541fef4 100644 --- a/examples/regex/script/Cargo.lock +++ b/examples/regex/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -655,6 +799,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -777,6 +930,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1147,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1178,6 +1337,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1427,6 +1592,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1514,7 +1709,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1546,6 +1741,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/rsa/script/Cargo.lock b/examples/rsa/script/Cargo.lock index 1d1bdc07e1..30bbfaaa6e 100644 --- a/examples/rsa/script/Cargo.lock +++ b/examples/rsa/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -655,6 +799,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -777,6 +930,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1147,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1178,6 +1337,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1427,6 +1592,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1514,7 +1709,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1546,6 +1741,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/ssz-withdrawals/script/Cargo.lock b/examples/ssz-withdrawals/script/Cargo.lock index 09ef64af17..0df54dabff 100644 --- a/examples/ssz-withdrawals/script/Cargo.lock +++ b/examples/ssz-withdrawals/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -655,6 +799,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -777,6 +930,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1147,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1178,6 +1337,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1420,6 +1585,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1507,7 +1702,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1539,6 +1734,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1576,6 +1772,12 @@ dependencies = [ "sp1-core", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" diff --git a/examples/tendermint/script/Cargo.lock b/examples/tendermint/script/Cargo.lock index e01a26fd19..1150c72d36 100644 --- a/examples/tendermint/script/Cargo.lock +++ b/examples/tendermint/script/Cargo.lock @@ -35,6 +35,21 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "ansi_term" version = "0.12.1" @@ -122,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -172,6 +193,12 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + [[package]] name = "cc" version = "1.0.83" @@ -187,6 +214,19 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "chrono" +version = "0.4.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.0", +] + [[package]] name = "clap" version = "4.5.0" @@ -206,7 +246,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -245,6 +285,12 @@ version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + [[package]] name = "cpufeatures" version = "0.2.12" @@ -343,6 +389,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -350,7 +431,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -366,6 +447,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -483,6 +574,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -593,6 +690,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -630,6 +733,46 @@ dependencies = [ "digest", ] +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -637,7 +780,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -655,6 +799,15 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "js-sys" +version = "0.3.68" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +dependencies = [ + "wasm-bindgen", +] + [[package]] name = "k256" version = "0.13.3" @@ -777,6 +930,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -1147,7 +1306,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1178,6 +1337,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1420,6 +1585,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1507,7 +1702,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1539,6 +1734,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1569,6 +1765,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1652,6 +1854,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1673,7 +1906,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] @@ -1788,6 +2021,60 @@ version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" +[[package]] +name = "wasm-bindgen" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.48", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" + [[package]] name = "winapi" version = "0.3.9" @@ -1810,6 +2097,15 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.0", +] + [[package]] name = "windows-sys" version = "0.52.0" From 2dbe554c339d616a8ce4832e07069873494c3503 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Feb 2024 17:30:59 -0800 Subject: [PATCH 02/30] fix errors --- core/src/runtime/mod.rs | 1 + core/src/runtime/record.rs | 2 +- core/src/syscall/precompiles/blake3/compress/trace.rs | 2 +- core/src/syscall/precompiles/k256/decompress.rs | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/runtime/mod.rs b/core/src/runtime/mod.rs index 4c2d3d3b5f..dbf98e6754 100644 --- a/core/src/runtime/mod.rs +++ b/core/src/runtime/mod.rs @@ -85,6 +85,7 @@ impl Runtime { pub fn new(program: Program) -> Self { let program_arc = Arc::new(program); let record = ExecutionRecord { + program: program_arc.clone(), ..Default::default() }; // Write pc trace to file if TRACE_FILE is set diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 762e70bd7e..5e27268466 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -170,7 +170,7 @@ impl ExecutionRecord { let mut shard = ExecutionRecord::default(); shard.index = (i + 1) as u32; shard.cpu_events = chunk.to_vec(); - + shard.program = self.program.clone(); shard }) .collect::>(); diff --git a/core/src/syscall/precompiles/blake3/compress/trace.rs b/core/src/syscall/precompiles/blake3/compress/trace.rs index fa49130b7c..17ae1f30f6 100644 --- a/core/src/syscall/precompiles/blake3/compress/trace.rs +++ b/core/src/syscall/precompiles/blake3/compress/trace.rs @@ -32,7 +32,7 @@ impl MachineAir for Blake3CompressInnerChip { let mut new_field_events = Vec::new(); for i in 0..input.blake3_compress_inner_events.len() { - let event = &input.blake3_compress_inner_events[i]; + let event = input.blake3_compress_inner_events[i].clone(); let mut clk = event.clk; for round in 0..ROUND_COUNT { diff --git a/core/src/syscall/precompiles/k256/decompress.rs b/core/src/syscall/precompiles/k256/decompress.rs index dc20304d45..db0861d76d 100644 --- a/core/src/syscall/precompiles/k256/decompress.rs +++ b/core/src/syscall/precompiles/k256/decompress.rs @@ -299,7 +299,7 @@ impl MachineAir for K256DecompressChip { let mut rows = Vec::new(); for i in 0..input.k256_decompress_events.len() { - let event = &input.k256_decompress_events[i]; + let event = input.k256_decompress_events[i].clone(); let mut row = [F::zero(); NUM_K256_DECOMPRESS_COLS]; let cols: &mut K256DecompressCols = row.as_mut_slice().borrow_mut(); cols.populate(event.clone(), output); From 306d4f7847995ca8cef056cae168c98c85af6d09 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Feb 2024 17:34:07 -0800 Subject: [PATCH 03/30] make commit main public --- core/src/stark/prover.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/stark/prover.rs b/core/src/stark/prover.rs index 1a01ee608f..c388d72939 100644 --- a/core/src/stark/prover.rs +++ b/core/src/stark/prover.rs @@ -120,7 +120,7 @@ where PcsProverData: Send + Sync, ShardMainData: Serialize + DeserializeOwned, { - fn commit_main( + pub fn commit_main( config: &SC, machine: &RiscvStark, shard: &ExecutionRecord, From c035edf7efb90e1db8e79bc57b46a4c0f8bfd334 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Feb 2024 19:56:08 -0800 Subject: [PATCH 04/30] updates --- core/src/stark/machine.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/stark/machine.rs b/core/src/stark/machine.rs index c817bf244d..cd9cff7af7 100644 --- a/core/src/stark/machine.rs +++ b/core/src/stark/machine.rs @@ -103,7 +103,6 @@ impl RiscvStark { ); // Generate the trace for each chip to collect events emitted from chips with dependencies. - println!("generating depeendencies for each chip"); chips.iter().for_each(|chip| { let mut output = ExecutionRecord::default(); output.index = record.index; From 2fe657230059dfc8f04dda52c2a86ab1b37cc9ed Mon Sep 17 00:00:00 2001 From: John Guibas Date: Tue, 27 Feb 2024 21:37:29 -0800 Subject: [PATCH 05/30] expose babybear --- core/src/utils/prove.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/utils/prove.rs b/core/src/utils/prove.rs index f1db1b2073..921a4f8ea3 100644 --- a/core/src/utils/prove.rs +++ b/core/src/utils/prove.rs @@ -161,7 +161,7 @@ use p3_air::Air; use p3_matrix::dense::RowMajorMatrix; use p3_uni_stark::Proof; -pub(super) mod baby_bear_poseidon2 { +pub mod baby_bear_poseidon2 { use crate::utils::prove::RC_16_30; use p3_baby_bear::BabyBear; From 5abff3c3afc8055619cbb2e231cc521a1ef3b35f Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Feb 2024 13:21:08 -0800 Subject: [PATCH 06/30] stark types --- core/src/stark/types.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/stark/types.rs b/core/src/stark/types.rs index fed7ba3949..8a0003393d 100644 --- a/core/src/stark/types.rs +++ b/core/src/stark/types.rs @@ -22,6 +22,7 @@ pub type PackedChallenge = as ExtensionField>>::Exten pub type OpeningProof = <::Pcs as Pcs, ValMat>>::Proof; pub type OpeningError = <::Pcs as Pcs, ValMat>>::Error; pub type Challenge = ::Challenge; +pub type Challenger = ::Challenger; #[allow(dead_code)] type ChallengeMat = RowMajorMatrix>; type ValMat = RowMajorMatrix>; From 41a69e395bd1e7c89fb9b88f56259e71a7e02b39 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Feb 2024 13:32:05 -0800 Subject: [PATCH 07/30] updates --- Cargo.lock | 42 +++++++++++++++++++++--------------------- Cargo.toml | 38 +++++++++++++++++++------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 02c21a20b7..44a7d459b8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1566,7 +1566,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1575,7 +1575,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1585,7 +1585,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1594,7 +1594,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1606,7 +1606,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1617,7 +1617,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1628,7 +1628,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-util", @@ -1639,7 +1639,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -1657,7 +1657,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1668,7 +1668,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1678,7 +1678,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1687,7 +1687,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1699,7 +1699,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1711,7 +1711,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1719,7 +1719,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1735,7 +1735,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-commit", @@ -1751,7 +1751,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-dft", @@ -1766,7 +1766,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1780,7 +1780,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-field", @@ -1790,7 +1790,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools 0.12.1", "p3-air", @@ -1808,7 +1808,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/Cargo.toml b/Cargo.toml index 2523a37393..be2887662c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,22 +15,22 @@ debug = true debug-assertions = true [workspace.dependencies] -p3-air = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-field = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-commit = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-matrix = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-baby-bear = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-util = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-challenger = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-dft = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-fri = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-goldilocks = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-keccak = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-keccak-air = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-blake3 = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-mds = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-merkle-tree = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-poseidon2 = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-symmetric = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-uni-stark = { git = "https://github.com/succinctlabs/plonky3.git" } -p3-maybe-rayon = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-air = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-field = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-commit = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-matrix = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-baby-bear = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-util = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-challenger = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-dft = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-fri = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-goldilocks = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-keccak = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-keccak-air = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-blake3 = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-mds = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-merkle-tree = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-poseidon2 = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-symmetric = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-uni-stark = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-maybe-rayon = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } From 9522e6768185df86f09b0863679cecf9b6635cf1 Mon Sep 17 00:00:00 2001 From: John Guibas Date: Wed, 28 Feb 2024 13:40:01 -0800 Subject: [PATCH 08/30] prover --- core/src/stark/prover.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/stark/prover.rs b/core/src/stark/prover.rs index c388d72939..d728157fec 100644 --- a/core/src/stark/prover.rs +++ b/core/src/stark/prover.rs @@ -157,7 +157,7 @@ where } /// Prove the program for the given shard and given a commitment to the main data. - fn prove_shard( + pub fn prove_shard( config: &SC, _pk: &ProvingKey, chips: &[&RiscvChip], From 7768220012412a3429f695c217e166ce392154eb Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Mon, 4 Mar 2024 19:45:42 -0800 Subject: [PATCH 09/30] optimized record.shard() --- core/src/runtime/record.rs | 144 ++++++++++----------- examples/chess/script/Cargo.lock | 42 +++--- examples/ed25519/script/Cargo.lock | 42 +++--- examples/fibonacci-io/script/Cargo.lock | 42 +++--- examples/fibonacci/script/Cargo.lock | 42 +++--- examples/io/script/Cargo.lock | 42 +++--- examples/json/script/Cargo.lock | 42 +++--- examples/regex/script/Cargo.lock | 42 +++--- examples/rsa/script/Cargo.lock | 42 +++--- examples/ssz-withdrawals/script/Cargo.lock | 42 +++--- examples/tendermint/script/Cargo.lock | 42 +++--- 11 files changed, 280 insertions(+), 284 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 5e27268466..2de8092b2e 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -151,6 +151,14 @@ pub struct ShardStats { pub nb_k256_decompress_events: usize, } +fn drain_chunks(vec: &mut Vec, chunk_size: usize) -> Vec> { + let mut chunks = Vec::new(); + while !vec.is_empty() { + chunks.push(vec.drain(0..std::cmp::min(chunk_size, vec.len())).collect()); + } + chunks +} + impl ExecutionRecord { pub fn new(index: u32, program: Arc) -> Self { Self { @@ -160,16 +168,15 @@ impl ExecutionRecord { } } - pub fn shard(self, config: &ShardingConfig) -> Vec { + pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. - let mut shards = self - .cpu_events - .chunks(config.shard_size()) + let mut shards = drain_chunks(&mut self.cpu_events, config.shard_size) + .into_iter() .enumerate() - .map(|(i, chunk)| { + .map(|(i, cpu_chunk)| { let mut shard = ExecutionRecord::default(); shard.index = (i + 1) as u32; - shard.cpu_events = chunk.to_vec(); + shard.cpu_events = cpu_chunk; shard.program = self.program.clone(); shard }) @@ -178,148 +185,137 @@ impl ExecutionRecord { // Shard all the other events according to the configuration. // Shard the ADD events. - for (add_chunk, shard) in self - .add_events - .chunks(config.add_len) + for (add_chunk, shard) in drain_chunks(&mut self.add_events, config.add_len) + .into_iter() .zip(shards.iter_mut()) { - shard.add_events.extend_from_slice(add_chunk); + shard.add_events.extend_from_slice(&add_chunk); } // Shard the MUL events. - for (mul_chunk, shard) in self - .mul_events - .chunks(config.mul_len) + for (mul_chunk, shard) in drain_chunks(&mut self.mul_events, config.mul_len) + .into_iter() .zip(shards.iter_mut()) { - shard.mul_events.extend_from_slice(mul_chunk); + shard.mul_events.extend_from_slice(&mul_chunk); } // Shard the SUB events. - for (sub_chunk, shard) in self - .sub_events - .chunks(config.sub_len) + for (sub_chunk, shard) in drain_chunks(&mut self.sub_events, config.sub_len) + .into_iter() .zip(shards.iter_mut()) { - shard.sub_events.extend_from_slice(sub_chunk); + shard.sub_events.extend_from_slice(&sub_chunk); } // Shard the bitwise events. - for (bitwise_chunk, shard) in self - .bitwise_events - .chunks(config.bitwise_len) + for (bitwise_chunk, shard) in drain_chunks(&mut self.bitwise_events, config.bitwise_len) + .into_iter() .zip(shards.iter_mut()) { - shard.bitwise_events.extend_from_slice(bitwise_chunk); + shard.bitwise_events.extend_from_slice(&bitwise_chunk); } // Shard the shift left events. - for (shift_left_chunk, shard) in self - .shift_left_events - .chunks(config.shift_left_len) - .zip(shards.iter_mut()) + for (shift_left_chunk, shard) in + drain_chunks(&mut self.shift_left_events, config.shift_left_len) + .into_iter() + .zip(shards.iter_mut()) { - shard.shift_left_events.extend_from_slice(shift_left_chunk); + shard.shift_left_events.extend_from_slice(&shift_left_chunk); } // Shard the shift right events. - for (shift_right_chunk, shard) in self - .shift_right_events - .chunks(config.shift_right_len) - .zip(shards.iter_mut()) + for (shift_right_chunk, shard) in + drain_chunks(&mut self.shift_right_events, config.shift_right_len) + .into_iter() + .zip(shards.iter_mut()) { shard .shift_right_events - .extend_from_slice(shift_right_chunk); + .extend_from_slice(&shift_right_chunk); } // Shard the divrem events. - for (divrem_chunk, shard) in self - .divrem_events - .chunks(config.divrem_len) + for (divrem_chunk, shard) in drain_chunks(&mut self.divrem_events, config.divrem_len) + .into_iter() .zip(shards.iter_mut()) { - shard.divrem_events.extend_from_slice(divrem_chunk); + shard.divrem_events.extend_from_slice(&divrem_chunk); } // Shard the LT events. - for (lt_chunk, shard) in self.lt_events.chunks(config.lt_len).zip(shards.iter_mut()) { - shard.lt_events.extend_from_slice(lt_chunk); + for (lt_chunk, shard) in drain_chunks(&mut self.lt_events, config.lt_len) + .into_iter() + .zip(shards.iter_mut()) + { + shard.lt_events.extend_from_slice(<_chunk); } // Shard the field events. - for (field_chunk, shard) in self - .field_events - .chunks(config.field_len) + for (field_chunk, shard) in drain_chunks(&mut self.field_events, config.field_len) + .into_iter() .zip(shards.iter_mut()) { - shard.field_events.extend_from_slice(field_chunk); + shard.field_events.extend_from_slice(&field_chunk); } // Keccak-256 permute events. - for (keccak_chunk, shard) in self - .keccak_permute_events - .chunks(config.keccak_len) - .zip(shards.iter_mut()) + for (keccak_chunk, shard) in + drain_chunks(&mut self.keccak_permute_events, config.keccak_len) + .into_iter() + .zip(shards.iter_mut()) { - shard.keccak_permute_events.extend_from_slice(keccak_chunk); + shard.keccak_permute_events.extend_from_slice(&keccak_chunk); } // Weierstrass curve add events. - for (weierstrass_add_chunk, shard) in self - .weierstrass_add_events - .chunks(config.weierstrass_add_len) - .zip(shards.iter_mut()) + for (weierstrass_add_chunk, shard) in + drain_chunks(&mut self.weierstrass_add_events, config.weierstrass_add_len) + .into_iter() + .zip(shards.iter_mut()) { shard .weierstrass_add_events - .extend_from_slice(weierstrass_add_chunk); + .extend_from_slice(&weierstrass_add_chunk); } // Weierstrass curve double events. - for (weierstrass_double_chunk, shard) in self - .weierstrass_double_events - .chunks(config.weierstrass_double_len) - .zip(shards.iter_mut()) + for (weierstrass_double_chunk, shard) in drain_chunks( + &mut self.weierstrass_double_events, + config.weierstrass_double_len, + ) + .into_iter() + .zip(shards.iter_mut()) { shard .weierstrass_double_events - .extend_from_slice(weierstrass_double_chunk); + .extend_from_slice(&weierstrass_double_chunk); } // Put the precompile events in the first shard. let first = shards.first_mut().unwrap(); // SHA-256 extend events. - first - .sha_extend_events - .extend_from_slice(&self.sha_extend_events); + first.sha_extend_events = std::mem::take(&mut self.sha_extend_events); // SHA-256 compress events. - first - .sha_compress_events - .extend_from_slice(&self.sha_compress_events); + first.sha_compress_events = std::mem::take(&mut self.sha_compress_events); // Edwards curve add events. - first.ed_add_events.extend_from_slice(&self.ed_add_events); + first.ed_add_events = std::mem::take(&mut self.ed_add_events); // Edwards curve decompress events. - first - .ed_decompress_events - .extend_from_slice(&self.ed_decompress_events); + first.ed_decompress_events = std::mem::take(&mut self.ed_decompress_events); // K256 curve decompress events. - first - .k256_decompress_events - .extend_from_slice(&self.k256_decompress_events); + first.k256_decompress_events = std::mem::take(&mut self.k256_decompress_events); // Blake3 compress events . - first - .blake3_compress_inner_events - .extend_from_slice(&self.blake3_compress_inner_events); + first.blake3_compress_inner_events = std::mem::take(&mut self.blake3_compress_inner_events); // Put all byte lookups in the first shard (as the table size is fixed) - first.byte_lookups.extend(&self.byte_lookups); + first.byte_lookups = std::mem::take(&mut self.byte_lookups); // Put the memory records in the last shard. let last_shard = shards.last_mut().unwrap(); diff --git a/examples/chess/script/Cargo.lock b/examples/chess/script/Cargo.lock index 887449de77..b12c14e817 100644 --- a/examples/chess/script/Cargo.lock +++ b/examples/chess/script/Cargo.lock @@ -1030,7 +1030,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1039,7 +1039,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1058,7 +1058,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1081,7 +1081,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1092,7 +1092,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1103,7 +1103,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1121,7 +1121,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1132,7 +1132,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1175,7 +1175,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1183,7 +1183,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1199,7 +1199,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1215,7 +1215,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1230,7 +1230,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1244,7 +1244,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1254,7 +1254,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/ed25519/script/Cargo.lock b/examples/ed25519/script/Cargo.lock index 271b3edd57..1b1a218a3a 100644 --- a/examples/ed25519/script/Cargo.lock +++ b/examples/ed25519/script/Cargo.lock @@ -1030,7 +1030,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1039,7 +1039,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1058,7 +1058,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1081,7 +1081,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1092,7 +1092,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1103,7 +1103,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1121,7 +1121,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1132,7 +1132,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1175,7 +1175,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1183,7 +1183,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1199,7 +1199,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1215,7 +1215,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1230,7 +1230,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1244,7 +1244,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1254,7 +1254,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/fibonacci-io/script/Cargo.lock b/examples/fibonacci-io/script/Cargo.lock index 54200f9fa0..5d670051f3 100644 --- a/examples/fibonacci-io/script/Cargo.lock +++ b/examples/fibonacci-io/script/Cargo.lock @@ -1063,7 +1063,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1072,7 +1072,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1082,7 +1082,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1091,7 +1091,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1103,7 +1103,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1125,7 +1125,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1136,7 +1136,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1154,7 +1154,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1165,7 +1165,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1175,7 +1175,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1184,7 +1184,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1196,7 +1196,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1216,7 +1216,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1232,7 +1232,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1248,7 +1248,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1263,7 +1263,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1277,7 +1277,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1287,7 +1287,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1305,7 +1305,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/fibonacci/script/Cargo.lock b/examples/fibonacci/script/Cargo.lock index 67b28bcb67..26202be091 100644 --- a/examples/fibonacci/script/Cargo.lock +++ b/examples/fibonacci/script/Cargo.lock @@ -1030,7 +1030,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1039,7 +1039,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1058,7 +1058,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1070,7 +1070,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1081,7 +1081,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1092,7 +1092,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1103,7 +1103,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1121,7 +1121,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1132,7 +1132,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1163,7 +1163,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1175,7 +1175,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1183,7 +1183,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1199,7 +1199,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1215,7 +1215,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1230,7 +1230,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1244,7 +1244,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1254,7 +1254,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1272,7 +1272,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/io/script/Cargo.lock b/examples/io/script/Cargo.lock index 76527bd615..cdd9e25330 100644 --- a/examples/io/script/Cargo.lock +++ b/examples/io/script/Cargo.lock @@ -1031,7 +1031,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1040,7 +1040,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1050,7 +1050,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1059,7 +1059,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1071,7 +1071,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1082,7 +1082,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1093,7 +1093,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1104,7 +1104,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1143,7 +1143,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1152,7 +1152,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1164,7 +1164,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1184,7 +1184,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1200,7 +1200,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1216,7 +1216,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1231,7 +1231,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1245,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1255,7 +1255,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1273,7 +1273,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/json/script/Cargo.lock b/examples/json/script/Cargo.lock index b87a4b63d8..5a074c30b4 100644 --- a/examples/json/script/Cargo.lock +++ b/examples/json/script/Cargo.lock @@ -1040,7 +1040,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1049,7 +1049,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1059,7 +1059,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1068,7 +1068,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1080,7 +1080,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1091,7 +1091,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1102,7 +1102,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1113,7 +1113,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1131,7 +1131,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1152,7 +1152,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1161,7 +1161,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1173,7 +1173,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1185,7 +1185,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1209,7 +1209,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1225,7 +1225,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1240,7 +1240,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1254,7 +1254,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1264,7 +1264,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1282,7 +1282,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/regex/script/Cargo.lock b/examples/regex/script/Cargo.lock index 938541fef4..4af6126935 100644 --- a/examples/regex/script/Cargo.lock +++ b/examples/regex/script/Cargo.lock @@ -1023,7 +1023,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1032,7 +1032,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1042,7 +1042,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1051,7 +1051,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1063,7 +1063,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1125,7 +1125,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1135,7 +1135,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1144,7 +1144,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1168,7 +1168,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1192,7 +1192,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1247,7 +1247,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/rsa/script/Cargo.lock b/examples/rsa/script/Cargo.lock index 30bbfaaa6e..51e94412f1 100644 --- a/examples/rsa/script/Cargo.lock +++ b/examples/rsa/script/Cargo.lock @@ -1023,7 +1023,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1032,7 +1032,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1042,7 +1042,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1051,7 +1051,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1063,7 +1063,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1125,7 +1125,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1135,7 +1135,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1144,7 +1144,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1168,7 +1168,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1192,7 +1192,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1247,7 +1247,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/ssz-withdrawals/script/Cargo.lock b/examples/ssz-withdrawals/script/Cargo.lock index 0df54dabff..ed129ed46f 100644 --- a/examples/ssz-withdrawals/script/Cargo.lock +++ b/examples/ssz-withdrawals/script/Cargo.lock @@ -1023,7 +1023,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1032,7 +1032,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1042,7 +1042,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1051,7 +1051,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1063,7 +1063,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1125,7 +1125,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1135,7 +1135,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1144,7 +1144,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1168,7 +1168,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1192,7 +1192,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1247,7 +1247,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] diff --git a/examples/tendermint/script/Cargo.lock b/examples/tendermint/script/Cargo.lock index 1150c72d36..bda1dd6c46 100644 --- a/examples/tendermint/script/Cargo.lock +++ b/examples/tendermint/script/Cargo.lock @@ -1023,7 +1023,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1032,7 +1032,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -1042,7 +1042,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1051,7 +1051,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1063,7 +1063,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1085,7 +1085,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1114,7 +1114,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1125,7 +1125,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1135,7 +1135,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1144,7 +1144,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1168,7 +1168,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1176,7 +1176,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1192,7 +1192,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1208,7 +1208,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1247,7 +1247,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#bfd061406886e5ae007a8014edae59ee7ab35ad5" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] From bf2aaeb7a82b0aeaed2e10a807f61bb7aec4a31c Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 10:10:47 -0800 Subject: [PATCH 10/30] debugging --- core/src/runtime/record.rs | 14 ++++++++++++++ core/src/stark/machine.rs | 2 ++ 2 files changed, 16 insertions(+) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 2de8092b2e..99833a897e 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -170,6 +170,7 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. + println!("sharding"); let mut shards = drain_chunks(&mut self.cpu_events, config.shard_size) .into_iter() .enumerate() @@ -185,6 +186,7 @@ impl ExecutionRecord { // Shard all the other events according to the configuration. // Shard the ADD events. + println!("sharding1"); for (add_chunk, shard) in drain_chunks(&mut self.add_events, config.add_len) .into_iter() .zip(shards.iter_mut()) @@ -193,6 +195,7 @@ impl ExecutionRecord { } // Shard the MUL events. + println!("sharding2"); for (mul_chunk, shard) in drain_chunks(&mut self.mul_events, config.mul_len) .into_iter() .zip(shards.iter_mut()) @@ -201,6 +204,7 @@ impl ExecutionRecord { } // Shard the SUB events. + println!("sharding3"); for (sub_chunk, shard) in drain_chunks(&mut self.sub_events, config.sub_len) .into_iter() .zip(shards.iter_mut()) @@ -209,6 +213,7 @@ impl ExecutionRecord { } // Shard the bitwise events. + println!("sharding4"); for (bitwise_chunk, shard) in drain_chunks(&mut self.bitwise_events, config.bitwise_len) .into_iter() .zip(shards.iter_mut()) @@ -217,6 +222,7 @@ impl ExecutionRecord { } // Shard the shift left events. + println!("sharding5"); for (shift_left_chunk, shard) in drain_chunks(&mut self.shift_left_events, config.shift_left_len) .into_iter() @@ -226,6 +232,7 @@ impl ExecutionRecord { } // Shard the shift right events. + println!("sharding6"); for (shift_right_chunk, shard) in drain_chunks(&mut self.shift_right_events, config.shift_right_len) .into_iter() @@ -237,6 +244,7 @@ impl ExecutionRecord { } // Shard the divrem events. + println!("sharding7"); for (divrem_chunk, shard) in drain_chunks(&mut self.divrem_events, config.divrem_len) .into_iter() .zip(shards.iter_mut()) @@ -245,6 +253,7 @@ impl ExecutionRecord { } // Shard the LT events. + println!("sharding8"); for (lt_chunk, shard) in drain_chunks(&mut self.lt_events, config.lt_len) .into_iter() .zip(shards.iter_mut()) @@ -253,6 +262,7 @@ impl ExecutionRecord { } // Shard the field events. + println!("sharding9"); for (field_chunk, shard) in drain_chunks(&mut self.field_events, config.field_len) .into_iter() .zip(shards.iter_mut()) @@ -261,6 +271,7 @@ impl ExecutionRecord { } // Keccak-256 permute events. + println!("sharding10"); for (keccak_chunk, shard) in drain_chunks(&mut self.keccak_permute_events, config.keccak_len) .into_iter() @@ -270,6 +281,7 @@ impl ExecutionRecord { } // Weierstrass curve add events. + println!("sharding11"); for (weierstrass_add_chunk, shard) in drain_chunks(&mut self.weierstrass_add_events, config.weierstrass_add_len) .into_iter() @@ -281,6 +293,7 @@ impl ExecutionRecord { } // Weierstrass curve double events. + println!("sharding12"); for (weierstrass_double_chunk, shard) in drain_chunks( &mut self.weierstrass_double_events, config.weierstrass_double_len, @@ -294,6 +307,7 @@ impl ExecutionRecord { } // Put the precompile events in the first shard. + println!("sharding13"); let first = shards.first_mut().unwrap(); // SHA-256 extend events. diff --git a/core/src/stark/machine.rs b/core/src/stark/machine.rs index cd9cff7af7..e33d27c534 100644 --- a/core/src/stark/machine.rs +++ b/core/src/stark/machine.rs @@ -104,11 +104,13 @@ impl RiscvStark { // Generate the trace for each chip to collect events emitted from chips with dependencies. chips.iter().for_each(|chip| { + println!("Generating trace for chip: {}", chip.name()); let mut output = ExecutionRecord::default(); output.index = record.index; chip.generate_dependencies(&record, &mut output); record.append(&mut output); }); + println!("Record stats after generate_trace: {:#?}", record.stats()); // Display the statistics about the workload after generate_trace. tracing::info!("Record stats finalized {:#?}", record.stats()); From f39764fc3bfad809eacada6121b4631258c81f06 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 10:37:50 -0800 Subject: [PATCH 11/30] tweak --- core/src/cpu/trace.rs | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index aa458df734..613d81ed52 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -80,6 +80,7 @@ impl MachineAir for CpuChip { let mut new_field_events: Vec = Vec::with_capacity(input.cpu_events.len()); // Generate the trace rows for each event. + println!("starting cpu gen"); let chunk_size = std::cmp::max(input.cpu_events.len() / num_cpus::get(), 1); let events = input .cpu_events @@ -95,24 +96,29 @@ impl MachineAir for CpuChip { .flatten() .collect::>(); + println!("done cpu gen"); + events.into_iter().for_each(|e| { let (alu_events, blu_events, field_events) = e; - for (key, value) in alu_events { + println!("alu_events: {}", alu_events.len()); + println!("blu_events: {}", blu_events.len()); + println!("field_events: {}", field_events.len()); + alu_events.into_iter().for_each(|(key, value)| { new_alu_events .entry(key) - .and_modify(|op_new_events: &mut Vec| { - op_new_events.extend(value.clone()) - }) - .or_insert(value); - } + .or_insert(Vec::default()) + .extend(value); + }); new_blu_events.extend(blu_events); new_field_events.extend(field_events); }); + println!("done events"); // Add the dependency events to the shard. output.add_alu_events(new_alu_events); output.add_byte_lookup_events(new_blu_events); output.add_field_events(&new_field_events); + println!("done cpu") } } From 81413616249d014408c9b5f2f2382a64ebf89cc8 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 11:47:21 -0800 Subject: [PATCH 12/30] test optimization --- core/src/cpu/trace.rs | 62 +++++++++++++++++++++++++++---------------- 1 file changed, 39 insertions(+), 23 deletions(-) diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index 613d81ed52..c7def1d803 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -19,6 +19,7 @@ use p3_maybe_rayon::prelude::IntoParallelRefIterator; use p3_maybe_rayon::prelude::ParallelIterator; use p3_maybe_rayon::prelude::ParallelSlice; use std::borrow::BorrowMut; +use std::sync::{Arc, Mutex}; use tracing::instrument; impl MachineAir for CpuChip { @@ -81,38 +82,53 @@ impl MachineAir for CpuChip { // Generate the trace rows for each event. println!("starting cpu gen"); + println!("cpu events: {}", input.cpu_events.len()); let chunk_size = std::cmp::max(input.cpu_events.len() / num_cpus::get(), 1); let events = input .cpu_events .par_chunks(chunk_size) .map(|ops: &[CpuEvent]| { - ops.iter() - .map(|op| { - let (_, alu_events, blu_events, field_events) = self.event_to_row::(*op); - (alu_events, blu_events, field_events) - }) - .collect::>() + let mut alu_map = HashMap::new(); + let mut blu: Vec<_> = Vec::default(); + let mut field: Vec<_> = Vec::default(); + ops.iter().for_each(|op| { + let (_, alu_events, blu_events, field_events) = self.event_to_row::(*op); + alu_events.into_iter().for_each(|(key, value)| { + alu_map.entry(key).or_insert(Vec::default()).extend(value); + }); + // (blu_events, field_events) + blu.extend(blu_events); + field.extend(field_events); + }); + (alu_map, blu, field) }) - .flatten() .collect::>(); + println!("done events"); - println!("done cpu gen"); - - events.into_iter().for_each(|e| { - let (alu_events, blu_events, field_events) = e; - println!("alu_events: {}", alu_events.len()); - println!("blu_events: {}", blu_events.len()); - println!("field_events: {}", field_events.len()); - alu_events.into_iter().for_each(|(key, value)| { - new_alu_events - .entry(key) - .or_insert(Vec::default()) - .extend(value); + events + .into_iter() + .for_each(|(alu_events, blu_events, field_events)| { + alu_events.into_iter().for_each(|(key, value)| { + new_alu_events + .entry(key) + .or_insert(Vec::default()) + .extend(value); + }); + new_blu_events.extend(blu_events); + new_field_events.extend(field_events); + // v.into_iter().for_each(|e| { + // let (alu_events, blu_events, field_events) = e; + // alu_events.into_iter().for_each(|(key, value)| { + // new_alu_events + // .entry(key) + // .or_insert(Vec::default()) + // .extend(value); + // }); + // new_blu_events.extend(blu_events); + // new_field_events.extend(field_events); + // }) }); - new_blu_events.extend(blu_events); - new_field_events.extend(field_events); - }); - println!("done events"); + println!("done appending"); // Add the dependency events to the shard. output.add_alu_events(new_alu_events); From 8bf4d722eceb9e682a5747a3b85e4308bda7ab01 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 12:24:06 -0800 Subject: [PATCH 13/30] tweak --- core/src/cpu/trace.rs | 1 - core/src/field/mod.rs | 13 +++++++------ core/src/stark/machine.rs | 4 ++++ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index c7def1d803..f722290822 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -81,7 +81,6 @@ impl MachineAir for CpuChip { let mut new_field_events: Vec = Vec::with_capacity(input.cpu_events.len()); // Generate the trace rows for each event. - println!("starting cpu gen"); println!("cpu events: {}", input.cpu_events.len()); let chunk_size = std::cmp::max(input.cpu_events.len() / num_cpus::get(), 1); let events = input diff --git a/core/src/field/mod.rs b/core/src/field/mod.rs index d14f7d580e..05cdc55b20 100644 --- a/core/src/field/mod.rs +++ b/core/src/field/mod.rs @@ -59,10 +59,11 @@ impl MachineAir for FieldLtuChip { _output: &mut ExecutionRecord, ) -> RowMajorMatrix { // Generate the trace rows for each event. - let rows = input + println!("num field events: {}", input.field_events.len()); + let cols = input .field_events .par_iter() - .map(|event| { + .flat_map_iter(|event| { let mut row = [F::zero(); NUM_FIELD_COLS]; let cols: &mut FieldLtuCols = row.as_mut_slice().borrow_mut(); let diff = event.b.wrapping_sub(event.c).wrapping_add(1 << LTU_NB_BITS); @@ -80,15 +81,15 @@ impl MachineAir for FieldLtuChip { row }) .collect::>(); + println!("done flat_map"); // Convert the trace to a row major matrix. - let mut trace = RowMajorMatrix::new( - rows.into_iter().flatten().collect::>(), - NUM_FIELD_COLS, - ); + let mut trace = RowMajorMatrix::new(cols, NUM_FIELD_COLS); + println!("done trace"); // Pad the trace to a power of two. pad_to_power_of_two::(&mut trace.values); + println!("done pad"); trace } diff --git a/core/src/stark/machine.rs b/core/src/stark/machine.rs index e33d27c534..509a843995 100644 --- a/core/src/stark/machine.rs +++ b/core/src/stark/machine.rs @@ -101,6 +101,10 @@ impl RiscvStark { "Record stats before generate_trace (incomplete): {:#?}", record.stats() ); + println!( + "Record stats before generate_trace (incomplete): {:#?}", + record.stats() + ); // Generate the trace for each chip to collect events emitted from chips with dependencies. chips.iter().for_each(|chip| { From 815aa0114ec69092c71d3bb60b0036040a6ae8e2 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 12:48:45 -0800 Subject: [PATCH 14/30] fix field gen deps --- core/src/field/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/field/mod.rs b/core/src/field/mod.rs index 05cdc55b20..f7fa810570 100644 --- a/core/src/field/mod.rs +++ b/core/src/field/mod.rs @@ -52,6 +52,8 @@ impl MachineAir for FieldLtuChip { "FieldLTU".to_string() } + fn generate_dependencies(&self, _input: &ExecutionRecord, _output: &mut ExecutionRecord) {} + #[instrument(name = "generate FieldLTU trace", skip_all)] fn generate_trace( &self, From 4367023bfa965b17c08b1f01427ecca0be5be4c3 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 13:29:25 -0800 Subject: [PATCH 15/30] debug --- core/src/runtime/record.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 99833a897e..3ea5935534 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -153,6 +153,8 @@ pub struct ShardStats { fn drain_chunks(vec: &mut Vec, chunk_size: usize) -> Vec> { let mut chunks = Vec::new(); + assert!(chunk_size > 0, "chunk size must be greater than 0"); + println!("vec len: {}", vec.len()); while !vec.is_empty() { chunks.push(vec.drain(0..std::cmp::min(chunk_size, vec.len())).collect()); } From 3c2ba67bfc1dd82f4ace4d169238e569eb89816d Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 13:48:26 -0800 Subject: [PATCH 16/30] debug --- core/src/runtime/record.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 3ea5935534..936bfa2d99 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -154,8 +154,8 @@ pub struct ShardStats { fn drain_chunks(vec: &mut Vec, chunk_size: usize) -> Vec> { let mut chunks = Vec::new(); assert!(chunk_size > 0, "chunk size must be greater than 0"); - println!("vec len: {}", vec.len()); while !vec.is_empty() { + println!("vec len: {}", vec.len()); chunks.push(vec.drain(0..std::cmp::min(chunk_size, vec.len())).collect()); } chunks From efc571d9221be067b8f04089bec5cf0c908c236e Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 14:11:47 -0800 Subject: [PATCH 17/30] fix sharding --- core/src/runtime/record.rs | 110 +++++++++++++++++++------------------ 1 file changed, 57 insertions(+), 53 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 936bfa2d99..096788f6c2 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -153,9 +153,7 @@ pub struct ShardStats { fn drain_chunks(vec: &mut Vec, chunk_size: usize) -> Vec> { let mut chunks = Vec::new(); - assert!(chunk_size > 0, "chunk size must be greater than 0"); while !vec.is_empty() { - println!("vec len: {}", vec.len()); chunks.push(vec.drain(0..std::cmp::min(chunk_size, vec.len())).collect()); } chunks @@ -173,13 +171,14 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. println!("sharding"); - let mut shards = drain_chunks(&mut self.cpu_events, config.shard_size) - .into_iter() + let mut shards = self + .cpu_events + .chunks_mut(config.shard_size) .enumerate() .map(|(i, cpu_chunk)| { let mut shard = ExecutionRecord::default(); shard.index = (i + 1) as u32; - shard.cpu_events = cpu_chunk; + shard.cpu_events = cpu_chunk.to_vec(); shard.program = self.program.clone(); shard }) @@ -189,123 +188,128 @@ impl ExecutionRecord { // Shard the ADD events. println!("sharding1"); - for (add_chunk, shard) in drain_chunks(&mut self.add_events, config.add_len) - .into_iter() + for (add_chunk, shard) in self + .add_events + .chunks_mut(config.add_len) .zip(shards.iter_mut()) { - shard.add_events.extend_from_slice(&add_chunk); + shard.add_events.extend_from_slice(add_chunk); } // Shard the MUL events. println!("sharding2"); - for (mul_chunk, shard) in drain_chunks(&mut self.mul_events, config.mul_len) - .into_iter() + for (mul_chunk, shard) in self + .mul_events + .chunks_mut(config.mul_len) .zip(shards.iter_mut()) { - shard.mul_events.extend_from_slice(&mul_chunk); + shard.mul_events.extend_from_slice(mul_chunk); } // Shard the SUB events. println!("sharding3"); - for (sub_chunk, shard) in drain_chunks(&mut self.sub_events, config.sub_len) - .into_iter() + for (sub_chunk, shard) in self + .sub_events + .chunks_mut(config.sub_len) .zip(shards.iter_mut()) { - shard.sub_events.extend_from_slice(&sub_chunk); + shard.sub_events.extend_from_slice(sub_chunk); } // Shard the bitwise events. println!("sharding4"); - for (bitwise_chunk, shard) in drain_chunks(&mut self.bitwise_events, config.bitwise_len) - .into_iter() + for (bitwise_chunk, shard) in self + .bitwise_events + .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) { - shard.bitwise_events.extend_from_slice(&bitwise_chunk); + shard.bitwise_events.extend_from_slice(bitwise_chunk); } // Shard the shift left events. println!("sharding5"); - for (shift_left_chunk, shard) in - drain_chunks(&mut self.shift_left_events, config.shift_left_len) - .into_iter() - .zip(shards.iter_mut()) + for (shift_left_chunk, shard) in self + .shift_left_events + .chunks_mut(config.shift_left_len) + .zip(shards.iter_mut()) { - shard.shift_left_events.extend_from_slice(&shift_left_chunk); + shard.shift_left_events.extend_from_slice(shift_left_chunk); } // Shard the shift right events. println!("sharding6"); - for (shift_right_chunk, shard) in - drain_chunks(&mut self.shift_right_events, config.shift_right_len) - .into_iter() - .zip(shards.iter_mut()) + for (shift_right_chunk, shard) in self + .shift_right_events + .chunks_mut(config.shift_right_len) + .zip(shards.iter_mut()) { shard .shift_right_events - .extend_from_slice(&shift_right_chunk); + .extend_from_slice(shift_right_chunk); } // Shard the divrem events. println!("sharding7"); - for (divrem_chunk, shard) in drain_chunks(&mut self.divrem_events, config.divrem_len) - .into_iter() + for (divrem_chunk, shard) in self + .divrem_events + .chunks_mut(config.divrem_len) .zip(shards.iter_mut()) { - shard.divrem_events.extend_from_slice(&divrem_chunk); + shard.divrem_events.extend_from_slice(divrem_chunk); } // Shard the LT events. println!("sharding8"); - for (lt_chunk, shard) in drain_chunks(&mut self.lt_events, config.lt_len) - .into_iter() + for (lt_chunk, shard) in self + .lt_events + .chunks_mut(config.lt_len) .zip(shards.iter_mut()) { - shard.lt_events.extend_from_slice(<_chunk); + shard.lt_events.extend_from_slice(lt_chunk); } // Shard the field events. println!("sharding9"); - for (field_chunk, shard) in drain_chunks(&mut self.field_events, config.field_len) - .into_iter() + for (field_chunk, shard) in self + .field_events + .chunks_mut(config.field_len) .zip(shards.iter_mut()) { - shard.field_events.extend_from_slice(&field_chunk); + shard.field_events.extend_from_slice(field_chunk); } // Keccak-256 permute events. println!("sharding10"); - for (keccak_chunk, shard) in - drain_chunks(&mut self.keccak_permute_events, config.keccak_len) - .into_iter() - .zip(shards.iter_mut()) + for (keccak_chunk, shard) in self + .keccak_permute_events + .chunks_mut(config.keccak_len) + .zip(shards.iter_mut()) { - shard.keccak_permute_events.extend_from_slice(&keccak_chunk); + shard.keccak_permute_events.extend_from_slice(keccak_chunk); } // Weierstrass curve add events. println!("sharding11"); - for (weierstrass_add_chunk, shard) in - drain_chunks(&mut self.weierstrass_add_events, config.weierstrass_add_len) - .into_iter() - .zip(shards.iter_mut()) + for (weierstrass_add_chunk, shard) in self + .weierstrass_add_events + .chunks_mut(config.weierstrass_add_len) + .zip(shards.iter_mut()) { shard .weierstrass_add_events - .extend_from_slice(&weierstrass_add_chunk); + .extend_from_slice(weierstrass_add_chunk); } // Weierstrass curve double events. println!("sharding12"); - for (weierstrass_double_chunk, shard) in drain_chunks( - &mut self.weierstrass_double_events, - config.weierstrass_double_len, - ) - .into_iter() - .zip(shards.iter_mut()) + for (weierstrass_double_chunk, shard) in self + .weierstrass_double_events + .chunks_mut(config.weierstrass_double_len) + .zip(shards.iter_mut()) { shard .weierstrass_double_events - .extend_from_slice(&weierstrass_double_chunk); + .extend_from_slice(weierstrass_double_chunk); } // Put the precompile events in the first shard. From f2ba033be3eb6dcb78e27ac31c0c60fdcb8dc071 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 15:21:41 -0800 Subject: [PATCH 18/30] test --- core/src/runtime/record.rs | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 096788f6c2..f56249d6dc 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -270,13 +270,22 @@ impl ExecutionRecord { // Shard the field events. println!("sharding9"); - for (field_chunk, shard) in self - .field_events - .chunks_mut(config.field_len) - .zip(shards.iter_mut()) - { - shard.field_events.extend_from_slice(field_chunk); - } + println!("num field events: {}", self.field_events.len()); + // for (field_chunk, shard) in self + // .field_events + // .chunks_mut(config.field_len) + // .zip(shards.iter_mut()) + // { + // shard.field_events.extend_from_slice(field_chunk); + // } + let num_shards = shards.len(); + self.field_events + .into_iter() + .enumerate() + .for_each(|(i, event)| { + let shard = &mut shards[i / num_shards]; + shard.field_events.push(event); + }); // Keccak-256 permute events. println!("sharding10"); From e0d4207bd6ddc7144650877072c7b9718045289a Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 15:37:04 -0800 Subject: [PATCH 19/30] fix --- core/src/runtime/record.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index f56249d6dc..1d717d2edd 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -278,12 +278,11 @@ impl ExecutionRecord { // { // shard.field_events.extend_from_slice(field_chunk); // } - let num_shards = shards.len(); self.field_events .into_iter() .enumerate() .for_each(|(i, event)| { - let shard = &mut shards[i / num_shards]; + let shard = &mut shards[i / config.field_len]; shard.field_events.push(event); }); From d4b978ad682da4ce860627e09a698c6cb60709c4 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 15:57:43 -0800 Subject: [PATCH 20/30] cleanup --- core/src/cpu/trace.rs | 43 +++++-------------------------- core/src/field/mod.rs | 4 --- core/src/runtime/record.rs | 52 ++++++++++++++++---------------------- 3 files changed, 29 insertions(+), 70 deletions(-) diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index f722290822..0f6174cad4 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -76,64 +76,35 @@ impl MachineAir for CpuChip { #[instrument(name = "generate CPU dependencies", skip_all)] fn generate_dependencies(&self, input: &ExecutionRecord, output: &mut ExecutionRecord) { - let mut new_alu_events = HashMap::with_capacity(input.cpu_events.len()); - let mut new_blu_events = Vec::with_capacity(input.cpu_events.len()); - let mut new_field_events: Vec = Vec::with_capacity(input.cpu_events.len()); - // Generate the trace rows for each event. - println!("cpu events: {}", input.cpu_events.len()); let chunk_size = std::cmp::max(input.cpu_events.len() / num_cpus::get(), 1); let events = input .cpu_events .par_chunks(chunk_size) .map(|ops: &[CpuEvent]| { - let mut alu_map = HashMap::new(); + let mut alu = HashMap::new(); let mut blu: Vec<_> = Vec::default(); let mut field: Vec<_> = Vec::default(); ops.iter().for_each(|op| { let (_, alu_events, blu_events, field_events) = self.event_to_row::(*op); alu_events.into_iter().for_each(|(key, value)| { - alu_map.entry(key).or_insert(Vec::default()).extend(value); + alu.entry(key).or_insert(Vec::default()).extend(value); }); - // (blu_events, field_events) blu.extend(blu_events); field.extend(field_events); }); - (alu_map, blu, field) + (alu, blu, field) }) .collect::>(); - println!("done events"); events .into_iter() .for_each(|(alu_events, blu_events, field_events)| { - alu_events.into_iter().for_each(|(key, value)| { - new_alu_events - .entry(key) - .or_insert(Vec::default()) - .extend(value); - }); - new_blu_events.extend(blu_events); - new_field_events.extend(field_events); - // v.into_iter().for_each(|e| { - // let (alu_events, blu_events, field_events) = e; - // alu_events.into_iter().for_each(|(key, value)| { - // new_alu_events - // .entry(key) - // .or_insert(Vec::default()) - // .extend(value); - // }); - // new_blu_events.extend(blu_events); - // new_field_events.extend(field_events); - // }) + // Add the dependency events to the shard. + output.add_alu_events(alu_events); + output.add_byte_lookup_events(blu_events); + output.add_field_events(&field_events); }); - println!("done appending"); - - // Add the dependency events to the shard. - output.add_alu_events(new_alu_events); - output.add_byte_lookup_events(new_blu_events); - output.add_field_events(&new_field_events); - println!("done cpu") } } diff --git a/core/src/field/mod.rs b/core/src/field/mod.rs index f7fa810570..db0902f189 100644 --- a/core/src/field/mod.rs +++ b/core/src/field/mod.rs @@ -61,7 +61,6 @@ impl MachineAir for FieldLtuChip { _output: &mut ExecutionRecord, ) -> RowMajorMatrix { // Generate the trace rows for each event. - println!("num field events: {}", input.field_events.len()); let cols = input .field_events .par_iter() @@ -83,15 +82,12 @@ impl MachineAir for FieldLtuChip { row }) .collect::>(); - println!("done flat_map"); // Convert the trace to a row major matrix. let mut trace = RowMajorMatrix::new(cols, NUM_FIELD_COLS); - println!("done trace"); // Pad the trace to a power of two. pad_to_power_of_two::(&mut trace.values); - println!("done pad"); trace } diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 1d717d2edd..deb3b967aa 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -1,5 +1,6 @@ use hashbrown::HashMap; use std::collections::BTreeMap; +use std::mem::take; use std::sync::Arc; use super::program::Program; @@ -171,8 +172,8 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. println!("sharding"); - let mut shards = self - .cpu_events + let mut shards = take(&mut self + .cpu_events) .chunks_mut(config.shard_size) .enumerate() .map(|(i, cpu_chunk)| { @@ -188,8 +189,8 @@ impl ExecutionRecord { // Shard the ADD events. println!("sharding1"); - for (add_chunk, shard) in self - .add_events + for (add_chunk, shard) in take(&mut self + .add_events) .chunks_mut(config.add_len) .zip(shards.iter_mut()) { @@ -198,8 +199,8 @@ impl ExecutionRecord { // Shard the MUL events. println!("sharding2"); - for (mul_chunk, shard) in self - .mul_events + for (mul_chunk, shard) in take(&mut self + .mul_events) .chunks_mut(config.mul_len) .zip(shards.iter_mut()) { @@ -218,8 +219,8 @@ impl ExecutionRecord { // Shard the bitwise events. println!("sharding4"); - for (bitwise_chunk, shard) in self - .bitwise_events + for (bitwise_chunk, shard) in take(&mut self + .bitwise_events) .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) { @@ -228,8 +229,8 @@ impl ExecutionRecord { // Shard the shift left events. println!("sharding5"); - for (shift_left_chunk, shard) in self - .shift_left_events + for (shift_left_chunk, shard) in take(&mut self + .shift_left_events) .chunks_mut(config.shift_left_len) .zip(shards.iter_mut()) { @@ -238,8 +239,8 @@ impl ExecutionRecord { // Shard the shift right events. println!("sharding6"); - for (shift_right_chunk, shard) in self - .shift_right_events + for (shift_right_chunk, shard) in take(&mut self. + .shift_right_events) .chunks_mut(config.shift_right_len) .zip(shards.iter_mut()) { @@ -250,8 +251,7 @@ impl ExecutionRecord { // Shard the divrem events. println!("sharding7"); - for (divrem_chunk, shard) in self - .divrem_events + for (divrem_chunk, shard) in take(&mut self.divrem_events) .chunks_mut(config.divrem_len) .zip(shards.iter_mut()) { @@ -260,8 +260,7 @@ impl ExecutionRecord { // Shard the LT events. println!("sharding8"); - for (lt_chunk, shard) in self - .lt_events + for (lt_chunk, shard) in take(&mut self.lt_events) .chunks_mut(config.lt_len) .zip(shards.iter_mut()) { @@ -271,14 +270,7 @@ impl ExecutionRecord { // Shard the field events. println!("sharding9"); println!("num field events: {}", self.field_events.len()); - // for (field_chunk, shard) in self - // .field_events - // .chunks_mut(config.field_len) - // .zip(shards.iter_mut()) - // { - // shard.field_events.extend_from_slice(field_chunk); - // } - self.field_events + take(&mut self.field_events) .into_iter() .enumerate() .for_each(|(i, event)| { @@ -288,8 +280,8 @@ impl ExecutionRecord { // Keccak-256 permute events. println!("sharding10"); - for (keccak_chunk, shard) in self - .keccak_permute_events + for (keccak_chunk, shard) in take(&mut self + .keccak_permute_events) .chunks_mut(config.keccak_len) .zip(shards.iter_mut()) { @@ -298,8 +290,8 @@ impl ExecutionRecord { // Weierstrass curve add events. println!("sharding11"); - for (weierstrass_add_chunk, shard) in self - .weierstrass_add_events + for (weierstrass_add_chunk, shard) in take(&mut self + .weierstrass_add_events) .chunks_mut(config.weierstrass_add_len) .zip(shards.iter_mut()) { @@ -310,8 +302,8 @@ impl ExecutionRecord { // Weierstrass curve double events. println!("sharding12"); - for (weierstrass_double_chunk, shard) in self - .weierstrass_double_events + for (weierstrass_double_chunk, shard) in take(&mut self + .weierstrass_double_events) .chunks_mut(config.weierstrass_double_len) .zip(shards.iter_mut()) { From 2a960efd1da57ae187707d44e6611cf1740e20f0 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Tue, 5 Mar 2024 15:58:22 -0800 Subject: [PATCH 21/30] fix --- core/src/runtime/record.rs | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index deb3b967aa..1a1a79f025 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -172,8 +172,7 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. println!("sharding"); - let mut shards = take(&mut self - .cpu_events) + let mut shards = take(&mut self.cpu_events) .chunks_mut(config.shard_size) .enumerate() .map(|(i, cpu_chunk)| { @@ -189,8 +188,7 @@ impl ExecutionRecord { // Shard the ADD events. println!("sharding1"); - for (add_chunk, shard) in take(&mut self - .add_events) + for (add_chunk, shard) in take(&mut self.add_events) .chunks_mut(config.add_len) .zip(shards.iter_mut()) { @@ -199,8 +197,7 @@ impl ExecutionRecord { // Shard the MUL events. println!("sharding2"); - for (mul_chunk, shard) in take(&mut self - .mul_events) + for (mul_chunk, shard) in take(&mut self.mul_events) .chunks_mut(config.mul_len) .zip(shards.iter_mut()) { @@ -219,8 +216,7 @@ impl ExecutionRecord { // Shard the bitwise events. println!("sharding4"); - for (bitwise_chunk, shard) in take(&mut self - .bitwise_events) + for (bitwise_chunk, shard) in take(&mut self.bitwise_events) .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) { @@ -229,8 +225,7 @@ impl ExecutionRecord { // Shard the shift left events. println!("sharding5"); - for (shift_left_chunk, shard) in take(&mut self - .shift_left_events) + for (shift_left_chunk, shard) in take(&mut self.shift_left_events) .chunks_mut(config.shift_left_len) .zip(shards.iter_mut()) { @@ -239,8 +234,7 @@ impl ExecutionRecord { // Shard the shift right events. println!("sharding6"); - for (shift_right_chunk, shard) in take(&mut self. - .shift_right_events) + for (shift_right_chunk, shard) in take(&mut self.shift_right_events) .chunks_mut(config.shift_right_len) .zip(shards.iter_mut()) { @@ -280,8 +274,7 @@ impl ExecutionRecord { // Keccak-256 permute events. println!("sharding10"); - for (keccak_chunk, shard) in take(&mut self - .keccak_permute_events) + for (keccak_chunk, shard) in take(&mut self.keccak_permute_events) .chunks_mut(config.keccak_len) .zip(shards.iter_mut()) { @@ -290,8 +283,7 @@ impl ExecutionRecord { // Weierstrass curve add events. println!("sharding11"); - for (weierstrass_add_chunk, shard) in take(&mut self - .weierstrass_add_events) + for (weierstrass_add_chunk, shard) in take(&mut self.weierstrass_add_events) .chunks_mut(config.weierstrass_add_len) .zip(shards.iter_mut()) { @@ -302,8 +294,7 @@ impl ExecutionRecord { // Weierstrass curve double events. println!("sharding12"); - for (weierstrass_double_chunk, shard) in take(&mut self - .weierstrass_double_events) + for (weierstrass_double_chunk, shard) in take(&mut self.weierstrass_double_events) .chunks_mut(config.weierstrass_double_len) .zip(shards.iter_mut()) { From b1ba20f61003be9d3c55dde9a6298c77bd9469cd Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 00:26:30 -0800 Subject: [PATCH 22/30] fix --- core/src/runtime/record.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 1a1a79f025..bc8ddf43d0 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -206,8 +206,7 @@ impl ExecutionRecord { // Shard the SUB events. println!("sharding3"); - for (sub_chunk, shard) in self - .sub_events + for (sub_chunk, shard) in take(&mut self.sub_events) .chunks_mut(config.sub_len) .zip(shards.iter_mut()) { From 67610a7022dbdaec73485e44faf1b09c6bc82d5e Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 16:04:38 -0800 Subject: [PATCH 23/30] cleanup --- Cargo.lock | 272 +- core/Cargo.toml | 5 - core/src/cpu/trace.rs | 1 - core/src/runtime/record.rs | 49 +- core/src/stark/machine.rs | 6 - examples/chess/script/Cargo.lock | 216 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 197136 -> 197200 bytes examples/ed25519/script/Cargo.lock | 2314 +++++++++++++++++ .../program/elf/riscv32im-succinct-zkvm-elf | Bin 102880 -> 103028 bytes examples/fibonacci-io/script/Cargo.lock | 216 +- examples/fibonacci/script/Cargo.lock | 216 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 167788 -> 167764 bytes examples/io/script/Cargo.lock | 216 +- examples/json/script/Cargo.lock | 216 +- examples/regex/script/Cargo.lock | 216 +- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 315524 -> 315468 bytes examples/rsa/script/Cargo.lock | 216 +- examples/ssz-withdrawals/script/Cargo.lock | 216 +- examples/tendermint/script/Cargo.lock | 216 +- 19 files changed, 4105 insertions(+), 486 deletions(-) create mode 100644 examples/ed25519/script/Cargo.lock diff --git a/Cargo.lock b/Cargo.lock index 62ddc49819..995a9bc053 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b79b82693f705137f8fb9b37871d99e4f9a7df12b917eed79c3d3954830a60b" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" dependencies = [ "cfg-if", "once_cell", @@ -295,10 +295,11 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.0.88" +version = "1.0.89" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02f341c093d19155a6e41631ce5971aac4e9a868262212153124c15fa22d1cdc" +checksum = "a0ba8f7aaa012f30d5b2861462f6708eccd49c3c39863fe083a308035f63d723" dependencies = [ + "jobserver", "libc", ] @@ -310,21 +311,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.34" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bc015644b92d5890fab7489e49d21f879d5c990186827d42ec511919404f38b" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", -<<<<<<< HEAD "serde", - "windows-targets 0.52.3", -||||||| b94e34b2 - "windows-targets 0.52.3", -======= "windows-targets 0.52.4", ->>>>>>> origin/main ] [[package]] @@ -356,9 +351,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c918d541ef2913577a0f9566e9ce27cb35b6df072075769e0b26cb5a554520da" +checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651" dependencies = [ "clap_builder", "clap_derive", @@ -366,9 +361,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.1" +version = "4.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f3e7391dad68afb0c2ede1bf619f579a3dc9c2ec67f089baa397123a2f3d1eb" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" dependencies = [ "anstream", "anstyle", @@ -617,7 +612,7 @@ dependencies = [ "proc-macro2", "quote", "strsim 0.10.0", - "syn 2.0.51", + "syn 2.0.52", ] [[package]] @@ -628,7 +623,7 @@ checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ "darling_core", "quote", - "syn 2.0.51", + "syn 2.0.52", ] [[package]] @@ -1017,7 +1012,7 @@ dependencies = [ "futures-sink", "futures-util", "http", - "indexmap 2.2.3", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1079,9 +1074,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8947b1a6fad4393052c7ba1f4cd97bed3e953a95c79c92ad9b051a04611d9fbb" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ "bytes", "fnv", @@ -1201,9 +1196,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.2.3" +version = "2.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" dependencies = [ "equivalent", "hashbrown 0.14.3", @@ -1263,11 +1258,20 @@ version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" +[[package]] +name = "jobserver" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab46a6e9526ddef3ae7f787c06f0f2600639ba80ea3eade3d8e670a2230f51d6" +dependencies = [ + "libc", +] + [[package]] name = "js-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "406cda4b368d531c842222cf9d2600a9a4acce8d29423695379c6868a143a9ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ "wasm-bindgen", ] @@ -1393,9 +1397,9 @@ dependencies = [ [[package]] name = "mio" -version = "0.8.10" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f3d0b296e374a4e6f3c7b0a1f5a51d748a0d34c85e7dc48fc3fa9a87657fe09" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi", @@ -1577,13 +1581,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-matrix", @@ -1592,13 +1590,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "rand", @@ -1608,13 +1600,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "blake3", "p3-symmetric", @@ -1623,13 +1609,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1641,13 +1621,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-challenger", "p3-field", @@ -1658,13 +1632,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-matrix", @@ -1675,13 +1643,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-util", @@ -1692,13 +1654,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -1716,13 +1672,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-util", @@ -1733,13 +1683,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-matrix", @@ -1749,13 +1693,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1764,13 +1702,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-air", "p3-field", @@ -1782,13 +1714,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1800,13 +1726,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "rayon", ] @@ -1814,13 +1734,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1836,13 +1750,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-commit", @@ -1858,13 +1766,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-dft", @@ -1879,13 +1781,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "p3-baby-bear", "p3-field", @@ -1899,13 +1795,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-field", @@ -1915,13 +1805,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "itertools 0.12.1", "p3-air", @@ -1939,13 +1823,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -<<<<<<< HEAD -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" -||||||| b94e34b2 -source = "git+https://github.com/succinctlabs/plonky3.git#731ff62c311ebef7bb4bac1afd36934524f86d4f" -======= -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" ->>>>>>> origin/main +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" dependencies = [ "serde", ] @@ -1992,7 +1870,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap 2.2.3", + "indexmap 2.2.5", ] [[package]] @@ -2181,7 +2059,7 @@ checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.5", + "regex-automata 0.4.6", "regex-syntax 0.8.2", ] @@ -2196,9 +2074,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -2467,7 +2345,7 @@ dependencies = [ "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.2.3", + "indexmap 2.2.5", "serde", "serde_derive", "serde_json", @@ -2484,7 +2362,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.51", + "syn 2.0.52", ] [[package]] @@ -3003,7 +2881,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.3", + "indexmap 2.2.5", "toml_datetime", "winnow", ] @@ -3183,9 +3061,9 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "walkdir" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d71d857dc86794ca4c280d616f7da00d2dbfd8cd788846559a6813e6aa4b54ee" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" dependencies = [ "same-file", "winapi-util", @@ -3208,9 +3086,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1e124130aee3fb58c5bdd6b639a0509486b0338acaaae0c84a5124b0f588b7f" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3218,9 +3096,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e7e1900c352b609c8488ad12639a311045f40a35491fb69ba8c12f758af70b" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", @@ -3233,9 +3111,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.41" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877b9c3f61ceea0e56331985743b13f3d25c406a7098d45180fb5f09bc19ed97" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -3245,9 +3123,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b30af9e2d358182b5c7449424f017eba305ed32a7010509ede96cdc4696c46ed" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3255,9 +3133,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "642f325be6301eb8107a83d12a8ac6c1e1c54345a7ef1a9261962dfefda09e66" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -3268,9 +3146,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.91" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "wasm-streams" @@ -3287,9 +3165,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.68" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96565907687f7aceb35bc5fc03770a8a0471d82e479f25832f54a0e3f4b28446" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/core/Cargo.toml b/core/Cargo.toml index bd9e4aa253..edded52906 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -6,10 +6,6 @@ version = "0.1.0" [dependencies] bincode = "1.3.3" serde = { version = "1.0", features = ["derive", "rc"] } -p3-field = { workspace = true } -p3-air = { workspace = true } -p3-matrix = { workspace = true } -p3-baby-bear = { workspace = true } elf = "0.7.4" itertools = "0.12.0" lazy_static = "1.4" @@ -36,7 +32,6 @@ p3-symmetric = {workspace = true} p3-uni-stark = {workspace = true} p3-util = {workspace = true} rrs-lib = {git = "https://github.com/GregAC/rrs.git"} -serde = {version = "1.0", features = ["derive"]} sp1-derive = {path = "../derive"} anyhow = "1.0.79" diff --git a/core/src/cpu/trace.rs b/core/src/cpu/trace.rs index 749d6df07a..d93e9a6a34 100644 --- a/core/src/cpu/trace.rs +++ b/core/src/cpu/trace.rs @@ -16,7 +16,6 @@ use p3_maybe_rayon::prelude::IntoParallelRefIterator; use p3_maybe_rayon::prelude::ParallelIterator; use p3_maybe_rayon::prelude::ParallelSlice; use std::borrow::BorrowMut; -use std::sync::{Arc, Mutex}; use tracing::instrument; impl MachineAir for CpuChip { diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index bc8ddf43d0..e4987cf5db 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -152,14 +152,6 @@ pub struct ShardStats { pub nb_k256_decompress_events: usize, } -fn drain_chunks(vec: &mut Vec, chunk_size: usize) -> Vec> { - let mut chunks = Vec::new(); - while !vec.is_empty() { - chunks.push(vec.drain(0..std::cmp::min(chunk_size, vec.len())).collect()); - } - chunks -} - impl ExecutionRecord { pub fn new(index: u32, program: Arc) -> Self { Self { @@ -171,23 +163,25 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. - println!("sharding"); - let mut shards = take(&mut self.cpu_events) - .chunks_mut(config.shard_size) - .enumerate() - .map(|(i, cpu_chunk)| { - let mut shard = ExecutionRecord::default(); - shard.index = (i + 1) as u32; - shard.cpu_events = cpu_chunk.to_vec(); - shard.program = self.program.clone(); - shard - }) - .collect::>(); + let mut shards = Vec::new(); + while !self.cpu_events.is_empty() { + // Iterate from end so we can truncate cpu_events as we go. + let index = self.cpu_events.len() / config.shard_size; + let start = index * config.shard_size; + let end = std::cmp::min(start + config.shard_size, self.cpu_events.len()); + let chunk = self.cpu_events[start..end].to_vec(); + self.cpu_events.truncate(start); + let mut shard = ExecutionRecord::default(); + shard.index = (index + 1) as u32; + shard.cpu_events = chunk; + shard.program = self.program.clone(); + shards.push(shard); + } + shards.reverse(); // Shard all the other events according to the configuration. // Shard the ADD events. - println!("sharding1"); for (add_chunk, shard) in take(&mut self.add_events) .chunks_mut(config.add_len) .zip(shards.iter_mut()) @@ -196,7 +190,6 @@ impl ExecutionRecord { } // Shard the MUL events. - println!("sharding2"); for (mul_chunk, shard) in take(&mut self.mul_events) .chunks_mut(config.mul_len) .zip(shards.iter_mut()) @@ -205,7 +198,6 @@ impl ExecutionRecord { } // Shard the SUB events. - println!("sharding3"); for (sub_chunk, shard) in take(&mut self.sub_events) .chunks_mut(config.sub_len) .zip(shards.iter_mut()) @@ -214,7 +206,6 @@ impl ExecutionRecord { } // Shard the bitwise events. - println!("sharding4"); for (bitwise_chunk, shard) in take(&mut self.bitwise_events) .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) @@ -223,7 +214,6 @@ impl ExecutionRecord { } // Shard the shift left events. - println!("sharding5"); for (shift_left_chunk, shard) in take(&mut self.shift_left_events) .chunks_mut(config.shift_left_len) .zip(shards.iter_mut()) @@ -232,7 +222,6 @@ impl ExecutionRecord { } // Shard the shift right events. - println!("sharding6"); for (shift_right_chunk, shard) in take(&mut self.shift_right_events) .chunks_mut(config.shift_right_len) .zip(shards.iter_mut()) @@ -243,7 +232,6 @@ impl ExecutionRecord { } // Shard the divrem events. - println!("sharding7"); for (divrem_chunk, shard) in take(&mut self.divrem_events) .chunks_mut(config.divrem_len) .zip(shards.iter_mut()) @@ -252,7 +240,6 @@ impl ExecutionRecord { } // Shard the LT events. - println!("sharding8"); for (lt_chunk, shard) in take(&mut self.lt_events) .chunks_mut(config.lt_len) .zip(shards.iter_mut()) @@ -261,8 +248,6 @@ impl ExecutionRecord { } // Shard the field events. - println!("sharding9"); - println!("num field events: {}", self.field_events.len()); take(&mut self.field_events) .into_iter() .enumerate() @@ -272,7 +257,6 @@ impl ExecutionRecord { }); // Keccak-256 permute events. - println!("sharding10"); for (keccak_chunk, shard) in take(&mut self.keccak_permute_events) .chunks_mut(config.keccak_len) .zip(shards.iter_mut()) @@ -281,7 +265,6 @@ impl ExecutionRecord { } // Weierstrass curve add events. - println!("sharding11"); for (weierstrass_add_chunk, shard) in take(&mut self.weierstrass_add_events) .chunks_mut(config.weierstrass_add_len) .zip(shards.iter_mut()) @@ -292,7 +275,6 @@ impl ExecutionRecord { } // Weierstrass curve double events. - println!("sharding12"); for (weierstrass_double_chunk, shard) in take(&mut self.weierstrass_double_events) .chunks_mut(config.weierstrass_double_len) .zip(shards.iter_mut()) @@ -303,7 +285,6 @@ impl ExecutionRecord { } // Put the precompile events in the first shard. - println!("sharding13"); let first = shards.first_mut().unwrap(); // SHA-256 extend events. diff --git a/core/src/stark/machine.rs b/core/src/stark/machine.rs index cb4dafdb1b..7f782e632a 100644 --- a/core/src/stark/machine.rs +++ b/core/src/stark/machine.rs @@ -101,20 +101,14 @@ impl RiscvStark { "Record stats before generate_trace (incomplete): {:#?}", record.stats() ); - println!( - "Record stats before generate_trace (incomplete): {:#?}", - record.stats() - ); // Generate the trace for each chip to collect events emitted from chips with dependencies. chips.iter().for_each(|chip| { - println!("Generating trace for chip: {}", chip.name()); let mut output = ExecutionRecord::default(); output.index = record.index; chip.generate_dependencies(&record, &mut output); record.append(&mut output); }); - println!("Record stats after generate_trace: {:#?}", record.stats()); // Display the statistics about the workload after generate_trace. tracing::info!("Record stats finalized {:#?}", record.stats()); diff --git a/examples/chess/script/Cargo.lock b/examples/chess/script/Cargo.lock index 7a7ac3ff3d..1c214f24f5 100644 --- a/examples/chess/script/Cargo.lock +++ b/examples/chess/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -262,6 +268,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -284,7 +291,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -427,6 +434,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -434,7 +476,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -450,6 +492,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -567,6 +619,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -677,6 +735,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -737,6 +801,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -744,7 +825,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -893,6 +975,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -980,7 +1068,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -989,7 +1077,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -999,7 +1087,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1008,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1020,7 +1108,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1031,7 +1119,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1042,7 +1130,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1053,7 +1141,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1071,7 +1159,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1082,7 +1170,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1092,7 +1180,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1101,7 +1189,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1113,7 +1201,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1125,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1133,7 +1221,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1149,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1165,7 +1253,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1180,7 +1268,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1194,7 +1282,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1204,7 +1292,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1222,7 +1310,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1263,7 +1351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1294,6 +1382,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1539,6 +1633,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1629,7 +1753,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1661,6 +1785,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1699,6 +1824,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1775,6 +1906,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1796,7 +1958,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/ed25519/program/elf/riscv32im-succinct-zkvm-elf b/examples/ed25519/program/elf/riscv32im-succinct-zkvm-elf index fb4ef4bfe858ce1a2904f5558fef7e78fd29a10a..fca30b7172689a9c08ee4f438ee71bdbb8f46044 100755 GIT binary patch delta 49351 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 delta 49505 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 VC0L@F7_^rHuQ-AN;B84@002`(oj3ph diff --git a/examples/ed25519/script/Cargo.lock b/examples/ed25519/script/Cargo.lock new file mode 100644 index 0000000000..1e36adbd0e --- /dev/null +++ b/examples/ed25519/script/Cargo.lock @@ -0,0 +1,2314 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "allocator-api2" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "ansi_term" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" +dependencies = [ + "winapi", +] + +[[package]] +name = "anstream" +version = "0.6.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d96bd03f33fe50a863e394ee9718a706f988b9079b20c3784fb726e7678b62fb" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8901269c6307e8d93993578286ac0edf7f195079ffff5ebdeea6a59ffb7e36bc" + +[[package]] +name = "anstyle-parse" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c75ac65da39e5fe5ab759307499ddad880d724eed2f6ce5b5e8a26f4f387928c" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28923312444cdd728e4738b3f9c9cac739500909bb3d3c94b43551b16517648" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd54b81ec8d6180e24654d0b371ad22fc3dd083b6ff8ba325b72e00c87660a7" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" + +[[package]] +name = "arrayref" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6b4930d2cb77ce62f89ee5d5289b4ac049559b1c45539271f5ed4fdc7db34545" + +[[package]] +name = "arrayvec" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711" + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bincode" +version = "1.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" +dependencies = [ + "serde", +] + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" + +[[package]] +name = "blake3" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0231f06152bf547e9c2b5194f247cd97aacf6dcd8b15d8e5ec0663f64580da87" +dependencies = [ + "arrayref", + "arrayvec", + "cc", + "cfg-if", + "constant_time_eq", + "rayon", +] + +[[package]] +name = "blake3-zkvm" +version = "0.1.0" +source = "git+https://github.com/sp1-patches/BLAKE3.git?branch=patch-blake3_zkvm/v.1.0.0#bac2d59f9122b07a4d91475560b4c3214ae62444" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ea184aa71bb362a1157c896979544cc23974e08fd265f29ea96b59f0b4a555b" + +[[package]] +name = "camino" +version = "1.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59e92b5a388f549b863a7bea62612c09f24c8393560709a54558a9abdfb3b9c" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo-platform" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "694c8807f2ae16faecc43dc17d74b3eb042482789fd0eb64b39a2e04e087053f" +dependencies = [ + "serde", +] + +[[package]] +name = "cargo_metadata" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d886547e41f740c616ae73108f6eb70afe6d940c7bc697cb30f13daec073037" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "cc" +version = "1.0.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0ba8f7aaa012f30d5b2861462f6708eccd49c3c39863fe083a308035f63d723" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "num-traits", + "serde", + "windows-targets 0.52.4", +] + +[[package]] +name = "clap" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b230ab84b0ffdf890d5a10abdbc8b83ae1c4918275daea1ab8801f71536b2651" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim 0.11.0", +] + +[[package]] +name = "clap_derive" +version = "4.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "307bc0538d5f0f83b8248db3087aa92fe504e4691294d0c96c0eabc33f47ba47" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "constant_time_eq" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7144d30dcf0fafbce74250a3963025d8d52177934239851c917d29f1df280c2" + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3855a8a784b474f333699ef2bbca9db2c4a1f6d9088a90a2d25b1eb53111eaa" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" + +[[package]] +name = "crunchy" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "curve25519-dalek" +version = "4.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f711ade317dd348950a9910f81c5947e3d8907ebd2b83f76203ff1807e6a2bc2" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "fiat-crypto", + "platforms", + "rustc_version", + "subtle", + "zeroize", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.52", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.3", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "der" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fffa369a668c8af7dbf8b5e56c9f744fbd399949ed171606040001947de40b1c" +dependencies = [ + "const-oid", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "downcast-rs" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ea835d29036a4087793836fa931b08837ad5e957da9e23886b29586fb9b6650" + +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519-script" +version = "0.1.0" +dependencies = [ + "sp1-core", + "sp1-helper", +] + +[[package]] +name = "either" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" + +[[package]] +name = "elf" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4445909572dbd556c457c849c4ca58623d84b27c8fff1e74b0b4227d8b90d17b" + +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + +[[package]] +name = "ff" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.1.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77" + +[[package]] +name = "fixedbitset" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" + +[[package]] +name = "flate2" +version = "1.0.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46303f565772937ffe1d394a4fac6f411c6013172fadde9dcdb1e147a086940e" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "futures" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" + +[[package]] +name = "futures-executor" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" + +[[package]] +name = "futures-sink" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" + +[[package]] +name = "futures-task" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" + +[[package]] +name = "futures-util" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + +[[package]] +name = "getrandom" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +dependencies = [ + "ahash", + "allocator-api2", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", + "serde", +] + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "k256" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "956ff9b67e26e1a6a866cb758f12c6f8746208489e3e4a4b5580802f2f0a587b" +dependencies = [ + "cfg-if", + "ecdsa", + "elliptic-curve", + "once_cell", + "sha2", + "signature", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.153" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" + +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + +[[package]] +name = "lock_api" +version = "0.4.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "memchr" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" + +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + +[[package]] +name = "nohash-hasher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451" + +[[package]] +name = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23c6602fda94a57c990fe0df199a035d83576b496aa29f4e634a8ac6004e68a6" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d869c01cc0c455284163fd0092f1f93835385ccab5a98a0dcc497b2f8bf055a9" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" +dependencies = [ + "autocfg", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi", + "libc", +] + +[[package]] +name = "num_enum" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f646caf906c20226733ed5b1374287eb97e3c2a5c227ce668c1f2ce20ae57c9" +dependencies = [ + "num_enum_derive", +] + +[[package]] +name = "num_enum_derive" +version = "0.5.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcbff9bc912032c62bf65ef1d5aea88983b420f4f839db1e9b0c281a25c9c799" +dependencies = [ + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[package]] +name = "p3-air" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-matrix", +] + +[[package]] +name = "p3-baby-bear" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "rand", + "serde", +] + +[[package]] +name = "p3-blake3" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "blake3", + "p3-symmetric", +] + +[[package]] +name = "p3-challenger" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-commit" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-challenger", + "p3-field", + "p3-matrix", + "serde", +] + +[[package]] +name = "p3-dft" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", +] + +[[package]] +name = "p3-field" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-fri" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-interpolation", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-goldilocks" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-interpolation" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-matrix", + "p3-util", +] + +[[package]] +name = "p3-keccak" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-symmetric", + "tiny-keccak", +] + +[[package]] +name = "p3-keccak-air" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-air", + "p3-field", + "p3-matrix", + "p3-util", + "tracing", +] + +[[package]] +name = "p3-matrix" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-field", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-maybe-rayon" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "rayon", +] + +[[package]] +name = "p3-mds" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-baby-bear", + "p3-dft", + "p3-field", + "p3-goldilocks", + "p3-matrix", + "p3-mersenne-31", + "p3-symmetric", + "p3-util", + "rand", +] + +[[package]] +name = "p3-merkle-tree" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-commit", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-symmetric", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-mersenne-31" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "rand", + "serde", +] + +[[package]] +name = "p3-poseidon2" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "p3-baby-bear", + "p3-field", + "p3-goldilocks", + "p3-mds", + "p3-mersenne-31", + "p3-symmetric", + "rand", +] + +[[package]] +name = "p3-symmetric" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-field", + "serde", +] + +[[package]] +name = "p3-uni-stark" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "itertools", + "p3-air", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-matrix", + "p3-maybe-rayon", + "p3-util", + "serde", + "tracing", +] + +[[package]] +name = "p3-util" +version = "0.1.0" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +dependencies = [ + "serde", +] + +[[package]] +name = "parking_lot" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.48.5", +] + +[[package]] +name = "paste" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3145af08024dea9fa9914f381a17b8fc6034dfb00f3a84013f7ff43f29ed4c" + +[[package]] +name = "petgraph" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" +dependencies = [ + "fixedbitset", + "indexmap 2.2.5", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "platforms" +version = "3.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-crate" +version = "1.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f4c021e1093a56626774e81216a4ce732a735e5bad4868a03f3ed65ca0c3919" +dependencies = [ + "once_cell", + "toml_edit", +] + +[[package]] +name = "proc-macro2" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "redox_syscall" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +dependencies = [ + "bitflags 1.3.2", +] + +[[package]] +name = "regex" +version = "1.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.6", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.2", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" + +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + +[[package]] +name = "rrs-lib" +version = "0.1.0" +source = "git+https://github.com/GregAC/rrs.git#b23afc16b4e6a1fb5c4a73eb1e337e9400816507" +dependencies = [ + "downcast-rs", + "num_enum", + "paste", +] + +[[package]] +name = "rustc_version" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ea3e1a662af26cd7a3ba09c0297a31af215563ecf42817c98df621387f4e949" +dependencies = [ + "bitflags 2.4.2", + "errno", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + +[[package]] +name = "semver" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92d43fe69e652f3df9bdc2b85b2854a0825b86e4fb76bc44d945137d053639ca" +dependencies = [ + "serde", +] + +[[package]] +name = "serde" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.197" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "serde_json" +version = "1.0.114" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.5", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "serial_test" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ad9342b3aaca7cb43c45c097dd008d4907070394bd0751a0aa8817e5a018d" +dependencies = [ + "dashmap", + "futures", + "lazy_static", + "log", + "parking_lot", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b93fb4adc70021ac1b47f7d45e8cc4169baaa7ea58483bc5b721d19a26202212" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "size" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fed904c7fb2856d868b92464fc8fa597fce366edea1a9cbfaa8cb5fe080bd6d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "smallvec" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" + +[[package]] +name = "sp1-core" +version = "0.1.0" +dependencies = [ + "anyhow", + "bincode", + "blake3", + "blake3-zkvm", + "cfg-if", + "clap", + "curve25519-dalek", + "elf", + "elliptic-curve", + "flate2", + "hashbrown 0.14.3", + "hex", + "itertools", + "k256", + "lazy_static", + "log", + "nohash-hasher", + "num", + "num_cpus", + "p3-air", + "p3-baby-bear", + "p3-blake3", + "p3-challenger", + "p3-commit", + "p3-dft", + "p3-field", + "p3-fri", + "p3-goldilocks", + "p3-keccak", + "p3-keccak-air", + "p3-matrix", + "p3-maybe-rayon", + "p3-mds", + "p3-merkle-tree", + "p3-poseidon2", + "p3-symmetric", + "p3-uni-stark", + "p3-util", + "petgraph", + "rrs-lib", + "serde", + "serde_json", + "serde_with", + "serial_test", + "size", + "sp1-derive", + "tempfile", + "tiny-keccak", + "tracing", + "tracing-forest", + "tracing-log", + "tracing-subscriber", +] + +[[package]] +name = "sp1-derive" +version = "0.1.0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "sp1-helper" +version = "0.1.0" +dependencies = [ + "cargo_metadata", + "chrono", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "strsim" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ee073c9e4cd00e28217186dbe12796d692868f432bf2e97ee73bed0c56dfa01" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.52" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b699d15b36d1f02c3e7c69f8ffef53de37aefae075d8488d4ba1a7788d574a07" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempfile" +version = "3.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +dependencies = [ + "cfg-if", + "fastrand", + "rustix", + "windows-sys", +] + +[[package]] +name = "thiserror" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e45bcbe8ed29775f228095caf2cd67af7a4ccf756ebff23a306bf3e8b47b24b" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.57" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a953cb265bef375dae3de6663da4d3804eee9682ea80d8e2542529b73c531c81" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tiny-keccak" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" +dependencies = [ + "crunchy", +] + +[[package]] +name = "toml_datetime" +version = "0.6.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" + +[[package]] +name = "toml_edit" +version = "0.19.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" +dependencies = [ + "indexmap 2.2.5", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "tracing-core" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-forest" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee40835db14ddd1e3ba414292272eddde9dad04d3d4b65509656414d1c42592f" +dependencies = [ + "ansi_term", + "smallvec", + "thiserror", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.52", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.4", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" +dependencies = [ + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" + +[[package]] +name = "winnow" +version = "0.5.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" +dependencies = [ + "memchr", +] + +[[package]] +name = "zerocopy" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.52", +] + +[[package]] +name = "zeroize" +version = "1.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "525b4ec142c6b68a2d10f01f7bbf6755599ca3f81ea53b8431b7dd348f5fdb2d" diff --git a/examples/fibonacci-io/program/elf/riscv32im-succinct-zkvm-elf b/examples/fibonacci-io/program/elf/riscv32im-succinct-zkvm-elf index a591d897f41c48128c24b548abdb2a7647d03a03..9767fccd19f3376dfc4541e47856872fc7126209 100755 GIT binary patch literal 103028 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%0DhcIC&xZB2r4#Ne| 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 Ik5TjeA9UDZr~m)} diff --git a/examples/fibonacci-io/script/Cargo.lock b/examples/fibonacci-io/script/Cargo.lock index 3a576f8713..5e23cc6214 100644 --- a/examples/fibonacci-io/script/Cargo.lock +++ b/examples/fibonacci-io/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -251,6 +257,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.3", ] @@ -273,7 +280,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -416,6 +423,41 @@ dependencies = [ "syn 2.0.51", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.51", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.51", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -423,7 +465,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -439,6 +481,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -564,6 +616,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -674,6 +732,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -734,6 +798,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -741,7 +822,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -890,6 +972,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -977,7 +1065,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -986,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -996,7 +1084,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1005,7 +1093,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1017,7 +1105,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1028,7 +1116,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1039,7 +1127,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1050,7 +1138,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1068,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1079,7 +1167,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1089,7 +1177,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1098,7 +1186,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1110,7 +1198,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1122,7 +1210,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1130,7 +1218,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1146,7 +1234,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1162,7 +1250,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1177,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1191,7 +1279,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1201,7 +1289,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1219,7 +1307,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1260,7 +1348,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1291,6 +1379,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1536,6 +1630,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.51", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1626,7 +1750,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1658,6 +1782,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1696,6 +1821,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1772,6 +1903,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1793,7 +1955,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/fibonacci/script/Cargo.lock b/examples/fibonacci/script/Cargo.lock index d91a3da0fb..543bacc374 100644 --- a/examples/fibonacci/script/Cargo.lock +++ b/examples/fibonacci/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -254,6 +260,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -276,7 +283,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -419,6 +426,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -426,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -442,6 +484,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -567,6 +619,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -677,6 +735,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -737,6 +801,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -744,7 +825,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -893,6 +975,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -980,7 +1068,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -989,7 +1077,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -999,7 +1087,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1008,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1020,7 +1108,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1031,7 +1119,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1042,7 +1130,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1053,7 +1141,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1071,7 +1159,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1082,7 +1170,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1092,7 +1180,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1101,7 +1189,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1113,7 +1201,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1125,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1133,7 +1221,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1149,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1165,7 +1253,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1180,7 +1268,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1194,7 +1282,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1204,7 +1292,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1222,7 +1310,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1263,7 +1351,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1294,6 +1382,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1539,6 +1633,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1629,7 +1753,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1661,6 +1785,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1699,6 +1824,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1775,6 +1906,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1796,7 +1958,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/io/program/elf/riscv32im-succinct-zkvm-elf b/examples/io/program/elf/riscv32im-succinct-zkvm-elf index 5296442a64da8212f2c03601b9de25deef775cd9..21f159a3324d857f197a862c3a0f8ba0425fa952 100755 GIT binary patch delta 68325 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�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

)=xq1)M9A=A#L?fo{ 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 delta 111149 zcmb4s3tUyj_Wz#Q=Nv!*(F3T6c;E;kBH|O@ZBu+jhWRct6wSAiQdw7H6CSj(BDcD% zYlWp{WksPK>soD7%zJMS>~-y4D{ooZz22^sm6pZ-J2U&h0qytu{rP;xy=T_UnlHa_WV*h#md_)9Qxmd!;AJQ}{;4aMj5l>H|E}q`V%0jQFMDs=%niWy5Q8m}T zGVPcO-vQ0b7@Kcunx5{~+JCQU^EExyDv0bhh{=`_hX;E-XypmDGG>Lh3d-K5a8alI zV_dZU&AJeq((YjU_Lj&V%v8^jeXI>_x|NOhcRk91O!udWXSL?{9pynmYGuZFf6h@& zy&sPCXCKx4Ss)LH{h0?eNsK3v`!k&PNY6Nb+Vh&__5sK9nj)lbjHqXMJ{&8bk)H8h zPaN|`piWoDs5(}TyAMX7W85yw7n9a*WQ;>$j(S$)Sp`vD@~`rD71+y}?1dXn4}mLH z4_mmTDAF@Q^^~Z4Jw=kie&0lg!N#xFo2@$aoajwR*ZO)M*YpfeXnd3U1|HWcGTfRs z;D)$74)YHF)5>nsX<`^VM}7)I8~hnQc{Isk_tqtUMpi&Z-?7>Jtlg~btEMOW&DWVIC|5if`VHW;Gp1GvFUMnne}t) zgpit6rZ(q=ksi*AOQ>lb#hquJBcvsmy{-DlUTo&ZsH7z0ack|`2Cq9x`}|?o1+ROA zMz$bEdxaLP;67_;Y`2ces3JUG)hDVbgNnCS$99^Lyn+(s4u}YHStwT}muZ(FfNz;*JzO)i(zp|Fd(JsZ?%2r-a zVN2b74OA#e3M0_JcFgs>V+=0oOu9((u1j<%YAUd!Xt zino5?`hDJy+~7|OS=E%^k*aaZn%SXK&v?m8&kYH3ERly3(4*AXCWmU=8=~7X;!@g; ze9YnHA;+=2WtGHr>ztSerg|gt8=2`1L^uj$9+x6M66Y=ZrLX&gMh7w9gyWE+2(%Vv z5)z%ltKX_%`JElsNwGS8-=bhU0h5Xs2CKNqa#w2pY`D3I(INb)O0~*Dey`dA%u7+@ z_jGZ_FP~QAVV~lItu5Egu3k?f5QaD!NRxFV4ySn`iRGG|-W;y<%JLlcE1Vv*FG4-7 zo7eiNZEXK^)nzzXb)&{q2XrmRba1{^(>AfJxs;Y`hRy11-Q05~K53&lqo!Smo&_p$rL>?Y& zt@d`wccdQ@erSrQ8=`7g4i!(}a)kfmP$2k$#f;i;AxpEy-FydF#) zqcPb=7)(wd+rD&o=R__tRH+#D`%|q@&G0BldjOW&X^QU8-mc{ddv?1KFl@(D@J>Ac ze*y;74{%M5&>nBiOz^iY6j&`!f-bQ~1`4gJghX!SS-TQ0Pc$DWj&*Ub+icZ0Y6q7! zTy@uOOiW7B;=ECJ{$Q=e?3EIQ*^6mZBlvD-P|+Pc-a64O(ke`BlMvI4T^>KURoPx} ziy!pCOLeezBznuHUD^lL%>pl)oUP>D$WB4&pWHACX(%$Tbo^dN1=|UjwAV1$!S)I^ zZ?( zj*L;jn{K#7hpiQC-h4Q^7MwX4rC@;taBeMNdZdDVvG8KpNca&E7c|aK`HQ9TMI2tN zW>G{P(j>GwVt%@AiGq$^+BnBbsC|iWJrL=5x-g#UzbR7kmtD-Wkr%A@JLFxr9HMP8 zfQp}*&#`qkUZV96O=Aenv4=|f_{rMU zaY!iOXo*N0YhCErX+~+Y5KL<5!7tSSFGZsMMe`7B?@bOfZ*C016f+H2eUEY1HMjIQ z$Cu>aqNw+*Qq+%@Pb+ftt%51u2!zMJa7#D7vrZ=U?S4A~dj$MqNhF>%sC7UsEo-D9B+e>Hh-&YK+i-vJP+rJW zA@7Y0JS;tx`Dbfwau4>1Rg+BY-`3d9Z?NC2xRkU+qXhVK35#9K6?5|>jzEJoHsy~| zBrtj1b+c+urvyD6Ih<>}*A2GiY>)SMWh!t2*xH|d8FN_|(lfa6t<^Q7BGnxfcq;Q- zi>G&8ezfJT0WX;|YZy;hM>58YaB2l2om#D&TDgwrtzH?Y*`hSU(xcNRypc1~M(T$(@eBuXW`NV6EzUs=RU1s_EUec0n%>zuY}gtPa)W zsjZd7h#`7V?$%sh0aL2^2LV&K-FX7$l&`F<>HR3ra`$g4)3%1;86fdsxufcvSJtlX z*P1i3)(`j#*DkXr=hY_k67?lx0#Jz}!5FP?ZSufbjOX8Ftse9eA^;)I{k1~}zXqn) zUKrAavCpmKVSPk}!eLGY^7=^bG3jsgsL2D@N1uF#UL2dxl!8@|U+=C>F{U zJw2+_GkQtwx%|M}`u-S5f?QZ43%!Dx5^lVz@5TluhCz;4Gbj4l zyS3)TO3v+FR^;SKVE4?)c{W)~4w{v5D4(8IQ0rR`xZ2VneJ` z*F4MZpKG^X`xM8PlQnAAU~aHlbJi?ZS>UQh{wnc47dE7;o5PG}!eEn{!_23{V3Ql= zB5~SJ3YdtDEF{VmJU7Z@{YgTn-R_}|ZA=k{sr1a;CMu}P+A4*>gwR@t5Jcwu5YG+TXtttLDbkW*2@A{<+ylxK~MQPqj7)+t;`Go9Qc08plm;eGQ^Y5_S^<2TV z8=E>d3slGO48i~;<@QyLWkPVW%$y+GRCVSZuK;2z;J&eWXkMs^5u$v#a?>B`Qu!k* zmy4$rS&4bENQ9{>pf&`dc3sHLHH(~f?BWaD~8X2O@0;yh6rb&B^%@f1+@Lg8&zz$Z)?%vjQ3$wt&^$RWh zo4lx3LhDA%XyGs-)+$=`G;6S;7xw_ajr({q*|%_)l{-JVHgZ`kU9<{P>?2#Xpmk4=y4sQ@oZ{+BE zM8xEcC{o*}QrOyUp{P>`LIoG@USi3n1axq@we7|)M>lr(M@g;}sn+iQFr-~gL>cSV zkZOKmH(4`QJ_=!6Soz@i{2dM_9=F_@qqfGKq8VmOO#}*xWBoUYdRC>IWc_vSt!m;c z*GOqtUG0g|huvj?m%XqnX6VTt;qV z8~5gC9Gov&?p&^DFuJbn+k`aeb)RXF9ZD6kKMzCtl0>S?|6v*b>KOs{!;|#2GN0}4 zmlKg)R?&TgUR*UULdG&sc&`T&oSLNSt8oPT&M77|ZvBui9 z+uxRiJF!G9S*oqFj_>{=!Y4<(gNBy!43G4-k3&*jt*W(AZA`aIx}YNIf_}AJmD4ac z&8$p~P)_L?Yi;F7cC&S)va<>+j0ZP9muAJTYa3Gn61C4g>Hl4R=F^|8lC^`mcEH-b zHiu(x^!VB&ZhUE-TRVpvv#ptdK3tn+RRt29(BzJd&!t*DzwnaL5us!5`Y!B!t8jgL zHpN=7eh3?G?N~pF6yy21_IUUheE{s(>n1$ zs-voh^zKl*DC|_m4T6{tM93*dVzno3eAwy09B=s^PIo#huu2{rp`>6YSoBCjnmD$)yMzBHt7cn@wWYd^%4=t>-PP%B zl=gh<_ifUapSk{P%Y3qH6PxUpn%Ja0)x;*_p5JGak<`d0u%MAmW_%Nyv`?DYWd5Ux zO~$b%HW?o_vB`M9iA{FBWRsMLvDA9=kI=fAR^+xDoe|$@ncJKZo3CQTf1*kEvEG(> zS6hFfH1^x{?&Z-^!byW-D)J9RgN2Et^k%WO=dM&oLnc_q@9M<7|5PRBWNYij%encob$sIlZtk_Rt*g0FW0}@8w#hnXEoMK| zj@tBrE8>LotV=B41Iw+?tMj-PXC-fkiO#eNw!=jGTMM>NiKr5l>>8_nM^C?eH=prm zj))3#gKj8a6iMo|cdhtG2Xp&^RrqKQH^y1!qe)y#v$j2Yr9z}VY@K;@n1l3zFr-`l z2c&x@fq7K-_F~)w$iHJ zIe?qXtz$c{;ZTTvkLRRlt@W%Ct%}$J5q=CvsBkpCqCVgJUj6WY$}Ip17Ku1yV$R%UmHuI#l9+vqb>a_!2ve$1s0PU^X_sgDP*s2xIaE!ISJcRX_br$ck+`g=~=#FxxTAN#}Qx$hp?XRq3 z?d0cP?7)qcwb4g1(qaRzO9xob1bq+H8vpuPkFDE*9TzA33;f9%`%RX|cnr}OrweUa z*V=90JnrU|2dzBAtTShC=Ih?7UGT$qtnBbd7wut+P$*FMxz{6)lH~DX`&uSW zuG@;R#0vC3c`#EfJL767ci1+1dM zY4^3W_Zc>bgTE?R{=dXtS&RP4E-2s!0JdcJ$e*2t|GpS$#W@A*fBIr#4*sZM?*Ck( z!yhX06E%HwhV~f4Hd%s4$TRS*HS>HQUiXbvbv}`+TvFZl2$5XPYll^K|7d0YoW+eV ztjRx*=5KsrZTtCcKKey#$uD!b`BfM6;dW*!cMMOy9>E_ZWeJ8d-?(|8Bk&Db~X0*K-ObYsCKf#xFG%~=kw zYemP!)1E=mI=eTmZdaaI&b6v*ZMDKOuk{Ef@>XjcwTtrTz|7;;<%OME@~(&&h&_txUF>S^j-mCVS!%=?Y3Pqrft%g0GDaKP zdIcLn=^plWOsad7RW{SoYmDd|GE zsOOgpKv_?%zU3I)?zZp*F0UJ#f*IRg{%q!Q%47VQ$Y-g%<*v)XBYP=w_Vm1`DBn0>NI zf_2^Go{-p&QcGh8@mJ2D|sse z9WD0>rbc9Z+z9v7b#Fp$ZV}~FB_;N!AeO<;GVV?$qb*BJscQ?C;f4m&M9-ExkSs4Z zsFCaombPV6^#Sf=wYM$#i*rU*8GEvA!Czd+X>8mX{KZN{%F*1Cz#iu29I8%$dKn9Y zXA; ztgK__H}b6|Uln|0BivKh!|P5Giyw*nR{(8HbC5^g?7(J2feBW0(s(cJV>X$pIrYwc)M z7j_5NKA``v)3ubm@h!;-?%QwsE zNIE;rjfbczgMG-&`N0L<*Z@>t9jwk|)7ZE^*u0OGcAB$27TXbVAv3}mNSr@Sd!>n{V)?jV34a{HU0Z3tm$FVMLW zz^3h@t(UWn+``n6w*$0)6x$n7Ej|Bjv??D|YA*{a zZ>0RuY$3Prqngp|S5?E9N_)nzHBROh8aS41;rWGBKNhox#9=I^b7R@9&ImsYt{TT$ zvzQr{*h`SIH?|5kj~1=uoFiM=#azN^?AuAQgkLiVh{S~Q7eaP!}EwoqvPr?h7xdvHL0p`%grrA8?& zlsn$g)Kn}=(y_&-Q~hsZ|7fYwYT)usX5Cml?Y^4b#Si) z>||Ew3_qFTr?5qW4h5{HT~pXitrc%t;}%SBs+r4r2B%DAHC(l^j|Zb?u>L%vN(jLi zO=GWx*nr{qwcx5OGzXJwCc8=1H+Kfjne1}T%~(1#i`^@#nzKQuPOGnHmE2fLt|IVA zJ58sH6efT{=n2|2n_)3?1!c}*J%muO-(DzB$Uy1 z(AFhFNRec&V4Z_EEoI$thH)}jy_|i5mluO5P6AOB+_sWE3`2P#IP@kq(dF#^%%)AZ zvOm$f+gMy#xV*5$?$Zc!H|o!FsXr30EjQnlu9P)a zC<&|3RUlA`7l1ayzsrVZRkLz2FUWH3zDsntFbrRpOTZUNc$uQ8^Cc?W5Qd=BCE)YI z;OhKM#A;0=UJwRXXK>Boa|OIWjlfn1am_0fhavD@f`FxA@U{ZJ(asG{U(Fgk?6u(Z z3b=x@Iga(-EGJz#R%1gWDi2Qo-OkRkV(_Lg*a}1w7!PjaDIRSUFb7|$Jcd>H?hk8o zlc?VWOEH@yB`fDn<57UI% zD!BhXI3{jC7fjyB(qM8=1r3W;;w2C~vWbmz_Jgz%>aYd#S)p|HH_*N~nyswdfy@sMe1P?LIUs+q^dWW)#(0wI9~P6@->Kvg zcnaevxvJSy+&oM*)$m$ypJ%HvkDD)2&356fFrPolp2AqI;K|3>-(l_#2ko6~gbPa* z;Sa9~Mm~i(gx#X%3t5Oo&d{eZVMwZs8ns4A*v*c3<$5Gw%Be$>Tv|bAcC#xLGBYDM z>KWD!jQJZ)f0p%jXkSZJ&mwGsgN%PpOe+5fE_e>%61OYq#Ph7vpytthoItD9N_7$4 zdE9@L0j(@ImWXmXBS<&zr+zQMd&VWvo)^UI-<{%WS)W!$Msev5ZFz2CD=MgENj$Dq za6v7@QJPsoNA|$Y=gNVv369z;1D)A4^F`Lt*=|`FT>YX5GE|-Ev?<7b=9)oO`!HF^ zLTz+#-#*4M$X>MnCESLVrDosYiI*B1YH7i9FSDCjyQ(!-6b?{34$+DyM`_D_RjbL| z&w8+b1$XafqZuz;N@ried0NkuhRaMK?BHEL)39e-ibwy%B7zcoxUIL9dxaLl3cyvF0sS$6;FW z`(h0C&2;<_=EJ!`R~@^H@%o#o>M$FeWlyt`hoVk2>S)u7@5MC%H_rdWRe>Tg@f&gC zcE@rpt|Kj}XB~pkZ!m*(z@FSh%Uy0@=S5fb>{vaYO{T&lEUjHRj>+S4 zk2jIl9${H?jDbyknRyrYWuH-fnYVgDgFmZ$7((lz{_OJ0WO$vqeJF0;M#?e96&6}i zI26uOeSN+t|0k@NMsY`3YL41qUXMr!$QbT+A`+4awR0H!_=~Ss%e}-O&pV!50aKAcZ=ac9G5KkJf&!&REilyma=tMmhLx0RP;9V&U7;SlK% zoqm)3oyR58(BrHNef1V=Q>N_^h`|t}sWTG<2wh@g7tdj_`8?_wjff@Vj0({fWnG)< zY0s&)<%vyY_A?g~W$&#R$HsW+rngyJu05?N({2}(rIax!1)JE!7~?_F5k@quiAWm+ zNri6{))8IYk-5;R7iJj7W?>js6pTBzKdZ=RV~W?h@iPVFE9*3i{__rt3R%pG{ML;Y z6Isv3Uv1oiWj-cq6B92qwqE!^TV6c*-z~(R-poSgI2N*_zR5xgg@xOt|FeY{cU;Os zGP-M6^oALS#AU7l1O7MTP`x6YU;~;PhjCA%ahy(P&5T1~pG+5yvZN&YYHzeSK$dy~ z9ITh4e36v zBL@bpDDUH-{)Xz`6R0QAsrSUfr$Cs`B6|CM7I(EV3P|809KDu^?Q0ccVO$}^_6Q(` zUJG?&nF_J}ky8(Zh3XlXQSJxAhzFDT0lThKoD@4Kl~j$Ax~iDiht7S#(qheaI9VSi zCyf)=e@K}hvf+s~CX|qMmK&5S&#KaB^@nV9yX)WAyRoqq-42W)Wn6oL?|;Z%XIa=3 z%iJ#SXZf?X7y5ndYPENVO|fj`b68<$M~&=b42Q%U>D)1fqvOx0!$)viSXvf*#KtGu z!bv)=A=J4!lXic^lCta{92ktGd<+@VZJ1(k;EHlXl7m__o%u+x{9B6ryI}dh1j`rG zfB(+fBpUEh44hzBNGnw=KTq-hV1pC2B)}k3flzZ~svQ?rpG3F+gPk6(e2(b7sj>Ds zD1ZZ(NGFmls50Jl5Giw3EPsP`!EJE6j*c8>D-z9D1tF?4HcYYE-a~~Sv$RC}Cow98 zGen5}60QGOEIc2envYqZMBx)fd#OKToc6=%9O{%AH5cR7;ss90DX~V912+#>bjPKM z#zB|&Q1qMmsO#ukNVl}7RXx#PsLX!Sp;IXQAk`MSii)8L)8V4=M6l))1k)MXW^408 zO<+7&h3R?a-%qX$a3_-fnHaH4KZnuNf9u2it7GlEa1@ zS2zfip-7;%0ISpJ+Q5@IGYFAlZ@(CcIZu)DpU(s-Ce{p6KYBg^IpFplT-5>Mz)Ysh@tayuQnqRx6*T_b7*J#0+2hw6^@jeRnQD z(WYD+iid)g;?jJEvL}|Gc;`8%+%E$rS$^MNmY=xly-@w2?@Q6yJEti7D|Gg$Nn^ia zBRXj^7%sy&pgNA8D~@!a{ioO;qMS|0x?9Njnx#7Ru}Hh9el*QJ#fGU0_R@z-f zwpR9UYEj<|qZDcj3e2Br_19tr_C1~cn%$mgzU6Rog0x1(?SGN^FKp^*pVQfYu{#p& z{TJ6UKcWr)#{3+(Q|*AeH(2gMPPQ1iwnna3<+{dwk0s8FPDmfAuBXbScHJ$iU0}UD z#*kB|x{c#`+_sP3wjYMk)!Uj{-G#FFvh&zKY>DXyDaLZHNgNuG&Id`i*vZgQj z)p>uOhW@~=N^QO>lY_SZ-ZUut<>m)OxV0F?91PFk>f#J1qnR}Q9Gf(|7wk)u!L;IE z(*n=!e%>MNIl2F!;7^FIoDfsJd-p-V)q)hJA(w z;0Q9mW0Ufm_b2thSoA;kr*vh39DcRbo3ZkC;gufZFK597G1q4 z?q~LWR7f~aQS>jYQ)Bi?%Kb&mbHCEqU)Z1sUHme=;ssj&i`bxk$0}OcJt9}S%V({s zm5Y0lT%ffQi!^KnONhPWa~IBPTOm|T9D-00_8`l(gH~qg2-VuIwn|DfTHz+8G@HQF zwB%Qo((b0mL>@mVcwCmR%YTBl{mPc(Vn2dTxrA3eR8jJ8;$UGn&Has~C25;PZwO93 zGB_1G*^z!!Et?QgCboyNa>dd$;nN-8}Fv#d&z* zgun-KM@njjAum9S-6qLNPvv`##@s9fktYo)aI|sLNeaox4uic-I=l z-yQfX)q8kaSpXhsgj?Y=uWM}M4%m_fm4Ua_!Kd^B*Ehl4HjWiBUYrVu^bye;dbg0InVehh9LKa)k2;FGIv>~TeM zoJ%me(2;k{lZEy_vFdacpAO(IG=7#IS~p6VcEUl@xe1AVfu=|C)GlXa==YxZg@&G= zfMtsTq2Sm_HT)>JHHvR%y%a5@fTnYETC|TvZFNNw{!Eeb3RT7N#py0o4eL>RAI;-Y z<_e?YT{_pA-;reg1u&r2fC@gv15}bQdpm84=GgQ4m6BulfE4>Yf|>Su*8}Y>x7cVX zZwpQ04qN_2B{4jWYcJ8J7>={M=P5dt_u)nr8L>Qr+fRqH>u#{i=ddfK1-tG7VnIB9 zr5@tB{W$H58zjdiHo)(Yvd?93QPRq=cXOQAR8 z`QSwRiHp&h*rpTotV=i2M#IY*dM|LNU!0$ym-icREsQkNfeRh1Kse1y)gmac>NowLz zd;H36eb_juDwiqu_mxY_{|nV519#wW^kyl42_A*=p>7Ic#-@ELz6vop`(?vqs0nI|Uw@Xy9yZ>S0F zGdaOUR(?(=IztEQKB0mXesh|M>xUEFSTEu-PC3TS@Qo1cvWfUd@))ODCsX)#`(%hF=`hb?-^5puejp8d zrM@Qj;`n?u`p+n`JMZ61E^@WG7gL4%ry-XwVhM%#<1mic-($4tofLv;mq74eQF&pv zKr{sE%n+*UQ^@1v7Md=%U}c&8WpG~>Z^aXBXpEF7Ts|~F0T0o!Y`&a%X>3o9JD>Y# zTThN-i5l|d@bSYBVo((l$Bum6uYuHlj>u3j9sEPmyB&NYS~l zar?$#W-cG>O4D+z2yD@xdFQP6?g&Sm<=AIMr?LZWywHgRdY~V_QAESh{dsw(8ZoKc zH#z8)3CP-Z9_{MS15Sm-m#EN_#twj=vtww%06soZy9afe>_{O=m%?t_#4$xl3XRHx zOGK!;AdkPz?N~wC0;(R!+hu7H7^fV&3``XsH{OK`C@(F`Ocxy=$dks~Cow-q7k?9Y z5aCR##`#%w^!f5LS3Riwp8K5R_kNTM4dpY2H~HGSpUD`+lP;GRx_mM`%h>LNPxPtw z@8bxXfo_Zw{+#8YlC6Qw`Yq<_6i_9J|s=kTvoCCk1E>$^d! zu`Ji*ueY2&n=dXE&FXhSsxQP*gLz^r_kWzR{X#~w`~@mPKGyJr^&dz08OVo8CMI>^ zC!Ij55_%}@(5|J@A()@+c64Y6f+6!gIz0s5%8WsM4Sp40{RpX)`A#rbpa_5%+8;y0`b?3<*&Zly%qQ%c= zP6(^9*HFP_{2Lt0(olorj_K3*ZQU^1Y4D}u78A;Pu!n=j2tHNrO8U0LFc5g-gA+K* z(HbR-4^j9tR9;Ay?92JRye^drNAkN8jr*b57`YRU%6^SWbY>(X8(VDfw1C-H2FH%# zx8aa*0M$oe+A+uRh!_>is>V4%V>CZ3DeAf%{y|6z^@rk zbc>=J3m^yM5S=K1jEuche*Wk zWb843iVFGVu|H&rAX(Uj75E{OY6^MZ&V&t5-Jfv)vUr~RGY`0mO?RvX_CFTAcgvQE ze8{-1-h>3LIN2R<1r90o@C3SJo##?N0JYQQRG9AG8gy$W5I6L_X|GnC-9xaR)cY1!`U1xD`V7xU=cRL_W2hJrjhADN83g0K^Pquf`l6 z=uS0P^PYYCixC7&e8R@%&)M$Wf~{NQ_hGS^#yq$x=*dGJujeLHJ|hBaDQ*()lcW{M zynF8pL4l((KPaB~vH#07a}rO=3Os||c%^;7+la><*d4+x+FRJ7q3TI|YDRt~7Or61 z^E|jY4K&p~A|&9?KEOd2cWkK_B~Rv$USmip$C6n?qi55kEI~$F5jg7k9b1&!ZHi;vIQE%}E96DjaPPoaeWy#q z5wR<8u2}BIx2)ev;b~cJ&}&oq5MJk@3sZScJM$^bO-#=}fQ=OC^Lx_JX}oXu7TAnm ze}}4HD0?a&b7l0!W5n-T{zn3}vzI0iD;aw#_y-DyPUpk9jf2%oP-K32X^ONj1Vy7K z7~fn>lJ?L4nIz-mOOs^(qmd*qtvel^!4tTqNxE9f&wl69bQy0q$#2gz-fpn=*8f7x zpMQs#H<}aE_F6&AY0A8or?d*B3&q5*-t(yNT1+kB({-3rimL@(%BuSqU$ilZKVy@@lJT`x{jv|zS!U`cM*IZ!<9tQ%DH_f#^SE? zV`nQg5f0fhi>JlrFA?*jvS&Ar{AOVi2;4?+DEmzTr z>v^~I2P@L+;6Jff^?1J6+|s_%u$KpyQIVeipzy!`w7m~fb`eOd8`FqtRS};m_Uy76 z-O?3wyoev>+BLL#DeuOnQSOy6^^>zjSJNqZ4g~0)PGjeYK=z78vc;-Jl8s-0?3%+@ zcBbMxaOfTt`c6r{ns=maYujjGG4BN#EGQNOnNRDB`L)QNEat;K+Hm3Dtf~dc6n7(! zq=LB!sqE~=p2Y5^VpON0gsSK9v@|$x8EP=$P+fU&;P`yRZlH4}l)z*f0dr_@-a%E|0`-76-7) zS#>w~AKi(S$)`Un`*F{dySYVD7v;8rQntYL;)fUQM_dCE8{;#~KSlC)7m_6B^0`o5 zk9)3+9wi#%2cc6T^t5^*d>lluZy`+1y@*aMgkbT*^w3<O{gNNzZ zB7|sli-H#x@!^Px-lm~TL`+oIA}0EF3BOasrcgx0Q4i9Nr93Cf@cJuVntz9jdM)QZ z`tL5@k>ZzO5GJ$?+Uxddmdgi5!I>)K`^>Lx3aQeqbf!dX(JUw5jo6}bFPHoMipg@<+>yx&Dg-<$ ze<`e~@%Jqd%1Y>o<4=sejRx&;-$GS43g+KNZ{8@FzeX@Wzf+Cy2u5Ku3CJ=Whe86` zxTcKJfmyp(U_(e7*&^7NRqbI^uu=s3i^T8bQF}3h{dihk${*y|P84NX+AKkfm$6^* z0}t-+TF$+$MswXP!$hCdyVq&SO?+zE@A^u7m_yWaE+a~F%wI19sLHwx@Td3;gT!-8 zjy+_q(me4Q3FTYYAi%=Mn3#qwE#A^xE%&$B2^w)TpCvZaHA6&>-Y8r*RIG}iJvW2C zx;3iL{B`Ooujtd1rwP)bpdHEaXqSc2QH4lTxd(S(lW-w2xDrOy^!ubnSAxhB_U&EM>;cy`)20NhxZ-x1o`>5nuu=wG3&MzZ;Xhw z?)2cdbogq_TKEaaMdE8Kp@=%NB4a#%ETT6q7_i@v27?x1n z8cyAxxrAx$Mj(7n>7x5;6@uD>seTQA&)rdsQG7gg%Q7BK$8O`Fv!`kQA9(Nfa@^)j z{mHe`W#=U zahv#TaQv2X%(SM}+!c0mt1n@A;rbkQkJ7t~ZXfxXs>}HG%(unlTe9rg&Bj(OgNvez z#|8n|rq~kuh>n{)lj4?PrrlN!-Nhz`U5;5^TfegeeoSGSMedNb)h!mI7_IG zS4;~MyEf5+28#`EA#UjzrIi`?QSKdLA-eeko4aw(*4cnuz#Hk+*+>_;s-S zcQZzk1$TVrc5PUl>E6ZgaCa+bien?Ns<2b^&Jucua;p!Ga}uVX(z_xji9P zG=AGivcm328v?vj>H`&z=RY7KJ#Sv3R$GZ>`uq>IVjki0@2cDCf9iv+bR>ZA!@Qa< z1Tbdz3zS@m?azQMf=OvKB9sxohg80DcjF|FJm!-Fw7Qb_NGHVQvG@`X7>{*j8UnaF z;U?q(ta735{6q96P>U(XwT`by6x+;UYe1zQzieFJfp)Cp?Lu*&>^1)|9a_gTa_Wvq zv&xkoeuDIzH^8f9RBrW3^#((>AkKt`vOM{Vsl$3cjXgjm>tVHZf2Q5*#d+09I=3Dc zDz1>lYeC_mp53{XvhU>AT(k2pO2Bn*<1mgphLpS@jZoCs_We4A+C3k`A`V`C_ES{?G z;{GzR%0$d8W)%Zpla&+jp$z>Kk7 zbE3tku*`=j$}yXT#NvKjib(R-{WCl{#FmSIRV>-*^1Hb&MLQ~%z`|kUzG}3d4t>U* zRYi^YCo=EGS?$QnVS$=p8Q2jaKD1gJ*r_R}QrVW?zgsLyDup9=bmtdxZ4j~0AA_esI-A=w!KeOK~fT-N?Jpj7>a4j7ftoG`6~tsy6X1 z7a?1A(U=snr9k%VM&6#j-NgHZjYvX``Ijcao<{|nv61DBB+GDBK>T`sx$`wOW1X-F zk<^eh=6vMx0Xfo^-I$Xv-HkShqBrs}GcZImoH19zk;aQaM69Cy98Pto+R_Owgv$?? zn_}en-x>Qj+P#rq7AAhhl2MnY#=IQex~LG6r@lv=Hy}JLY z#ZcubOOu@K&`=90dJCp&Go7lpAbxTqq!t=)zd$AO*{^xI@id*1<^OJ8Za+pvBrN4z zv+^WkTXQ;$E+Ljv=~iq4d`H{1@-gf`bV0N>|3%qbv5?Zgq?23uGymV4)Aj?H6wCsO zevtcoq50bK)O8YHsFmwx#MtfC9Q+yWd63U3yD3@vyvqD8;^|%IP7^Uc_NH;%En@+x zBUsD)=Fe#x3N|w?J)gS${tV2o;!s0+_CSVQG^+q5Su)@GZ!sEUg4T%QloPSvrh$Lt zi&;0?@kcPGJH7cwehYG=w#nR*ZIE#{I-zor56Rr>ha_yrLwp@z*$>OyPio3Dd}Yj$f7_zVwFwi={!tn=>R&1A&3`zNqrSKx-M3+Dk%L54h5I4VA*>jWEhL#V!n&q+gFz~qc5c9r(Z{gbeIfnhZB&pa)7^Yc8H zr3CO(AQd7jN!mq10zxw0h`?|<^a8(}BczV32l{$H_z^=INq0S>Np*L1SzA ztXM^@DhphWZ~7!teXZE{+C}xR@b+v>FnJHhXB)ebZ?6=_*uDHKZ!OP4`4#!893(8LCEIAj*=LsyKacsF+e;( z|9yog(ug2W=lSDkK@eL*c=p@JxA2NAdUGFtk*~|5wJ+h&5zqHu5}R1#DDq_pJdi~f zUPfGF7?k`c{sOPeqWV9f9?E_DRlUjk`CYM<WrhIukf6tz!g&R zN@7yt4qpps?JKZZ#XoF8UMVD)PBE|YL9t&t2?V(=~z4B?EUmDAx>wC`1Zbt9ewOyb!oRq3o?oWz|593kAmCvj&0 zx7eyvjGaUUukq&?4_P(>+xZU;Q>u{gurFF>!#4;Ltqx_>^OwmOPi-sd>y!cYaKdXs^q_JQ(pNPvx}#6F!IIH*vmCd2XZv9sHgOKjr?Yt#UF-$6iZKR6I@p z6lCB!U-c(EK3MfBFJkx>!nY@Q4_*^PDgWeI1CHY-00r}w%`aV`X(e$!`9E5@G)=3< zPXI=)xV5BodEw&Xl>?i>PDRu0|Abl0Z9^~o6W3e{W6ARwIA0J+IiF!u(g-g745tNr zUnD*FId*1GQQhak+7M7jd}I|ZtX|@08+vkn)(I5I&FGupSB^fX#~F5=6Uq@moNAy zNmVFUW73+{$EaTa66-z1nH1{q6_4h}TT#YWSOZ|FSAT^~ht;iuAAZGuW1u?t;n)0M z?zX3YNCQEd7J7b4NB_(7bnLQH>oYtx3hNXt8Sqc3{~3N2HtGXsco#f&p5e7+3oy1g zjP=}47~{D#tpidwq(MmIk)|RUfM1X2BBWBJa-_SFwj%97+KcoC(g#TYM*0b<1bF%R zG_5sKB2p^SK%`Mfg-BI^&pDrlipZ=+x*O?Xq$iQ~ARRz@6X__O|CSGkUsO8(riF86 zuk1By-pa+L%S(E#Ea^=XzvJmW#&W-AV0f`e_=&65Ys$)bD^~WpWP|6wR*q1R*U@5u>2ChQ^N9d z5*-9Bc%%r-`GvPx3{&fUbMO8jQqxws{n{)vzXd5CDU@G@cYK|_F@I}|{B14re{k}b z>=kTD@@SbJzji&X`H|;!|F`bfenpA~le!@FLCQy(jLkG5IQr z<$9|wz6ietXQH)<)U>vEUb5e1t@RG{*-t#jr)@?3>rn44aOV;l)FeJCImct%{UZHZ z5e3fitDAK`fIf-RM<;5zH~KVmEd5wNyq`q%>uKqE-X%f40yF|04Zu@@wx8!uCx<`} z!1W27G6DW>WIntzH0%S?6hfFXY%a%nYpV5`&I!ieE98n zay&!*w-|+z`|Az7Q?IS4S%jLxVWcC4@_n8BrCM&jTGrPKckOve-B8f&Clxz6pQ=8E#wPbOA-)7nUD_d|Fuks}}IDkr%uPwOXCm}#sl7{&@!^LUe(C0fYKaanLg>(vm*oE=ILjBN@O%7+ zHWYcZ4jsUDni8q^Et9WkAS5l+CzKzBcQL?FejVP05{B|y@hUQq>?DzHBd7;D(w(-bwpY+`_|<*m1^3t^Qnyi^uEq%7o!l7jhd%K zRpCJ};b_P4ehetpJT+9lqBt~9h4OEsuJB@^{Qo>zxsN1avZA+I={GbJ$N<9Ji#dO0 zCrrC^Piy@$tVP~xt@mzL>#DM)%a@gkXbBzmNcL+t;3>q6nXfUQiuZ0vKBP$05r2E| zghpKS4B_YlSU8R=kQW9Nf*0UjxPY=y!31PPloiU4z__~m#Pel3(AiTCjO zqmdUKgy47JT{whL{u#WZeNJP+9u$ZGK2*WRJ3MJ)eiz>Tm?#p-iqYG44pkF)#Xu*g zU@3#ANTqZjM(>puUX%&&>?I55FKbbC_odYbHd2@(Y~;?^7IV%uF>@E*Eaml!tkAoS z-lI&u0<++-FxpUFDEy$XykM#bbwlt;co$wJlrO=%@Is-yh$#h*P`(`R!Vp4vF?i(v z2P5)n$-d@Bbdg7P=|w(mn^P;~^jp?C5vOlT(e6(5%h@s+PvN$EAPMHnJl)?`@6|H| z8XFG6yBMm_hY)DY(^bR?dFZWo@yMgOWRty@_-7w++fu^_fUB!KVD#a>zCDemCFq^m4!Q~d;bK%h>I;9fgZ3uqm+`m^`Y}Pz zN-fM#ToG136XFP=IZ}oN@|rY!Ok)K87wEoKs21w&B$yI1%IWLVv{T53n(bJUrVU*z z87X_`?`P1>3HpFmS~t}_@-HUn!@1E-_CL%-xsZzJzu(d(M61iwv_q@Yw0O|ba_~0V zNMh*zSUm?{Or%%Ziy>vwZ|(IgY?XBHpig5@QF#Y_2s=)%bkHwLkL&K&2BMEbJjLJ2 z(%Hp}eRJ?n>5AFK^YD90tZ6B=qker^DXL6I_BezcF8J`g?>g)WfXgRPCk}N5KXzT4 zrd7|x{tHMB@gqzc&B`0udwcWx7EA4wqGv6`r|1kMcWVKGLKfJ6=oEvR{X}&^W)| zWBeccsukj3RNjYo@h6^wyP@Y`pQgRSuBe;q)QRm+N$Gk@!Wj@4GPx$6UYV}vb=-ieqQ8gn zl%sG^JWLOz>ph}Qpjbq}Khn{3-9Ie;y9*7%=Ea}rC>v?Nx1mAUxA+rf2GZ^pWn$vn zM!hq1FW=#%+p`eR%*@aud2&1r&(f2~%+OtYZUW5`kZpjl_i1MatYtF&IYY-6n&?}! zWkbo`P4{=-*S?`a3`hKl9*ZEf8kB`76A@G?%68DiZh9w{OG~@y-Q2k;4Gji8fD(6M zmxhKV^pXH>qYt`4b5GF^cyx^PH#8Iqw4-9Emu5&Bj<>Zxsa-QU^n z(a?aeM2gOf3d-4fey1*xl8`ujA==wr z?=oy{ZbL&qK?nW>4fsHqwgY9NZ}BI}d??$EvT(WeLuMPb#i%-p>S8tsu|YH~0{9RO z%L2X8be(vtrZsr*vwi4c$dF~zOIeWEDf&1ItTO1lc+91Q9#V{hdZ0x-&FBICjmm3i zI7H=Ha1~WObXVt7$RAhT<%R|>WcWV(#V&dtP2lI>5|8QhHSi3ZJEZv#4G-cLl!Xsx zGRjI()>R@L9O(v8`=w~vk2qG3$}6yWz! zHXUWVR8yZ2w&>+F%1;fWe`V`wsqye9TQ6&9IHBrDWfEM>MtP9|?$QV_y0?%;0g6_Q zXfB^3l$kBcN>R3+Cia9HRE>~o5F;?|LUH8f4GmSq^7QuZBLW)*dg6bUJ%iWMkqr%* zf`+k5p?!Fbgq^HKc|4<6VQ*V<4gr=B@_`|kClo0GE|Esmiq#9twtDwG|e zr8#=1jwNH7tBYXLA%LrBJFsEKdnpID6*tZiT9G0}j6EKnEStW~(Y*;>0rsIt{0aO+ z0m`M0z4T65)5kX#_Y#0sp)BMB1RG40m5f)`QPfL!B~_!~6e{@u6n~=99+aI$rCxec z8NLOo9V=*Pm@I&kW2F>Dozp0fzp|mB2xbb!FeWQY+=x?5i6a`J(B!M&N`42P4S4Cq zhKB6lffoR7PHHH-WCwzCOHjd{($KI9??N+$dWrJ2DECdhxO|&Hc!}~oC_mAnTrl=c zlpE9ZhK3S)CRcA?wrN@;&bYB+u&5*Ixv(>H1~A;WzQ{s+fN3)vC2@SEkmo>@yHFld z6sg}RJ3GBep~P5ox5f{Bm%*)Cd7s1;7#@7>jodUP?ujSD}0x%6+O_+LI{X zh4LLJuU6$%4BQgsHp;WQdf_(do?NyGYJqKc<^ee_=L_&MlP8YI>9fora!y?`dHngcR{{ zT6hTH>9if-ar>4uG>CI9fE(p;7T|MB8ya@EXcmnH$%bVO4Kr1Fqf&Q8c|EcI=&kE= z%-{-LqZlUx98bLgPKds-X{bJ6F#*b^>-y{d5ocCF0URwAbc&(v2Y6K}oSf(of1<43 zDa)26s_Z1ns^~y}L>E=`L4Up1u=O`LIStWjDE`@mGB`B(C&~)(kEj=}=W|iEibf2; z{J8)iLsSmeV1TP==>Uw>26(yxH!{K&Xz3vVF1)3oVXhiZi5QL`_YA<>=&b=*DV)8H zejA{tz-4#N)4OGsu4!o4q>we5uMhdP*wr`<*an5Ekk0hfSM@TnNyS z3R?94NIMsRDXQ}S&&!UAin1sQ-WPA-h1c2L+1XjIpkm%iO*AqM_9`d>0h$+d@R}x; zmO7-Q*w50+QcI1Lib_ihOUn{}QK6|nD>W={mD&IE%*@$2@9ge7YyTgy&#-F@7$c11_#FwBR0%$x-(yGSf|>XTTz&|i4xY)c z;LXVOUD5Pg=u6<0_*;?xh2WRKDoxxo^qjL-_hf?j65&+>=6X2H(Fi^d-XFYa z#PDJ8VPM365W!!;$7}TLT^lns`l(% z@Tw4O9@nu$;}{>U=p=_#u%$(?6nqC*w!Fmu+u+IIQ4xL){2*9mXbYs$!*O`eaB*0x z)p-qUY6)5jK3wyE0DSzGIb$*rNF#g~ESfQ-J4nD@#Iz`mz?cU96j)`@17F+r|0q^0 zaJWok@N4i2FbNMBO6wd8-af+nfR6>MMtd@UoD5b)dNKG^aMquFQ09Vxd;Av;VizsR`BCPi5rV*S{Zj zV-CbwMgI`all>PYvg7@Y4&moie~&|gf%qi(S?FJmuJ)EBG$edihh}<$h^0oWJOw#Lt9P_^Q;;rf)t9R;716_!s^SLcP|%Uw&Tlf6dRB znRF8s=uJf69Dk!JnL|8Ld{R~U0HRQopj3B%7A%TTswzjZ*CEPKB4MTNmBFGIC7bVp zYhY1~QuNn=MM+BWzvm7JN22n@56ZE|Z@-2-T1@wx89D5B7jq}Dq*DkU1B+(WwGp2F zb)@mAoUtOppZ*4&2mEM+e*?Z}i>SL3e&@RlBS+h{BLA!Ip)G=+itv;7P;8CSIb*$l z6i4=Bp5nmocKjqW*c)c#I{VPfaRcZ2j~q%tzU;ri&j_|UHa;w~^N7vf^!JqCZQt~d z;CEnmzj+u`1^;sSnc{y*em>woB0nGTUyz^E{f!Ri=Nx|z`MJ`cDnGaQO@7AQ_hwvh zkJ9#6`8SC38qN8AY=%AMKXN$j=6U}Od{5Ybuj(hG8J2f^E3V}I!K1)5pCCg`@IyMA*j4eUsqm4G>&qnM9^>7@ai&w?BNmmte8!da?HifhWwv}v#sd~?8; zfmQ52_$2aG0?w{L^L^X{(3o^TQT9C-bI z;(oBjuF!*3S-4=Oktg&u@I;yxk~0W@&91cjV{uRsu7u!J@IDd2AHnx&{-bvz7aBeQ ze5Hn4;M+C)S+HpJsZ#kaSTy`bNBm#f&100&9Jbz_!&ESGAxPoDU{M293}%BxB~az? zda$Smsz&jBu&4>DYWy=;R0dUB zQ4SV@pVR`}0{#Q7nnoYw@G&ror3Q^Zz^{XqeyL<&m%XVn{8a+ZxC3GRzFe>;BEtL= z;0D+v{0I++D{z>F!xC`--vE9Id}@TB{yGU%)8i2%jP344R%rO6;8hy_&HYIC9hv^p zsDz*K07brSGX{NE+K`b^`s|7^D} zViXNWB^eF_&)4u-`yx8-%jb+WBgiCCei4G>HG(zZnHqi*tQ1uxfw@U4I;qXq{&N6$ zHT3d{e-k{-fj{LZ{O%fdjz<184UxvCf*3ZAI>p9OX`ybOG#hJOT> zDw3u`6?w)hI84_F#^>os8a@nsrIx_CU{S4A!t(QAQL`N#GBh3ri^{DMEq?`z`mMs- z7nmuuF`{EC4x*Q<2Grsx-`y7ch7Y2c_&R42wUbS3q!D6v0#y zpgu|9CXXV0&&U~TaTJEr!0Tq`m_~&76NDcRemKH26X7oauUU{Y#?$@+!LSmCX)F4+_+9XH4Nt64#~MBn z{0tF_aFzsI2%fb$Q#ZxnP8`nF0{jZROvCSjmD;y3IPu5iXi?5Mo^BusoVdSAUN{y^ zP2d`M?2@R>kc1!6Miwpha>lwShg+{<@Bynvb9aKl8t}_7m>IQ^|A3FZgb_Z%g#)O< z%W}rcq(kbw2|o1;G&1_7;EfL?!Y|TDrG&v-JAoN;M<{h@6H*oO9BbM27hUP z!6yO!lnAi#LCQBQ(%r!JgAAupj?VZMjr4&WV|>W)ci>0wk4k_DzMTmF-KXHUI%m8T z(U1Ez@xSz=*x{)}fDH*e>R@v4Bnc1(6yX=Z=CA3tQiWjSX|@6$jT2A=Pk$`NE%4z# z%^7mWEG2OB)8v2U<8co5K4fT)k4WHJ0w4Sgr#&x56ABn!l<>bPfgecVUwR3LSHUZ3 z^&?4#wDRpHhggy&_%N{gq{?O_@O%<9aa7bTk)+H2mlB8H=>!tVdO?ET^Kozq5Pobz zf~UQni|~N)Rq&}A{uX$qhF5`SY4{QFd=38`e6EI{1}}-RXROEJ%Gkm96Zl#U{|&rM z!|#AsXn5l(^b!qc!S`r*d+K2h{L08hXKO{KcV46!D}^qEci;T#7+hq zZ{+w#z5!zfc%+7Bfp^#N$HDfSxqzDXKVV#d!&;5u<={nHfKP)j)36U-rr{OfyEOb2 z@M;Zz6a18h9|FG=VNX*02oCRP1it`hRSNNc2E4n5{|KI@;a9-3H2fBLv4#f@rAjrt zIr#Pv6F(7bgTqRVU>EQj4eteBzD3+fi{LqLMMX&X1HlJw8LBl&FKL0V)cogx57Yc_ z0^c6^OZ+hS9~_Q`fW;PQgz&4elA_&lxB&t+jXn;%N@MU5@a_0-8Zo#GyjJu7H2CZIZxZ=`2mHF` z|0D2y8vj?p*?;7s_({OqIQ$3#mBQVovP1ok9PH#9FeZVY&=N2me5B@I1CM8KNzEs& z0ly6W_#pHMVp)EeQw;FbT(N$U6pj1qYI zzj6T*dxB-qdrbRBr4 zhHnOYSfu-Qb*tzXP7A;U9r54L=TcHT*RAa1B2To~+@&96|eAq80JB?`M*z zwSg&Mb@@%Y(y%u!KtBm&e9}XD0Y{u*&h(;B{trn@CFNAK>-i-KEM5#{Yvp zz=pxrae!Ii>M%p5qKF`CEykCa*clcaa5Ux4+F2#@LcecJeQ=*u#J2Rd?)<& zfj{{lVf+qLz5sAFS>? z3VvuE6B63Mu`>QiKh6A(8IZ~$)8r$-Qit-%wE5F7(9Kj1!P8!h?{13!r9_}UX{29G z;3vTwN)wD#8-*p(I+4NXXc{5=PeBoV6^FYHm|)x&5ga#-!Dq?@V?%_W2Ot0b3C7`> zkp8rjX#Ly7-R_g%W#FtN7>@UXkN?aB!;Y%pZScg!R0(w^RWjvd4DZOzLWe7H z5Qfqyguyq#i?@v#{tmoK!y`XT9cs7;ep$mG1HYr;tH7hUxu_C&A9(q;+WP+wINYTL z*lar8O2Z}asT!UMUaH}%!N+R&0q}tueipn=!=pZ87`bg3|F?^BycG^}v=kl$-ciG| z!24?WbKqk&{5|lg8vYabKn;&Qg}btp@T@4lgTZ%tIH*=T3kUT{Bl-;ZvKuBC)1rR6 z`$uV%UsaN8z?cPI`}qk*Bl7<__`q8x7|SDEKNbHkf}=L`I(X5SCm5$j{->Nq|6fcB z<&!$U42O~28&!4m4e;xC(deQ^xZlTET5-El`JVz_2K^pU_{+howea_Vg}=lg{Qnnx zrRKlU4Eo;_nu9e1*{tD@g0otLSAcUGz87q1cpZ3y7JieN#H{%j!0P&}BtC_*wAke@$SkH1v0$MH2pVLby|k z|E1u|NWd705J~t5c$rENxcNLK@^2d9Kp6f;Bqw*wjTO)npJ(j#f8>A&7?y(sd>MSF z#vuO^3@9P0Hi+PPa;QG3k_-R9tyHR{82Nu6yb2st2?#D@aA=)3_nRg0em|Vh@!dF@gnfVo#HleD|otw ze+qULmht}$9L6gLaIV41M#IN|SCZl!aY~~*8@v{*8r`j6xiq|6CC&fu;I}or za})ZAe=z-$^dv>=pT;% zD{#18WAIb3x&|#dejTiC0}I~ybQY7))24zFIr;_0j!kwAuCGfSABn&Eq>AQ&W|V=NRqCQBVc6 zp`*a7Rd{gY{}>%riGcqEmTT?vi9cwS*+0`rcHT8;WRim;!0K|d;9J4Lb!ABa41PcY z)F(N73A}QDF3Or=4kyhf$GgOBK0jfS6=@Dt+jBhF;_&S~TSBpjA&0X_^?7n`L@E)jncphWeb zpJ!GJeISY{kxgj>b5wZnbAOI6QA>$^o$%_D5_>AZQvQ76@UH~HQtEK!AzXUJU#j3o zf1;62-nD(`wA)`89Vx^dBv;;msf&H`M_=76AFG28R0>7HTo6jAZpos}QHGyjh?9FZG zKP-Xe34-q=@NW|M?+H9wT4(f03GE~J=I6b47vfcbpFuD9 zS{xL;?k{w5yFdH}jJ-Y{;@fdh^qPNI{$dJ11z14XR(*1=_%myg>2@66jy+}o% z`+o_4F)y$}^A{X`jDPZp4TA6+Fmek+JPHTJQ1|!o7kdPHgo0K0U*NB70Epm{&(i$= zf&Zm+Q{m72XN0l)BE$F$4x5St_&D$~@Wcq84_Yv1SO&{u?#N$s1 z{H6ZG6h{tiJe>>l;TQVr_!}g6Iyu@WpdMj7171W1)Qm{N$p!rI3&ZQ!Jcmgu^yAg| zzaI|E6Aa|`zRnvAPjduHestcO-)!jOf1$Ub7qHe?D?}35P5xDnxke^H^SkCq?*R zuri(@3}=Ja;J;twfA%Z6c+0o5myH9q}Iv ztxAC4@Cy@QHGAXDFJPKZglbajfR6;LDzAdQ>6(Kuo{ZTKJpvssC4jO}B31Bhu(DJl z_&Kn$L?ZZ^4Tf=EBxnY(=RWDRkbf|kF{8TW9b?eA4}#r^abU#8#&ho&MouMY#0cX_ znvXJpA~TjP{MQy{w)Vs{iJnHW9McQ$wHVp9XI$#jz^hdhq|pPv4OSiNt6&3qRY<=E zPu4KL=q%128etL#mSTbwQA-!HI3j}Wz)~ptfR*_b!6$>WL@+7xzZk6Su!z6&Po|k< zaP^3=UC;aH3`SHEu$}h&G3xn~(fI@O`lM)KrEq_18f06+C#NW>h7%QL;+9CKJ z6Xj9x=*a&rzj`)>JR}czi8Y+?8!#RvjjL3Yq)|RG1QUJ(#^3Q5LohqypjxhAV+4Rhvn~!yV@P# z4O%7s5w~4uD2D%85(EwYk!B`;yuM&)iLPAO6H`Ha*Do4Mki_%Pj{SF{#Dw8G!bypp z0Tz0NH%0hJ0v?Y1ceq$$2tP?+89c2$270nAqEToO2wr?n9AP&shPlFTz}RI2(+I_I zglR1L8w;w5Q6r>8zYShT3CbrW{15OZ_)BXFv~v$cG#rUT&`KfLk~+K$yk`{P1gTTa ze`g9=5eDi@I1N%n)hkzGp;V%J?+$&6=Cnj?cX-@5Z-~EV=nf}e!g#JqgD5Tr zuhFnXu>1K#7!1L8L4P>@cS0u#+~`tv_Q2AkRDuPEANM*gr4u|w1WHPYhcHkC_rlZm|zRP0b`TPSi9gq1_z-pfR&Lk!E4_LOK4`)J|-UjR+uA+KpNCm z?;wOIQai#Usqgb?;Uk10v#d{TInXw2CiOXWbch473qH-yU&zp+r-_h(oiX{9RLLjy z*1|8uV*hP8yzZi*{yIL7Jnp`CJQaqICpPKY4F3m$Q9}s=V{as@5BCO)V@LN-*8O;iAlb-engLb-q0Xue>Ctzx3Z>J|tc#`!NIbMWWd~ zs?5v5Qt)ddyb>(sAbnNp_M{9u0@KK7(3)Vd7I`Tdxi%s=mU)NNgc~vNz*5qR!BNaZ zB*9}N|HTX#Vm)tS6n+C(YIc2ucVoa1t9mN@g3J9cdYP>}JyV~)9Mv$=BtlYJ=y$*? z!FrF_a9Lak&*Oip61jn-U>>0P!^SxN@|Zq}-7AcPjafvX#^oh{4Fjk|{^3o=03sld zL5pu9awWm;h_Dpv{>PWl!j%O))uQJo;|0@1hk_1zd zz!u7{!1v)lU&=j5m@E^t0HZ&N*w{BNwEe*i4L89{H7pVCjy=Wjlbm+q!xR2ue=+=+ z(SH)TrA+rptvy5p%EX`G7s1nra0@~R9&;sf2pr69z&AV?MySM$!N4db_%QU+RPSe8 z+=mi6Lc-Hh-v%!Nt8wxG?{((jn!`olwbZJTL#x4J$xuFFFap7s)#x8bZe6RI5pr#p z>_AWjM?x?b}DE}l@hF+Av zju9Pn{$+8BpCdua(x(*psH;P)CNU0JY>0W2m=w~PX0Kf^u}c#8-h z02b4xVLB>{f|E9cAtJD z6g*OdBK)!p`*T#UKvsPSEP^PQ1mZvaoluzC5&gqV#zZbmi|~s~6Qo-cLBQ`%OunR7 zog4W-#7a%N?Y_aSKp1XdWhC7~5gf$KTDp_BXm%u>+Mn((|@$*+P!stB_Qsa89XLiG*J|FkoOW1Rj@be** zLi_<(!mBiXlv+@qEWj@UOZa_}D(#7k&QOTmo8kzPcy)r|iwQjHvno2)IYd}U;Nuc_ z&SwK@6b6z2S3w}wc!P025`M}$uLy@{@t=-=Fk6iL1&1G1{yBsvpyvQX6w^*lH&D-F%uFc z@J|EJ(pY{HtV|3`64s0#FvQfbeA1G(*e=AXW!)P@vD4u<$JzclEYv5(_?LjhYiK0m zZ7z?4bi=nN{F8X{7lwvU;&ns)JtN^@EWKqYgCrJ<$>BF(e2{G4NijT%gA~JOz{^yz zf%n^<4hkNj{C8lf4BjEaBX97ZTgqxj=PA4=YjFrZHG%KDElz{@>v)eF5M#IRYAnZH zO@9Q3UpQ7LFqa^{G?XBTuf21qe-f`q_^(djv0oV)-uSAHrGpJ|pof1=C+Ng0?;7f# z#EZT$)IW(A->vye{6ieTPw52Uk@si;y5L;G-_r0CRJ&BMS}DAWZo&LwJn5Zs{>}r& zP8&i3X-BKTS3hbumg`tva;(wRse*yk)YyMvbzog;d*$eYqF~cXL2qh|s@EyN; zErq0$Z09qPz7JK3Xs}rfUUEO>9N}lcSv#KjOPcP{qA-_nqJY0%h@;>aegnpS_|G32 z-U}jB1oA5p4u{3Yx$-{+hRS}rv=&Go=ze`j(so= z(hbi{_%BW16$$+4s-gUJ{O-;JA2TGtL=r7&I*JY?30ff)4bJa|;MR)eM)IgWX}sS` z;3pFJl`xMlCDI_4;KL7llQ%JHgY{{HGG#9fRKB-0`pcnjCyBzoJHmSZaK9V#CpdCk zb9jaTE6I~;oSBIJ7(eb6Y zw>$&E1_(BZ0+?ZBhdYmc#ZBaa(svb`1OZ}GDzYp9~tVO z#AAOl)IW)rJsSH<{D$rz_)(1@iT9&K7HK6W{?BXlr{KRDf4xeMeJqafa{Ql&{e$?8 z`!s@kATXVn!EeELQYC6s*ysx+5WE!;i+tD*te!p)dx~OGNPcwQ&h`!;9C&{;R1334afRoHWC&-pAG~ z;g?hGg7?ndCM?2FB0MR9m-tUE%WS=q&hw35FsmdE)wI7Bka(AA(F(sszmJpA4d1T$ zpGYz#{0172By`5zU1Sn-4ZGh?X3M-l{=CGgz|{J#mj(d|R|S^jl5(OcX<>>9aq;pTCc4`5Xf zA58?gB7yHs;B^VS$(M#kSxDg1z7&|=3W=oDuS^hpD}jHXz!Gw@mVraph1kViDrr;y z-kZtexf;puUt}T+RwVY9!|3H-Ny3Z-{!{|rpTO(E_id94%4{n{)eGQRlX6B5eu7{5 zG7=%TUrg|C2*zu8yV1pRcdXy6_n z(SJphdybu$3!e29hHpb4tIU@pfD+e+HJl35ECezRL89Rp_dS;m5%;M^y}-0?XzEBW@6Z{WWTl%?E|A z2g|BgPEsWSXWqryVnldVPw<$phpXNtk^c&?EK;XO{JibHL5`W7Tow_W2$so*2m@iz zx|^|m)viV^!jFMvv*Vr!@5LXoxuNhE?j4$e5#Jn|fd*L1fM@&|hbt%L+9`6r#isgR z)S($B;2^O5bk4YJ(-8j%oI5BNJclC*JpDd2TWAw=Muh&$!Ta8mGnQ`@;=S)@zF5f_ z&u2pXrw0)7&2V+LmFy93^KHXeV&~d*at=6G${BW4BCmiy&S4Y~b%%|NEmyKBe|XL~ zb!5o!EO6tnxDh`NUWPy3K?&x+6E0EDjc@}jTUt56a&zqb2XUAf2e<`1UyJa^;NvMF z`LfVIF7(yiB5WFe0I$b?A}&%QJ3d66GbKMV!bgE+O)xpa=Y!Y6Up_RaH#Rm}MF|jK zdPLv}W-lij71=kyvLKxk`H%fB{hImVtO%b3mIhi}=H^HqLESja(IczrHd{?FCT# zM@9*{f08qnMED=zcfOP}auL6ae*``@XRPE=?jQlHaMaQ=@e z!FtZP&x;tmiNj)ZLc8DZ@)PQKZxRqO{3&?p&bt~<41@_-{wUq{^qgTv;U5QIxf56O zM}_{Q9t-yvRQNGJC4uZY+!gV=A1uol8HgRgy;97p(H;4A;0<6+~7;aM4Of%knQ7icMp|4+cyYgB1eLSKH8M*L#V zcq!udGuaTJhiG9KQ~h9mr`>fJwg!*M$=!hPQ%c9e91@pM8pM`X~`b z_)_q`FT{h>&A%o=uM=P7|6}lh-m|%OtA7)RC4bEsw?_#&<2Uqc0vsC!xCMOppL2$) zvL~Kqw9IgGKBBkQ68_bktiggt{Q&r`Khg^#{LN<&Oaokkj_`s1OaI%Q0IHGv9*4M&jrR`|^yCY) zsblHp`-OPii}e3FQy9%61~0ux1c&j^=f)wy-~Yn!%V@Z76yeD)4;@S%0BeJZvF$4q z@o}idnPK>&!M7vnvVrTiTv*Z%MF@25ib0LZVNs#Dv`Nh*%f;!;y>Q|C;OQ*c{(-< zup3y;rBoxj1uV+I$436U{+mWuWeX}|@cg@UTdG7g(oYy1&V7o7Xp}&U(?HpTwxjTC zIQ$bu#MKe@u4F4u&W)~&92RET(_+JPdKAH-=%+L&vXS_Yq2M+~{X|rZ+=%{wu>(V@ zXa!iGu#7-;L$9Lmp{gM}#8HNM{DS7FPoZuA%QAIrl!GTY4bi7i^EnOCr%=BD>l2dw z*e2H}BvW=I0aTeP(LHk{@cU#q;O`C?pTsBiHYQAU{tV#9L&mOdl!DFj)=gl1~<{M6_Xxq)a(<;;|rE;Es zTlHGquDj)OtvOgJ_D^d2&)$)7vrfHPbQ(3wF1S{{R+t*Ny49jnX_l*nmfdRAO4X_T zvh`26GqeAgVxd~A7wd4TIfZ&FA22O@McXPkjj~fM6wCEi!|j{vpquYE0fTPO((*cr ztK2u&@_QgH_27C)XML5O9<*IZU8$M!n3C13m)vrr*lM-%G?S=oonkHT+RaiuU#*r( zR=xkStrYrBgX{Jp-MXV}D^`$R+E>l8+(y%Ckl?0c`zyYdd4G4;Lz1*p2lMZt;>$sV z9<8oava9)0vskOQYQ_FbqHOodUPtcA@1>RXpNDe)by4oo)x9oaA>T8#9T}_iT?9Rv z?$|EzhfUY37Ojd^D3&aNk8-J$I{Sa&J+SScw9rEUbgP*{k5cSX zi2Wy^M{RejnSy`uJsH<4S*4QWBJE4nQn~sbx=g;OMCfQ)`QA;-OO9iO{<}<}|1MML zQ7{#+Q`{DMHlxmr^`F>$_ogwW+gP6OziH&l{(dK!`}#}1mf6_<`N8HE{;H3dqes_k zd8=v{3N3~V+p_$L-^>h-Y1;KhrC~eeMzc|JO695kUL(z%|J!e7#{0K^Gqd?<%c|5$ ztyZ~Gt2P^U-T%%vk=JgsSzwl7xpuzRtQRVN_FI`FvsK2Liq$AO;Z)J|i zTD3yGz+9qUE7h$=z2JXOXv?jV<+L2DkuR1Cl~&c?_P)#>Uh0gdAPwx$LyN^3{Z~jq zT3Qe$t zf8JAU*VKCmQ*2jN--5(HYDJY3?7tGP6y3ic4`*OKWMR{##8cYH6gn z|AE5KekZfd-l+}3$s03H`Jhvp;V=0fPm}L*mbsCL#f|*=-^uK`Wub~pEf`1ayf6gm4a0-S(S3Va^qR1;~&y8H}jh0oe^Z#hY zl61Y}yO}9j+jf{c6|HiiUMn~3T90w@`0r(AWSd2+RC6rXsWvMm>e2uH_cBK?DRvr8 zqf)NqD{jlSrB;ugc2s4C3`d6^TA9)A$mL40K+9_tY^G_2My=UoFt(btMxj!c zkxCMxT_~v`7(BcnNW0ckgM@=fWky>BriPGyEy-$+R6{~|-EtE4@5+pJ0~->gTZnKN zsmy2#k<<{un&{9&KUSI1Zky?0q%tHg?KYYg#9zOf2Z7V527|#TsO|o%JFn_HpH|@q z#cd>*fCdruUFH5gKjm@T;^EAZUZcSN zBYR0!fvJ7jZS`L+@jQBHRGl%gok@4U}A zsp`AA55{{9$qXEjOx0jK{Z7&*N&VkHk~!8ZvPs*p$}E8FyjyKp{bwMabEd@<&S|?A zYiDz_(_}|1I_#dcmCWm4ylNPl*je2gLI2`6SS)nSSTY6vwLi(6kS#YFR-q}&(PpJk zD3?>_QA5+(C8=)Dew>VdFy1Lma_y`Gx9`zpu+mD{-b2>>;W3 zhMhx}`fp(I5;L{Y1WU}Q<1*w9pMw6Yq13&Fb(O27n>(1w z*6F_%Sg-cm9l~XxCkKh?Dd@izcvrLU6a)*7z9jfyyt+(JZ2z_3RJ^`Z8=vu{rl8z^ zEqL)6PdeNFYau?nO5y4?2IEu56k168mq_LQYQdAGYI%rA8de^}=eengjZcY(A@#z= za=djg3~fZ(e=WG_eZf=9b+>=%Rq4NZRnk&Wk7sn1{^v7!%QEssx9OD6nQzsd>bbL< zMPuRo{EYL@Jm;*z8hiU3@HVY{y;-f*n*I$>Wi+!pPcRdpLv2Q7b>UuG=-mS1MZdljoyJ zv{t29ahl~)x#1Qn`IcqXD$PP^Fjy%EQYW31T+ON$1`BSpSZe0&TA@;FI5pHTPC9$A zT?nMi%!aEiPRTlt8B1VtTgDWH8NVOmaXzoRg`?8=vMNDa-msv*i7S0 zw^41BnzdH7Of5BPgZ^z|y!-GZr80 z48u0!+8&yFl6tC-#|P>?Y1^c2;h9d_UbXcg^m2Waf zL#Gghu6(nGPFOp!DYOR&ajAEl!I@C^fzI~-`bl%&Yy&+-yX3Yi)hcrs%k^LVq&dNV zdtGLGk3o?+PqmomOsXh){KX^9)sg!Lg(@EKp|6$r+ zI~QfE)oj(-y>y*Ywc5y+TKRIzt%^!dsah#oT02T3^#Mta z>&EBMy<%-vt+)-hQLfrn-txcvT;{sbWe2_Kio;5z*34I`{&vr0F7&E}O2x5@h^A7Z z38!9(3G!9!k}p|^O>t=vQDd6 zW!EjbEt&2|<<&_YC2`^WGiP%o#3HiH`F4qO9##}lG+q7tJzvONku9KSMtu}p`D&v@ zq57*{pm-Xr+Uk{7vC0`h!EFU=&tB{ctV?_O6^%x7!JvbnFS_+c%W32}xQU9!>h0&T z>)ShEVHm&RB5aG6YQAO{nl_39`Btgk%$F+;>ra!l?PF%R7-?Z+F`O`m4->F zGmPK2ANaq_HwL_V%WgDl=tnf2Qk{er-BPm==mokYw(JJ-2-PDe)>%jm5}n%&b< zgFj;7nG)I`_)BKn^uiBL)I-kg){?^69So-YVW8p5f3vur{S|$sC(z^#S+_^O^z=w7 z!a(t8-mM1o^c?bXKjjk~#fPlp30ODQaZcUASm84z>1R-uan-g5=9ExG&~9<@>MJFX zfAA}rU#GW+cuAeYkCYEz)_Q>yqK?72M>^a0P|odHM=IA)%^*1UNT(gXQR^9tw^q`* zQU+eQXOvFs4kK5G^Q##1n`g~f(5jbh2g%B=rB$xFrIuYQIgR3^UBjDX!_oNp4VkS! z+!0a&7K~bTA-8wxiw4~y8gGSKtyZeIEDl@3kbjb~4rUjfUjP>r%0S6zs2N5v~i*t}U9=9Aq|Zmzepo<<8cyr5fSfv(K7Q zn|=E1xr=5rW}iM-YnDo`!`!e@X>t85Kj|YuTa8Pn?B*-nnX6aqdY&C@CirONGS4eF zD{j*&4QhG`DWv|Lf6vSuQ>|Mx?yA+QR;q4|i!}a|@33h->2)@(%jHJB%7Hno|G z?HP?q0q2fA65E~@Kn zGO3y-+ECJub}22}NE6I~T+XMF`G5XL=ISxEVv#-BI%mx_j!Rp*kj*BAtpC_QGdGNB zR*H>^%k^lhUa1wzm8t$~|HvHc|14ux#?ee#cDcbuLA_9{vr)kH4>!F2v4?NHlR1z@ zc9Ugxfr}dKWRz=hKXdcdIu`&MPT8#$IKs8rn{!!~b4uNC>`Ect3{Iu=PuPsp(r=u} z)xE#Hli6mB+pJn8mh*+GRkzte3I>ur{Dc0T**eRP2DfNiXu`Hy1@6-OGyk0_dvyoZ zQnokQHm}r+m3Vkbjk_(Z(<$4_lnzoanfG|M&_UZl+7>eDq-_zLAoV&+U#&dmVm=_H zqT=~VI%)Uf^19W3d^a_fZG1wPPTCgV8mZU41;%ScjkY^!JZVTLZHu2asn@Fyu!@$+ zOZQUiR%r3DeVcht-f?^M(yBO~l&7+d*YN42YWn1*H?ny8lFGI{5TsJNk<85Xp7aK? z)fSO=*>JLRd{TA>qOe?uZ^Dg}D{5Q$zZhX|Ii|*5Yk_U-5_{Y=lr}VxI=-7o&FAd| zBXoPtGDrEx|0^@n|98gRWL&LLuGJg$W~pIStHpBn=(qJ}nC52O0kEpAa+$?$zQ*}P ztTAJuM1!3P?4;Ng)LQB`d*e+m%yB@65U)6~OirWp*O=x)uUu_4oN5IfAG_FcBWGNJNc+r->v z7cBTVr5a}z9QRhZ;)FI8dU4E*i`7;gjjBCHnwVm#xD~s`a=OxNq03cIIVw)!S!1gx zYIdoVN_Gx*QgVQyC6r_Q{<*ftrcSO2rtP^zCna~jhs56=ayvy;ab8Ls_us!N!v-e7&~;sGLRgR`6PBTN^C5)3fN_{Y7P^mNYJ8v ziwZ*(`HjXk7S{5}1xQ#Tx2nZft*%MWRMK`2>Y&`egKN7?I%pH5zBk%DA)hcu!%{nK z5F5yv2h{5vYTIR})IdK0%QdJGMA_z4qgJh=FWj^%wMqevCNyPg)s{@xEbQdPTG(ln z{;gS)yTELs@t;*f3%OizNngJa#S^%+mq3fo3z~!FlG9`>xr|K;$Fh{k$UOGoTojUXDQ+74N0$)@Ezh=9?sJp&a=|nGf#? z-ThZ4nwznKS#H^dG6%@D64y%{|LSc`E9-KSS1Z?w8~}4(XS@E-wlxpR)=30=`J&EM z&bx)WKYpCq!0=eBgfdah5uJ5RlKD%=na5|VW$aAW91hnw6>-Wf|K)M!2S?Wm4Yy`v z+_Y4yu{YpP-rk%!{u2vkFG6o>mQ{v-#U+-K%V}cO|G{{3!RVk1R=Ct-=SzixEsit% z+qN^e$+Fi_lBo<=lpKreM&k9cohkvl8Pz#+U|D0&rr}hq3f51Vrn~->?akA(R;7Wi zUd^RwD%C=@;lFm9xwZeZ?aghl0amTCGOL%06}n z?MB)j*wRV67L3=mJ;dq^>1^9G`gGFvlp!YddbG%Rk29w2McRdJFVglXskn~s)hGNf z?`(d^qY>IAiz9t8rCeymitZ|Wui)`zp;XHF`b`I^*U?YfV|NE_2WkJs63?U(T)j?F z5ub1*Xgf*c{k3$`_JV&1>B-%MReZl}2yItVmotOTk;MO5&RoFN1uigP+JSRBtB57Z z_B6f02*UsDB4&^o0_3zaFPkYWft*^kR^n2p5)o;n{%sS?65~|UaTtwkt6Z@W;Qosf zOvkI2i*~C{t131uE`7!uG-*sVlR@dE?d^diDF-ddY_%&PN!vjh8&OInjVIJYNxg0b z>vXNJaH7{1byy;0Qox=)_e5D@*_cafF-}@F%#L%`$P{$BfvM3_J0_k{&_3>QhPM!97Xpb!0J~%q3|%NaLQ8PFn0mdeC95 z*|MBMk=u+V?6=CLH&laT(+8=P?V(~=%8i7n?OR_l&+r;-G|IKBqEjz8Xd4aF$l?`3 zjdL_?!?G-4AxZ18OE&64tXw&T;|da5^X-JBkebjIWMwtMUv?w6#wJfPH}whyw60r7 zVMMVEq-~L#!b~n)buaOtz}wB32AQv5^OOyq3d>F&{@}J~zKXfg7Ezb?uF5tt%27r7 zTZyIayt;klamO9QikI=C>M&~5Yis~H703VEBy*4}Sk(e=m|#MqRkf^EVA(V}of=Nz!(bwgqH5X?w~rl=P&I5+ns}$v>2~8)=Uz@WTB} zXKM}y-9~}ib*O+f*bNjzDNign$NEp~XO5r9y+fOh!hRncifnGk(zu(9^s^S5Ce(DZ zjPRp-v6$wj@O;axWrai4t+D~hRWokm1+HGwb?Ttq9v#@{Wrx2~u$yQ(bGMQq)N=Cl z*lGjSta5eGZf8E7v|X!1NWHFX+f_A$wi{`wf714ZO=s$L&zD+M=%igK`!B2ZKstnH z*Zj8|^$^l-*^gywI%!){>7?EBA8#$`v|S4z-dRc~ZFj4f)a%i*Vl%QaZ74 zQe3^BZ96`xQMA2D`>(Kg2^MnohUs1L*pixpc;=E$I;6*V!}jm^=sBHj|2-kz(rVVd z6bTcrAJbFNe=Wo_COIJ+UdF{UrgYNwz?)7Q^#!ibrPKCbwDH)P&NUE7!44i|R8P&9ka=Pv-&@JKvRhmA$Q2xn8fi z;i(;lyZWHYr&E12xY8F)@&>s|Z=>a2EY LCZW`eH+7g=7;kv`eVM8$@!P=Z@w?< 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 NDfG6snE%XA{{iT&UEu%# diff --git a/examples/rsa/script/Cargo.lock b/examples/rsa/script/Cargo.lock index a186b68c2f..b6b917feca 100644 --- a/examples/rsa/script/Cargo.lock +++ b/examples/rsa/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -254,6 +260,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -276,7 +283,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -419,6 +426,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -426,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -442,6 +484,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -559,6 +611,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -669,6 +727,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -729,6 +793,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -736,7 +817,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -885,6 +967,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -972,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -981,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -991,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1000,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1012,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1023,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1034,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1045,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1063,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1074,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1084,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1093,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1105,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1117,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1125,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1141,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1157,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1172,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1186,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1196,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1214,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1255,7 +1343,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1286,6 +1374,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1539,6 +1633,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1629,7 +1753,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1661,6 +1785,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1699,6 +1824,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1775,6 +1906,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1796,7 +1958,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/ssz-withdrawals/script/Cargo.lock b/examples/ssz-withdrawals/script/Cargo.lock index 275a5e67ff..7bc0a5b4df 100644 --- a/examples/ssz-withdrawals/script/Cargo.lock +++ b/examples/ssz-withdrawals/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -254,6 +260,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -276,7 +283,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -419,6 +426,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -426,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -442,6 +484,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -559,6 +611,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -669,6 +727,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -729,6 +793,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -736,7 +817,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -885,6 +967,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -972,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -981,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -991,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1000,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1012,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1023,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1034,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1045,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1063,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1074,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1084,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1093,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1105,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1117,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1125,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1141,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1157,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1172,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1186,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1196,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1214,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1255,7 +1343,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1286,6 +1374,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1531,6 +1625,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1621,7 +1745,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1653,6 +1777,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1699,6 +1824,12 @@ dependencies = [ "sp1-helper", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1775,6 +1906,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1796,7 +1958,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] diff --git a/examples/tendermint/script/Cargo.lock b/examples/tendermint/script/Cargo.lock index 95ea9e2f21..d616c26682 100644 --- a/examples/tendermint/script/Cargo.lock +++ b/examples/tendermint/script/Cargo.lock @@ -137,6 +137,12 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" +[[package]] +name = "base64" +version = "0.21.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" + [[package]] name = "base64ct" version = "1.6.0" @@ -254,6 +260,7 @@ dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", + "serde", "windows-targets 0.52.0", ] @@ -276,7 +283,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.0", ] [[package]] @@ -419,6 +426,41 @@ dependencies = [ "syn 2.0.48", ] +[[package]] +name = "darling" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 2.0.48", +] + +[[package]] +name = "darling_macro" +version = "0.20.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.48", +] + [[package]] name = "dashmap" version = "5.5.3" @@ -426,7 +468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown", + "hashbrown 0.14.3", "lock_api", "once_cell", "parking_lot_core", @@ -442,6 +484,16 @@ dependencies = [ "zeroize", ] +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + [[package]] name = "digest" version = "0.10.7" @@ -559,6 +611,12 @@ dependencies = [ "miniz_oxide", ] +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + [[package]] name = "futures" version = "0.3.30" @@ -669,6 +727,12 @@ dependencies = [ "subtle", ] +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "hashbrown" version = "0.14.3" @@ -729,6 +793,23 @@ dependencies = [ "cc", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "indexmap" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" +dependencies = [ + "autocfg", + "hashbrown 0.12.3", + "serde", +] + [[package]] name = "indexmap" version = "2.2.3" @@ -736,7 +817,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.14.3", + "serde", ] [[package]] @@ -885,6 +967,12 @@ dependencies = [ "num-traits", ] +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + [[package]] name = "num-integer" version = "0.1.46" @@ -972,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -981,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "rand", @@ -991,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "blake3", "p3-symmetric", @@ -1000,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1012,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-challenger", "p3-field", @@ -1023,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1034,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-util", @@ -1045,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-challenger", @@ -1063,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-util", @@ -1074,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-matrix", @@ -1084,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1093,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-air", "p3-field", @@ -1105,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1117,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "rayon", ] @@ -1125,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1141,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-commit", @@ -1157,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-dft", @@ -1172,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "p3-baby-bear", "p3-field", @@ -1186,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-field", @@ -1196,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "itertools", "p3-air", @@ -1214,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git#447c01ea849ebdce96b5ea8444e7810ddff0ba4a" +source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" dependencies = [ "serde", ] @@ -1255,7 +1343,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e1d3afd2628e69da2be385eb6f2fd57c8ac7977ceeff6dc166ff1657b0e386a9" dependencies = [ "fixedbitset", - "indexmap", + "indexmap 2.2.3", ] [[package]] @@ -1286,6 +1374,12 @@ version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + [[package]] name = "ppv-lite86" version = "0.2.17" @@ -1531,6 +1625,36 @@ dependencies = [ "serde", ] +[[package]] +name = "serde_with" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15d167997bd841ec232f5b2b8e0e26606df2e7caa4c31b95ea9ca52b200bd270" +dependencies = [ + "base64", + "chrono", + "hex", + "indexmap 1.9.3", + "indexmap 2.2.3", + "serde", + "serde_derive", + "serde_json", + "serde_with_macros", + "time", +] + +[[package]] +name = "serde_with_macros" +version = "3.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "865f9743393e638991566a8b7a479043c2c8da94a33e0a31f18214c9cae0a64d" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 2.0.48", +] + [[package]] name = "serial_test" version = "3.0.0" @@ -1621,7 +1745,7 @@ dependencies = [ "elf", "elliptic-curve", "flate2", - "hashbrown", + "hashbrown 0.14.3", "hex", "itertools", "k256", @@ -1653,6 +1777,7 @@ dependencies = [ "rrs-lib", "serde", "serde_json", + "serde_with", "serial_test", "size", "sp1-derive", @@ -1691,6 +1816,12 @@ dependencies = [ "der", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.0" @@ -1775,6 +1906,37 @@ dependencies = [ "once_cell", ] +[[package]] +name = "time" +version = "0.3.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8248b6521bb14bc45b4067159b9b6ad792e2d6d754d6c41fb50e29fefe38749" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ba3a3ef41e6672a2f0f001392bb5dcd3ff0a9992d618ca761a11c3121547774" +dependencies = [ + "num-conv", + "time-core", +] + [[package]] name = "tiny-keccak" version = "2.0.2" @@ -1796,7 +1958,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.3", "toml_datetime", "winnow", ] From 19a73c5e6cc4dddaa656e035d5c5ab42c57ca215 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 16:09:35 -0800 Subject: [PATCH 24/30] update dep --- Cargo.lock | 42 +++++++++++----------- Cargo.toml | 38 ++++++++++---------- examples/chess/script/Cargo.lock | 42 +++++++++++----------- examples/ed25519/script/Cargo.lock | 42 +++++++++++----------- examples/fibonacci-io/script/Cargo.lock | 42 +++++++++++----------- examples/fibonacci/script/Cargo.lock | 42 +++++++++++----------- examples/io/script/Cargo.lock | 42 +++++++++++----------- examples/json/script/Cargo.lock | 42 +++++++++++----------- examples/regex/script/Cargo.lock | 42 +++++++++++----------- examples/rsa/script/Cargo.lock | 42 +++++++++++----------- examples/ssz-withdrawals/script/Cargo.lock | 42 +++++++++++----------- examples/tendermint/script/Cargo.lock | 42 +++++++++++----------- 12 files changed, 250 insertions(+), 250 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 995a9bc053..f1cd2d76f2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1581,7 +1581,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1590,7 +1590,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1600,7 +1600,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1609,7 +1609,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1621,7 +1621,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1632,7 +1632,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1643,7 +1643,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-util", @@ -1654,7 +1654,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-challenger", @@ -1672,7 +1672,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1683,7 +1683,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1693,7 +1693,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1702,7 +1702,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1714,7 +1714,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1726,7 +1726,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1734,7 +1734,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1750,7 +1750,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-commit", @@ -1766,7 +1766,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-dft", @@ -1781,7 +1781,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1795,7 +1795,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-field", @@ -1805,7 +1805,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools 0.12.1", "p3-air", @@ -1823,7 +1823,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#1cb64f05191a790e52556f13f09340df6b1f2cb4" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/Cargo.toml b/Cargo.toml index be2887662c..2523a37393 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,22 +15,22 @@ debug = true debug-assertions = true [workspace.dependencies] -p3-air = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-field = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-commit = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-matrix = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-baby-bear = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-util = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-challenger = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-dft = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-fri = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-goldilocks = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-keccak = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-keccak-air = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-blake3 = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-mds = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-merkle-tree = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-poseidon2 = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-symmetric = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-uni-stark = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } -p3-maybe-rayon = { git = "https://github.com/succinctlabs/plonky3.git", branch = "john/pub-duplex-challenger-fields" } +p3-air = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-field = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-commit = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-matrix = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-baby-bear = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-util = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-challenger = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-dft = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-fri = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-goldilocks = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-keccak = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-keccak-air = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-blake3 = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-mds = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-merkle-tree = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-poseidon2 = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-symmetric = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-uni-stark = { git = "https://github.com/succinctlabs/plonky3.git" } +p3-maybe-rayon = { git = "https://github.com/succinctlabs/plonky3.git" } diff --git a/examples/chess/script/Cargo.lock b/examples/chess/script/Cargo.lock index 1c214f24f5..97290aa806 100644 --- a/examples/chess/script/Cargo.lock +++ b/examples/chess/script/Cargo.lock @@ -1068,7 +1068,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1077,7 +1077,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1087,7 +1087,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1108,7 +1108,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1119,7 +1119,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1130,7 +1130,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1141,7 +1141,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1159,7 +1159,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1170,7 +1170,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1189,7 +1189,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1201,7 +1201,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1221,7 +1221,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1253,7 +1253,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1268,7 +1268,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1282,7 +1282,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1292,7 +1292,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1310,7 +1310,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/ed25519/script/Cargo.lock b/examples/ed25519/script/Cargo.lock index 1e36adbd0e..f159f0c439 100644 --- a/examples/ed25519/script/Cargo.lock +++ b/examples/ed25519/script/Cargo.lock @@ -1065,7 +1065,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1084,7 +1084,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1093,7 +1093,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1105,7 +1105,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1116,7 +1116,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1127,7 +1127,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1138,7 +1138,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1167,7 +1167,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1177,7 +1177,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1186,7 +1186,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1198,7 +1198,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1210,7 +1210,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1218,7 +1218,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1234,7 +1234,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1250,7 +1250,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1279,7 +1279,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1289,7 +1289,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1307,7 +1307,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/fibonacci-io/script/Cargo.lock b/examples/fibonacci-io/script/Cargo.lock index 5e23cc6214..35a4908911 100644 --- a/examples/fibonacci-io/script/Cargo.lock +++ b/examples/fibonacci-io/script/Cargo.lock @@ -1065,7 +1065,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1074,7 +1074,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1084,7 +1084,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1093,7 +1093,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1105,7 +1105,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1116,7 +1116,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1127,7 +1127,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1138,7 +1138,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1156,7 +1156,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1167,7 +1167,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1177,7 +1177,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1186,7 +1186,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1198,7 +1198,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1210,7 +1210,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1218,7 +1218,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1234,7 +1234,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1250,7 +1250,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1265,7 +1265,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1279,7 +1279,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1289,7 +1289,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1307,7 +1307,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/fibonacci/script/Cargo.lock b/examples/fibonacci/script/Cargo.lock index 543bacc374..2c83ced8a6 100644 --- a/examples/fibonacci/script/Cargo.lock +++ b/examples/fibonacci/script/Cargo.lock @@ -1068,7 +1068,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1077,7 +1077,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1087,7 +1087,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1096,7 +1096,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1108,7 +1108,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1119,7 +1119,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1130,7 +1130,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1141,7 +1141,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1159,7 +1159,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1170,7 +1170,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1189,7 +1189,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1201,7 +1201,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1221,7 +1221,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1237,7 +1237,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1253,7 +1253,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1268,7 +1268,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1282,7 +1282,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1292,7 +1292,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1310,7 +1310,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/io/script/Cargo.lock b/examples/io/script/Cargo.lock index 7558d3a976..8aeec3bb0a 100644 --- a/examples/io/script/Cargo.lock +++ b/examples/io/script/Cargo.lock @@ -1069,7 +1069,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1078,7 +1078,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1097,7 +1097,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1109,7 +1109,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1120,7 +1120,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1131,7 +1131,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1142,7 +1142,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1160,7 +1160,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1171,7 +1171,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1190,7 +1190,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1202,7 +1202,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1214,7 +1214,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1222,7 +1222,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1238,7 +1238,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1254,7 +1254,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1269,7 +1269,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1283,7 +1283,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1293,7 +1293,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1311,7 +1311,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/json/script/Cargo.lock b/examples/json/script/Cargo.lock index 771f8f7b7c..37a97e3494 100644 --- a/examples/json/script/Cargo.lock +++ b/examples/json/script/Cargo.lock @@ -1078,7 +1078,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1087,7 +1087,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1097,7 +1097,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1106,7 +1106,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1118,7 +1118,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1129,7 +1129,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1140,7 +1140,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1169,7 +1169,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1180,7 +1180,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1190,7 +1190,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1199,7 +1199,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1211,7 +1211,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1223,7 +1223,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1231,7 +1231,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1247,7 +1247,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1263,7 +1263,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1278,7 +1278,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1292,7 +1292,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1302,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1320,7 +1320,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/regex/script/Cargo.lock b/examples/regex/script/Cargo.lock index a51239646e..7c2441e15d 100644 --- a/examples/regex/script/Cargo.lock +++ b/examples/regex/script/Cargo.lock @@ -1060,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1069,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1079,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1111,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1229,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1245,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1260,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1274,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1302,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/rsa/script/Cargo.lock b/examples/rsa/script/Cargo.lock index b6b917feca..c5641c231d 100644 --- a/examples/rsa/script/Cargo.lock +++ b/examples/rsa/script/Cargo.lock @@ -1060,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1069,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1079,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1111,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1229,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1245,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1260,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1274,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1302,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/ssz-withdrawals/script/Cargo.lock b/examples/ssz-withdrawals/script/Cargo.lock index 7bc0a5b4df..5bd2d11c2d 100644 --- a/examples/ssz-withdrawals/script/Cargo.lock +++ b/examples/ssz-withdrawals/script/Cargo.lock @@ -1060,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1069,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1079,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1111,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1229,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1245,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1260,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1274,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1302,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] diff --git a/examples/tendermint/script/Cargo.lock b/examples/tendermint/script/Cargo.lock index d616c26682..f565419853 100644 --- a/examples/tendermint/script/Cargo.lock +++ b/examples/tendermint/script/Cargo.lock @@ -1060,7 +1060,7 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "p3-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1069,7 +1069,7 @@ dependencies = [ [[package]] name = "p3-baby-bear" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "rand", @@ -1079,7 +1079,7 @@ dependencies = [ [[package]] name = "p3-blake3" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "blake3", "p3-symmetric", @@ -1088,7 +1088,7 @@ dependencies = [ [[package]] name = "p3-challenger" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1100,7 +1100,7 @@ dependencies = [ [[package]] name = "p3-commit" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-challenger", "p3-field", @@ -1111,7 +1111,7 @@ dependencies = [ [[package]] name = "p3-dft" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1122,7 +1122,7 @@ dependencies = [ [[package]] name = "p3-field" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-util", @@ -1133,7 +1133,7 @@ dependencies = [ [[package]] name = "p3-fri" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-challenger", @@ -1151,7 +1151,7 @@ dependencies = [ [[package]] name = "p3-goldilocks" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-util", @@ -1162,7 +1162,7 @@ dependencies = [ [[package]] name = "p3-interpolation" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-matrix", @@ -1172,7 +1172,7 @@ dependencies = [ [[package]] name = "p3-keccak" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-symmetric", "tiny-keccak", @@ -1181,7 +1181,7 @@ dependencies = [ [[package]] name = "p3-keccak-air" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-air", "p3-field", @@ -1193,7 +1193,7 @@ dependencies = [ [[package]] name = "p3-matrix" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-field", "p3-maybe-rayon", @@ -1205,7 +1205,7 @@ dependencies = [ [[package]] name = "p3-maybe-rayon" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "rayon", ] @@ -1213,7 +1213,7 @@ dependencies = [ [[package]] name = "p3-mds" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-dft", @@ -1229,7 +1229,7 @@ dependencies = [ [[package]] name = "p3-merkle-tree" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-commit", @@ -1245,7 +1245,7 @@ dependencies = [ [[package]] name = "p3-mersenne-31" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-dft", @@ -1260,7 +1260,7 @@ dependencies = [ [[package]] name = "p3-poseidon2" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "p3-baby-bear", "p3-field", @@ -1274,7 +1274,7 @@ dependencies = [ [[package]] name = "p3-symmetric" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-field", @@ -1284,7 +1284,7 @@ dependencies = [ [[package]] name = "p3-uni-stark" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "itertools", "p3-air", @@ -1302,7 +1302,7 @@ dependencies = [ [[package]] name = "p3-util" version = "0.1.0" -source = "git+https://github.com/succinctlabs/plonky3.git?branch=john/pub-duplex-challenger-fields#b68d5aee1683470cd0899797f5151ec3c4a235d2" +source = "git+https://github.com/succinctlabs/plonky3.git#7d11ba55fa2c939449b593df298d04d7e15979d5" dependencies = [ "serde", ] From 0efe42289a68a16053a0b8fcfb9a184901495291 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 16:53:52 -0800 Subject: [PATCH 25/30] lt gen_deps --- core/src/alu/lt/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/alu/lt/mod.rs b/core/src/alu/lt/mod.rs index 97d396e7fa..4df3566e5d 100644 --- a/core/src/alu/lt/mod.rs +++ b/core/src/alu/lt/mod.rs @@ -78,6 +78,8 @@ impl MachineAir for LtChip { "Lt".to_string() } + fn generate_dependencies(&self, _input: &ExecutionRecord, _output: &mut ExecutionRecord) {} + #[instrument(name = "generate lt trace", skip_all)] fn generate_trace( &self, From 85461eed67609c405bbe0983df2c52b980456eb1 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 18:32:31 -0800 Subject: [PATCH 26/30] fixes --- core/src/runtime/mod.rs | 1 + core/src/runtime/record.rs | 9 +++++---- .../program/elf/riscv32im-succinct-zkvm-elf | Bin 890888 -> 891624 bytes 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/core/src/runtime/mod.rs b/core/src/runtime/mod.rs index f2a0c1f137..0a47d487c2 100644 --- a/core/src/runtime/mod.rs +++ b/core/src/runtime/mod.rs @@ -168,6 +168,7 @@ impl Runtime { #[inline] fn validate_memory_access(&self, addr: u32, position: AccessPosition) { + #[cfg(debug_assertions)] if position == AccessPosition::Memory { assert_eq!(addr % 4, 0, "addr is not aligned"); let _ = BabyBear::from_canonical_u32(addr); diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index e4987cf5db..b37dd5aceb 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -163,7 +163,10 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. - let mut shards = Vec::new(); + let num_shards = (self.cpu_events.len() + config.shard_size - 1) / config.shard_size; + let mut shards = (0..num_shards) + .map(|_| ExecutionRecord::default()) + .collect::>(); while !self.cpu_events.is_empty() { // Iterate from end so we can truncate cpu_events as we go. let index = self.cpu_events.len() / config.shard_size; @@ -171,13 +174,11 @@ impl ExecutionRecord { let end = std::cmp::min(start + config.shard_size, self.cpu_events.len()); let chunk = self.cpu_events[start..end].to_vec(); self.cpu_events.truncate(start); - let mut shard = ExecutionRecord::default(); + let shard = &mut shards[index]; shard.index = (index + 1) as u32; shard.cpu_events = chunk; shard.program = self.program.clone(); - shards.push(shard); } - shards.reverse(); // Shard all the other events according to the configuration. diff --git a/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf b/examples/tendermint/program/elf/riscv32im-succinct-zkvm-elf index 0ffd9d2b1c984e374ee6a26ccdfd49fddc0fef7d..ca9fb4bc529e7ddd85ece1fbe50624c062bfaaa2 100755 GIT binary patch delta 235200 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

7BS4Fge-9Fif{amah3RwccJ77({W*j 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∈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 From 23b85c936e085b77c10e75da5460b963bf669cc9 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 19:00:24 -0800 Subject: [PATCH 27/30] debug --- core/src/runtime/record.rs | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index b37dd5aceb..136d9bf480 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -163,6 +163,7 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. + log::info!("cpu"); let num_shards = (self.cpu_events.len() + config.shard_size - 1) / config.shard_size; let mut shards = (0..num_shards) .map(|_| ExecutionRecord::default()) @@ -182,6 +183,7 @@ impl ExecutionRecord { // Shard all the other events according to the configuration. + log::info!("add"); // Shard the ADD events. for (add_chunk, shard) in take(&mut self.add_events) .chunks_mut(config.add_len) @@ -191,6 +193,7 @@ impl ExecutionRecord { } // Shard the MUL events. + log::info!("mul"); for (mul_chunk, shard) in take(&mut self.mul_events) .chunks_mut(config.mul_len) .zip(shards.iter_mut()) @@ -199,6 +202,7 @@ impl ExecutionRecord { } // Shard the SUB events. + log::info!("s"); for (sub_chunk, shard) in take(&mut self.sub_events) .chunks_mut(config.sub_len) .zip(shards.iter_mut()) @@ -207,6 +211,7 @@ impl ExecutionRecord { } // Shard the bitwise events. + log::info!("b"); for (bitwise_chunk, shard) in take(&mut self.bitwise_events) .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) @@ -215,6 +220,7 @@ impl ExecutionRecord { } // Shard the shift left events. + log::info!("sl"); for (shift_left_chunk, shard) in take(&mut self.shift_left_events) .chunks_mut(config.shift_left_len) .zip(shards.iter_mut()) @@ -223,6 +229,7 @@ impl ExecutionRecord { } // Shard the shift right events. + log::info!("sr"); for (shift_right_chunk, shard) in take(&mut self.shift_right_events) .chunks_mut(config.shift_right_len) .zip(shards.iter_mut()) @@ -284,6 +291,7 @@ impl ExecutionRecord { .weierstrass_double_events .extend_from_slice(weierstrass_double_chunk); } + log::info!("done"); // Put the precompile events in the first shard. let first = shards.first_mut().unwrap(); @@ -322,6 +330,7 @@ impl ExecutionRecord { .program_memory_record .extend_from_slice(&self.program_memory_record); + log::info!("full"); shards } From 74668792ed76f5930cca850930db90943242e42f Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 19:12:12 -0800 Subject: [PATCH 28/30] fix --- core/src/runtime/record.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 136d9bf480..3314cee879 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -168,16 +168,15 @@ impl ExecutionRecord { let mut shards = (0..num_shards) .map(|_| ExecutionRecord::default()) .collect::>(); + log::info!("starting"); while !self.cpu_events.is_empty() { // Iterate from end so we can truncate cpu_events as we go. let index = self.cpu_events.len() / config.shard_size; + log::info!("shard {}", index); let start = index * config.shard_size; - let end = std::cmp::min(start + config.shard_size, self.cpu_events.len()); - let chunk = self.cpu_events[start..end].to_vec(); - self.cpu_events.truncate(start); let shard = &mut shards[index]; shard.index = (index + 1) as u32; - shard.cpu_events = chunk; + shard.cpu_events = self.cpu_events.split_off(start); shard.program = self.program.clone(); } From 17cdd0446f22765cd2dc0fe09fedf1af008583c0 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 19:17:39 -0800 Subject: [PATCH 29/30] fix --- core/src/runtime/record.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 3314cee879..0091dd1bd4 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -171,7 +171,7 @@ impl ExecutionRecord { log::info!("starting"); while !self.cpu_events.is_empty() { // Iterate from end so we can truncate cpu_events as we go. - let index = self.cpu_events.len() / config.shard_size; + let index = (self.cpu_events.len() + config.shard_size - 1) / config.shard_size - 1; log::info!("shard {}", index); let start = index * config.shard_size; let shard = &mut shards[index]; From 1aa3b42e03fd95c6bc0b421f24d0976fe1a9cd19 Mon Sep 17 00:00:00 2001 From: Chris Tian Date: Wed, 6 Mar 2024 19:21:05 -0800 Subject: [PATCH 30/30] done --- core/src/runtime/record.rs | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/core/src/runtime/record.rs b/core/src/runtime/record.rs index 0091dd1bd4..97bc470e3a 100644 --- a/core/src/runtime/record.rs +++ b/core/src/runtime/record.rs @@ -163,16 +163,13 @@ impl ExecutionRecord { pub fn shard(mut self, config: &ShardingConfig) -> Vec { // Make the shard vector by splitting CPU and program events. - log::info!("cpu"); let num_shards = (self.cpu_events.len() + config.shard_size - 1) / config.shard_size; let mut shards = (0..num_shards) .map(|_| ExecutionRecord::default()) .collect::>(); - log::info!("starting"); while !self.cpu_events.is_empty() { // Iterate from end so we can truncate cpu_events as we go. let index = (self.cpu_events.len() + config.shard_size - 1) / config.shard_size - 1; - log::info!("shard {}", index); let start = index * config.shard_size; let shard = &mut shards[index]; shard.index = (index + 1) as u32; @@ -182,7 +179,6 @@ impl ExecutionRecord { // Shard all the other events according to the configuration. - log::info!("add"); // Shard the ADD events. for (add_chunk, shard) in take(&mut self.add_events) .chunks_mut(config.add_len) @@ -192,7 +188,6 @@ impl ExecutionRecord { } // Shard the MUL events. - log::info!("mul"); for (mul_chunk, shard) in take(&mut self.mul_events) .chunks_mut(config.mul_len) .zip(shards.iter_mut()) @@ -201,7 +196,6 @@ impl ExecutionRecord { } // Shard the SUB events. - log::info!("s"); for (sub_chunk, shard) in take(&mut self.sub_events) .chunks_mut(config.sub_len) .zip(shards.iter_mut()) @@ -210,7 +204,6 @@ impl ExecutionRecord { } // Shard the bitwise events. - log::info!("b"); for (bitwise_chunk, shard) in take(&mut self.bitwise_events) .chunks_mut(config.bitwise_len) .zip(shards.iter_mut()) @@ -219,7 +212,6 @@ impl ExecutionRecord { } // Shard the shift left events. - log::info!("sl"); for (shift_left_chunk, shard) in take(&mut self.shift_left_events) .chunks_mut(config.shift_left_len) .zip(shards.iter_mut()) @@ -228,7 +220,6 @@ impl ExecutionRecord { } // Shard the shift right events. - log::info!("sr"); for (shift_right_chunk, shard) in take(&mut self.shift_right_events) .chunks_mut(config.shift_right_len) .zip(shards.iter_mut()) @@ -290,7 +281,6 @@ impl ExecutionRecord { .weierstrass_double_events .extend_from_slice(weierstrass_double_chunk); } - log::info!("done"); // Put the precompile events in the first shard. let first = shards.first_mut().unwrap(); @@ -329,7 +319,6 @@ impl ExecutionRecord { .program_memory_record .extend_from_slice(&self.program_memory_record); - log::info!("full"); shards }