dcrd

command module
v1.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 9, 2023 License: ISC Imports: 69 Imported by: 0

README

dcrd

Build Status ISC License Doc Go Report Card

Decred Overview

Decred is a blockchain-based cryptocurrency with a strong focus on community input, open governance, and sustainable funding for development. It utilizes a hybrid proof-of-work and proof-of-stake mining system to ensure that a small group cannot dominate the flow of transactions or make changes to Decred without the input of the community. A unit of the currency is called a decred (DCR).

https://decred.org

Latest Downloads

https://decred.org/downloads/

Core software:

  • dcrd: a Decred full node daemon (this)
  • dcrwallet: a CLI Decred wallet daemon
  • dcrctl: a CLI client for dcrd and dcrwallet

Bundles:

What is dcrd?

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

It acts as a fully-validating chain daemon for the Decred cryptocurrency. dcrd maintains the entire past transactional ledger of Decred and allows relaying of transactions to other Decred nodes around the world.

This software is currently under active development. It is extremely stable and has been in production use since February 2016.

It important to note that dcrd does NOT include wallet functionality. Users who desire a wallet will need to use dcrwallet(CLI) or Decrediton(GUI).

What is a full node?

The term 'full node' is short for 'fully-validating node' and refers to software that fully validates all transactions and blocks, as opposed to trusting a 3rd party. In addition to validating transactions and blocks, nearly all full nodes also participate in relaying transactions and blocks to other full nodes around the world, thus forming the peer-to-peer network that is the backbone of the Decred cryptocurrency.

The full node distinction is important, since full nodes are not the only type of software participating in the Decred peer network. For instance, there are 'lightweight nodes' which rely on full nodes to serve the transactions, blocks, and cryptographic proofs they require to function, as well as relay their transactions to the rest of the global network.

Why run dcrd?

As described in the previous section, the Decred cryptocurrency relies on having a peer-to-peer network of nodes that fully validate all transactions and blocks and then relay them to other full nodes.

Running a full node with dcrd contributes to the overall security of the network, increases the available paths for transactions and blocks to relay, and helps ensure there are an adequate number of nodes available to serve lightweight clients, such as Simplified Payment Verification (SPV) wallets.

Without enough full nodes, the network could be unable to expediently serve users of lightweight clients which could force them to have to rely on centralized services that significantly reduce privacy and are vulnerable to censorship.

In terms of individual benefits, since dcrd fully validates every block and transaction, it provides the highest security and privacy possible when used in conjunction with a wallet that also supports directly connecting to it in full validation mode, such as dcrwallet (CLI) and Decrediton (GUI). It is also ideal for businesses and services that need the most reliable and accurate data about transactions.

  • 16 GB disk space (as of April 2022, increases over time, ~2 GB/yr)
  • 2 GB memory (RAM)
  • ~150 MB/day download, ~1.5 GB/day upload
    • Plus one-time initial download of the entire block chain
  • Windows 10 (server preferred), macOS, Linux
  • High uptime

Getting Started

So, you've decided to help the network by running a full node. Great! Running dcrd is simple. All you need to do is install dcrd on a machine that is connected to the internet and meets the minimum recommended specifications, and launch it.

Also, make sure your firewall is configured to allow inbound connections to port 9108.

Installing and updating

Binaries (Windows/Linux/macOS)

Binary releases are provided for common operating systems and architectures. The easiest method is to download Decrediton from the link below, which will include dcrd. Advanced users may prefer the Command-line app suite, which includes dcrd and dcrwallet.

https://decred.org/downloads/

Build from source (all platforms)
Install Dependencies
  • Go 1.19 or 1.20

    Installation instructions can be found here: https://golang.org/doc/install. Ensure Go was installed properly and is a supported version:

    $ go version
    $ go env GOROOT GOPATH
    

    NOTE: GOROOT and GOPATH must not be on the same path. Since Go 1.8 (2016), GOROOT and GOPATH are set automatically, and you do not need to change them. However, you still need to add $GOPATH/bin to your PATH in order to run binaries installed by go get and go install (On Windows, this happens automatically).

    Unix example -- add these lines to .profile:

    PATH="$PATH:/usr/local/go/bin"  # main Go binaries ($GOROOT/bin)
    PATH="$PATH:$HOME/go/bin"       # installed Go projects ($GOPATH/bin)
    
  • Git

    Installation instructions can be found at https://git-scm.com or https://gitforwindows.org.

    $ git version
    
Windows Example
PS> git clone https://github.com/decred/dcrd $env:USERPROFILE\src\dcrd
PS> cd $env:USERPROFILE\src\dcrd
PS> go install . .\cmd\...
PS> dcrd -V

Run the dcrd executable now installed in "$(go env GOPATH)\bin".

Unix Example

This assumes you have already added $GOPATH/bin to your $PATH as described in dependencies.

