pynode
pynode copied to clipboard
Bitcoin P2P router, in python
This python script (node.py) is a client node for the bitcoin network. It is based on ArtForz' public domain half-a-node at http://pastebin.com/ZSM7iHZw
In its current form, node.py does nothing more than listen for new transactions and blocks, perform verification checks on the data, and store them in a database. Script verification is a separate, manual process (testscript.py). It is therefore not safe for general use. See BUGS and TODO files. A simple HTTP server for JSON-RPC API calls is also included. Send the "help" RPC call for a list of supported commands.
It might be useful as the base for a P2P monitoring node, or similar tasks.
Dependencies:
python-bitcoinlib, https://github.com/jgarzik/python-bitcoinlib
GEvent, http://www.gevent.org/
python-leveldb, http://code.google.com/p/py-leveldb/
Command line usage:
./node.py my-config-file
The configuration file is a key=value text file, with the following settings:
# hostname or IP address of network node to connect to
host=127.0.0.1
# port of network node to connect to (default: 8333)
port=8333
# JSON-RPC server user, password. Uses HTTP Basic authentication.
rpcuser=XXXX
rpcpass=YYYY
# JSON-RPC server incoming TCP port (default: 9332)
rpcport=9332
# database directory
db=/tmp/chaindb
# log filename, or '-' or no-value for standard output
log=/tmp/chaindb/node.log
# if present, import these blocks into the block database
loadblock=/tmp/blk0001.dat
# if present, disable all signature checking in new blocks
# (disabled by default)
nosig=1
# if present, force signature checking on all blocks,
# even those normally skipped because they were prior
# to a checkpoint.
# (disabled by default)
forcesig=1
node.py connects to a single remote node, and does not accept incoming P2P connections. If the connection is lost, node.py exits.
See the "mini-node" branch for a single-file, non-chaindb node.