Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d1804b0
cleanup(db): Remove DB migration script
shesek Aug 19, 2026
d7ca30a
cleanup(index): Remove BLK-file support and related config
shesek Aug 19, 2026
3104b41
cleanup(index): Remove light-mode indexing and query support
shesek Aug 19, 2026
acfa21e
perf(index): Consume iterable in-order prevouts for block indexing
shesek Aug 19, 2026
9dcc7ad
refactor(index): Extract per-block row collectors
shesek Aug 19, 2026
4aea5bb
refactor(index): Add HeaderWork classification
shesek Aug 19, 2026
54bdeb8
perf(index): Reduce BlockEntry cloning
shesek Aug 19, 2026
1ab22fc
feat(daemon): Add Daemon REST client for block/spenttxouts endpoints
shesek Aug 19, 2026
27448ff
feat(index): Add spenttxouts-based indexing mode
shesek Aug 19, 2026
ab6cf52
test(index): Test legacy indexer with Bitcoin Core 29
shesek Aug 19, 2026
76006ed
fix(rocksdb): lower L0 trigger and tighten slowdown/stop thresholds t…
philippem Aug 19, 2026
18cb924
fix(index): Redesign crash recovery and stale block cleanup
shesek Aug 19, 2026
af76fa4
fix(index): Use local txstore rows to undo stale blocks
shesek Aug 19, 2026
cc498cc
fix(rocksdb): Move index stores to RocksDB column families
shesek Aug 19, 2026
1303cf9
test(index): Test `Store` startup recovery invariants
shesek Aug 19, 2026
31cf42a
feat(index): Check daemon REST support and auto-select indexing mode
shesek Aug 19, 2026
810872e
fix(rocksdb): Apply native backpressure during bulk indexing
shesek Aug 19, 2026
c3f776b
fix(logs): Exclude ureq-proto wire dumps from logging
shesek Aug 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .github/workflows/rust.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ jobs:
- name: Run tests (Bitcoin mode, REST+Electrum)
run: RUST_LOG=debug cargo test

test-core-29:
runs-on: ubuntu-22.04
steps:
- run: sudo apt-get update && sudo apt-get install libfuse2
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@1.75.0
- uses: Swatinem/rust-cache@v2
- name: Run tests (Bitcoin Core 29, legacy indexer)
run: RUST_LOG=debug cargo test --no-default-features --features test-core-29

test-electrum-raw:
runs-on: ubuntu-22.04
steps:
Expand Down
108 changes: 98 additions & 10 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 9 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ default-run = "electrs"
unexpected_cfgs = { level = "warn", check-cfg = ["cfg(has_error_description_deprecated)"] }

[features]
default = ["test-core-30"]
liquid = ["elements"]
electrum-discovery = ["electrum-client"]
bench = []
Expand All @@ -29,6 +30,8 @@ otlp-tracing = [
"opentelemetry-semantic-conventions",
"electrs_macros/otlp-tracing"
]
test-core-30 = ["corepc-node?/30_2"]
test-core-29 = ["corepc-node?/29_0"]

[dependencies]
arraydeque = "0.5.1"
Expand Down Expand Up @@ -73,17 +76,21 @@ tracing-subscriber = { version = "0.3.17", default-features = false, features =
opentelemetry-semantic-conventions = { version = "0.12.0", optional = true }
tracing = { version = "0.1.40", default-features = false, features = ["attributes"], optional = true }
rand = "0.9.1"
ureq = { version = "3.1", default-features = false, features = ["json"] }

# optional dependencies for electrum-discovery
electrum-client = { version = "0.8", optional = true }
zmq = "0.10.0"
electrs_macros = { path = "electrs_macros", default-features = false }

# only used for tests, but also declared as an optional (never activated) non-dev dependency
# so weak test-core-* feature forwarding remains valid when `cargo install` omits the dev-deps
corepc-node = { version = "0.12", optional = true }

[dev-dependencies]
corepc-node = { version = "0.10", features = ["download", "29_0"] }
corepc-node = { version = "0.12", features = ["download"] }
elementsd = { version = "0.11", features = ["22_1_1"] }
electrumd = { version = "0.1.0", features = ["4_6_2"] }
ureq = { version = "3.1", default-features = false, features = ["json"] }
tempfile = "3.10"
criterion = { version = "0.8", features = ["html_reports"] }
bitcoin-test-data = { version = "*" }
Expand Down
10 changes: 0 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,6 @@ Creating the indexes should take a few hours on a beefy machine with SSD.

To deploy with Docker, follow the [instructions here](https://github.com/Blockstream/esplora#how-to-build-the-docker-image).

### Light mode

For personal or low-volume use, you may set `--lightmode` to reduce disk storage requirements
by roughly 50% at the cost of slower and more expensive lookups.

With this option set, raw transactions and metadata associated with blocks will not be kept in rocksdb
(the `T`, `X` and `M` indexes),
but instead queried from bitcoind on demand.

### Notable changes from Electrs:

- HTTP REST API in addition to the Electrum JSON-RPC protocol, with extended transaction information
Expand All @@ -63,7 +54,6 @@ but instead queried from bitcoind on demand.
In addition to electrs's original configuration options, a few new options are also available:

- `--http-addr <addr:port>` - HTTP server address/port to listen on (default: `127.0.0.1:3000`).
- `--lightmode` - enable light mode (see above)
- `--cors <origins>` - origins allowed to make cross-site request (optional, defaults to none).
- `--address-search` - enables the by-prefix address search index.
- `--index-unspendables` - enables indexing of provably unspendable outputs.
Expand Down
Loading
Loading