From 105bfacaa6ff2f5dbc24c00e0b3164999d025c8b Mon Sep 17 00:00:00 2001 From: Antioch Peverell <30642645+antiochp@users.noreply.github.com> Date: Wed, 22 Aug 2018 15:40:24 +0100 Subject: [PATCH] use chrono for timestamp in with_reward (#1406) --- core/src/core/block.rs | 5 ++++- core/tests/block.rs | 28 ++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/core/src/core/block.rs b/core/src/core/block.rs index 096709df..721839d0 100644 --- a/core/src/core/block.rs +++ b/core/src/core/block.rs @@ -555,10 +555,13 @@ impl Block { secp.commit_sum(excesses, vec![])? }; + let now = Utc::now().timestamp(); + let timestamp = DateTime::::from_utc(NaiveDateTime::from_timestamp(now, 0), Utc); + Block { header: BlockHeader { height: prev.height + 1, - timestamp: Utc::now(), + timestamp, previous: prev.hash(), total_difficulty: difficulty + prev.total_difficulty, total_kernel_offset, diff --git a/core/tests/block.rs b/core/tests/block.rs index c7b4378d..1688102e 100644 --- a/core/tests/block.rs +++ b/core/tests/block.rs @@ -208,22 +208,34 @@ fn remove_coinbase_kernel_flag() { } #[test] -fn serialize_deserialize_block() { +fn serialize_deserialize_block_header() { let keychain = ExtKeychain::from_random_seed().unwrap(); let prev = BlockHeader::default(); let key_id = keychain.derive_key_id(1).unwrap(); - let mut b = new_block(vec![], &keychain, &prev, &key_id); + let b = new_block(vec![], &keychain, &prev, &key_id); + let header1 = b.header; + + let mut vec = Vec::new(); + ser::serialize(&mut vec, &header1).expect("serialization failed"); + let header2: BlockHeader = ser::deserialize(&mut &vec[..]).unwrap(); + + assert_eq!(header1.hash(), header2.hash()); + assert_eq!(header1, header2); +} + +#[test] +fn serialize_deserialize_block() { + let tx1 = tx1i2o(); + let keychain = ExtKeychain::from_random_seed().unwrap(); + let prev = BlockHeader::default(); + let key_id = keychain.derive_key_id(1).unwrap(); + let b = new_block(vec![&tx1], &keychain, &prev, &key_id); let mut vec = Vec::new(); ser::serialize(&mut vec, &b).expect("serialization failed"); let b2: Block = ser::deserialize(&mut &vec[..]).unwrap(); - // After header serialization, timestamp will lose 'nanos' info, that's the designed behavior. - // To suppress 'nanos' difference caused assertion fail, we force b.header also lose 'nanos'. - let origin_ts = b.header.timestamp; - b.header.timestamp = - origin_ts - Duration::nanoseconds(origin_ts.timestamp_subsec_nanos() as i64); - + assert_eq!(b.hash(), b2.hash()); assert_eq!(b.header, b2.header); assert_eq!(b.inputs(), b2.inputs()); assert_eq!(b.outputs(), b2.outputs());