X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Fchain%2Ftransaction.rs;h=39a0a5449ac7cf1a4f5dc636363b0ad9c0245c6f;hb=44e87b86f27a1a6ff3860e8ab87a52e756aa7cc8;hp=0219ebbe8cad9631e1f2fef8c7b05600828e9f24;hpb=ad819ea70572b4775691e3fc386a788ff9438975;p=rust-lightning diff --git a/lightning/src/chain/transaction.rs b/lightning/src/chain/transaction.rs index 0219ebbe..39a0a544 100644 --- a/lightning/src/chain/transaction.rs +++ b/lightning/src/chain/transaction.rs @@ -9,7 +9,9 @@ //! Types describing on-chain transactions. +use crate::ln::ChannelId; use bitcoin::hash_types::Txid; +use bitcoin::hashes::Hash; use bitcoin::blockdata::transaction::OutPoint as BitcoinOutPoint; use bitcoin::blockdata::transaction::Transaction; @@ -57,16 +59,14 @@ pub struct OutPoint { impl OutPoint { /// Convert an `OutPoint` to a lightning channel id. - pub fn to_channel_id(&self) -> [u8; 32] { - let mut res = [0; 32]; - res[..].copy_from_slice(&self.txid[..]); - res[30] ^= ((self.index >> 8) & 0xff) as u8; - res[31] ^= ((self.index >> 0) & 0xff) as u8; - res + pub fn to_channel_id(&self) -> ChannelId { + ChannelId::v1_from_funding_txid(&self.txid.as_inner(), self.index) } /// Converts this OutPoint into the OutPoint field as used by rust-bitcoin - /// (C-not exported) as the same type is used universally in the C bindings for all outpoints + /// + /// This is not exported to bindings users as the same type is used universally in the C bindings + /// for all outpoints pub fn into_bitcoin_outpoint(self) -> BitcoinOutPoint { BitcoinOutPoint { txid: self.txid, @@ -75,11 +75,17 @@ impl OutPoint { } } +impl core::fmt::Display for OutPoint { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + write!(f, "{}:{}", self.txid, self.index) + } +} + impl_writeable!(OutPoint, { txid, index }); #[cfg(test)] mod tests { - use chain::transaction::OutPoint; + use crate::chain::transaction::OutPoint; use bitcoin::blockdata::transaction::Transaction; use bitcoin::consensus::encode; @@ -92,10 +98,10 @@ mod tests { assert_eq!(&OutPoint { txid: tx.txid(), index: 0 - }.to_channel_id(), &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25e").unwrap()[..]); + }.to_channel_id().0[..], &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25e").unwrap()[..]); assert_eq!(&OutPoint { txid: tx.txid(), index: 1 - }.to_channel_id(), &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25f").unwrap()[..]); + }.to_channel_id().0[..], &hex::decode("3e88dd7165faf7be58b3c5bb2c9c452aebef682807ea57080f62e6f6e113c25f").unwrap()[..]); } }