← Back to GoSlimStratum

Summary

In GoSlimStratum (GSS), each coin can be configured to uniquely cater to the specific mining properties for that blockchain. Below is a description of each configuration field, and some basic rules on how to adjust them.

Every mining device, every blockchain, every network, every internet connection, every host machine (for GSS) can be different. The beauty of GSS is that those differences can be accommodated by way of configuration thereby allowing the operator to achieve maximum hashrate, stability and efficiency. This also presents opportunity for an operator to configure the system to be suboptimal, so careful consideration should be taken when adjusting coin configurations.

Note: Configuration fields can be edited in the GSS WebUI or via direct edits to the config.json file. It is recommended that edits be done with the WebUI. A restart is required after any changes to a coin configuration!

 


Example Coin Configuration

Here is a complete example of a coin configuration object in config.json:

"DGB": { "enabled": true, "coin_type": "digibyte", "display_name": "DigiByte Mainnet", "node": { "host": "127.0.0.1", "port": 9001, "username": "your_rpc_username", "password": "your_rpc_password", "use_ssl": false, "wallet_name": "default", "zmq_block_notify": "tcp://127.0.0.1:28332", "template_refresh_interval": 15, "zmq_enabled": true, "zmq_stale_detection_time": 120, "dual_node_comm": false }, "stratum": { "host": "0.0.0.0", "port": 3333, "difficulty": 4096, "connection_timeout_seconds": 600 }, "mining": { "address": "your_legacy_node_wallet_address", "network": "mainnet", "coinbase_text": "GoSlimStratum", "extranonce_size": 8, "max_job_history": 20, "job_expiration_time": 300, "stale_share_grace_period": 5 }, "vardiff": { "enabled": true, "minDiff": 512, "maxDiff": 32768, "targetTime": 15, "retargetTime": 180, "variancePercent": 30 }, "payout": { "enabled": true, "pool_fee_percent": 1.0, "maturity_confirmations": 100, "payment_interval_seconds": 600, "minimum_confirmations": 6, "maturity_check_interval_seconds": 60, "confirmation_check_interval_seconds": 300, "wallet_rpc_timeout_seconds": 30 } }

 


Top-Level Fields

Field Description Example
enabled Whether this coin is active. Set to false to disable without removing config. true
coin_type The coin implementation to use. "digibyte", "bitcoin", "bitcoincash", "ecash"
display_name Human-readable name shown in the web dashboard. "DigiByte Mainnet"

 


Node Section

Connection settings for your coin's node (full or pruned).

Field Description Guidelines
host IP address of your node "127.0.0.1" for local, or remote IP
port RPC port of your node Check your node's config (e.g., rpcport=X)
username RPC username from node's config file Must match rpcuser in node config
password RPC password from node's config file Must match rpcpassword in node config
use_ssl Use HTTPS for RPC connection false for local, true if node requires SSL
wallet_name Name of the wallet to use for payouts "default" unless you created a named wallet
zmq_block_notify ZMQ endpoint for instant block notifications Format: "tcp://IP:PORT". Requires node ZMQ config.
template_refresh_interval Seconds between block template polls 15-30 seconds typical. Lower = more network traffic
zmq_enabled Use ZMQ for instant new block detection true recommended if node supports ZMQ
zmq_stale_detection_time Seconds before falling back to polling if ZMQ silent 120 default. Adjust to block time for defined coin
dual_node_comm Enable ZMQ + Polling, recommended Default set to false if not defined

ZMQ Setup

Add this to your node's config file (e.g., digibyte.conf):

zmqpubhashblock=tcp://0.0.0.0:28332

Then set zmq_block_notify to match: "tcp://127.0.0.1:28332"

 


Stratum Section

Settings for miners connecting to your pool.

Field Description Guidelines
host IP to listen on "0.0.0.0" to accept all connections
port Port miners connect to Pick unique port per coin (3333, 3334, etc.)
difficulty Starting difficulty for new miners See table below
connection_timeout_seconds Disconnect idle miners after this many seconds 600 (10 min) typical. No change recommended

Starting Difficulty Guidelines

Miner Type Hashrate Recommended Difficulty
Bitaxe (single) ~500 GH/s 256-512
Bitaxe (multiple) 1-5 TH/s 1024-4096
Small ASIC 5-20 TH/s 4096-8192
Large ASIC 50+ TH/s 16384-65536
Note: If vardiff is enabled, this is just the starting point - it will auto-adjust based on miner performance.

 


Mining Section

Block construction and coinbase settings.

Field Description Guidelines
address Your Node wallet address for block rewards Must be a valid address for this coin. Use legacy format (not bech32) for best compatibility
network Which network to validate against "mainnet" or "testnet"
coinbase_text Text embedded in blocks you mine Max ~20 chars. Your pool name/signature - default GoSlimStratum
extranonce_size Bytes reserved for miner nonce space 8 recommended. Don't change unless you know why
max_job_history Number of old jobs to keep for stale share validation 20 typical. Higher uses more memory
job_expiration_time Seconds before a job is considered too old 300 (5 min) typical
stale_share_grace_period Seconds to accept shares after new block 3-5 typical. Higher = more accepted stales

