I can also recommend you have a look at libcoin:
https://github.com/ceptacle/libcoin/wikilibcoin is a radical refactoring of bitcoin, turning all the basic stuff into a chain agnostic library. All the global variables are gone and so is the untraditional multithreading stuff and the strong coupling to a specific chain (aka bitcoin). It is highly modular, and you can easily build extensions - like e.g. run with two wallets.
libcoin comes with two applications:
* bitcoind - which is a 100% bitcoind compatible clone - just based on libcoin - it can be up to 3.5 times faster in initial chain download and is much faster and reliable when it comes to serving RPC.
* coinexplorer - a block explorer running on your machine - this enables you to query transactions that are not in you wallet, and to query addresses and see their entire history - just like blockexplorer.org.
There are also a handful of examples e.g. the simple client - write a full bitcoin client in 20 lines of code - see below.
I should note that libcoin is production quality software - I have heavily loaded servers running rock stable for weeks.
Cheers,
Michael
int main(int argc, char* argv[])
{
Node node; // deafult chain is bitcoin
Wallet wallet(node); // add the wallet
thread nodeThread(&Node::run, &node); // run this as a background thread
Server server;
// Register Server methods.
server.registerMethod(method_ptr(new Stop(server)));
// Register Node methods.
server.registerMethod(method_ptr(new GetBlockCount(node)));
server.registerMethod(method_ptr(new GetConnectionCount(node)));
server.registerMethod(method_ptr(new GetDifficulty(node)));
server.registerMethod(method_ptr(new GetInfo(node)));
// Register Wallet methods. - note that we don't have any auth, so anyone (on localhost) can read your balance!
server.registerMethod(method_ptr(new GetBalance(wallet)));
server.registerMethod(method_ptr(new SendToAddress(wallet)), Auth("username","password"));
server.run();
node.shutdown();
nodeThread.join();
}