A lightweight wallet indexer for Bitcoin, available as an Electrum RPC server and a modern HTTP REST API.
Allow specifying an explicit script type for xpubs using -x <xpub>:wpkh
, -x <xpub>:shwpkh
or -x <xpub>:pkh
.
Fix blockchain.block.headers
sending wrong number of headers (#87, thanks @stevenroose!)
Check testmempoolaccept prior to custom broadcast (#80)
Dependency updates and various small enhancements
Also see the v0.2.4 releases for bwt-electrum-plugin, libbwt, libbwt-nodejs and libbwt-jni.
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on the PGP WoT, github, twitter, keybase, hacker news and this video presentation.
# Download (change x86_64-linux to your platform)
$ wget https://github.com/bwt-dev/bwt/releases/download/v0.2.4/bwt-0.2.4-x86_64-linux.tar.gz
# Fetch public key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/bwt-dev/bwt/releases/download/v0.2.4/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.2.4-x86_64-linux.tar.gz$' | sha256sum -c -
$ tar zxvf bwt-0.2.4-x86_64-linux.tar.gz
$ ./bwt-0.1.5-x86_64-linux/bwt --xpub <xpub> ...
The signature verification should show Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.2.4-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.2.4 builds on Travis CI: https://travis-ci.org/github/bwt-dev/bwt/builds/764306060
See more details here.
New --prune-until <target>
option to automatically prune the chain up to the given target (height, unix timestamp or YYYY-MM-DD formatted date)
Require configuring bitcoind with prune=1
to allow manual pruning via the RPC.
New --no-wait-sync
option to allow importing addresses without waiting for bitcoind to finish syncing first
Useful for tracking wallets during the IBD of a pruned node, so transactions could be indexed before the blocks get pruned.
Fix compatibility with the upcoming v0.22 Bitcoin Core release (https://github.com/sparrowwallet/sparrow/issues/67#issuecomment-791522237)
HTTP: Set the WWW-Authenticate
header to make logging-in possible via web browsers
Implement an fd-based daemon readiness notification mechanism, enabled with FD_NOTIFY=<fd>
Fix whitepaper extractor
UX touchups for progress indicator, welcome banner and logs
Allow setting UNIX_LISTENER_MODE
to control permissions for the unix socket notification listener
Allow setting NO_REQUIRE_ADDRESSES
as an env variable
Breaking CLI changes:
--electrum-socks-auth
,
in addition to enabling the --auth-*
options. By default, authentication will only be enabled for
the HTTP API server.Also see the v0.2.3 releases for bwt-electrum-plugin, libbwt, libbwt-nodejs and libbwt-jni.
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on the PGP WoT, github, twitter, keybase, hacker news and this video presentation.
# Download (change x86_64-linux to your platform)
$ wget https://github.com/bwt-dev/bwt/releases/download/v0.2.3/bwt-0.2.3-x86_64-linux.tar.gz
# Fetch public key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/bwt-dev/bwt/releases/download/v0.2.3/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.2.3-x86_64-linux.tar.gz$' | sha256sum -c -
$ tar zxvf bwt-0.2.3-x86_64-linux.tar.gz
$ ./bwt-0.1.5-x86_64-linux/bwt --xpub <xpub> ...
The signature verification should show Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.2.3-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.2.3 builds on Travis CI: https://travis-ci.org/github/bwt-dev/bwt/builds/763199070
See more details here.
Authentication support for the Electrum and HTTP API servers (#70)
Compatibility with Bitcoin Core v0.21 (#78)
Support for Signet
New GET /bitcoin.pdf
HTTP API endpoint for extracting the Bitcoin whitepaper from the block chain
(https://twitter.com/shesek/status/1352368296553836544)
New --create-wallet-if-missing
option to ease the creation of a designated bitcoind wallet (#76)
Docker: Multi-arch images for amd64, arm32v7 and arm64v8 (#79)
Indexer: Fix detection of conflicted mempool transactions
Support setting boolean options using environment variables
(FORCE_RESCAN
, CREATE_WALLET_IF_MISSING
, ELECTRUM_SKIP_MERKLE
, NO_STARTUP_BANNER
and VERBOSE
)
Accept wildcard envirnoment variables for options that accept multiple values
(XPUB_*
, DESC_*
/DESCRIPTOR_*
and ADDRESS_*
)
Upgrade to rust-bitcoin v0.26.0, rust-miniscript v5.0.1 and bitcoincore-rpc v0.13.0
Also see the v0.2.2 releases for bwt-electrum-plugin, libbwt, libbwt-nodejs and libbwt-jni.
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on the PGP WoT, github, twitter, keybase, hacker news and this video presentation.
# Download (change x86_64-linux to your platform)
$ wget https://github.com/bwt-dev/bwt/releases/download/v0.2.2/bwt-0.2.2-x86_64-linux.tar.gz
# Fetch public key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/bwt-dev/bwt/releases/download/v0.2.2/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.2.2-x86_64-linux.tar.gz$' | sha256sum -c -
$ tar zxvf bwt-0.2.2-x86_64-linux.tar.gz
$ ./bwt-0.1.5-x86_64-linux/bwt --xpub <xpub> ...
The signature verification should show Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.2.2-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.2.2 builds on Travis CI: https://travis-ci.org/github/bwt-dev/bwt/builds/756663238
See more details here.
Migrated to the @bwt-dev github org and split up into:
bwt, bwt-electrum-plugin, libbwt, libbwt-jni and libbwt-nodejs.
Java Native Bindings for libbwt
(libbwt-jni, #73)
Support for tracking standalone addresses (#14)
Using --address <address>
or --address-file <path>
.
New config options: force_rescan
(9e7ccbe), setup_logger
(35fc49f) and require_addresses
(162790d)
Gracefully wait for bitcoind to warm-up (dec6d46)
Support for android_logger
(74b2b2f)
Scrub bitcoin authentication from logs (c31def7)
Improved syncing/scanning progress updates (faba3f, 6e282fd, fdd46f3, 5ba2a0b)
Indexer: Fix excessive importing/rescanning (a20ae79)
Indexer: Fix cache invalidation for spends lookups (360eaee)
Indexer: Fix handling of missing mempool entries (e9b7511)
Electrum: Fix TCP listener not shutting down on shutdown signal (5bd639a)
Docker/CI: Update to Rust v1.49 (5bd639a)
Breaking CLI changes:
--bare-xpub
option was removed. Use a descriptor instead.Also see the v0.2.1 releases for bwt-electrum-plugin, libbwt, libbwt-nodejs and libbwt-jni.
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on the PGP WoT, github, twitter, keybase, hacker news and this video presentation.
# Download (change x86_64-linux to your platform)
$ wget https://github.com/bwt-dev/bwt/releases/download/v0.2.1/bwt-0.2.1-x86_64-linux.tar.gz
# Fetch public key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/bwt-dev/bwt/releases/download/v0.2.1/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.2.1-x86_64-linux.tar.gz$' | sha256sum -c -
$ tar zxvf bwt-0.2.1-x86_64-linux.tar.gz
$ ./bwt-0.1.5-x86_64-linux/bwt --xpub <xpub> ...
The signature verification should show Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.2.1-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.2.1 builds on Travis CI: https://travis-ci.org/github/bwt-dev/bwt/builds/754451937
See more details here.
Descriptor based tracking! β¨π (#1)
You can now specify output script descriptors to track via --descriptor <descriptor>
. Descriptors are also used internally to represent user-provided --xpub
s.
The HTTP API was updated to be fully descriptor-based. Wallets and wallet origins are now identified by the descriptor checksum, addresses have descriptors associated with them, and a new bip32_origins
field is available based on the descriptor origin information.
Support for Electrum multi-signature wallets (#60)
For a manual server setup, this requires using the sortedmulti()
descriptor. For example, for a 2-of-3 wallet: sortedmulti(2,xpub1...,xpub2...,xpub3...)
.
With the Electrum plugin, this should Just Workβ’.
Alpha release of libbwt
(#64), a C FFI interface for managing the bwt servers, and of nodejs-bwt-daemon
(#65), a nodejs package that wraps it.
Support non-wallet transactions in blockchain.transaction.get
/ GET /tx/:txid/hex
(requires txindex and no pruning)
Emit wallet rescan and blockchain sync progress updates (via mpsc, ffi and the console)
Support binding on ephemeral port (e.g. --http-addr 127.0.0.1:0
) (#63)
Reduce the number of dependencies (#61)
Shutdown cleanly, via SIGINT
/SIGTERM
for CLI or a custom signal for library users (#62, #66)
HTTP: Alias GET /txs/since/0
as GET /txs
Fix blockchain.scripthash.listunspent
/ Query::list_unspent
to return an empty set instead of erroring when there's no history.
Electrum: Fix mempool.get_fee_histogram
(5af7bfc62d7d98)
Upgrade to rust-bitcoin v0.25, rust-miniscript v4.0.0 and rust-bitcoincore-rpc v0.12
Breaking CLI changes:
The -d
CLI option was changed to mean --descriptor
instead of --bitcoind-dir
(which is now available as -r
).
Renamed --http-server-addr
to --http-addr
and --electrum-rpc-addr
to --electrum-addr
The CLI now accepts a single --rescan-since
timestamp instead of a separate one for each descriptor/xpub.
The separator for environment variables with multiple values is now ;
instead of ,
.
For example: DESCRIPTORS="wpkh(xpub../0/*);wpkh(xpub../1/*)"
Full Server 1 | Electrum Server 2 | Electrum Plugin 3 | |
---|---|---|---|
Linux | π₯ Download | π₯ Download | π₯ Download |
macOS | π₯ Download | π₯ Download | π₯ Download |
Windows | π₯ Download | π₯ Download | π₯ Download |
ARMv7 | π₯ Download | π₯ Download | π₯ Download |
ARMv8 | π₯ Download | π₯ Download | π₯ Download |
1 Includes Electrum RPC, HTTP API and WebHooks support (learn more) 2 Includes Electrum RPC support only (learn more) 3 Plugin with an embedded RPC server - hot wallets are unsupported (learn more) |
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on keybase, github, twitter and HN. The signature can be verified as follows (replace x86_64-linux
with your download):
# Download package
$ wget https://github.com/shesek/bwt/releases/download/v0.2.0/bwt-0.2.0-x86_64-linux.tar.gz
# Fetch signing key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/shesek/bwt/releases/download/v0.2.0/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.2.0-x86_64-linux.tar.gz$' | sha256sum -c -
You should see Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.2.0-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.2.0 builds on Travis CI: https://travis-ci.org/github/shesek/bwt/builds/745668826
See more details here.
Reproducible builds using Docker (#51)
Pre-built binary releases for macOS (#24) and ARMv7/v8 (#19)
Electrum plugin: Compatibility with Electrum v4 β except for lightning which is tricky with personal servers (#53)
Electrum: New welcome banner (#44)
Scriptable transaction broadcast command via --tx-broadcast-cmd <cmd>
(#7)
The command will be used in place of broadcasting transactions using the full node, which may provide better privacy in some circumstances. The string {tx_hex}
will be replaced with the hex-encoded transaction.
For example, to broadcast transactions over Tor using the blockstream.info onion service, you can use:
--tx-broadcast-cmd '[ $(curl -s -x socks5h://localhost:9050 http://explorerzydxu5ecjrkwceayqybizmpjjznk5izmitf2modhcusuqlid.onion/api/tx -d {tx_hex} -o /dev/stderr -w "%{http_code}" -H "User-Agent: curl/7.$(shuf -n1 -e 47 58 64 68).0") -eq 200 ]'
(Replace port 9050
with 9150
if you're using the Tor browser bundle.)
h/t @chris-belcher's EPS for inspiring this feature! π©
Load bitcoind wallet automatically (#54)
Electrum plugin: Fix hot wallet test (#47)
Electrum: Fix docker image libssl dependency with the http
feature (#48)
Improve block download check on regtest (#45, #35)
HTTP API: Fix GET /block/tip
(#46)
HTTP API: Add GET /banner.txt
(#44)
Tests: Upgrade to Electrum v4
Full Server 1 | Electrum Server 2 | Electrum Plugin 3 | |
---|---|---|---|
Linux | π₯ Download | π₯ Download | π₯ Download |
macOS | π₯ Download | π₯ Download | π₯ Download |
Windows | π₯ Download | π₯ Download | π₯ Download |
ARMv7 | π₯ Download | π₯ Download | π₯ Download |
ARMv8 | π₯ Download | π₯ Download | π₯ Download |
1 Includes Electrum RPC, HTTP API and WebHooks support (learn more) 2 Includes Electrum RPC support only (learn more) 3 Plugin with an embedded RPC server - hot wallets are unsupported (learn more) |
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on keybase, github, twitter and HN. The signature can be verified as follows (replace x86_64-linux
with your download):
# Download package
$ wget https://github.com/shesek/bwt/releases/download/v0.1.5/bwt-0.1.5-x86_64-linux.tar.gz
# Fetch signing key
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
# Verify signature
$ wget -qO - https://github.com/shesek/bwt/releases/download/v0.1.5/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.1.5-x86_64-linux.tar.gz$' | sha256sum -c -
You should see Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.1.5-x86_64-linux.tar.gz: OK
.
The builds are fully reproducible.
You can verify the checksums against the v0.1.5 builds on Travis CI: https://travis-ci.org/github/shesek/bwt/builds/732966695
See more details here.
Implement improved mempool tracking, including support for an "effective feerate" metric that takes unconfirmed ancestors into account, calculated as MIN(own_fee/own_vsize, (own_fee+ancestor_fee)/(own_vsize+ancestor_vsize))
.
HTTP API: the wallet transaction format now includes new own_feerate
, effective_feerate
, bip125_replaceable
and unconfirmed_parents
fields available for unconfirmed transactions.
Electrum server: provide fee information for unconfirmed transactions using the effective feerate metric. This is unlike other Electrum server implementations, that report the direct own fee without regard to ancestors. (#10)
Electrum server: Implement --electrum-skip-merkle
to save some resources by not generating SPV proofs entirely, even when it's possible. (#34)
Electrum plugin: Automatically enable --skipmerklecheck
and --electrum-skip-merkle
, for better out-of-the-box pruning support and to save some resources. (#34)
Indexer: Use listsinceblock
instead of listtransactions
. This makes syncing more bandwidth-efficient and simplifies the implementation. (#33)
Electrum server: Optimize dispatching notifications to subscribers.
Electrum server: Use height of -1 to indicate that a transaction has unconfirmed parents as its inputs. (#40)
Electrum plugin: Disable support for hot wallets.
Make rust builds 65% faster (#15, 8e785cbb2dc63ce599a2f65d3d5a162da9a52b8c)
Installation instructions are available on the README.
The releases are signed by Nadav Ivgi (@shesek). The public key can be verified on keybase, github, twitter and HN. The signature can be verified as follows (replace x86_64-linux
with your download):
# Download package
$ wget https://github.com/shesek/bwt/releases/download/v0.1.4/bwt-0.1.4-x86_64-linux.tar.gz
# Verify signatures
$ gpg --keyserver keyserver.ubuntu.com --recv-keys FCF19B67866562F08A43AAD681F6104CD0F150FC
$ wget -qO - https://github.com/shesek/bwt/releases/download/v0.1.4/SHA256SUMS.asc \
| gpg --decrypt - | grep ' bwt-0.1.4-x86_64-linux.tar.gz$' | sha256sum -c -
You should see Good signature from "Nadav Ivgi <[email protected]>" ... Primary key fingerprint: FCF1 9B67 ...
and bwt-0.1.4-x86_64-linux.tar.gz: OK
.
The Electrum plugin is available for download for Linux and Windows, as the electrum_plugin
package.
β οΈ NOTE: The plugin supports watch-only wallets only and cannot be used with hot wallets. This is done as a security measure, which is expected to eventually be relaxed. You can use the plugin with hardware wallets or with an offline Electrum setup. For hot wallets, you will need to setup a standalone server instead of using the plugin, ideally away from your keys.
--skipmerklecheck
option.Electrum plugin: restore the previous oneserver
setting when the plugin is disabled,
to prevent users from inadvertently connecting to public Electrum servers with this setting still on.
Electrum plugin: allow specifying additional custom CLI arguments using the GUI
Electrum plugin: check for permissions before attempting the bind the real-time sync unix socket.
Make builds over 40% smaller by stripping symbols, which rust apparently doesn't do for release builds. Thanks @elichai for brining this to my attention.