Skip to content

User Guides

Relevant Source Files

This page provides practical guidance for users interacting with the SN106 Bittensor subnet system. It covers two primary user types: miners who provide concentrated liquidity and earn emissions, and validators who operate the reward calculation and weight submission infrastructure.

For technical implementation details, see System Architecture. For detailed configuration reference, see Configuration. For development and contribution information, see Development Setup.

Miners participate in SN106 by providing concentrated liquidity to wAlpha/wTAO trading pairs on Solana and staking their position NFTs to earn emissions based on position quality and subnet performance.

graph TD
    subgraph "Token Bridging Phase"
        START["Miner with Bittensor Tokens"]
        BRIDGE["VoidAI Bridge<br/>bridge.voidai.com"]
        WRAPPED["wAlpha + wTAO<br/>Solana Tokens"]
    end
    
    subgraph "Liquidity Provision Phase"
        RAYDIUM["Raydium CLMM<br/>raydium.io"]
        POOL_SELECT["Select wAlpha/wTAO Pool<br/>Choose Price Range"]
        POSITION_NFT["Receive Position NFT<br/>Concentrated Liquidity"]
    end
    
    subgraph "Staking Phase"
        SN106_CONTRACT["SN106 Smart Contract<br/>Solana Program"]
        STAKE_NFT["Stake Position NFT<br/>Enter Reward System"]
        ACTIVE_POSITION["Active Earning Position"]
    end
    
    subgraph "Reward Generation"
        POSITION_SCORING["Position Quality Scoring<br/>Width + Distance + Liquidity"]
        SUBNET_PERFORMANCE["Subnet Alpha Performance<br/>Price-based Weights"]
        EMISSIONS["SN106 Emissions<br/>Based on Combined Score"]
    end
    
    START --> BRIDGE
    BRIDGE --> WRAPPED
    WRAPPED --> RAYDIUM
    RAYDIUM --> POOL_SELECT
    POOL_SELECT --> POSITION_NFT
    POSITION_NFT --> SN106_CONTRACT
    SN106_CONTRACT --> STAKE_NFT
    STAKE_NFT --> ACTIVE_POSITION
    ACTIVE_POSITION --> POSITION_SCORING
    ACTIVE_POSITION --> SUBNET_PERFORMANCE
    POSITION_SCORING --> EMISSIONS
    SUBNET_PERFORMANCE --> EMISSIONS

Sources: README.md:22-50

StepActionTechnical DetailsResult
1Bridge TokensVisit bridge.voidai.com, bridge alpha tokens and TAO from Bittensor to SolanaReceive wAlpha and wTAO tokens on Solana
2Access RaydiumNavigate to raydium.io, select Concentrated Liquidity (CLMM)Access to Solana DEX interface
3Select PoolChoose wAlpha/wTAO pairs for specific subnet tokensTarget specific alpha token pools
4Set RangeChoose liquidity range (narrower ranges = higher potential rewards)Define price concentration strategy
5Provide LiquidityDeposit tokens and receive position NFTObtain stakeable NFT position
6Stake NFTStake position NFT to SN106 smart contract on SolanaEnter SN106 reward system

Miner emissions depend on multiple factors that are evaluated by the validator system:

  • Position Concentration: Narrower price ranges receive higher scores
  • Market Proximity: Positions closer to current tick price score higher
  • Liquidity Amount: Larger liquidity contributions increase base score
  • Subnet Performance: Alpha token price performance affects pool allocation
  • In-Range Status: Active positions receive prioritized scoring

Sources: README.md:41-46

Validators run the core infrastructure that monitors liquidity positions, calculates miner rewards, and submits weights to the Subtensor chain every 20 minutes.

