Skip to content
Minotaur
+ 02 · Validator

Validator Overview

What validators do on Bittensor Subnet 112 — running the Solving Engine, dual scoring, N-of-M consensus, weight emission, and peer discovery.

The Minotaur validator is the backbone of Bittensor Subnet 112 — a distributed intent execution platform. Validators run the Solving Engine, simulate execution plans on Ethereum-/Base-/BT-EVM-forks via Anvil, score results through a dual-scoring system, and reach consensus before relaying approved transactions on-chain.

What Validators Do

Validators perform six core functions:

  1. Run the Solving Engine

    Execute the champion miner’s solver code to generate execution plans for user orders in the Intent OrderBook.

  2. Simulate on Anvil forks

    Plans are executed on local Anvil forks of each supported chain (Ethereum mainnet, Base, BT EVM), using snapshot/revert isolation so no real state is modified.

  3. Dual scoring

    Every plan is scored twice. The JavaScript score (from the app’s JS scoring module, range 0.01.0) and the on-chain score (from contract simulation on the Anvil fork) must both exceed the configured threshold.

  4. N-of-M consensus

    The leader validator proposes plans; follower validators independently re-simulate, re-score, and sign EIP-712 approvals. Exact score match is not required — followers sign if both scores pass their threshold. Default quorum is 6666 bps (2-of-3 BFT) read from on-chain ValidatorRegistry.

  5. Weight emission

    Champion-takes-all model. The miner who submitted the currently active solver receives 100% of emissions via set_weights(). At Alpha launch only 5% of miner emissions are enabled, ramping as the network proves out.

  6. Champion-consensus signing (api service)

    On the optional api side, validators re-benchmark the leader’s champion candidate inside a sandboxed Docker container and sign the certification if scores hold up.

Architecture

Leader / Follower Model

Validators operate in a leader/follower topology:

  • Leader: The validator with the highest TAO stake on subnet 112. Ties broken by hotkey (lexicographic ascending). The leader runs the BlockLoop, processes all orders, and broadcasts proposals to followers.
  • Followers: All other registered validators. They receive proposals from the leader, independently re-simulate and re-score each plan, and sign EIP-712 approvals if both scores pass threshold.
  • Leader failover: When the leader changes (e.g., stake rebalancing), the Relayer drops all in-flight work. The new leader reprocesses everything from scratch.

BlockLoop Pipeline

The BlockLoop is the core runtime for validators, executing once per tick (default: every 12 seconds, matching Ethereum block time).

Each tick:

  1. Expire stale orders

    Drop any orders past their deadline.

  2. Snapshot open orders

    Pull all OPEN orders from the Intent OrderBook.

  3. Process each order

    • Generate an execution plan (via the Solving Engine / miner solver)
    • Simulate the plan on an Anvil fork (captures on-chain score and token transfer events)
    • Run JS scoring (score(plan, state, context))
    • Both scores must exceed threshold (default: 0.5)
    • Broadcast proposal to follower validators for consensus
    • Collect N-of-M EIP-712 signatures
    • Submit the approved plan via the Relayer
  4. Cross-chain orders

    Two-phase lifecycle — source leg execution, then BRIDGING status while the bridge transfer completes, then destination leg execution. (Cross-chain ships in Phase 5.)

Dual Scoring

Every execution plan is scored at two layers:

LayerWhere it runsWhat it checks
JavaScriptValidator Node.js sandboxApp-defined scoring logic via score(plan, state, context). Reads simulation data including token transfers, gas usage, and state changes. Score range: 0.01.0.
SolidityAnvil fork (simulated on-chain)Contract-enforced invariants, user signature verification, validator quorum checks. Executed via ephemeral proxy (CREATE2) for state isolation.

Intent OrderBook

