pub struct ChannelManagerReadArgs<'a, Signer: 'a + Sign, M: Deref, T: Deref, K: Deref, F: Deref, L: Deref>where
    M::Target: Watch<Signer>,
    T::Target: BroadcasterInterface,
    K::Target: KeysInterface<Signer = Signer>,
    F::Target: FeeEstimator,
    L::Target: Logger,
{ pub keys_manager: K, pub fee_estimator: F, pub chain_monitor: M, pub tx_broadcaster: T, pub logger: L, pub default_config: UserConfig, pub channel_monitors: HashMap<OutPoint, &'a mut ChannelMonitor<Signer>>, }
Expand description

Arguments for the creation of a ChannelManager that are not deserialized.

At a high-level, the process for deserializing a ChannelManager and resuming normal operation is:

  1. Deserialize all stored ChannelMonitors.
  2. Deserialize the ChannelManager by filling in this struct and calling: <(BlockHash, ChannelManager)>::read(reader, args) This may result in closing some channels if the ChannelMonitor is newer than the stored ChannelManager state to ensure no loss of funds. Thus, transactions may be broadcasted.
  3. If you are not fetching full blocks, register all relevant ChannelMonitor outpoints the same way you would handle a chain::Filter call using ChannelMonitor::get_outputs_to_watch and ChannelMonitor::get_funding_txo.
  4. Reconnect blocks on your ChannelMonitors.
  5. Disconnect/connect blocks on the ChannelManager.
  6. Re-persist the ChannelMonitors to ensure the latest state is on disk. Note that if you’re using a ChainMonitor for your chain::Watch implementation, you will likely accomplish this as a side-effect of calling chain::Watch::watch_channel in the next step.
  7. Move the ChannelMonitors into your local chain::Watch. If you’re using a ChainMonitor, this is done by calling chain::Watch::watch_channel.

Note that the ordering of #4-7 is not of importance, however all four must occur before you call any other methods on the newly-deserialized ChannelManager.

Note that because some channels may be closed during deserialization, it is critical that you always deserialize only the latest version of a ChannelManager and ChannelMonitors available to you. If you deserialize an old ChannelManager (during which force-closure transactions may be broadcast), and then later deserialize a newer version of the same ChannelManager (which will not force-close the same channels but consider them live), you may end up revoking a state for which you’ve already broadcasted the transaction.

Fields

keys_manager: K

The keys provider which will give us relevant keys. Some keys will be loaded during deserialization and KeysInterface::read_chan_signer will be used to read per-Channel signing data.

fee_estimator: F

The fee_estimator for use in the ChannelManager in the future.

No calls to the FeeEstimator will be made during deserialization.

chain_monitor: M

The chain::Watch for use in the ChannelManager in the future.

No calls to the chain::Watch will be made during deserialization. It is assumed that you have deserialized ChannelMonitors separately and will add them to your chain::Watch after deserializing this ChannelManager.

tx_broadcaster: T

The BroadcasterInterface which will be used in the ChannelManager in the future and may be used to broadcast the latest local commitment transactions of channels which must be force-closed during deserialization.

logger: L

The Logger for use in the ChannelManager and which may be used to log information during deserialization.

default_config: UserConfig

Default settings used for new channels. Any existing channels will continue to use the runtime settings which were stored when the ChannelManager was serialized.

channel_monitors: HashMap<OutPoint, &'a mut ChannelMonitor<Signer>>

A map from channel funding outpoints to ChannelMonitors for those channels (ie value.get_funding_txo() should be the key).

If a monitor is inconsistent with the channel state during deserialization the channel will be force-closed using the data in the ChannelMonitor and the channel will be dropped. This is true for missing channels as well. If there is a monitor missing for which we find channel data Err(DecodeError::InvalidValue) will be returned.

In such cases the latest local transactions will be sent to the tx_broadcaster included in this struct.

(C-not exported) because we have no HashMap bindings

Implementations

Simple utility function to create a ChannelManagerReadArgs which creates the monitor HashMap for you. This is primarily useful for C bindings where it is not practical to populate a HashMap directly from C.

Trait Implementations

Reads a Self in from the given Read

Reads a Self in from the given Read

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.