Welcome btcsuite/btcd Users!

davecgh

Member
Nov 30, 2015
28
51
Quick Links: (Github btcsuite Organization) (Github btcd repo)(btcd Installation)(btcwallet repo)
Developer Docs Quick Links: (btcd JSON-RPC API)
Developer Core Package Docs Quick Links: (wire)(peer)(txscript)(btcec)(blockchain)(btcjson)
Developer Utility Package Docs Quick Links: (btcutil)(base58)(hdkeychain)(bloom)


First, I want to thank Bloomie for creating this forum for btcsuite/btcd. It should serve well to discuss things related to btcsuite such as issues, feature requests and development directions. Please don't hesitate to start new threads if you have an issues or questions.

For those not familiar with the project, here are a few frequently asked questions:

What is btcsuite?

The entire btcsuite project consists a set of repositories of packages and code designed to provide a high quality, well tested, set of code and tools for Bitcoin in Go.

Why is the project being developed?

The main reason we started the project and continue to develop it is because we are extremely unhappy with the current effective monoculture that exists in the Bitcoin ecosystem and the general belief (as bad as it still is today, it was even worse back in early 2013 when we started) that there has to be "the one true implementation". We firmly believe that having multiple independent implementations is of paramount importance for the Bitcoin ecosystem to thrive. History has shown over and over that monocultures do not fare well in the long run. Since the majority of the network is currently all running the same implementation, all it would take right now is one major bug to effectively take down the entire network until it is resolved.

The entire btcsuite project is open source and is not being developed for profit. All of the code generated by it is licensed with the copyfree ISC license.


What is btcsuite/btcd?

The btcd repository provides a from scratch full node implementation that is a fully functional alternative to the current majority implementation Bitcoin Core. It has been in production use since around December of 2013 and is in a Beta state. It has proven to be extremely stable.

One key difference between btcd and Bitcoin Core is that btcd does NOT include wallet functionality and this was a very intentional design decision. The focus of btcd is solely to faithfully validate the block chain and provide real-time access to the data via JSON-RPC over Websockets or HTTP. There is no GUI or wallet code in the repository to distract from the core network features and development.


What is btcsuite/btcwallet?

The btcwallet repository provides a daemon that interacts with btcd in order to provide a wallet with full BIP44 account support. This is currently in alpha and under development including a separate GUI which is not yet public. While the code that is there works decently well, the wallet is still quite early and not recommended for production use yet as the alpha classification indicates. There are several things planned such as multi keychain support (as mentioned BIP44 accounts are already supported, but only with a single keychain), SPV support, and BIP47 payment codes support.


Thanks for your interest. I will make an effort to keep this post up-to-date with the most recent developments.
 
Last edited:

davecgh

Member
Nov 30, 2015
28
51
For those following development, the majority of the focus for current development efforts are towards the following PRs and areas. For the PRs, I've provided a quick summary of each, but the PRs themselves have a lot more details:

  • https://github.com/btcsuite/btcd/pull/380
    Complete rewrite of the underlying database and relevant interfaces to address scability and make development of other backends easier.

  • https://github.com/btcsuite/btcd/pull/491
    Reworks the upper layers to work with the new database and provide significant optimizations made possible by #380.

  • https://github.com/btcsuite/btcd/pull/573
    Revamps the address index to make use of the new database and chain features of #380 and #491 and improve efficiency.

  • https://github.com/btcsuite/btcd/pull/492
    Replaces the old database along with all of the new code provided by #380, #491, and #492.

  • Improvements to headers-first syncing
    While btcd has already supported headers-first syncing since version 0.5.0-alpha, it currently only uses that mode up until the final checkpoint. Our goal is to extend this capability beyond the final checkpoint

  • Refactor the memory pool code into a separate package
    The current code which deals with the transaction memory pool is fairly tightly integrated into the main server code. We plan to refactor this out into a separate package which will greatly improve its testability, allow independent benchmarking and profiling, and open up some interesting opportunities for future development related to the memory pool.

  • Refactor the mining code into a separate package
    Much like the memory pool, the current code which deals with providing mining-related functionality, such as generating block templates and creating new blocks, is fairly tightly integrated into the main server and memory pool code. By separating this out into an independent package, many of the same benefits mentioned for the memory pool apply here as well.

  • Several improvements to the memory pool
    The current memory pool is not limited which can lead to it consuming massive amounts of memory. While on the surface it might seem simple to limit it to a specific number of entries, there are several factors that need to taken in account such as priority, fees, dependencies on other transactions, and general fairness to all involved parties.