Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
923cd01
cleanup(db): Remove DB migration script
shesek Jul 28, 2026
56babed
cleanup(index): Remove BLK-file support and related config
shesek Jul 28, 2026
2967e60
cleanup(index): Remove light-mode indexing and query support
shesek Jul 28, 2026
cf403ea
perf(index): Consume iterable in-order prevouts for block indexing
shesek Jul 28, 2026
d60d985
refactor(index): Extract per-block row collectors
shesek Jul 28, 2026
495bf2b
refactor(index): Add HeaderWork classification
shesek Jul 28, 2026
a2d6df9
perf(index): Reduce BlockEntry cloning
shesek Jul 28, 2026
9cc2622
feat(daemon): Add Daemon REST client for block/spenttxouts endpoints
shesek Jul 28, 2026
4a03aba
feat(index): Add spenttxouts-based indexing mode
shesek Jul 28, 2026
e08b42f
fix(rocksdb): lower L0 trigger and tighten slowdown/stop thresholds t…
philippem Jul 28, 2026
ed7af75
fix(index): Redesign crash recovery and stale block cleanup
shesek Jul 28, 2026
9222fcb
fix(index): Use local txstore rows to undo stale blocks
shesek Jul 28, 2026
c1a23c9
fix(rocksdb): Move index stores to RocksDB column families
shesek Jul 28, 2026
90a62fa
fix(daemon): Support REST backend failover and connection recycling
shesek Jul 28, 2026
aee06c3
fix(config): Retain --jsonrpc-import as a deprecated no-op
shesek Jul 28, 2026
dd067f7
fix(daemon): Apply daemon timeouts to REST requests
shesek Jul 28, 2026
8958426
test(index): Test legacy indexer with Bitcoin Core 29
shesek Jul 28, 2026
b5ef6e6
test(index): Test `Store` startup recovery invariants
shesek Jul 28, 2026
e93d17d
feat(index): Check daemon REST support and auto-select indexing mode
shesek Jul 28, 2026
2938ada
fix(rocksdb): Apply native backpressure during bulk indexing
shesek Jul 28, 2026
eab4df7
fix(test): Make `test-core-*` features compatible with `cargo install`
shesek Jul 29, 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 @@ -14,6 +14,7 @@ edition = "2018"
default-run = "electrs"

[features]
default = ["test-core-30"]
liquid = ["elements"]
electrum-discovery = ["electrum-client"]
bench = []
Expand All @@ -26,6 +27,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 @@ -70,17 +73,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