Skip to content

Commit c925a91

Browse files
committed
upgrade bitcoin dep to 0.30.0
1 parent a04a842 commit c925a91

File tree

7 files changed

+50
-36
lines changed

7 files changed

+50
-36
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ path = "src/lib.rs"
1818

1919
[dependencies]
2020
log = "^0.4"
21-
bitcoin = { version = "^0.29", features = ["serde"] }
21+
bitcoin = { version = "^0.30", features = ["serde"] }
22+
bitcoin-private = "0.1.0"
2223
serde = { version = "^1.0", features = ["derive"] }
2324
serde_json = { version = "^1.0" }
2425

src/api.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@ use std::borrow::Borrow;
44
use std::convert::TryInto;
55

66
use bitcoin::consensus::encode::{deserialize, serialize};
7-
use bitcoin::{BlockHeader, Script, Transaction, Txid};
7+
use bitcoin::{block, Script, Transaction, Txid};
88

99
use batch::Batch;
1010
use types::*;
1111

1212
/// API calls exposed by an Electrum client
1313
pub trait ElectrumApi {
1414
/// Gets the block header for height `height`.
15-
fn block_header(&self, height: usize) -> Result<BlockHeader, Error> {
15+
fn block_header(&self, height: usize) -> Result<block::Header, Error> {
1616
Ok(deserialize(&self.block_header_raw(height)?)?)
1717
}
1818

@@ -51,7 +51,7 @@ pub trait ElectrumApi {
5151
/// Batch version of [`block_header`](#method.block_header).
5252
///
5353
/// Takes a list of `heights` of blocks and returns a list of headers.
54-
fn batch_block_header<I>(&self, heights: I) -> Result<Vec<BlockHeader>, Error>
54+
fn batch_block_header<I>(&self, heights: I) -> Result<Vec<block::Header>, Error>
5555
where
5656
I: IntoIterator + Clone,
5757
I::Item: Borrow<u32>,

src/batch.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
//!
33
//! This module contains definitions and helper functions used when making batch calls.
44
5-
use std::borrow::Borrow;
6-
7-
use bitcoin::hashes::hex::ToHex;
85
use bitcoin::{Script, Txid};
96

107
use types::{Call, Param, ToElectrumScriptHash};
@@ -54,7 +51,7 @@ impl Batch {
5451

5552
/// Add one `blockchain.transaction.get` request to the batch queue
5653
pub fn transaction_get(&mut self, tx_hash: &Txid) {
57-
let params = vec![Param::String(tx_hash.to_hex())];
54+
let params = vec![Param::String(format!("{:x}", tx_hash))];
5855
self.calls
5956
.push((String::from("blockchain.transaction.get"), params));
6057
}

src/config.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use crate::Error;
21
use std::time::Duration;
32

43
#[derive(Debug, Clone)]

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
//! ```
2121
2222
pub extern crate bitcoin;
23+
extern crate bitcoin_private;
2324
extern crate core;
2425
extern crate log;
2526
#[cfg(feature = "use-openssl")]

src/raw_client.rs

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ use std::time::Duration;
1616
use log::{debug, error, info, trace, warn};
1717

1818
use bitcoin::consensus::encode::deserialize;
19-
use bitcoin::hashes::hex::{FromHex, ToHex};
19+
use bitcoin::hashes::hex::FromHex;
2020
use bitcoin::{Script, Txid};
21+
use bitcoin_private::hex::exts::DisplayHex;
2122

2223
#[cfg(feature = "use-openssl")]
2324
use openssl::ssl::{SslConnector, SslMethod, SslStream, SslVerifyMode};
@@ -974,7 +975,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
974975
}
975976

976977
fn transaction_get_raw(&self, txid: &Txid) -> Result<Vec<u8>, Error> {
977-
let params = vec![Param::String(txid.to_hex())];
978+
let params = vec![Param::String(format!("{:x}", txid))];
978979
let req = Request::new_id(
979980
self.last_id.fetch_add(1, Ordering::SeqCst),
980981
"blockchain.transaction.get",
@@ -1023,7 +1024,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
10231024
}
10241025

10251026
fn transaction_broadcast_raw(&self, raw_tx: &[u8]) -> Result<Txid, Error> {
1026-
let params = vec![Param::String(raw_tx.to_hex())];
1027+
let params = vec![Param::String(raw_tx.to_lower_hex_string())];
10271028
let req = Request::new_id(
10281029
self.last_id.fetch_add(1, Ordering::SeqCst),
10291030
"blockchain.transaction.broadcast",
@@ -1035,7 +1036,7 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
10351036
}
10361037

10371038
fn transaction_get_merkle(&self, txid: &Txid, height: usize) -> Result<GetMerkleRes, Error> {
1038-
let params = vec![Param::String(txid.to_hex()), Param::Usize(height)];
1039+
let params = vec![Param::String(format!("{:x}", txid)), Param::Usize(height)];
10391040
let req = Request::new_id(
10401041
self.last_id.fetch_add(1, Ordering::SeqCst),
10411042
"blockchain.transaction.get_merkle",
@@ -1076,6 +1077,8 @@ impl<T: Read + Write> ElectrumApi for RawClient<T> {
10761077

10771078
#[cfg(test)]
10781079
mod test {
1080+
use std::str::FromStr;
1081+
10791082
use super::RawClient;
10801083
use api::ElectrumApi;
10811084

@@ -1119,7 +1122,7 @@ mod test {
11191122
let client = RawClient::new(get_test_server(), None).unwrap();
11201123

11211124
let resp = client.block_header(0).unwrap();
1122-
assert_eq!(resp.version, 0x01);
1125+
assert_eq!(resp.version, bitcoin::block::Version::ONE);
11231126
assert_eq!(resp.time, 1231006505);
11241127
assert_eq!(resp.nonce, 0x7c2bac1d);
11251128
}
@@ -1160,7 +1163,9 @@ mod test {
11601163

11611164
// Realistically nobody will ever spend from this address, so we can expect the balance to
11621165
// increase over time
1163-
let addr = bitcoin::Address::from_str("1CounterpartyXXXXXXXXXXXXXXXUWLpVr").unwrap();
1166+
let addr = bitcoin::Address::from_str("1CounterpartyXXXXXXXXXXXXXXXUWLpVr")
1167+
.unwrap()
1168+
.assume_checked();
11641169
let resp = client.script_get_balance(&addr.script_pubkey()).unwrap();
11651170
assert!(resp.confirmed >= 213091301265);
11661171
}
@@ -1169,38 +1174,40 @@ mod test {
11691174
fn test_script_get_history() {
11701175
use std::str::FromStr;
11711176

1172-
use bitcoin::hashes::hex::FromHex;
11731177
use bitcoin::Txid;
11741178

11751179
let client = RawClient::new(get_test_server(), None).unwrap();
11761180

11771181
// Mt.Gox hack address
11781182
let addr = bitcoin::Address::from_str("1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF").unwrap();
1179-
let resp = client.script_get_history(&addr.script_pubkey()).unwrap();
1183+
let resp = client
1184+
.script_get_history(&addr.payload.script_pubkey())
1185+
.unwrap();
11801186

11811187
assert!(resp.len() >= 328);
11821188
assert_eq!(
11831189
resp[0].tx_hash,
1184-
Txid::from_hex("e67a0550848b7932d7796aeea16ab0e48a5cfe81c4e8cca2c5b03e0416850114")
1190+
Txid::from_str("e67a0550848b7932d7796aeea16ab0e48a5cfe81c4e8cca2c5b03e0416850114")
11851191
.unwrap()
11861192
);
11871193
}
11881194

11891195
#[test]
11901196
fn test_script_list_unspent() {
1191-
use bitcoin::hashes::hex::FromHex;
11921197
use bitcoin::Txid;
11931198
use std::str::FromStr;
11941199

11951200
let client = RawClient::new(get_test_server(), None).unwrap();
11961201

11971202
// Mt.Gox hack address
11981203
let addr = bitcoin::Address::from_str("1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF").unwrap();
1199-
let resp = client.script_list_unspent(&addr.script_pubkey()).unwrap();
1204+
let resp = client
1205+
.script_list_unspent(&addr.payload.script_pubkey())
1206+
.unwrap();
12001207

12011208
assert!(resp.len() >= 329);
12021209
let txid = "e67a0550848b7932d7796aeea16ab0e48a5cfe81c4e8cca2c5b03e0416850114";
1203-
let txid = Txid::from_hex(txid).unwrap();
1210+
let txid = Txid::from_str(txid).unwrap();
12041211
let txs: Vec<_> = resp.iter().filter(|e| e.tx_hash == txid).collect();
12051212
assert_eq!(txs.len(), 1);
12061213
assert_eq!(txs[0].value, 7995600000000);
@@ -1217,9 +1224,12 @@ mod test {
12171224
// Mt.Gox hack address
12181225
let script_1 = bitcoin::Address::from_str("1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF")
12191226
.unwrap()
1227+
.payload
12201228
.script_pubkey();
12211229

1222-
let resp = client.batch_script_list_unspent(vec![&script_1]).unwrap();
1230+
let resp = client
1231+
.batch_script_list_unspent(vec![script_1.as_script()])
1232+
.unwrap();
12231233
assert_eq!(resp.len(), 1);
12241234
assert!(resp[0].len() >= 329);
12251235
}
@@ -1236,31 +1246,29 @@ mod test {
12361246

12371247
#[test]
12381248
fn test_transaction_get() {
1239-
use bitcoin::hashes::hex::FromHex;
12401249
use bitcoin::Txid;
12411250

12421251
let client = RawClient::new(get_test_server(), None).unwrap();
12431252

12441253
let resp = client
12451254
.transaction_get(
1246-
&Txid::from_hex("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
1255+
&Txid::from_str("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
12471256
.unwrap(),
12481257
)
12491258
.unwrap();
12501259
assert_eq!(resp.version, 1);
1251-
assert_eq!(resp.lock_time.to_u32(), 0);
1260+
assert_eq!(resp.lock_time.to_consensus_u32(), 0);
12521261
}
12531262

12541263
#[test]
12551264
fn test_transaction_get_raw() {
1256-
use bitcoin::hashes::hex::FromHex;
12571265
use bitcoin::Txid;
12581266

12591267
let client = RawClient::new(get_test_server(), None).unwrap();
12601268

12611269
let resp = client
12621270
.transaction_get_raw(
1263-
&Txid::from_hex("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
1271+
&Txid::from_str("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
12641272
.unwrap(),
12651273
)
12661274
.unwrap();
@@ -1288,14 +1296,13 @@ mod test {
12881296

12891297
#[test]
12901298
fn test_transaction_get_merkle() {
1291-
use bitcoin::hashes::hex::FromHex;
12921299
use bitcoin::Txid;
12931300

12941301
let client = RawClient::new(get_test_server(), None).unwrap();
12951302

12961303
let resp = client
12971304
.transaction_get_merkle(
1298-
&Txid::from_hex("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
1305+
&Txid::from_str("cc2ca076fd04c2aeed6d02151c447ced3d09be6fb4d4ef36cb5ed4e7a3260566")
12991306
.unwrap(),
13001307
630000,
13011308
)
@@ -1336,7 +1343,9 @@ mod test {
13361343
let addr = bitcoin::Address::from_str("1FeexV6bAHb8ybZjqQMjJrcCrHGW9sb6uF").unwrap();
13371344

13381345
// Just make sure that the call returns Ok(something)
1339-
client.script_subscribe(&addr.script_pubkey()).unwrap();
1346+
client
1347+
.script_subscribe(&addr.payload.script_pubkey())
1348+
.unwrap();
13401349
}
13411350

13421351
#[test]

src/types.rs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,11 @@ use std::sync::Arc;
99

1010
use bitcoin::blockdata::block;
1111
use bitcoin::consensus::encode::deserialize;
12-
use bitcoin::hashes::hex::{FromHex, ToHex};
12+
use bitcoin::hashes::hex::FromHex;
1313
use bitcoin::hashes::{sha256, Hash};
1414
use bitcoin::{Script, Txid};
1515

16+
use bitcoin_private::hex::exts::DisplayHex;
1617
use serde::{de, Deserialize, Serialize};
1718

1819
static JSONRPC_2_0: &str = "2.0";
@@ -86,6 +87,12 @@ impl From<[u8; 32]> for Hex32Bytes {
8687
}
8788
}
8889

90+
impl Hex32Bytes {
91+
pub(crate) fn to_hex(&self) -> String {
92+
self.0.to_lower_hex_string()
93+
}
94+
}
95+
8996
/// Format used by the Electrum server to identify an address. The reverse sha256 hash of the
9097
/// scriptPubKey. Documented [here](https://electrumx.readthedocs.io/en/latest/protocol-basics.html#script-hashes).
9198
pub type ScriptHash = Hex32Bytes;
@@ -102,7 +109,7 @@ pub trait ToElectrumScriptHash {
102109

103110
impl ToElectrumScriptHash for Script {
104111
fn to_electrum_scripthash(&self) -> ScriptHash {
105-
let mut result = sha256::Hash::hash(self.as_bytes()).into_inner();
112+
let mut result = sha256::Hash::hash(self.as_bytes()).to_byte_array();
106113
result.reverse();
107114

108115
result.into()
@@ -122,7 +129,7 @@ fn to_hex<S>(bytes: &[u8], serializer: S) -> std::result::Result<S::Ok, S::Error
122129
where
123130
S: serde::ser::Serializer,
124131
{
125-
serializer.serialize_str(&bytes.to_hex())
132+
serializer.serialize_str(&bytes.to_lower_hex_string())
126133
}
127134

128135
fn from_hex_array<'de, T, D>(deserializer: D) -> Result<Vec<T>, D::Error>
@@ -145,7 +152,7 @@ where
145152
Ok(answer)
146153
}
147154

148-
fn from_hex_header<'de, D>(deserializer: D) -> Result<block::BlockHeader, D::Error>
155+
fn from_hex_header<'de, D>(deserializer: D) -> Result<block::Header, D::Error>
149156
where
150157
D: de::Deserializer<'de>,
151158
{
@@ -208,7 +215,7 @@ pub struct GetHeadersRes {
208215
pub raw_headers: Vec<u8>,
209216
/// Array of block headers.
210217
#[serde(skip)]
211-
pub headers: Vec<block::BlockHeader>,
218+
pub headers: Vec<block::Header>,
212219
}
213220

214221
/// Response to a [`script_get_balance`](../client/struct.Client.html#method.script_get_balance) request.
@@ -241,7 +248,7 @@ pub struct HeaderNotification {
241248
pub height: usize,
242249
/// Newly added header.
243250
#[serde(rename = "hex", deserialize_with = "from_hex_header")]
244-
pub header: block::BlockHeader,
251+
pub header: block::Header,
245252
}
246253

247254
/// Notification of a new block header with the header encoded as raw bytes

0 commit comments

Comments
 (0)