This release contains stability fixes, docker update and a new RPC call
blockchain.utxo.get
.
The RPC call gives you data on a existing UTXO, or a UTXO that existed at some point. If the output is spent, information about the spender is provided. This allows a SPV client to call blockchain.transaction.get_merkle to generate a merkle branch, proving that it is spent.
This project is moving to GitLab, as voted on in BUIP091. More info on this soon.
- [bug] Error handling at client connect (#133)
- [bug] Fix Dockerfile build issues (by SuperCipher, #138)
- [bug] Ignore individual mempool transaction when fetch fails (#141)
- [maintainance] Clippy (linter) updates for newer Rust versions (#135, #139)
- [maintainance] Use tx outpoint struct from
bitcoincash
crate (#136) - [misc] Avoid configuration footguns (#141)
- [misc] Rename
cookie
parameter toauth
(#141) - [rpc] Add RPC
blockchain.utxo.get
(#137) - [rpc] Improved error message for invalid parameters (#137)
This version completes implementation of
Protocol version 1.4.3. In addition
a custom call blockchain.transcation.get_confirmed_blockhash
has been added to utilize the transaction index. This can replace bitcoind
txindex for those who want to optimize disk space.
WebSocket support has been added. As part of testing it, it has been used to power the flipstarter overview site and receipt generator applications.
Support for Scalenet and Testnet4 has been added.
A bunch new metrics have been added, including rpc connections, memory usage and cache churn + more. See stats.bitcoincash.network for demo with all metrics.
The blockchain.transcation.get
got a full overhaul and test coverage. It now
supports all fields as bitcoind. It is more consistent than bitcoind, as
every implementation (BU, BCHN, ...) has its quirks and in addition remove/add
fields depending on various transaction properties, such as if it's coinbase,
unconfirmed etc. ElectrsCash never removes or adds a field.
This is a major version release, which implies breaking changes. Please see below.
- [bug] Fix compatibility with Bitcoin ABC (#93)
- [bug] Fix issue "fee must be in decreasing order" (#98)
- [dos] Add RPC connection limit (#113)
- [dos] Limit connections by IP prefix (#114)
- [dos] Add scripthash subscription limit (#107)
- [maintainance] Bump crate dependencies and replace abandoned crates (#118)
- [maintainance] Remove batch fetching of unconfirmed transactions (#117)
- [maintainance] Remove use of
mut self
in rpc blockchain (#122) - [maintainance] Replace use of
bitcoin_hashes
crate withbitcoincash
(#97) - [maintainance] Split out responsibility of Query (#116)
- [maintainance] Use prometheus imports (#100)
- [metrics] Add metric
electrscash_process_jemalloc_allocated
(#104) - [metrics] Add metric
electrscash_process_jemalloc_resident
(#104) - [metrics] Add metric
electrscash_rockdb_mem_readers_total
(#103) - [metrics] Add metric
electrscash_rockdb_mem_table_total
(#103) - [metrics] Add metric
electrscash_rockdb_mem_table_unflushed
(#103) - [metrics] Add metric
electrscash_rpc_connections_rejeced_global
(#125) - [metrics] Add metric
electrscash_rpc_connections_rejeced_prefix
(#125) - [metrics] Add metric
electrscash_rpc_connections_total
(#125) - [metrics] Add metric
electrscash_rpc_connections
(#125) - [misc] Add WebSocket support (#109)
- [misc] Add testnet4 and scalenet support (#130)
- [misc] Remove --txid-limit (#106)
- [misc] Support more argument datatypes in python cli (#95)
- [misc] Update confiration defaults (#124)
- [misc] Use random eviction cache (#101)
- [performance] Change semantics of index-batch-size (#121)
- [performance] Store statushashes as FullHash (#105)
- [performance] Use generators with
load_txns_by_prefix
(#126) - [performance] Use parallel iter for finding inputs/outputs (#127)
- [rpc] Add RPC
blockchain.address.get_mempool
(#120) - [rpc] Add RPC
blockchain.address.subscribe
andblockchain.address.unsubscribe
. (#108) - [rpc] Add RPC
blockchain.scripthash.get_mempool
(#120) - [rpc] Add RPC
blockchain.transaction.get_confirmed_blockhash
(#96) - [rpc] Improve likeness with bitcoind getrawtransaction (#119, #128, #129)
- [rpc] Make height optional in
transaction.get_merkle
(#111)
The default listening interfaces for the RPC has been changed from localhost to all interfaces. The WebSocket interface also listens on all interfaces.
This projects goal is to be a high performant public Electrum server. Unlike this projects predecessor, which aims to be a private server on your local machine.
The --txid-limit
DoS parameter is removed. Please use --rpc-timeout
parameter instead for more accurate DoS limit.
For backward compatibility with existing configurations, this argument still exists but now does nothing. It will be completely removed in next major version of ElectrsCash.
tldr; The value
field in the vout
entries of verbose transaction output is
replaced with value_satoshis
and value_coins
. It used to be in satoshis.
The value
field will be reintroduced in later version of ElectrsCash
in unit coins rather than satoshis (satoshis / 100 000 000).
Details: The verbose output of blockchain.transaction.get
is implemented
in ElectrsCash, rather than forwarded to the bitcoind node as stated in the
specification. This is a massive performance increase, as the transaction is
often in the local cache.
It was discovered that the value
of vout
entries were in satoshis, compared
to bitcoind where it is in coins (satoshis / 100 000 000). While satoshis is
more consistent with the rest of the electrum specification, it is incorrect
as the specification for this RPC call is to output "whatever bitcoind outputs".
Rather than simply changing the unit of the field at the risk of software that
we don't know of using this field silently failing, it has been temporarily
removed to allow such software to properly fail and corrected. The value
field will be re-added in a later version of ElectrsCash.
- [bug] Fix deadlock on Ctrl+C (#89)
- [bug] Update subscription statistics correctly (#89)
- [contrib] Add generic client for testing RPC methods (#83)
- [misc] Add a 'blocks-dir' option analogous to bitcoind's '-blocksdir' (#89)
- [misc] Add configuration
wait-duration-secs
to set custom main loop wait duration - [misc] External notification of block update via SIGUSR1 (#78)
- [misc] Improve rpc timeout trigger (#81)
- [misc] Log progress while waiting for IBD (#76)
- [misc] Switch from
bitcoin
crate dependency tobitcoincash
(#88) - [rpc] Add
blockchain.address.get_balance
(#72) - [rpc] Add
blockchain.address.get_first_use
- [rpc] Add
blockchain.address.get_first_use
(#72) - [rpc] Add
blockchain.address.get_history
(#72) - [rpc] Add
blockchain.address.get_scripthash
(#85) - [rpc] Add
blockchain.address.listunspent
(#72) - [rpc] Add
blockchain.scripthash.unsubscribe
(#71) - [rpc] Show fee for unconfirmed transactions (#89)
- [rpc] Update
blockchain.scripthash.get_first_use
This release contains an RPC optimization that requires Bitcoin Unlimited v1.9 or BCHN v22.0.0 and will not work with older versions.
- [bug] Fix protocol-negotiation in
server.version
response (#61) - [bug] Fix dropped notification due to full client buffer (#60)
- [bug] Reduce log level on client errors (#64)
This is a bug-fix only release. No breaking changes.
- [bug] Don't index cashaccounts before activation height
- [misc] Add database version and reindex on incompatible database.
- [misc] Allow loading config file from specified place via
--conf
- [misc] Allow setting
--cookie-file
path via configuration - [misc] Clean up RPC threads after connection is closed
- [misc] Setting
--network
now takesbitcoin
instead ofmainnet
as parameter - [performance] Better Cashaccount memory handling.
- [performance] Better client subscription change detection
- [performance] Better db indexes for faster scripthash lookups.
- [performance] Better transaction caching.
- [qa] Script for running integration tests.
- [rpc] Add RPC timeouts (DoS mitigation)
- [rpc] Bump protocol version to 1.4.1
- [rpc] Identify transactions with unconfirmed parents
- [rpc] Implement
blockchain.scripthash.get_first_use
RPC method. - [rpc] Implement
server.features
RPC method. - [rpc] Improved error messages with error codes.
- [rpc] Return error on unknown method rather than disconnecting the client.
- [rpc] Use bitcoind's relay fee rather than hardcoded.
Note: This release has database changes incompatible with previous versions. At first startup after the upgrade, ElectrsCash will do a full reindex.
- Cache capacity is now defined in megabytes, rather than number of entries.
- Support Rust >=1.34
- Use
configure_me
instead ofclap
to support config files, environment variables and man pages (@Kixunil) - Revert LTO build (to fix deterministic build)
- Allow stopping bulk indexing via SIGINT/SIGTERM
- Cache list of transaction IDs for blocks
- Prefix Prometheus metrics with 'electrscash_'
- 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