XGR Chain — Node Operation & Validator Runbook
Document ID: XGRCHAIN-NODE-OPERATION
Last updated: 2026-05-24
Audience: Node operators, validator operators, RPC operators, infrastructure engineers
Release baseline: xgr-node release tag v2.0.5
Mainnet genesis source: xgr-network/XGR branch main, path genesis/mainnet/genesis.json
Node implementation: xgr-network/xgr-node
Operating mode: Standalone XGR Chain node, without xgrEngine and without XDaLa
1. Purpose
This document is the practical operator runbook for starting an XGR Chain node.
It is written so that a user can:
- check out the correct release
- build the node binary
- install the binary
- install the published mainnet genesis
- start a full node
- start an RPC node
- prepare a validator node
- generate validator keys
- join as a validator
- check validator-set state
- open a delegation pool
- enable or disable validator activity
- add stake
- request unstake
- withdraw stake
- monitor the node
This document is intentionally operational.
It does not describe XDaLa, XRC standards, UI behavior, or private engine integration.
2. Operating model
The public XGR Chain node can be built and run from:
https://github.com/xgr-network/xgr-node
Use release tag:
v2.0.5
The binary built from this tag is enough to run a normal XGR Chain node.
Do not build with embedded private engine tags for this public node guide.
Do not require:
xgrEngine
XDaLa
private engine module
engine_embedded build tag
The public go.mod explicitly states that xgrchain must build standalone even if the private ../xgrEngine repository is absent.
Standard build:
go build -o xgrchain .
Do not use:
go build -tags engine_embedded -o xgrchain .
unless a separate official operator instruction explicitly requires it.
3. Mainnet genesis reference
The published mainnet genesis is in the XGR repository:
Repository: xgr-network/XGR
Branch: main
Path: genesis/mainnet/genesis.json
Raw download path:
https://raw.githubusercontent.com/xgr-network/XGR/main/genesis/mainnet/genesis.json
Mainnet identity:
| Field | Value |
|---|---|
| Network name | xgrchain |
| Chain ID | 1643 |
| Chain ID hex | 0x66b |
| Genesis gas limit | 0x3938700 |
| Genesis gas limit decimal | 60,000,000 |
| Bootnode port | 1478 |
| PoS active from | 5446500 |
| Micro epoch size | 25 |
| Macro epoch micro factor | 40 |
| Derived PoS epoch size | 1000 blocks |
| Minimum PoS validators | 4 |
| Maximum PoS validators | 25 |
Install the published genesis to:
/etc/xgr/genesis.json
Example:
sudo install -d -m 0755 /etc/xgr
sudo curl -fsSL https://raw.githubusercontent.com/xgr-network/XGR/main/genesis/mainnet/genesis.json -o /etc/xgr/genesis.json
sudo chown root:root /etc/xgr/genesis.json
sudo chmod 0644 /etc/xgr/genesis.json
Do not edit this file locally for mainnet.
4. Placeholders used in this guide
Replace these placeholders before running commands:
| Placeholder | Meaning | Example |
|---|---|---|
<PUBLIC_IP> |
Public IP address of the server | 203.0.113.10 |
<RPC_URL> |
Client URL to a JSON-RPC endpoint | http://127.0.0.1:8545 |
<VALIDATOR_DATA_DIR> |
Validator node data directory | /var/lib/xgr/validator |
<NODE_DATA_DIR> |
Non-validator node data directory | /var/lib/xgr/node |
<STAKE_XGR> |
Stake amount in whole XGR units | 2000000 |
<MAX_DELEGATED_XGR> |
Pool cap in whole XGR units | 5000000 |
<MIN_DELEGATOR_XGR> |
Minimum delegation in whole XGR units | 1000 |
<COMMISSION_BPS> |
Commission in basis points | 500 means 5% |
Important syntax distinction:
| Context | Correct format |
|---|---|
| Server bind flag | --jsonrpc 127.0.0.1:8545 |
| CLI transaction command | --jsonrpc http://127.0.0.1:8545 |
| curl client URL | http://127.0.0.1:8545 |
Do not pass http://... to the server bind flag.
5. Build from release tag v2.0.5
Install prerequisites:
sudo apt-get update
sudo apt-get install -y git curl ca-certificates build-essential
Install Go 1.23.x.
The release declares:
go 1.23.4
toolchain go1.23.11
Check Go:
go version
Clone and build:
git clone https://github.com/xgr-network/xgr-node.git
cd xgr-node
git fetch --all --tags
git checkout v2.0.5
git status
git describe --tags --exact-match
go build -o xgrchain .
./xgrchain version
Expected source state:
HEAD detached at v2.0.5
or equivalent release-tag checkout.
6. Install binary and directories
Create system user and directories:
sudo useradd --system --home /var/lib/xgr --shell /usr/sbin/nologin xgr || true
sudo install -d -m 0755 /opt/xgr/bin
sudo install -d -m 0755 /etc/xgr
sudo install -d -m 0750 -o xgr -g xgr /var/lib/xgr
sudo install -d -m 0700 -o xgr -g xgr /var/lib/xgr/node
sudo install -d -m 0700 -o xgr -g xgr /var/lib/xgr/validator
sudo install -d -m 0750 -o xgr -g xgr /var/log/xgr
Install binary:
sudo install -m 0755 ./xgrchain /opt/xgr/bin/xgrchain
Install mainnet genesis:
sudo curl -fsSL https://raw.githubusercontent.com/xgr-network/XGR/main/genesis/mainnet/genesis.json -o /etc/xgr/genesis.json
sudo chown root:root /etc/xgr/genesis.json
sudo chmod 0644 /etc/xgr/genesis.json
Check:
/opt/xgr/bin/xgrchain version
test -f /etc/xgr/genesis.json
7. Start a normal full node
Use this for a node that follows the chain but does not validate.
Manual start:
sudo -u xgr /opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/node --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=false --log-level INFO --log-to /var/log/xgr/node.log
Important:
--seal=false
is mandatory for a normal full node.
The server default is sealing enabled, so non-validator nodes must explicitly disable sealing.
8. systemd service for a full node
Create service file:
sudo tee /etc/systemd/system/xgr-node.service >/dev/null <<'EOF'
[Unit]
Description=XGR Chain Full Node
After=network-online.target
Wants=network-online.target
[Service]
User=xgr
Group=xgr
Type=simple
ExecStart=/opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/node --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=false --log-level INFO --log-to /var/log/xgr/node.log
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
WorkingDirectory=/var/lib/xgr
ReadWritePaths=/var/lib/xgr /var/log/xgr
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
EOF
Replace <PUBLIC_IP>:
sudo vi /etc/systemd/system/xgr-node.service
Start service:
sudo systemctl daemon-reload
sudo systemctl enable xgr-node
sudo systemctl start xgr-node
Check:
systemctl status xgr-node
journalctl -u xgr-node -n 100 --no-pager
9. Start an RPC node
An RPC node is a full node with JSON-RPC exposed through a proxy.
Node process should bind locally:
sudo -u xgr /opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/node --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=false --json-rpc-batch-request-limit 20 --json-rpc-block-range-limit 1000 --concurrent-requests-debug 32 --websocket-read-limit 8192 --log-level INFO --log-to /var/log/xgr/rpc.log
Do not expose validator keys on an RPC node.
Public RPC should normally be exposed as:
Internet
-> TLS reverse proxy / load balancer
-> rate limiting
-> local RPC node on 127.0.0.1:8545
10. Basic node checks
Check client version:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"web3_clientVersion","params":[]}'
Check chain ID:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_chainId","params":[]}'
Expected:
0x66b
Check current block:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'
Check peer count:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"net_peerCount","params":[]}'
Check syncing:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_syncing","params":[]}'
11. Validator workflow overview
Validator onboarding has this sequence:
- Build and install
v2.0.5. - Install mainnet genesis.
- Create validator data directory.
- Generate validator ECDSA and BLS keys with
ibft join --init-only. - Fund the generated validator address with XGR for gas and stake.
- Start a synced node using the same validator data directory.
- Run
ibft join. - Check validator state.
- Configure/open delegation pool if desired.
- Set validator active.
- Run validator node with
--seal=true. - Monitor PoS overview and logs.
The validator data directory matters.
The same data directory must be used by:
- the node process
ibft joinibft stakeibft pool-configibft set-activeibft unstakeibft withdraw
Example validator data directory:
/var/lib/xgr/validator
12. Generate validator keys only
This step generates local validator ECDSA and BLS keys and prints the validator address.
It does not send an on-chain transaction.
sudo -u xgr /opt/xgr/bin/xgrchain ibft join --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --stake 2000000 --init-only
Output includes the validator address.
Fund that validator address with enough XGR for:
- gas
- validator self-stake
The --stake value is in whole XGR units.
Example:
--stake 2000000
means:
2,000,000 XGR
The join command converts XGR units to wei internally using 18 decimals.
13. Start a validator node before joining
Before the validator is active, start the node in synced non-sealing mode using the validator data directory.
Manual start:
sudo -u xgr /opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/validator --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=false --log-level INFO --log-to /var/log/xgr/validator.log
Wait until the node is synced.
Check:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_syncing","params":[]}'
Expected when synced:
false
14. Join as validator
Run the join transaction using the same validator data directory.
sudo -u xgr /opt/xgr/bin/xgrchain ibft join --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --stake 2000000
What this command does:
- ensures ECDSA and BLS keys exist
- loads validator keys from the secrets manager
- checks current on-chain stake
- queries validator self-stake minimum
- stakes missing amount if needed
- registers the validator BLS public key if needed
- returns validator status
The --stake value is in whole XGR units.
The command uses the staking contract methods:
stake()
registerBLSPublicKey(bytes)
validatorInfo(address)
accountStake(address)
VALIDATOR_MIN_SELF_STAKE()
Join does not mean instant consensus participation.
The command result states that activation becomes effective at the next epoch boundary.
15. Check validator set
Check staking-contract validator set:
/opt/xgr/bin/xgrchain ibft validators --jsonrpc http://127.0.0.1:8545
This returns:
- minimum validator count
- maximum validator count
- validator threshold
- validator addresses
- stake balances
- BLS public keys where available
Check full PoS overview:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
Expected high-level fields on mainnet:
posActive = true
posFromBlock = 0x531c04
epochSize = 0x3e8
microEpochSize = 0x19
minimumNumValidators = 0x4
maximumNumValidators = 0x19
For the validator address, check:
currentlyValidating
stakingActive
currentStake
selfStake
delegatedRawStake
delegatedActiveStake
totalActiveCurrentStake
16. Open a delegation pool
A validator can open a delegation pool after it has a joined self-position.
Use:
sudo -u xgr /opt/xgr/bin/xgrchain ibft pool-config --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --enabled=true --max-total-delegated 5000000 --min-delegator-stake 1000 --commission-bps 500
Meaning:
| Flag | Meaning |
|---|---|
--enabled=true |
Enables delegation pool |
--max-total-delegated 5000000 |
Pool accepts up to 5,000,000 XGR delegated stake |
--min-delegator-stake 1000 |
Minimum delegation is 1,000 XGR |
--commission-bps 500 |
Validator commission is 500 bps = 5% |
Amounts are whole XGR units.
The command converts them to wei internally.
Commission limit:
commission-bps must be <= 10000
Disable delegation pool:
sudo -u xgr /opt/xgr/bin/xgrchain ibft pool-config --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --enabled=false --max-total-delegated 0 --min-delegator-stake 0 --commission-bps 0
Check pool and delegator state:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorDelegators","params":["<VALIDATOR_ADDRESS>"]}'
Replace:
<VALIDATOR_ADDRESS>
with the validator address printed by ibft join --init-only or ibft join.
17. Activate validator
Set validator active:
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=true
The command sends:
setActive(true)
to the staking contract from the validator key.
Check result with:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
Then check the validator entry.
Important fields:
stakingActive
currentlyValidating
joinEffectiveAtBlock
18. Start validator in sealing mode
After join and activation, run validator node with sealing enabled.
Manual start:
sudo -u xgr /opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/validator --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=true --log-level INFO --log-to /var/log/xgr/validator.log
If using systemd, set:
--seal=true
and use the validator data directory:
--data-dir /var/lib/xgr/validator
19. systemd service for validator
Create service:
sudo tee /etc/systemd/system/xgr-validator.service >/dev/null <<'EOF'
[Unit]
Description=XGR Chain Validator
After=network-online.target
Wants=network-online.target
[Service]
User=xgr
Group=xgr
Type=simple
ExecStart=/opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/validator --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=true --log-level INFO --log-to /var/log/xgr/validator.log
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
WorkingDirectory=/var/lib/xgr
ReadWritePaths=/var/lib/xgr /var/log/xgr
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=true
[Install]
WantedBy=multi-user.target
EOF
Replace <PUBLIC_IP>:
sudo vi /etc/systemd/system/xgr-validator.service
Start:
sudo systemctl daemon-reload
sudo systemctl enable xgr-validator
sudo systemctl start xgr-validator
Check:
systemctl status xgr-validator
journalctl -u xgr-validator -n 100 --no-pager
20. Check local validator key
The local IBFT status command uses gRPC.
/opt/xgr/bin/xgrchain ibft status --grpc-address 127.0.0.1:9632
This returns the current validator key known by the local node.
Use this to verify that the running node is using the expected validator identity.
21. Add more self-stake
To increase validator stake:
sudo -u xgr /opt/xgr/bin/xgrchain ibft stake --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --amount 100000
This sends:
stake()
with value:
100000 XGR
The --amount value is in whole XGR units and is converted to wei using 18 decimals.
Check stake after transaction:
/opt/xgr/bin/xgrchain ibft validators --jsonrpc http://127.0.0.1:8545
or:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
22. Set validator inactive
To stop active validator participation through staking state:
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=false
This sends:
setActive(false)
After deactivation:
- the validator remains on disk
- keys remain in the data directory
- the validator does not instantly disappear from every view
- epoch-boundary timing matters
- unstake/withdraw actions have timing rules
Check:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
Look for:
stakingActive
deactivatedAtBlock
deactivateEffectiveAtBlock
unstakeAvailableAtBlock
canUnstakeNow
23. Request unstake
Unstake is a full exit path.
The command requires validator deactivation first.
Step 1: deactivate.
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=false
Step 2: wait until the required epoch boundary has passed.
Step 3: request unstake.
sudo -u xgr /opt/xgr/bin/xgrchain ibft unstake --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator
The command sends:
unstake()
If called too early or while still active, the command returns a clear error.
24. Withdraw stake
Withdraw is for withdrawing a specific amount from staking contract state.
Partial withdraw example:
sudo -u xgr /opt/xgr/bin/xgrchain ibft withdraw --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --amount 100000
This sends:
withdraw(uint256)
with:
100000 XGR
The --amount value is in whole XGR units.
Preconditions:
- validator must be deactivated
- epoch transition must have passed where required
- amount must be greater than zero
- remaining stake must satisfy contract rules
Full exit normally uses:
sudo -u xgr /opt/xgr/bin/xgrchain ibft unstake --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator
25. Re-activate validator after inactivity
If the validator was set inactive but should return:
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=true
Then ensure the validator service runs with sealing enabled:
sudo systemctl restart xgr-validator
Check logs:
journalctl -u xgr-validator -n 100 --no-pager
Check validator state:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
26. Operator command summary
Build
git clone https://github.com/xgr-network/xgr-node.git
cd xgr-node
git fetch --all --tags
git checkout v2.0.5
go build -o xgrchain .
Start full node
sudo -u xgr /opt/xgr/bin/xgrchain server --chain /etc/xgr/genesis.json --data-dir /var/lib/xgr/node --libp2p 0.0.0.0:1478 --nat <PUBLIC_IP> --jsonrpc 127.0.0.1:8545 --grpc-address 127.0.0.1:9632 --seal=false
Generate validator keys
sudo -u xgr /opt/xgr/bin/xgrchain ibft join --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --stake 2000000 --init-only
Join validator set
sudo -u xgr /opt/xgr/bin/xgrchain ibft join --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --stake 2000000
Show validators
/opt/xgr/bin/xgrchain ibft validators --jsonrpc http://127.0.0.1:8545
Open delegation pool
sudo -u xgr /opt/xgr/bin/xgrchain ibft pool-config --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --enabled=true --max-total-delegated 5000000 --min-delegator-stake 1000 --commission-bps 500
Activate validator
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=true
Deactivate validator
sudo -u xgr /opt/xgr/bin/xgrchain ibft set-active --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --value=false
Add stake
sudo -u xgr /opt/xgr/bin/xgrchain ibft stake --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --amount 100000
Request unstake
sudo -u xgr /opt/xgr/bin/xgrchain ibft unstake --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator
Withdraw
sudo -u xgr /opt/xgr/bin/xgrchain ibft withdraw --jsonrpc http://127.0.0.1:8545 --data-dir /var/lib/xgr/validator --amount 100000
27. Troubleshooting
Node does not start
Check:
journalctl -u xgr-node -n 200 --no-pager
Common causes:
- wrong
--chainpath - missing
--data-dir - data directory permissions wrong
- port already in use
- invalid
--natIP - genesis file edited locally
Node syncs but does not validate
Check:
/opt/xgr/bin/xgrchain ibft status --grpc-address 127.0.0.1:9632
Check PoS overview:
curl -s -X POST http://127.0.0.1:8545 -H 'content-type: application/json' --data '{"jsonrpc":"2.0","id":1,"method":"eth_getPosValidatorsOverview","params":[]}'
Common causes:
- node running with
--seal=false - validator not joined
- validator not active
- validator not effective until epoch boundary
- wrong data directory
- validator key not funded
- not enough stake
- peer count too low
- node not synced
Join fails with insufficient balance
The join command stakes from the validator address.
Fix:
- fund the validator address printed by
ibft join --init-only - include enough XGR for stake plus gas
- rerun
ibft join
Pool config fails
Common causes:
- validator has not joined
- wrong
--data-dir - pool enabled with
--max-total-delegated 0 --commission-bpsgreater than10000
Unstake fails
Common causes:
- validator is still active
- deactivation epoch boundary has not passed
- wrong validator key / data directory
- staking contract state does not permit the operation yet
28. Security rules
Validator nodes:
- do not expose public JSON-RPC directly
- do not reuse validator keys on RPC nodes
- keep
/var/lib/xgr/validatorreadable only by thexgruser - use firewall rules
- use key-based SSH only
- monitor process, disk, peers and block height
- back up validator key material securely
RPC nodes:
- use
--seal=false - do not contain validator keys
- run behind TLS reverse proxy
- enforce rate limits
- restrict debug endpoints
- monitor request volume and error rate
Filesystem:
sudo chown -R xgr:xgr /var/lib/xgr
sudo chmod -R go-rwx /var/lib/xgr/validator
sudo chmod -R go-rwx /var/lib/xgr/node
29. Final checklist
Before considering a node production-ready:
- binary built from
v2.0.5 - mainnet genesis from
xgr-network/XGR:genesis/mainnet/genesis.json - chain ID returns
0x66b - node reaches current block height
- peer count is non-zero
- full/RPC node uses
--seal=false - validator node uses
/var/lib/xgr/validator - validator key address is funded
ibft joincompleted- validator appears in
ibft validators - delegation pool configured if desired
set-active --value=truecompleted- validator service uses
--seal=true - PoS overview reports expected validator state
- logs show no repeated signer or consensus errors
- firewall and RPC exposure are correct
- backups exist for validator key material
This guide is for operating XGR Chain as a standalone public node.
It does not require xgrEngine.
It does not require XDaLa.