midnight-network — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited midnight-network (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Complete guide to running and managing Midnight Network infrastructure.
| Component | Purpose | Requirements |
|---|---|---|
| Full Node | Validate transactions, relay blocks | 4+ CPU, 8GB RAM, 100GB SSD |
| Archive Node | Full history storage | 4+ CPU, 16GB RAM, 1TB SSD |
| Validator | Produce blocks, consensus | 8+ CPU, 16GB RAM, 100GB SSD, stake |
| Indexer | Query API for DApps | 4+ CPU, 8GB RAM, 500GB SSD, v4.3.3 |
| Proof Server | Generate ZK proofs | 8+ CPU, 32GB RAM, GPU recommended |
#### Option 1: midnight-local-dev (Full Local Network)
Provides complete local network with Node, Indexer, Proof Server:
git clone https://github.com/midnightntwrk/midnight-local-dev
cd midnight-local-dev
npm install
npm startNetwork ID: undeployed
Services & Ports:
| Service | Port | URL |
|---|---|---|
| Node | 9944 | http://localhost:9944 |
| Indexer GraphQL | 8088 | http://localhost:8088/api/v4/graphql |
| Indexer WS | 8088 | ws://localhost:8088/api/v4/graphql/ws |
| Proof Server | 6300 | http://localhost:6300 |
Docker Images: node 0.24.0, indexer 4.3.3, proof-server 8.0.3
Funding: Use interactive menu to fund wallets with 50,000 tNIGHT each.
#### Standalone Mode (No Menu)
docker compose -f standalone.yml up -d#### Option 2: midnight-wallet-cli
npx midnight-wallet-cli serve#### Option 3: midnight-playground
# Using Docker (recommended)
docker run -d \
--name midnight-node \
-p 9933:9933 \
-p 9944:9944 \
-v midnight-data:/data \
midnightnetwork/node:v0.24.0 \
--network testnet-02 \
--pruning archive# See detailed guide below
# Requires staking tokens
docker run -d \
--name midnight-validator \
-p 9933:9933 \
-p 9944:9944 \
--restart unless-stopped \
-v validator-data:/data \
midnightnetwork/node:v0.24.0 \
--validator \
--staking <stake-address># Using Docker Compose with PostgreSQL
# v4.0.0+ required
docker run -d \
--name midnight-indexer \
-p 3100:3100 \
-e DATABASE_URL=postgresql://postgres:password@db:5432/indexer \
-e NETWORK=testnet-02 \
--link midnight-postgres:db \
midnightnetwork/indexer:v4.3.3| Port | Protocol | Purpose |
|---|---|---|
| 9933 | HTTP | RPC API |
| 9944 | WebSocket | Subscriptions |
| 9615 | Prometheus | Metrics |
# docker-compose.yaml
version: '3.8'
services:
node:
image: midnightnetwork/node:v0.24.0
ports:
- "9933:9933"
- "9944:9944"
environment:
- NETWORK=testnet-02
volumes:
- node-data:/data
restart: unless-stoppedversion: '3.8'
services:
node:
image: midnightnetwork/node:v0.24.0
ports:
- "9933:9933"
environment:
- NETWORK=testnet-02
volumes:
- node-data:/data
postgres:
image: postgres:15
environment:
POSTGRES_PASSWORD: secret
POSTGRES_DB: indexer
volumes:
- postgres-data:/var/lib/postgresql/data
indexer:
image: midnightnetwork/indexer:v4.3.3
ports:
- "3100:3100"
environment:
- DATABASE_URL=postgresql://postgres:secret@postgres:5432/indexer
- NETWORK=testnet-02
depends_on:
- postgres
- node
volumes:
node-data:
postgres-data:version: '3.8'
services:
validator:
image: midnightnetwork/node:v0.24.0
ports:
- "9933:9933"
- "9944:9944"
environment:
- NETWORK=mainnet
- VALIDATOR_MODE=true
- STAKING_ADDRESS=<your-address>
volumes:
- validator-keys:/keys
- validator-data:/data
restart: unless-stopped
deploy:
resources:
limits:
memory: 16G| Role | Stake Required | Hardware |
|---|---|---|
| Full Validator | TBD | 8+ CPU, 16GB RAM |
# Generate staking keypair
docker run --rm -v keys:/keys midnightnetwork/node:v0.24.0 \
keygen --output /keys/stashdocker run -d \
--name midnight-validator \
-v keys:/keys \
-e NETWORK=mainnet \
-e VALIDATOR_KEY=stash.ss58 \
midnightnetwork/node:v0.24.0 \
--validator# Check status
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"validator_key","id":1}'
# Get producing status
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"validator_producing","id":1}'
# Manual key rotation
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"validator_rotate","params":["newKey"],"id":1}'# Start PostgreSQL first
docker run -d \
--name midnight-postgres \
-e POSTGRES_PASSWORD=secret \
-e POSTGRES_DB=indexer \
-v postgres-data:/var/lib/postgresql/data \
postgres:15
# Start Indexer
docker run -d \
--name midnight-indexer \
-p 3100:3100 \
-e DATABASE_URL=postgresql://postgres:secret@host:5432/indexer \
-e NETWORK=testnet-02 \
--link midnight-postgres:db \
midnightnetwork/indexer:v4.3.3Endpoint: http://localhost:3100/graphql
# Query transactions
query {
transactions(
first: 10,
after: "cursor"
) {
edges {
node {
id
hash
block {
height
}
}
}
}
}
# Query contracts
query {
contracts(filter: { hasCode: true }) {
nodes {
address
codeHash
}
}
}| Metric | Type | Description |
|---|---|---|
midnight_blocks_produced | Counter | Total blocks produced |
midnight_transactions_total | Counter | Total transactions |
midnight_peer_count | Gauge | Connected peers |
midnight_block_height | Gauge | Current height |
midnight_sync_status | Gauge | Syncing (0/1) |
# Node health
curl http://localhost:9933/health
# Indexer health
curl http://localhost:3100/health
# Prometheus metrics
curl http://localhost:9615/metrics# Block production rate
rate(midnight_blocks_produced[5m])
# Transaction throughput
rate(midnight_transactions_total[5m])
# Peer count
midnight_peer_count
# Sync progress
midnight_block_height / ignoring (job) (max by (job) (midnight_block_height))| Network | Purpose | Chain ID | RPC URL | Status |
|---|---|---|---|---|
| mainnet | Production | NIGHT | https://rpc.mainnet.midnight.network | Active |
| preprod | Testing | preprod | https://rpc.preprod.midnight.network | Active (use this) |
| preview | Early Dev | preview | https://rpc.preview.midnight.network | ⛔ Discontinued |
| testnet-02 | Integration | testnet-02 | - | ⛔ Discontinued |
⚠️ Important: Both Preview and Testnet-02 are discontinued. Use Preprod for all testing.
# Node
export MIDNIGHT_NETWORK=preprod
export MIDNIGHT_RPC_PORT=9933
export MIDNIGHT_WS_PORT=9944
export MIDNIGHT_PRUNING=archive
# Indexer
export DATABASE_URL=postgresql://user:pass@host:5432/midnight
export NETWORK=preprod
export PORT=3100Node not syncing:
# Check sync status
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"system_syncStatus","id":1}'
# Check peers
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"system_peers","id":1}'Indexer not syncing:
# Check indexer logs
docker logs midnight-indexer
# Check database connection
docker exec midnight-indexer psql -U postgres -c "SELECT 1"Validator not producing:
# Verify keys
ls -la /keys/
# Check stake balance
curl -X POST http://localhost:9933 -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"validator_key","id":1}'This skill covers infrastructure and operations. For related areas see these skills.
references/node-architecture.mdreferences/node-setup.mdreferences/validator-guide.mdreferences/api-reference.mdreferences/operations.mdreferences/local-devnet.mdreferences/diagnostics.md~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.