graph TD
    subgraph "Validator Process npm_run_validator"
        MAIN["validator/index.ts<br/>Main Orchestration"]
        TIMER["20-Minute Execution Cycle<br/>Automated Scheduling"]
        CONFIG_LOAD["config/environment.ts<br/>Load Configuration"]
    end
    
    subgraph "Data Collection Layer"
        CHAIN_FILTER["getEnabledChains()<br/>Multi-chain Selection"]
        SOLANA_FETCH["Solana Data Fetcher<br/>Raydium CLMM Positions"]
        HOTKEY_MAP["Hotkey to UID Mapping<br/>Bittensor Identity"]
        TICK_DATA["Current Tick Data<br/>Market State"]
    end
    
    subgraph "Scoring Engine"
        NFT_SCORE["NFT Position Scoring<br/>Width + Distance + Liquidity"]
        POOL_WEIGHTS["Pool Weight Calculator<br/>Subnet Performance"]
        MINER_AGGREGATION["Miner Weight Aggregation<br/>Per-miner Totals"]
    end
    
    subgraph "Weight Submission"
        EMA_SMOOTHING["EMA Weight Management<br/>Historical Smoothing"]
        BURN_CALC["Burn Calculation<br/>95% to UID 0"]
        SUBTENSOR_SUB["setWeightsOnSubtensor<br/>Chain Submission"]
        WEIGHT_HISTORY["weights/weights_history.json<br/>Audit Trail"]
    end
    
    MAIN --> TIMER
    MAIN --> CONFIG_LOAD
    TIMER --> CHAIN_FILTER
    CHAIN_FILTER --> SOLANA_FETCH
    MAIN --> HOTKEY_MAP
    MAIN --> TICK_DATA
    
    SOLANA_FETCH --> NFT_SCORE
    TICK_DATA --> NFT_SCORE
    NFT_SCORE --> POOL_WEIGHTS
    POOL_WEIGHTS --> MINER_AGGREGATION
    
    MINER_AGGREGATION --> EMA_SMOOTHING
    EMA_SMOOTHING --> BURN_CALC
    BURN_CALC --> SUBTENSOR_SUB
    SUBTENSOR_SUB --> WEIGHT_HISTORY

Sources: README.md:140-147

ComponentMinimumRecommended
CPU4 cores8 cores
RAM8GB16GB
Storage50GB+ SSD100GB+ SSD
Network50+ Mbps100+ Mbps
OSLinux/macOS/WindowsUbuntu 22.04 LTS
SoftwareVersionPurpose
Node.jsv18.0.0+Runtime environment
npmv8.0.0+Package management
GitLatestRepository access
NetworkStatusRPC Access Required
SolanaActiveMainnet/Devnet RPC endpoint
EthereumComing SoonMainnet RPC endpoint
BaseComing SoonBase network RPC endpoint
SubtensorRequiredBittensor network WebSocket

Sources: README.md:53-81

Critical environment variables that must be configured in .env:

Terminal window
# Subtensor Configuration
SUBTENSOR_WS_URL=wss://your-subtensor-endpoint
VALIDATOR_HOTKEY_URI=your-hotkey-uri-or-mnemonic
NETUID=106
# Solana Configuration
SOLANA_RPC_ENDPOINT=https://your-solana-rpc
SN106_SVM_PROGRAM_ID=your-program-id
RAYDIUM_CLMM_PROGRAM_ID=your-clmm-program-id
# Burn Mechanism
BURN_PERCENTAGE=95

The VALIDATOR_HOTKEY_URI accepts multiple formats:

  • Mnemonic: word1 word2 word3 ... word12
  • Private Key: 0x1234... (hex format)
  • URI: //Alice or other Polkadot-style URIs

Sources: README.md:104-132

Terminal window
# Clone repository
git clone <repository-url>
cd sn106
# Install dependencies
npm install
# Configure environment
cp .env.example .env
nano .env
# Start validator
npm run validator

The validator executes the following operations every 20 minutes:

  1. Data Collection: Fetch NFT positions from getEnabledChains()
  2. Performance Analysis: Calculate current tick data and position metrics
  3. Weight Calculation: Determine miner weights via scoring algorithms
  4. Burn Application: Apply 95% burn to UID 0, distribute 5% to miners
  5. Subtensor Submission: Submit weights via setWeightsOnSubtensor
  6. History Logging: Save submission to weights/weights_history.json
Monitoring AreaLocationPurpose
Operation LogsConsole outputReal-time operation status
Weight Historyweights/weights_history.jsonSubmission audit trail
Health ChecksAutomaticConnection monitoring and reconnection
Performance MetricsLog outputBatch processing and operation timing

The validator includes automatic error recovery, exponential backoff for failed operations, and comprehensive logging for debugging and monitoring purposes.

Sources: README.md:148-168