Crates.io | bitcoin-explorer |
lib.rs | bitcoin-explorer |
version | 1.2.20 |
source | src |
created_at | 2021-09-25 03:51:59.371144 |
updated_at | 2023-05-19 08:21:09.205912 |
description | High Performance Blockchain Deserializer |
homepage | https://github.com/Congyuwang/Rusty-Bitcoin-Explorer |
repository | https://github.com/Congyuwang/Rusty-Bitcoin-Explorer |
max_upload_size | |
id | 456059 |
size | 123,499 |
bitcoin_explorer
is an efficient library for decoding transaction information from
bitcoin blockchain.
Support bitcoin MainNet, might support other networks in the future.
tx_index=1
.iter_connected_block()
).for in
syntax).python 3.6-3.10
across Windows x86/x64
, MacOS x86_64/arm64
, and Linux x86_64
.use bitcoin_explorer::{BitcoinDB, FConnectedBlock, SConnectedBlock};
use std::path::Path;
fn main() {
let path = Path::new("/Users/me/bitcoin");
let db = BitcoinDB::new(path, false).unwrap();
let block_count = db.get_block_count();
let total_number_of_transactions = (0..block_count)
.map(|i| db.get_header(i).unwrap().n_tx)
.sum::<u32>();
}
FBlock
/SBlock
) )use bitcoin_explorer::{BitcoinDB, FBlock, SBlock, Block};
use std::path::Path;
fn main() {
let path = Path::new("/Users/me/bitcoin");
// launch without reading txindex
let db = BitcoinDB::new(path, false).unwrap();
// get block of height 600000 (in different formats)
let block: Block = db.get_block(600000).unwrap();
let block: FBlock = db.get_block(600000).unwrap();
let block: SBlock = db.get_block(600000).unwrap();
}
Note: this requires building tx index with --txindex=1
flag using Bitcoin Core.
use bitcoin_explorer::{BitcoinDB, Transaction, FTransaction, STransaction, Txid, FromHex};
use std::path::Path;
fn main() {
let path = Path::new("/Users/me/bitcoin");
// !!must launch with txindex=true!!
let db = BitcoinDB::new(path, true).unwrap();
// get transaction
// e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468
let txid_str = "e3bf3d07d4b0375638d5f1db5255fe07ba2c4cb067cd81b84ee974b6585fb468";
let txid = Txid::from_hex(txid_str).unwrap();
// get transactions in different formats
let tx: Transaction = db.get_transaction(&txid).unwrap();
let tx: FTransaction = db.get_transaction(&txid).unwrap();
let tx: STransaction = db.get_transaction(&txid).unwrap();
}
use bitcoin_explorer::{BitcoinDB, Block, SBlock, FBlock};
use std::path::Path;
fn main() {
let path = Path::new("/Users/me/bitcoin");
// launch without reading txindex
let db = BitcoinDB::new(path, false).unwrap();
// iterate over block from 0 to 1000
for block in db.iter_block::<Block>(0, 1000) {
for tx in block.txdata {
println!("do something for this transaction");
}
}
// iterate over block from 1000 to end
for block in db.iter_block::<FBlock>(1000, db.get_block_count()) {
for tx in block.txdata {
println!("do something for this transaction");
}
}
// iterate over block from 0 to end
for block in db.iter_block::<SBlock>(0, db.get_block_count()) {
for tx in block.txdata {
println!("do something for this transaction");
}
}
}
ConnectedBlock
)use bitcoin_explorer::{BitcoinDB, FConnectedBlock, SConnectedBlock};
use std::path::Path;
fn main() {
let path = Path::new("/Users/me/bitcoin");
// launch without reading txindex
let db = BitcoinDB::new(path, false).unwrap();
let end = db.get_block_count();
// iterate over all blocks found (simple connected format)
for block in db.iter_connected_block::<SConnectedBlock>(end) {
for tx in block.txdata {
println!("do something for this transaction");
}
}
}
Memory requirement: 8 GB physical RAM.
SSD for better performance.
x86_64
Windows 10db.iter_block::<SBlock>(0, 700000)
db.iter_connected_block::<SConnectedBlock>(700000)
Compile with default features (Cargo.toml):
bitcoin-explorer = "^1.2"
Compile with non-default features (Cargo.toml):
bitcoin-explorer = { version = "^1.2", default-features = false }
This package deals with the binary file of another software Bitcoin Core
.
It might not be compatible with older Bitcoin Core versions.
Tested on
Bitcoin Core version v0.21.1.0-g194b9b8792d9b0798fdb570b79fa51f1d1f5ebaf Copyright (C) 2009-2020 The Bitcoin Core developers
.
If you have more than 32 GB memory, you might try default-features = false
for faster performance on db.iter_connected_block()
bitcoin-explorer = { version = "^1.2", default-features = false }