Would you like to learn how to create a Bytecoin mining pool? In this tutorial, we are going to show you how to install a Bytecoin mining pool using a computer running Ubuntu Linux.
Hardware List:
The following section presents the list of equipment used to create this Bytecoin tutorial.
Every piece of hardware listed above can be found at Amazon website.
Software List:
Here is a list of software that we used to create this Bytecoin node installation tutorial.
We offer two ways to download this software.
Bytecoin Playlist:
On this page, we offer quick access to a list of videos related to Bytecoin.
Don’t forget to subscribe to our youtube channel named VirtualCoin.
Bytecoin Related Tutorial:
On this page, we offer quick access to a list of tutorials related to Bytecoin.
Tutorial – Bytecoin Node Installation
If your Linux does not have Swap memory configured, use the following commands to create a swap file:
# dd if=/dev/zero of=/mnt/linux.swap bs=1M count=32092
# chmod 0600 /mnt/linux.swap
# mkswap /mnt/linux.swap
# swapon /mnt/linux.swap
In our example, we create a 32GB swap file.
To enable the swap, edit the fstab file and add the following line.
# vi /etc/fstab
/mnt/linux.swap none swap sw 0 0
Reboot the computer to enable the swap.
# reboot
Use the following commands to install the required packages.
# apt-get install build-essential libboost-all-dev git cmake
Download the Bytecoin installation package.
# mkdir /bytecoin/node -p
# cd /bytecoin/node
# git clone https://github.com/amjuarez/bytecoin
Compile and install the Bytecoin node software.
# cd bytecoin/
# make
# make test-release
# cd build/release/src
# install -sv bytecoind connectivity_tool miner simplewallet walletd /usr/local/bin/
Create a Bytecoin configuration file.
# mkdir ~/.bytecoin
# vi ~/.bytecoin/bytecoin.conf
log-level=2
no-console=yes
rpc-bind-ip=0.0.0.0
rpc-bind-port=8081
p2p-bind-ip=0.0.0.0
p2p-bind-port=8080
allow-local-ip=yes
Start the Bytecoin node using the following command:
# bytecoind
Wait for the synchronization of the blockchain to end.
The blockchain synchronization might take days or weeks.
Use the following command to verify the status of the blockchain synchronization:
# tail -f bytecoind.log
If the bytecoind.log file is not found in the same directory, use the following commands to locate the bytecoind.log file.
# updatedb
# locate bytecoind.log
Tutorial – Bytecoin Wallet Service
After finishing the Bytecoin node installation, you need to create a new Bytecoin wallet.
Wait for the wallet synchronization of the blockchain to end and enter the exit command.
# mkdir /bytecoin/wallet -p
# cd /bytecoin/wallet
# simplewallet –generate-new-wallet virtualcoin –password kamisama123@
New wallet is generated. Address: 2851jgWSSjTA1SwzbGeXdWE6BND8yh1WQ5KF9rmaboCwSDaK38broEU4r7kfhZ1NoiWdvaVbSYuGhVHnYphfyKgbMqTafTQ
# [wallet 22gnmi]: exit
In our example, a wallet named virtualcoin was created and configured to use the password kamisama123@.
Take note of your Bytecoin address.
Now, you need to start the wallet service.
# simplewallet –wallet /bytecoin/wallet/virtualcoin.wallet –pass kamisama123@ –daemon-host 127.0.0.1 –daemon-port 8081 –rpc-bind-port 8082
Tutorial – Bytecoin Mining Pool
After finishing the Bytecoin node installation and the wallet service configuration, we can start the Bytecoin mining pool installation.
Use the following command to install the required software:
# apt-get install build-essential libtool autotools-dev autoconf pkg-config libssl-dev
# apt-get install libboost-all-dev git npm nodejs nodejs-legacy libminiupnpc-dev redis-server
# apt-get install libdb-dev libdb++-dev libdb5.3
# curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash
# nvm install node
# source ~/.profile
Reboot the computer and restart the Bytecoin node and the wallet service.
# reboot
# bytecoind
# simplewallet –wallet /bytecoin/wallet/virtualcoin.wallet –pass kamisama123@ –daemon-host 127.0.0.1 –daemon-port 8081 –rpc-bind-port 8082
After rebooting the computer, you need to finish the software installation.
# nvm install 0.10.25
# nvm alias default 0.10.25
# nvm use default
# mkdir /bytecoin/pool -p
# cd /bytecoin/pool
# git clone https://github.com/forknote/cryptonote-universal-pool.git
# cd cryptonote-universal-pool
# npm update
# vi config.json
Now, let’s create the basic configuration file.
# vi config.json
Here is the original file, before our configuration:
{
“coin”: “dashcoin”,
“symbol”: “DSH”,
“coinUnits”: 1000000000000,
“coinDifficultyTarget”: 120,
“logging”: {
“files”: {
“level”: “info”,
“directory”: “logs”,
“flushInterval”: 5
},
“console”: {
“level”: “info”,
“colors”: true
}
},
“poolServer”: {
“enabled”: true,
“clusterForks”: “auto”,
“poolAddress”: “D6WLtrV1SBWV8HWQzQv8uuYuGy3uwZ8ah5iT5HovSqhTKMauquoTsKP8RBJzVqVesX87poYWQgkGWB4NWHJ6Ravv93v4BaE”,
“blockRefreshInterval”: 1000,
“minerTimeout”: 900,
“ports”: [
{
“port”: 3333,
“difficulty”: 100,
“desc”: “Low end hardware”
},
{
“port”: 5555,
“difficulty”: 2000,
“desc”: “Mid range hardware”
},
{
“port”: 7777,
“difficulty”: 10000,
“desc”: “High end hardware”
},
{
“port”: 8888,
“difficulty”: 10000,
“desc”: “Hidden port”,
“hidden”: true
}
],
“varDiff”: {
“minDiff”: 100,
“maxDiff”: 200000,
“targetTime”: 100,
“retargetTime”: 30,
“variancePercent”: 30,
“maxJump”: 100
},
“fixedDiff”: {
“enabled”: true,
“addressSeparator”: “.”
},
“shareTrust”: {
“enabled”: true,
“min”: 10,
“stepDown”: 3,
“threshold”: 10,
“penalty”: 30
},
“banning”: {
“enabled”: true,
“time”: 600,
“invalidPercent”: 25,
“checkThreshold”: 30
},
“slushMining”: {
“enabled”: false,
“weight”: 120,
“lastBlockCheckRate”: 1
}
},
“payments”: {
“enabled”: true,
“interval”: 600,
“maxAddresses”: 50,
“mixin”: 3,
“transferFee”: 50000000,
“minPayment”: 1000000000,
“maxTransactionAmount”: 0,
“denomination”: 1000000000
},
“blockUnlocker”: {
“enabled”: true,
“interval”: 30,
“depth”: 10,
“poolFee”: 2,
“devDonation”: 0.1,
“coreDevDonation”: 0.1,
“extraFeaturesDevDonation”:0.1
},
“api”: {
“enabled”: true,
“hashrateWindow”: 600,
“updateInterval”: 5,
“port”: 8117,
“blocks”: 30,
“payments”: 30,
“password”: “your_password”
},
“daemon”: {
“host”: “127.0.0.1”,
“port”: 42081
},
“wallet”: {
“host”: “127.0.0.1”,
“port”: 8082
},
“redis”: {
“host”: “127.0.0.1”,
“port”: 6379
},
“monitoring”: {
“daemon”: {
“checkInterval”: 60,
“rpcMethod”: “getblockcount”
},
“wallet”: {
“checkInterval”: 60,
“rpcMethod”: “getbalance”
}
},
“charts”: {
“pool”: {
“hashrate”: {
“enabled”: true,
“updateInterval”: 60,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“workers”: {
“enabled”: true,
“updateInterval”: 60,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“difficulty”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
},
“price”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
},
“profit”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
}
},
“user”: {
“hashrate”: {
“enabled”: true,
“updateInterval”: 180,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“payments”: {
“enabled”: true
}
}
}
}
Here is the new file with our configuration.
The changed directives were highlighted in bold.
{
“coin”: “bytecoin”,
“symbol”: “BCN”,
“coinUnits”: 1000000000000,
“coinDifficultyTarget”: 120,
“logging”: {
“files”: {
“level”: “info”,
“directory”: “logs”,
“flushInterval”: 5
},
“console”: {
“level”: “info”,
“colors”: true
}
},
“poolServer”: {
“enabled”: true,
“clusterForks”: “auto”,
“poolAddress”: “22gAnEFyeKu7CEbc7XVz8meeeTKkMwjXMgCyJQ6i3UpfLp9EaA8ywu1ZGsidvUoyuzK7ZATghbZAaSpT9ZutSahzFZWCpkM”,
“blockRefreshInterval”: 1000,
“minerTimeout”: 900,
“ports”: [
{
“port”: 3333,
“difficulty”: 100,
“desc”: “Low end hardware”
},
{
“port”: 5555,
“difficulty”: 2000,
“desc”: “Mid range hardware”
},
{
“port”: 7777,
“difficulty”: 10000,
“desc”: “High end hardware”
},
{
“port”: 8888,
“difficulty”: 10000,
“desc”: “Hidden port”,
“hidden”: true
}
],
“varDiff”: {
“minDiff”: 100,
“maxDiff”: 200000,
“targetTime”: 100,
“retargetTime”: 30,
“variancePercent”: 30,
“maxJump”: 100
},
“fixedDiff”: {
“enabled”: true,
“addressSeparator”: “.”
},
“shareTrust”: {
“enabled”: true,
“min”: 10,
“stepDown”: 3,
“threshold”: 10,
“penalty”: 30
},
“banning”: {
“enabled”: true,
“time”: 600,
“invalidPercent”: 25,
“checkThreshold”: 30
},
“slushMining”: {
“enabled”: false,
“weight”: 120,
“lastBlockCheckRate”: 1
}
},
“payments”: {
“enabled”: true,
“interval”: 600,
“maxAddresses”: 50,
“mixin”: 3,
“transferFee”: 50000000,
“minPayment”: 1000000000,
“maxTransactionAmount”: 0,
“denomination”: 1000000000
},
“blockUnlocker”: {
“enabled”: true,
“interval”: 30,
“depth”: 10,
“poolFee”: 2,
“devDonation”: 0.1,
“coreDevDonation”: 0.1,
“extraFeaturesDevDonation”:0.1
},
“api”: {
“enabled”: true,
“hashrateWindow”: 600,
“updateInterval”: 5,
“port”: 8117,
“blocks”: 30,
“payments”: 30,
“password”: “your_password”
},
“daemon”: {
“host”: “127.0.0.1”,
“port”: 8081
},
“wallet”: {
“host”: “127.0.0.1”,
“port”: 8082
},
“redis”: {
“host”: “127.0.0.1”,
“port”: 6379
},
“monitoring”: {
“daemon”: {
“checkInterval”: 60,
“rpcMethod”: “getblockcount”
},
“wallet”: {
“checkInterval”: 60,
“rpcMethod”: “getbalance”
}
},
“charts”: {
“pool”: {
“hashrate”: {
“enabled”: true,
“updateInterval”: 60,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“workers”: {
“enabled”: true,
“updateInterval”: 60,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“difficulty”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
},
“price”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
},
“profit”: {
“enabled”: true,
“updateInterval”: 1800,
“stepInterval”: 10800,
“maximumPeriod”: 604800
}
},
“user”: {
“hashrate”: {
“enabled”: true,
“updateInterval”: 180,
“stepInterval”: 1800,
“maximumPeriod”: 86400
},
“payments”: {
“enabled”: true
}
}
}
}
My configuration is just basic.
It is highly recommended that you study this configuration file to improve your configuration.
Use the following command to start the Bytecoin mining pool.
# cd /bytecoin/pool/cryptonote-universal-pool
# node init.js
Keep in mind that the pool service will work only if the Bytecoin node service is running and the blockchain is synchronized.
If everything worked correctly, you should see the following messages on the screen:
[master] Pool spawned on 8 thread(s)
[charts] Started
[api] API started & listening on port 8117
[api] Stat collection finished: 20 ms redis, 21 ms daemon
[api] Broadcasting to 0 visitors and 0 address lookups
[payments] Started
[payments] No workers’ balances reached the minimum payment threshold
[unlocker] Started
[unlocker] No blocks candidates in redis
[charts] Started
[chartsDataCollector] Started
[pool] (Thread 2) New block to mine at height 1452666 w/ difficulty of 1227080766
The system should now open TCP ports 3333, 5555 and 7777 to Bytecoin miners.
Use the following command to check if the TCP ports are open.
# netstat -nl | grep 3333
tcp 0 0 0.0.0.0:3333 0.0.0.0:* LISTEN
# netstat -nl | grep 5555
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN
# netstat -nl | grep 7777
tcp 0 0 0.0.0.0:7777 0.0.0.0:* LISTEN
Time to test our mining pool.
Go to another Ubuntu Linux and install the CPUMiner-Multi software.
If you don’t know how to install the Bytecoin CPU miner, follow this link.
Use the following command to start mining Bytecoin on the miner computer.
# minerd -a cryptonight -o stratum+tcp://34.217.47.134:3333 -u 21eD9nZxjv9QxzoDX4NrVMipPCT3tK5ufgAApefcYYnkAbXoTDSjFxiAxDgwhNbv7ELWfo2GSxm96MyGYq1njk9qPps1DgR -p x
Keep in mind that you need to change the IP address of the mining pool and the Bytecoin wallet address of the miner computer.
Using JSON-RPC 2.0
Starting Stratum on stratum+tcp://34.217.66.94:3333
1 miner threads started, using ‘cryptonight’ algorithm.
Pool set diff to 100
Stratum detected new block
accepted: 1/1 (100.00%), 46.09 H/s at diff 100 (yay!!!)
accepted: 2/2 (100.00%), 45.24 H/s at diff 100 (yay!!!)
Keep in mind that you need to change the IP address of the mining pool and the Bytecoin wallet address of the miner computer.
If everything worked correctly, you should see confirmation messages on the screen.