Bitcoin Alternative: Monero – Wie mine ich diesen Coin?

Kryptowährungen sind in aller Munde, jeder möchte Sie, viele haben Sie. Doch wie kann ich ohne Kaufabsichten vom digitalen Coin profitieren? Lohnt sich das CPU / GPU Mining? Und wie kann ich hierbei am besten Profite erwirtschaften. Was ist ein Mining Pool und welchen Pool sollte ich verwenden. in diesem Posting geben wir eine Schritt für Schritt Anleitung zum eigenen XMR Mining Pool.Dieses HowTo nutzt als Ausgangsbasis eine Linux Ubuntu Distribution der Version 14.X (64Bit) sowie basiert auf dem node-cryptonote-pool. Auch der etwas neuere cryptonote-forknote-pool kann mit dieser Anleitung genutzt werden.

High performance Node.js (with native C addons) mining pool for CryptoNote based coins such as Bytecoin, Monero, QuazarCoin, HoneyPenny, etc.. Comes with lightweight example front-end script which uses the pool’s AJAX API.

Ubuntu Monero Mining Pool Hosting

Inhalte:


Voraussetzungen

  • Ubuntu Version 14.4.x
  • Coin daemon(s) (Coin Wallet bspw. Monerod-Wallet)
  • Node.js v0.10+ (Dies ist eine alte Version) Version wie bspw.  8.x sind nicht lauffähig
  • Redis-Server key-value store v2.6+

Download & Installation der benötigten Software

Nachdem Ubuntu erfolgreich installiert und die Erstkonfiguration erfolgt ist benötigen wir zunächst noch einmal folgende Software:

1/5) Update der Paketlisten:

sudo apt-get update && apt-get upgrade

2/5) Installation der benötigten Tools:

apt-get install automake autoconf pkg-config libcurl4-openssl-dev libjansson-dev libssl-dev libboost-all-dev libgmp-dev make g++ git screen

Während die Tools installieren, kann in einem zweiten Terminal bereits damit begonnen werden die Monero-Software zu installieren. Wie das geht haben wir in einem separaten Blog Post detailliert beschrieben. Die Anleitung finden Sie hier.

3/5) Installation der Node.js Software in der Version 0.10+

Da es sich hierbei um eine doch sehr alte Version handelt, kann diese nicht über den Paketmanager installiert werden! Bitte unbedingt die folgenden Schritte beachten! Mit einer anderen Node.js Version kann die Installation unter Umständen abbrechen und wird daher sehr wahrscheinlich NICHT funktionieren!

wget https://nodejs.org/dist/latest-v0.10.x/node-v0.10.48-linux-x64.tar.gz

Nun installieren wir die passende Node.js Version durch die Eingabe folgender Befehle:

sudo tar -C /usr/local --strip-components 1 -xzf node-v0.10.48-linux-x64.tar.gz
# Nun folgen zwei symlinks:
sudo ls -l /usr/local/bin/node
sudo ls -l /usr/local/bin/npm

Node.js und npm ist nun erfolgreich in der richtigen Version installiert.

4/5) Installation des redis Key-Value Store

wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make

Durch optionale Eingabe von

make test

kann dieser Build auf die Richtigkeit überprüft werden.

Mit

make install

Beenden wir die Installation. Nun starten wir den Server durch Eingabe von:

redis-server

In einem zweiten Terminal geben wir

redis-cli ping

ein worauf wir ein PONG erhalten, wenn der Server erfolgreich gestartet wurde. Damit der spätere Miningserver ohne offene Terminalfenster arbeitet, installieren wir den Redis-Server als Systemdienst damit dieser nach etwaigen Neustarts weiterhin funktioniert und automatisch gestartet wird.

sudo mkdir /etc/redis
sudo mkdir -p /var/redis/6379

Nun kopieren wir das Init-Skript. Wir empfehlen die Nutzung des Ports als Dateiname. Bearbeitet diese Datei und achtet auf den richtigen Port! Ggf. den Port anpassen.

sudo cp utils/redis_init_script /etc/init.d/redis_6379

Nun kopieren wir das Redis-Configurationfile in unser Konfigurationsverzeichnis durch:

sudo cp redis.conf /etc/redis/6379.conf
nano /etc/redis/6379.conf

Bearbeitet die Konfigurationsdatei wie folgt:

  • Setze daemonize auf yes (standardmäßig ist es auf no eingestellt).
  • Setzen pidfile auf /var/run/redis_6379.pid (ändern Sie den Port bei Bedarf).
  • Ändern Sie den Port entsprechend. In unserem Beispiel wird es nicht benötigt, da der Standard Port bereits 6379 ist.
  • Lege logfile auf /var/log/redis_6379.log fest
  • Setze dir auf /var/redis/6379 (sehr wichtiger Schritt!)

Nun fügen wir unser Startskript hinzu und starten den Redis-Server

sudo update-rc.d redis_6379 defaults
sudo /etc/init.d/redis_6379 start

5/5) Installation der Pool-Software

git clone https://github.com/zone117x/node-cryptonote-pool.git pool
cd pool
npm update

