-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.example.toml
More file actions
147 lines (138 loc) · 7.46 KB
/
Copy pathconfig.example.toml
File metadata and controls
147 lines (138 loc) · 7.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# TestnetPool - example configuration (HUB format: one process + dashboard, any number of coins).
#
# python3 -m testnetpool -c config.toml # run
# python3 -m testnetpool -c config.toml --check # validate + list the coins
#
# Copy to config.toml (gitignored; it holds RPC credentials) and edit. Keep node RPC on
# 127.0.0.1 and reverse-proxy [stats] for public use. SHARED across coins: [stats], [defaults],
# [public], [donate]. PER-COIN: each [[coins]] table (own node/RPC, Stratum port, database) - a
# connection mines the one coin of the port it hit. For a single coin, keep one [[coins]] entry.
# === Shared dashboard + JSON API ===========================================
[stats]
enabled = true
host = "127.0.0.1" # reverse-proxy this for public exposure
port = 8080
site_url = "https://testnetpool.com" # enables share cards + indexing; blank = private/noindex
# rate_limit_per_min = 120 # per-IP HTTP limit (0 = off); /healthz exempt
# node_dashboard_url = "https://node.testnetpool.com" # footer link to an external node-status page
# onion = "abcd...xyz.onion" # v3 .onion -> footer link + Onion-Location header
# === Defaults (every coin inherits these; override per-coin) ===============
[defaults]
mode = "public" # "public" (PPLNS payouts) or "solo"
stratum_host = "0.0.0.0"
coinbase_tag = "/TestnetPool.com/" # stamped on-chain in every block; make it your own
# include_transactions: false (default) = coinbase-only blocks (forfeits the small fee portion);
# true = include mempool txs + collect fees. Post-MWEB chains (Litecoin) build full MWEB blocks
# regardless, since a coinbase-only block would be rejected "mweb-missing".
include_transactions = false
# Connection caps (0 = unlimited; per-IP defaults to 100). Rental proxies (MRR/NiceHash) funnel
# all rigs through one IP, so raise max_conns_per_ip (or set 0) when renting >100 rigs. Abuse
# control (drop + temp-ban IPs that mostly submit rejects) is always on, nothing to configure.
# max_conns_per_ip = 100
# max_conns_total = 0
# block_webhook_url = "https://your-server.example/hooks/block" # POST {height,hash,reward,coin} on a block
# Self-tuning per-miner difficulty. CPU/small miners just connect (vardiff converges). ASICs and
# rental proxies PIN it via the worker password "d=<n>" (disables vardiff for that worker):
# d = hashrate(H/s) * target_time / hashes_per_diff1 (hashes_per_diff1 = 2^16 scrypt, 2^32 sha256d).
# A pin too high for the rig self-relaxes after an idle window. max_difficulty caps any pin.
[defaults.vardiff]
enabled = true
start_difficulty = 16384
min_difficulty = 1024
max_difficulty = 16777216
target_time = 15.0 # aim for one share every N seconds per miner
retarget_time = 90.0 # min seconds between difficulty adjustments
variance_percent = 30.0 # tolerance band before retargeting
# === PPLNS / payout economics (public mode; addresses are per-coin) ========
[public]
fee_percent = 2.0 # pool fee -> that coin's faucet
min_payout = 0.001 # smallest payout, in whole coins
pplns_window = 100000 # reward split over the most-recent N shares
payout_interval = 300 # seconds between payout sweeps
# === Donation page (/donate); OpenAlias resolves per coin ==================
[donate]
openalias = "donate@testnetpool.com"
# bitcoin = "bc1..."
# litecoin = "ltc1..."
# monero = "4..."
# === Coins =================================================================
# One [[coins]] table per coin. Required: coin, chain, stratum_port, the wallet addresses (public
# mode), and [coins.rpc]; everything else inherits [defaults]/[public]. db_path defaults to
# "<coin>-<chain>.db". Each coin needs its own port + database; the same coin on two chains is fine
# (the dashboard slugs them /c/monero-testnet, /c/monero-stagenet). Optional per-coin keys (valid
# under any coin, shown once to avoid repetition): wallet, explorer_url, explorer_tx_url, zmq_block_url.
[[coins]]
coin = "bitcoin"
chain = "testnet4"
stratum_port = 3333
pool_address = "tb1q...POOL_ADDRESS...replace_me"
faucet_address = "tb1q...FAUCET_ADDRESS...replace_me"
# wallet = "tbtc_pool" # node wallet to pay from; blank = default wallet (pool_address must be in it)
# explorer_url = "https://mempool.space/testnet4/block/{hash}" # override the built-in explorer ({hash} filled)
# explorer_tx_url = "https://mempool.space/testnet4/tx/{txid}" # only if the tx path isn't .../tx/{txid}
# zmq_block_url = "tcp://127.0.0.1:28332" # node -zmqpubhashblock; instant blocks, then set longpoll = false
[coins.rpc]
host = "127.0.0.1"
port = 0 # 0 -> per-chain default (testnet4 = 48332)
user = "bitcoinrpc"
password = "bitcoinrpcpass"
# cookie_file = "/home/you/.bitcoin/testnet4/.cookie" # or authenticate by cookie (leave user/password blank)
[[coins]]
coin = "litecoin"
chain = "test"
stratum_port = 3334
pool_address = "tltc1q...POOL_ADDRESS...replace_me"
faucet_address = "tltc1q...FAUCET_ADDRESS...replace_me"
# explorer_url = "https://litecoinspace.org/testnet/block/{hash}"
# zmq_block_url = "tcp://127.0.0.1:28333" # litecoind's OWN port - each coin's node needs a distinct one
# [coins.vardiff] # scrypt sizing: the SHA-256 default (16384) is far too hard for a small scrypt rig
# start_difficulty = 256
# min_difficulty = 1
# max_difficulty = 2097152
# Lighten RPC load on a node shared with other services (e.g. a faucet); with zmq_block_url set,
# this collapses the pool to ~one getblocktemplate per block:
# longpoll = false
# template_refresh = 0 # rebuild only when a block arrives (skip the idle ntime rebuild)
# block_poll_interval = 30 # slow safety-net tip poll (ZMQ catches real blocks)
# node_stats_interval = 300 # cache mempool/peers/tip-age/hashrate display this long
# Litecoin is post-MWEB: MWEB addresses (ltcmweb1...) can't be a pool/faucet address.
[coins.rpc]
host = "127.0.0.1"
port = 0 # 0 -> per-chain default (litecoin test = 19332)
user = "litecoinrpc"
password = "litecoinrpcpass"
# === Monero (separate engine; uncomment to enable) =========================
# CryptoNote Stratum + monerod, shares accepted TRUST-BASED (monerod is the arbiter for real
# blocks) - keeps the pool pure-Python. Never use trust-based shares on mainnet. Run monerod
# --testnet (RPC 28081) and/or --stagenet (RPC 38081) and point xmrig at the port. Both entries
# below run testnet + stagenet under one dashboard.
#
# [[coins]]
# coin = "monero"
# chain = "testnet"
# stratum_port = 3335
# pool_address = "9...testnet address..." # the POOL wallet's PRIMARY (account 0) address
# faucet_address = "9...testnet faucet address..." # fee destination (the pool just sends to it)
# monero_wallet_host = "127.0.0.1"
# monero_wallet_port = 0 # POOL wallet-rpc port (e.g. 28083); 0 disables payouts (balances still accrue)
# # monero_wallet_user = "" # only if wallet-rpc runs with --rpc-login
# # monero_wallet_password = ""
# [coins.rpc]
# host = "127.0.0.1"
# port = 0 # 0 -> per-chain default (monero testnet = 28081)
# user = "" # only if monerod runs with --rpc-login
# password = ""
#
# [[coins]]
# coin = "monero"
# chain = "stagenet"
# stratum_port = 3336
# pool_address = "5...stagenet address..."
# faucet_address = "5...stagenet faucet address..."
# monero_wallet_host = "127.0.0.1"
# monero_wallet_port = 0 # e.g. 38083 to enable payouts
# [coins.rpc]
# host = "127.0.0.1"
# port = 0 # 0 -> per-chain default (monero stagenet = 38081)
# user = ""
# password = ""