+// This file is Copyright its original authors, visible in version control
+// history.
+//
+// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
+// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
+// You may not use this file except in accordance with one or both of these
+// licenses.
+
//! Events are returned from various bits in the library which indicate some action must be taken
//! by the client.
//!
use ln::msgs;
use ln::channelmanager::{PaymentPreimage, PaymentHash, PaymentSecret};
-use chain::transaction::OutPoint;
use chain::keysinterface::SpendableOutputDescriptor;
use util::ser::{Writeable, Writer, MaybeReadable, Readable};
use bitcoin::blockdata::script::Script;
-use secp256k1::key::PublicKey;
+use bitcoin::secp256k1::key::PublicKey;
use std::time::Duration;
/// Note that while Writeable and Readable are implemented for Event, you probably shouldn't use
/// them directly as they don't round-trip exactly (for example FundingGenerationReady is never
/// written as it makes no sense to respond to it after reconnecting to peers).
+#[derive(Clone, Debug)]
pub enum Event {
/// Used to indicate that the client should generate a funding transaction with the given
/// parameters and then call ChannelManager::funding_transaction_generated.
/// The value passed in to ChannelManager::create_channel
user_channel_id: u64,
},
- /// Used to indicate that the client may now broadcast the funding transaction it created for a
- /// channel. Broadcasting such a transaction prior to this event may lead to our counterparty
- /// trivially stealing all funds in the funding transaction!
- FundingBroadcastSafe {
- /// The output, which was passed to ChannelManager::funding_transaction_generated, which is
- /// now safe to broadcast.
- funding_txo: OutPoint,
- /// The value passed in to ChannelManager::create_channel
- user_channel_id: u64,
- },
/// Indicates we've received money! Just gotta dig out that payment preimage and feed it to
/// ChannelManager::claim_funds to get it....
/// Note that if the preimage is not known or the amount paid is incorrect, you should call
// We never write out FundingGenerationReady events as, upon disconnection, peers
// drop any channels which have not yet exchanged funding_signed.
},
- &Event::FundingBroadcastSafe { ref funding_txo, ref user_channel_id } => {
- 1u8.write(writer)?;
- funding_txo.write(writer)?;
- user_channel_id.write(writer)?;
- },
&Event::PaymentReceived { ref payment_hash, ref payment_secret, ref amt } => {
- 2u8.write(writer)?;
+ 1u8.write(writer)?;
payment_hash.write(writer)?;
payment_secret.write(writer)?;
amt.write(writer)?;
},
&Event::PaymentSent { ref payment_preimage } => {
- 3u8.write(writer)?;
+ 2u8.write(writer)?;
payment_preimage.write(writer)?;
},
&Event::PaymentFailed { ref payment_hash, ref rejected_by_dest,
#[cfg(test)]
ref error_data,
} => {
- 4u8.write(writer)?;
+ 3u8.write(writer)?;
payment_hash.write(writer)?;
rejected_by_dest.write(writer)?;
#[cfg(test)]
error_data.write(writer)?;
},
&Event::PendingHTLCsForwardable { time_forwardable: _ } => {
- 5u8.write(writer)?;
+ 4u8.write(writer)?;
// We don't write the time_fordwardable out at all, as we presume when the user
// deserializes us at least that much time has elapsed.
},
&Event::SpendableOutputs { ref outputs } => {
- 6u8.write(writer)?;
+ 5u8.write(writer)?;
(outputs.len() as u64).write(writer)?;
for output in outputs.iter() {
output.write(writer)?;
fn read<R: ::std::io::Read>(reader: &mut R) -> Result<Option<Self>, msgs::DecodeError> {
match Readable::read(reader)? {
0u8 => Ok(None),
- 1u8 => Ok(Some(Event::FundingBroadcastSafe {
- funding_txo: Readable::read(reader)?,
- user_channel_id: Readable::read(reader)?,
- })),
- 2u8 => Ok(Some(Event::PaymentReceived {
+ 1u8 => Ok(Some(Event::PaymentReceived {
payment_hash: Readable::read(reader)?,
payment_secret: Readable::read(reader)?,
amt: Readable::read(reader)?,
})),
- 3u8 => Ok(Some(Event::PaymentSent {
+ 2u8 => Ok(Some(Event::PaymentSent {
payment_preimage: Readable::read(reader)?,
})),
- 4u8 => Ok(Some(Event::PaymentFailed {
+ 3u8 => Ok(Some(Event::PaymentFailed {
payment_hash: Readable::read(reader)?,
rejected_by_dest: Readable::read(reader)?,
#[cfg(test)]
#[cfg(test)]
error_data: Readable::read(reader)?,
})),
- 5u8 => Ok(Some(Event::PendingHTLCsForwardable {
+ 4u8 => Ok(Some(Event::PendingHTLCsForwardable {
time_forwardable: Duration::from_secs(0)
})),
- 6u8 => {
+ 5u8 => {
let outputs_len: u64 = Readable::read(reader)?;
let mut outputs = Vec::new();
for _ in 0..outputs_len {
/// An event generated by ChannelManager which indicates a message should be sent to a peer (or
/// broadcast to most peers).
/// These events are handled by PeerManager::process_events if you are using a PeerManager.
-#[derive(Clone)]
+#[derive(Clone, Debug)]
pub enum MessageSendEvent {
/// Used to indicate that we've accepted a channel open and should send the accept_channel
/// message provided to the given peer.
action: msgs::ErrorAction
},
/// When a payment fails we may receive updates back from the hop where it failed. In such
- /// cases this event is generated so that we can inform the router of this information.
+ /// cases this event is generated so that we can inform the network graph of this information.
PaymentFailureNetworkUpdate {
- /// The channel/node update which should be sent to router
+ /// The channel/node update which should be sent to NetGraphMsgHandler
update: msgs::HTLCFailChannelUpdate,
+ },
+ /// Query a peer for channels with funding transaction UTXOs in a block range.
+ SendChannelRangeQuery {
+ /// The node_id of this message recipient
+ node_id: PublicKey,
+ /// The query_channel_range which should be sent.
+ msg: msgs::QueryChannelRange,
+ },
+ /// Request routing gossip messages from a peer for a list of channels identified by
+ /// their short_channel_ids.
+ SendShortIdsQuery {
+ /// The node_id of this message recipient
+ node_id: PublicKey,
+ /// The query_short_channel_ids which should be sent.
+ msg: msgs::QueryShortChannelIds,
+ },
+ /// Sends a reply to a channel range query. This may be one of several SendReplyChannelRange events
+ /// emitted during processing of the query.
+ SendReplyChannelRange {
+ /// The node_id of this message recipient
+ node_id: PublicKey,
+ /// The reply_channel_range which should be sent.
+ msg: msgs::ReplyChannelRange,
}
}