BASISWISSEN [4]: Software für das Duinocoin-Mining

Welche Software benötigt man für das Mining des Duinocoin (DUCO)?

Den Duinocoin schürft man mit spezieller Mining-Software. Welche Software benötigt man für die verschiedenen möglichen Hardwareplattformen und wo bekommt man diese Software?.

Das Mining ist beim Duinocoin mit verschiedener Hardware und damit auch unterschiedlichen Software-Lösungen möglich. Es gibt zwei grundlegende Komponenten: einen Teil, der mit den Pool-Servern kommuniziert, Jobs holt und Ergebnisse zurücksendet, und einen zweiten Teil, der mit dem DUCO-S1-Algorithmus die Jobs abarbeitet.

Übersicht

Die folgenden vier Artikel geben einen ersten und groben Überblick über das gesamte Duinocoin-Projekt:

  1. BASISWISSEN [1]: Übersicht über den Duinocoin
  2. BASISWISSEN [2]: Duinocoin-Wallet einrichten
  3. BASISWISSEN [3]: Hardware für den Duinocoin
  4. BASISWISSEN [4]: Software für das Duinocoin-Mining

Weitere Artikel auf duinocoin.de gehen im Detail auf die einzelnen Aspekte des Duinocoin (DUCO) und beispielsweise den Bau von Mining-Rigs ein.

Github revoxhere

Duinocoin-Software von "revoxhere"

Auch wenn bereits seit einiger Zeit ein ganzes Team an jungen Entwicklern an der Duinocoin-Software arbeiten, hat ein einziger junger Programmierer die ersten Versionen komplett selbst entwickelt: Robert "revoxhere" Piotrowski. Die Duinocoin-Software für das Mining, aber auch Programme für die DUCO-Webservices und Rest-APIs sowie Tools für den Magicoin (MAGI) finden sich in seinem Github-Repository unter https://github.com/revoxhere.

Tipp: Besonders spannend ist es übrigens, die ersten Versionen des Duinocoin zu analysieren und mitzuerleben, wie aus einem sehr einfachen Projekt das gesamte Duinocoin-Universum entstanden ist - und wie es sich in Zukunft weiterentwickelt.

Kommunikation mit den Pool-Servern

Da jeder Duinocoin-Miner seine Ergebnisse alle paar Sekunden an die Server senden will und nach einem neuen Job fragt, wäre ein einzelnes Serversystem damit überlastet. Aus diesem Grund übernehmen mehrere sogenannte Pool-Server diese Aufgabe. Jeder Miner fragt dazu zuerst an einer zentralen Stelle nach, welchen Pool-Server er benutzen soll. Unter anderem die Auslastung der Server bestimmt, welchem Pool man zugeordnet wird.

Tipp: Die Anfrage kann man zu Testzwecken auch selbst mit einem Browser stellen: https://server.duinocoin.com/getPool

