- Support testnet4
- Enable LTO in release build
- Don't sync mempool when bitcoind mempool is not yet loaded
- Update dependencies (
bitcoin
,bitcoin_slices
)
- Update dependencies (
bitcoin
,configure_me_codegen
,crossbeam-channel
,log
) - Deprecate unused config option
timestamp
- Don't fail if bitcoind fee estimation is disabled
- Save on allocations by using fixed size types for database rows
- Add BTC Prague 2024 dev/hack/day slides
- Update dependencies (
bitcoin
,bitcoin_slices
,bitcoincore-rpc
,rayon
) - Support latest bitcoind (rust-bitcoin/rust-bitcoincore-rpc#353 & rust-bitcoin/rust-bitcoincore-rpc#356)
- Don't fail mempool sync on missing transactions (#997)
- Update dependencies (
anyhow
,crossbeam-channel
,log
,secp256k1
,secp256k1-sys
,smallvec
,tempfile
,termcolor
,thiserror
,thiserror-impl
)
- Update dependencies (
serde_json
,tempfile
,env_logger
,rayon
,bitcoin
,crossbeam-channel
,shlex
) - Fix build on Debian 12 (#1001)
- Use batched RPC to fetch mempool entries & transactions (#979)
- Avoid redundant recomputation of fee histogram bins (#971)
- Explain behavior of config file loading (#964)
- Don't flush when nothing is written to DB (#958)
- Allow setting RocksDB log directory (#959)
- Upgrade
bitcoin
to 0.31.0 (#941) - Update dependencies (#953, #951, #980)
- Fix build failure on Raspberry Pi 4 (32bit) (#940)
- Return first txid-matching transaction (#933)
- Add txid collision scanner (#928)
- Optimize indexing via
bitcoin_slices
(#927) - Optimize index querying via
bitcoin_slices
(#913) - Avoid precompiled 'serde_derive' >=1.0.172 (#924)
- Allow exiting mempool sync on SIGINT (#917)
- Allow skipping merkle proof downloads in
history.py
(#915) - Remove IndexResult and index into db::WriteBatch (#914)
- Dockerfile: re-add curl for the second time, so it can be used for docker health checks (#912)
- Reuse buffer in p2p handling (#910)
- Preallocate serialized vector of HashPrefixRow (#909)
- Less verbose logging when bitcoind is warming up (#908)
- Drop Cirrus CI due to flakiness (#948)
- Update dependencies (
anyhow
,bitcoin
,electrs-rocksdb
,rayon
,rustix
,serde
,serde_derive
,serde_json
,signal-hook
,syn
,tempfile
)
- Add ARM build and integration tests in Cirrus CI
- Bump MSRV to 1.63.0 and update Rust edition to 2021 (#773)
- Update dependencies (
anyhow
,configure_me_codegen
,electrs-rocksdb
,env_logger
,parking_lot
,prometheus
,rayon
,serde
,serde_derive
,serde_json
)- Please note that dynamic linking with RocksDB now requires RocksDB 7.8.3 (instead of 6.11.4)!
- Fix 'server.version' support for version range (#887)
- Allow not waiting for block download before sync (#888)
- Fix typo in config_specification.toml (#883)
- Bump bitcoind version used in CI (#882)
- Prefix Prometheus metrics with 'electrs_' (#881)
- Fixup error handling in Prometheus HTTP server (#880)
- Add address->scripthash conversion tool
- Update dependencies (crossbeam-channel, jsonrpc, bitcoincore-rpc, serde_json, tempfile)
- Upgrade dependencies (
bitcoin
&bitcoincore-rpc
#865,crossbeam-channel
#854,serde_json
#855,tempfile
#850) - Don't panic on unexpected magic (#861)
- contrib: rename xpub into get_balance (#627)
- Update dependencies (
serde_json
,signal-hook
,electrs-bitcoincore-rpc
,electrs-rocksdb
) - Add
CONTRIBUTING.md
(#838) - Add
blockchain.transaction.id_from_pos
RPC (#836) - Add
blockchain.scripthash.unsubscribe
RPC (#833) - Support IPv6 connections (#792)
- Update dependencies (
secp256k1
,serde_json
,configure_me_codegen
,env_logger
,electrs-rocksdb
) - Improve error logging in case of p2p error (#807)
- Update dependencies (
bitcoin
,bitcoincore-rpc
,tiny_http
,serde_json
,env_logger
) - Fix mempool fee rate formatting (#761)
- Allow configuring signet p2p magic (#762, #768)
- Don't panic in case of an invalid block header height (#786)
- Update dependencies (
anyhow
,crossbeam-channel
,crossbeam-utils
,regex
,serde
,serde from
,serde_json
,signal-hook
) - Don't log scripthash (#737)
- Update dependencies (
serde_json
,serde
,bitcoin
,bitcoincore-rpc
,rayon
,log
) - Support new Electrum release
getbalance
response format (#717)
- Add build matrix to test all features in CI (#706)
- Install and run cargo-bloat in CI (#705)
- Add guide for other Ubuntu & Debian releases to compile and install librocksdb (#696)
- Update dependencies (
anyhow
,log
,crossbeam-channel
,rayon
)
- Allow skipping default config files (#686)
- Update dependencies (
anyhow
,serde-json
)
- Update dependencies (
serde-json
,serde
,tempfile
,crossbeam-channel
) - Fix
txid
index collision handling (#653) - Use
bitcoincore_rpc
'sgetblockchaininfo
implementation (#656)
- Update dependencies (
anyhow
,serde
,serde_json
,signal-hook
) - Improve p2p receiving metrics (#633)
- Warn on attempt to connect over SSL (#634)
- Disable
index_lookup_limit
by default (#635) - Parse p2p messages in a separate thread (#638)
- Add server loop-related metrics
- Support basic RPC handling during initial sync (#543)
- Update MSRV requirements to Rust 1.48 (#603)
- Bump
env_logger
to 0.9 (#604) - Monitor RocksDB statistics via Prometheus (#605)
- Don't warn when queried with unsubscribed scripthashes (#609)
- Allow skipping merkle proofs' during subscription (#610)
- Remove
verbose
configuration (#615) - Add
curl
toDockerfile
(#624)
- Add a feature to ignore default config files (#396)
- Support Rust 1.48.0 and test on Debian 11 (#455)
- Allow multiple scripthashes' subscription in parallel(#464)
- Ignore
cargo audit
warning intiny_http
(#575) - Re-organize and split documentation (#583)
- Use
/electrs:$VERSION/
in p2p 'user-agent' (#585) - Build rocksdb with conditional SSE support (#595)
- Ignore 'addr' p2p messages (#596)
- Initialize chain height metric (#515)
- Don't shutdown write-side before all responses are sent back (#523)
- Use p2p protocol to replace waitfornewblock hidden RPC (#526)
- Use correct Prometheus buckets for size and duration (#528)
- Don't ignore signals during IBD (#533)
- Expose index DB size as a Prometheus gauge metric (#544)
- Add p2p protocol monitoring (#546)
- Fix contrib/xpub.py support for ypub/zpub keys (#549)
- Rewrite and simplify p2p message receiving thread (#550)
- Re-introduce mempool vsize and txs' count metrics (#557, #562, #563)
- Allow RPC connection before initial sync is over (#558)
IMPORTANT: This release contains major changes, please read carefully!
The four main things to watch out for:
- Database schema changed - this will cause reindex after upgrade.
mainnet
subdirectory was renamed tobitcoin
, you should deletemainnet
after successful reindex.- We now use bitcoin p2p protocol to fetch blocks - some configurations may not work.
- Trace log level now logs much more information - make sure it's not used in production.
See upgrading section of our docs to learn more.
Full list of changes:
- Add electrs logo (#510)
- Prevent panic during logging of p2p messages (#490)
- Don't collect process' Prometheus metrics by default (#492)
- Support initial sync resume (#494)
- Fix incorrect ordering of same-block transactions (#297)
- Change DB index format and use Zstd compression (instead of Snappy)
- The database will be reindexed automatically when it encounters old version (#477)
- Don't use bitcoind JSON RPC for fetching blocks (#373)
- Use p2p protocol for headers and block fetching only.
This is safer than reading
blk*dat
files and faster than JSON RPC. - Support Electrum JSON RPC batching and errors
- Use
rust-bitcoincore-rpc
crate - Increase default
index_lookup_limit
to 200 - Implement 'blockchain.scripthash.listunspent' RPC (#475)
- Update RocksDB to 6.11.4 (#473)
- Allow logging configuration via
RUST_LOG
environment variable (usingenv_logger
)
- Fail if
cookie
is specified (#478) - Move usage in README up and recommend our guide (#463)
- A bunch of improvements to issue templates (#462)
- Update dependencies (#401, #402)
- Add python example in RPC examples (#415, #417)
- Add regtest and signet networks in examples (#425)
- Clippy fixes (#430)
- CI fixes (#437, #438, #441)
- Update relevant versions (#450)
- Drop unused compression algorithms for RocksDB
- Fix JSONRPC errors' handling (#398, #390)
- Optimize Dockerfile (#387, #388, #392)
- Fix signet default port (https://github.com/romanz/electrs/b53178c140e575b0527a70ead566d50c7fe6cb1f)
- Use non-batched RPC to reduce bitcoind memory usage (#373)
- Fix inverted logic of deprecation (#379)
- Ignore individual mempool transaction fetch fails (#381)
- Increase default wait_duration_secs to 10s (#384)
- Deprecate
--cookie
configuration (@Kixunil) - Update dependencies (@Kixunil)
- Improve documentation (@Kixunil)
- Support signet (#239)
- Fix Electrum fee histogram duplicates
- Fix Electrum protocol negotiation
- Update multiple crates (@kixunil): lru, prometheus, dirs-next
- Support Rust 1.41.1 (for Debian stable)
- Update bitcoin crate (@dr-orlovsky)
- Fix a deadlock when shutting down (@kixunil)
- Add a 'blocks_dir' option (@darosior)
- Return fee for unconfirmed transactions history (for Electrum 4.0)
- Handle SIGUSR1 for external notifications
- Update to latest rust-bitcoin (@dr-orlovsky)
- Fix deadlock and refactor RPC threading (@Kixunil)
- Fix memory leak (@champo)
- Downgrade rust-rocksdb to 0.12.2 (#193)
- Allow setting
--cookie-file
path via configuration (@Kixunil) - Bump rust-rocksdb to 0.13.0, using RockDB 6.2.4
- Use
configure_me
instead ofclap
to support config files, environment variables and man pages (@Kixunil) - Don't accept
--cookie
via CLI arguments (@Kixunil) - Define cache size in MB instead of number of elements (@dagurval)
- Support Rust >=1.34 (for Debian)
- Bump rust-rocksdb to 0.12.3, using RockDB 6.1.2
- Bump bitcoin crate to 0.21 (@MichelKansou)
- Allow stopping bulk indexing via SIGINT/SIGTERM
- Cache list of transaction IDs for blocks (@dagurval)
- Support Bitcoin Core 0.18
- Build with LTO
- Allow building with latest Rust (via feature flag)
- Use iterators instead of returning vectors (@Kixunil)
- Use atomics instead of
Mutex<u64>
(@Kixunil) - Better handling invalid blocks (@azuchi)
- Support Rust 1.32 (for Debian)
- Fix crash during initial sync
- Switch to
signal-hook
crate
- Update to Rust 1.34
- Prefix Prometheus metrics with 'electrs_'
- Update RocksDB crate to 0.12.1
- Update Bitcoin crate to 0.18
- Support latest bitcoind mempool entry vsize field name
- Fix "chain-trimming" reorgs
- Serve by default on IPv4 localhost
- Limit query results, to prevent RPC server to get stuck (see
--txid-limit
flag) - Update RocksDB crate to 0.11
- Update Bitcoin crate to 0.17
- Support Rust 2018 edition (1.31)
- Upgrade to Electrum protocol 1.4 (from 1.2)
- Let server banner be configurable via command-line flag
- Improve query.get_merkle_proof() performance
- Update to rust-bitcoin 0.15.1
- Use bounded LRU cache for transaction retrieval
- Support 'server.ping' and partially 'blockchain.block.header' Electrum RPC
- Don't run full compaction after initial import is over (when using JSONRPC)
- Optimize for low-memory systems by using different RocksDB settings
- Rename
--skip_bulk_import
flag to--jsonrpc-import
- Optimize block headers processing during startup
- Handle TCP disconnections during long RPCs
- Use # of CPUs for bulk indexing threads
- Update rust-bitcoin to 0.14
- Optimize block headers processing during startup
- Reconnect to bitcoind only on transient errors
- Poll mempool after transaction broadcasting
- Optimize for low-memory systems
- Improve compaction performance
- Handle disconnections from bitcoind by retrying
- Make
blk*.dat
ingestion more robust - Support regtest network
- Support more Electrum RPC methods
- Export more Prometheus metrics (CPU, RAM, file descriptors)
- Add
scripts/run.sh
for building and runningelectrs
- Add some Python tools (as API usage examples)
- Change default Prometheus monitoring ports
- Allow specifying custom bitcoind data directory
- Allow specifying JSONRPC cookie from commandline
- Improve initial bulk indexing performance
- Support 32-bit systems
- Announcement: https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-July/016190.html
- Published to https://crates.io/electrs and https://docs.rs/electrs