|
8 | 8 | use core::convert::TryFrom; |
9 | 9 | use core::fmt; |
10 | 10 |
|
| 11 | +use bitcoin::key::CompressedPublicKey; |
11 | 12 | use bitcoin::{Address, Network, ScriptBuf, Weight}; |
12 | 13 |
|
13 | 14 | use super::checksum::verify_checksum; |
@@ -132,14 +133,19 @@ impl<Pk: MiniscriptKey> Wsh<Pk> { |
132 | 133 |
|
133 | 134 | impl<Pk: MiniscriptKey + ToPublicKey> Wsh<Pk> { |
134 | 135 | /// Obtains the corresponding script pubkey for this descriptor. |
135 | | - pub fn script_pubkey(&self) -> ScriptBuf { self.inner_script().to_p2wsh() } |
| 136 | + pub fn script_pubkey(&self) -> ScriptBuf { |
| 137 | + self.inner_script() |
| 138 | + .to_p2wsh() |
| 139 | + .expect("TODO: Do we need to propagate this error") |
| 140 | + } |
136 | 141 |
|
137 | 142 | /// Obtains the corresponding script pubkey for this descriptor. |
138 | 143 | pub fn address(&self, network: Network) -> Address { |
139 | | - match self.inner { |
| 144 | + let res = match self.inner { |
140 | 145 | WshInner::SortedMulti(ref smv) => Address::p2wsh(&smv.encode(), network), |
141 | 146 | WshInner::Ms(ref ms) => Address::p2wsh(&ms.encode(), network), |
142 | | - } |
| 147 | + }; |
| 148 | + res.expect("TODO: Do we need to propagate this error") |
143 | 149 | } |
144 | 150 |
|
145 | 151 | /// Obtains the underlying miniscript for this descriptor. |
@@ -375,21 +381,19 @@ impl<Pk: MiniscriptKey> Wpkh<Pk> { |
375 | 381 | impl<Pk: MiniscriptKey + ToPublicKey> Wpkh<Pk> { |
376 | 382 | /// Obtains the corresponding script pubkey for this descriptor. |
377 | 383 | pub fn script_pubkey(&self) -> ScriptBuf { |
378 | | - let pk = self.pk.to_public_key(); |
379 | | - let compressed = bitcoin::key::CompressedPublicKey::try_from(pk) |
| 384 | + let pk = CompressedPublicKey::try_from(self.pk.to_public_key()) |
380 | 385 | .expect("wpkh descriptors have compressed keys"); |
| 386 | + let addr = Address::p2wpkh(pk, Network::Bitcoin); |
381 | 387 |
|
382 | | - let addr = Address::p2wpkh(&compressed, Network::Bitcoin); |
383 | 388 | addr.script_pubkey() |
384 | 389 | } |
385 | 390 |
|
386 | 391 | /// Obtains the corresponding script pubkey for this descriptor. |
387 | 392 | pub fn address(&self, network: Network) -> Address { |
388 | | - let pk = self.pk.to_public_key(); |
389 | | - let compressed = bitcoin::key::CompressedPublicKey::try_from(pk) |
390 | | - .expect("Rust Miniscript types don't allow uncompressed pks in segwit descriptors"); |
| 393 | + let pk = CompressedPublicKey::try_from(self.pk.to_public_key()) |
| 394 | + .expect("wpkh descriptors have compressed keys"); |
391 | 395 |
|
392 | | - Address::p2wpkh(&compressed, network) |
| 396 | + Address::p2wpkh(pk, network) |
393 | 397 | } |
394 | 398 |
|
395 | 399 | /// Obtains the underlying miniscript for this descriptor. |
|
0 commit comments