X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=src%2Fserialization.rs;h=b9306d8f54762aa66bee33cb92f515da0dbce687;hb=4c20eda0cf43a80d27bbcb66423225c7c072753a;hp=93bd381d39e4b2291b54061c0f9913cc7ae39eb8;hpb=cbf7897549f540ca3017dced125d9b1202b61dad;p=rapid-gossip-sync-server diff --git a/src/serialization.rs b/src/serialization.rs index 93bd381..b9306d8 100644 --- a/src/serialization.rs +++ b/src/serialization.rs @@ -2,8 +2,8 @@ use std::cmp::max; use std::collections::HashMap; use std::time::{SystemTime, UNIX_EPOCH}; -use bitcoin::BlockHash; -use bitcoin::hashes::Hash; +use bitcoin::Network; +use bitcoin::blockdata::constants::ChainHash; use lightning::ln::msgs::{UnsignedChannelAnnouncement, UnsignedChannelUpdate}; use lightning::util::ser::{BigSize, Writeable}; use crate::config; @@ -15,7 +15,7 @@ pub(super) struct SerializationSet { pub(super) updates: Vec, pub(super) full_update_defaults: DefaultUpdateValues, pub(super) latest_seen: u32, - pub(super) chain_hash: BlockHash, + pub(super) chain_hash: ChainHash, } pub(super) struct DefaultUpdateValues { @@ -109,7 +109,7 @@ pub(super) fn serialize_delta_set(delta_set: DeltaSet, last_sync_timestamp: u32) announcements: vec![], updates: vec![], full_update_defaults: Default::default(), - chain_hash: BlockHash::all_zeros(), + chain_hash: ChainHash::using_genesis_block(Network::Bitcoin), latest_seen: 0, }; @@ -140,7 +140,7 @@ pub(super) fn serialize_delta_set(delta_set: DeltaSet, last_sync_timestamp: u32) let channel_announcement_delta = channel_delta.announcement.as_ref().unwrap(); if !chain_hash_set { chain_hash_set = true; - serialization_set.chain_hash = channel_announcement_delta.announcement.chain_hash.clone(); + serialization_set.chain_hash = channel_announcement_delta.announcement.chain_hash; } let current_announcement_seen = channel_announcement_delta.seen; @@ -181,12 +181,20 @@ pub(super) fn serialize_delta_set(delta_set: DeltaSet, last_sync_timestamp: u32) // we don't count flags as mutated properties serialization_set.updates.push( UpdateSerialization::Incremental(latest_update, mutated_properties)); + } else if channel_delta.requires_reminder { + if let Some(flags) = updates.serialization_update_flags { + serialization_set.updates.push(UpdateSerialization::Reminder(scid, flags)); + } } } else { // serialize the full update record_full_update_in_histograms(&latest_update); serialization_set.updates.push(UpdateSerialization::Full(latest_update)); } + } else if is_newly_included_announcement { + if let Some(unannounced_update) = updates.last_update_before_seen { + serialization_set.updates.push(UpdateSerialization::Full(unannounced_update.update)); + } } else if let Some(flags) = updates.serialization_update_flags { serialization_set.updates.push(UpdateSerialization::Reminder(scid, flags)); }