Die Antwort kommt im JSON-Format (JavaScript Object Notation) und besteht aus der IP-Adresse, dem Pool-Namen, der Port-Adresse, dem Server-Namen und einer Statusmeldung ("true" für "hat geklappt!). Der Miner nimmt nun Kontakt zu diesem Pool-Server auf, meldet sich dort an und fragt nach dem ersten Job.

Der Job wird an die eigentliche Mining-Engine übergeben - das kann der Kommunikationsrechner selbst sein (PC_Miner.py) oder per USB oder I²C angeschlossene Mikrocontroller (AVR_Miner.py). Wurde mit DUCO-S1 ein Ergebnis berechnet, wird es zurück an den Pool-Server gemeldet und auf dessen Antwort gewartet. Die Antwort kann unter anderem "GOOD" für einen korrekte Berechnung oder "BAD" für ein falsches Ergebnis oder ein anderes Problem sein.

Mining-Jobs abarbeiten mit DUCO-S1

Sobald die Kommunikation mit den Pool-Servern klappt und Jobs zur Verfügung stehen, kann das eigentliche Mining beginnen. Der DUCO-S1-Algorithmus ist sehr einfach:

DUCO-S1: Der Pool-Server sendet zwei Hashes. Der erste Hash ist zufällig. Aus diesem Hash plus eine Zeichenkette (Nounce) wird ein temporärer SHA1-Hash berechnet. Ist dieser temporäre Hash mit dem zweiten empfangenen Hash identisch, ist die zuvor verwendete Zeichenkette die Lösung.

Die Zeichenkette wird vom Wert von "0" bis zur Difficulty hochgezählt. Ein vereinfachtes Beispiel (die berechneten Werte stimmen so nicht!) soll das verdeutlichen:

Job:   Hash1=E320D1, Hash2=7B025A, Difficulty=6
Miner: Ist SHA1(Hash1 + 0..Difficulty) = Hash2 ?
        SHA1(E320D1 + 0) = 32C812 -> Falsch
        SHA1(E320D1 + 1) = BC3D24 -> Falsch
        SHA1(E320D1 + 2) = 0B0443 -> Falsch
        SHA1(E320D1 + 3) = 223F42 -> Falsch
        SHA1(E320D1 + 4) = 7B025A -> Richtig, Lösung = 4

Was ist SHA1?

SHA1 (Secure Hash Algorithm #1) ist ein alter und mittlerweile leicht zu knackender Hash-Algorithmus, der 1993 vom NIST (National Institute of Standards and Technology) zusammen mit der NSA (National Security Agency) entwickelt wurde. Solange es nicht auf Sicherheit ankommt kann SHA für einfache Hash-Aufgaben wie DUCO-S1 problemlos verwendet werden. SHA1 erfordert relativ wenig Rechenleistung.

Zusätzlich zum Ergebnis werden auch die Anzahl der SHA1-Tests festgehalten. Zusammen mit der Zeit, die der Miner mit der Lösung des Jobs benötigt hat, ergeben sich daraus die Hashes/Sekunde (H/s). Mit Hilfe von Kolka prüfen die Pool-Server, ob die H/s zu der verwendeten Plattform und der Difficulty passen (ein Arduino UNO schafft aktuell 268 H/s).

Die gesamte Mining-Software in einem Paket

Github Duinocoin

Abgesehen von der (Pool-)Server-Software befindet sich die gesamte Software für den Duinocoin-Miner in einem Paket auf Github.

Das Paket kann man über die grünen Button "Code / Download ZIP" herunterladen und in ein Verzeichnis auspacken.

Wer GNU/Linux oder ein BSD wie Mac OS X, FreeBSD, NetBSD oder OpenBSD benutzt kann das auch mit git machen:

git clone --depth 1 -b 3.18 https://github.com/revoxhere/duino-coin

Der wenig bekannte Parameter "-b 3.18" lädt genau diese (zur Zeit aktuelle) Version herunter. Man erhält ein Verzeichnis "duino-coin" mit allen Dateien, die für normale DUCO-Miner benötigt werden:

Verzeichnisse:

  • In Arduino_Code liegt der Sketch, den man auf einen Arduino UNO/Nano flashen muss
  • In ESP8266_Code und ESP32_Code befindet sich der Quellcode für die ESP-Mikrocontroller
  • Resources enthält offizielle Bilder, Symbole und Übersetzungen
  • In Tools liegen ein paar Hilfs-Skripte für den Raspberry Pi und den Upload von Arduino-Sketches
  • Unifficial Miners enthält einige nicht offizielle Miner-Skripte/-Code. Tipp: Julia_Miner.jl ist super-simpel!

Dateien:

  • AVR-Miner.py ist das Python3-Skript für den PC, um mit einem/mehreren Arduino zu schürfen
  • PC_Miner.py ist ein Python3-Miner für den PC (und Raspberry Pi)
  • CLI_Wallet.py und Wallet.py sind zwei Wallet-Implementationen - Achtung, beide sind veraltet!
  • README.md ist das in Markdown formatierte ReadMe
  • LICENSE enthält die (im Gegensatz zu GPL3) wirklich freie MIT-Lizenz. Eine gute Wahl!
  • requirements.txt enthält eine Liste von Python3-Modulen, die für die Skripte benötigt werden

Die .git-Verzeichnisse und -Dateien kann man löschen, sofern man nicht regelmäßig mit git arbeitet.