$ git clone https://github.com/decred/dcrd $HOME/src/dcrd
$ git clone https://github.com/decred/dcrctl $HOME/src/dcrctl
$ (cd $HOME/src/dcrd && go install . ./...)
$ (cd $HOME/src/dcrctl && go install)
$ dcrd -V

Run the dcrd executable now installed in $GOPATH/bin.

Building and Running OCI Containers (aka Docker/Podman)

The project does not officially provide container images. However, all of the necessary files to build your own lightweight non-root container image based on scratch from the latest source code are available in contrib/docker.

It is also worth noting that, to date, most users typically prefer to run dcrd directly, without using a container, for at least a few reasons:

  • dcrd is a static binary that does not require root privileges and therefore does not suffer from the usual deployment issues that typically make containers attractive
  • It is harder and more verbose to run dcrd from a container as compared to normal:
    • dcrd is designed to automatically create a working default configuration which means it just works out of the box without the need for additional configuration for almost all typical users
    • The blockchain data and configuration files need to be persistent which means configuring and managing a docker data volume
    • Running non-root containers with docker requires special care in regards to permissions

Running Tests

All tests and linters may be run using the script run_tests.sh. Generally, Decred only supports the current and previous major versions of Go.

./run_tests.sh

Contact

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

https://decred.org/community/

Issue Tracker

The integrated github issue tracker is used for this project.

Documentation

The documentation for dcrd 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
-A, --appdata=               Path to application home directory
-C, --configfile=            Path to configuration file
-b, --datadir=               Directory to store data
    --logdir=                Directory to log output
    --logsize=               Maximum size of log file before it is rotated
                             (default: 10 MiB)
    --nofilelogging          Disable file logging
    --dbtype=                Database backend to use for the block chain
                             (default: 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
    --testnet                Use the test network
    --simnet                 Use the simulation test network
    --regnet                 Use the regression test network
-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)
    --sigcachemaxsize=       The maximum number of entries in the signature
                             verification cache (default: 100000)
    --utxocachemaxsize=      The maximum size in MiB of the utxo cache
                             (default: 150, minimum: 25, maximum: 32768)
    --norpc                  Disable built-in RPC server -- NOTE: The RPC
                             server is disabled by default if no
                             rpcuser/rpcpass or rpclimituser/rpclimitpass is
                             specified
    --rpclisten=             Add an interface/port to listen for RPC
                             connections (default port: 9109, testnet: 19109)
-u, --rpcuser=               Username for RPC connections
-P, --rpcpass=               Password for RPC connections
    --authtype=              Method for RPC client authentication
                             (basic or clientcert)
    --clientcafile=          File containing Certificate Authorities to
                             verify TLS client certificates; requires
                             authtype=clientcert
    --rpclimituser=          Username for limited RPC connections
    --rpclimitpass=          Password for limited RPC connections
    --rpccert=               File containing the certificate file
    --rpckey=                File containing the certificate key
    --tlscurve=              Curve to use when generating the TLS keypair
                             (default: P-256)
    --altdnsnames            Specify additional dns names to use when
                             generating the rpc server certificate
                             [supports DCRD_ALT_DNSNAMES environment variable]
    --notls                  Disable TLS for the RPC server -- NOTE: This is
                             only allowed if the RPC server is bound to
                             localhost
    --rpcmaxclients=         Max number of RPC clients for standard
                             connections (default: 10)
    --rpcmaxwebsockets=      Max number of RPC websocket connections
                             (default: 25)
    --rpcmaxconcurrentreqs=  Max number of concurrent RPC requests that may
                             be processed concurrently (default: 20)
    --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
