node

package
v0.0.0-...-94820cb Latest Latest
Warning

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

Go to latest
Published: Oct 17, 2019 License: Unlicense, ISC Imports: 28 Imported by: 0

README

The Parallelcoin Node ISC License GoDoc

Next generation full node for Parallelcoin, forked from btcd

Hard Fork 1: Plan 9 from Crypto Space

TODO: update this!

9 algorithms can be used when mining:

  • Blake14lr (decred)
  • Skein (myriadcoin) Cryptonote7v2
  • Lyra2REv2 (sia)
  • Keccac (maxcoin, smartcash)
  • Scrypt (litecoin)
  • SHA256D (bitcoin)
  • GOST Stribog *
  • Skein
  • X11 (dash)
Stochastic Binomial Filter Difficulty Adjustment

After the upcoming hardfork, Parallelcoin will have the following features in its difficulty adjustment regime:

  • Exponential curve with power of 3 to respond gently the natural drift while moving the difficulty fast in below 10% of target and 10x target, to deal with recovering after a large increase in network hashpower

  • 293 second blocks (7 seconds less than 5 minutes), 1439 block averaging window (about 4.8 days) that is varied by interpreting byte 0 of the sha256d hash of newest block hash as a signed 8 bit integer to further disturb any inherent rhythm (like dithering).

  • Difficulty adjustments are based on a window ending at the previous block of each algorithm, meaning sharp rises from one algorithm do not immediately affect the other algorithms, allowing a smoother recovery from a sudden drop in hashrate, soaking up energetic movements more robustly and resiliently, and reducing vulnerability to time distortion attacks.

  • Deterministic noise is added to the difficulty adjustment in a similar way as is done with digital audio and images to improve the effective resolution of the signal by reducing unwanted artifacts caused by the sampling process. Miners are random generators, and a block time is like a tuning filter, so the same principles apply.

  • Rewards will be computed according to a much smoother, satoshi-precision exponential decay curve that will produce a flat annual 5% supply expansion. Increasing the precision of the denomination is planned for the next release cycle, at 0.00000001 as the minimum denomination, there may be issues as userbase increases.

  • Fair Hardfork - Rewards will slowly rise from the initial hard fork at an inverse exponential rate to bring the block reward from 0.02 up to 2 in 2000 blocks, as the adjustment to network capacity takes time, so rewards will closely match the time interval they relate to until it starts faster from the minimum target stabilises in response to what miners create.

Installation

For the main full node server:

go get github.com/parallelcointeam/parallelcoin

You probably will also want CLI client (can also speak to other bitcoin protocol RPC endpoints also):

go get github.com/p9c/node9/cmd/podctl

Requirements

Go 1.11 or newer.

Installation

Windows not available yet

When it is, it will be available here:

https://github.com/p9c/node9/releases

Linux/BSD/MacOSX/POSIX - Build from Source
$ go version
$ go env GOROOT GOPATH

NOTE: The GOROOT and GOPATH above must not be the same path. It is recommended that GOPATH is set to a directory in your home directory such as ~/goprojects to avoid write permission issues. It is also recommended to add $GOPATH/bin to your PATH at this point.

  • Run the following commands to obtain pod, all dependencies, and install it:
$ go get github.com/parallelcointeam/parallelcoin
  • pod (and utilities) will now be installed in $GOPATH/bin. 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
  • Run the following commands to update pod, all dependencies, and install it:
$ cd $GOPATH/src/github.com/parallelcointeam/parallelcoin
$ git pull && glide install
$ go install . ./cmd/...

Getting Started

pod has several configuration options available to tweak how it runs, but all of the basic operations described in the intro section work with zero configuration.

Windows (Installed from MSI)

Launch pod from your Start menu.

Linux/BSD/POSIX/Source
$ ./pod

Discord

Come and chat at our (discord server](https://discord.gg/nJKts94)

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

pod is licensed under the copyfree ISC License.

Documentation

Overview

Package node is a full-node Parallelcoin implementation written in Go.

The default options are sane for most users. This means pod 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/--configfile and -D --datadir) can be specified in a configuration file that is automatically parsed when pod starts up. By default, the configuration file is located at ~/.pod/pod. conf on POSIX-style operating systems and %LOCALAPPDATA%\pod\pod. conf on Windows. The -D (--datadir) flag, can be used to override this location.

NAME:

pod node - start parallelcoin full node

USAGE:

pod node [global options] command [command options] [arguments...]

VERSION:

v0.0.1

COMMANDS:

dropaddrindex  drop the address search index
droptxindex    drop the address search index
dropcfindex    drop the address search index

GLOBAL OPTIONS:

--help, -h  show help

