Change Address::from_str(s) to s.parse

`s.parse` is more idiomatic and produces more helpful error messages.

This has been changed for parsing a string as an `Address`.
This commit is contained in:
Jamil Lambert, PhD 2024-08-28 13:45:09 +01:00
parent 64e668f99e
commit 4ad86148c7
No known key found for this signature in database
GPG Key ID: 54DC29234AB5D2C0
7 changed files with 15 additions and 23 deletions

View File

@ -23,7 +23,6 @@
//! //!
//! The miner's fee will be 10,000 satoshis. //! The miner's fee will be 10,000 satoshis.
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::str::FromStr;
use bitcoin::address::script_pubkey::ScriptBufExt as _; use bitcoin::address::script_pubkey::ScriptBufExt as _;
use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub}; use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub};
@ -85,7 +84,7 @@ fn get_internal_address_xpriv<C: Signing>(
// The address to send to. // The address to send to.
fn receivers_address() -> Address { fn receivers_address() -> Address {
Address::from_str("bc1q7cyrfmck2ffu2ud3rn5l5a8yv6f0chkp0zpemf") "bc1q7cyrfmck2ffu2ud3rn5l5a8yv6f0chkp0zpemf".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")
@ -93,7 +92,7 @@ fn receivers_address() -> Address {
// The dummy unspent transaction outputs that we control. // The dummy unspent transaction outputs that we control.
fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> { fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> {
let script_pubkey_1 = Address::from_str("bc1qrwuu3ydv0jfza4a0ehtfd03m9l4vw3fy0hfm50") let script_pubkey_1 = "bc1qrwuu3ydv0jfza4a0ehtfd03m9l4vw3fy0hfm50".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")
@ -106,7 +105,7 @@ fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> {
let utxo_1 = TxOut { value: DUMMY_UTXO_AMOUNT_INPUT_1, script_pubkey: script_pubkey_1 }; let utxo_1 = TxOut { value: DUMMY_UTXO_AMOUNT_INPUT_1, script_pubkey: script_pubkey_1 };
let script_pubkey_2 = Address::from_str("bc1qy7swwpejlw7a2rp774pa8rymh8tw3xvd2x2xkd") let script_pubkey_2 = "bc1qy7swwpejlw7a2rp774pa8rymh8tw3xvd2x2xkd".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")

View File

@ -30,7 +30,6 @@
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::fmt; use std::fmt;
use std::str::FromStr;
use bitcoin::address::script_pubkey::ScriptBufExt as _; use bitcoin::address::script_pubkey::ScriptBufExt as _;
use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub}; use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub};
@ -175,7 +174,7 @@ impl WatchOnly {
/// Creates the PSBT, in BIP174 parlance this is the 'Creator'. /// Creates the PSBT, in BIP174 parlance this is the 'Creator'.
fn create_psbt<C: Verification>(&self, secp: &Secp256k1<C>) -> Result<Psbt> { fn create_psbt<C: Verification>(&self, secp: &Secp256k1<C>) -> Result<Psbt> {
let to_address = Address::from_str(RECEIVE_ADDRESS)?.require_network(Network::Regtest)?; let to_address = RECEIVE_ADDRESS.parse::<Address<_>>()?.require_network(Network::Regtest)?;
let to_amount = OUTPUT_AMOUNT_BTC.parse::<Amount>()?; let to_amount = OUTPUT_AMOUNT_BTC.parse::<Amount>()?;
let (_, change_address, _) = self.change_address(secp)?; let (_, change_address, _) = self.change_address(secp)?;

View File

@ -2,8 +2,6 @@
//! Demonstrate creating a transaction that spends to and from p2wpkh outputs. //! Demonstrate creating a transaction that spends to and from p2wpkh outputs.
use std::str::FromStr;
use bitcoin::address::script_pubkey::ScriptBufExt as _; use bitcoin::address::script_pubkey::ScriptBufExt as _;
use bitcoin::locktime::absolute; use bitcoin::locktime::absolute;
use bitcoin::secp256k1::{rand, Message, Secp256k1, SecretKey, Signing}; use bitcoin::secp256k1::{rand, Message, Secp256k1, SecretKey, Signing};
@ -102,7 +100,7 @@ fn senders_keys<C: Signing>(secp: &Secp256k1<C>) -> (SecretKey, WPubkeyHash) {
/// ///
/// (FWIW this is a random mainnet address from block 80219.) /// (FWIW this is a random mainnet address from block 80219.)
fn receivers_address() -> Address { fn receivers_address() -> Address {
Address::from_str("bc1q7cyrfmck2ffu2ud3rn5l5a8yv6f0chkp0zpemf") "bc1q7cyrfmck2ffu2ud3rn5l5a8yv6f0chkp0zpemf".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")

View File

@ -2,8 +2,6 @@
//! Demonstrate creating a transaction that spends to and from p2tr outputs. //! Demonstrate creating a transaction that spends to and from p2tr outputs.
use std::str::FromStr;
use bitcoin::address::script_pubkey::ScriptBufExt as _; use bitcoin::address::script_pubkey::ScriptBufExt as _;
use bitcoin::key::{Keypair, TapTweak, TweakedKeypair, UntweakedPublicKey}; use bitcoin::key::{Keypair, TapTweak, TweakedKeypair, UntweakedPublicKey};
use bitcoin::locktime::absolute; use bitcoin::locktime::absolute;
@ -99,7 +97,7 @@ fn senders_keys<C: Signing>(secp: &Secp256k1<C>) -> Keypair {
/// ///
/// (FWIW this is an arbitrary mainnet address from block 805222.) /// (FWIW this is an arbitrary mainnet address from block 805222.)
fn receivers_address() -> Address { fn receivers_address() -> Address {
Address::from_str("bc1p0dq0tzg2r780hldthn5mrznmpxsxc0jux5f20fwj0z3wqxxk6fpqm7q0va") "bc1p0dq0tzg2r780hldthn5mrznmpxsxc0jux5f20fwj0z3wqxxk6fpqm7q0va".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")

View File

@ -21,7 +21,6 @@
//! //!
//! The miner's fee will be 10,000 satoshis. //! The miner's fee will be 10,000 satoshis.
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::str::FromStr;
use bitcoin::address::script_pubkey::ScriptBufExt as _; use bitcoin::address::script_pubkey::ScriptBufExt as _;
use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub}; use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, IntoDerivationPath, Xpriv, Xpub};
@ -95,7 +94,7 @@ fn get_tap_key_origin(
// The address to send to. // The address to send to.
fn receivers_address() -> Address { fn receivers_address() -> Address {
Address::from_str("bc1p0dq0tzg2r780hldthn5mrznmpxsxc0jux5f20fwj0z3wqxxk6fpqm7q0va") "bc1p0dq0tzg2r780hldthn5mrznmpxsxc0jux5f20fwj0z3wqxxk6fpqm7q0va".parse::<Address<_>>()
.expect("a valid address") .expect("a valid address")
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.expect("valid address for mainnet") .expect("valid address for mainnet")
@ -104,7 +103,7 @@ fn receivers_address() -> Address {
// The dummy unspent transaction outputs that we control. // The dummy unspent transaction outputs that we control.
fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> { fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> {
let script_pubkey_1 = let script_pubkey_1 =
Address::from_str("bc1p80lanj0xee8q667aqcnn0xchlykllfsz3gu5skfv9vjsytaujmdqtv52vu") "bc1p80lanj0xee8q667aqcnn0xchlykllfsz3gu5skfv9vjsytaujmdqtv52vu".parse::<Address<_>>()
.unwrap() .unwrap()
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.unwrap() .unwrap()
@ -118,7 +117,7 @@ fn dummy_unspent_transaction_outputs() -> Vec<(OutPoint, TxOut)> {
let utxo_1 = TxOut { value: DUMMY_UTXO_AMOUNT_INPUT_1, script_pubkey: script_pubkey_1 }; let utxo_1 = TxOut { value: DUMMY_UTXO_AMOUNT_INPUT_1, script_pubkey: script_pubkey_1 };
let script_pubkey_2 = let script_pubkey_2 =
Address::from_str("bc1pfd0jmmdnp278vppcw68tkkmquxtq50xchy7f6wdmjtjm7fgsr8dszdcqce") "bc1pfd0jmmdnp278vppcw68tkkmquxtq50xchy7f6wdmjtjm7fgsr8dszdcqce".parse::<Address<_>>()
.unwrap() .unwrap()
.require_network(Network::Bitcoin) .require_network(Network::Bitcoin)
.unwrap() .unwrap()

View File

@ -76,7 +76,6 @@ const UTXO_3: P2trUtxo = P2trUtxo {
}; };
use std::collections::BTreeMap; use std::collections::BTreeMap;
use std::str::FromStr;
use bitcoin::address::script_pubkey::{BuilderExt as _, ScriptBufExt as _}; use bitcoin::address::script_pubkey::{BuilderExt as _, ScriptBufExt as _};
use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, Xpriv, Xpub}; use bitcoin::bip32::{ChildNumber, DerivationPath, Fingerprint, Xpriv, Xpub};
@ -101,10 +100,10 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
// Just some addresses for outputs from our wallets. Not really important. // Just some addresses for outputs from our wallets. Not really important.
let to_address = let to_address =
Address::from_str("bcrt1p0p3rvwww0v9znrclp00uneq8ytre9kj922v8fxhnezm3mgsmn9usdxaefc")? "bcrt1p0p3rvwww0v9znrclp00uneq8ytre9kj922v8fxhnezm3mgsmn9usdxaefc".parse::<Address<_>>()?
.require_network(Network::Regtest)?; .require_network(Network::Regtest)?;
let change_address = let change_address =
Address::from_str("bcrt1pz449kexzydh2kaypatup5ultru3ej284t6eguhnkn6wkhswt0l7q3a7j76")? "bcrt1pz449kexzydh2kaypatup5ultru3ej284t6eguhnkn6wkhswt0l7q3a7j76".parse::<Address<_>>()?
.require_network(Network::Regtest)?; .require_network(Network::Regtest)?;
let amount_to_send_in_sats = Amount::ONE_BTC; let amount_to_send_in_sats = Amount::ONE_BTC;
let change_amount = UTXO_1 let change_amount = UTXO_1

View File

@ -309,7 +309,7 @@ pub enum AddressData {
/// ``` /// ```
/// # use std::str::FromStr; /// # use std::str::FromStr;
/// # use bitcoin::address::{Address, NetworkChecked}; /// # use bitcoin::address::{Address, NetworkChecked};
/// let address: Address<NetworkChecked> = Address::from_str("132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM") /// let address: Address<NetworkChecked> = "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM".parse::<Address<_>>()
/// .unwrap().assume_checked(); /// .unwrap().assume_checked();
/// assert_eq!(address.to_string(), "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM"); /// assert_eq!(address.to_string(), "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM");
/// ``` /// ```
@ -317,7 +317,7 @@ pub enum AddressData {
/// ```ignore /// ```ignore
/// # use std::str::FromStr; /// # use std::str::FromStr;
/// # use bitcoin::address::{Address, NetworkChecked}; /// # use bitcoin::address::{Address, NetworkChecked};
/// let address: Address<NetworkUnchecked> = Address::from_str("132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM") /// let address: Address<NetworkUnchecked> = "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM".parse::<Address<_>>()
/// .unwrap(); /// .unwrap();
/// let s = address.to_string(); // does not compile /// let s = address.to_string(); // does not compile
/// ``` /// ```
@ -329,7 +329,7 @@ pub enum AddressData {
/// ``` /// ```
/// # use std::str::FromStr; /// # use std::str::FromStr;
/// # use bitcoin::address::{Address, NetworkUnchecked}; /// # use bitcoin::address::{Address, NetworkUnchecked};
/// let address: Address<NetworkUnchecked> = Address::from_str("132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM") /// let address: Address<NetworkUnchecked> = "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM".parse::<Address<_>>()
/// .unwrap(); /// .unwrap();
/// assert_eq!(format!("{:?}", address), "Address<NetworkUnchecked>(132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM)"); /// assert_eq!(format!("{:?}", address), "Address<NetworkUnchecked>(132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM)");
/// ``` /// ```
@ -337,7 +337,7 @@ pub enum AddressData {
/// ``` /// ```
/// # use std::str::FromStr; /// # use std::str::FromStr;
/// # use bitcoin::address::{Address, NetworkChecked}; /// # use bitcoin::address::{Address, NetworkChecked};
/// let address: Address<NetworkChecked> = Address::from_str("132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM") /// let address: Address<NetworkChecked> = "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM".parse::<Address<_>>()
/// .unwrap().assume_checked(); /// .unwrap().assume_checked();
/// assert_eq!(format!("{:?}", address), "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM"); /// assert_eq!(format!("{:?}", address), "132F25rTsvBdp9JzLLBHP5mvGY66i1xdiM");
/// ``` /// ```