README

dcrd

Build Status ISC License GoDoc

dcrd is a Decred full node implementation written in Go (golang).

This acts as a chain daemon for the Decred cryptocurrency. dcrd maintains the entire past transactional ledger of Decred and allows relaying of transactions to other Decred nodes across the world. To read more about Decred please see the project documentation.

Note: To send or receive funds and join Proof-of-Stake mining, you will also need dcrwallet.

This project is currently under active development and is in a Beta state. It is extremely stable and has been in production use since February 2016.

It is forked from btcd which is a bitcoin full node implementation written in Go. btcd is a ongoing project under active development. Because dcrd is constantly synced with btcd codebase, it will get the benefit of btcd's ongoing upgrades to peer and connection handling, database optimization and other blockchain related technology improvements.

Requirements

Go 1.9 or newer.

Getting Started

  • dcrd (and utilities) will now be installed in either $GOROOT/bin or $GOPATH/bin depending on your configuration. If you did not already add the bin directory to your system path during Go installation, we recommend you do so now.

Updating

Windows

Install a newer MSI

Linux/BSD/MacOSX/POSIX - Build from Source
  • Dep

    Dep is used to manage project dependencies and provide reproducible builds. To install:

    go get -u github.com/golang/dep/cmd/dep

Unfortunately, the use of dep prevents a handy tool such as go get from automatically downloading, building, and installing the source in a single command. Instead, the latest project and dependency sources must be first obtained manually with git and dep, and then go is used to build and install the project.

Getting the source:

For a first time installation, the project and dependency sources can be obtained manually with git and dep (create directories as needed):

git clone https://github.com/decred/dcrd $GOPATH/src/github.com/decred/dcrd
cd $GOPATH/src/github.com/decred/dcrd
dep ensure
go install . ./cmd/...

To update an existing source tree, pull the latest changes and install the matching dependencies:

cd $GOPATH/src/github.com/decred/dcrd
git pull
dep ensure
go install . ./cmd/...

For more information about Decred and how to set up your software please go to our docs page at docs.decred.org.

Docker

Running dcrd

You can run a decred node from inside a docker container. To build the image yourself, use the following command:

docker build -t decred/dcrd .

Or you can create an alpine based image (requires Docker 17.05 or higher):

docker build -t decred/dcrd:alpine -f Dockerfile.alpine .

You can then run the image using:

docker run decred/dcrd

You may wish to use an external volume to customise your config and persist the data in an external volume:

docker run --rm -v /home/user/dcrdata:/root/.dcrd/data decred/dcrd

For a minimal image, you can use the decred/dcrd:alpine tag. This is typically a more secure option while also being a much smaller image.

You can run dcrctl from inside the image. For example, run an image (mounting your data from externally) with:

docker run --rm -ti --name=dcrd-1 -v /home/user/.dcrd:/root/.dcrd \
  decred/dcrd:alpine

And then run dcrctl commands against it. For example:

docker exec -ti dcrd-1 dcrctl getbestblock
Running Tests

All tests and linters may be run in a docker container using the script run_tests.sh. This script defaults to using the current supported version of go. You can run it with the major version of Go you would like to use as the only arguement to test a previous on a previous version of Go (generally Decred supports the current version of Go and the previous one).

./run_tests.sh 1.9

To run the tests locally without docker:

./run_tests.sh local

Contact

