From 9e16937914671277e4128800818d84bcf12d47c4 Mon Sep 17 00:00:00 2001 From: Greg Fitzgerald Date: Thu, 1 Mar 2018 17:01:55 -0700 Subject: [PATCH] Delete the Discovery event Not useful to the accountant. --- README.md | 4 ++-- diagrams/historian.msc | 6 +++--- src/bin/demo.rs | 11 +++++++++-- src/historian.rs | 4 ++-- src/log.rs | 28 ++++++++++++++++------------ 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index 742057a19..57a0f0e5c 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ use std::sync::mpsc::SendError; fn create_log(hist: &Historian) -> Result<(), SendError> { sleep(Duration::from_millis(15)); let data = Sha256Hash::default(); - hist.sender.send(Event::Discovery { data })?; + hist.sender.send(Event::Claim { data })?; sleep(Duration::from_millis(10)); Ok(()) } @@ -70,7 +70,7 @@ Running the program should produce a log similar to: ```rust Entry { num_hashes: 0, end_hash: [0, ...], event: Tick } -Entry { num_hashes: 2, end_hash: [67, ...], event: Discovery { data: [37, ...] } } +Entry { num_hashes: 2, end_hash: [67, ...], event: Claim { data: [37, ...] } } Entry { num_hashes: 3, end_hash: [123, ...], event: Tick } ``` diff --git a/diagrams/historian.msc b/diagrams/historian.msc index b2cb4e3d5..75cf1615a 100644 --- a/diagrams/historian.msc +++ b/diagrams/historian.msc @@ -4,10 +4,10 @@ msc { logger=>historian [ label = "e0 = Entry{hash: h0, n: 0, event: Tick}" ] ; logger=>logger [ label = "h1 = hash(h0)" ] ; logger=>logger [ label = "h2 = hash(h1)" ] ; - client=>historian [ label = "Discovery(d0)" ] ; - historian=>logger [ label = "Discovery(d0)" ] ; + client=>historian [ label = "Claim(d0)" ] ; + historian=>logger [ label = "Claim(d0)" ] ; logger=>logger [ label = "h3 = hash(h2 + d0)" ] ; - logger=>historian [ label = "e1 = Entry{hash: hash(h3), n: 2, event: Discovery(d0)}" ] ; + logger=>historian [ label = "e1 = Entry{hash: hash(h3), n: 2, event: Claim(d0)}" ] ; logger=>logger [ label = "h4 = hash(h3)" ] ; logger=>logger [ label = "h5 = hash(h4)" ] ; logger=>logger [ label = "h6 = hash(h5)" ] ; diff --git a/src/bin/demo.rs b/src/bin/demo.rs index 0787b3b30..a8f502a87 100644 --- a/src/bin/demo.rs +++ b/src/bin/demo.rs @@ -1,7 +1,8 @@ extern crate silk; use silk::historian::Historian; -use silk::log::{verify_slice, Entry, Event, Sha256Hash}; +use silk::log::{generate_keypair, get_pubkey, sign_serialized, verify_slice, Entry, Event, + Sha256Hash}; use std::thread::sleep; use std::time::Duration; use std::sync::mpsc::SendError; @@ -9,7 +10,13 @@ use std::sync::mpsc::SendError; fn create_log(hist: &Historian) -> Result<(), SendError>> { sleep(Duration::from_millis(15)); let data = Sha256Hash::default(); - hist.sender.send(Event::Discovery { data })?; + let keypair = generate_keypair(); + let event0 = Event::Claim { + key: get_pubkey(&keypair), + data, + sig: sign_serialized(&data, &keypair), + }; + hist.sender.send(event0)?; sleep(Duration::from_millis(10)); Ok(()) } diff --git a/src/historian.rs b/src/historian.rs index 1606080ed..0226b6ac6 100644 --- a/src/historian.rs +++ b/src/historian.rs @@ -141,7 +141,7 @@ mod tests { hist.sender.send(Event::Tick).unwrap(); sleep(Duration::new(0, 1_000_000)); - hist.sender.send(Event::Discovery { data: zero }).unwrap(); + hist.sender.send(Event::Tick).unwrap(); sleep(Duration::new(0, 1_000_000)); hist.sender.send(Event::Tick).unwrap(); @@ -175,7 +175,7 @@ mod tests { let zero = Sha256Hash::default(); let hist = Historian::new(&zero, Some(20)); sleep(Duration::from_millis(30)); - hist.sender.send(Event::Discovery { data: zero }).unwrap(); + hist.sender.send(Event::Tick).unwrap(); sleep(Duration::from_millis(15)); drop(hist.sender); assert_eq!( diff --git a/src/log.rs b/src/log.rs index b38b505cd..99d1eff75 100644 --- a/src/log.rs +++ b/src/log.rs @@ -37,9 +37,6 @@ pub struct Entry { #[derive(Serialize, Deserialize, Debug, PartialEq, Eq, Clone)] pub enum Event { Tick, - Discovery { - data: T, - }, Claim { key: PublicKey, data: T, @@ -111,11 +108,9 @@ pub fn extend_and_hash(end_hash: &Sha256Hash, ty: u8, val: &[u8]) -> Sha256Hash hash(&hash_data) } -pub fn hash_event(end_hash: &Sha256Hash, event: &Event) -> Sha256Hash { - use bincode::serialize; +pub fn hash_event(end_hash: &Sha256Hash, event: &Event) -> Sha256Hash { match *event { Event::Tick => *end_hash, - Event::Discovery { ref data } => extend_and_hash(end_hash, 1, &serialize(&data).unwrap()), Event::Claim { sig, .. } => extend_and_hash(end_hash, 2, &sig), Event::Transaction { sig, .. } => extend_and_hash(end_hash, 3, &sig), } @@ -302,15 +297,24 @@ mod tests { let zero = Sha256Hash::default(); let one = hash(&zero); - // First, verify Discovery events - let events = vec![ - Event::Discovery { data: zero }, - Event::Discovery { data: one }, - ]; + // First, verify Claim events + let keypair = generate_keypair(); + let event0 = Event::Claim { + key: get_pubkey(&keypair), + data: zero, + sig: sign_serialized(&zero, &keypair), + }; + + let event1 = Event::Claim { + key: get_pubkey(&keypair), + data: one, + sig: sign_serialized(&one, &keypair), + }; + let events = vec![event0, event1]; let mut entries = create_entries(&zero, 0, events); assert!(verify_slice(&entries, &zero)); - // Next, swap two Discovery events and ensure verification fails. + // Next, swap two Claim events and ensure verification fails. let event0 = entries[0].event.clone(); let event1 = entries[1].event.clone(); entries[0].event = event1;