Skip to content

Commit 589caec

Browse files
committed
bump elements and related dep
1 parent f77fa62 commit 589caec

File tree

11 files changed

+81
-64
lines changed

11 files changed

+81
-64
lines changed

Cargo.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ rand = ["bitcoin/rand"]
1919
base64 = ["bitcoin/base64", "elements/base64"]
2020

2121
[dependencies]
22-
bitcoin = "0.31.0"
23-
elements = "0.24.0"
24-
bitcoin-miniscript = { package = "miniscript", version = "11.0" }
22+
bitcoin = "0.32.0"
23+
elements = "0.25.0"
24+
bitcoin-miniscript = { package = "miniscript", version = "12.0" }
2525
simplicity = { package = "simplicity-lang", version = "0.2.0", optional = true }
2626

2727
# Do NOT use this as a feature! Use the `serde` feature instead.
@@ -31,8 +31,8 @@ actual-serde = { package = "serde", version = "1.0", optional = true }
3131
serde_json = "1.0"
3232
actual-rand = { package = "rand", version = "0.8.4"}
3333
serde_test = "1.0.147"
34-
bitcoin = { version = "0.31.0", features = ["base64"] }
35-
secp256k1 = {version = "0.28.0", features = ["rand-std"]}
34+
bitcoin = { version = "0.32.0", features = ["base64"] }
35+
secp256k1 = { version = "0.29.0", features = ["rand-std"] }
3636
actual-base64 = { package = "base64", version = "0.13.0" }
3737

3838
[lints.rust]

src/confidential/slip77.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,10 @@ impl MasterBlindingKey {
9292
}
9393

