eacrd

command module
v0.0.0-...-c27d63c Latest Latest
Warning

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

Go to latest
Published: Feb 3, 2020 License: ISC Imports: 76 Imported by: 0

README

ecrd

Build Status ISC License GoDoc Go Report Card

Eacred Overview

Eacred 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 Eacred without the input of the community. A unit of the currency is called a eacred (DCR).

https://eacred.org

Latest Downloads

https://eacred.org/downloads

What is ecrd?

ecrd is a full node implementation of Eacred written in Go (golang).

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

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

The software was originally forked from btcd, which is a bitcoin full node implementation that is still under active development. To gain the benefit of btcd's ongoing upgrades, including improved peer and connection handling, database optimization, and other blockchain related technology improvements, ecrd is continuously synced with the btcd codebase.

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 Eacred cryptocurrency.

The full node distinction is important, since full nodes are not the only type of software participating in the Eacred 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 ecrd?

As described in the previous section, the Eacred 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 ecrd 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 ecrd 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 eacrwallet (CLI) and Eacrediton (GUI).

  • 10 GB disk space (as of September 2018, increases over time)
  • 1GB memory (RAM)
  • ~150MB/day download, ~1.5GB/day upload
    • Plus one-time initial download of the entire block chain
  • Windows 7/8.x/10 (server preferred), macOS, Linux
  • High uptime

Getting Started

So, you've decided to help the network by running a full node. Great! Running ecrd is simple. All you need to do is install ecrd 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:

https://eacred.org/downloads

Build from source (all platforms)

Building or updating from source requires the following build dependencies:

To build and install from a checked-out repo, run go install . ./cmd/... in the repo's root directory. Some notes:

  • Set the GO111MODULE=on environment variable if building from within GOPATH.

  • The ecrd executable will be installed to $GOPATH/bin. GOPATH defaults to $HOME/go (or %USERPROFILE%\go on Windows) if unset.

Example of obtaining and building from source on Windows 10:
PS> git clone https://github.com/Eacred/eacrd $env:USERPROFILE\src\ecrd
PS> cd $env:USERPROFILE\src\ecrd
PS> go install . .\cmd\...
PS> & "$(go env GOPATH)\bin\ecrd" -V

Docker

Running ecrd

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

docker build -t eacred/ecrd .

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

docker build -t eacred/ecrd:alpine -f Dockerfile.alpine .

You can then run the image using:

docker run eacred/ecrd

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/ecrdata:/root/.ecrd/data eacred/ecrd

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

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

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

And then run eacrctl commands against it. For example:

docker exec -ti ecrd-1 eacrctl getbestblock
Running Tests

All tests and linters may be run in a docker (or podman) container using the script run_tests.sh by specifying either docker or podman as the first parameter. This script defaults to using the current latest supported version of Go, but it also respects the GOVERSION environment variable set to the major version of Go to allow testing on a previous version of Go. Generally, Eacred only supports the current and previous major versions of Go.

./run_tests.sh docker

To run the tests locally without docker on the latest supported version of Go:

./run_tests.sh

To run the tests locally without docker on Go 1.11:

GOVERSION=1.11 ./run_tests.sh

Contact

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

https://eacred.org/community

Issue Tracker

The integrated github issue tracker is used for this project.

Documentation

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

License

ecrd is licensed under the copyfree ISC License.

Documentation

Overview

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

The default options are sane for most users. This means ecrd 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 ecrd starts up. By default, the configuration file is located at ~/.ecrd/ecrd.conf on POSIX-style operating systems and %LOCALAPPDATA%\ecrd\ecrd.conf on Windows. The -C (--configfile) flag, as shown below, can be used to override this location.

Usage:

ecrd [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)
    --maxsameip=          Max number of connections with the same IP -- 0 to
                          disable (default: 5)
    --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
    --regnet              Use the regression 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=       Minimum 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)
    --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.
    --altdnsnames:        Specify additional dns names to use when
                          generating the rpc server certificate
                          [supports ECRD_ALT_DNSNAMES environment variable]

Help Options:

-h, --help           Show this help message

Directories

