hal_simplicity/
address.rs

1use elements::bitcoin::{secp256k1, PublicKey};
2use elements::{Address, PubkeyHash, Script, ScriptHash, WPubkeyHash, WScriptHash};
3use serde::{Deserialize, Serialize};
4
5use crate::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(
47		pubkey: &PublicKey,
48		blinder: Option<secp256k1::PublicKey>,
49		network: Network,
50	) -> Addresses {
51		let params = network.address_params();
52		Addresses {
53			p2pkh: Some(Address::p2pkh(pubkey, blinder, params)),
54			p2wpkh: Some(Address::p2wpkh(pubkey, blinder, params)),
55			p2shwpkh: Some(Address::p2shwpkh(pubkey, blinder, params)),
56			..Default::default()
57		}
58	}
59
60	pub fn from_script(
61		script: &Script,
62		blinder: Option<secp256k1::PublicKey>,
63		network: Network,
64	) -> Addresses {
65		let params = network.address_params();
66		Addresses {
67			p2sh: Some(Address::p2sh(script, blinder, params)),
68			p2wsh: Some(Address::p2wsh(script, blinder, params)),
69			p2shwsh: Some(Address::p2shwsh(script, blinder, params)),
70			..Default::default()
71		}
72	}
73}