Index

Constants

View Source
const (
	DefaultConfigFilename = "conf.json"
	DefaultDataDirname    = "node"
	// DefaultLogLevel              = "info"
	DefaultLogDirname = "node"
	// DefaultLogFilename           = "log"
	// DefaultAddress               = "127.0.0.1"
	DefaultPort = "11047"
	// DefaultRPCPort               = "11048"
	// DefalutRPCAddr               = "127.0.0.1"
	// DefaultRPCServer             = "127.0.0.1:11048"
	// DefaultListener              = "127.0.0.1:11047"
	DefaultRPCListener  = "127.0.0.1"
	DefaultMaxPeers     = 23
	DefaultBanDuration  = time.Hour * 24
	DefaultBanThreshold = 100
	// DefaultConnectTimeout        = time.Second * 30
	DefaultMaxRPCClients        = 10
	DefaultMaxRPCWebsockets     = 25
	DefaultMaxRPCConcurrentReqs = 20
	DefaultDbType               = "ffldb"
	DefaultFreeTxRelayLimit     = 15.0
	DefaultTrickleInterval      = peer.DefaultTrickleInterval
	// DefaultBlockMinSize          = 80
	DefaultBlockMaxSize = 200000
	// DefaultBlockMinWeight        = 10
	DefaultBlockMaxWeight = 3000000
	BlockMaxSizeMin       = 1000
	BlockMaxSizeMax       = blockchain.MaxBlockBaseSize - 1000
	BlockMaxWeightMin     = 4000
	BlockMaxWeightMax     = blockchain.MaxBlockWeight - 4000
	// DefaultGenerate              = false
	// DefaultGenThreads            = 1
	// DefaultMinerListener         = "127.0.0.1:11011"
	DefaultMaxOrphanTransactions = 100
	// DefaultMaxOrphanTxSize       = 100000
	DefaultSigCacheMaxSize = 100000
)

A lotta constants that probably aren't being used

Variables

View Source
var (
	// // DefaultConfigFile is
	// DefaultConfigFile = filepath.Join(DefaultHomeDir, DefaultConfigFilename)
	// // DefaultDataDir is
	// DefaultDataDir = filepath.Join(DefaultHomeDir, DefaultDataDirname)
	// DefaultHomeDir is
	DefaultHomeDir = appdata.Dir("pod", false)
	// // DefaultLogDir is
	// DefaultLogDir = filepath.Join(DefaultHomeDir, DefaultLogDirname)
	// DefaultRPCCertFile is
	// DefaultRPCCertFile = filepath.Join(DefaultHomeDir, "rpc.cert")
	// // DefaultRPCKeyFile is
	// DefaultRPCKeyFile = filepath.Join(DefaultHomeDir, "rpc.key")
	// // KnownDbTypes is
	KnownDbTypes = database.SupportedDrivers()
)

nolint

Functions

func Main

func Main(cx *conte.Xt, shutdownChan chan struct{},
	killswitch chan struct{}, nodechan chan *rpc.Server,
	wg *sync.WaitGroup) (err error)

Main is the real main function for pod. It is necessary to work around the fact that deferred functions do not run when os.Exit() is called. The optional serverChan parameter is mainly used by the service code to be notified with the server once it is setup so it can gracefully stop it when requested from the service control manager.

  • shutdownchan can be used to wait for the node to shut down
  • killswitch can be closed to shut the node down

func NewCheckpointFromStr

func NewCheckpointFromStr(checkpoint string) (chaincfg.Checkpoint, error)

NewCheckpointFromStr parses checkpoints in the '<height>:<hash>' format.

func ParseCheckpoints

func ParseCheckpoints(checkpointStrings []string) ([]chaincfg.Checkpoint, error)

ParseCheckpoints checks the checkpoint strings for valid syntax ( '<height>:<hash>') and parses them to chaincfg.Checkpoint instances.

func ValidDbType

func ValidDbType(dbType string) bool

ValidDbType returns whether or not dbType is a supported database type.

func ValidLogLevel

func ValidLogLevel(logLevel string) bool

ValidLogLevel returns whether or not logLevel is a valid debug log level.

Types

This section is empty.

Directories

Path Synopsis
rpctest
Package rpctest provides a pod-specific RPC testing harness crafting and executing integration tests by driving a `pod` instance via the `RPC` interface.
Package rpctest provides a pod-specific RPC testing harness crafting and executing integration tests by driving a `pod` instance via the `RPC` interface.
Package mempool provides a policy-enforced pool of unmined bitcoin transactions.
Package mempool provides a policy-enforced pool of unmined bitcoin transactions.

Jump to

Keyboard shortcuts

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