X-Git-Url: http://git.bitcoin.ninja/index.cgi?a=blobdiff_plain;f=lightning%2Fsrc%2Foffers%2Finvoice.rs;h=02d68b635363356736b727287f9cf6949c02be02;hb=refs%2Fheads%2F2023-11-bitcoin-0.30-followups;hp=5bd5a95d8e627a3e69964db540fbffa554bbddf4;hpb=fb670c8faae8c1e990496b869e62dfbde10a64f8;p=rust-lightning diff --git a/lightning/src/offers/invoice.rs b/lightning/src/offers/invoice.rs index 5bd5a95d..02d68b63 100644 --- a/lightning/src/offers/invoice.rs +++ b/lightning/src/offers/invoice.rs @@ -40,7 +40,7 @@ //! let secp_ctx = Secp256k1::new(); //! let keys = KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32])?); //! let pubkey = PublicKey::from(keys); -//! let wpubkey_hash = bitcoin::util::key::PublicKey::new(pubkey).wpubkey_hash().unwrap(); +//! let wpubkey_hash = bitcoin::key::PublicKey::new(pubkey).wpubkey_hash().unwrap(); //! let mut buffer = Vec::new(); //! //! // Invoice for the "offer to be paid" flow. @@ -70,7 +70,7 @@ //! # let secp_ctx = Secp256k1::new(); //! # let keys = KeyPair::from_secret_key(&secp_ctx, &SecretKey::from_slice(&[42; 32])?); //! # let pubkey = PublicKey::from(keys); -//! # let wpubkey_hash = bitcoin::util::key::PublicKey::new(pubkey).wpubkey_hash().unwrap(); +//! # let wpubkey_hash = bitcoin::key::PublicKey::new(pubkey).wpubkey_hash().unwrap(); //! # let mut buffer = Vec::new(); //! //! // Invoice for the "offer for money" flow. @@ -103,8 +103,8 @@ use bitcoin::hashes::Hash; use bitcoin::network::constants::Network; use bitcoin::secp256k1::{KeyPair, PublicKey, Secp256k1, self}; use bitcoin::secp256k1::schnorr::Signature; -use bitcoin::util::address::{Address, Payload, WitnessVersion}; -use bitcoin::util::schnorr::TweakedPublicKey; +use bitcoin::address::{Address, Payload, WitnessProgram, WitnessVersion}; +use bitcoin::key::TweakedPublicKey; use core::convert::{AsRef, Infallible, TryFrom}; use core::time::Duration; use crate::io; @@ -291,7 +291,7 @@ impl<'a, S: SigningPubkeyStrategy> InvoiceBuilder<'a, S> { pub fn fallback_v0_p2wsh(mut self, script_hash: &WScriptHash) -> Self { let address = FallbackAddress { version: WitnessVersion::V0.to_num(), - program: Vec::from(&script_hash.into_inner()[..]), + program: Vec::from(script_hash.to_byte_array()), }; self.invoice.fields_mut().fallbacks.get_or_insert_with(Vec::new).push(address); self @@ -304,7 +304,7 @@ impl<'a, S: SigningPubkeyStrategy> InvoiceBuilder<'a, S> { pub fn fallback_v0_p2wpkh(mut self, pubkey_hash: &WPubkeyHash) -> Self { let address = FallbackAddress { version: WitnessVersion::V0.to_num(), - program: Vec::from(&pubkey_hash.into_inner()[..]), + program: Vec::from(pubkey_hash.to_byte_array()), }; self.invoice.fields_mut().fallbacks.get_or_insert_with(Vec::new).push(address); self @@ -926,23 +926,11 @@ impl InvoiceContents { }; let program = &address.program; - if program.len() < 2 || program.len() > 40 { - return None; - } - - let address = Address { - payload: Payload::WitnessProgram { - version, - program: program.clone(), - }, - network, + let witness_program = match WitnessProgram::new(version, program.clone()) { + Ok(witness_program) => witness_program, + Err(_) => return None, }; - - if !address.is_standard() && version == WitnessVersion::V0 { - return None; - } - - Some(address) + Some(Address::new(network, Payload::WitnessProgram(witness_program))) }; self.fields().fallbacks @@ -1305,12 +1293,12 @@ mod tests { use super::{Bolt12Invoice, DEFAULT_RELATIVE_EXPIRY, FallbackAddress, FullInvoiceTlvStreamRef, InvoiceTlvStreamRef, SIGNATURE_TAG, UnsignedBolt12Invoice}; use bitcoin::blockdata::constants::ChainHash; - use bitcoin::blockdata::script::Script; + use bitcoin::blockdata::script::ScriptBuf; use bitcoin::hashes::Hash; use bitcoin::network::constants::Network; use bitcoin::secp256k1::{Message, Secp256k1, XOnlyPublicKey, self}; - use bitcoin::util::address::{Address, Payload, WitnessVersion}; - use bitcoin::util::schnorr::TweakedPublicKey; + use bitcoin::address::{Address, Payload, WitnessProgram, WitnessVersion}; + use bitcoin::key::TweakedPublicKey; use core::convert::TryFrom; use core::time::Duration; use crate::blinded_path::{BlindedHop, BlindedPath}; @@ -1806,8 +1794,8 @@ mod tests { #[test] fn builds_invoice_with_fallback_address() { - let script = Script::new(); - let pubkey = bitcoin::util::key::PublicKey::new(recipient_pubkey()); + let script = ScriptBuf::new(); + let pubkey = bitcoin::key::PublicKey::new(recipient_pubkey()); let x_only_pubkey = XOnlyPublicKey::from_keypair(&recipient_keys()).0; let tweaked_pubkey = TweakedPublicKey::dangerous_assume_tweaked(x_only_pubkey); @@ -1837,11 +1825,11 @@ mod tests { Some(&vec![ FallbackAddress { version: WitnessVersion::V0.to_num(), - program: Vec::from(&script.wscript_hash().into_inner()[..]), + program: Vec::from(script.wscript_hash().to_byte_array()), }, FallbackAddress { version: WitnessVersion::V0.to_num(), - program: Vec::from(&pubkey.wpubkey_hash().unwrap().into_inner()[..]), + program: Vec::from(pubkey.wpubkey_hash().unwrap().to_byte_array()), }, FallbackAddress { version: WitnessVersion::V1.to_num(), @@ -2095,8 +2083,8 @@ mod tests { #[test] fn parses_invoice_with_fallback_address() { - let script = Script::new(); - let pubkey = bitcoin::util::key::PublicKey::new(recipient_pubkey()); + let script = ScriptBuf::new(); + let pubkey = bitcoin::key::PublicKey::new(recipient_pubkey()); let x_only_pubkey = XOnlyPublicKey::from_keypair(&recipient_keys()).0; let tweaked_pubkey = TweakedPublicKey::dangerous_assume_tweaked(x_only_pubkey); @@ -2129,26 +2117,16 @@ mod tests { match Bolt12Invoice::try_from(buffer) { Ok(invoice) => { + let v1_witness_program = WitnessProgram::new(WitnessVersion::V1, vec![0u8; 33]).unwrap(); + let v2_witness_program = WitnessProgram::new(WitnessVersion::V2, vec![0u8; 40]).unwrap(); assert_eq!( invoice.fallbacks(), vec![ Address::p2wsh(&script, Network::Bitcoin), Address::p2wpkh(&pubkey, Network::Bitcoin).unwrap(), Address::p2tr_tweaked(tweaked_pubkey, Network::Bitcoin), - Address { - payload: Payload::WitnessProgram { - version: WitnessVersion::V1, - program: vec![0u8; 33], - }, - network: Network::Bitcoin, - }, - Address { - payload: Payload::WitnessProgram { - version: WitnessVersion::V2, - program: vec![0u8; 40], - }, - network: Network::Bitcoin, - }, + Address::new(Network::Bitcoin, Payload::WitnessProgram(v1_witness_program)), + Address::new(Network::Bitcoin, Payload::WitnessProgram(v2_witness_program)), ], ); },