hal_elements/
address.rs

1use bitcoin::{secp256k1, PublicKey};
2use elements::{Address, Script, PubkeyHash, ScriptHash, WPubkeyHash, WScriptHash};
3use serde::{Deserialize, Serialize};
4
5use ::Network;
6
7#[derive(Clone, PartialEq, Eq, Debug, Deserialize, Serialize)]
8pub struct AddressInfo {
9	pub network: Network,
10	#[serde(rename = "type")]
11	pub type_: Option<String>,
12	pub script_pub_key: ::hal::tx::OutputScriptInfo,
13	#[serde(skip_serializing_if = "Option::is_none")]
14	pub witness_program_version: Option<usize>,
15	#[serde(skip_serializing_if = "Option::is_none")]
16	pub pubkey_hash: Option<PubkeyHash>,
17	#[serde(skip_serializing_if = "Option::is_none")]
18	pub script_hash: Option<ScriptHash>,
19	#[serde(skip_serializing_if = "Option::is_none")]
20	pub witness_pubkey_hash: Option<WPubkeyHash>,
21	#[serde(skip_serializing_if = "Option::is_none")]
22	pub witness_script_hash: Option<WScriptHash>,
23	#[serde(skip_serializing_if = "Option::is_none")]
24	pub blinding_pubkey: Option<secp256k1::PublicKey>,
25	#[serde(skip_serializing_if = "Option::is_none")]
26	pub unconfidential: Option<Address>,
27}
28
29#[derive(Clone, PartialEq, Eq, Debug, Default, Deserialize, Serialize)]
30pub struct Addresses {
31	#[serde(skip_serializing_if = "Option::is_none")]
32	pub p2pkh: Option<Address>,
33	#[serde(skip_serializing_if = "Option::is_none")]
34	pub p2wpkh: Option<Address>,
35	#[serde(skip_serializing_if = "Option::is_none")]
36	pub p2shwpkh: Option<Address>,
37	#[serde(skip_serializing_if = "Option::is_none")]
38	pub p2sh: Option<Address>,
39	#[serde(skip_serializing_if = "Option::is_none")]
40	pub p2wsh: Option<Address>,
41	#[serde(skip_serializing_if = "Option::is_none")]
42	pub p2shwsh: Option<Address>,
43}
44
45impl Addresses {
46	pub fn from_pubkey(pubkey: &PublicKey, blinder: Option<secp256k1::PublicKey>, network: Network) -> Addresses {
47		let params = network.address_params();
48		Addresses {
49			p2pkh: Some(Address::p2pkh(pubkey, blinder, params)),
50			p2wpkh: Some(Address::p2wpkh(pubkey, blinder, params)),
51			p2shwpkh: Some(Address::p2shwpkh(pubkey, blinder, params)),
52			..Default::default()
53		}
54	}
55
56	pub fn from_script(script: &Script, blinder: Option<secp256k1::PublicKey>, network: Network) -> Addresses {
57		let params = network.address_params();
58		Addresses {
59			p2sh: Some(Address::p2sh(&script, blinder, params)),
60			p2wsh: Some(Address::p2wsh(&script, blinder, params)),
61			p2shwsh: Some(Address::p2shwsh(&script, blinder, params)),
62			..Default::default()
63		}
64	}
65}