Skip to content

Commit 79f3109

Browse files
committed
bump elements and related dep
1 parent b6ffda3 commit 79f3109

File tree

15 files changed

+109
-155
lines changed

15 files changed

+109
-155
lines changed

Cargo.toml

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ 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" }
25-
simplicity = { package = "simplicity-lang", version = "0.2.0", optional = true }
22+
bitcoin = "0.32.0"
23+
elements = "0.25.0"
24+
bitcoin-miniscript = { package = "miniscript", version = "12.0" }
25+
simplicity = { package = "simplicity-lang", version = "0.3.0", optional = true }
2626

2727
# Do NOT use this as a feature! Use the `serde` feature instead.
2828
actual-serde = { package = "serde", version = "1.0", optional = true }
@@ -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]

bitcoind-tests/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ edition = "2018"
1010
elements-miniscript = { path = "../" }
1111
elementsd = { version = "0.9.0" }
1212
actual-rand = { package = "rand", version = "0.8.4" }
13-
secp256k1 = { version = "0.28.1", features = ["rand-std"] }
13+
secp256k1 = { version = "0.29.0", features = ["rand-std"] }

bitcoind-tests/tests/test_arith.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ pub fn test_desc_satisfy(cl: &ElementsD, testdata: &TestData, desc: &str) -> Vec
125125
testdata.pubdata.genesis_hash,
126126
)
127127
.unwrap();
128-
let msg = secp256k1::Message::from_slice(&sighash_msg[..]).unwrap();
128+
let msg = secp256k1::Message::from_digest_slice(&sighash_msg[..]).unwrap();
129129
let mut aux_rand = [0u8; 32];
130130
rand::thread_rng().fill_bytes(&mut aux_rand);
131131
let sig = secp.sign_schnorr_with_aux_rand(&msg, &keypair, &aux_rand);

src/confidential/slip77.rs

+3-8
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