Path Synopsis
Package addrmgr implements concurrency safe Eacred address manager.
Package addrmgr implements concurrency safe Eacred address manager.
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173.
Package bech32 provides a Go implementation of the bech32 format specified in BIP 173.
Package blockchain implements Eacred block handling and chain selection rules.
Package blockchain implements Eacred block handling and chain selection rules.
chaingen
Package chaingen provides facilities for generating a full chain of blocks.
Package chaingen provides facilities for generating a full chain of blocks.
fullblocktests
Package fullblocktests provides a set of block consensus validation tests.
Package fullblocktests provides a set of block consensus validation tests.
indexers
Package indexers implements optional block chain indexes.
Package indexers implements optional block chain indexes.
internal/dbnamespace
Package dbnamespace contains constants that define the database namespaces for the purpose of the blockchain, so that external callers may easily access this data.
Package dbnamespace contains constants that define the database namespaces for the purpose of the blockchain, so that external callers may easily access this data.
stake
Package stake contains code for all of ecrd's stake transaction chain handling and other portions related to the Proof-of-Stake (PoS) system.
Package stake contains code for all of ecrd's stake transaction chain handling and other portions related to the Proof-of-Stake (PoS) system.
stake/internal/dbnamespace
Package dbnamespace contains constants that define the database namespaces for the purpose of the blockchain, so that external callers may easily access this data.
Package dbnamespace contains constants that define the database namespaces for the purpose of the blockchain, so that external callers may easily access this data.
stake/internal/tickettreap
Package tickettreap implements a treap data structure that is used to hold live tickets ordered by their key along with some associated data using a combination of binary search tree and heap semantics.
Package tickettreap implements a treap data structure that is used to hold live tickets ordered by their key along with some associated data using a combination of binary search tree and heap semantics.
standalone
Package standalone provides standalone functions useful for working with the Eacred blockchain consensus rules.
Package standalone provides standalone functions useful for working with the Eacred blockchain consensus rules.
Package certgen includes a common base for creating a new TLS certificate key pair.
Package certgen includes a common base for creating a new TLS certificate key pair.
Package chaincfg defines chain configuration parameters.
Package chaincfg defines chain configuration parameters.
chainec
Package chainec provides wrapper functions to abstract the ec functions.
Package chainec provides wrapper functions to abstract the ec functions.
chainhash
Package chainhash provides abstracted hash functionality.
Package chainhash provides abstracted hash functionality.
cmd
Package connmgr implements a generic Eacred network connection manager.
Package connmgr implements a generic Eacred network connection manager.
crypto
blake256
Package blake256 implements BLAKE-256 and BLAKE-224 hash functions (SHA-3 candidate).
Package blake256 implements BLAKE-256 and BLAKE-224 hash functions (SHA-3 candidate).
ripemd160
Package ripemd160 implements the RIPEMD-160 hash algorithm.
Package ripemd160 implements the RIPEMD-160 hash algorithm.
Package database provides a block and metadata storage database.
Package database provides a block and metadata storage database.
ffldb
Package ffldb implements a driver for the database package that uses leveldb for the backing metadata and flat files for block storage.
Package ffldb implements a driver for the database package that uses leveldb for the backing metadata and flat files for block storage.
internal/treap
Package treap implements a treap data structure that is used to hold ordered key/value pairs using a combination of binary search tree and heap semantics.
Package treap implements a treap data structure that is used to hold ordered key/value pairs using a combination of binary search tree and heap semantics.
secp256k1
Package secp256k1 implements support for the elliptic curves needed for Eacred.
Package secp256k1 implements support for the elliptic curves needed for Eacred.
Package dcrjson provides infrastructure for working with Eacred JSON-RPC APIs.
Package dcrjson provides infrastructure for working with Eacred JSON-RPC APIs.
Package dcrutil provides eacred-specific convenience functions and types.
Package dcrutil provides eacred-specific convenience functions and types.
txsort
Package txsort provides stable transaction sorting.
Package txsort provides stable transaction sorting.
Package fees provides eacred-specific methods for tracking and estimating fee rates for new transactions to be mined into the network.
Package fees provides eacred-specific methods for tracking and estimating fee rates for new transactions to be mined into the network.
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.
gcs
Package gcs provides an API for building and using a Golomb-coded set filter.
Package gcs provides an API for building and using a Golomb-coded set filter.
blockcf
Package blockcf provides functions for building committed filters for blocks using Golomb-coded sets in a way that is useful for light clients such as SPV wallets.
Package blockcf provides functions for building committed filters for blocks using Golomb-coded sets in a way that is useful for light clients such as SPV wallets.
blockcf2
Package blockcf2 provides functions for building committed filters for blocks using Golomb-coded sets in a way that is useful for light clients such as SPV wallets.
Package blockcf2 provides functions for building committed filters for blocks using Golomb-coded sets in a way that is useful for light clients such as SPV wallets.
Package hdkeychain provides an API for Decred hierarchical deterministic extended keys (based on BIP0032).
Package hdkeychain provides an API for Decred hierarchical deterministic extended keys (based on BIP0032).
internal
limits
Package limits allows some process limits to be raised.
Package limits allows some process limits to be raised.
version
Package version provides a single location to house the version information for ecrd and other utilities provided in the same repository.
Package version provides a single location to house the version information for ecrd and other utilities provided in the same repository.
Package lru implements a generic least-recently-used cache with near O(1) perf.
Package lru implements a generic least-recently-used cache with near O(1) perf.
Package mempool provides a policy-enforced pool of unmined Decred transactions.
Package mempool provides a policy-enforced pool of unmined Decred transactions.
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.
Package peer provides a common base for creating and managing Decred network peers.
Package peer provides a common base for creating and managing Decred network peers.
rpc
jsonrpc/types
Package types implements concrete types for marshalling to and from the ecrd JSON-RPC commands, return values, and notifications.
Package types implements concrete types for marshalling to and from the ecrd JSON-RPC commands, return values, and notifications.
Package rpcclient implements a websocket-enabled Eacred JSON-RPC client.
Package rpcclient implements a websocket-enabled Eacred JSON-RPC client.
Package rpctest provides a ecrd-specific RPC testing harness crafting and executing integration tests by driving a `ecrd` instance via the `RPC` interface.
Package rpctest provides a ecrd-specific RPC testing harness crafting and executing integration tests by driving a `ecrd` instance via the `RPC` interface.
Package sampleconfig provides a single constant that contains the contents of the sample configuration file for ecrd.
Package sampleconfig provides a single constant that contains the contents of the sample configuration file for ecrd.
Package txscript implements the Decred transaction script language.
Package txscript implements the Decred transaction script language.
Package wire implements the Decred wire protocol.
Package wire implements the Decred wire protocol.

Jump to

Keyboard shortcuts

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