Monetd Reference¶
monetd
provides the core commands needed to configure and run a node. It
has context sensitive help accessed either by running monetd help
or by
adding a -h
parameter to the relevant command.
[..monetd] $ monetd help
MONET-Daemon
Monetd provides the core commands needed to configure and run a Monet
node. The minimal quickstart configuration is:
$ monetd config clear
$ monetd keys new node0
$ monetd config build node0
$ monetd run
See the documentation at https://monetd.readthedocs.io/ for further information.
Usage:
monetd [command]
Available Commands:
config manage monetd configuration
help Help about any command
keys monet key manager
run run a MONET node
version show version info
Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-h, --help help for monetd
-v, --verbose verbose output
Use "monetd [command] --help" for more information about a command.
There are 5 subcommands. help
is described above. The other 4 commands are
described in separate sections below:
- help — show help for the command and subcommands
- version — shows the current version of monetd and subsystems
- keys — creates and manages keys
- config — creates and manages configurations
- run — runs the monet daemon, i.e. starts a node
Global Parameters¶
Global Parameters are available for all subcommands.
- -d, –datadir string — overrides the default location of the configuration files
- -h, –help — help command as discussed above
- -v, –verbose — turns on verbose messages. Defaults to false.
Version¶
The version
subcommand outputs the version number for monetd
,
EVM-Lite
, Babble
and Geth
.
If you compile your own tools, the suffices are the GIT branch and the GIT commit hash.
[..monetd] $ monetd version
Monet Version: 0.2.1-develop-397c075f
EVM-Lite Version: 0.2.1-develop
Babble Version: 0.5.1-develop
Geth Version: 1.8.27
Keys¶
The keys
subcommand is used to manage Monet Toolchain keys. There are 4
subcommands, each described in a seperate section below:
- inspect — inspect a keyfile
- list — list keyfiles
- new — create a new keyfile
- update — change the passphrase on a keyfile
The keys
subcommand writes and reads keys from the keystore
sub-folder
in the monetd
configuration folder. You can see the location for your
instance with this command:
$ monetd config location -x
The help for the keys command is:
[..monetd] $ monetd keys help
Manage keys in the [datadir]/keystore folder.
Note that other Monet tools, like monetcli and monet-wallet, use the same
default [datadir]/keystore.
+------------------------------------------------------------------------------+
| Please take all the necessary precautions to secure these files and remember |
| the passwords, as it will be impossible to recover the keys without them. |
+------------------------------------------------------------------------------+
Keys are associated with monikers and encrypted in password-protected files in
[datadir]/keystore/[moniker].json. Keyfiles contain JSON encoded objects, which
Ethereum users will recognise as the de-facto Ethereum keyfile format. Indeed,
Monet and the underlying consensus algorithm, Babble, use the same type of keys
as Ethereum. A key can be used to run a validator node, or to control an account
with a token balance.
Usage:
monetd keys [command]
Available Commands:
inspect inspect a keyfile
list list keyfiles
new create a new keyfile
update change the passphrase on a keyfile
Flags:
-h, --help help for keys
--json output JSON instead of human-readable format
--passfile string file containing the passphrase
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
Use "monetd keys [command] --help" for more information about a command.
Parameters¶
All of the keys subcommands support the --passfile
flag. This allows you to
pass the path to a plain text file containing the passphrase for your key. This
removes the interactive prompt to enter the passphrase that is the default
mechanism.
Monikers¶
Keys generated by monetd
have a moniker associated with them. The moniker
is used to manage the keys as it is far more user friendly that an Ethereum
address or public key.
New¶
The new
subcommand generates a new key pair and associates it with the
specified moniker. You will be prompted for a passphrase which is used to
encrypt the keyfile. It writes the encrypted keyfile to the monetd keystore
area by default. The moniker must be unique within your keystore. If you
attempt to create a duplicate, the command will abort with an error.
[..monetd] $ monetd help keys new
Generate a new cryptographic key-pair identified by [moniker].
If the --passfile flag is not specified, the user will be prompted to enter the
passphrase manually.
Usage:
monetd keys new [moniker] [flags]
Flags:
-h, --help help for new
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
--json output JSON instead of human-readable format
--passfile string file containing the passphrase
-v, --verbose verbose output
Inspect¶
[..monetd] $ monetd help keys display
Manage keys in the [datadir]/keystore folder.
Note that other Monet tools, like monetcli and monet-wallet, use the same
default [datadir]/keystore.
+------------------------------------------------------------------------------+
| Please take all the necessary precautions to secure these files and remember |
| the passwords, as it will be impossible to recover the keys without them. |
+------------------------------------------------------------------------------+
Keys are associated with monikers and encrypted in password-protected files in
[datadir]/keystore/[moniker].json. Keyfiles contain JSON encoded objects, which
Ethereum users will recognise as the de-facto Ethereum keyfile format. Indeed,
Monet and the underlying consensus algorithm, Babble, use the same type of keys
as Ethereum. A key can be used to run a validator node, or to control an account
with a token balance.
Usage:
monetd keys [command]
Available Commands:
inspect inspect a keyfile
list list keyfiles
new create a new keyfile
update change the passphrase on a keyfile
Flags:
-h, --help help for keys
--json output JSON instead of human-readable format
--passfile string file containing the passphrase
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
Use "monetd keys [command] --help" for more information about a command.
A sample session showing the command usage with and without the --private
parameter.
$ monetd keys inspect node0 --private
Passphrase:
Address: 0x02f6f3D24E447218d396C14F3B47f9Ea369DADf9
Public key: 0481d3528eec6138f8428932e4fe99571a4f77bd79ae13219540b0a929014cb490a4e5ced2f9e651b531522c2567b6dc5de75d485193615e768b8aa1190603d2c2
Private key: bc553aaa7e55c5d0f58f6897ba9bffdb88233c420da622d363f2fe4bd6d78df1
$ monetd keys inspect node0
Passphrase:
Address: 0x02f6f3D24E447218d396C14F3B47f9Ea369DADf9
Public key: 0481d3528eec6138f8428932e4fe99571a4f77bd79ae13219540b0a929014cb490a4e5ced2f9e651b531522c2567b6dc5de75d485193615e768b8aa1190603d2c2
Update¶
The update
subcommand allows you to change the passphrase for an encrypted
key file. You are prompted for the old passphrase, then you need to enter, and
confirm, the new passphrase.
You can suppress the prompts by specifying the --passfile
parameter to
supply the current passphrase and --new-passphrase
to supply the new
passphrase.
[..monetd] $ monetd help keys update
change the passphrase on a keyfile
Usage:
monetd keys update [moniker] [flags]
Flags:
-h, --help help for update
--new-passfile string the file containing the new passphrase
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
--json output JSON instead of human-readable format
--passfile string file containing the passphrase
-v, --verbose verbose output
An example session updating the passphrase for a key:
$ monetd keys update node0
Passphrase:
Please provide a new passphrase
Passphrase:
Repeat passphrase:
List¶
The list
subcommand outputs a list of monikers corresponding to the
keyfiles in the keystore. These are the valid monikers that can be specified to
other monetd
commands.
[..monetd] $ monetd help keys list
list keyfiles
Usage:
monetd keys list [flags]
Flags:
-h, --help help for list
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
--json output JSON instead of human-readable format
--passfile string file containing the passphrase
-v, --verbose verbose output
An example session:
$ monetd keys list
node0
node1
node2
Config¶
The config
subcommand initialises the configuration for a monetd
node.
The folder can be overridden by the --datadir
parameter. The configuration
commands create all the files necessary for a node to join an existing network
or to create a new one.
There are 5 subcommands each described in a separate section below:
- clear — backup and clear configuration folder
- contract — display poa contract
- location — show the location of the configuration files
- build — create the configuration for a single-node network
- pull — pull the configuration files from a node
The two most common scenarios are:
- config build - config build creates the configuration for a single-node
- network, based on one of the keys in [datadir]/keystore.
This is a quick and easy way to get started with
monetd
. See Getting Started.
- config pull - config pull is used to join an existing network. It fetches the
- configuration from one of the existing nodes. See Joining a Network.
For more complex scenarios, please refer to Giverny Reference, which is a specialised Monet Toolchain configuration tool.
Clear¶
The clear
subcommand safely clears any previous monetd
configurations.
It renames the previous configuration with a .~n~
suffix, where n is the
lowest integer where the resultant filename does not already exist.
The configurations are renamed and not deleted to avoid the potential for inadvertent deletion of keys.
$ monetd config clear
Renaming /home/user/.monet to /home/user/.monet.~1~
Contract¶
The contract
subcommand generates the Solidity source for a POA smart
contract with the supplied node as the sole entry on the initial whitelist.
This command is not used in the standard workflow, but is provided as a
convenient mechanism to retrieve the solidity source.
[..monetd] $ monetd help config contract
monetd config contract
Outputs the standard monetd contract, configured with [moniker] as the initial
whitelist.
Usage:
monetd config contract [moniker] [flags]
Flags:
-h, --help help for contract
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
A sample session is as follows. The contract is written to stdout, so you will probably wish to redirect it to a file or a pager.
$ monetd config contract node0 | more
pragma solidity >=0.4.22;
/// @title Proof of Authority Whitelist Contract
...
Location¶
The location
subcommand displays the path to the configuration folder. With
the --expanded
parameter, a list of directories and configuration files are
output.
[..monetd] $ monetd help config location
The location subcommand shows the location of the monetd configuration files. It
respects any --datadir parameter.
If you specify --expanded then a list of configuration folders and directories
is output.
Usage:
monetd config location [flags]
Flags:
-x, --expanded show expanded information
-h, --help help for location
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
$ monetd config location
/home/user/.monet
$ monetd config location --expanded
Config root : /home/user/.monet
Babble Dir : /home/user/.monet/babble
EVM-Lite Dir : /home/user/.monet/eth
Keystore Dir : /home/user/.monet/keystore
Config File : /home/user/.monet/monet.toml
Wallet Config : /home/user/.monet/wallet.toml
Peers : /home/user/.monet/babble/peers.json
Genesis Peers : /home/user/.monet/babble/peers.genesis.json
Genesis File : /home/user/.monet/eth/genesis.json
Build¶
The build
subcommand initialises the bare-bones configuration to start
monetd
. It uses one of the accounts from the keystore to define a network
consisting of a unique node, which is automatically added to the PoA whitelist.
Additionally, all the accounts in [datadir]/keystore are credited with a large
amount of tokens in the genesis file. This command is mostly used for testing.
If the --address
flag is omitted, the first non-loopback address for this
instance is used.
[..monetd] $ monetd help config build
The build subcommand initialises the bare-bones configuration to get started
with monetd. It uses one of the accounts from the keystore to define a network
consisting of a unique node, which is automatically added to the PoA whitelist.
Additionally, all the accounts in [datadir]/keystore are credited with a large
amount of tokens in the genesis file. This command is mostly used for testing.
If the --address flag is omitted, the first non-loopback address for this
instance is used.
Usage:
monetd config build [moniker] [flags]
Flags:
--address string IP/hostname of this node (default "172.17.0.1")
-h, --help help for build
--passfile string file containing the passphrase
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
Pull¶
The pull
subcommand is used to join an existing network. It takes the
address of a running peer, and downloads the following set of files into the
configuration directory [datadir]:
- babble/peers.json : The current validator-set
- babble/peers.genesis.json : The initial validator-set
- eth/genesis.json : The genesis file
It also builds all the other configuration files required to run a monetd node. If the peer specified does not include a port, the default gossip port (1337) is used.
[..monetd] $ monetd help config pull
The pull subcommand is used to join an existing Monet network. It takes the
address (host:port) of a running node, and downloads the following set of files
into the configuration directory [datadir]:
- babble/peers.json : The current validator-set
- babble/peers.genesis.json : The initial validator-set
- eth/genesis.json : The genesis file
Additionally, this command configures the validator-key and the network address
of the new node. The --key and --passfile options refer to the validator-key,
while --address sets the network address of monetd.
Usage:
monetd config pull [host:port] [flags]
Examples:
monetd config pull "192.168.5.1:8080"
Flags:
--address string IP/hostname of this node (default "172.17.0.1")
-h, --help help for pull
--key string moniker of the key to use for this node (default "Jon")
--passfile string file containing the passphrase
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output
Run¶
The run
subcommands starts the monetd node running. Whilst there are legacy
parameters --babble.*
and --eth.*
, we strongly recommend that they are
not used. The equivalent changes can be made in the configuration files.
[..monetd] $ monetd help run
Run a MONET node.
Start a daemon which acts as a full node on a MONET network. All data and
configuration are stored under a directory [datadir] controlled by the
--datadir flag ($HOME/.monet by default on UNIX systems).
[datadir] must contain a set of files defining the network that this node is
attempting to join or create. Please refer to monetd config for tools to manage
this configuration.
Further options pertaining to the operation of the node are read from the
[datadir]/monetd.toml file, or overwritten by the following flags. The following
command displays the expected output:
monetd config location
Usage:
monetd run [flags]
Flags:
--api-listen string IP:PORT of Monet HTTP API service (default ":8080")
--babble.bootstrap Bootstrap Babble from database
--babble.cache-size int Number of items in LRU caches (default 50000)
--babble.heartbeat duration Heartbeat time milliseconds (time between gossips) (default 200ms)
--babble.listen string IP:PORT of Babble node (default "172.17.0.1:1337")
--babble.max-pool int Max number of pool connections (default 2)
--babble.sync-limit int Max number of Events per sync (default 1000)
--babble.timeout duration TCP timeout milliseconds (default 1s)
--eth.cache int Megabytes of memory allocated to internal caching (min 16MB / database forced) (default 128)
-h, --help help for run
Global Flags:
-d, --datadir string top-level directory for configuration and data (default "/home/jon/.monet")
-v, --verbose verbose output