pairmint

command module
v0.0.0-...-0fb7b88 Latest Latest
Warning

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

Go to latest
Published: Feb 13, 2021 License: Apache-2.0 Imports: 1 Imported by: 0

README

Pairmint

Go Report Card License

⚠ Be mindful of key security as Pairmint currently only supports Tendermint's file-based signer. Make sure to properly secure your validator instance from unauthorized access.

Pairmint is a high availability solution for Tendermint-based blockchain validators. It uses the blockchain itself as a perfectly synchronous communication line between redundant validators running in parallel for double-signing protection.

Requirements

  • Go v1.15+
  • Validator software compatible with Tendermint v0.34+ in terms of protobuf support

Build & Install

Get the repository either via

$ git clone https://github.com/BlockscapeNetwork/pairmint && cd pairmint

or

$ go get github.com/BlockscapeLab/pairmint && cd $GOPATH/src/github.com/BlockscapeLab/pairmint

Pairmint can be built into the ./build directory using

$ make build       # local os/arch
$ make build-linux # linux/amd64

or installed directly into $GOPATH/bin using

$ make install

Configuration

Each validator node runs in tandem with its own Pairmint daemon, and thus each one also has its own configuration. You can initialize Pairmint using:

$ pairmint init

The init command creates a pairmint.toml configuration file at the directory specified in the $PAIRMINT_CONFIG_DIR environment variable (defaults to $HOME/.pairmint) and a pm-identity.key file which holds the seed used to establish a secret connection to the validator.

ℹ Please look through the pairmint.toml file after it's generated as it is only a template and initially not valid.

If you don't already have a keypair, you can use the --keypair flag to generate a new priv_validator_key.json and priv_validator_state.json in your $PAIRMINT_CONFIG_DIR directory. Pairmint will know where to find them without you having to specify their location (see key_file_path and state_file_path parameters in the FilePV section).

If you do already have a keypair, you can either copy them into the $PAIRMINT_CONFIG_DIR directory or leave the key and state files where they are and specify the paths to them in the FilePV section of the pairmint.toml.

Init

Init contains configuration parameters needed on initialization.

ℹ The configuration parameters set_size and threshold must be the same across all validator nodes in the Pairmint set.

Parameter Type Description
log_level string Minimum log level for pairmint's log messages. Must either DEBUG, INFO, WARN or ERR..
set_size int Fixed size of the pairminted validator set. Must be 2 or higher.
threshold int Threshold value of missed blocks in a row for rank updates. Must be 1 or higher.
rank int Rank on node startup. Must be 1 or higher.
validator_laddr string TCP socket address the validator listens on for an external PrivValidator process. Pairmint dials this address to establish a connection to the validator. Must be in host:port format.
validator_laddr_rpc string TCP socket address the validator's RPC server listens on. Must be in host:port format.
FilePV

FilePV contains configuration parameters for the file-based signer.

Parameter Type Description
chain_id string Chain ID the validator is part of.
key_file_path string Path to the priv_validator_key.json file. Defaults to $PAIRMINT_CONFIG_DIR/priv_validator_key.json if left empty.
state_file_path string Path to the priv_validator_state.json file. Defaults to $PAIRMINT_CONFIG_DIR/priv_validator_state.json if left empty.
Example

Let's assume, you have two validators in your Pairmint set. The following configurations are examples of their respective pairmint.toml files. An example of a valid pairmint.toml could look like this:

Validator #1
[init]

log_level = "INFO"
set_size = 2   # Must be 2 for both validators!
threshold = 10 # Must be 10 for both validators!
rank = 1       # Must be unique! (No two validators can have the same rank)
validator_laddr = "127.0.0.1:3000"
validator_laddr_rpc = "127.0.0.1:26657"

[file_pv]

chain_id = "mychain"
key_file_path = "/Users/myuser/.pairmint/priv_validator_key.json"
state_file_path = "/Users/myuser/.pairmint/priv_validator_state.json"
Validator #2
[init]

log_level = "INFO"
set_size = 2   # Must be 2 for both validators!
threshold = 10 # Must be 10 for both validators!
rank = 2       # Must be unique! (No two validators can have the same rank)
validator_laddr = "127.0.0.1:3000"
validator_laddr_rpc = "127.0.0.1:26657"

[file_pv]

chain_id = "mychain"
key_file_path = ""   # Left empty, so it defaults to $PAIRMINT_CONFIG_DIR/priv_validator_key.json
state_file_path = "" # Left empty, so it defaults to $PAIRMINT_CONFIG_DIR/priv_validator_state.json

Running

After creating the configuration, start Pairmint using:

$ pairmint start

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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