Skip to content

Commit 96dce49

Browse files
committed
Depend on crate-smashing branch
Depend on the `crate-smashing` branch, which introduces the new `primitives`, `bip32`, and `psbt-v0` crates. The point of this patch is to try to show we have all the re-exports correct in `rust-bitcoin` after introducing the new crates. Apart from the manifest changes this patch changes a single line, BOOM!
1 parent 5d342eb commit 96dce49

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+803
-663
lines changed

Cargo.toml

+53-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "miniscript"
3-
version = "12.0.0"
3+
version = "13.0.0"
44
authors = ["Andrew Poelstra <[email protected]>, Sanket Kanjalkar <[email protected]>"]
55
license = "CC0-1.0"
66
homepage = "https://github.com/rust-bitcoin/rust-miniscript/"
@@ -12,25 +12,29 @@ edition = "2018"
1212

1313
[features]
1414
default = ["std"]
15-
std = ["bitcoin/std", "bitcoin/secp-recovery", "bech32/std"]
16-
no-std = ["bech32/alloc"]
15+
std = ["bip32/std", "bitcoin-address/std", "bitcoin-primitives/crypto-std", "bitcoin-primitives/bech32-std", "psbt-v0/std", "secp256k1/std", "secp256k1/recovery"]
16+
no-std = []
1717
compiler = []
1818
trace = []
1919

20-
serde = ["actual-serde", "bitcoin/serde"]
21-
rand = ["bitcoin/rand"]
22-
base64 = ["bitcoin/base64"]
20+
serde = ["actual-serde", "bip32/serde", "bitcoin-address/serde", "bitcoin-primitives/crypto-serde", "psbt-v0/serde", "secp256k1/serde"]
21+
rand = ["secp256k1/rand"]
22+
base64 = ["psbt-v0/base64"]
2323

2424
[dependencies]
25-
bech32 = { version = "0.11.0", default-features = false }
26-
bitcoin = { version = "0.32.0-rc1", default-features = false }
25+
bitcoin-address = { version = "0.1.0", default-features = false }
26+
bip32 = { version = "0.1.0", default-features = false }
27+
bitcoin-primitives = { version = "0.1.0", default-features = false, features = ["crypto", "bech32"] }
28+
psbt-v0 = { version = "0.1.0", default-features = false, features = [] }
29+
secp256k1 = { version = "0.29.0", default-features = false, features = ["hashes", "alloc"] }
2730

2831
# Do NOT use this as a feature! Use the `serde` feature instead.
2932
actual-serde = { package = "serde", version = "1.0.103", optional = true }
3033

3134
[dev-dependencies]
3235
serde_test = "1.0.147"
33-
bitcoin = { version = "0.32.0-rc1", features = ["base64"] }
36+
bitcoin-primitives = { version = "0.1.0", features = ["crypto-std"] }
37+
psbt-v0 = { version = "0.1.0", features = ["base64"] }
3438
secp256k1 = {version = "0.29.0", features = ["rand-std"]}
3539

3640
[[example]]
@@ -69,17 +73,52 @@ required-features = ["std", "base64", "compiler"]
6973
members = ["fuzz"]
7074
exclude = ["embedded"]
7175

76+
[patch.crates-io.base58ck]
77+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/base58"
78+
# git = "https://github.com/tcharding/rust-bitcoin"
79+
# branch = "crate-smashing"
80+
81+
[patch.crates-io.bip32]
82+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/bip32"
83+
# git = "https://github.com/tcharding/rust-bitcoin"
84+
# branch = "crate-smashing"
85+
7286
[patch.crates-io.bitcoin]
73-
git = "https://github.com/rust-bitcoin/rust-bitcoin"
87+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/bitcoin"
88+
# git = "https://github.com/tcharding/rust-bitcoin"
89+
# branch = "crate-smashing"
90+
91+
[patch.crates-io.bitcoin-address]
92+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/address"
93+
# git = "https://github.com/tcharding/rust-bitcoin"
94+
# branch = "crate-smashing"
7495

7596
[patch.crates-io.bitcoin_hashes]
76-
git = "https://github.com/rust-bitcoin/rust-bitcoin"
97+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/hashes"
98+
# git = "https://github.com/tcharding/rust-bitcoin"
99+
# branch = "crate-smashing"
77100

