diff --git a/api/bitcoin/all-features.txt b/api/bitcoin/all-features.txt index 455670fc2..0997c3231 100644 --- a/api/bitcoin/all-features.txt +++ b/api/bitcoin/all-features.txt @@ -7057,6 +7057,7 @@ pub fn bitcoin::address::Address::is_spend_standard(&self) -> bool pub fn bitcoin::address::Address::matches_script_pubkey(&self, script: &bitcoin::blockdata::script::Script) -> bool pub fn bitcoin::address::Address::p2pkh(pk: impl core::convert::Into, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2sh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> core::result::Result +pub fn bitcoin::address::Address::p2sh_from_hash(hash: bitcoin::blockdata::script::ScriptHash, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwpkh(pk: &bitcoin::CompressedPublicKey, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwsh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2tr(secp: &secp256k1::Secp256k1, internal_key: bitcoin::key::UntweakedPublicKey, merkle_root: core::option::Option, hrp: impl core::convert::Into) -> bitcoin::address::Address diff --git a/api/bitcoin/default-features.txt b/api/bitcoin/default-features.txt index 85df583a7..ad867e9b8 100644 --- a/api/bitcoin/default-features.txt +++ b/api/bitcoin/default-features.txt @@ -6725,6 +6725,7 @@ pub fn bitcoin::address::Address::is_spend_standard(&self) -> bool pub fn bitcoin::address::Address::matches_script_pubkey(&self, script: &bitcoin::blockdata::script::Script) -> bool pub fn bitcoin::address::Address::p2pkh(pk: impl core::convert::Into, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2sh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> core::result::Result +pub fn bitcoin::address::Address::p2sh_from_hash(hash: bitcoin::blockdata::script::ScriptHash, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwpkh(pk: &bitcoin::CompressedPublicKey, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwsh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2tr(secp: &secp256k1::Secp256k1, internal_key: bitcoin::key::UntweakedPublicKey, merkle_root: core::option::Option, hrp: impl core::convert::Into) -> bitcoin::address::Address diff --git a/api/bitcoin/no-features.txt b/api/bitcoin/no-features.txt index aa11783f8..2a952ed73 100644 --- a/api/bitcoin/no-features.txt +++ b/api/bitcoin/no-features.txt @@ -6096,6 +6096,7 @@ pub fn bitcoin::address::Address::is_spend_standard(&self) -> bool pub fn bitcoin::address::Address::matches_script_pubkey(&self, script: &bitcoin::blockdata::script::Script) -> bool pub fn bitcoin::address::Address::p2pkh(pk: impl core::convert::Into, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2sh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> core::result::Result +pub fn bitcoin::address::Address::p2sh_from_hash(hash: bitcoin::blockdata::script::ScriptHash, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwpkh(pk: &bitcoin::CompressedPublicKey, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2shwsh(script: &bitcoin::blockdata::script::Script, network: impl core::convert::Into) -> bitcoin::address::Address pub fn bitcoin::address::Address::p2tr(secp: &secp256k1::Secp256k1, internal_key: bitcoin::key::UntweakedPublicKey, merkle_root: core::option::Option, hrp: impl core::convert::Into) -> bitcoin::address::Address diff --git a/bitcoin/src/address/mod.rs b/bitcoin/src/address/mod.rs index c2cdb9ccd..ececea696 100644 --- a/bitcoin/src/address/mod.rs +++ b/bitcoin/src/address/mod.rs @@ -384,8 +384,13 @@ impl Address { Ok(Address::p2sh_from_hash(hash, network)) } - // This is intentionally not public so we enforce script length checks. - fn p2sh_from_hash(hash: ScriptHash, network: impl Into) -> Address { + /// Creates a pay to script hash P2SH address from a script hash. + /// + /// # Warning + /// + /// The `hash` pre-image (redeem script) must not exceed 520 bytes in length + /// otherwise outputs created from the returned address will be un-spendable. + pub fn p2sh_from_hash(hash: ScriptHash, network: impl Into) -> Address { Self(AddressInner::P2sh { hash, network: network.into() }, PhantomData) }