9494
impl hex::FromHex for MasterBlindingKey {
95-
type Err = hex::HexToArrayError;
95+
type Error = hex::HexToArrayError;
9696

97-
fn from_byte_iter<I>(iter: I) -> Result<Self, Self::Err>
98-
where
99-
I: Iterator<Item = Result<u8, hex::HexToBytesError>>
100-
+ ExactSizeIterator
101-
+ DoubleEndedIterator,
102-
{
103-
Ok(MasterBlindingKey(<[u8; 32]>::from_byte_iter(iter)?))
97+
fn from_hex(s: &str) -> Result<Self, Self::Error> {
98+
Ok(MasterBlindingKey(<[u8; 32]>::from_hex(s)?))
10499
}
105100
}
106101

src/descriptor/key.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1286,23 +1286,23 @@ mod test {
12861286
assert_eq!(public_key.master_fingerprint().to_string(), "abcdef00");
12871287
assert_eq!(
12881288
public_key.full_derivation_path().unwrap().to_string(),
1289-
"m/0'/1'/2"
1289+
"0'/1'/2"
12901290
);
12911291
assert!(!public_key.has_wildcard());
12921292

12931293
let public_key = DescriptorPublicKey::from_str("[abcdef00/0'/1']tpubDBrgjcxBxnXyL575sHdkpKohWu5qHKoQ7TJXKNrYznh5fVEGBv89hA8ENW7A8MFVpFUSvgLqc4Nj1WZcpePX6rrxviVtPowvMuGF5rdT2Vi/*").unwrap();
12941294
assert_eq!(public_key.master_fingerprint().to_string(), "abcdef00");
12951295
assert_eq!(
12961296
public_key.full_derivation_path().unwrap().to_string(),
1297-
"m/0'/1'"
1297+
"0'/1'"
12981298
);
12991299
assert!(public_key.has_wildcard());
13001300

13011301
let public_key = DescriptorPublicKey::from_str("[abcdef00/0'/1']tpubDBrgjcxBxnXyL575sHdkpKohWu5qHKoQ7TJXKNrYznh5fVEGBv89hA8ENW7A8MFVpFUSvgLqc4Nj1WZcpePX6rrxviVtPowvMuGF5rdT2Vi/*h").unwrap();
13021302
assert_eq!(public_key.master_fingerprint().to_string(), "abcdef00");
13031303
assert_eq!(
13041304
public_key.full_derivation_path().unwrap().to_string(),
1305-
"m/0'/1'"
1305+
"0'/1'"
13061306
);
13071307
assert!(public_key.has_wildcard());
13081308
}
@@ -1317,7 +1317,7 @@ mod test {
13171317
assert_eq!(public_key.master_fingerprint().to_string(), "2cbe2a6d");
13181318
assert_eq!(
13191319
public_key.full_derivation_path().unwrap().to_string(),
1320-
"m/0'/1'/2"
1320+
"0'/1'/2"
13211321
);
13221322
assert!(!public_key.has_wildcard());
13231323

@@ -1327,7 +1327,7 @@ mod test {
13271327
assert_eq!(public_key.master_fingerprint().to_string(), "2cbe2a6d");
13281328
assert_eq!(
13291329
public_key.full_derivation_path().unwrap().to_string(),
1330-
"m/0'/1'/2'"
1330+
"0'/1'/2'"
13311331
);
13321332

13331333
let secret_key = DescriptorSecretKey::from_str("tprv8ZgxMBicQKsPcwcD4gSnMti126ZiETsuX7qwrtMypr6FBwAP65puFn4v6c3jrN9VwtMRMph6nyT63NrfUL4C3nBzPcduzVSuHD7zbX2JKVc/0/1/2").unwrap();
@@ -1336,7 +1336,7 @@ mod test {
13361336
assert_eq!(public_key.master_fingerprint().to_string(), "2cbe2a6d");
13371337
assert_eq!(
13381338
public_key.full_derivation_path().unwrap().to_string(),
1339-
"m/0/1/2"
1339+
"0/1/2"
13401340
);
13411341

13421342
let secret_key = DescriptorSecretKey::from_str("[aabbccdd]tprv8ZgxMBicQKsPcwcD4gSnMti126ZiETsuX7qwrtMypr6FBwAP65puFn4v6c3jrN9VwtMRMph6nyT63NrfUL4C3nBzPcduzVSuHD7zbX2JKVc/0/1/2").unwrap();
@@ -1345,7 +1345,7 @@ mod test {
13451345
assert_eq!(public_key.master_fingerprint().to_string(), "aabbccdd");
13461346
assert_eq!(
13471347
public_key.full_derivation_path().unwrap().to_string(),
1348-
"m/0/1/2"
1348+
"0/1/2"
13491349
);
13501350

13511351
let secret_key = DescriptorSecretKey::from_str("[aabbccdd/90']tprv8ZgxMBicQKsPcwcD4gSnMti126ZiETsuX7qwrtMypr6FBwAP65puFn4v6c3jrN9VwtMRMph6nyT63NrfUL4C3nBzPcduzVSuHD7zbX2JKVc/0'/1'/2").unwrap();
@@ -1354,7 +1354,7 @@ mod test {
13541354
assert_eq!(public_key.master_fingerprint().to_string(), "aabbccdd");
13551355
assert_eq!(
13561356
public_key.full_derivation_path().unwrap().to_string(),
1357-
"m/90'/0'/1'/2"
1357+
"90'/0'/1'/2"
13581358
);
13591359
}
13601360

src/descriptor/pegin/dynafed_pegin.rs

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,16 @@ use std::convert::TryFrom;
2424
use std::fmt;
2525

2626
use bitcoin::blockdata::script::{self, PushBytes};
27-
use bitcoin::{self, ScriptBuf as BtcScript};
27+
use bitcoin::{self, ScriptBuf as BtcScript, Weight};
2828
use elements::secp256k1_zkp;
2929

3030
use crate::descriptor::checksum::{desc_checksum, verify_checksum};
3131
use crate::expression::{self, FromTree};
3232
use crate::extensions::{CovExtArgs, CovenantExt};
3333
use crate::policy::{semantic, Liftable};
3434
use crate::{
35-
tweak_key, BtcDescriptor, BtcError, BtcFromTree, BtcLiftable, BtcPolicy, BtcSatisfier, BtcTree,
36-
Descriptor, Error, MiniscriptKey, ToPublicKey,
35+
tweak_key, BtcDescriptor, BtcError, BtcLiftable, BtcPolicy, BtcSatisfier, Descriptor, Error,
36+
MiniscriptKey, ToPublicKey,
3737
};
3838

3939
/// New Pegin Descriptor with Miniscript support
@@ -94,14 +94,17 @@ impl_from_tree!(
9494
if top.name == "pegin" && top.args.len() == 2 {
9595
// a roundtrip hack to use FromTree from bitcoin::Miniscript from
9696
// expression::Tree in elements.
97-
let ms_str = top.args[0].to_string();
98-
let ms_expr = BtcTree::from_str(&ms_str)?;
97+
// let ms_str = top.args[0].to_string();
98+
// let ms_expr = BtcTree::from_str(&ms_str)?;
9999
//
100100
// TODO: Confirm with Andrew about the descriptor type for dynafed
101101
// Assuming sh(wsh) for now.
102-
let fed_desc = BtcDescriptor::<Pk>::from_tree(&ms_expr)?;
103-
let elem_desc = Descriptor::<Pk, CovenantExt<CovExtArgs>>::from_tree(&top.args[1])?;
104-
Ok(Pegin::new(fed_desc, elem_desc))
102+
// let fed_desc = crate::BtcDescriptor::<Pk>::from_tree(&ms_expr)?;
103+
104+
// let fed_desc = BtcDescriptor::<Pk>::from_tree(&ms_expr)?;
105+
// let elem_desc = Descriptor::<Pk, CovenantExt<CovExtArgs>>::from_tree(&top.args[1])?;
106+
// Ok(Pegin::new(fed_desc, elem_desc))
107+
todo!()
105108
} else {
106109
Err(Error::Unexpected(format!(
107110
"{}({} args) while parsing legacy_pegin descriptor",
@@ -241,7 +244,7 @@ impl<Pk: MiniscriptKey> Pegin<Pk> {
241244
/// and sighash suffix. Includes the weight of the VarInts encoding the
242245
/// scriptSig and witness stack length.
243246
// FIXME: the ToPublicKey bound here should not needed. Fix after upstream
244-
pub fn max_satisfaction_weight(&self) -> Result<usize, Error>
247+
pub fn max_satisfaction_weight(&self) -> Result<Weight, Error>
245248
where
246249
Pk: ToPublicKey,
247250
{

src/descriptor/pegin/legacy_pegin.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,21 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
143143
timelock: bitcoin::Sequence,
144144
desc: Descriptor<Pk, CovenantExt<CovExtArgs>>,
145145
) -> Self {
146-
let fed_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(fed_k, fed_pks.clone()))
147-
.expect("Multi type check can't fail");
146+
let fed_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(
147+
bitcoin_miniscript::Threshold::new(fed_k, fed_pks.clone()).expect("TODO"),
148+
))
149+
.expect("Multi type check can't fail");
148150
let csv = BtcMiniscript::from_ast(BtcTerminal::Verify(Arc::new(
149-
BtcMiniscript::from_ast(BtcTerminal::Older(timelock)).unwrap(),
151+
BtcMiniscript::from_ast(BtcTerminal::Older(
152+
bitcoin_miniscript::RelLockTime::try_from(timelock).expect("TODO"),
153+
))
154+
.unwrap(),
150155
)))
151156
.unwrap();
152-
let emer_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(emer_k, emer_pks.clone()))
153-
.expect("Multi type check can't fail");
157+
let emer_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(
158+
bitcoin_miniscript::Threshold::new(emer_k, emer_pks.clone()).expect("TODO"),
159+
))
160+
.expect("Multi type check can't fail");
154161
let emer_ms =
155162
BtcMiniscript::from_ast(BtcTerminal::AndV(Arc::new(csv), Arc::new(emer_ms))).unwrap();
156163
let ms = BtcMiniscript::from_ast(BtcTerminal::OrD(Arc::new(fed_ms), Arc::new(emer_ms)))
@@ -176,20 +183,18 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
176183
// Can we avoid this without NLL?
177184
let ms_clone = ms.clone();
178185
let (fed_pks, fed_k, right) = if let BtcTerminal::OrD(ref a, ref b) = ms_clone.node {
179-
if let (BtcTerminal::Multi(fed_k, fed_pks), right) = (&a.node, &b.node) {
180-
(fed_pks, *fed_k, right)
186+
if let (BtcTerminal::Multi(t), right) = (&a.node, &b.node) {
187+
(t.data(), t.k(), right)
181188
} else {
182189
unreachable!("Only valid pegin miniscripts");
183190
}
184191
} else {
185192
unreachable!("Only valid pegin miniscripts");
186193
};
187194
let (timelock, emer_pks, emer_k) = if let BtcTerminal::AndV(l, r) = right {
188-
if let (BtcTerminal::Verify(csv), BtcTerminal::Multi(emer_k, emer_pks)) =
189-
(&l.node, &r.node)
190-
{
195+
if let (BtcTerminal::Verify(csv), BtcTerminal::Multi(t)) = (&l.node, &r.node) {
191196
if let BtcTerminal::Older(timelock) = csv.node {
192-
(timelock, emer_pks, *emer_k)
197+
(timelock, t.data(), t.k())
193198
} else {
194199
unreachable!("Only valid pegin miniscripts");
195200
}
@@ -204,7 +209,7 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
204209
fed_k,
205210
emer_pks: emer_pks.to_vec(),
206211
emer_k,
207-
timelock,
212+
timelock: timelock.into(),
208213
desc,
209214
ms,
210215
}

src/lib.rs

Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,20 +134,20 @@ pub mod miniscript;
134134
pub mod policy;
135135
pub mod psbt;
136136

137+
#[cfg(feature = "simplicity")]
138+
mod simplicity;
137139
#[cfg(test)]
138140
mod test_utils;
139141
mod util;
140-
#[cfg(feature = "simplicity")]
141-
mod simplicity;
142142

143143
use std::{cmp, error, fmt, str};
144144

145145
use elements::hashes::sha256;
146146
use elements::secp256k1_zkp::Secp256k1;
147147
use elements::{locktime, opcodes, script, secp256k1_zkp};
148148

149-
pub use crate::confidential::Descriptor as ConfidentialDescriptor;
150149
pub use crate::confidential::slip77;
150+
pub use crate::confidential::Descriptor as ConfidentialDescriptor;
151151
pub use crate::descriptor::{DefiniteDescriptorKey, Descriptor, DescriptorPublicKey};
152152
pub use crate::extensions::{CovenantExt, Extension, NoExt, TxEnv};
153153
pub use crate::interpreter::Interpreter;
@@ -291,7 +291,7 @@ pub enum Error {
291291
/// rust-bitcoin script error
292292
Script(script::Error),
293293
/// rust-bitcoin address error
294-
AddrError(bitcoin::address::Error),
294+
AddrError(bitcoin::address::ParseError),
295295
/// A `CHECKMULTISIG` opcode was preceded by a number > 20
296296
CmsTooManyKeys(u32),
297297
/// A tapscript multi_a cannot support more than MAX_BLOCK_WEIGHT/32 keys
@@ -319,7 +319,9 @@ pub enum Error {
319319
/// Parsed a miniscript but there were more script opcodes after it
320320
Trailing(String),
321321
/// Failed to parse a push as a public key
322-
BadPubkey(bitcoin::key::Error),
322+
BadPubkey(bitcoin::key::ParsePublicKeyError),
323+
/// Failed to parse a slice as public key
324+
BadPubkeySlice(bitcoin::key::FromSliceError),
323325
/// Could not satisfy a script (fragment) because of a missing hash preimage
324326
MissingHash(sha256::Hash),
325327
/// Could not satisfy a script (fragment) because of a missing signature
@@ -430,14 +432,21 @@ impl From<elements::secp256k1_zkp::UpstreamError> for Error {
430432
}
431433

432434
#[doc(hidden)]
433-
impl From<bitcoin::key::Error> for Error {
434-
fn from(e: bitcoin::key::Error) -> Error {
435+
impl From<bitcoin::key::ParsePublicKeyError> for Error {
436+
fn from(e: bitcoin::key::ParsePublicKeyError) -> Error {
435437
Error::BadPubkey(e)
436438
}
437439
}
438440

439-
impl From<bitcoin::address::Error> for Error {
440-
fn from(e: bitcoin::address::Error) -> Error {
441+
#[doc(hidden)]
442+
impl From<bitcoin::key::FromSliceError> for Error {
443+
fn from(e: bitcoin::key::FromSliceError) -> Error {
444+
Error::BadPubkeySlice(e)
445+
}
446+
}
447+
448+
impl From<bitcoin::address::ParseError> for Error {
449+
fn from(e: bitcoin::address::ParseError) -> Error {
441450
Error::AddrError(e)
442451
}
443452
}
@@ -486,6 +495,7 @@ impl fmt::Display for Error {
486495
),
487496
Error::CouldNotSatisfy => f.write_str("could not satisfy"),
488497
Error::BadPubkey(ref e) => fmt::Display::fmt(e, f),
498+
Error::BadPubkeySlice(ref e) => fmt::Display::fmt(e, f),
489499
Error::TypeCheck(ref e) => write!(f, "typecheck: {}", e),
490500
Error::BadDescriptor(ref e) => write!(f, "Invalid descriptor: {}", e),
491501
Error::Secp(ref e) => fmt::Display::fmt(e, f),
@@ -569,6 +579,7 @@ impl error::Error for Error {
569579
Script(_e) => None, // should be Some(e), but requires changes upstream
570580
AddrError(e) => Some(e),
571581
BadPubkey(e) => Some(e),
582+
BadPubkeySlice(e) => Some(e),
572583
Secp(e) => Some(e),
573584
#[cfg(feature = "compiler")]
574585
CompilerError(e) => Some(e),

src/miniscript/decode.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ impl ParseableKey for bitcoin::key::XOnlyPublicKey {
4848
#[derive(Debug, PartialEq, Eq)]
4949
pub enum KeyParseError {
5050
/// Bitcoin PublicKey parse error
51-
FullKeyParseError(bitcoin::key::Error),
51+
FullKeyParseError(bitcoin::key::FromSliceError),
5252
/// Xonly key parse Error
5353
XonlyKeyParseError(bitcoin::secp256k1::Error),
5454
}

src/miniscript/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1088,7 +1088,7 @@ mod tests {
10881088
);
10891089
assert_eq!(
10901090
ms.unwrap_err().to_string(),
1091-
"unexpected «pubkey hex should be 66 or 130 digits long, got: 64»",
1091+
"unexpected «pubkey string should be 66 or 130 digits long, got: 64»",
10921092
);
10931093
Tapscript::from_str_insane(
10941094
"pk(2788ee41e76f4f3af603da5bc8fa22997bc0344bb0f95666ba6aaff0242baa99)",

src/policy/mod.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,7 +229,7 @@ impl<Pk: MiniscriptKey> Liftable<Pk> for Concrete<Pk> {
229229
// Implement lifting from bitcoin policy to elements one
230230
impl<Pk: MiniscriptKey> Liftable<Pk> for BtcPolicy<Pk> {
231231
fn lift(&self) -> Result<Semantic<Pk>, Error> {
232-
match *self {
232+
match self {
233233
BtcPolicy::Unsatisfiable => Ok(Semantic::Unsatisfiable),
234234
BtcPolicy::Trivial => Ok(Semantic::Trivial),
235235
BtcPolicy::Key(ref pkh) => Ok(Semantic::Key(pkh.clone())),
@@ -241,10 +241,13 @@ impl<Pk: MiniscriptKey> Liftable<Pk> for BtcPolicy<Pk> {
241241
n.to_consensus_u32(),
242242
))),
243243
BtcPolicy::Older(n) => Ok(Semantic::Older(Sequence(n.to_consensus_u32()))),
244-
BtcPolicy::Threshold(k, ref subs) => {
245-
let new_subs: Result<Vec<Semantic<Pk>>, _> =
246-
subs.iter().map(|sub| Liftable::lift(sub)).collect();
247-
Ok(Semantic::Threshold(k, new_subs?))
244+
BtcPolicy::Thresh(t) => {
245+
let new_subs: Result<Vec<Semantic<Pk>>, _> = t
246+
.data()
247+
.iter()
248+
.map(|sub| Liftable::lift(sub.as_ref()))
249+
.collect();
250+
Ok(Semantic::Threshold(t.k(), new_subs?))
248251
}
249252
}
250253
}

src/psbt/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ pub enum InputError {
106106
/// Get the secp Errors directly
107107
SecpErr(elements::secp256k1_zkp::Error),
108108
/// Key errors
109-
KeyErr(bitcoin::key::Error),
109+
KeyErr(bitcoin::key::FromSliceError),
110110
/// Error doing an interpreter-check on a finalized psbt
111111
Interpreter(interpreter::Error),
112112
/// Redeem script does not match the p2sh hash
@@ -257,8 +257,8 @@ impl From<elements::secp256k1_zkp::Error> for InputError {
257257
}
258258

259259
#[doc(hidden)]
260-
impl From<bitcoin::key::Error> for InputError {
261-
fn from(e: bitcoin::key::Error) -> InputError {
260+
impl From<bitcoin::key::FromSliceError> for InputError {
261+
fn from(e: bitcoin::key::FromSliceError) -> InputError {
262262
InputError::KeyErr(e)
263263
}
264264
}
@@ -1664,7 +1664,7 @@ mod tests {
16641664
let (leaf_hashes, (key_fingerprint, deriv_path)) =
16651665
psbt_input.tap_key_origins.get(&key_0_1).unwrap();
16661666
assert_eq!(key_fingerprint, &fingerprint);
1667-
assert_eq!(&deriv_path.to_string(), "m/86'/0'/0'/0/1");
1667+
assert_eq!(&deriv_path.to_string(), "86'/0'/0'/0/1");
16681668
assert_eq!(leaf_hashes.len(), 2);
16691669
assert!(leaf_hashes.contains(&first_leaf_hash));
16701670
}
@@ -1678,7 +1678,7 @@ mod tests {
16781678
let (leaf_hashes, (key_fingerprint, deriv_path)) =
16791679
psbt_input.tap_key_origins.get(&key_1_0).unwrap();
16801680
assert_eq!(key_fingerprint, &fingerprint);
1681-
assert_eq!(&deriv_path.to_string(), "m/86'/0'/0'/1/0");
1681+
assert_eq!(&deriv_path.to_string(), "86'/0'/0'/1/0");
16821682
assert_eq!(leaf_hashes.len(), 1);
16831683
assert!(!leaf_hashes.contains(&first_leaf_hash));
16841684
}

0 commit comments

Comments
 (0)