78101
[patch.crates-io.bitcoin-internals]
79-
git = "https://github.com/rust-bitcoin/rust-bitcoin"
102+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/internals"
103+
# git = "https://github.com/tcharding/rust-bitcoin"
104+
# branch = "crate-smashing"
80105

81106
[patch.crates-io.bitcoin-io]
82-
git = "https://github.com/rust-bitcoin/rust-bitcoin"
107+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/io"
108+
# git = "https://github.com/tcharding/rust-bitcoin"
109+
# branch = "crate-smashing"
110+
111+
[patch.crates-io.bitcoin-primitives]
112+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/primitives"
113+
# git = "https://github.com/tcharding/rust-bitcoin"
114+
# branch = "crate-smashing"
115+
116+
[patch.crates-io.psbt-v0]
117+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/psbt"
118+
# git = "https://github.com/tcharding/rust-bitcoin"
119+
# branch = "crate-smashing"
83120

84121
[patch.crates-io.bitcoin-units]
85-
git = "https://github.com/rust-bitcoin/rust-bitcoin"
122+
path = "/home/tobin/build/github.com/tcharding/rust-bitcoin/crate-smashing/units"
123+
# git = "https://github.com/tcharding/rust-bitcoin"
124+
# branch = "crate-smashing"

embedded/src/main.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ fn main() -> ! {
3434
)))";
3535
hprintln!("descriptor {}", descriptor).unwrap();
3636
let desc =
37-
miniscript::Descriptor::<miniscript::bitcoin::PublicKey>::from_str(descriptor).unwrap();
37+
miniscript::Descriptor::<miniscript::bitcoin_primitives::PublicKey>::from_str(descriptor).unwrap();
3838

3939
// Derive the P2SH address
4040
let p2sh_addr = desc
41-
.address(miniscript::bitcoin::Network::Bitcoin)
41+
.address(miniscript::bitcoin_primitives::Network::Bitcoin)
4242
.unwrap()
4343
.to_string();
4444
hprintln!("p2sh address {}", p2sh_addr).unwrap();

examples/big.rs

+11-9
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use std::collections::HashMap;
1313
use std::str::FromStr;
1414

