Loading
Loading

Neuron registration trends
Real estate professionals and data scientists struggle to develop accurate price prediction models without access to large, current datasets and objective evaluation against ground-truth sales data. Existing approaches either use proprietary data with limited distribution incentives or lack temporal validation—models are often evaluated on data they could have memorized during training.
A decentralized validation network solves this by creating a shared infrastructure where independent validators evaluate prediction models daily against never-before-seen property sales data. Validators download models, run them on recent sales (properties listed and sold within the last 30 days), score accuracy using Mean Absolute Percentage Error, and rank models transparently. This ensures models generalize rather than memorize, and the best performer receives the majority of network rewards.
RESI (Subnet 46 on Bittensor) implements this as a permissionless competition. Miners train ONNX models, commit model hashes to the blockchain (~30 days before evaluation to prevent data leakage), and upload to HuggingFace. Validators download models, verify commitments, run inference in isolated Docker containers, and set on-chain weights based on prediction accuracy. The network automatically distributes 99% of emissions to the top-scoring model, 1% to non-winners by score, and 0% to detected duplicates.
Use cases were auto-generated from the GitHub repository and may not reflect the latest changes.
RESI is a Bittensor subnet (subnet 46) that incentivizes development of accurate real estate price prediction models. Miners train ONNX models to predict US residential property prices, commit model hashes on-chain, and upload models to HuggingFace. Validators download and evaluate models daily against never-before-seen sales data (properties listed/sold within the last 30 days), scoring based on MAPE (Mean Absolute Percentage Error).
The best-performing model or earliest commit within a 0.3% threshold receives 99% of emissions, with remaining 1% distributed proportionally among non-winners.
RESI operates as a Bittensor subnet with three main components: (1) Miners train ML models to predict real estate prices, export them to ONNX format (≤200MB), upload to HuggingFace, and commit a model hash to the Bittensor blockchain via the miner CLI. (2) Validators run a Pylon service (Docker container) for chain interactions and a validator process (PM2-managed) that downloads miner models from HuggingFace, runs sandboxed ONNX inference using Docker containers against validation data (properties listed/sold in the last 30 days), computes MAPE scores, and determines weight distribution. (3) The Bittensor chain maintains the metagraph, stores commitments, and processes weight updates from validators. Pylon handles metagraph sync, commitment verification (checking extrinsic history via an archive node for 30+ day old models), and weight submission. Models must age ~30 days on-chain before validation, ensuring they are evaluated on never-before-seen data.
This information was auto-extracted from the GitHub repository and may be incomplete or out of date. Always refer to the subnet's GitHub repository for the latest instructions.
Daily evaluation occurs at 18:00 UTC. The winner (best score or earliest commit within 0.3% threshold) receives 99% emissions, non-winners share 1%, and detected duplicates receive 0%.
Evaluation runs daily against properties that existed and were listed/sold within the last 30 days. Models must be committed on-chain approximately 30 days before evaluation to ensure they cannot memorize recent data. The scoring mechanism uses MAPE (Mean Absolute Percentage Error), with a winner-set threshold of 0.3% (0.003) — all models within this margin of the best score are considered equivalent, and the earliest on-chain commitment wins.
This prevents copycats from displacing innovators while allowing genuine improvements to claim the top spot. Duplicate detection uses high-precision output comparison (1e-6); detected copiers are flagged and receive no emissions. The subnet automatically handles deregistration: if a miner's hotkey deregisters before their 30-day commitment ages, they can re-register once eligible without re-submitting.
The sections above were auto-generated from the GitHub repository and may not reflect the latest changes. View repository
Lightning Fast Private Inference
Decentralized Marketplace for Specialized Inference
FAQs were auto-generated from the GitHub repository and may not reflect the latest changes.
Holder & total-staked metrics as of 2h ago (hourly snapshot)
Hardware depends on model training approach (miners may use GPUs for training, but submission is ONNX format). Model must be ≤200MB and in ONNX format. Input shape (batch, 10-76) float32 for numeric features; optional property images (batch, 10, 3, 224, 224) uint8. Output shape (batch, 1) or (batch,) float32.
Hardware is suggested starting point; adjust based on load and number of miners. Model cache stores up to 256 miners' models. Docker container runs model inference with configurable memory (default 2GB) and CPU (default 1.0 core) limits. Inference timeout 300 seconds by default. Max 4 concurrent evaluations by default.
Clone the repository
git clone https://github.com/resi-labs-ai/RESI-models.git && cd RESI-models
Install the miner CLI and dependencies
pip install -e .
Verify installation by checking miner CLI help
miner-cli --help
Evaluate your ONNX model locally before submission (verify MAPE < 15%, Score > 0.85)
miner-cli evaluate --model.path ./my_model.onnx
Create a public HuggingFace model repository and upload your ONNX model to the repo root
# Create HuggingFace repository and upload model.onnx
Submit model commitment to blockchain with Bittensor wallet
miner-cli submit --model.path ./my_model.onnx --hf.repo_id your-username/your-repo --wallet.name miner --wallet.hotkey default
Complete HuggingFace setup: add RESI Proprietary Model LICENSE file (exact text verified by SHA-256), extrinsic_record.json with chain commitment info, optional feature_config.json for feature selection, and README.md with license metadata in YAML front matter
# Add LICENSE, extrinsic_record.json, feature_config.json (optional), README.md with metadata
Ensure repository is public so validators can download model for evaluation
# Make HuggingFace repository public (if was private during preparation)
Clone the repository
git clone https://github.com/resi-labs-ai/RESI-models.git && cd RESI-models
Install dependencies using uv package manager
uv sync
Generate a secure Pylon token and save it
openssl rand -base64 32
Create and configure .env file with required settings (WALLET_NAME, WALLET_HOTKEY, BITTENSOR_WALLET_PATH, PYLON_TOKEN, PYLON_IDENTITY, PYLON_IDENTITIES, SUBTENSOR_NETWORK, NETUID, etc.)
cp .env.example .env && # Edit .env with wallet name, hotkey, Pylon token, network config
Build the ONNX runner Docker image for sandboxed model evaluation
docker compose build onnx-runner
Start Pylon service in Docker (handles Bittensor chain interactions); use DOCKER_DEFAULT_PLATFORM=linux/amd64 on Mac with Apple Silicon
docker compose up -d
Verify Pylon is running and responding to API requests
curl http://localhost:8000/api/v1/identity/validator/subnet/46/block/latest/neurons
Install PM2 process manager globally for managing validator process
npm install -g pm2
Start validator with auto-update support using PM2 (recommended approach)(optional)
set -a && source .env && set +a && pm2 start "uv run python scripts/start_validator.py" --name resi_autoupdater
Alternatively, start validator manually without auto-updates(optional)
set -a && source .env && set +a && pm2 start "uv run python -m real_estate.validator.validator --wallet.name validator --wallet.hotkey default --netuid 46 --pylon.token YOUR_PYLON_TOKEN --pylon.identity validator" --name resi_validator
Monitor validator logs to verify startup and normal operation
pm2 logs resi_validator --lines 50
Optional: Set up log rotation to manage disk space for long-running validators(optional)
pm2 install pm2-logrotate && pm2 set pm2-logrotate:max_size 100M && pm2 set pm2-logrotate:retain 30