X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fln%2Fmod.rs;h=af654837861fc2eeac3d1f7795453b1a206cae46;hb=989cb064b5279da3c9e0f3a121637d8bbed81bfb;hp=b0c0283cb010b0e73babfc21d37fea450be8106e;hpb=2dd8b3e896374006c898243537b78bb1ecc4fb6d;p=rust-lightning diff --git a/lightning/src/ln/mod.rs b/lightning/src/ln/mod.rs index b0c0283c..af654837 100644 --- a/lightning/src/ln/mod.rs +++ b/lightning/src/ln/mod.rs @@ -9,46 +9,114 @@ //! High level lightning structs and impls live here. //! -//! You probably want to create a channelmanager::ChannelManager, and a routing::NetGraphMsgHandler first. +//! You probably want to create a [`ChannelManager`], and a [`P2PGossipSync`] first. //! Then, you probably want to pass them both on to a peer_handler::PeerManager and use that to //! create/manage connections and call get_and_clear_pending_events after each action, handling //! them appropriately. //! -//! When you want to open/close a channel or send a payment, call into your ChannelManager and when -//! you want to learn things about the network topology (eg get a route for sending a payment), -//! call into your NetGraphMsgHandler. +//! When you want to open/close a channel or send a payment, call into your [`ChannelManager`] and +//! when you want to learn things about the network topology (eg get a route for sending a payment), +//! call into your [`P2PGossipSync`]. +//! +//! [`ChannelManager`]: channelmanager::ChannelManager +//! [`P2PGossipSync`]: crate::routing::gossip::P2PGossipSync + +#[cfg(any(test, feature = "_test_utils"))] +#[macro_use] +pub mod functional_test_utils; pub mod channelmanager; -pub mod channelmonitor; +pub mod inbound_payment; pub mod msgs; pub mod peer_handler; pub mod chan_utils; pub mod features; -pub(crate) mod onchaintx; +pub mod script; -#[cfg(feature = "fuzztarget")] +#[cfg(fuzzing)] pub mod peer_channel_encryptor; -#[cfg(not(feature = "fuzztarget"))] +#[cfg(not(fuzzing))] pub(crate) mod peer_channel_encryptor; -mod channel; -mod onion_utils; -mod wire; +#[cfg(fuzzing)] +pub mod channel; +#[cfg(not(fuzzing))] +pub(crate) mod channel; + +pub(crate) mod onion_utils; +pub mod wire; // Older rustc (which we support) refuses to let us call the get_payment_preimage_hash!() macro // without the node parameter being mut. This is incorrect, and thus newer rustcs will complain // about an unnecessary mut. Thus, we silence the unused_mut warning in two test modules below. -#[cfg(test)] -#[macro_use] -pub(crate) mod functional_test_utils; #[cfg(test)] #[allow(unused_mut)] mod functional_tests; #[cfg(test)] #[allow(unused_mut)] +mod payment_tests; +#[cfg(test)] +#[allow(unused_mut)] +mod priv_short_conf_tests; +#[cfg(test)] +#[allow(unused_mut)] mod chanmon_update_fail_tests; #[cfg(test)] +#[allow(unused_mut)] mod reorg_tests; +#[cfg(test)] +#[allow(unused_mut)] +mod onion_route_tests; +#[cfg(test)] +#[allow(unused_mut)] +mod monitor_tests; +#[cfg(test)] +#[allow(unused_mut)] +mod shutdown_tests; pub use self::peer_channel_encryptor::LN_MAX_MSG_LEN; + +/// payment_hash type, use to cross-lock hop +/// (C-not exported) as we just use [u8; 32] directly +#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)] +pub struct PaymentHash(pub [u8; 32]); +/// payment_preimage type, use to route payment between hop +/// (C-not exported) as we just use [u8; 32] directly +#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)] +pub struct PaymentPreimage(pub [u8; 32]); +/// payment_secret type, use to authenticate sender to the receiver and tie MPP HTLCs together +/// (C-not exported) as we just use [u8; 32] directly +#[derive(Hash, Copy, Clone, PartialEq, Eq, Debug)] +pub struct PaymentSecret(pub [u8; 32]); + +use prelude::*; +use bitcoin::bech32; +use bitcoin::bech32::{Base32Len, FromBase32, ToBase32, WriteBase32, u5}; + +impl FromBase32 for PaymentSecret { + type Err = bech32::Error; + + fn from_base32(field_data: &[u5]) -> Result { + if field_data.len() != 52 { + return Err(bech32::Error::InvalidLength) + } else { + let data_bytes = Vec::::from_base32(field_data)?; + let mut payment_secret = [0; 32]; + payment_secret.copy_from_slice(&data_bytes); + Ok(PaymentSecret(payment_secret)) + } + } +} + +impl ToBase32 for PaymentSecret { + fn write_base32(&self, writer: &mut W) -> Result<(), ::Err> { + (&self.0[..]).write_base32(writer) + } +} + +impl Base32Len for PaymentSecret { + fn base32_len(&self) -> usize { + 52 + } +}