Implementation of Bitcoin's peer-to-peer layer for Node.js
This is an implementation of a Bitcoin node in Node.js. It is intended as a powerful alternative to the standard bitcoind that ships with the original client.
The original client contains the node, wallet, GUI and miner. This library contains a highly optimized version of the node, i.e. the P2P part of Bitcoin. Its main intended use is as a server component to give lighter clients access to the data in the block chain (in real-time.)
But it can also be used for writing other software that requires real-time data from the block chain or wants to run queries against it.
Node.js should be compiled manually based on the latest stable release.
If you wish to use a MongoDB database (most users will want to just use the built-in database), you need to setup a MongoDB server. This can be done using any method.
Once you have all prerequisites, this one-liner will install the latest version straight from NPM:
# Install BitcoinJS Server globallysudo npm install bitcoinjs -g
Please refer to the wiki for detailed installation instructions.
If you run into problems, please take a look at the "Troubleshooting" section below or go to Issues to open a new ticket.
For your first experience with the BitcoinJS daemon, try running it right from the terminal.
bitcoinjs run --testnet --bchdbg
You can find out more about the various functions of the command line utility via the help feature:
# Remove the databasebitcoinjs db-drop# Uninstall the softwaresudo npm uninstall bitcoin-p2p -g
node-bitcoin-p2p logs using the winston library. Currently, it
defaults to logging anything on the
debug log level and higher. Here
are the available log levels:
netdbg- Networking events (sending/receiving messages)
bchdbg- Block chain events (adding blocks)
rpcdbg- JSON-RPC API events (requests/responses)
scrdbg- Script interpreter events (custom scripts, errors)
debug- Other verbose logging
info- General information and status messages
warn- Something rare happened (e.g. strange pubKeyScript)
error- Something bad happened
The XXXdbg levels can be enabled individually by editing
lib/logger.js or via the command line, e.g.
bitcoinjs run --bchdbg.
node-bitcoin-p2p is not only a daemon, but also a Node.js
module/library. In most cases it's best to use the daemon via RPC. But
sometimes you need the extra control that comes with directly linking
to the code.
For details on developing with
node-bitcoin-p2p as a library, take a
look at the Developer Guide on the
When upgrading node-bitcoin-p2p it is a good idea to reset its database:
This won't be necessary once node-bitcoin-p2p is more stable, but for now new versions often break database compatibility, so it's easiest to just reset it.
To run the test suite, please install Vows and run the following command:
vows test/* --spec
The library is currently alpha quality. Here are some things it currently lacks:
On top of that, it could use a lot more documentation, test cases and general bug fixing across the board.
You can find more information on the Issues tab on Github.
If you see this error:
Error: Cannot find module '../build-cc/default/native'
This happens when the native components of node-bitcoin-p2p are not compiled yet.
Go to the node-bitcoin-p2p folder and run:
node-waf configure build
node-bitcoin-p2p - Node.js Bitcoin client
Copyright (c) 2011 Stefan Thomas firstname.lastname@example.org.
Some native extensions are
Copyright (c) 2011 Andrew Schaaf email@example.com
Parts of this software are based on BitcoinJ
Copyright (c) 2011 Google Inc.