1
0
mirror of https://github.com/romanz/electrs.git synced 2024-11-19 01:43:29 +01:00

Bump 'bitcoin' dependency to 0.32.0

This commit is contained in:
Roman Zeyde 2024-04-26 17:34:50 +03:00
parent 74b868c6e3
commit d30d826870
6 changed files with 102 additions and 50 deletions

96
Cargo.lock generated
View File

@ -17,6 +17,12 @@ version = "1.0.80"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1" checksum = "5ad32ce52e4161730f7098c077cd2ed6229b5804ccf99e5366be1ab72a98b4e1"
[[package]]
name = "arrayvec"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
[[package]] [[package]]
name = "ascii" name = "ascii"
version = "1.1.0" version = "1.1.0"
@ -29,6 +35,16 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "base58ck"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2c8d66485a3a2ea485c1913c4572ce0256067a5377ac8c75c4960e1cda98605f"
dependencies = [
"bitcoin-internals",
"bitcoin_hashes",
]
[[package]] [[package]]
name = "base64" name = "base64"
version = "0.13.1" version = "0.13.1"
@ -37,9 +53,9 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]] [[package]]
name = "bech32" name = "bech32"
version = "0.10.0-beta" version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "98f7eed2b2781a6f0b5c903471d48e15f56fb4e1165df8a9a2337fd1a59d45ea" checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d"
[[package]] [[package]]
name = "bindgen" name = "bindgen"
@ -63,12 +79,15 @@ dependencies = [
[[package]] [[package]]
name = "bitcoin" name = "bitcoin"
version = "0.31.2" version = "0.32.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6c85783c2fe40083ea54a33aa2f0ba58831d90fcd190f5bdc47e74e84d2a96ae" checksum = "7170e7750a20974246f17ece04311b4205a6155f1db564c5b224af817663c3ea"
dependencies = [ dependencies = [
"base58ck",
"bech32", "bech32",
"bitcoin-internals", "bitcoin-internals",
"bitcoin-io",
"bitcoin-units",
"bitcoin_hashes", "bitcoin_hashes",
"hex-conservative", "hex-conservative",
"hex_lit", "hex_lit",
@ -78,13 +97,19 @@ dependencies = [
[[package]] [[package]]
name = "bitcoin-internals" name = "bitcoin-internals"
version = "0.2.0" version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9425c3bf7089c983facbae04de54513cce73b41c7f9ff8c845b54e7bc64ebbfb" checksum = "30bdbe14aa07b06e6cfeffc529a1f099e5fbe249524f8125358604df99a4bed2"
dependencies = [ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "bitcoin-io"
version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "340e09e8399c7bd8912f495af6aa58bea0c9214773417ffaa8f6460f93aaee56"
[[package]] [[package]]
name = "bitcoin-test-data" name = "bitcoin-test-data"
version = "0.2.0" version = "0.2.0"
@ -92,21 +117,31 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c188654f9dce3bc6ce1bfa9c49777ad514bcad37e421b5f53e9d0ee10603f34" checksum = "0c188654f9dce3bc6ce1bfa9c49777ad514bcad37e421b5f53e9d0ee10603f34"
[[package]] [[package]]
name = "bitcoin_hashes" name = "bitcoin-units"
version = "0.13.0" version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1930a4dabfebb8d7d9992db18ebe3ae2876f0a305fab206fd168df931ede293b" checksum = "cb54da0b28892f3c52203a7191534033e051b6f4b52bc15480681b57b7e036f5"
dependencies = [ dependencies = [
"bitcoin-internals", "bitcoin-internals",
"serde",
]
[[package]]
name = "bitcoin_hashes"
version = "0.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bb18c03d0db0247e147a21a6faafd5a7eb851c743db062de72018b6b7e8e4d16"
dependencies = [
"bitcoin-io",
"hex-conservative", "hex-conservative",
"serde", "serde",
] ]
[[package]] [[package]]
name = "bitcoin_slices" name = "bitcoin_slices"
version = "0.7.0" version = "0.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4b221249ba4685e0f737f0df2c7bb656d527fdd8ede83ac066c4c8ce95898f42" checksum = "b8041a1be831c809ada090db2e3bd1469c65b72321bb2f31d7f56261eefc8321"
dependencies = [ dependencies = [
"bitcoin", "bitcoin",
"bitcoin_hashes", "bitcoin_hashes",
@ -115,9 +150,9 @@ dependencies = [
[[package]] [[package]]
name = "bitcoincore-rpc" name = "bitcoincore-rpc"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eb70725a621848c83b3809913d5314c0d20ca84877d99dd909504b564edab00" checksum = "aedd23ae0fd321affb4bbbc36126c6f49a32818dc6b979395d24da8c9d4e80ee"
dependencies = [ dependencies = [
"bitcoincore-rpc-json", "bitcoincore-rpc-json",
"jsonrpc", "jsonrpc",
@ -128,9 +163,9 @@ dependencies = [
[[package]] [[package]]
name = "bitcoincore-rpc-json" name = "bitcoincore-rpc-json"
version = "0.18.0" version = "0.19.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "856ffbee2e492c23bca715d72ea34aae80d58400f2bda26a82015d6bc2ec3662" checksum = "d8909583c5fab98508e80ef73e5592a651c954993dc6b7739963257d19f0e71a"
dependencies = [ dependencies = [
"bitcoin", "bitcoin",
"serde", "serde",
@ -486,9 +521,12 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]] [[package]]
name = "hex-conservative" name = "hex-conservative"
version = "0.1.1" version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "30ed443af458ccb6d81c1e7e661545f94d3176752fb1df2f543b902a1e0f51e2" checksum = "e1aa273bf451e37ed35ced41c71a5e2a4e29064afb104158f2514bcd71c2c986"
dependencies = [
"arrayvec",
]
[[package]] [[package]]
name = "hex_lit" name = "hex_lit"
@ -547,11 +585,12 @@ dependencies = [
[[package]] [[package]]
name = "jsonrpc" name = "jsonrpc"
version = "0.14.1" version = "0.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8128f36b47411cd3f044be8c1f5cc0c9e24d1d1bfdc45f0a57897b32513053f2" checksum = "3662a38d341d77efecb73caf01420cfa5aa63c0253fd7bc05289ef9f6616e1bf"
dependencies = [ dependencies = [
"base64", "base64",
"minreq",
"serde", "serde",
"serde_json", "serde_json",
] ]
@ -655,6 +694,17 @@ version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "minreq"
version = "2.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6fdef521c74c2884a4f3570bcdb6d2a77b3c533feb6b27ac2ae72673cc221c64"
dependencies = [
"log",
"serde",
"serde_json",
]
[[package]] [[package]]
name = "nom" name = "nom"
version = "7.1.3" version = "7.1.3"
@ -912,9 +962,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]] [[package]]
name = "secp256k1" name = "secp256k1"
version = "0.28.2" version = "0.29.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d24b59d129cdadea20aea4fb2352fa053712e5d713eee47d700cd4b2bc002f10" checksum = "0e0cc0f1cf93f4969faf3ea1c7d8a9faed25918d96affa959720823dfe86d4f3"
dependencies = [ dependencies = [
"bitcoin_hashes", "bitcoin_hashes",
"rand", "rand",
@ -924,9 +974,9 @@ dependencies = [
[[package]] [[package]]
name = "secp256k1-sys" name = "secp256k1-sys"
version = "0.9.2" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5d1746aae42c19d583c3c1a8c646bfad910498e2051c551a7f2e3c0c9fbb7eb" checksum = "1433bd67156263443f14d603720b082dd3121779323fce20cba2aa07b874bc1b"
dependencies = [ dependencies = [
"cc", "cc",
] ]

View File

@ -22,9 +22,9 @@ spec = "internal/config_specification.toml"
[dependencies] [dependencies]
anyhow = "1.0" anyhow = "1.0"
bitcoin = { version = "0.31.2", features = ["serde", "rand-std"] } bitcoin = { version = "0.32.0", features = ["serde", "rand-std"] }
bitcoin_slices = { version = "0.7", features = ["bitcoin", "sha2"] } bitcoin_slices = { version = "0.8", features = ["bitcoin", "sha2"] }
bitcoincore-rpc = { version = "0.18" } bitcoincore-rpc = { version = "0.19.0" }
configure_me = "0.4" configure_me = "0.4"
crossbeam-channel = "0.5" crossbeam-channel = "0.5"
dirs-next = "2.0" dirs-next = "2.0"

View File

@ -6,7 +6,7 @@ use bitcoincore_rpc::{json, jsonrpc, Auth, Client, RpcApi};
use crossbeam_channel::Receiver; use crossbeam_channel::Receiver;
use parking_lot::Mutex; use parking_lot::Mutex;
use serde::Serialize; use serde::Serialize;
use serde_json::{json, Value}; use serde_json::{json, value::RawValue, Value};
use std::fs::File; use std::fs::File;
use std::io::Read; use std::io::Read;
@ -309,13 +309,13 @@ where
T: Serialize, T: Serialize,
{ {
debug!("calling {} on {} items", name, items.len()); debug!("calling {} on {} items", name, items.len());
let args: Vec<_> = items let args: Vec<Box<RawValue>> = items
.iter() .iter()
.map(|item| vec![serde_json::value::to_raw_value(item).unwrap()]) .map(|item| jsonrpc::try_arg([item]).context("failed to serialize into JSON"))
.collect(); .collect::<Result<Vec<_>>>()?;
let reqs: Vec<_> = args let reqs: Vec<jsonrpc::Request> = args
.iter() .iter()
.map(|arg| client.build_request(name, arg)) .map(|arg| client.build_request(name, Some(arg)))
.collect(); .collect();
match client.send_batch(&reqs) { match client.send_batch(&reqs) {
Ok(values) => { Ok(values) => {

View File

@ -263,7 +263,7 @@ fn index_single_block(
fn visit_tx_out(&mut self, _vout: usize, tx_out: &bsl::TxOut) -> ControlFlow<()> { fn visit_tx_out(&mut self, _vout: usize, tx_out: &bsl::TxOut) -> ControlFlow<()> {
let script = bitcoin::Script::from_bytes(tx_out.script_pubkey()); let script = bitcoin::Script::from_bytes(tx_out.script_pubkey());
// skip indexing unspendable outputs // skip indexing unspendable outputs
if !script.is_provably_unspendable() { if !script.is_op_return() {
let row = ScriptHashRow::row(ScriptHash::new(script), self.height); let row = ScriptHashRow::row(ScriptHash::new(script), self.height);
self.batch.funding_rows.push(row.to_db_row()); self.batch.funding_rows.push(row.to_db_row());
} }

View File

@ -7,6 +7,7 @@ use bitcoin::{
Decodable, Decodable,
}, },
hashes::Hash, hashes::Hash,
io,
p2p::{ p2p::{
self, address, self, address,
message::{self, CommandString, NetworkMessage}, message::{self, CommandString, NetworkMessage},
@ -19,9 +20,8 @@ use bitcoin::{
use bitcoin_slices::{bsl, Parse}; use bitcoin_slices::{bsl, Parse};
use crossbeam_channel::{bounded, select, Receiver, Sender}; use crossbeam_channel::{bounded, select, Receiver, Sender};
use std::io::{self, ErrorKind, Write}; use std::io::Write;
use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream}; use std::net::{IpAddr, Ipv4Addr, SocketAddr, TcpStream};
use std::sync::Arc;
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH}; use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
use crate::types::SerBlock; use crate::types::SerBlock;
@ -141,10 +141,11 @@ impl Connection {
metrics: &Metrics, metrics: &Metrics,
magic: Magic, magic: Magic,
) -> Result<Self> { ) -> Result<Self> {
let conn = Arc::new( let recv_conn = TcpStream::connect(address)
TcpStream::connect(address) .with_context(|| format!("{} p2p failed to connect: {:?}", network, address))?;
.with_context(|| format!("{} p2p failed to connect: {:?}", network, address))?, let mut send_conn = recv_conn
); .try_clone()
.context("failed to clone connection")?;
let (tx_send, tx_recv) = bounded::<NetworkMessage>(1); let (tx_send, tx_recv) = bounded::<NetworkMessage>(1);
let (rx_send, rx_recv) = bounded::<RawNetworkMessage>(1); let (rx_send, rx_recv) = bounded::<RawNetworkMessage>(1);
@ -180,7 +181,6 @@ impl Connection {
default_duration_buckets(), default_duration_buckets(),
); );
let stream = Arc::clone(&conn);
let mut buffer = vec![]; let mut buffer = vec![];
crate::thread::spawn("p2p_send", move || loop { crate::thread::spawn("p2p_send", move || loop {
use std::net::Shutdown; use std::net::Shutdown;
@ -190,7 +190,7 @@ impl Connection {
// p2p_loop is closed, so tx_send is disconnected // p2p_loop is closed, so tx_send is disconnected
debug!("closing p2p_send thread: no more messages to send"); debug!("closing p2p_send thread: no more messages to send");
// close the stream reader (p2p_recv thread may block on it) // close the stream reader (p2p_recv thread may block on it)
if let Err(e) = stream.shutdown(Shutdown::Read) { if let Err(e) = send_conn.shutdown(Shutdown::Read) {
warn!("failed to shutdown p2p connection: {}", e) warn!("failed to shutdown p2p connection: {}", e)
} }
return Ok(()); return Ok(());
@ -203,16 +203,16 @@ impl Connection {
raw_msg raw_msg
.consensus_encode(&mut buffer) .consensus_encode(&mut buffer)
.expect("in-memory writers don't error"); .expect("in-memory writers don't error");
(&*stream) send_conn
.write_all(buffer.as_slice()) .write_all(buffer.as_slice())
.context("p2p failed to send") .context("p2p failed to send")
})?; })?;
}); });
let stream = Arc::clone(&conn); let mut stream_reader = std::io::BufReader::new(recv_conn);
crate::thread::spawn("p2p_recv", move || loop { crate::thread::spawn("p2p_recv", move || loop {
let start = Instant::now(); let start = Instant::now();
let raw_msg = RawNetworkMessage::consensus_decode(&mut &*stream); let raw_msg = RawNetworkMessage::consensus_decode(&mut stream_reader);
{ {
let duration = duration_to_seconds(start.elapsed()); let duration = duration_to_seconds(start.elapsed());
let label = format!( let label = format!(
@ -232,7 +232,7 @@ impl Connection {
} }
raw_msg raw_msg
} }
Err(encode::Error::Io(e)) if e.kind() == ErrorKind::UnexpectedEof => { Err(encode::Error::Io(e)) if e.kind() == io::ErrorKind::UnexpectedEof => {
debug!("closing p2p_recv thread: connection closed"); debug!("closing p2p_recv thread: connection closed");
return Ok(()); return Ok(());
} }
@ -390,7 +390,9 @@ enum ParsedNetworkMessage {
} }
impl Decodable for RawNetworkMessage { impl Decodable for RawNetworkMessage {
fn consensus_decode<D: io::Read + ?Sized>(d: &mut D) -> Result<Self, encode::Error> { fn consensus_decode<D: bitcoin::io::BufRead + ?Sized>(
d: &mut D,
) -> Result<Self, encode::Error> {
let magic = Decodable::consensus_decode(d)?; let magic = Decodable::consensus_decode(d)?;
let cmd = Decodable::consensus_decode(d)?; let cmd = Decodable::consensus_decode(d)?;

View File

@ -6,7 +6,7 @@ use bitcoin::blockdata::block::Header as BlockHeader;
use bitcoin::{ use bitcoin::{
consensus::encode::{deserialize, Decodable, Encodable}, consensus::encode::{deserialize, Decodable, Encodable},
hashes::{hash_newtype, sha256, Hash}, hashes::{hash_newtype, sha256, Hash},
OutPoint, Script, Txid, io, OutPoint, Script, Txid,
}; };
use bitcoin_slices::bsl; use bitcoin_slices::bsl;
@ -16,10 +16,10 @@ macro_rules! impl_consensus_encoding {
($thing:ident, $($field:ident),+) => ( ($thing:ident, $($field:ident),+) => (
impl Encodable for $thing { impl Encodable for $thing {
#[inline] #[inline]
fn consensus_encode<S: ::std::io::Write + ?Sized>( fn consensus_encode<S: io::Write + ?Sized>(
&self, &self,
s: &mut S, s: &mut S,
) -> Result<usize, std::io::Error> { ) -> Result<usize, io::Error> {
let mut len = 0; let mut len = 0;
$(len += self.$field.consensus_encode(s)?;)+ $(len += self.$field.consensus_encode(s)?;)+
Ok(len) Ok(len)
@ -28,7 +28,7 @@ macro_rules! impl_consensus_encoding {
impl Decodable for $thing { impl Decodable for $thing {
#[inline] #[inline]
fn consensus_decode<D: ::std::io::Read + ?Sized>( fn consensus_decode<D: io::BufRead + ?Sized>(
d: &mut D, d: &mut D,
) -> Result<$thing, bitcoin::consensus::encode::Error> { ) -> Result<$thing, bitcoin::consensus::encode::Error> {
Ok($thing { Ok($thing {