diff --git a/Cargo.lock b/Cargo.lock index 6e73bbfa5..367b0e24a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -166,20 +166,15 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "async-compression" -version = "0.4.28" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6448dfb3960f0b038e88c781ead1e7eb7929dfc3a71a1336ec9086c00f6d1e75" +checksum = "977eb15ea9efd848bb8a4a1a2500347ed7f0bf794edf0dc3ddcf439f43d36b23" dependencies = [ - "brotli", "compression-codecs", "compression-core", - "flate2", "futures-core", - "memchr", "pin-project-lite", "tokio", - "zstd", - "zstd-safe", ] [[package]] @@ -1306,25 +1301,23 @@ checksum = "ea0095f6103c2a8b44acd6fd15960c801dafebf02e21940360833e0673f48ba7" [[package]] name = "compression-codecs" -version = "0.4.28" +version = "0.4.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46cc6539bf1c592cff488b9f253b30bc0ec50d15407c2cf45e27bd8f308d5905" +checksum = "485abf41ac0c8047c07c87c72c8fb3eb5197f6e9d7ded615dfd1a00ae00a0f64" dependencies = [ "brotli", "compression-core", "flate2", - "futures-core", "memchr", - "pin-project-lite", "zstd", "zstd-safe", ] [[package]] name = "compression-core" -version = "0.4.28" +version = "0.4.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2957e823c15bde7ecf1e8b64e537aa03a6be5fda0e2334e99887669e75b12e01" +checksum = "e47641d3deaf41fb1538ac1f54735925e275eaf3bf4d55c81b137fba797e5cbb" [[package]] name = "concurrent_lru" @@ -1954,7 +1947,7 @@ dependencies = [ "cfg-if", "libc", "r-efi", - "wasi 0.14.2+wasi-0.2.4", + "wasi 0.14.3+wasi-0.2.4", ] [[package]] @@ -2663,12 +2656,11 @@ checksum = "5e0826a989adedc2a244799e823aece04662b66609d96af8dff7ac6df9a8925d" [[package]] name = "nu-ansi-term" -version = "0.46.0" +version = "0.50.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" dependencies = [ - "overload", - "winapi", + "windows-sys 0.52.0", ] [[package]] @@ -2732,12 +2724,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e" -[[package]] -name = "overload" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" - [[package]] name = "owo-colors" version = "4.2.2" @@ -3442,9 +3428,9 @@ dependencies = [ [[package]] name = "potential_utf" -version = "0.1.2" +version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5a7c30837279ca13e7c867e9e40053bc68740f988cb07f7ca6df43cc734b585" +checksum = "84df19adbe5b5a0782edcab45899906947ab039ccf4573713735ee7de1e6b08a" dependencies = [ "zerovec", ] @@ -4558,9 +4544,9 @@ dependencies = [ [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "2054a14f5307d601f88daf0553e1cbf472acc4f2c51afab632431cdcd72124d5" dependencies = [ "nu-ansi-term", "serde", @@ -4793,11 +4779,11 @@ checksum = "ccf3ec651a847eb01de73ccad15eb7d99f80485de043efb2f370cd654f4ea44b" [[package]] name = "wasi" -version = "0.14.2+wasi-0.2.4" +version = "0.14.3+wasi-0.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +checksum = "6a51ae83037bdd272a9e28ce236db8c07016dd0d50c27038b3f407533c030c95" dependencies = [ - "wit-bindgen-rt", + "wit-bindgen", ] [[package]] @@ -4864,22 +4850,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - [[package]] name = "winapi-util" version = "0.1.10" @@ -4889,12 +4859,6 @@ dependencies = [ "windows-sys 0.60.2", ] -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.61.2" @@ -5117,13 +5081,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "21a0236b59786fed61e2a80582dd500fe61f18b5dca67a4a067d0bc9039339cf" [[package]] -name = "wit-bindgen-rt" -version = "0.39.0" +name = "wit-bindgen" +version = "0.45.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" -dependencies = [ - "bitflags 2.9.3", -] +checksum = "052283831dbae3d879dc7f51f3d92703a316ca49f91540417d38591826127814" [[package]] name = "writeable" @@ -5243,9 +5204,9 @@ dependencies = [ [[package]] name = "zip" -version = "4.5.0" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835eb39822904d39cb19465de1159e05d371973f0c6df3a365ad50565ddc8b9" +checksum = "c034aa6c54f654df20e7dc3713bc51705c12f280748fb6d7f40f87c696623e34" dependencies = [ "arbitrary", "crc32fast", diff --git a/crates/brk_cli/Cargo.toml b/crates/brk_cli/Cargo.toml index e49fcd34f..282f09348 100644 --- a/crates/brk_cli/Cargo.toml +++ b/crates/brk_cli/Cargo.toml @@ -28,7 +28,7 @@ minreq = { workspace = true } serde = { workspace = true } tokio = { workspace = true } toml = "0.9.5" -zip = { version = "4.5.0", default-features = false, features = ["deflate"] } +zip = { version = "4.6.0", default-features = false, features = ["deflate"] } [[bin]] name = "brk" diff --git a/crates/brk_indexer/examples/indexer.rs b/crates/brk_indexer/examples/indexer.rs index 8b7043068..9e247c54b 100644 --- a/crates/brk_indexer/examples/indexer.rs +++ b/crates/brk_indexer/examples/indexer.rs @@ -21,7 +21,7 @@ fn main() -> Result<()> { let blocks_dir = bitcoin_dir.join("blocks"); - let outputs_dir = Path::new("../../_outputs"); + let outputs_dir = Path::new(&std::env::var("HOME").unwrap()).join(".brk"); fs::create_dir_all(outputs_dir)?; // let outputs_dir = Path::new("/Volumes/WD_BLACK1/brk"); diff --git a/crates/brk_parser/examples/main.rs b/crates/brk_parser/examples/main.rs index bd5271ec6..07a8ca4ea 100644 --- a/crates/brk_parser/examples/main.rs +++ b/crates/brk_parser/examples/main.rs @@ -1,5 +1,6 @@ use std::path::Path; +use bitcoin::{Block, consensus::serde::hex, script::Instruction}; use bitcoincore_rpc::{Auth, Client, Result}; use brk_parser::Parser; use brk_structs::Height; @@ -8,26 +9,33 @@ use brk_structs::Height; fn main() -> Result<()> { let i = std::time::Instant::now(); - let bitcoin_dir = Path::new("").join(""); - let brk_dir = Path::new("").join(""); + let bitcoin_dir = Path::new(&std::env::var("HOME").unwrap()) + .join("Library") + .join("Application Support") + .join("Bitcoin"); + let brk_dir = Path::new(&std::env::var("HOME").unwrap()).join(".brk"); let rpc = Box::leak(Box::new(Client::new( "http://localhost:8332", Auth::CookieFile(bitcoin_dir.join(".cookie")), )?)); + let parser = Parser::new(bitcoin_dir.join("blocks"), Some(brk_dir), rpc); + let start = None; let end = None; - - let parser = Parser::new(bitcoin_dir.join("blocks"), brk_dir, rpc); - parser .parse(start, end) .iter() .for_each(|(height, _block, hash)| { - println!("{height}: {hash}"); + println!("{height}: {}", _block.get_coinbase_message()); }); + println!( + "391487: {}", + parser.get(Height::new(391487)).get_coinbase_message() + ); + let block_0 = parser.get(Height::new(0)); println!( @@ -42,7 +50,23 @@ fn main() -> Result<()> { .script_pubkey ); - let block_840_000 = parser.get(Height::new(840_000)); + println!("{}", block_0.get_coinbase_message()); + + let block_158251 = parser.get(Height::new(158251)); + println!( + "{}", + block_158251 + .txdata + .first() + .unwrap() + .output + .first() + .unwrap() + .script_pubkey + ); + println!("{}", block_158251.get_coinbase_message()); + + let block_840_000 = parser.get(Height::new(840_004)); println!( "{}", @@ -56,7 +80,27 @@ fn main() -> Result<()> { .value ); + println!("{}", block_840_000.get_coinbase_message()); + dbg!(i.elapsed()); Ok(()) } + +pub trait BlockExtended { + fn get_coinbase_message(&self) -> String; +} + +impl BlockExtended for Block { + fn get_coinbase_message(&self) -> String { + let Some(input) = self.txdata.first().and_then(|tx| tx.input.first()) else { + return String::new(); + }; + let bytes = input.script_sig.as_bytes(); + String::from_utf8_lossy(bytes) + .chars() + .filter(|&c| c != '\u{FFFD}' && (c >= ' ' || c == '\n' || c == '\r' || c == '\t')) + .take(1_024) + .collect() + } +} diff --git a/crates/brk_parser/examples/p2a.rs b/crates/brk_parser/examples/p2a.rs index f1c1340cb..3c6ae450e 100644 --- a/crates/brk_parser/examples/p2a.rs +++ b/crates/brk_parser/examples/p2a.rs @@ -21,7 +21,7 @@ fn main() { // let start = None; // let end = None; - let parser = Parser::new(bitcoin_dir.join("blocks"), brk_dir, rpc); + let parser = Parser::new(bitcoin_dir.join("blocks"), Some(brk_dir), rpc); // parser // .parse(start, end) diff --git a/crates/brk_parser/src/lib.rs b/crates/brk_parser/src/lib.rs index 7eb93128d..fd9408c52 100644 --- a/crates/brk_parser/src/lib.rs +++ b/crates/brk_parser/src/lib.rs @@ -35,14 +35,14 @@ const BOUND_CAP: usize = 50; pub struct Parser { blocks_dir: PathBuf, - outputs_dir: PathBuf, + outputs_dir: Option, rpc: &'static bitcoincore_rpc::Client, } impl Parser { pub fn new( blocks_dir: PathBuf, - outputs_dir: PathBuf, + outputs_dir: Option, rpc: &'static bitcoincore_rpc::Client, ) -> Self { Self { @@ -79,8 +79,11 @@ impl Parser { let blk_index_to_blk_path = BlkIndexToBlkPath::scan(blocks_dir); - let (mut blk_index_to_blk_recap, blk_index) = - BlkIndexToBlkRecap::import(&self.outputs_dir, &blk_index_to_blk_path, start); + let (mut blk_index_to_blk_recap, blk_index) = BlkIndexToBlkRecap::import( + self.outputs_dir.as_ref().unwrap(), + &blk_index_to_blk_path, + start, + ); let xor_bytes = XORBytes::from(blocks_dir); diff --git a/crates/brk_server/src/api/mod.rs b/crates/brk_server/src/api/mod.rs index 3e5fe5098..95fa20f91 100644 --- a/crates/brk_server/src/api/mod.rs +++ b/crates/brk_server/src/api/mod.rs @@ -124,5 +124,9 @@ impl ApiRoutes for Router { ) }), ) + .route( + "/discord", + get(|| async { Redirect::temporary("https://discord.com/invite/HaR3wpH3nr") }), + ) } } diff --git a/websites/bitview/service-worker.js b/websites/bitview/service-worker.js index 0d3268fae..7e92bd925 100644 --- a/websites/bitview/service-worker.js +++ b/websites/bitview/service-worker.js @@ -50,7 +50,15 @@ sw.addEventListener("fetch", (event) => { const url = new URL(req.url); // 1) Bypass API calls & non-GETs - if (req.method !== "GET" || url.pathname.startsWith("/api")) { + if ( + req.method !== "GET" || + url.pathname.startsWith("/api") || + url.pathname === "/discord" || + url.pathname === "/github" || + url.pathname === "/mcp" || + url.pathname === "/nostr" || + url.pathname === "/status" + ) { return; // let the browser handle it }