Provide a dedicated signature in Precommit of just the block hash

Greatly simplifies verifying when syncing.
This commit is contained in:
Luke Parker
2022-10-17 02:32:45 -04:00
parent 1c71e25234
commit b993ff1cc8
4 changed files with 93 additions and 35 deletions

View File

@@ -18,17 +18,13 @@ impl SignatureScheme for TestSignatureScheme {
fn sign(&self, msg: &[u8]) -> [u8; 32] {
let mut sig = [0; 32];
sig[.. 2].copy_from_slice(&self.0.to_le_bytes());
sig[2 .. (2 + 30.min(msg.len()))].copy_from_slice(msg);
sig[2 .. (2 + 30.min(msg.len()))].copy_from_slice(&msg[.. 30.min(msg.len())]);
sig
}
fn verify(&self, validator: u16, msg: &[u8], sig: [u8; 32]) -> bool {
(sig[.. 2] == validator.to_le_bytes()) && (&sig[2 ..] == &[msg, &[0; 30]].concat()[.. 30])
}
fn aggregate(sigs: &[[u8; 32]]) -> Vec<[u8; 32]> {
sigs.to_vec()
}
}
struct TestWeights;
@@ -95,9 +91,12 @@ impl Network for TestNetwork {
block.valid
}
fn add_block(&mut self, block: TestBlock) -> TestBlock {
fn add_block(&mut self, block: TestBlock, sigs: Vec<(u16, [u8; 32])>) -> TestBlock {
dbg!("Adding ", &block);
assert!(block.valid.is_ok());
for sig in sigs {
assert!(TestSignatureScheme(u16::MAX).verify(sig.0, &block.id().encode(), sig.1));
}
TestBlock { id: block.id + 1, valid: Ok(()) }
}
}