Nachdem npm alle benötigen Module heruntergeladen und installiert hat, sollte die Pool-Software lauffähig installiert sein. Nun kopieren wir die standardmäßige Konfigurationsdatei und passen Sie nach Belieben an!

mv config_example.json config.json

Konfiguration: Erklärung und Definition der Konfigurationsdatei:

/* Used for storage in redis so multiple coins can share the same redis instance. */
"coin": "monero",

/* Used for front-end display */
"symbol": "XMR",

"logging": {

    "files": {

        /* Specifies the level of log output verbosity. This level and anything
           more severe will be logged. Options are: info, warn, or error. */
        "level": "info",

        /* Directory where to write log files. */
        "directory": "logs",

        /* How often (in seconds) to append/flush data to the log files. */
        "flushInterval": 5
    },

    "console": {
        "level": "info",
        /* Gives console output useful colors. If you direct that output to a log file
           then disable this feature to avoid nasty characters in the file. */
        "colors": true
    }
},

/* Modular Pool Server */
"poolServer": {
    "enabled": true,

    /* Set to "auto" by default which will spawn one process/fork/worker for each CPU
       core in your system. Each of these workers will run a separate instance of your
       pool(s), and the kernel will load balance miners using these forks. Optionally,
       the 'forks' field can be a number for how many forks will be spawned. */
    "clusterForks": "auto",

    /* Address where block rewards go, and miner payments come from. */
    "poolAddress": "48firQdjLmgKktZ96CVvb3Efe56GLkKiUG63M6bHsZWtiYYsLfg43TFR72G3RwJnLJ4d4fc6MkMfJi93yvDbNHV6BDwcs6L"

    /* Poll RPC daemons for new blocks every this many milliseconds. */
    "blockRefreshInterval": 1000,

    /* How many seconds until we consider a miner disconnected. */
    "minerTimeout": 900,

    "ports": [
        {
            "port": 3333, //Port for mining apps to connect to
            "difficulty": 100, //Initial difficulty miners are set to
            "desc": "Low end hardware" //Description of port
        },
        {
            "port": 5555,
            "difficulty": 2000,
            "desc": "Mid range hardware"
        },
        {
            "port": 7777,
            "difficulty": 10000,
            "desc": "High end hardware"
        }
    ],

    /* Variable difficulty is a feature that will automatically adjust difficulty for
       individual miners based on their hashrate in order to lower networking and CPU
       overhead. */
    "varDiff": {
        "minDiff": 2, //Minimum difficulty
        "maxDiff": 100000,
        "targetTime": 100, //Try to get 1 share per this many seconds
        "retargetTime": 30, //Check to see if we should retarget every this many seconds
        "variancePercent": 30, //Allow time to very this % from target without retargeting
        "maxJump": 100 //Limit diff percent increase/decrease in a single retargetting
    },

    /* Feature to trust share difficulties from miners which can
       significantly reduce CPU load. */
    "shareTrust": {
        "enabled": true,
        "min": 10, //Minimum percent probability for share hashing
        "stepDown": 3, //Increase trust probability % this much with each valid share
        "threshold": 10, //Amount of valid shares required before trusting begins
        "penalty": 30 //Upon breaking trust require this many valid share before trusting
    },

    /* If under low-diff share attack we can ban their IP to reduce system/network load. */
    "banning": {
        "enabled": true,
        "time": 600, //How many seconds to ban worker for
        "invalidPercent": 25, //What percent of invalid shares triggers ban
        "checkThreshold": 30 //Perform check when this many shares have been submitted
    },
    /* [Warning: several reports of this feature being broken. Proposed fix needs to be tested.] 
        Slush Mining is a reward calculation technique which disincentivizes pool hopping and rewards 
        'loyal' miners by valuing younger shares higher than older shares. Remember adjusting the weight!
        More about it here: https://mining.bitcoin.cz/help/#!/manual/rewards */
    "slushMining": {
        "enabled": false, //Enables slush mining. Recommended for pools catering to professional miners
        "weight": 300, //Defines how fast the score assigned to a share declines in time. The value should roughly be equivalent to the average round duration in seconds divided by 8. When deviating by too much numbers may get too high for JS.
        "lastBlockCheckRate": 1 //How often the pool checks the timestamp of the last block. Lower numbers increase load but raise precision of the share value
    }
},

/* Module that sends payments to miners according to their submitted shares. */
"payments": {
    "enabled": true,
    "interval": 600, //how often to run in seconds
    "maxAddresses": 50, //split up payments if sending to more than this many addresses
    "mixin": 3, //number of transactions yours is indistinguishable from
    "transferFee": 5000000000, //fee to pay for each transaction
    "minPayment": 100000000000, //miner balance required before sending payment
    "denomination": 100000000000 //truncate to this precision and store remainder
},

/* Module that monitors the submitted block maturities and manages rounds. Confirmed
   blocks mark the end of a round where workers' balances are increased in proportion
   to their shares. */
"blockUnlocker": {
    "enabled": true,
    "interval": 30, //how often to check block statuses in seconds

    /* Block depth required for a block to unlocked/mature. Found in daemon source as
       the variable CRYPTONOTE_MINED_MONEY_UNLOCK_WINDOW */
    "depth": 60,
    "poolFee": 1.8, //1.8% pool fee (2% total fee total including donations)
    "devDonation": 0.1, //0.1% donation to send to pool dev - only works with Monero
    "coreDevDonation": 0.1 //0.1% donation to send to core devs - only works with Monero
},

/* AJAX API used for front-end website. */
"api": {
    "enabled": true,
    "hashrateWindow": 600, //how many second worth of shares used to estimate hash rate
    "updateInterval": 3, //gather stats and broadcast every this many seconds
    "port": 8117,
    "blocks": 30, //amount of blocks to send at a time
    "payments": 30, //amount of payments to send at a time
    "password": "test" //password required for admin stats
},

/* Coin daemon connection details. */
"daemon": {
    "host": "127.0.0.1",
    "port": 18081
},

/* Wallet daemon connection details. */
"wallet": {
    "host": "127.0.0.1",
    "port": 8082
},

/* Redis connection into. */
"redis": {
    "host": "127.0.0.1",
    "port": 6379,
    "auth": null //If set, client will run redis auth command on connect. Use for remote db
}

Starten können wir den Pool nun durch die Eingabe von:

node init.js

Wir starten den Pool via Screen, um die Software im Hintergrund laufen zu lassen:

screen -S miningpool node init.js

Mit screen -r miningpool können wir nun jederzeit wieder per Terminal auf den Pool zugreifen. Mit STRG + A + D können wir den Tab wieder beenden.

Bereitstellen des Front-End

Inhalt folgt in kürze…

Einrichten von Nginx und Let’s Encrypt SSL

Wir benötigen einen bereits installieren Nginx-Webserver wie das geht könnt Ihr hier noch einmal im Detail nachlesen: Wie installiere ich einen Nginx-Webserver auf Ubuntu oder Debian

 

 

Donations

  • BTC:

    16Dh4d8sdhUqQbKs9npWBf3nSU1igmL5yL
  • ETH:

    0xC3E4A9F95638c57a848C8dcE56f2A51D35c05340
  • LTC:

    LgiRVCJvbA1jNeQJv5uJCnZZMQGz5R2Y1K
  • XMR:

    48firQdjLmgKktZ96CVvb3Efe56GLkKiUG63M6bHsZWtiYYsLfg43TFR72G3RwJnLJ4d4fc6MkMfJi93yvDbNHV6BDwcs6L
  • BCN:

    24ayJZ8hAzxgxAEYaaDAyhV8KH1QrRuzdZsGXFZw3xKaMj6b3cumuzMfNCezqRpKfLJf5dmANoy6uA2bGtZ3uT5fJHdE2cM

Credits

https://github.com/zone117x/node-cryptonote-pool

4 Kommentare
  1. Kevin Nguyen
    Kevin Nguyen sagte:

    Hallo,
    ich sitze grade an der installation des Pools auf meinen Ubuntu Server. Jedoch erhalten ich folgende Fehlermeldung:#[email protected] install: `node-gyp rebuild´
    Exit status 1
    npm ERR!
    npm ERR! Failed at the [email protected].1 install script ’node-gyp rebuild‘.
    npm ERR! This is most likely a problem with the bignum package,
    npm ERR! not with npm itself.
    npm ERR! Tell the author that this fails on your system:
    npm ERR! node-gyp rebuild
    npm ERR! You can get information on how to open an issue for this project with:
    npm ERR! npm bugs bignum
    npm ERR! Or if that isn’t available, you can get their info via:
    npm ERR!
    npm ERR! npm owner ls bignum
    npm ERR! There is likely additional logging output above.

    npm ERR! Please include the following file with any support request:
    npm ERR! /root/redis-stable/pool/npm-debug.log

    Können Sie mir da helfen?

    Danke

    Antworten
    • Kevin
      Kevin sagte:

      Und was ist ist mit diesem Fehler gemeint?

      2020-03-10 10:06:02 [api] Error getting daemon data {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}
      2020-03-10 10:06:02 [api] Stat collection finished: NaN ms redis, 3 ms daemon
      2020-03-10 10:06:02 [api] Error collecting all stats
      2020-03-10 10:06:02 [pool] (Thread 1) Error polling getblocktemplate {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}
      2020-03-10 10:06:03 [pool] (Thread 1) Error polling getblocktemplate {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}
      2020-03-10 10:06:04 [pool] (Thread 1) Error polling getblocktemplate {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}
      2020-03-10 10:06:05 [pool] (Thread 1) Error polling getblocktemplate {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}
      2020-03-10 10:06:06 [pool] (Thread 1) Error polling getblocktemplate {„code“:“ECONNREFUSED“,“errno“:“ECONNREFUSED“,“syscall“:“connect“}

      Antworten
      • Fabian Georgi
        Fabian Georgi sagte:

        Ist der Monerodaemon vollständig synchronisiert?
        Eine nicht 100% synchrone Instanz würde diese Fehler beim Verwenden einer Poolsoftware auslösen.

        Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.