Skip to content

Run a Node

A STRATO node joins a STRATO network, and it can do so as a regular syncing node or as a validator. The two public networks are:

  • upquark: the production mainnet, and the default.
  • helium: the public testnet.

What a node gives you

  • Your own copy of the chain. The node syncs blocks from its peers and re-executes every transaction in SolidVM. It then checks the results against the block headers.
  • Every STRATO API, on your own host, all behind one nginx:
Path Service
/ The STRATO app
/api/ App backend API
/bloc/v2.2/ Bloc: contracts and transactions
/strato-api/eth/v1.2/ Core API: blocks, accounts, transactions, metadata
/cirrus/search/ Cirrus: indexed contract state
/rpc Ethereum JSON-RPC
/smd/ The STRATO Management Dashboard
/health Public health endpoint
  • A path to becoming a validator. A synced node can be admitted to the validator set (see below).

Components

strato-up runs a node as two groups: host processes and Docker containers.

Host processes

A small supervisor, convoke, starts these processes and restarts none of them. If any one exits, convoke stops the whole node.

Process Role
ethereum-discover Peer discovery on UDP 30303, seeded from the network's bootnodes
strato-p2p Block and transaction exchange with peers on TCP 30303
strato-sequencer Orders transactions and runs PBFT consensus (Blockstanbul)
vm-runner Executes transactions in SolidVM
strato-indexer Writes chain data to Postgres and Redis
slipstream Indexes contract state and events into the Postgres cirrus database
strato-api Core API and Bloc API (port 3000)
ethereum-jsonrpc Ethereum JSON-RPC (port 8545). On by default.
strato-network-monitor Watches network interfaces and resets peer timeouts
strato-logrotate Rotates the node's log files
blockapps-vault-wrapper-server Node-local Vault, only with --localAuth

The processes stream data to each other through JLog, an embedded log stored in the node directory. JLog has been the default streaming backend since 19.1, replacing Kafka.

Docker containers

Container Role
nginx Public entry point: TLS, OAuth/OIDC login, CSRF protection, routing
app-backend, app-ui The STRATO app
smd, apex The STRATO Management Dashboard and its backend. apex also serves /health.
postgres Databases eth (chain data) and cirrus (indexed contracts)
postgrest Read-only REST access to Cirrus at /cirrus/search
redis Block cache
prometheus Metrics
docs Swagger UI
local-auth Ory Kratos and Hydra identity provider, only with --localAuth

Node types

Regular node. Every node syncs, verifies and serves the chain. A node that is not in the validator set follows consensus but does not vote or propose.

Validator. A validator is identified by its node address: the address of the node key held in the Vault. That address appears as nodeAddress in /health.

A node is a validator when its address is in the validator set stored in MercataGovernance (the genesis contract at 0x100). The address gets into that set in one of two ways:

  • Admin vote. Registered network admins vote with voteToAddValidator / voteToRemoveValidator. A change passes with more than two thirds of the admins.
  • Staking. An operator registers in ValidatorRegistry, which anyone may do, and binds the node's address. It bonds at least the minimum stake, a governance parameter. It then activates, subject to the set's size limits. The staking contract adds the validator to MercataGovernance, and removes it automatically when it stops being eligible.

/health reports pbftData.is_validator for the local node. Validators need at least 8 GB of RAM.

For details, see Consensus.

In this section

  • Requirements: hardware, operating systems, ports, credentials, TLS and DNS
  • Install: build from source and start with strato-up
  • Configuration: flags, ethconf.yaml, environment variables, local auth, JSON-RPC and SSL
  • Operations: status, logs, restarts, upgrades, snapshots and troubleshooting

Related platform pages: