From 38d2ef5d7350129f3cf2b707ee0b6a9d96f540bd Mon Sep 17 00:00:00 2001 From: Andrew Poelstra Date: Wed, 14 Oct 2015 22:21:09 -0500 Subject: [PATCH] Add `from_script` method to Address for generating P2SH addresses --- Cargo.toml | 2 +- src/util/address.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 85d7359..185cbf8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "bitcoin" -version = "0.3.3" +version = "0.3.4" authors = ["Andrew Poelstra "] license = "CC0-1.0" homepage = "https://github.com/apoelstra/rust-bitcoin/" diff --git a/src/util/address.rs b/src/util/address.rs index d888306..934319d 100644 --- a/src/util/address.rs +++ b/src/util/address.rs @@ -63,6 +63,16 @@ impl Address { } } + /// Creates a P2SH address from a script + #[inline] + pub fn from_script(network: Network, script: &script::Script) -> Address { + Address { + ty: Type::ScriptHash, + network: network, + hash: Hash160::from_data(&script[..]) + } + } + /// Generates a script pubkey spending to this address #[inline] pub fn script_pubkey(&self) -> script::Script { @@ -253,6 +263,15 @@ mod tests { assert_eq!(FromBase58::from_base58check("33iFwdLuRpW1uK1RTRqsoi8rR4NpDzk66k"), Ok(addr)); } + #[test] + fn test_p2sh_parse() { + let script = hex_script!("552103a765fc35b3f210b95223846b36ef62a4e53e34e2925270c2c7906b92c9f718eb2103c327511374246759ec8d0b89fa6c6b23b33e11f92c5bc155409d86de0c79180121038cae7406af1f12f4786d820a1466eec7bc5785a1b5e4a387eca6d797753ef6db2103252bfb9dcaab0cd00353f2ac328954d791270203d66c2be8b430f115f451b8a12103e79412d42372c55dd336f2eb6eb639ef9d74a22041ba79382c74da2338fe58ad21035049459a4ebc00e876a9eef02e72a3e70202d3d1f591fc0dd542f93f642021f82102016f682920d9723c61b27f562eb530c926c00106004798b6471e8c52c60ee02057ae"); + let addr = Address::from_script(Testnet, &script); + + assert_eq!(&addr.to_base58check(), "2N3zXjbwdTcPsJiy8sUK9FhWJhqQCxA8Jjr"); + assert_eq!(FromBase58::from_base58check("2N3zXjbwdTcPsJiy8sUK9FhWJhqQCxA8Jjr"), Ok(addr)); + } + #[test] fn test_key_derivation() { // testnet compressed