@awemany: I'm the lead dev on it, so yes I'm pretty familiar with it!
https://github.com/btcsuite/btcd/graphs/contributors
Due to that, my answer to your question is going to have some natural inherent bias in it, but basing it on feedback from external contributors, I've heard very few negative things regarding the architecture (the database and addrmgr being the most notable culprits, but as previously mentioned the database is being completely redone currently).
All of the important things are completely modular and btcd itself has no integrated wallet or GUI code to distract from actual core network development.
For an example of the modularity, there is a
wire package for handling the network protocol, a
peer package which builds on top of that to provide the framework for implementing full nodes (btcd itself is built on it), SPV nodes, proxies, etc, a
txscript package which implements the transaction script engine, a
btcec package that implements all of the secp256k1 ECDSA crypto, a
blockchain package which implements all of the chain selection rules and processing, and several others.
In addition, within the btcsuite organization, there are other repos such as the
btcutil repo which provides things like the
base58 package for handling the Bitcoin-specific base58 and base58check encoding, the
bloom package for dealing with Bitcoin-flavor bloom filters, the
hdkeychain package for generating and working with BIP32 hierarchical deterministic keys, the
txsort package for providing transaction sorting according to BIPLI01 for the lightning network, etc.
As you can see by following those package links I provided, all of them are fully documented and the vast majority include examples of how to use the package. There are also an abundance of internal comments within the code to explain what's going on. I should also note the test coverage of the vast majority of the packages is extremely high. For example, the
wire package has 100% coverage, the
btcjson package has 100%, the
btcec package has ~97%, the
txscript package has ~96%, and the
hdkeychain package also has ~96%.
EDIT:
Oh, and since this is a development thread, I thought I should also call out it only takes a few seconds to recompile after changes and getting setup for building from master is super easy. Here is an example of my using 'go get' to download the btcd code and all its deps into a fresh GOPATH and compile everything along with timing information:
Code:
$ ls -al /c/tmpgo
ls: can't access /c/tmpgo: No such file or directory (Showing this is from scratch)
$ export GOPATH=/c/tmpgo
$ time go get -u -v github.com/btcsuite/btcd/...
github.com/btcsuite/btcd (download)
github.com/btcsuite/fastsha256 (download)
github.com/btcsuite/btclog (download)
...
github.com/btcsuite/btcd
real 0m40.411s
$ $GOPATH/bin/btcd -V
btcd version 0.12.0-beta
In summary, that is showing downloading and compiling btcd and all of its dependencies from scratch took ~40 seconds and is a single command.
Once that initial setup is done, 'go build' is able to recompile code changes in a few seconds.