Last week saw the 0.5.0-alpha release (and a 0.5.1-alpha bugfix release) of btcwallet, our Bitcoin wallet daemon. This release was largely focused on architectural changes for improved security, privacy, and performance. Highlights of the release include a new wallet database and the introduction of a hierarchical deterministic address manager.
With the introduction of a new wallet database package (walletdb), we have begun the process phasing out btcwallet’s old flat file databases. Flat files worked well initially to get development off the ground quickly, but suffered from long I/O write times and excessive memory usage from leaving the entire database in memory. The new database package provides an interface heavily inspired by the excellent bolt project, as well as a bolt database driver, to provide several key/value stores for many wallet components, each given their own namespace.
The new address manager package (waddrmgr) is the first to use the new wallet database. It replaces the Armory-style wallet file with a new hierarchical deterministic (BIP0032) wallet backed by the hdkeychain package, using the HD path described by BIP0044. In addition to encrypting private keys, the package also provides optional encryption of public data such as public keys and addresses to prevent an attacker from gaining knowledge of both current and future addresses in case of a compromised wallet file. This feature is especially useful for users who do not use encrypted filesystems, but requires the entry of the public passphrase each time btcwallet is started.
Many more changes are planned in the upcoming months. For next release, we plan to finish the conversion of the old txstore package to walletdb. Beyond that release, the following items are being considered:
- Simplified Payment Verification (SPV) mode
- Accounts support (subwallets)
- New, consistent client API to encourage better practices such as single use addresses
- Separating core wallet transaction and syncing logic from the daemon into a new package for use in other binaries
Each of these items could be a blog post of their own, and will be explained in more detail as they are implemented and released.
Our goal for btcwallet is to create a flexible wallet for many kinds of users and situations (e.g. personal, business, or backends) while never compromising on security and privacy. If this sounds interesting and you would like to help with development, check out the project on Github or chat with us on IRC.