Address Format Notes

 


VarDiff Section

Automatic difficulty adjustment per miner. Adjusts difficulty so each miner submits shares at a consistent rate.

Field Description Guidelines
enabled Turn on automatic difficulty adjustment true recommended for mixed miner sizes
minDiff Lowest difficulty allowed 256-512 for small miners (Bitaxe)
maxDiff Highest difficulty allowed 32768-65536 typical. Use -1 for unlimited, caution -1 could set a pool diff higher than network diff - resulting in lost blocks!
targetTime Target seconds between shares 10-15 for responsive feedback, 30 for less traffic
retargetTime Seconds between difficulty adjustments 90-180 typical. Lower = faster response
variancePercent Acceptable deviation before adjusting 30 typical. Higher = less frequent changes

Quick Presets

Scenario minDiff maxDiff targetTime retargetTime
Bitaxe only 256 4096 15 90
Mixed miners 512 65536 15 180
Large ASICs only 4096 -1 * 10 120

How VarDiff Works

  1. Pool measures how often each miner submits shares
  2. If shares come faster than targetTime, difficulty increases
  3. If shares come slower than targetTime, difficulty decreases
  4. Adjustments happen every retargetTime seconds
  5. Difficulty stays within minDiff and maxDiff bounds
  6. *CAUTION* setting maxDiff to -1 can lead to lost blocks!

 


Payout Section

Automatic payment processing settings.

Field Description Guidelines
enabled Enable automatic payouts true for automatic, *false for manual payouts
pool_fee_percent Your pool's fee percentage 1.0 = 1% fee. Range: 0-100
maturity_confirmations Blocks before reward is spendable Coin-specific - see table below
payment_interval_seconds How often to process pending payments 600 (10 min) typical
minimum_confirmations Confirmations needed before payment considered complete 6 typical for most coins
maturity_check_interval_seconds How often to check if blocks matured 60 typical
confirmation_check_interval_seconds How often to check payment confirmations 300 (5 min) typical
wallet_rpc_timeout_seconds Timeout for wallet RPC calls 30 typical. Increase if wallet is slow

  *CAUTION* Setting payout to false will disable payout system and associated metrics for rewards

 

Maturity Confirmations by Coin

Coin Typical Maturity Notes
DGB (DigiByte) 100 Standard coinbase maturity
BTC (Bitcoin) 100 Standard coinbase maturity
BCH (Bitcoin Cash) 100 Standard coinbase maturity
XEC (eCash) 10 Uses Avalanche finalization (faster)

Understanding Satoshis

All amounts are in satoshis (the smallest unit):

 


Common Mistakes to Avoid

1. Wrong RPC Credentials

Problem: Pool can't connect to node

Solution: Credentials must exactly match your node's config file (rpcuser and rpcpassword)

2. Address/Network Mismatch

Problem: Address validation fails on startup

Solution: Testnet addresses only work with "network": "testnet". Mainnet addresses require "network": "mainnet"

3. Starting Difficulty Too High

Problem: Miners connect but never find shares, eventually disconnect

Solution: Start with lower difficulty (512-1024) and let vardiff adjust upward

4. Starting Difficulty Too Low

Problem: Pool flooded with shares, high CPU/bandwidth usage

Solution: Increase starting difficulty or lower vardiff minDiff

5. Maturity Too Low

Problem: Payout fails with "immature coinbase" error

Solution: Set maturity_confirmations to at least the coin's required maturity (usually 100)

6. ZMQ Not Configured on Node

Problem: Pool falls back to slower polling, delayed new block detection

Solution: Add zmqpubhashblock=tcp://0.0.0.0:28332 to node config and restart node

7. Wallet Locked

Problem: Payouts fail with "wallet locked" error

Solution: Unlock wallet with walletpassphrase command before starting pool, or use unencrypted wallet


Recommended Configurations

Solo Mining (Single Bitaxe)

"stratum": { "difficulty": 512 }, "vardiff": { "enabled": true, "minDiff": 256, "maxDiff": 4096, "targetTime": 15, "retargetTime": 90 }

Small Farm (Multiple Bitaxe/Small ASICs)

"stratum": { "difficulty": 4096 }, "vardiff": { "enabled": true, "minDiff": 512, "maxDiff": 32768, "targetTime": 15, "retargetTime": 180 }

Large Operation (Industrial ASICs)

"stratum": { "difficulty": 16384 }, "vardiff": { "enabled": true, "minDiff": 4096, "maxDiff": -1, "targetTime": 10, "retargetTime": 120 }

 


Testing Your Configuration

  1. Validate JSON syntax: Use a JSON validator before starting
  2. Check node connectivity: Ensure node is running and RPC is accessible
  3. Test on testnet first: Use testnet to verify everything works
  4. Monitor logs: Watch for connection errors or validation failures
  5. Start with one miner: Verify shares are accepted before adding more

← Back to GoSlimStratum