Merge bitcoindevkit/bdk#756: Remove genesis_block lazy initialization
e6f2d029fa9708f98599c1bd4ef74d232b111c5a Remove genesis_block lazy initialization (Shobit Beltangdy) Pull request description: ### Description This commit contains a change to address issue #752 cargo test runs successfully. ### Notes to the reviewers Hi, newbie here learning Rust and BDK! I've removed the lazy_static block in this commit, and when learning about lazy_static also came across something called [once_cell](https://doc.rust-lang.org/std/cell/struct.OnceCell.html), [soon to be available in stdlib](https://github.com/rust-lang/rust/issues/74465). It's like lazy_static but faster and is not a macro. Shall I keep the lazy_static and create an issue to switch to once_cell in the future, or remove the lazy_static (as I've done) and create an issue anyway? #### All Submissions: * [x] I've signed all my commits * [x] I followed the [contribution guidelines](https://github.com/bitcoindevkit/bdk/blob/master/CONTRIBUTING.md) * [x] I ran `cargo fmt` and `cargo clippy` before committing ACKs for top commit: notmandatory: ACK e6f2d029fa9708f98599c1bd4ef74d232b111c5a Tree-SHA512: 528f5fdfb0d7d1f7a83869b7a0de1b25dfcfafae2671c9229cdb4e5d80d11e5578d9325b3d95555e59f5dfb4ed6304c0c112a01a56b6a596e50dd62e310c516e
This commit is contained in:
commit
b14e4ee3a0
@ -32,7 +32,6 @@ async-trait = { version = "0.1", optional = true }
|
|||||||
rocksdb = { version = "0.14", default-features = false, features = ["snappy"], optional = true }
|
rocksdb = { version = "0.14", default-features = false, features = ["snappy"], optional = true }
|
||||||
cc = { version = ">=1.0.64", optional = true }
|
cc = { version = ">=1.0.64", optional = true }
|
||||||
socks = { version = "0.3", optional = true }
|
socks = { version = "0.3", optional = true }
|
||||||
lazy_static = { version = "1.4", optional = true }
|
|
||||||
hwi = { version = "0.2.2", optional = true }
|
hwi = { version = "0.2.2", optional = true }
|
||||||
|
|
||||||
bip39 = { version = "1.0.1", optional = true }
|
bip39 = { version = "1.0.1", optional = true }
|
||||||
@ -57,7 +56,7 @@ verify = ["bitcoinconsensus"]
|
|||||||
default = ["key-value-db", "electrum"]
|
default = ["key-value-db", "electrum"]
|
||||||
sqlite = ["rusqlite", "ahash"]
|
sqlite = ["rusqlite", "ahash"]
|
||||||
sqlite-bundled = ["sqlite", "rusqlite/bundled"]
|
sqlite-bundled = ["sqlite", "rusqlite/bundled"]
|
||||||
compact_filters = ["rocksdb", "socks", "lazy_static", "cc"]
|
compact_filters = ["rocksdb", "socks", "cc"]
|
||||||
key-value-db = ["sled"]
|
key-value-db = ["sled"]
|
||||||
all-keys = ["keys-bip39"]
|
all-keys = ["keys-bip39"]
|
||||||
keys-bip39 = ["bip39"]
|
keys-bip39 = ["bip39"]
|
||||||
|
@ -13,7 +13,6 @@ use std::convert::TryInto;
|
|||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io::{Read, Write};
|
use std::io::{Read, Write};
|
||||||
use std::marker::PhantomData;
|
use std::marker::PhantomData;
|
||||||
use std::ops::Deref;
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::sync::RwLock;
|
use std::sync::RwLock;
|
||||||
|
|
||||||
@ -22,9 +21,9 @@ use rand::{thread_rng, Rng};
|
|||||||
|
|
||||||
use rocksdb::{Direction, IteratorMode, ReadOptions, WriteBatch, DB};
|
use rocksdb::{Direction, IteratorMode, ReadOptions, WriteBatch, DB};
|
||||||
|
|
||||||
|
use bitcoin::blockdata::constants::genesis_block;
|
||||||
use bitcoin::consensus::{deserialize, encode::VarInt, serialize, Decodable, Encodable};
|
use bitcoin::consensus::{deserialize, encode::VarInt, serialize, Decodable, Encodable};
|
||||||
use bitcoin::hash_types::{FilterHash, FilterHeader};
|
use bitcoin::hash_types::{FilterHash, FilterHeader};
|
||||||
use bitcoin::hashes::hex::FromHex;
|
|
||||||
use bitcoin::hashes::Hash;
|
use bitcoin::hashes::Hash;
|
||||||
use bitcoin::util::bip158::BlockFilter;
|
use bitcoin::util::bip158::BlockFilter;
|
||||||
use bitcoin::util::uint::Uint256;
|
use bitcoin::util::uint::Uint256;
|
||||||
@ -33,17 +32,8 @@ use bitcoin::BlockHash;
|
|||||||
use bitcoin::BlockHeader;
|
use bitcoin::BlockHeader;
|
||||||
use bitcoin::Network;
|
use bitcoin::Network;
|
||||||
|
|
||||||
use lazy_static::lazy_static;
|
|
||||||
|
|
||||||
use super::CompactFiltersError;
|
use super::CompactFiltersError;
|
||||||
|
|
||||||
lazy_static! {
|
|
||||||
static ref MAINNET_GENESIS: Block = deserialize(&Vec::<u8>::from_hex("0100000000000000000000000000000000000000000000000000000000000000000000003BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A29AB5F49FFFF001D1DAC2B7C0101000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000").unwrap()).unwrap();
|
|
||||||
static ref TESTNET_GENESIS: Block = deserialize(&Vec::<u8>::from_hex("0100000000000000000000000000000000000000000000000000000000000000000000003BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4ADAE5494DFFFF001D1AA4AE180101000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000").unwrap()).unwrap();
|
|
||||||
static ref REGTEST_GENESIS: Block = deserialize(&Vec::<u8>::from_hex("0100000000000000000000000000000000000000000000000000000000000000000000003BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4ADAE5494DFFFF7F20020000000101000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000").unwrap()).unwrap();
|
|
||||||
static ref SIGNET_GENESIS: Block = deserialize(&Vec::<u8>::from_hex("0100000000000000000000000000000000000000000000000000000000000000000000003BA3EDFD7A7B12B27AC72C3E67768F617FC81BC3888A51323A9FB8AA4B1E5E4A008F4D5FAE77031E8AD222030101000000010000000000000000000000000000000000000000000000000000000000000000FFFFFFFF4D04FFFF001D0104455468652054696D65732030332F4A616E2F32303039204368616E63656C6C6F72206F6E206272696E6B206F66207365636F6E64206261696C6F757420666F722062616E6B73FFFFFFFF0100F2052A01000000434104678AFDB0FE5548271967F1A67130B7105CD6A828E03909A67962E0EA1F61DEB649F6BC3F4CEF38C4F35504E51EC112DE5C384DF7BA0B8D578A4C702B6BF11D5FAC00000000").unwrap()).unwrap();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait StoreType: Default + fmt::Debug {}
|
pub trait StoreType: Default + fmt::Debug {}
|
||||||
|
|
||||||
#[derive(Default, Debug)]
|
#[derive(Default, Debug)]
|
||||||
@ -224,12 +214,7 @@ pub struct ChainStore<T: StoreType> {
|
|||||||
|
|
||||||
impl ChainStore<Full> {
|
impl ChainStore<Full> {
|
||||||
pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> {
|
pub fn new(store: DB, network: Network) -> Result<Self, CompactFiltersError> {
|
||||||
let genesis = match network {
|
let genesis = genesis_block(network);
|
||||||
Network::Bitcoin => MAINNET_GENESIS.deref(),
|
|
||||||
Network::Testnet => TESTNET_GENESIS.deref(),
|
|
||||||
Network::Regtest => REGTEST_GENESIS.deref(),
|
|
||||||
Network::Signet => SIGNET_GENESIS.deref(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let cf_name = "default".to_string();
|
let cf_name = "default".to_string();
|
||||||
let cf_handle = store.cf_handle(&cf_name).unwrap();
|
let cf_handle = store.cf_handle(&cf_name).unwrap();
|
||||||
@ -647,14 +632,9 @@ impl CfStore {
|
|||||||
filter_type,
|
filter_type,
|
||||||
};
|
};
|
||||||
|
|
||||||
let genesis = match headers_store.network {
|
let genesis = genesis_block(headers_store.network);
|
||||||
Network::Bitcoin => MAINNET_GENESIS.deref(),
|
|
||||||
Network::Testnet => TESTNET_GENESIS.deref(),
|
|
||||||
Network::Regtest => REGTEST_GENESIS.deref(),
|
|
||||||
Network::Signet => SIGNET_GENESIS.deref(),
|
|
||||||
};
|
|
||||||
|
|
||||||
let filter = BlockFilter::new_script_filter(genesis, |utxo| {
|
let filter = BlockFilter::new_script_filter(&genesis, |utxo| {
|
||||||
Err(bitcoin::util::bip158::Error::UtxoMissing(*utxo))
|
Err(bitcoin::util::bip158::Error::UtxoMissing(*utxo))
|
||||||
})?;
|
})?;
|
||||||
let first_key = StoreEntry::CFilterTable((filter_type, Some(0))).get_key();
|
let first_key = StoreEntry::CFilterTable((filter_type, Some(0))).get_key();
|
||||||
|
@ -231,9 +231,6 @@ extern crate async_trait;
|
|||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate bdk_macros;
|
extern crate bdk_macros;
|
||||||
|
|
||||||
#[cfg(feature = "compact_filters")]
|
|
||||||
extern crate lazy_static;
|
|
||||||
|
|
||||||
#[cfg(feature = "rpc")]
|
#[cfg(feature = "rpc")]
|
||||||
pub extern crate bitcoincore_rpc;
|
pub extern crate bitcoincore_rpc;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user