Build
- install redis
- install alephium full node
- install node.js(>=14) and npm(>=8)
Or:
- deploy with Docker Compose
Run
configs explanation:
{
"logPath": "./logs/", // log path
"connectionTimeout": 600, // disconnect workers that haven't submitted shares for this many seconds
"maxConnectionsFromSameIP": 10, // limit number of connection from same IP address
"whitelistIps": [], // whitelist IP address from 'maxConnectionsFromSameIP'
"jobExpiryPeriod": 10, // job expires after set period
"banning": {
"enabled": true, // enabled by default
"time": 600, // how many seconds to ban worker for
"invalidPercent": 50, // what percent of invalid shares triggers ban
"checkThreshold": 500, // perform check when this many shares have been submitted
"purgeInterval": 300 // every this many seconds clear out the list of old bans
},
"diff1TargetNumZero": 30, // diff1 target leading zero num
"pool": {
"port": 20032, // port which the server bind
"diff": 64, // init difficulty
"proxyProtocol": false, // enable it to get real client IPs if you are behind a reverse proxy that uses Proxy Protocol v1
"varDiff": {
"minDiff": 16, // minimum difficulty
"maxDiff": 4096, // maximum difficulty
"targetTime": 15, // try to get 1 share per this many seconds
"retargetTime": 90, // check to see if we should retarget every this many seconds
"variancePercent": 30 // allow time to very this % from target without retargeting
}
},
"daemon": {
"host": "127.0.0.1", // alephium full node host
"port": 12973, // alephium full node rest api port
"apiKey": "xxx", // alephium full node api key
"minerApiPort": 10973 // alephium full node miner api port
},
"redis": {
"host": "127.0.0.1", // redis host
"port": 6379 // redis port
},
"withholdPercent": 0.005, // coinbase reward withhold percent(0.5% by default), used for tx fee mainly
"rewardEnabled": true, // enabled by default
"rewardInterval": 600, // update miner balances every this many seconds
"confirmationTime": 30600, // 510m by default, you can decrease this if your payment addresses have enough balance
"paymentEnabled": true, // enabled by default
"minPaymentCoins": "3.5", // minimum number of coins that a miner must earn before sending payment
"paymentInterval": 600, // send payment every this many seconds
"txConfirmations": { // Check tx confirmations to remove/pay back balance after tx
"chainConfirmations": 10,
"fromGroupConfirmations": 5,
"toGroupConfirmations": 5
},
"persistence": { // persistent shares and blocks
"enabled": false, // disabled by default
"host": "127.0.0.1", // postgresql ip
"port": 5432, // postgresql port
"user": "postgres", // postgresql user
"password": "postgres", // postgresql password
"database": "mining-pool" // database name
},
"addresses": [], // 4 addresses(we have 4 groups) to where block rewards are given
"wallet": {
"name": "", // wallet name
"password": "", // wallet password
"mnemonicPassphrase": "" // wallet mnemonic passphrase
}
}
run:
npm install
npm run start
Docker:
The provided docker-compose file allows you to deploy Redis, Postgres and the Alephium mining pool in 2 simple steps:
Clone the repo and move to its folder:
git clone https://github.com/alephium/mining-pool.git && cd mining-pool
docker-compose up -d
(optional) Build different Docker image variants:
- From (modified) local sources:
docker build -t mining-pool:latest .
- From latest master branch code:
docker build -t mining-pool:latest https://github.com/alephium/mining-pool.git
- From latest release:
docker build -t mining-pool:latest -f Dockerfile-release .
The only prerequisites are a synced full node and Docker, and of course your own config file. For this kind of deployment the follliwng sections of the config file should be left unaltered:
"redis": {
"host": "redis", // the "redis" host spawned by docker-compose
"port": 6379 // and its port
},
"persistence": { // persistent shares and blocks
"enabled": false, // disabled by default
"host": "postgres", // the "postgres" host spawned by docker-compose
"port": 5432, // its port
"user": "postgres", // its user
"password": "postgres", // its password
"database": "postgres" // and its db name. All as defined in the Compose file.
},
Lastly, for single-user setups these are suitable payout and reward settings:
"pool": {
"port": 20032, // port which the server binds to
"diff": 8, // init difficulty
"varDiff": {
"minDiff": 1, // minimum difficulty
"maxDiff": 4096, // maximum difficulty
"targetTime": 10, // try to get 1 share per this many seconds
"retargetTime": 90, // check to see if we should retarget every this many seconds
"variancePercent": 30 // allow time to very this % from target without retargeting
}
},
"withholdPercent": 0.005, // Even for single-user pools, this is required to allow the pool to pay tx fees
"rewardInterval": 600, // This can be relaxed, but should still be lower than paymentInterval
"minPaymentCoins": "10", // Increases the min payout to 10 Alph
"paymentInterval": 7200, // Increased to 1 payment every 2 hours.
TLS configuration
...
"pool": {
"port": 20443,
"tls": true,
"privateKeyPath": "/path/to/pool.key",
"publicCertPath": "/path/to/pool.pem",
...
}
Generate a basic, self-signed TLS certificate
openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out pool.pem \
-keyout pool.key