If you have any further questions you can find us at:

  • irc.freenode.net (channel #decred)
  • webchat
  • forum.decred.org
  • decred.slack.com

Issue Tracker

The integrated github issue tracker is used for this project.

Documentation

The documentation is a work-in-progress. It is located in the docs folder.

License

dcrd is licensed under the copyfree ISC License.

Documentation

Overview

dcrd is a full-node Decred implementation written in Go.

The default options are sane for most users. This means dcrd will work 'out of the box' for most users. However, there are also a wide variety of flags that can be used to control it.

The following section provides a usage overview which enumerates the flags. An interesting point to note is that the long form of all of these options (except -C) can be specified in a configuration file that is automatically parsed when dcrd starts up. By default, the configuration file is located at ~/.dcrd/dcrd.conf on POSIX-style operating systems and %LOCALAPPDATA%\dcrd\dcrd.conf on Windows. The -C (--configfile) flag, as shown below, can be used to override this location.

Usage:

dcrd [OPTIONS]

Application Options:

-V, --version             Display version information and exit
-C, --configfile=         Path to configuration file
-b, --datadir=            Directory to store data
    --logdir=             Directory to log output.
    --nofilelogging=      Disable file logging.
-a, --addpeer=            Add a peer to connect with at startup
    --connect=            Connect only to the specified peers at startup
    --nolisten            Disable listening for incoming connections -- NOTE:
                          Listening is automatically disabled if the --connect
                          or --proxy options are used without also specifying
                          listen interfaces via --listen
    --listen=             Add an interface/port to listen for connections
                          (default all interfaces port: 9108, testnet: 19108)
    --maxpeers=           Max number of inbound and outbound peers (125)
    --nobanning           Disable banning of misbehaving peers
    --banduration=        How long to ban misbehaving peers.  Valid time units
                          are {s, m, h}.  Minimum 1 second (24h0m0s)
    --banthreshold=       Maximum allowed ban score before disconnecting and
                          banning misbehaving peers.
    --whitelist=          Add an IP network or IP that will not be banned.
                          (eg. 192.168.1.0/24 or ::1)
-u, --rpcuser=            Username for RPC connections
-P, --rpcpass=            Password for RPC connections
    --rpclimituser=       Username for limited RPC connections
    --rpclimitpass=       Password for limited RPC connections
    --rpclisten=          Add an interface/port to listen for RPC connections
                          (default port: 9109, testnet: 19109)
    --rpccert=            File containing the certificate file
    --rpckey=             File containing the certificate key
    --rpcmaxclients=      Max number of RPC clients for standard connections
                          (10)
    --rpcmaxwebsockets=   Max number of RPC websocket connections (25)
    --norpc               Disable built-in RPC server -- NOTE: The RPC server
                          is disabled by default if no rpcuser/rpcpass or
                          rpclimituser/rpclimitpass is specified
    --notls               Disable TLS for the RPC server -- NOTE: This is only
                          allowed if the RPC server is bound to localhost
    --nodnsseed           Disable DNS seeding for peers
    --externalip=         Add an ip to the list of local addresses we claim to
                          listen on to peers
    --proxy=              Connect via SOCKS5 proxy (eg. 127.0.0.1:9050)
    --proxyuser=          Username for proxy server
    --proxypass=          Password for proxy server
    --onion=              Connect to tor hidden services via SOCKS5 proxy
                          (eg. 127.0.0.1:9050)
    --onionuser=          Username for onion proxy server
    --onionpass=          Password for onion proxy server
    --noonion             Disable connecting to tor hidden services
    --torisolation        Enable Tor stream isolation by randomizing user
                          credentials for each connection.
    --testnet             Use the test network
    --simnet              Use the simulation test network
    --nocheckpoints       Disable built-in checkpoints.  Don't do this unless
                          you know what you're doing.
    --dbtype=             Database backend to use for the Block Chain (ffldb)
    --profile=            Enable HTTP profiling on given [addr:]port -- NOTE: port
                          must be between 1024 and 65536
    --cpuprofile=         Write CPU profile to the specified file
    --memprofile=         Write mem profile to the specified file
    --dumpblockchain=     Write blockchain as a gob-encoded map to the
                          specified file
    --miningtimeoffset=   Offset the mining timestamp of a block by this many
                          seconds (positive values are in the past)
-d, --debuglevel=         Logging level for all subsystems {trace, debug,
                          info, warn, error, critical} -- You may also specify
                          <subsystem>=<level>,<subsystem2>=<level>,... to set
                          the log level for individual subsystems -- Use show
                          to list available subsystems (info)
    --upnp                Use UPnP to map our listening port outside of NAT
    --minrelaytxfee=      The minimum transaction fee in DCR/kB to be
                          considered a non-zero fee.
    --limitfreerelay=     Limit relay of transactions with no transaction fee
                          to the given amount in thousands of bytes per
                          minute (15)
    --norelaypriority     Do not require free or low-fee transactions to have
                          high priority for relaying
    --maxorphantx=        Max number of orphan transactions to keep in memory
                          (1000)
    --generate            Generate (mine) bitcoins using the CPU
    --miningaddr=         Add the specified payment address to the list of
                          addresses to use for generated blocks -- At least
                          one address is required if the generate option is
                          set
    --blockminsize=       Mininum block size in bytes to be used when creating
                          a block
    --blockmaxsize=       Maximum block size in bytes to be used when creating
                          a block (375000)
    --blockprioritysize=  Size in bytes for high-priority/low-fee transactions
                          when creating a block (20000)
    --getworkkey=         DEPRECATED -- Use the --miningaddr option instead
    --nonaggressive       Disable mining off of the parent block of the blockchain
                          if there aren't enough voters
    --nominingstatesync   Disable synchronizing the mining state with other nodes
    --allowoldvotes       Enable the addition of very old votes to the mempool

    --sigcachemaxsize=    The maximum number of entries in the signature
                          verification cache.
    --blocksonly          Do not accept transactions from remote peers.
    --acceptnonstd        Accept and relay non-standard transactions to
                          the network regardless of the default settings
                          for the active network.
    --rejectnonstd        Reject non-standard transactions regardless of the
                          default settings for the active network.

Help Options:

-h, --help           Show this help message

Directories

Path Synopsis
addrmgr module
bech32 module
blockchain module
stake Module
standalone Module
certgen module
chaincfg module
chainhash Module
cmd
connmgr module
container
apbf Module
crypto
blake256 Module
ripemd160 Module
database module
dcrec module
edwards Module
secp256k1 Module
dcrjson module
dcrutil module
fees module
gcs module
hdkeychain module
Package limits allows to raises some process limits.
Package limits allows to raises some process limits.
lru module
mempool module
mining module
peer module
rpc
jsonrpc/types Module
rpcclient module
Package rpctest provides a dcrd-specific RPC testing harness crafting and executing integration tests by driving a `dcrd` instance via the `RPC` interface.
Package rpctest provides a dcrd-specific RPC testing harness crafting and executing integration tests by driving a `dcrd` instance via the `RPC` interface.
Package sampleconfig provides a single constant that contains the contents of the sample configuration file for dcrd.
Package sampleconfig provides a single constant that contains the contents of the sample configuration file for dcrd.
txscript module
wire module