pub struct MerkleTreeCS {
pub merkle_path_table_left: NodesTable,
pub merkle_path_table_right: NodesTable,
pub merkle_path_table_both: NodesTable,
pub root_table: RootTable,
pub incr_table: IncrLookup,
pub nodes_channel: ChannelId,
pub roots_channel: ChannelId,
pub lookup_channel: ChannelId,
}
Expand description
A struct representing the constraint system for the Merkle tree. Like any M3 instance, it is characterized by the tables with the column constraints, and the channels with the flushing rules.
Fields§
§merkle_path_table_left: NodesTable
The tables for the three cases of merkle path pulls i.e. left, right or both children being pulled.
merkle_path_table_right: NodesTable
§merkle_path_table_both: NodesTable
§root_table: RootTable
Table for reconciling the final values of the merkle paths with the roots.
incr_table: IncrLookup
§nodes_channel: ChannelId
Channel for all intermediate nodes in the merkle paths being verified. Follows format [Root ID, Digest, Depth, Index].
roots_channel: ChannelId
Channel for the roots for roots of the merkle paths being verified (deduped for multiple paths in the same tree). Follows format [Root ID, Digest].
lookup_channel: ChannelId
Channel for verifying that child depth is one more than parent depth has one value.
Implementations§
Source§impl MerkleTreeCS
impl MerkleTreeCS
pub fn new(cs: &mut ConstraintSystem) -> Self
pub fn fill_tables( &self, trace: &MerkleTreeTrace, cs: &ConstraintSystem, witness: &mut WitnessIndex<'_, '_>, ) -> Result<()>
pub fn make_boundaries(&self, trace: &MerkleTreeTrace) -> Vec<Boundary<B128>>
Auto Trait Implementations§
impl Freeze for MerkleTreeCS
impl RefUnwindSafe for MerkleTreeCS
impl Send for MerkleTreeCS
impl Sync for MerkleTreeCS
impl Unpin for MerkleTreeCS
impl UnwindSafe for MerkleTreeCS
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more