15-
use bitcoin::{ecdsa, XOnlyPublicKey};
15+
use bitcoin_primitives::{ecdsa, XOnlyPublicKey};
1616
use miniscript::descriptor::Wsh;
1717
use miniscript::policy::{Concrete, Liftable};
1818
use miniscript::psbt::PsbtExt;
@@ -29,13 +29,13 @@ fn main() {
2929
let d = Descriptor::<DescriptorPublicKey>::from_str(&i).unwrap();
3030
use_descriptor(d.clone());
3131
use_descriptor(Descriptor::<DefiniteDescriptorKey>::from_str(&i).unwrap());
32-
use_descriptor(Descriptor::<bitcoin::PublicKey>::from_str(&i).unwrap());
32+
use_descriptor(Descriptor::<bitcoin_primitives::PublicKey>::from_str(&i).unwrap());
3333
use_descriptor(Descriptor::<String>::from_str(&i).unwrap());
3434

3535
let a = d
3636
.at_derivation_index(0)
3737
.unwrap()
38-
.address(bitcoin::Network::Bitcoin)
38+
.address(bitcoin_primitives::Network::Bitcoin)
3939
.unwrap();
4040
println!("{}", a);
4141

@@ -44,20 +44,20 @@ fn main() {
4444
use_descriptor(d);
4545
println!("{:?}", m);
4646

47-
let p = Concrete::<bitcoin::PublicKey>::from_str(&i).unwrap();
47+
let p = Concrete::<bitcoin_primitives::PublicKey>::from_str(&i).unwrap();
4848
let h = Wsh::new(p.compile().unwrap()).unwrap();
4949
println!("{}", h);
5050
println!("{:?}", h.lift());
5151
println!("{:?}", h.script_pubkey());
52-
println!("{:?}", h.address(bitcoin::Network::Bitcoin));
52+
println!("{:?}", h.address(bitcoin_primitives::Network::Bitcoin));
5353

54-
let psbt: bitcoin::Psbt = i.parse().unwrap();
54+
let psbt: psbt_v0::Psbt = i.parse().unwrap();
5555
let psbt = psbt.finalize(&secp).unwrap();
5656
let mut tx = psbt.extract_tx().unwrap();
5757
println!("{:?}", tx);
5858

59-
let d = miniscript::Descriptor::<bitcoin::PublicKey>::from_str(&i).unwrap();
60-
let sigs = HashMap::<bitcoin::PublicKey, ecdsa::Signature>::new();
59+
let d = miniscript::Descriptor::<bitcoin_primitives::PublicKey>::from_str(&i).unwrap();
60+
let sigs = HashMap::<bitcoin_primitives::PublicKey, ecdsa::Signature>::new();
6161
d.satisfy(&mut tx.input[0], &sigs).unwrap();
6262

6363
let pol = Concrete::<String>::from_str(&i).unwrap();
@@ -67,7 +67,9 @@ fn main() {
6767
let mut t = StrPkTranslator { pk_map };
6868
let real_desc = desc.translate_pk(&mut t).unwrap();
6969
println!("{}", real_desc);
70-
let addr = real_desc.address(bitcoin::Network::Bitcoin).unwrap();
70+
let addr = real_desc
71+
.address(bitcoin_primitives::Network::Bitcoin)
72+
.unwrap();
7173
println!("{}", addr);
7274
}
7375

examples/htlc.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@
55
66
use std::str::FromStr;
77

8-
use miniscript::bitcoin::Network;
8+
use miniscript::bitcoin_primitives::Network;
99
use miniscript::descriptor::Wsh;
1010
use miniscript::policy::{Concrete, Liftable};
1111

1212
fn main() {
1313
// HTLC policy with 10:1 odds for happy (co-operative) case compared to uncooperative case.
14-
let htlc_policy = Concrete::<bitcoin::PublicKey>::from_str(&format!("or(10@and(sha256({secret_hash}),pk({redeem_identity})),1@and(older({expiry}),pk({refund_identity})))",
14+
let htlc_policy = Concrete::<bitcoin_primitives::PublicKey>::from_str(&format!("or(10@and(sha256({secret_hash}),pk({redeem_identity})),1@and(older({expiry}),pk({refund_identity})))",
1515
secret_hash = "1111111111111111111111111111111111111111111111111111111111111111",
1616
redeem_identity = "022222222222222222222222222222222222222222222222222222222222222222",
1717
refund_identity = "020202020202020202020202020202020202020202020202020202020202020202",

examples/parse.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use miniscript::descriptor::DescriptorType;
88
use miniscript::Descriptor;
99

1010
fn main() {
11-
let desc = miniscript::Descriptor::<bitcoin::PublicKey>::from_str(
11+
let desc = miniscript::Descriptor::<bitcoin_primitives::PublicKey>::from_str(
1212
"wsh(c:pk_k(020202020202020202020202020202020202020202020202020202020202020202))",
1313
)
1414
.unwrap();
@@ -48,7 +48,7 @@ fn main() {
4848
);
4949

5050
// In a similar fashion we can parse a wrapped segwit script.
51-
let desc = miniscript::Descriptor::<bitcoin::PublicKey>::from_str(
51+
let desc = miniscript::Descriptor::<bitcoin_primitives::PublicKey>::from_str(
5252
"sh(wsh(c:pk_k(020202020202020202020202020202020202020202020202020202020202020202)))",
5353
)
5454
.unwrap();

examples/psbt_sign_finalize.rs

+16-15
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,24 @@
33
use std::collections::BTreeMap;
44
use std::str::FromStr;
55

6-
use miniscript::bitcoin::consensus::encode::deserialize;
7-
use miniscript::bitcoin::hashes::hex::FromHex;
8-
use miniscript::bitcoin::psbt::{self, Psbt};
9-
use miniscript::bitcoin::sighash::SighashCache;
10-
//use miniscript::bitcoin::secp256k1; // https://github.com/rust-lang/rust/issues/121684
11-
use miniscript::bitcoin::{
6+
use miniscript::bitcoin_primitives::consensus::encode::deserialize;
7+
use miniscript::bitcoin_primitives::hex::FromHex;
8+
use miniscript::bitcoin_primitives::sighash::SighashCache;
9+
//use miniscript::secp256k1; // https://github.com/rust-lang/rust/issues/121684
10+
use miniscript::bitcoin_primitives::{
1211
transaction, Address, Amount, Network, OutPoint, PrivateKey, Script, Sequence, Transaction,
1312
TxIn, TxOut,
1413
};
1514
use miniscript::psbt::{PsbtExt, PsbtInputExt};
15+
use miniscript::psbt_v0::{self, Psbt};
1616
use miniscript::Descriptor;
1717

1818
fn main() {
1919
let secp256k1 = secp256k1::Secp256k1::new();
2020

2121
let s = "wsh(t:or_c(pk(027a3565454fe1b749bccaef22aff72843a9c3efefd7b16ac54537a0c23f0ec0de),v:thresh(1,pkh(032d672a1a91cc39d154d366cd231983661b0785c7f27bc338447565844f4a6813),a:pkh(03417129311ed34c242c012cd0a3e0b9bca0065f742d0dfb63c78083ea6a02d4d9),a:pkh(025a687659658baeabdfc415164528065be7bcaade19342241941e556557f01e28))))#7hut9ukn";
2222
let bridge_descriptor = Descriptor::from_str(s).unwrap();
23-
//let bridge_descriptor = Descriptor::<bitcoin::PublicKey>::from_str(&s).expect("parse descriptor string");
23+
//let bridge_descriptor = Descriptor::<bitcoin_primitives::PublicKey>::from_str(&s).expect("parse descriptor string");
2424
assert!(bridge_descriptor.sanity_check().is_ok());
2525
println!("Bridge pubkey script: {}", bridge_descriptor.script_pubkey());
2626
println!("Bridge address: {}", bridge_descriptor.address(Network::Regtest).unwrap());
@@ -54,7 +54,7 @@ fn main() {
5454

5555
let spend_tx = Transaction {
5656
version: transaction::Version::TWO,
57-
lock_time: bitcoin::absolute::LockTime::from_consensus(5000),
57+
lock_time: bitcoin_primitives::absolute::LockTime::from_consensus(5000),
5858
input: vec![],
5959
output: vec![],
6060
};
@@ -100,14 +100,14 @@ fn main() {
100100

101101
// Generating signatures & witness data
102102

103-
let mut input = psbt::Input::default();
103+
let mut input = psbt_v0::Input::default();
104104
input
105105
.update_with_descriptor_unchecked(&bridge_descriptor)
106106
.unwrap();
107107

108108
input.witness_utxo = Some(witness_utxo.clone());
109109
psbt.inputs.push(input);
110-
psbt.outputs.push(psbt::Output::default());
110+
psbt.outputs.push(psbt_v0::Output::default());
111111

112112
let mut sighash_cache = SighashCache::new(&psbt.unsigned_tx);
113113

@@ -117,7 +117,7 @@ fn main() {
117117
.to_secp_msg();
118118

119119
// Fixme: Take a parameter
120-
let hash_ty = bitcoin::sighash::EcdsaSighashType::All;
120+
let hash_ty = bitcoin_primitives::sighash::EcdsaSighashType::All;
121121

122122
let sk1 = backup1_private.inner;
123123
let sk2 = backup2_private.inner;
@@ -132,9 +132,10 @@ fn main() {
132132
let pk2 = backup2_private.public_key(&secp256k1);
133133
assert!(secp256k1.verify_ecdsa(&msg, &sig2, &pk2.inner).is_ok());
134134

135-
psbt.inputs[0]
136-
.partial_sigs
137-
.insert(pk1, bitcoin::ecdsa::Signature { signature: sig1, sighash_type: hash_ty });
135+
psbt.inputs[0].partial_sigs.insert(
136+
pk1,
137+
bitcoin_primitives::ecdsa::Signature { signature: sig1, sighash_type: hash_ty },
138+
);
138139

139140
println!("{:#?}", psbt);
140141
println!("{}", psbt);
@@ -143,7 +144,7 @@ fn main() {
143144
println!("{:#?}", psbt);
144145

145146
let tx = psbt.extract_tx().expect("failed to extract tx");
146-
println!("{}", bitcoin::consensus::encode::serialize_hex(&tx));
147+
println!("{}", bitcoin_primitives::consensus::encode::serialize_hex(&tx));
147148
}
148149

149150
// Find the Outpoint by spk

examples/sign_multisig.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
use std::collections::HashMap;
66
use std::str::FromStr;
77

8-
use bitcoin::witness::Witness;
9-
use bitcoin::{absolute, ecdsa, transaction, Amount, Sequence};
8+
use bitcoin_primitives::witness::Witness;
9+
use bitcoin_primitives::{absolute, ecdsa, transaction, Amount, Sequence};
1010

1111
fn main() {
1212
let mut tx = spending_transaction();
@@ -15,15 +15,15 @@ fn main() {
1515

1616
// Descriptor for the output being spent.
1717
let s = format!("wsh(multi(2,{},{},{}))", pks[0], pks[1], pks[2],);
18-
let descriptor = miniscript::Descriptor::<bitcoin::PublicKey>::from_str(&s).unwrap();
18+
let descriptor = miniscript::Descriptor::<bitcoin_primitives::PublicKey>::from_str(&s).unwrap();
1919

2020
// Check weight for witness satisfaction cost ahead of time.
2121
// 106 (serialized witnessScript)
2222
// + 73*2 (signature length + signatures + sighash bytes) + 1 (dummy byte) = 253
2323
assert_eq!(descriptor.max_weight_to_satisfy().unwrap().to_wu(), 253);
2424

2525
// Sometimes it is necessary to have additional information to get the
26-
// `bitcoin::PublicKey` from the `MiniscriptKey` which can be supplied by
26+
// `bitcoin_primitives::PublicKey` from the `MiniscriptKey` which can be supplied by
2727
// the `to_pk_ctx` parameter. For example, when calculating the script
2828
// pubkey of a descriptor with xpubs, the secp context and child information
2929
// maybe required.
@@ -51,7 +51,7 @@ fn main() {
5151
// Attempt to satisfy at age 0, height 0.
5252
let original_txin = tx.input[0].clone();
5353

54-
let mut sigs = HashMap::<bitcoin::PublicKey, ecdsa::Signature>::new();
54+
let mut sigs = HashMap::<bitcoin_primitives::PublicKey, ecdsa::Signature>::new();
5555

5656
// Doesn't work with no signatures.
5757
assert!(descriptor.satisfy(&mut tx.input[0], &sigs).is_err());
@@ -76,35 +76,35 @@ fn main() {
7676
}
7777

7878
// Transaction which spends some output.
79-
fn spending_transaction() -> bitcoin::Transaction {
80-
bitcoin::Transaction {
79+
fn spending_transaction() -> bitcoin_primitives::Transaction {
80+
bitcoin_primitives::Transaction {
8181
version: transaction::Version::TWO,
8282
lock_time: absolute::LockTime::ZERO,
83-
input: vec![bitcoin::TxIn {
83+
input: vec![bitcoin_primitives::TxIn {
8484
previous_output: Default::default(),
85-
script_sig: bitcoin::ScriptBuf::new(),
85+
script_sig: bitcoin_primitives::ScriptBuf::new(),
8686
sequence: Sequence::MAX,
8787
witness: Witness::default(),
8888
}],
89-
output: vec![bitcoin::TxOut {
90-
script_pubkey: bitcoin::ScriptBuf::new(),
89+
output: vec![bitcoin_primitives::TxOut {
90+
script_pubkey: bitcoin_primitives::ScriptBuf::new(),
9191
value: Amount::from_sat(100_000_000),
9292
}],
9393
}
9494
}
9595

9696
#[rustfmt::skip]
97-
fn list_of_three_arbitrary_public_keys() -> Vec<bitcoin::PublicKey> {
97+
fn list_of_three_arbitrary_public_keys() -> Vec<bitcoin_primitives::PublicKey> {
9898
vec![
99-
bitcoin::PublicKey::from_slice(&[2; 33]).expect("key 1"),
100-
bitcoin::PublicKey::from_slice(&[
99+
bitcoin_primitives::PublicKey::from_slice(&[2; 33]).expect("key 1"),
100+
bitcoin_primitives::PublicKey::from_slice(&[
101101
0x02,
102102
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
103103
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
104104
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
105105
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
106106
]).expect("key 2"),
107-
bitcoin::PublicKey::from_slice(&[
107+
bitcoin_primitives::PublicKey::from_slice(&[
108108
0x03,
109109
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
110110
0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
@@ -126,6 +126,6 @@ fn random_signature_from_the_blockchain() -> ecdsa::Signature {
126126
531d75c136272f127a5dc14acc0722301cbddc222262934151f140da345af177",
127127
)
128128
.unwrap(),
129-
sighash_type: bitcoin::sighash::EcdsaSighashType::All,
129+
sighash_type: bitcoin_primitives::sighash::EcdsaSighashType::All,
130130
}
131131
}

0 commit comments

Comments
 (0)