-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)
    --maxsameip=             Max number of connections with the same IP -- 0
                             to disable (default: 5)
    --maxpeers=              Max number of inbound and outbound peers
                             (default: 125)
    --dialtimeout=           How long to wait for TCP connection completion
                             Valid time units are {s, m, h}  Minimum 1
                             second (default: 30s)
    --peeridletimeout        The duration of inactivity before a peer is
                             timed out.  Valid time units are {s,m,h}.
                             Minimum 15 seconds (default: 2m0s)
    --noseeders              Disable seeding for peer discovery
    --nodnsseed              DEPRECATED: use --noseeders
    --externalip=            Add a public-facing IP to the list of local
                             external IPs that dcrd will advertise to other
                             peers
    --nodiscoverip           Disable automatic network address discovery of
                             local external IPs
    --upnp                   Use UPnP to map our listening port outside of NAT
    --nobanning              Disable banning of misbehaving peers
    --banduration=           How long to ban misbehaving peers.  Valid time
                             units are {s, m, h}.  Minimum 1 second (default:
                             24h0m0s)
    --banthreshold=          Maximum allowed ban score before disconnecting
                             and banning misbehaving peers (default: 100)
    --whitelist=             Add an IP network or IP that will not be banned
                             (eg. 192.168.1.0/24 or ::1)
    --allowoldforks          Process forks deep in history.  Don't do this
                             unless you know what you're doing
    --dumpblockchain=        Write blockchain as a flat file of blocks for
                             use with addblock, to the specified filename
    --assumevalid=           Hash of an assumed valid block. Defaults to the
                             hard-coded assumed valid block that is updated
                             periodically with new releases. Don't use a
                             different hash unless you understand the
                             implications. Set to 0 to disable
    --minrelaytxfee=         The minimum transaction fee in DCR/kB to be
                             considered a non-zero fee (default: 0.0001)
    --limitfreerelay=        DEPRECATED: This behavior is no longer available
                             and this option will be removed in a future
                             version of the software
    --norelaypriority        DEPRECATED: This behavior is no longer available
                             and this option will be removed in a future
                             version of the software
    --maxorphantx=           Max number of orphan transactions to keep in
                             memory (default: 100)
    --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
    --allowoldvotes          Enable the addition of very old votes to the
                             mempool
    --generate               Generate (mine) coins 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=          DEPRECATED: This behavior is no longer available
                             and this option will be removed in a future
                             version of the software
    --blockmaxsize=          Maximum block size in bytes to be used when
                             creating a block (default: 375000)
    --blockprioritysize=     DEPRECATED: This behavior is no longer available
                             and this option will be removed in a future
                             version of the software
    --miningtimeoffset=      Offset the mining timestamp of a block by this
                             many seconds (positive values are in the past)
    --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
    --allowunsyncedmining    Allow block templates to be generated even when
                             the chain is not considered synced on networks
                             other than the main network.  This is
                             automatically enabled when the simnet option is
                             set.  Don't do this unless you know what you're
                             doing
    --txindex                Maintain a full hash-based transaction index
                             which makes all transactions available via the
                             getrawtransaction RPC
    --droptxindex            Deletes the hash-based transaction index from
                             the database on start up and then exits
    --noexistsaddrindex      Disable the exists address index, which tracks
                             whether or not an address has even been used
    --dropexistsaddrindex    Deletes the exists address index from the
                             database on start up and then exits
    --piperx=                File descriptor of read end pipe to enable
                             parent -> child process communication
    --pipetx=                File descriptor of write end pipe to enable
                             parent <- child process communication
    --lifetimeevents         Send lifetime notifications over the TX pipe

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
contrib
crypto
blake256 Module
ripemd160 Module
database module
dcrec module
edwards Module
secp256k1 Module
dcrjson module
dcrutil module
fees module
gcs module
hdkeychain module
internal
blockchain
Package blockchain implements Decred block handling and chain selection rules.
Package blockchain implements Decred block handling and chain selection rules.
blockchain/indexers
Package indexers implements optional block chain indexes.
Package indexers implements optional block chain indexes.
fees
Package fees provides decred-specific methods for tracking and estimating fee rates for new transactions to be mined into the network.
Package fees provides decred-specific methods for tracking and estimating fee rates for new transactions to be mined into the network.
fees/cmd/dumpfeedb
Tool dumpfeedb can be used to dump the internal state of the buckets of an estimator's feedb so that it can be externally analyzed.
Tool dumpfeedb can be used to dump the internal state of the buckets of an estimator's feedb so that it can be externally analyzed.
limits
Package limits allows some process limits to be raised.
Package limits allows some process limits to be raised.
mempool
Package mempool provides a policy-enforced pool of unmined Decred transactions.
Package mempool provides a policy-enforced pool of unmined Decred transactions.
mining
Package mining includes all mining and policy types, and will house all mining code in the future.
Package mining includes all mining and policy types, and will house all mining code in the future.
mining/cpuminer
Package cpuminer provides facilities for solving blocks (mining) using the CPU.
Package cpuminer provides facilities for solving blocks (mining) using the CPU.
netsync
Package netsync implements a concurrency safe block syncing protocol.
Package netsync implements a concurrency safe block syncing protocol.
progresslog
Package progresslog provides periodic logging for block processing.
Package progresslog provides periodic logging for block processing.
rpcserver
Package rpcserver includes all RPC server interfaces, types, and pieces of code pertaining to implementing the RPC server.
Package rpcserver includes all RPC server interfaces, types, and pieces of code pertaining to implementing the RPC server.
version
Package version provides a single location to house the version information for dcrd and other utilities provided in the same repository.
Package version provides a single location to house the version information for dcrd and other utilities provided in the same repository.
lru module
math
uint256 Module
mempool module
mining module
peer module
rpc
jsonrpc/types Module
rpcclient module
Package sampleconfig provides a single function that returns the contents of the sample configuration file for dcrd.
Package sampleconfig provides a single function that returns the contents of the sample configuration file for dcrd.
txscript module
wire module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL