diff --git a/proving/igneum-prove/fin/tests/harness.rs b/proving/igneum-prove/fin/tests/harness.rs index c560dbecb..5af2e6b79 100644 --- a/proving/igneum-prove/fin/tests/harness.rs +++ b/proving/igneum-prove/fin/tests/harness.rs @@ -81,13 +81,25 @@ impl Sim { blues.push(BlueBlock { block_hash: hash_of(&format!("side-{j}"), n), key_hash: self.keys[k].hash, daa: n }); } let block = ChainBlockWitness { number: n, block_hash: hash_of("chain", n), daa: n, blues }; + // a key's reveal rides with its first block in the table (the node's W1 rule; the tracker re-supplies it + // whenever a key whose entry aged out mines again) + let mut witness = witness; + for b in &block.blues { + let known = igneum_fin_core::find_key(&self.state.keys, &b.key_hash).map(|i| self.state.keys[i].revealed()).unwrap_or(false); + if !known && !witness.reveals.iter().any(|r| vote_key_hash(&r.pubkey) == b.key_hash) { + let k = self.keys.iter().find(|k| k.hash == b.key_hash).unwrap(); + witness.reveals.push(reveal(k)); + } + } let before = self.state.clone(); + let ring_before = self.tracker.clone(); let r = fold_block(&mut self.state, &self.params, &block, &mut self.tracker, &witness, &self.bls); let witnesses = self.tracker.take_witnesses(); match r { Ok(_) => {} Err(e) => { self.state = before; + self.tracker = ring_before; return Err(e); } }