How to run a Validator node

Prerequisites

Install Docker (opens in a new tab)

Install Docker Engine (opens in a new tab)

Install docker-compose (opens in a new tab) as well if it is not installed with Docker by default

Get the official Docker Image: iconloop/icon2-node

System Requirements

CPU:  minimum 4core, recommend 8core +
RAM:  minimum 16GB, recommend 32GB +
DISK : minimum SSD 1.5TB, recommend SSD 2TB +
Network: minimum 1Gbps, recommend 2Gbps +

External Communications
TCP 7100: TCP port used for peer-to-peer connection between peer nodes.
TCP 9000: JSON-RPC or RESTful API port serving application requests.P-Rep must allow TCP connections to port 7100 and 9000 of an external host. ( Use 0.0.0.0/0 for a source from any network )

Getting started

Open docker-compose.yml in a text editor and add the following content:

version: "3"
services:
   prep:
      image: iconloop/icon2-node
      container_name: "icon2-node"
      network_mode: host
      restart: "always"
      environment:
         SERVICE: "MainNet"  # MainNet, SejongNet  ## network type
         GOLOOP_LOG_LEVEL: "debug" # trace, debug, info, warn, error, fatal, panic
         KEY_STORE_FILENAME: "INPUT_YOUR_KEY_STORE_FILENAME" # e.g. keystore.json read a config/keystore.json
         # e.g. "/goloop/config/keystore.json" read a "config/keystore.json" of host machine
         KEY_PASSWORD: "INPUT_YOUR_KEY_PASSWORD"
         FASTEST_START: "true"    # It can be restored from latest Snapshot DB.

         ROLE: 3 # Validator = 3, API Endpoint = 0

      cap_add:
         - SYS_TIME

      volumes:
         - ./data:/goloop/data # mount a data volumes
         - ./config:/goloop/config # mount a config volumes ,Put your used keystore file here.
         - ./logs:/goloop/logs
      ports:
         - 9000:9000
         - 7100:7100

Start up

$ docker-compose pull && docker-compose up -d

To see the logs of the ICON2 node you can execute

$ tail -f logs/booting.log


$ tail -f logs/goloop.log

The directories(data, config, icon, logs …) are created by docker engine, but config directory needs to importing your keystore file.

.
β”œβ”€β”€ docker-compose.yml
β”œβ”€β”€ config               # configuration files
β”‚   └── keystore.json   # Import the your keystore file

β”œβ”€β”€ data                # block data
β”‚   β”œβ”€β”€ 1
β”‚   β”œβ”€β”€ auth.json
β”‚   β”œβ”€β”€ cli.sock
β”‚   β”œβ”€β”€ ee.sock
β”‚   └── rconfig.json

β”œβ”€β”€ icon   # icon1 data for migrate. If a migration is completed, it will be auto-remove
β”‚   └── migrator_bm
└── logs   # log files
    β”œβ”€β”€ booting.log
    β”œβ”€β”€ health.log    # health state log
    β”œβ”€β”€ chain.log     # goloop chain action logs
    β”œβ”€β”€ download.log
    β”œβ”€β”€ download_error.log # download
    └── goloop.log   # goloop's log file

Docker environments settings

Namedefaulttyperequireddescription
SERVICEMainNetstrfalseService Name - (MainNet, SejongNet)
ROLE3inttrueRole of running node. 0: Citizen, 3: P-Rep
CONFIG_URLstrfalse
CONFIG_URL_FILEdefault_configure.jsonstrfalse
CONFIG_LOCAL_FILEconfigure.jsonstrfalse
IS_AUTOGEN_CERTfalseboolfalseAutomatically generate certificates
FASTEST_STARTfalseboolfalseDownload snapshot DB
KEY_STORE_FILENAMEkeystore.jsonstrtruekeystore.json file name
KEY_PASSWORDstrtruepassword of keystore.json file
USE_NTP_SYNCTrueboolfalseWhether to use NTP in container
NTP_SERVERstrfalseNTP Server
NTP_REFRESH_TIMEintfalsentp refresh time
SLACK_WH_URLstrfalseslack web hook url - If a problem occurs, you can receive an alarm with a slack.
USE_HEALTH_CHECKTrueboolfalseWhether to use health check
CHECK_TIMEOUT10intfalsesec - TIMEOUT when calling REST API for monitoring
CHECK_PEER_STACK6intfalsesec - Stack value to check the peer for monitoring.
CHECK_BLOCK_STACK10intfalsesec - Stack value to check the block for monitoring.
CHECK_INTERVAL10intfalsesec - check interval for monitoring
CHECK_STACK_LIMIT360intfalsecount - count- Restart container when stack value is reached
GOLOOP_LOG_LEVELdebugstrfalseLog Level - (trace,debug,info,warn,error,fatal,panic
LOG_OUTPUT_TYPEfilestrfalsesec - check interval for monitoring

Node Grades

Node grades are another term for node levels.

After successfully registering as a validator node using registerPrep (opens in a new tab) the grade of the node will be set to "0x2".

There are 3 node grades, detailed below. You can also check the grade return parameter from getPrep (opens in a new tab) function from the JSON-RPC API for more info

Grade numberUsageDescription
0x2Validator CandidateRegister your node as a candidate to become a block validator and network governance delegate
0x1Sub-ValidatorRegister your node as a sub-validator for block production and validation and network governance delegate
0x0Main ValidatorRegister your node as a validator for block production and validation and network governance delegate

Further Resources

Delegate tools (opens in a new tab)

CTRL + K