Ich habe einen Block gefunden! Tutorial ckpool für Solo Mining in die eigene Node

Ich bin jetzt reich - ich habe 50 Test BTC :D. Den Block habe ich natürlich nur in Testnet4 gefunden, aber ich wollte sicherstellen, dass das Setup funktioniert, bevor ich ewig in Mainnet mine.

Mein gefundener Block im Testnet4: Block 137679.
ich habe auf meinem normalen Rechner Bitcon Core im Testnet4 laufen lassen um erstmal rumzuprobieren.

Ich habe diese Anleitung genommen:

Wer will kann das dazugehörige Youtube-Video noch angucken:

Außerdem habe ich natürlich noch viel KI benutzt: Allgemeine Fragen, was was macht usw. aber ganz besonders auch um auftretende Fehler zu beheben. Es ist wirklich leicht einzurichten.

Die oben verlinkte Anleitung habe ich passend zum RaspiBolt-Setup für mich angepasst. Wichtig sind immer abweichende Benutzernamen/Ordnerpfade und abweichende Ports.
Ich setze voraus, dass ihr eine funktionierende Node nach RaspiBolt laufen habt, dann brauchen wir aus der Anleitung nur die Blöcke „Create a build environment“ und „ckpool-solo - mainnet“.

Als erstes führen wir diese Befehle nacheinander aus, um die Paketquellen und Pakete zu aktualisieren, danach werden benötigte Pakete zum Code kompilieren etc. installiert. Manches brauchen wir vielleicht nicht, anderes ist vielleicht schon installiert:

sudo apt update
sudo apt upgrade (alternativ apt full-upgrade)
sudo apt install -y build-essential yasm libtool autotools-dev automake
sudo apt install -y pkg-config bsdmainutils python3
sudo apt install -y rustup clang libclang-dev cmake nodejs npm
sudo apt install -y libevent-dev libboost-dev libzmq3-dev librocksdb-dev

Wer will, kann nach „sudo“ noch „torsocks“ mitangeben, dann werden die Verbindungen über Tor aufgebaut.

Dann weiter mit CKPool selbst:
Benutzer „ckpool“ anlegen:

sudo adduser --disabled-password --gecos "" ckpool

Diesen Benutzer auch in die Gruppe „bitcoin“ stecken:

sudo adduser ckpool bitcoin

Ob dies wirklich nötig ist, weiß ich nicht, aber ich halte mich an das RaspiBolt-Schema.
Wir erstellen noch ein ckpool-Ordner in /data:

sudo mkdir /data/ckpool

Und wechseln den Besitzer zu „ckpool“:

sudo chown -R /data/ckpool

Jetzt zum Benutzer „ckpool“ wechseln:

sudo su - ckpool

Nun einfach nacheinander die Befehle ausführen, wie in der verlinkten Anleitung angegeben:

git clone Bitbucket
cd ckpool
./autogen.sh
./configure CFLAGS="-O2 -march=native"
make -j 4

Ich habe dann die Config unbenannt, ist eigentlich nicht nötig, da wir die Config, die wir benutzen werden, sowieso in /data/ckpool ablegen und nicht im Standardordner:

mv ckpool.conf ckpool.conf.bak

Jetzt erstellen wir unsere ckpool.conf:

nano /data/ckpool/ckpool.conf

Da dann rein:

{
”btcd" : [
{
"url" : "127.0.0.1:8332",
"auth" : "RPC-BENUTZERNAME",
"pass" : "RPC-PASSWORT",
"notify" : true
}
],
”btcsig" : "EUER TEXT IN DER COINBASE-TRANSAKTION",
”donation" : 0.5,
”zmqblock" : "tcp://127.0.0.1:28332",
”serverurl" : [
"IP DER NODE:3333"
]
}

Erläuterung: „donation“ ist eine Spende in Prozent der Blockbelohnung an den Entwickler von CKPool, hier also 0,5 Prozent.
„serverurl“: Hier lauscht der Stratumserver. Man kann das auch weglassen, dann lauscht der
auf 0.0.0.0:3333 (3333 ist der Standardport für Stratum). Ich wollte das aber exakt beschränken, in meinen Augen ist das weniger Angriffsfläche.
Speichern und beenden und als nächstes testen:

src/ckpool -B -c /data/ckpool/ckpool.conf

Wenn keine Fehler sind (halbe bis eine Minute warten), dann STRG-C zum Beenden und zurück zum Admin wechseln:

exit

Jetzt beschränken wir aus Sicherheitsgründen Lese- und Schreibrechte der ckpool.conf nur auf Benutzer ckpool (da dort ja unser RPC-Passwort im Klartext liegt):

sudo chmod 600 /data/ckpool/ckpool.conf

Jetzt den CKPool automatisch starten lassen:

sudo nano /etc/systemd/system/ckpool.service

Dort dann das rein:

[Unit]
Description=ckpool solo Bitcoin pool on mainnet
After=multi-user.target bitcoind.service
Requires=bitcoind.service

[Service]
User=ckpool
Type=simple
Restart=always
WorkingDirectory=/home/ckpool/ckpool
ExecStart=/home/ckpool/ckpool/src/ckpool -B -s solo_btc -c /data/ckpool/ckpool.conf

# Hardening

PrivateTmp=yes
ProtectSystem=full
NoNewPrivileges=yes
PrivateDevices=yes
MemoryDenyWriteExecute=true

[Install]
WantedBy=multi-user.target

Ihr müsst hier die originale systemd-Unit aus der verlinkten Anleitung anpassen, da ja Benutzer
und Ordner nicht passen. Also einmal drübergucken.
Ich habe bei # Hardening noch ein paar Sachen aus der RaspiBolt-Anleitung eingefügt.
Nach dem Speichern dann den Dienst starten:

sudo systemctl daemon-reload
sudo systemctl enable ckpool.service
sudo systemctl start ckpool.service
sudo systemctl status ckpool.service
sudo journalctl -xeu ckpool.service

Logrotation habe ich noch nicht gemacht.
Die Log von CKPool als Admin verfolgen:

sudo tail -f /home/ckpool/ckpool/logs/ckpool.log

Dann müssen wir noch den Port in der Firewall freigeben:

sudo ufw allow from MINER-IP to NODE-IP port 3333 proto tcp comment 'allow CKPool'

Das ist noch sicherer als bei RaspiBolt, weil hier nicht einfach der ganze Port
freigegeben wird, sondern nur von einer ganz bestimmten IP (dem Miner) zu einer
ganz bestimmten IP (die Node). Ist also noch eingegrenzter.
Jetzt nehmt ihr im Miner-Dashboard als „Stratum-Host“ einfach eure IP von der Node und als Port 3333.
Dann sollte das laufen. Wenn ihr ckpool.log verfolgt (mit tail…) dann kommt sowas wie „Added new user“
und „Authorised client“.

Was ich noch auf der Testnet-Node ausprobiert aber nicht hinbekommen habe ist ein Reverse-Proxy über Nginx für ckpool einzurichten, damit der Verkehr vom Miner zum Stratum-Server verschlüsselt wird.
Den Reverse-Proxy habe ich korrekt eingerichtet, alles hat auf den richtigen Ports gelauscht, aber der Miner hat irgendwie ein Problem damit, dass das SSL-Zertifikat selbst signiert ist, der Handshake scheitert wegen „bad
certificate“ oder so. Vielleicht hat da noch jemand Ahnung, denn ich würde das gerne hinkriegen, wenn das möglich ist.

Wenn Fragen sind, einfach hier rein, wenn ich bescheid weiß, helfe ich.

1 „Gefällt mir“

danke für deine Mühe. klingt jetzt auf jeden Fall einfacher einzurichten und ich bin mir sicher, es gibt einige Bitcoiner, die gerne richtig solo minen wollen, auch wenn die Wahrscheinlichkeit einen Block zu finden sehr sehr gering ist. Trotzdem geil.

meinst du die Gänsefüßchen, damit das Wort Gänsefüßchen schwarz hinterlegt ist in Form eines Einzeilercodes?

wenn es beginnen soll drücke ich [SHIFT]+[das Zeichen zwischen Fragezeichen und Zurück], dann schreibe ich den Text der rein soll und dann wieder das gleiche für den Abschluss.

Das mit den Zertifikaten hab ich kein Plan. Hab bei Raspibolt auch einfach nur den reverse proxy aufgesetzt ohne mich näher damit zu befassen.

1 „Gefällt mir“

Ja, es ist auch echt einfach, vor allem, wenn man schon RaspiBolt aufgesetzt hat, dann hat man das meiste an Code-Schnipseln schon gesehen. Soweit ich gesehen habe, schreibt Stadicus gerade an einer RaspiBolt Version 4, vielleicht kann da ja in die Bonus-Sektion auch eine Anleitung für CKPool, damit man wirklich in jeder Hinsicht, was Bitcoin betrifft, souverän ist ;).

Ich habe ja auch kurz in Public Pool gemined und ich fand, dass die Anzahl der Shares da deutlich langsamer gestiegen ist als wenn man direkt in seine eigene Node mined. Außerdem ist der Ping besser.

Mit der Formatierung habe ichs jetzt so gemacht, dass ich die jetzt nachträglich nochmal von Hand reingeschrieben habe. Ich habe die Anleitung ja auf dem Rechner vorgeschrieben (da war das korrekt mit den Gänsefüßchen) und nach dem Kopieren hier ins Forum wurde dann die deutsche Version, also am Anfang unten und am Ende oben, benutzt.
Also ich meinte die Doppelstriche, aber auch die Einzelstriche, die in Codes gerne verwendet werden, also auf der Rautetaste.