The first Bitcoin client in the network's history is bitcoind. It is available under the MIT license for Windows, 32 and 64-bit GNU/Linux-based OSes and Mac OS X.
Prior to version 0.5, this service-provider client used a wxWidgets GUI as its default GUI. It is now instead bundled with Bitcoin-Qt.
See running bitcoind for more detail and an example of the configuration file.
bitcoind is a headless daemon, and also bundles a testing tool for the same daemon. It provides a JSON-RPC interface, allowing it to be controlled locally or remotely. Various commands are made available by the API.
To use locally, first start the program in daemon mode:
- bitcoind -daemon
Then you can use the same program to execute API commands, e.g.:
- bitcoind listreceivedbyaddress 0 true
- bitcoind getbalance
To stop the bitcoin daemon, execute:
- bitcoind stop
- Version 0.4.0 was released for all supported platforms on September 23th, 2011 .
- Version 0.3.24 was released for all supported platforms on July 8th, 2011 .
- Version 0.3.23 was released for all supported platforms on June 13th, 2011 .
- Version 0.3.22 was released for all supported platforms on May 19th, 2011 .
- Version 0.3.20 was released for all supported platforms on February 21st, 2011.
Theory of Operation
bitcoind is a multithreaded C++ program. It is designed to be portable across Windows, Mac, and Linux systems. The multithreaded aspect leads to some complexity and the use of certain code patterns to deal with concurrency that may be unfamiliar to many programmers. Also, the code is aggressive in the use of C++ constructs, so it will help to be fluent with map, multimap, set, string, vector, iostream, and templates. As is typical of a C++ program, a lot of code tends to end up in the header files so be sure to search both the .cpp and .h files when looking for a function.
The client is oriented around several major operations, which are described in separate detailed articles and summarized in the following sections.
Upon startup, the client performs various initialization routines including starting multiple threads to handle concurrent operations.
The client uses various techniques find out about other bitcoin nodes that may exist.
The client initiates and maintains connections to other nodes.
The client processes messages from other nodes and sends messages to other nodes using socket connections.
Nodes advertise their inventory of blocks to each other and exchange blocks to build block chains.
Nodes exchange and relay transactions with each other. The client associates transactions with bitcoin addresses in the local wallet.
The client can create transactions using the local wallet. The client associates transactions with bitcoin addresses in the local wallet. The client provides a service for managing the local wallet.
The client offers an JSON-RPC interface over HTTP over sockets to perform various operational functions and to manage the local wallet.