Skip to content

Commit 148f486

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 148f486

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

+805
-664
lines changed

Diff for: 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"

Diff for: 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();

Diff for: 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

Diff for: 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",

Diff for: 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();

Diff for: examples/psbt_sign_finalize.rs

+18-16
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,25 @@
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::{
12-
transaction, Address, Amount, Network, OutPoint, PrivateKey, Script, Sequence, Transaction,
6+
use miniscript::bitcoin_address::Address;
7+
use miniscript::bitcoin_primitives::consensus::encode::deserialize;
8+
use miniscript::bitcoin_primitives::hex::FromHex;
9+
use miniscript::bitcoin_primitives::sighash::SighashCache;
10+
//use miniscript::secp256k1; // https://github.com/rust-lang/rust/issues/121684
11+
use miniscript::bitcoin_primitives::{
12+
transaction, Amount, Network, OutPoint, PrivateKey, Script, Sequence, Transaction,
1313
TxIn, TxOut,
1414
};
1515
use miniscript::psbt::{PsbtExt, PsbtInputExt};
16+
use miniscript::psbt_v0::{self, Psbt};
1617
use miniscript::Descriptor;
1718

1819
fn main() {
1920
let secp256k1 = secp256k1::Secp256k1::new();
2021

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

5556
let spend_tx = Transaction {
5657
version: transaction::Version::TWO,
57-
lock_time: bitcoin::absolute::LockTime::from_consensus(5000),
58+
lock_time: bitcoin_primitives::absolute::LockTime::from_consensus(5000),
5859
input: vec![],
5960
output: vec![],
6061
};
@@ -100,14 +101,14 @@ fn main() {
100101

101102
// Generating signatures & witness data
102103

103-
let mut input = psbt::Input::default();
104+
let mut input = psbt_v0::Input::default();
104105
input
105106
.update_with_descriptor_unchecked(&bridge_descriptor)
106107
.unwrap();
107108

108109
input.witness_utxo = Some(witness_utxo.clone());
109110
psbt.inputs.push(input);
110-
psbt.outputs.push(psbt::Output::default());
111+
psbt.outputs.push(psbt_v0::Output::default());
111112

112113
let mut sighash_cache = SighashCache::new(&psbt.unsigned_tx);
113114

@@ -117,7 +118,7 @@ fn main() {
117118
.to_secp_msg();
118119

119120
// Fixme: Take a parameter
120-
let hash_ty = bitcoin::sighash::EcdsaSighashType::All;
121+
let hash_ty = bitcoin_primitives::sighash::EcdsaSighashType::All;
121122

122123
let sk1 = backup1_private.inner;
123124
let sk2 = backup2_private.inner;
@@ -132,9 +133,10 @@ fn main() {
132133
let pk2 = backup2_private.public_key(&secp256k1);
133134
assert!(secp256k1.verify_ecdsa(&msg, &sig2, &pk2.inner).is_ok());
134135

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

139141
println!("{:#?}", psbt);
140142
println!("{}", psbt);
@@ -143,7 +145,7 @@ fn main() {
143145
println!("{:#?}", psbt);
144146

145147
let tx = psbt.extract_tx().expect("failed to extract tx");
146-
println!("{}", bitcoin::consensus::encode::serialize_hex(&tx));
148+
println!("{}", bitcoin_primitives::consensus::encode::serialize_hex(&tx));
147149
}
148150

149151
// Find the Outpoint by spk

Diff for: 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)