mirror of
https://github.com/logos-storage/plonky2.git
synced 2026-01-07 08:13:11 +00:00
Fixes
This commit is contained in:
parent
9bf47ef8ac
commit
05ab3d7933
@ -242,6 +242,7 @@ mod tests {
|
|||||||
fn make_logic_trace<R: Rng>(
|
fn make_logic_trace<R: Rng>(
|
||||||
num_rows: usize,
|
num_rows: usize,
|
||||||
logic_stark: &LogicStark<F, D>,
|
logic_stark: &LogicStark<F, D>,
|
||||||
|
config: &StarkConfig,
|
||||||
rng: &mut R,
|
rng: &mut R,
|
||||||
) -> Vec<PolynomialValues<F>> {
|
) -> Vec<PolynomialValues<F>> {
|
||||||
let all_ops = [logic::Op::And, logic::Op::Or, logic::Op::Xor];
|
let all_ops = [logic::Op::And, logic::Op::Or, logic::Op::Xor];
|
||||||
@ -253,7 +254,11 @@ mod tests {
|
|||||||
Operation::new(op, input0, input1)
|
Operation::new(op, input0, input1)
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
logic_stark.generate_trace(ops, &mut TimingTree::default())
|
logic_stark.generate_trace(
|
||||||
|
ops,
|
||||||
|
config.fri_config.num_cap_elements(),
|
||||||
|
&mut TimingTree::default(),
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_memory_trace<R: Rng>(
|
fn make_memory_trace<R: Rng>(
|
||||||
@ -705,7 +710,8 @@ mod tests {
|
|||||||
|
|
||||||
let keccak_trace = make_keccak_trace(num_keccak_perms, &all_stark.keccak_stark, &mut rng);
|
let keccak_trace = make_keccak_trace(num_keccak_perms, &all_stark.keccak_stark, &mut rng);
|
||||||
let keccak_memory_trace = make_keccak_memory_trace(&all_stark.keccak_memory_stark, config);
|
let keccak_memory_trace = make_keccak_memory_trace(&all_stark.keccak_memory_stark, config);
|
||||||
let logic_trace = make_logic_trace(num_logic_rows, &all_stark.logic_stark, &mut rng);
|
let logic_trace =
|
||||||
|
make_logic_trace(num_logic_rows, &all_stark.logic_stark, config, &mut rng);
|
||||||
let mem_trace = make_memory_trace(num_memory_ops, &all_stark.memory_stark, &mut rng);
|
let mem_trace = make_memory_trace(num_memory_ops, &all_stark.memory_stark, &mut rng);
|
||||||
let mut memory_trace = mem_trace.0;
|
let mut memory_trace = mem_trace.0;
|
||||||
let num_memory_ops = mem_trace.1;
|
let num_memory_ops = mem_trace.1;
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
global main:
|
global main:
|
||||||
// First, initialise the shift table
|
// First, initialise the shift table
|
||||||
%shift_table_init
|
%shift_table_init
|
||||||
|
|
||||||
// Second, load all MPT data from the prover.
|
// Second, load all MPT data from the prover.
|
||||||
PUSH txn_loop
|
PUSH hash_initial_tries
|
||||||
%jump(load_all_mpts)
|
%jump(load_all_mpts)
|
||||||
|
|
||||||
hash_initial_tries:
|
hash_initial_tries:
|
||||||
|
|||||||
@ -138,12 +138,13 @@ impl<F: RichField, const D: usize> LogicStark<F, D> {
|
|||||||
pub(crate) fn generate_trace(
|
pub(crate) fn generate_trace(
|
||||||
&self,
|
&self,
|
||||||
operations: Vec<Operation>,
|
operations: Vec<Operation>,
|
||||||
|
min_rows: usize,
|
||||||
timing: &mut TimingTree,
|
timing: &mut TimingTree,
|
||||||
) -> Vec<PolynomialValues<F>> {
|
) -> Vec<PolynomialValues<F>> {
|
||||||
let trace_rows = timed!(
|
let trace_rows = timed!(
|
||||||
timing,
|
timing,
|
||||||
"generate trace rows",
|
"generate trace rows",
|
||||||
self.generate_trace_rows(operations)
|
self.generate_trace_rows(operations, min_rows)
|
||||||
);
|
);
|
||||||
let trace_polys = timed!(
|
let trace_polys = timed!(
|
||||||
timing,
|
timing,
|
||||||
@ -153,9 +154,13 @@ impl<F: RichField, const D: usize> LogicStark<F, D> {
|
|||||||
trace_polys
|
trace_polys
|
||||||
}
|
}
|
||||||
|
|
||||||
fn generate_trace_rows(&self, operations: Vec<Operation>) -> Vec<[F; NUM_COLUMNS]> {
|
fn generate_trace_rows(
|
||||||
|
&self,
|
||||||
|
operations: Vec<Operation>,
|
||||||
|
min_rows: usize,
|
||||||
|
) -> Vec<[F; NUM_COLUMNS]> {
|
||||||
let len = operations.len();
|
let len = operations.len();
|
||||||
let padded_len = len.next_power_of_two();
|
let padded_len = len.max(min_rows).next_power_of_two();
|
||||||
|
|
||||||
let mut rows = Vec::with_capacity(padded_len);
|
let mut rows = Vec::with_capacity(padded_len);
|
||||||
for op in operations {
|
for op in operations {
|
||||||
|
|||||||
@ -43,19 +43,6 @@ pub struct MemoryStark<F, const D: usize> {
|
|||||||
pub(crate) f: PhantomData<F>,
|
pub(crate) f: PhantomData<F>,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Remove
|
|
||||||
// #[derive(Clone, Debug)]
|
|
||||||
// pub(crate) struct MemoryOp {
|
|
||||||
// /// true if this is an actual memory operation, or false if it's a padding row.
|
|
||||||
// pub filter: bool,
|
|
||||||
// pub timestamp: usize,
|
|
||||||
// pub is_read: bool,
|
|
||||||
// pub context: usize,
|
|
||||||
// pub segment: Segment,
|
|
||||||
// pub virt: usize,
|
|
||||||
// pub value: U256,
|
|
||||||
// }
|
|
||||||
|
|
||||||
impl MemoryOp {
|
impl MemoryOp {
|
||||||
/// Generate a row for a given memory operation. Note that this does not generate columns which
|
/// Generate a row for a given memory operation. Note that this does not generate columns which
|
||||||
/// depend on the next operation, such as `CONTEXT_FIRST_CHANGE`; those are generated later.
|
/// depend on the next operation, such as `CONTEXT_FIRST_CHANGE`; those are generated later.
|
||||||
|
|||||||
@ -110,7 +110,7 @@ pub(crate) fn generate_keccak_general<F: Field>(
|
|||||||
stack_pop_with_log_and_fill::<4, _>(state, &mut row)?;
|
stack_pop_with_log_and_fill::<4, _>(state, &mut row)?;
|
||||||
let len = len.as_usize();
|
let len = len.as_usize();
|
||||||
|
|
||||||
let mut base_address = MemoryAddress::new_u256s(context, segment, base_virt);
|
let base_address = MemoryAddress::new_u256s(context, segment, base_virt);
|
||||||
let input = (0..len)
|
let input = (0..len)
|
||||||
.map(|i| {
|
.map(|i| {
|
||||||
let address = MemoryAddress {
|
let address = MemoryAddress {
|
||||||
@ -156,7 +156,7 @@ pub(crate) fn generate_prover_input<F: Field>(
|
|||||||
|
|
||||||
pub(crate) fn generate_pop<F: Field>(
|
pub(crate) fn generate_pop<F: Field>(
|
||||||
state: &mut GenerationState<F>,
|
state: &mut GenerationState<F>,
|
||||||
mut row: CpuColumnsView<F>,
|
row: CpuColumnsView<F>,
|
||||||
) -> Result<(), ProgramError> {
|
) -> Result<(), ProgramError> {
|
||||||
if state.registers.stack_len == 0 {
|
if state.registers.stack_len == 0 {
|
||||||
return Err(ProgramError::StackUnderflow);
|
return Err(ProgramError::StackUnderflow);
|
||||||
|
|||||||
@ -99,6 +99,7 @@ impl<T: Copy> Traces<T> {
|
|||||||
where
|
where
|
||||||
T: RichField + Extendable<D>,
|
T: RichField + Extendable<D>,
|
||||||
{
|
{
|
||||||
|
let cap_elements = config.fri_config.num_cap_elements();
|
||||||
let Traces {
|
let Traces {
|
||||||
cpu,
|
cpu,
|
||||||
logic_ops,
|
logic_ops,
|
||||||
@ -114,10 +115,12 @@ impl<T: Copy> Traces<T> {
|
|||||||
let keccak_trace = all_stark.keccak_stark.generate_trace(keccak_inputs, timing);
|
let keccak_trace = all_stark.keccak_stark.generate_trace(keccak_inputs, timing);
|
||||||
let keccak_memory_trace = all_stark.keccak_memory_stark.generate_trace(
|
let keccak_memory_trace = all_stark.keccak_memory_stark.generate_trace(
|
||||||
keccak_memory_inputs,
|
keccak_memory_inputs,
|
||||||
config.fri_config.num_cap_elements(),
|
cap_elements,
|
||||||
timing,
|
timing,
|
||||||
);
|
);
|
||||||
let logic_trace = all_stark.logic_stark.generate_trace(logic_ops, timing);
|
let logic_trace = all_stark
|
||||||
|
.logic_stark
|
||||||
|
.generate_trace(logic_ops, cap_elements, timing);
|
||||||
let memory_trace = all_stark.memory_stark.generate_trace(memory_ops, timing);
|
let memory_trace = all_stark.memory_stark.generate_trace(memory_ops, timing);
|
||||||
|
|
||||||
[
|
[
|
||||||
|
|||||||
@ -135,7 +135,9 @@ impl<F: RichField, H: Hasher<F>> MerkleTree<F, H> {
|
|||||||
let log2_leaves_len = log2_strict(leaves.len());
|
let log2_leaves_len = log2_strict(leaves.len());
|
||||||
assert!(
|
assert!(
|
||||||
cap_height <= log2_leaves_len,
|
cap_height <= log2_leaves_len,
|
||||||
"cap height should be at most log2(leaves.len())"
|
"cap_height={} should be at most log2(leaves.len())={}",
|
||||||
|
cap_height,
|
||||||
|
log2_leaves_len
|
||||||
);
|
);
|
||||||
|
|
||||||
let num_digests = 2 * (leaves.len() - (1 << cap_height));
|
let num_digests = 2 * (leaves.len() - (1 << cap_height));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user