From 3439422057379ece48c918b24db1346f27d73465 Mon Sep 17 00:00:00 2001 From: nym21 Date: Mon, 21 Apr 2025 23:17:37 +0200 Subject: [PATCH] kibo: database: part 1 --- Cargo.lock | 32 +- Cargo.toml | 6 +- README.md | 1 + crates/brk_computer/src/storage/vecs/base.rs | 24 + .../brk_computer/src/storage/vecs/blocks.rs | 4 +- .../brk_computer/src/storage/vecs/indexes.rs | 293 +++++++++-- websites/kibo.money/index.html | 15 +- .../packages/lightweight-charts/wrapper.js | 8 +- websites/kibo.money/scripts/chart.js | 1 + websites/kibo.money/scripts/database.js | 460 ++++++++++++++++++ websites/kibo.money/scripts/main.js | 337 ++++++------- websites/kibo.money/scripts/options.js | 96 +--- websites/kibo.money/scripts/simulation.js | 191 +++++++- .../kibo.money/scripts/vecid-to-indexes.js | 18 +- websites/kibo.money/styles/chart.css | 4 + websites/kibo.money/styles/database.css | 126 +++++ 16 files changed, 1279 insertions(+), 337 deletions(-) create mode 100644 websites/kibo.money/scripts/database.js create mode 100644 websites/kibo.money/styles/database.css diff --git a/Cargo.lock b/Cargo.lock index 28bd1b3ad..b4b50c9d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -694,9 +694,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.36" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2df961d8c8a0d08aa9945718ccf584145eee3f3aa06cddbeac12933781102e04" +checksum = "eccb054f56cbd38340b380d4a8e69ef1f02f1af43db2f0cc817a4774d80ae071" dependencies = [ "clap_builder", "clap_derive", @@ -704,9 +704,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.36" +version = "4.5.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "132dbda40fb6753878316a489d5a1242a8ef2f0d9e47ba01c951ea8aa7d013a5" +checksum = "efd9466fac8543255d3b1fcad4762c5e116ffe808c8a3043d4263cd4fd4862a2" dependencies = [ "anstream", "anstyle", @@ -1107,9 +1107,9 @@ checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" [[package]] name = "fjall" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b2ced3483989a62b3533c9f99054d73b527c6c0045cf22b00fe87956f1a46f" +checksum = "958511f67d1f80e6bff9ffac05c626bb340d4602ca6ea5617d9901c218c894f0" dependencies = [ "byteorder", "byteview", @@ -1478,9 +1478,9 @@ checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "jiff" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5ad87c89110f55e4cd4dc2893a9790820206729eaf221555f742d540b0724a0" +checksum = "59ec30f7142be6fe14e1b021f50b85db8df2d4324ea6e91ec3e5dcde092021d0" dependencies = [ "jiff-static", "jiff-tzdb-platform", @@ -1493,9 +1493,9 @@ dependencies = [ [[package]] name = "jiff-static" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d076d5b64a7e2fe6f0743f02c43ca4a6725c0f904203bfe276a5b3e793103605" +checksum = "526b834d727fd59d37b076b0c3236d9adde1b1729a4361e20b2026f738cc1dbe" dependencies = [ "proc-macro2", "quote", @@ -1585,9 +1585,9 @@ checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "lsm-tree" -version = "2.8.0" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a63a5e98a38b51765274137d8aedfbd848da5f4d016867e186b673fcc06a8c" +checksum = "87d58bdef2dcbf50fce9f343265bdbd7fb08a458d241eb837ce426be22d674b4" dependencies = [ "byteorder", "crossbeam-skiplist", @@ -2718,9 +2718,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" [[package]] name = "signal-hook-registry" -version = "1.4.2" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +checksum = "a1ee1aca2bc74ef9589efa7ccaa0f3752751399940356209b3fd80c078149b5e" dependencies = [ "libc", ] @@ -3153,9 +3153,9 @@ checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" [[package]] name = "value-log" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd29b17c041f94e0885179637289815cd038f0c9fc19c4549d5a97017404fb7d" +checksum = "62fc7c4ce161f049607ecea654dca3f2d727da5371ae85e2e4f14ce2b98ed67c" dependencies = [ "byteorder", "byteview", diff --git a/Cargo.toml b/Cargo.toml index be45a8e27..ff71cc8c5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,11 +31,11 @@ brk_query = { version = "0", path = "crates/brk_query" } brk_server = { version = "0", path = "crates/brk_server" } brk_vec = { version = "0", path = "crates/brk_vec" } byteview = "0.6.1" -clap = { version = "4.5.36", features = ["derive", "string"] } +clap = { version = "4.5.37", features = ["derive", "string"] } color-eyre = "0.6.3" derive_deref = "1.1.1" -fjall = "2.8.0" -jiff = "0.2.8" +fjall = "2.9.0" +jiff = "0.2.9" log = { version = "0.4.27" } minreq = { version = "2.13.4", features = ["https", "serde_json"] } rayon = "1.10.0" diff --git a/README.md b/README.md index 0dcffa7cd..23d46dc6b 100644 --- a/README.md +++ b/README.md @@ -92,6 +92,7 @@ Heartfelt thanks go out to every donor on [Nostr](https://primal.net/p/npub1jagm If you'd like to have your own instance hosted for you please contact [hosting@bitcoinresearchkit.org](mailto:hosting@bitcoinresearchkit.org). - 2 separate dedicated servers (1 GB/s each) with different ISPs and Cloudflare integration for enhanced performance and optimal availability +- 99.9% SLA - Direct communication for feature requests and support - Updates delivered at your convenience - Optional subdomains: `*.bitcoinresearchkit.org`, `*.kibo.money` and `*.satonomics.xyz` diff --git a/crates/brk_computer/src/storage/vecs/base.rs b/crates/brk_computer/src/storage/vecs/base.rs index 7557989d2..a10c3b904 100644 --- a/crates/brk_computer/src/storage/vecs/base.rs +++ b/crates/brk_computer/src/storage/vecs/base.rs @@ -154,6 +154,30 @@ where Ok(()) } + pub fn compute_range( + &mut self, + max_from: I, + other: &mut StoredVec, + mut t: F, + exit: &Exit, + ) -> Result<()> + where + A: StoredType, + F: FnMut(I) -> (I, T), + { + self.validate_computed_version_or_reset_file( + Version::ZERO + self.version() + other.version(), + )?; + + let index = max_from.min(I::from(self.len())); + (index.to_usize()?..other.len()).try_for_each(|i| { + let (i, v) = t(I::from(i)); + self.forced_push_at(i, v, exit) + })?; + + self.safe_flush(exit) + } + pub fn compute_transform( &mut self, max_from: A, diff --git a/crates/brk_computer/src/storage/vecs/blocks.rs b/crates/brk_computer/src/storage/vecs/blocks.rs index fa11cc578..d48c3c044 100644 --- a/crates/brk_computer/src/storage/vecs/blocks.rs +++ b/crates/brk_computer/src/storage/vecs/blocks.rs @@ -120,10 +120,10 @@ impl Vecs { starting_indexes, exit, |v, indexer, _, starting_indexes, exit| { - v.compute_transform( + v.compute_range( starting_indexes.height, indexer.mut_vecs().height_to_weight.mut_vec(), - |(h, ..)| (h, StoredU32::from(1_u32)), + |h| (h, StoredU32::from(1_u32)), exit, ) }, diff --git a/crates/brk_computer/src/storage/vecs/indexes.rs b/crates/brk_computer/src/storage/vecs/indexes.rs index e78074eee..8fb04272d 100644 --- a/crates/brk_computer/src/storage/vecs/indexes.rs +++ b/crates/brk_computer/src/storage/vecs/indexes.rs @@ -1,8 +1,10 @@ use std::{fs, ops::Deref, path::Path}; use brk_core::{ - Date, Dateindex, Decadeindex, Difficultyepoch, Halvingepoch, Height, Monthindex, Quarterindex, - Timestamp, Txindex, Txinindex, Txoutindex, Weekindex, Yearindex, + Addressindex, Date, Dateindex, Decadeindex, Difficultyepoch, Emptyindex, Halvingepoch, Height, + Monthindex, Multisigindex, Opreturnindex, P2PK33index, P2PK65index, P2PKHindex, P2SHindex, + P2TRindex, P2WPKHindex, P2WSHindex, Pushonlyindex, Quarterindex, Timestamp, Txindex, Txinindex, + Txoutindex, Unknownindex, Weekindex, Yearindex, }; use brk_exit::Exit; use brk_indexer::Indexer; @@ -12,6 +14,7 @@ use super::ComputedVec; #[derive(Clone)] pub struct Vecs { + pub addressindex_to_addressindex: ComputedVec, pub dateindex_to_date: ComputedVec, pub dateindex_to_dateindex: ComputedVec, pub dateindex_to_first_height: ComputedVec, @@ -27,6 +30,7 @@ pub struct Vecs { pub difficultyepoch_to_first_height: ComputedVec, pub difficultyepoch_to_last_height: ComputedVec, pub difficultyepoch_to_timestamp: ComputedVec, + pub emptyindex_to_emptyindex: ComputedVec, pub halvingepoch_to_first_height: ComputedVec, pub halvingepoch_to_halvingepoch: ComputedVec, pub halvingepoch_to_last_height: ComputedVec, @@ -45,12 +49,26 @@ pub struct Vecs { pub monthindex_to_quarterindex: ComputedVec, pub monthindex_to_timestamp: ComputedVec, pub monthindex_to_yearindex: ComputedVec, + pub multisigindex_to_multisigindex: ComputedVec, + pub opreturnindex_to_opreturnindex: ComputedVec, + pub p2pk33index_to_p2pk33index: ComputedVec, + pub p2pk65index_to_p2pk65index: ComputedVec, + pub p2pkhindex_to_p2pkhindex: ComputedVec, + pub p2shindex_to_p2shindex: ComputedVec, + pub p2trindex_to_p2trindex: ComputedVec, + pub p2wpkhindex_to_p2wpkhindex: ComputedVec, + pub p2wshindex_to_p2wshindex: ComputedVec, + pub pushonlyindex_to_pushonlyindex: ComputedVec, pub quarterindex_to_first_monthindex: ComputedVec, pub quarterindex_to_last_monthindex: ComputedVec, pub quarterindex_to_quarterindex: ComputedVec, pub quarterindex_to_timestamp: ComputedVec, pub txindex_to_last_txinindex: ComputedVec, pub txindex_to_last_txoutindex: ComputedVec, + pub txindex_to_txindex: ComputedVec, + pub txinindex_to_txinindex: ComputedVec, + pub txoutindex_to_txoutindex: ComputedVec, + pub unknownindex_to_unknownindex: ComputedVec, pub weekindex_to_first_dateindex: ComputedVec, pub weekindex_to_last_dateindex: ComputedVec, pub weekindex_to_timestamp: ComputedVec, @@ -307,6 +325,86 @@ impl Vecs { Version::ZERO, compressed, )?, + p2pk33index_to_p2pk33index: ComputedVec::forced_import( + &path.join("p2pk33index_to_p2pk33index"), + Version::ZERO, + compressed, + )?, + p2pk65index_to_p2pk65index: ComputedVec::forced_import( + &path.join("p2pk65index_to_p2pk65index"), + Version::ZERO, + compressed, + )?, + p2pkhindex_to_p2pkhindex: ComputedVec::forced_import( + &path.join("p2pkhindex_to_p2pkhindex"), + Version::ZERO, + compressed, + )?, + p2shindex_to_p2shindex: ComputedVec::forced_import( + &path.join("p2shindex_to_p2shindex"), + Version::ZERO, + compressed, + )?, + p2trindex_to_p2trindex: ComputedVec::forced_import( + &path.join("p2trindex_to_p2trindex"), + Version::ZERO, + compressed, + )?, + p2wpkhindex_to_p2wpkhindex: ComputedVec::forced_import( + &path.join("p2wpkhindex_to_p2wpkhindex"), + Version::ZERO, + compressed, + )?, + p2wshindex_to_p2wshindex: ComputedVec::forced_import( + &path.join("p2wshindex_to_p2wshindex"), + Version::ZERO, + compressed, + )?, + txindex_to_txindex: ComputedVec::forced_import( + &path.join("txindex_to_txindex"), + Version::ZERO, + compressed, + )?, + txinindex_to_txinindex: ComputedVec::forced_import( + &path.join("txinindex_to_txinindex"), + Version::ZERO, + compressed, + )?, + emptyindex_to_emptyindex: ComputedVec::forced_import( + &path.join("emptyindex_to_emptyindex"), + Version::ZERO, + compressed, + )?, + multisigindex_to_multisigindex: ComputedVec::forced_import( + &path.join("multisigindex_to_multisigindex"), + Version::ZERO, + compressed, + )?, + opreturnindex_to_opreturnindex: ComputedVec::forced_import( + &path.join("opreturnindex_to_opreturnindex"), + Version::ZERO, + compressed, + )?, + pushonlyindex_to_pushonlyindex: ComputedVec::forced_import( + &path.join("pushonlyindex_to_pushonlyindex"), + Version::ZERO, + compressed, + )?, + unknownindex_to_unknownindex: ComputedVec::forced_import( + &path.join("unknownindex_to_unknownindex"), + Version::ZERO, + compressed, + )?, + addressindex_to_addressindex: ComputedVec::forced_import( + &path.join("addressindex_to_addressindex"), + Version::ZERO, + compressed, + )?, + txoutindex_to_txoutindex: ComputedVec::forced_import( + &path.join("txoutindex_to_txoutindex"), + Version::ZERO, + compressed, + )?, }) } @@ -323,10 +421,10 @@ impl Vecs { let txinindexes_count = indexer_vecs.txinindex_to_txoutindex.len(); let txoutindexes_count = indexer_vecs.txoutindex_to_addressindex.len(); - self.height_to_height.compute_transform( + self.height_to_height.compute_range( starting_indexes.height, indexer_vecs.height_to_timestamp.mut_vec(), - |(h, ..)| (h, h), + |h| (h, h), exit, )?; @@ -340,12 +438,12 @@ impl Vecs { self.height_to_fixed_timestamp.compute_transform( starting_indexes.height, indexer_vecs.height_to_timestamp.mut_vec(), - |(h, d, s, ..)| { - let d = h + |(h, timestamp, s, ..)| { + let timestamp = h .decremented() .and_then(|h| s.unwrap_cached_get(h)) - .map_or(d, |prev_d| prev_d.max(d)); - (h, d) + .map_or(timestamp, |prev_d| prev_d.max(timestamp)); + (h, timestamp) }, exit, )?; @@ -397,17 +495,17 @@ impl Vecs { exit, )?; - self.dateindex_to_dateindex.compute_transform( + self.dateindex_to_dateindex.compute_range( starting_dateindex, self.dateindex_to_first_height.mut_vec(), - |(di, ..)| (di, di), + |di| (di, di), exit, )?; - self.dateindex_to_date.compute_transform( + self.dateindex_to_date.compute_range( starting_dateindex, self.dateindex_to_dateindex.mut_vec(), - |(di, ..)| (di, Date::from(di)), + |di| (di, Date::from(di)), exit, )?; @@ -448,10 +546,10 @@ impl Vecs { .unwrap_cached_get(starting_dateindex) .unwrap_or_default(); - self.dateindex_to_weekindex.compute_transform( + self.dateindex_to_weekindex.compute_range( starting_dateindex, self.dateindex_to_dateindex.mut_vec(), - |(di, ..)| (di, Weekindex::from(di)), + |di| (di, Weekindex::from(di)), exit, )?; @@ -470,10 +568,10 @@ impl Vecs { exit, )?; - self.weekindex_to_weekindex.compute_transform( + self.weekindex_to_weekindex.compute_range( starting_weekindex, self.weekindex_to_first_dateindex.mut_vec(), - |(wi, ..)| (wi, wi), + |wi| (wi, wi), exit, )?; @@ -491,10 +589,10 @@ impl Vecs { .unwrap_cached_get(starting_dateindex) .unwrap_or_default(); - self.dateindex_to_monthindex.compute_transform( + self.dateindex_to_monthindex.compute_range( starting_dateindex, self.dateindex_to_dateindex.mut_vec(), - |(di, ..)| (di, Monthindex::from(di)), + |di| (di, Monthindex::from(di)), exit, )?; @@ -515,10 +613,10 @@ impl Vecs { exit, )?; - self.monthindex_to_monthindex.compute_transform( + self.monthindex_to_monthindex.compute_range( starting_monthindex, self.monthindex_to_first_dateindex.mut_vec(), - |(mi, ..)| (mi, mi), + |mi| (mi, mi), exit, )?; @@ -536,10 +634,10 @@ impl Vecs { .unwrap_cached_get(starting_monthindex) .unwrap_or_default(); - self.monthindex_to_quarterindex.compute_transform( + self.monthindex_to_quarterindex.compute_range( starting_monthindex, self.monthindex_to_monthindex.mut_vec(), - |(mi, ..)| (mi, Quarterindex::from(mi)), + |mi| (mi, Quarterindex::from(mi)), exit, )?; @@ -560,10 +658,10 @@ impl Vecs { exit, )?; - self.quarterindex_to_quarterindex.compute_transform( + self.quarterindex_to_quarterindex.compute_range( starting_quarterindex, self.quarterindex_to_first_monthindex.mut_vec(), - |(yi, ..)| (yi, yi), + |i| (i, i), exit, )?; @@ -581,10 +679,10 @@ impl Vecs { .unwrap_cached_get(starting_monthindex) .unwrap_or_default(); - self.monthindex_to_yearindex.compute_transform( + self.monthindex_to_yearindex.compute_range( starting_monthindex, self.monthindex_to_monthindex.mut_vec(), - |(mi, ..)| (mi, Yearindex::from(mi)), + |i| (i, Yearindex::from(i)), exit, )?; @@ -605,10 +703,10 @@ impl Vecs { exit, )?; - self.yearindex_to_yearindex.compute_transform( + self.yearindex_to_yearindex.compute_range( starting_yearindex, self.yearindex_to_first_monthindex.mut_vec(), - |(yi, ..)| (yi, yi), + |i| (i, i), exit, )?; @@ -626,10 +724,10 @@ impl Vecs { .unwrap_cached_get(starting_yearindex) .unwrap_or_default(); - self.yearindex_to_decadeindex.compute_transform( + self.yearindex_to_decadeindex.compute_range( starting_yearindex, self.yearindex_to_yearindex.mut_vec(), - |(yi, ..)| (yi, Decadeindex::from(yi)), + |i| (i, Decadeindex::from(i)), exit, )?; @@ -648,10 +746,10 @@ impl Vecs { exit, )?; - self.decadeindex_to_decadeindex.compute_transform( + self.decadeindex_to_decadeindex.compute_range( starting_decadeindex, self.decadeindex_to_first_yearindex.mut_vec(), - |(di, ..)| (di, di), + |i| (i, i), exit, )?; @@ -669,10 +767,10 @@ impl Vecs { .unwrap_cached_get(decremented_starting_height) .unwrap_or_default(); - self.height_to_difficultyepoch.compute_transform( + self.height_to_difficultyepoch.compute_range( starting_indexes.height, self.height_to_height.mut_vec(), - |(h, ..)| (h, Difficultyepoch::from(h)), + |h| (h, Difficultyepoch::from(h)), exit, )?; @@ -691,10 +789,10 @@ impl Vecs { exit, )?; - self.difficultyepoch_to_difficultyepoch.compute_transform( + self.difficultyepoch_to_difficultyepoch.compute_range( starting_difficultyepoch, self.difficultyepoch_to_first_height.mut_vec(), - |(de, ..)| (de, de), + |i| (i, i), exit, )?; @@ -717,10 +815,10 @@ impl Vecs { .unwrap_cached_get(decremented_starting_height) .unwrap_or_default(); - self.height_to_halvingepoch.compute_transform( + self.height_to_halvingepoch.compute_range( starting_indexes.height, self.height_to_height.mut_vec(), - |(h, ..)| (h, Halvingepoch::from(h)), + |h| (h, Halvingepoch::from(h)), exit, )?; @@ -739,10 +837,10 @@ impl Vecs { exit, )?; - self.halvingepoch_to_halvingepoch.compute_transform( + self.halvingepoch_to_halvingepoch.compute_range( starting_halvingepoch, self.halvingepoch_to_first_height.mut_vec(), - |(he, ..)| (he, he), + |i| (i, i), exit, )?; @@ -758,6 +856,105 @@ impl Vecs { // exit, // )?; + // --- + + self.addressindex_to_addressindex.compute_range( + starting_indexes.addressindex, + indexer_vecs.addressindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.txoutindex_to_txoutindex.compute_range( + starting_indexes.txoutindex, + indexer_vecs.txoutindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2pk33index_to_p2pk33index.compute_range( + starting_indexes.p2pk33index, + indexer_vecs.p2pk33index_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2pk65index_to_p2pk65index.compute_range( + starting_indexes.p2pk65index, + indexer_vecs.p2pk65index_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2pkhindex_to_p2pkhindex.compute_range( + starting_indexes.p2pkhindex, + indexer_vecs.p2pkhindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2shindex_to_p2shindex.compute_range( + starting_indexes.p2shindex, + indexer_vecs.p2shindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2trindex_to_p2trindex.compute_range( + starting_indexes.p2trindex, + indexer_vecs.p2trindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2wpkhindex_to_p2wpkhindex.compute_range( + starting_indexes.p2wpkhindex, + indexer_vecs.p2wpkhindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.p2wshindex_to_p2wshindex.compute_range( + starting_indexes.p2wshindex, + indexer_vecs.p2wshindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.txindex_to_txindex.compute_range( + starting_indexes.txindex, + indexer_vecs.txindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.txinindex_to_txinindex.compute_range( + starting_indexes.txinindex, + indexer_vecs.txinindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.emptyindex_to_emptyindex.compute_range( + starting_indexes.emptyindex, + indexer_vecs.emptyindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.multisigindex_to_multisigindex.compute_range( + starting_indexes.multisigindex, + indexer_vecs.multisigindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.opreturnindex_to_opreturnindex.compute_range( + starting_indexes.opreturnindex, + indexer_vecs.opreturnindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.pushonlyindex_to_pushonlyindex.compute_range( + starting_indexes.pushonlyindex, + indexer_vecs.pushonlyindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + self.unknownindex_to_unknownindex.compute_range( + starting_indexes.unknownindex, + indexer_vecs.unknownindex_to_height.mut_vec(), + |i| (i, i), + exit, + )?; + Ok(Indexes { indexes: starting_indexes, dateindex: starting_dateindex, @@ -821,6 +1018,22 @@ impl Vecs { self.quarterindex_to_last_monthindex.any_vec(), self.quarterindex_to_quarterindex.any_vec(), self.quarterindex_to_timestamp.any_vec(), + self.p2pk33index_to_p2pk33index.any_vec(), + self.p2pk65index_to_p2pk65index.any_vec(), + self.p2pkhindex_to_p2pkhindex.any_vec(), + self.p2shindex_to_p2shindex.any_vec(), + self.p2trindex_to_p2trindex.any_vec(), + self.p2wpkhindex_to_p2wpkhindex.any_vec(), + self.p2wshindex_to_p2wshindex.any_vec(), + self.txindex_to_txindex.any_vec(), + self.txinindex_to_txinindex.any_vec(), + self.emptyindex_to_emptyindex.any_vec(), + self.multisigindex_to_multisigindex.any_vec(), + self.opreturnindex_to_opreturnindex.any_vec(), + self.pushonlyindex_to_pushonlyindex.any_vec(), + self.unknownindex_to_unknownindex.any_vec(), + self.addressindex_to_addressindex.any_vec(), + self.txoutindex_to_txoutindex.any_vec(), ] } } diff --git a/websites/kibo.money/index.html b/websites/kibo.money/index.html index 6673ba1cf..ed6630a2b 100644 --- a/websites/kibo.money/index.html +++ b/websites/kibo.money/index.html @@ -37,9 +37,8 @@ line-height: 1.5; -webkit-text-size-adjust: 100%; tab-size: 4; - font-family: "Geist mono", ui-sans-serif, system-ui, sans-serif, - "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", - "Noto Color Emoji"; + font-family: "Geist mono", ui-monospace, SFMono-Regular, Menlo, Monaco, + Consolas, "Liberation Mono", "Courier New", monospace; font-feature-settings: "ss03"; -webkit-tap-highlight-color: transparent; } @@ -134,6 +133,7 @@ letter-spacing: inherit; color: inherit; background: transparent; + text-transform: inherit; } button, @@ -590,7 +590,7 @@ > fieldset { width: 100%; display: flex; - gap: 1rem; + gap: 1.25rem; > label { pointer-events: auto; @@ -626,6 +626,7 @@ } select { + cursor: pointer; -webkit-appearance: none; -moz-appearance: none; appearance: none; @@ -884,7 +885,7 @@ bottom: 0; left: 0; right: 0; - z-index: 10; + z-index: 20; pointer-events: none; } .shadow-left { @@ -979,7 +980,6 @@ display: flex; flex-direction: column; min-height: 0; - z-index: 20; flex: 1; margin-top: 2rem; margin-bottom: 1rem; @@ -1607,9 +1607,8 @@