INNER CODE UNIT · Rust

break_loop

GuildOfWeavers/distaff · src/processor/decoder/mod.rs:219

    pub fn break_loop(&mut self) {
        assert!(self.step % BASE_CYCLE_LENGTH == BASE_CYCLE_LENGTH - 1,
            "cannot break a loop at step {}: operation alignment is not valid", self.step);

        self.advance_step(false);
        self.copy_context_stack();
        assert!(self.sponge[0] == self.pop_loop_image(),
            "cannot break a loop at step {}: hash of the last iteration doesn't match loop image", self.step);
        self.set_op_bits(FlowOps::Break, UserOps::Noop);
        self.set_sponge(self.sponge);
    }

    /// Updates the decoder with the value of the specified operation.
    pub fn decode_op(&mut self, op_code: UserOps, op_value: u128) {
        
        // op_value can be provided only for a PUSH operation and only
        // at steps which are multiples of 8
        if op_value != field::ZERO {

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…