mirror of
https://github.com/lightningdevkit/rust-lightning.git
synced 2025-02-24 15:02:20 +01:00
Change ChannelManager deserialization to return an optional blockhash
If the ChannelManager never receives any blocks, it'll return a default blockhash on deserialization. It's preferable for this to be an Option instead.
This commit is contained in:
parent
81c6bdc953
commit
ee995a3a55
5 changed files with 23 additions and 16 deletions
|
@ -355,7 +355,7 @@ pub fn do_test<Out: test_logger::Output>(data: &[u8], out: Out) {
|
||||||
channel_monitors: monitor_refs,
|
channel_monitors: monitor_refs,
|
||||||
};
|
};
|
||||||
|
|
||||||
(<(BlockHash, ChanMan)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, chain_monitor)
|
(<(Option<BlockHash>, ChanMan)>::read(&mut Cursor::new(&$ser.0), read_args).expect("Failed to read manager").1, chain_monitor)
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -66,7 +66,7 @@ use lightning::chain;
|
||||||
///
|
///
|
||||||
/// // Read the channel manager paired with the block hash when it was persisted.
|
/// // Read the channel manager paired with the block hash when it was persisted.
|
||||||
/// let serialized_manager = "...";
|
/// let serialized_manager = "...";
|
||||||
/// let (manager_block_hash, mut manager) = {
|
/// let (manager_block_hash_option, mut manager) = {
|
||||||
/// let read_args = ChannelManagerReadArgs::new(
|
/// let read_args = ChannelManagerReadArgs::new(
|
||||||
/// keys_manager,
|
/// keys_manager,
|
||||||
/// fee_estimator,
|
/// fee_estimator,
|
||||||
|
@ -76,17 +76,19 @@ use lightning::chain;
|
||||||
/// config,
|
/// config,
|
||||||
/// vec![&mut monitor],
|
/// vec![&mut monitor],
|
||||||
/// );
|
/// );
|
||||||
/// <(BlockHash, ChannelManager<S, &ChainMonitor<S, &C, &T, &F, &L, &P>, &T, &K, &F, &L>)>::read(
|
/// <(Option<BlockHash>, ChannelManager<S, &ChainMonitor<S, &C, &T, &F, &L, &P>, &T, &K, &F, &L>)>::read(
|
||||||
/// &mut Cursor::new(&serialized_manager), read_args).unwrap()
|
/// &mut Cursor::new(&serialized_manager), read_args).unwrap()
|
||||||
/// };
|
/// };
|
||||||
///
|
///
|
||||||
/// // Synchronize any channel monitors and the channel manager to be on the best block.
|
/// // Synchronize any channel monitors and the channel manager to be on the best block.
|
||||||
/// let mut cache = UnboundedCache::new();
|
/// let mut cache = UnboundedCache::new();
|
||||||
/// let mut monitor_listener = (monitor, &*tx_broadcaster, &*fee_estimator, &*logger);
|
/// let mut monitor_listener = (monitor, &*tx_broadcaster, &*fee_estimator, &*logger);
|
||||||
/// let listeners = vec![
|
/// let mut listeners = vec![
|
||||||
/// (monitor_block_hash, &mut monitor_listener as &mut dyn chain::Listen),
|
/// (monitor_block_hash, &mut monitor_listener as &mut dyn chain::Listen),
|
||||||
/// (manager_block_hash, &mut manager as &mut dyn chain::Listen),
|
|
||||||
/// ];
|
/// ];
|
||||||
|
/// if let Some(manager_block_hash) = manager_block_hash_option {
|
||||||
|
/// listeners.push((manager_block_hash, &mut manager as &mut dyn chain::Listen))
|
||||||
|
/// }
|
||||||
/// let chain_tip = init::synchronize_listeners(
|
/// let chain_tip = init::synchronize_listeners(
|
||||||
/// block_source, Network::Bitcoin, &mut cache, listeners).await.unwrap();
|
/// block_source, Network::Bitcoin, &mut cache, listeners).await.unwrap();
|
||||||
///
|
///
|
||||||
|
|
|
@ -4006,7 +4006,7 @@ impl<'a, Signer: 'a + Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
||||||
// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
|
// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
|
||||||
// SipmleArcChannelManager type:
|
// SipmleArcChannelManager type:
|
||||||
impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
||||||
ReadableArgs<ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>> for (BlockHash, Arc<ChannelManager<Signer, M, T, K, F, L>>)
|
ReadableArgs<ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>> for (Option<BlockHash>, Arc<ChannelManager<Signer, M, T, K, F, L>>)
|
||||||
where M::Target: chain::Watch<Signer>,
|
where M::Target: chain::Watch<Signer>,
|
||||||
T::Target: BroadcasterInterface,
|
T::Target: BroadcasterInterface,
|
||||||
K::Target: KeysInterface<Signer = Signer>,
|
K::Target: KeysInterface<Signer = Signer>,
|
||||||
|
@ -4014,13 +4014,13 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
||||||
L::Target: Logger,
|
L::Target: Logger,
|
||||||
{
|
{
|
||||||
fn read<R: ::std::io::Read>(reader: &mut R, args: ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>) -> Result<Self, DecodeError> {
|
fn read<R: ::std::io::Read>(reader: &mut R, args: ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>) -> Result<Self, DecodeError> {
|
||||||
let (blockhash, chan_manager) = <(BlockHash, ChannelManager<Signer, M, T, K, F, L>)>::read(reader, args)?;
|
let (blockhash, chan_manager) = <(Option<BlockHash>, ChannelManager<Signer, M, T, K, F, L>)>::read(reader, args)?;
|
||||||
Ok((blockhash, Arc::new(chan_manager)))
|
Ok((blockhash, Arc::new(chan_manager)))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
||||||
ReadableArgs<ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>> for (BlockHash, ChannelManager<Signer, M, T, K, F, L>)
|
ReadableArgs<ChannelManagerReadArgs<'a, Signer, M, T, K, F, L>> for (Option<BlockHash>, ChannelManager<Signer, M, T, K, F, L>)
|
||||||
where M::Target: chain::Watch<Signer>,
|
where M::Target: chain::Watch<Signer>,
|
||||||
T::Target: BroadcasterInterface,
|
T::Target: BroadcasterInterface,
|
||||||
K::Target: KeysInterface<Signer = Signer>,
|
K::Target: KeysInterface<Signer = Signer>,
|
||||||
|
@ -4172,7 +4172,12 @@ impl<'a, Signer: Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>
|
||||||
//TODO: Broadcast channel update for closed channels, but only after we've made a
|
//TODO: Broadcast channel update for closed channels, but only after we've made a
|
||||||
//connection or two.
|
//connection or two.
|
||||||
|
|
||||||
Ok((last_block_hash.clone(), channel_manager))
|
let last_seen_block_hash = if last_block_hash == Default::default() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(last_block_hash)
|
||||||
|
};
|
||||||
|
Ok((last_seen_block_hash, channel_manager))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -188,7 +188,7 @@ impl<'a, 'b, 'c> Drop for Node<'a, 'b, 'c> {
|
||||||
|
|
||||||
let mut w = test_utils::TestVecWriter(Vec::new());
|
let mut w = test_utils::TestVecWriter(Vec::new());
|
||||||
self.node.write(&mut w).unwrap();
|
self.node.write(&mut w).unwrap();
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut ::std::io::Cursor::new(w.0), ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut ::std::io::Cursor::new(w.0), ChannelManagerReadArgs {
|
||||||
default_config: UserConfig::default(),
|
default_config: UserConfig::default(),
|
||||||
keys_manager: self.keys_manager,
|
keys_manager: self.keys_manager,
|
||||||
fee_estimator: &test_utils::TestFeeEstimator { sat_per_kw: 253 },
|
fee_estimator: &test_utils::TestFeeEstimator { sat_per_kw: 253 },
|
||||||
|
|
|
@ -4332,7 +4332,7 @@ fn test_no_txn_manager_serialize_deserialize() {
|
||||||
let (_, nodes_0_deserialized_tmp) = {
|
let (_, nodes_0_deserialized_tmp) = {
|
||||||
let mut channel_monitors = HashMap::new();
|
let mut channel_monitors = HashMap::new();
|
||||||
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
||||||
default_config: config,
|
default_config: config,
|
||||||
keys_manager,
|
keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
|
@ -4441,7 +4441,7 @@ fn test_manager_serialize_deserialize_events() {
|
||||||
let (_, nodes_0_deserialized_tmp) = {
|
let (_, nodes_0_deserialized_tmp) = {
|
||||||
let mut channel_monitors = HashMap::new();
|
let mut channel_monitors = HashMap::new();
|
||||||
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
||||||
default_config: config,
|
default_config: config,
|
||||||
keys_manager,
|
keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
|
@ -4532,7 +4532,7 @@ fn test_simple_manager_serialize_deserialize() {
|
||||||
let (_, nodes_0_deserialized_tmp) = {
|
let (_, nodes_0_deserialized_tmp) = {
|
||||||
let mut channel_monitors = HashMap::new();
|
let mut channel_monitors = HashMap::new();
|
||||||
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
channel_monitors.insert(chan_0_monitor.get_funding_txo().0, &mut chan_0_monitor);
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
||||||
default_config: UserConfig::default(),
|
default_config: UserConfig::default(),
|
||||||
keys_manager,
|
keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
|
@ -4623,7 +4623,7 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
|
||||||
|
|
||||||
let mut nodes_0_read = &nodes_0_serialized[..];
|
let mut nodes_0_read = &nodes_0_serialized[..];
|
||||||
if let Err(msgs::DecodeError::InvalidValue) =
|
if let Err(msgs::DecodeError::InvalidValue) =
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
||||||
default_config: UserConfig::default(),
|
default_config: UserConfig::default(),
|
||||||
keys_manager,
|
keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
|
@ -4637,7 +4637,7 @@ fn test_manager_serialize_deserialize_inconsistent_monitor() {
|
||||||
|
|
||||||
let mut nodes_0_read = &nodes_0_serialized[..];
|
let mut nodes_0_read = &nodes_0_serialized[..];
|
||||||
let (_, nodes_0_deserialized_tmp) =
|
let (_, nodes_0_deserialized_tmp) =
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut nodes_0_read, ChannelManagerReadArgs {
|
||||||
default_config: UserConfig::default(),
|
default_config: UserConfig::default(),
|
||||||
keys_manager,
|
keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
|
@ -7498,7 +7498,7 @@ fn test_data_loss_protect() {
|
||||||
node_state_0 = {
|
node_state_0 = {
|
||||||
let mut channel_monitors = HashMap::new();
|
let mut channel_monitors = HashMap::new();
|
||||||
channel_monitors.insert(OutPoint { txid: chan.3.txid(), index: 0 }, &mut chain_monitor);
|
channel_monitors.insert(OutPoint { txid: chan.3.txid(), index: 0 }, &mut chain_monitor);
|
||||||
<(BlockHash, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut ::std::io::Cursor::new(previous_node_state), ChannelManagerReadArgs {
|
<(Option<BlockHash>, ChannelManager<EnforcingSigner, &test_utils::TestChainMonitor, &test_utils::TestBroadcaster, &test_utils::TestKeysInterface, &test_utils::TestFeeEstimator, &test_utils::TestLogger>)>::read(&mut ::std::io::Cursor::new(previous_node_state), ChannelManagerReadArgs {
|
||||||
keys_manager: keys_manager,
|
keys_manager: keys_manager,
|
||||||
fee_estimator: &fee_estimator,
|
fee_estimator: &fee_estimator,
|
||||||
chain_monitor: &monitor,
|
chain_monitor: &monitor,
|
||||||
|
|
Loading…
Add table
Reference in a new issue