Docker Development
Local Docker clusters, state-sync RPC nodes, and monitoring for Paxeer X development and testing.
Paxeer-X-Network/docker/, Paxeer-X-Network/MakefileContainers for the complete Paxeer X stack
Chain development containers cover EVM and Cosmos execution. The monorepo also provides images for the kernel, hosted gateway and core, receipt authority, registry, agent boundary, Human services, relay/archive, bridge relayer, and application surfaces.
| Image source | Role |
|---|---|
docker/platform-node/ | Kernel daemon, genesis tooling, bootstrap, and supervisor |
docker/platform-gateway/ and docker/platform-core/ | Public receipt-verifying ingress and internal core boundary |
docker/platform-authority/ and docker/platform-agent-boundary/ | Receipt authority and agent authorization boundary |
docker/platform-registry/ and docker/human-service/ | Discovery registry and Human service components |
docker/relay-archive/ and docker/bridge-relayer/ | Independent history distribution and bridge delivery |
Hosted manifests under platform/hosted/ define the service topology, persistent storage, probes, and infrastructure boundaries. The chain Docker Compose files below run their declared development topology; assembling the full product also requires the kernel, gateway, registry, and user-service dependencies.
Mount persistent state separately from runtime sockets and credentials. Pin image revisions and matching genesis artifacts. Publish the gateway through TLS ingress and keep core administration, signer channels, and node-local listeners private. Check /readyz and /livez where the selected service defines them, then verify an application receipt and its settlement lifecycle. See operator roles and settlement.
Prerequisites
macOS
Install Docker Desktop from docs.docker.com/desktop/install/mac-install/
Ubuntu
Install Docker Engine and Docker Compose:
- Docker: docs.docker.com/engine/install/ubuntu/
- Docker Compose: docs.docker.com/compose/install/other/
Four-Node Local Cluster
The standard development setup runs a four-validator Paxeer cluster on a private network (192.168.10.0/24).
Start Cluster
# Build and start (first time or after code changes)
make docker-cluster-start
# Quick start (skip build if paxd binary exists)
make docker-cluster-start-skipbuildThis launches four pax-node-* containers. Genesis files and logs are generated under build/generated/.
Node Ports
| Node | P2P | RPC | gRPC | EVM RPC | IP |
|---|---|---|---|---|---|
| node0 | 26656-26658 | 26657 | 9090-9091 | 8545-8546 | 192.168.10.10 |
| node1 | 26659-26661 | 26660 | 9092-9093 | 8547-8548 | 192.168.10.11 |
| node2 | 26662-26664 | 26663 | 9094-9095 | 8549-8550 | 192.168.10.12 |
| node3 | 26665-26667 | 26666 | 9096-9097 | 8551-8552 | 192.168.10.13 |
Monitor Logs
# Tail logs for node 0
tail -f build/generated/logs/paxd-0.log
# View all logs
ls -l build/generated/logs/SSH Into Container
# List containers
docker ps -a
# SSH into a node
docker exec -it pax-node-0 /bin/bashEnvironment Variables
The cluster supports environment variable configuration:
| Variable | Purpose |
|---|---|
NUM_ACCOUNTS | Number of test accounts to create |
SKIP_BUILD | Skip binary rebuild |
INVARIANT_CHECK_INTERVAL | State invariant check frequency |
UPGRADE_VERSION_LIST | Chain upgrade version schedule |
MOCK_BALANCES | Use mock balance data |
GIGA_EXECUTOR | Enable Giga executor backend |
GIGA_OCC | Enable optimistic concurrency control |
RECEIPT_BACKEND | Receipt storage backend |
AUTOBAHN | Enable Autobahn optimizations |
GIGA_STORAGE | Enable Giga storage engine |
GIGA_MIGRATE_FROM_MEMIAVL | Migrate from MEMIAVL to Giga |
GIGA_FLATKV_ONLY | Use flat key-value storage only |
Single Node (Not Recommended)
For minimal testing only:
make build-docker-node && make run-local-nodeThe four-node cluster is preferred for realistic consensus behavior.
Compose Files
| File | Purpose |
|---|---|
docker-compose.yml | Four-node cluster (base configuration) |
docker-compose.monitoring.yml | Prometheus + Grafana monitoring overlay |
docker-compose.giga-mixed.yml | Mixed Giga/legacy storage testing overlay |
Monitoring with Prometheus & Grafana
Start the cluster with monitoring containers:
# Start cluster + monitoring together
make docker-cluster-start-monitoring
# Stop cluster + monitoring together
make docker-cluster-stop-monitoringOr run monitoring scripts independently:
# Start Prometheus
./docker/monitornode/scripts/start-prometheus.sh
# Start Grafana
./docker/monitornode/scripts/start-grafana.sh
# Stop
./docker/monitornode/scripts/stop-prometheus.sh
./docker/monitornode/scripts/stop-grafana.shAccess UIs
- Grafana:
http://localhost:3000(login:admin/admin) - Prometheus:
http://localhost:9090
State Sync RPC Node
Test state-sync by starting an additional RPC node that syncs from the four-node cluster:
# Prerequisite: Start a 4-node cluster
make docker-cluster-start
# Wait until block height exceeds 500 (configurable via app.toml)
paxd status | jq
# Start state-sync RPC node
make run-rpc-nodeThe RPC node bootstraps from a recent snapshot instead of replaying full history.
docker/rpcnode/scripts/Fast Iteration & Local Development
Docker mounts local source directories, so you can edit code and rebuild without re-pulling dependencies:
- Edit code under
Paxeer-X-Network/(modules, consensus, SDK, storage, WASM) - Rebuild the node image:
make build-docker-node - Restart the cluster:
make docker-cluster-start
No go.mod replacements or sibling repositories required. The monorepo includes all dependencies.
Volumes
The compose files mount:
$PROJECT_HOME→/pax-protocol/pax-chain(source tree)$GO_PKG_PATH/mod→/root/go/pkg/mod(Go module cache)$GOCACHE→/root/.cache/go-build(Go build cache)
Deployment Scripts
Each node type has a multi-step initialization flow:
Local Node
step0_build.sh— Buildpaxdbinarystep1_configure_init.sh— Initialize node configurationstep2_genesis.sh— Generate genesis filestep3_add_validator_to_genesis.sh— Add validator to genesisstep4_config_override.sh— Override config files (ports, peers)step5_start_pax.sh— Startpaxddeploy.sh— Orchestrates all steps
RPC Node
step0_build.sh— Buildpaxdstep1_configure_init.sh— Initialize for state-syncstep2_start_pax.sh— Start with state-sync enableddeploy.sh— Orchestrates RPC node setup
docker/localnode/scripts/, docker/rpcnode/scripts/Docker Image
The cluster uses the pax-chain/localnode image built from Paxeer-X-Network/Dockerfile. Platform defaults to linux/amd64 but can be overridden with DOCKER_PLATFORM.
Network Configuration
The cluster creates a localnet bridge network with subnet 192.168.10.0/24. Each node has a static IP for deterministic peer configuration.