The Intent OrderBook is the universal entry point for all intent execution:

  • One-shot orders: Execute once and complete.
  • Perpetual orders: Re-execute every tick when score exceeds threshold. No explicit trigger gate — validators try every tick.
  • Orders are signed by users (EIP-712) and submitted to the OrderBook.
  • The leader validator’s BlockLoop drains the OrderBook each tick.

HTTP API Endpoints

The canonical third-party validator stack exposes HTTP on two ports. Both must be reachable from the public internet so the current leader can deliver proposals.

Validator daemon — port 9100

MethodPathDescription
GET/healthService health, loaded intents, uptime
GET/identitySelf-attested EIP-712 binding (evm_address, hotkey, axon_url) for peer discovery
GET/intents/availableActive intents available for miners
GET/intents/{app_id}/detailsDetailed info for a specific app
GET/intents/{app_id}/scoresScore history for a specific app
POST/intents/{app_id}/submitAccept a miner plan submission
GET/weightsCurrent champion and weight mapping
GET/weights/historyHistorical weight emissions
GET/blockloop/statusBlock loop tick statistics
POST/orders/submitSubmit an order to the OrderBook
GET/ordersList orders in the OrderBook
POST/apps/{app_id}/quoteGet a dry-run quote for an intent
POST/consensus/proposalReceive an order-consensus proposal from the leader (followers)
GET/consensus/infoOrder-consensus configuration and discovered peer info
GET/leaderLeader status and metagraph info
POST/reloadReload app definitions from store

API service — port 8080

MethodPathDescription
GET/healthService health + champion-consensus state
GET/identitySame EIP-712 binding as :9100 (api-side peer discovery)
GET/v1/apps/List App Intents (read endpoint, no auth)
POST/v1/apps/Create an App Intent (gated by X-Admin-Key header when ADMIN_API_KEY is set)
POST/v1/apps/{app_id}/deployDeploy an App Intent on-chain (admin-gated)
POST/v1/submissionsGit/Docker miner submission (signature required)
POST/v1/submissions/sourceInline source submission (queues straight to benchmarking)
POST/v1/solver/round/consensus/proposalReceive a champion-consensus proposal from the leader (followers)
POST/v1/solver/round/certifySubmit a certified champion (leader-only)

Entry Points

There are three ways to run a validator:

1. Canonical validator stack RECOMMENDED

Docker Compose with the daemon, the api service, and the three Anvil forks pre-configured. This is what a third-party validator runs in production:

terminal SH
cd platform/validator
cp .env.example .env  # fill in every YOUR_* placeholder
docker compose --profile autoupdate up -d   # with Watchtower auto-update
# ── or ──
docker compose up -d                          # without

See the Quickstart for the full end-to-end setup including on-chain ValidatorRegistry onboarding.

2. Standalone validator daemon

Direct Python process, you bring your own Anvil + Subtensor connections. Useful for advanced operators who want systemd supervision instead of Docker:

terminal SH
python -m minotaur_subnet.validator.main \
--port 9100 --epoch-seconds 1200

3. Local testnet DEVELOPMENT ONLY

Full Docker Compose stack including subtensor, Anvil forks, API, validator, miner, relayer, and frontend. For local development of the protocol itself, not for connecting to mainnet:

terminal SH
make testnet-up

Requirements

  • Python 3.12 with project dependencies installed
  • Node.js 20.x for the JS scoring engine
  • Foundry (anvil, forge, cast) for simulation and contract interaction
  • Bittensor wallet with a registered hotkey on subnet 112
  • Upstream RPC URLs for Ethereum (Alchemy/Infura), Base (Alchemy/Infura), and BT EVM (https://lite.chain.opentensor.ai)
  • EVM private key for EIP-712 consensus signing (a fresh key — does not hold funds)
  • On-chain ValidatorRegistry membership on every chain you operate on (manual handshake with the registry owner — see Quickstart Step 4)
  • Sufficient TAO stake to participate in leader election

See the Quickstart for step-by-step setup and the Network Reference for current mainnet contract addresses.