+8-8
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

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ 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::{self, verify_checksum};
@@ -100,6 +100,7 @@ impl_from_tree!(
100100
//
101101
// TODO: Confirm with Andrew about the descriptor type for dynafed
102102
// Assuming sh(wsh) for now.
103+
103104
let fed_desc = BtcDescriptor::<Pk>::from_tree(&ms_expr)?;
104105
let elem_desc = Descriptor::<Pk, CovenantExt<CovExtArgs>>::from_tree(&top.args[1])?;
105106
Ok(Pegin::new(fed_desc, elem_desc))
@@ -242,7 +243,7 @@ impl<Pk: MiniscriptKey> Pegin<Pk> {
242243
/// and sighash suffix. Includes the weight of the VarInts encoding the
243244
/// scriptSig and witness stack length.
244245
// FIXME: the ToPublicKey bound here should not needed. Fix after upstream
245-
pub fn max_satisfaction_weight(&self) -> Result<usize, Error>
246+
pub fn max_satisfaction_weight(&self) -> Result<Weight, Error>
246247
where
247248
Pk: ToPublicKey,
248249
{

src/descriptor/pegin/legacy_pegin.rs

+43-46
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use bitcoin::blockdata::script::PushBytes;
3131
use bitcoin::blockdata::{opcodes, script};
3232
use bitcoin::hashes::{hash160, ripemd160, sha256, Hash};
3333
use bitcoin::{self, hashes, ScriptBuf as BtcScript};
34+
use bitcoin_miniscript::miniscript::limits::MAX_PUBKEYS_PER_MULTISIG;
3435
use bitcoin_miniscript::TranslatePk as BtcTranslatePk;
3536
use elements::secp256k1_zkp;
3637

@@ -114,16 +115,15 @@ impl MiniscriptKey for LegacyPeginKey {
114115
/// Legacy Pegin Descriptor
115116
#[derive(Clone, Ord, PartialOrd, Eq, PartialEq)]
116117
pub struct LegacyPegin<Pk: MiniscriptKey> {
117-
/// The federation pks
118-
pub fed_pks: Vec<LegacyPeginKey>,
119118
/// The federation threshold
120-
pub fed_k: usize,
121-
/// The emergency pks
122-
pub emer_pks: Vec<LegacyPeginKey>,
119+
fed: bitcoin_miniscript::Threshold<LegacyPeginKey, MAX_PUBKEYS_PER_MULTISIG>,
120+
123121
/// The emergency threshold
124-
pub emer_k: usize,
122+
emer: bitcoin_miniscript::Threshold<LegacyPeginKey, MAX_PUBKEYS_PER_MULTISIG>,
123+
125124
/// csv timelock
126-
pub timelock: bitcoin::Sequence,
125+
timelock: bitcoin_miniscript::RelLockTime,
126+
127127
/// The elements descriptor required to redeem
128128
///
129129
/// TODO: Allow extension user descriptors when claiming pegins
@@ -136,30 +136,29 @@ pub struct LegacyPegin<Pk: MiniscriptKey> {
136136
impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
137137
/// Create a new LegacyPegin descriptor
138138
pub fn new(
139-
fed_pks: Vec<LegacyPeginKey>,
140-
fed_k: usize,
141-
emer_pks: Vec<LegacyPeginKey>,
142-
emer_k: usize,
143-
timelock: bitcoin::Sequence,
139+
fed: bitcoin_miniscript::Threshold<LegacyPeginKey, MAX_PUBKEYS_PER_MULTISIG>,
140+
emer: bitcoin_miniscript::Threshold<LegacyPeginKey, MAX_PUBKEYS_PER_MULTISIG>,
141+
timelock: bitcoin_miniscript::RelLockTime,
144142
desc: Descriptor<Pk, CovenantExt<CovExtArgs>>,
145143
) -> Self {
146-
let fed_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(fed_k, fed_pks.clone()))
144+
let fed_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(fed.clone()))
147145
.expect("Multi type check can't fail");
148146
let csv = BtcMiniscript::from_ast(BtcTerminal::Verify(Arc::new(
149-
BtcMiniscript::from_ast(BtcTerminal::Older(timelock)).unwrap(),
147+
BtcMiniscript::from_ast(BtcTerminal::Older(
148+
bitcoin_miniscript::RelLockTime::try_from(timelock).expect("TODO"),
149+
))
150+
.unwrap(),
150151
)))
151152
.unwrap();
152-
let emer_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(emer_k, emer_pks.clone()))
153+
let emer_ms = BtcMiniscript::from_ast(BtcTerminal::Multi(emer.clone()))
153154
.expect("Multi type check can't fail");
154155
let emer_ms =
155156
BtcMiniscript::from_ast(BtcTerminal::AndV(Arc::new(csv), Arc::new(emer_ms))).unwrap();
156157
let ms = BtcMiniscript::from_ast(BtcTerminal::OrD(Arc::new(fed_ms), Arc::new(emer_ms)))
157158
.expect("Type check");
158159
Self {
159-
fed_pks,
160-
fed_k,
161-
emer_pks,
162-
emer_k,
160+
fed,
161+
emer,
163162
timelock,
164163
desc,
165164
ms,
@@ -175,21 +174,19 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
175174
// Miniscript is a bunch of Arc's. So, cloning is not as bad.
176175
// Can we avoid this without NLL?
177176
let ms_clone = ms.clone();
178-
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)
177+
let (fed, right) = if let BtcTerminal::OrD(ref a, ref b) = ms_clone.node {
178+
if let (BtcTerminal::Multi(t), right) = (&a.node, &b.node) {
179+
(t.clone(), right)
181180
} else {
182181
unreachable!("Only valid pegin miniscripts");
183182
}
184183
} else {
185184
unreachable!("Only valid pegin miniscripts");
186185
};
187-
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-
{
186+
let (timelock, emer) = if let BtcTerminal::AndV(l, r) = right {
187+
if let (BtcTerminal::Verify(csv), BtcTerminal::Multi(t)) = (&l.node, &r.node) {
191188
if let BtcTerminal::Older(timelock) = csv.node {
192-
(timelock, emer_pks, *emer_k)
189+
(timelock, t.clone())
193190
} else {
194191
unreachable!("Only valid pegin miniscripts");
195192
}
@@ -200,10 +197,8 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
200197
unreachable!("Only valid pegin miniscripts");
201198
};
202199
Self {
203-
fed_pks: fed_pks.to_vec(),
204-
fed_k,
205-
emer_pks: emer_pks.to_vec(),
206-
emer_k,
200+
fed,
201+
emer,
207202
timelock,
208203
desc,
209204
ms,
@@ -222,18 +217,18 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
222217
// Hopefully, we never have to use this and dynafed is deployed
223218
let mut builder = script::Builder::new()
224219
.push_opcode(opcodes::all::OP_DEPTH)
225-
.push_int(self.fed_k as i64 + 1)
220+
.push_int(self.fed.k() as i64 + 1)
226221
.push_opcode(opcodes::all::OP_EQUAL)
227222
.push_opcode(opcodes::all::OP_IF)
228223
// manually serialize the left CMS branch, without the OP_CMS
229-
.push_int(self.fed_k as i64);
224+
.push_int(self.fed.k() as i64);
230225

231-
for key in &self.fed_pks {
226+
for key in self.fed.iter() {
232227
let tweaked_pk = tweak_key(key.as_untweaked(), secp, tweak.as_byte_array());
233228
builder = builder.push_key(&tweaked_pk);
234229
}
235230
let mut nearly_done = builder
236-
.push_int(self.fed_pks.len() as i64)
231+
.push_int(self.fed.n() as i64)
237232
.push_opcode(opcodes::all::OP_ELSE)
238233
.into_script()
239234
.to_bytes();
@@ -298,6 +293,8 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
298293
.map(|pk| LegacyPeginKey::Functionary(bitcoin::PublicKey::from_str(pk).unwrap()))
299294
.collect();
300295

296+
let fed = bitcoin_miniscript::Threshold::new(22, fed_pks).expect("statically defined");
297+
301298
let emer_pks = "
302299
03aab896d53a8e7d6433137bbba940f9c521e085dd07e60994579b64a6d992cf79,
303300
0291b7d0b1b692f8f524516ed950872e5da10fb1b808b5a526dedc6fed1cf29807,
@@ -307,12 +304,12 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
307304
.map(|pk| LegacyPeginKey::Functionary(bitcoin::PublicKey::from_str(pk).unwrap()))
308305
.collect();
309306

307+
let emer = bitcoin_miniscript::Threshold::new(2, emer_pks).expect("statically defined");
308+
310309
Self::new(
311-
fed_pks,
312-
11,
313-
emer_pks,
314-
2,
315-
bitcoin::Sequence::from_consensus(4032),
310+
fed,
311+
emer,
312+
bitcoin_miniscript::RelLockTime::from_consensus(4032).expect("statically defined"),
316313
user_desc,
317314
)
318315
}
@@ -473,28 +470,28 @@ impl<Pk: MiniscriptKey> LegacyPegin<Pk> {
473470
let tweak = hashes::sha256::Hash::hash(&tweak_vec);
474471
let unsigned_script_sig = self.bitcoin_unsigned_script_sig(secp);
475472
let mut sigs = vec![];
476-
for key in &self.fed_pks {
473+
for key in self.fed.iter() {
477474
let tweaked_pk = tweak_key(key.as_untweaked(), secp, tweak.as_byte_array());
478475
if let Some(sig) = satisfier.lookup_ecdsa_sig(&tweaked_pk) {
479476
sigs.push(sig.to_vec());
480477
}
481478
}
482479
sigs.sort_by_key(|a| a.len());
483-
if sigs.len() >= self.fed_k {
480+
if sigs.len() >= self.fed.k() {
484481
// Prefer using federation keys over emergency paths
485-
let mut sigs: Vec<Vec<u8>> = sigs.into_iter().take(self.fed_k).collect();
482+
let mut sigs: Vec<Vec<u8>> = sigs.into_iter().take(self.fed.k()).collect();
486483
sigs.push(vec![0]); // CMS extra value
487484
Ok((sigs, unsigned_script_sig))
488485
} else {
489486
let mut emer_sigs = vec![];
490-
for emer_key in &self.emer_pks {
487+
for emer_key in self.emer.iter() {
491488
if let Some(sig) = satisfier.lookup_ecdsa_sig(emer_key.as_untweaked()) {
492489
emer_sigs.push(sig.to_vec());
493490
}
494491
}
495492
emer_sigs.sort_by_key(|a| a.len());
496-
if emer_sigs.len() >= self.emer_k {
497-
let mut sigs: Vec<Vec<u8>> = emer_sigs.into_iter().take(self.emer_k).collect();
493+
if emer_sigs.len() >= self.emer.k() {
494+
let mut sigs: Vec<Vec<u8>> = emer_sigs.into_iter().take(self.emer.k()).collect();
498495
sigs.push(vec![0]); // CMS extra value
499496
Ok((sigs, unsigned_script_sig))
500497
} else {

src/descriptor/tr.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -553,9 +553,9 @@ impl<'a, Pk: ToPublicKey, Ext: ParseableExt> TapLeafScript<'a, Pk, Ext> {
553553
TapLeafScript::Simplicity(sim) => {
554554
let satisfier = crate::simplicity::SatisfierWrapper::new(satisfier);
555555
let program = sim.satisfy(&satisfier).map_err(|_| Error::CouldNotSatisfy)?;
556-
let program_and_witness_bytes = program.encode_to_vec();
557-
Ok(vec![program_and_witness_bytes])
558-
},
556+
let (program_bytes, witness_bytes) = program.encode_to_vec();
557+
Ok(vec![program_bytes, witness_bytes])
558+
}
559559
}
560560
}
561561
}

0 commit comments

Comments
 (0)