Die kleine Bitcoin Solo Mining Bibel
Willkommen in der Welt des Solo Mining: in dieser kleinen Bibel möchte ich euch Schritt für Schritt in die Grundlagen und Feinheiten des Bitcoin-Minings einführen – speziell für alle, die unabhängig und eigenständig minen möchten.
Solomining ist die reinste Form des Minings, bei der ihr direkt mit eurem eigenen Equipment arbeitet, und euch mit der Theorie und Praxis auseinander setzt. Ihr habt die volle Kontrolle über euren Betrieb, die Belohnungen und auch die Herausforderungen. Beim Prozess des Minings könnt ihr solides Verständnis zentraler Konzepte wie Hashrate, Block Templates, Difficulty und der Technik, die hinter der Blockchain steckt erlernen.
Diese Bibel richtet sich an Anfänger, die bisher keinen Plan haben, wie sie starten sollen, aber die Motivation mitbringen, tiefer in die Materie einzutauchen. Schritt für Schritt erkläre ich euch wichtige Begriffe, Technologien und Prozesse, damit ihr dich sicher in dieser faszinierenden Welt bewegen könnt.
Auf geht's – schnappt euch eure Mining-Hardware und lasst uns gemeinsam in die Grundlagen eintauchen! 😊
Die Mining Bibel wurde mit mondayshot geschrieben. Sehr vieles, vor allem die Pool Informationen, Difficulty Berechnungen und der Mining Ablauf stammen von Ihm. Ein Link zur Spende findet ihr unten.

Was ist Solo-Mining
Solo Mining (Lottery Mining) bedeutet, dass ihr alleine versucht, einen Bitcoin-Block zu finden und die volle Belohnung (3.125 BTC + Transaktionsgebühren) zu erhalten. Dabei könnt ihr entweder eure eigenen Node betreiben mit einem eigenen Solo-Pool wie zum Beispiel Public-Pool von Benjamin Wilson oder über einen Solo Mining Pool eines bestimmten Anbieters arbeiten, der die Infrastruktur bereitstellt.
Warum macht man Solo Mining
- Volle Belohnung: Ihr erhaltet 100 % der Blockbelohnung, ohne sie mit anderen Minern zu teilen.
- Unabhängigkeit: Ihr seid nicht auf klassische Pools angewiesen und könnt eure eigene Mining-Strategie verfolgen.
- Lotterie-Charakter: Jeder Hash ist wie ein Lottoschein, und es geht um den großen Gewinn – wenn ihr erfolgreich seid.
Solo Mining ist ideal für risikofreudige Miner, die auf einen großen Gewinn hoffen, und weniger für konstante Einnahmen gedacht. Es erfordert Geduld und eine grosse Portion Glück um einen Block zu finden, aber es macht Spass, und man lernt viel Theorie und auch Praxis zum Handwerk des Bitcoin Minings.
Wie läuft das Mining genau ab
Der Prozess vom Generieren eines Hashes bis zur Veröffentlichung eines gültigen Blocks sieht grob gesagt so aus:
Block Template
- Der Pool verteilt mit "mining.notify" ein neues Block Template, entweder weil die Transaktionen aktualisiert wurden oder weil das Netzwerk einen neuen Block gefunden hat.
Bei der Übermittlung eines Block Template werden gemäss Stratum Protokoll die folgenden Werte übermittelt:
jobId, prevHash, coinbase part1, coinbase part2, merkle_branch, version, bits, timestamp, clear jobs
Generieren des Hashes
- Der Miner ergänzt diese Daten um:
👾 extraNonce2 (selbst generiert)
👾 nonce (startet bei 0) - Aus diesen Daten wird der Block-Header zusammengestellt.
- Der Block-Header wird zweimal durch die SHA256-Funktion gehasht.
Variieren der Nonce
- Wenn der generierte Hash nicht unter dem Work-Difficulty Target liegt, erhöht der Miner die Nonce um 1 und wiederholt den Hashing-Prozess.
- Dieser Vorgang wird Milliarden Mal pro Sekunde wiederholt.
- Wenn alle möglichen nonce-Werte (2^32) erschöpft sind, ändert der Miner:
👾 extraNonce2 oder
👾 timestamp (innerhalb erlaubter Grenzen)
und beginnt wieder bei 0 mit dem Hochzählen von den möglichen nonce-Werte (2^32 = 4'294'967'295)
Übermittlung an den Pool
- Wenn ein Hash gefunden wird, der unter der vom Pool vorgegebenen Work-Difficulty liegt, wird der Share mit "mining.submit" an den Pool übermittelt.
Bei der Übermittlung eines Shares werden gemäss Stratum Protokoll die folgenden Werte übermittelt:
id, userId, jobId, extraNonce2, ntime, nonce, versionMask
- Der Pool überprüft den Share.
Veröffentlichung eines gültigen Blocks
- Wenn der gefundene Hash auch unter dem Netzwerk-Difficulty Target liegt, erkennt der Pool einen gültigen Block.
- Der Pool stellt den vollständigen Block zusammen:
👾 Block-Header mit den vom Miner gefundenen Werten
👾 Coinbase-Transaktion mit Belohnung für den Miner
👾 Transaktionen - Der Pool broadcastet den Block sofort an verbundene Bitcoin-Nodes.
- Die Nodes validieren den Block und leiten ihn weiter.
- Andere Miner beginnen, auf dem neuen Block aufzubauen.
- Der Pool sendet einen neuen Mining-Job mit einem neuen Block Template an alle verbundenen Miner.
Was ist die "Nonce"
Eine Nonce (Number Only Used Once) ist ein 32-Bit-Wert im Blockheader, den Miner während des Mining-Prozesses kontinuierlich ändern. Sie wird verwendet, um neue Hashes zu generieren.
Funktion der Nonce
- Miner ändern die Nonce bei jedem Versuch, einen gültigen Hash zu finden, der die Difficulty-Vorgaben erfüllt.
- Jede Änderung der Nonce führt zu einem komplett neuen Hash, dank der zufälligen Natur der Hash-Funktion.
Wenn die Nonce alle möglichen Werte durchlaufen hat, ändert der Miner andere Felder im Blockheader (z. B. den Timestamp oder die Coinbase-Transaktion), um weiterhin neue Hashes zu erzeugen.
Größe der Nonce
- Die Nonce ist ein 32-Bit-Wert (4 Bytes), was bedeutet, dass es insgesamt: 2^32=4.294.967.296 mögliche Werte gibt.
Die Nonce ist somit ein zentraler Bestandteil des Proof-of-Work-Prozesses.
Was ist die Coinbase Transaktion
Die Coinbase-Transaktion ist eine spezielle Transaktion, die im Mining-Prozess erstellt wird und die Block-Belohnung (Block Reward) an den Miner auszahlt, der den Block erfolgreich gefunden hat. Sie ist immer die erste Transaktion in einem Block und hat einige besondere Eigenschaften.
Eigenschaften der Coinbase-Transaktion
- Erzeugung der Block-Belohnung:
- Die Coinbase-Transaktion generiert die neue Bitcoin-Belohnung, die aktuell (Stand 2024) 3.125 BTC + Transaktionsgebühren beträgt.
- Diese Belohnung wird direkt an die Wallet-Adresse des Miners oder des Mining-Pools ausgezahlt.
- Keine Eingänge (Inputs):
- Im Gegensatz zu normalen Bitcoin-Transaktionen hat die Coinbase-Transaktion keine Inputs, weil die Belohnung neu generiert wird.
- Sie enthält jedoch eine spezielle Nonce oder zusätzliche Daten im Input-Feld, die Miner ändern können, um neue Hashes zu erzeugen.
- Speicherort für ExtraNonce:
- Miner nutzen die Coinbase-Transaktion, um eine ExtraNonce einzufügen, wenn die reguläre Nonce im Blockheader erschöpft ist. Änderungen an der ExtraNonce führen zu einer Änderung der Merkle Root, wodurch neue Hashes erzeugt werden können.
- Transaktionsgebühren:
- Neben der Block-Belohnung enthält die Coinbase-Transaktion auch die Summe aller Transaktionsgebühren, die von den im Block enthaltenen Transaktionen gezahlt werden.
Wie sieht eine Coinbase-Transaktion aus
- Input:
- Kein normaler Input. Stattdessen ein spezielles Feld, das oft vom Miner genutzt wird, um zusätzliche Daten oder eine Botschaft einzufügen.
- Output:
- Die Auszahlung geht an die Wallet-Adresse des Miners oder des Pools.
Beispiel einer Coinbase-Transaktion
In einem Block kann die Coinbase-Transaktion so aussehen:
- Input: Spezieller Wert (z. B. Nonce, Nachrichten).
- Output: Auszahlung an die Adresse des Miners.
Die Coinbase-Transaktion ist also die erste Transaktion in jedem Block und dient dazu, die Mining-Belohnung und Transaktionsgebühren an den Miner auszuzahlen. Sie hat keine Eingänge, sondern generiert neue Bitcoins, und kann von Minern angepasst werden, um den Hashing-Prozess zu unterstützen.
Shares sind keine Teillösungen eines gültigen Blocks, sondern vielmehr Nachweise für die Arbeitsleistung eines Miners. Beim Mining versucht ein Miner, einen gültigen Block zu finden, der die von der Blockchain vorgegebene globale Schwierigkeit (Network Difficulty) erfüllt. Da diese Schwelle sehr hoch ist, wird innerhalb eines Mining-Pools mit einer niedrigeren Schwierigkeit gearbeitet – der sogenannten Share Difficulty.
Man kann sich das so vorstellen, als würde der Miner regelmäßig Blöcke generieren, die die Share Difficulty erfüllen, aber die Network Difficulty nicht erreichen. Diese Blöcke sind technisch gesehen ungültig für die Blockchain, da sie nicht genug Nullen im Hash aufweisen, werden aber dennoch vom Pool akzeptiert, um die Arbeitsleistung des Miners zu messen. Jeder solche "kleine Block" wird als Share gezählt.
Shares dienen dem Mining-Pool dazu, die Beiträge der einzelnen Miner fair zu bewerten. Sobald einer der Miner zufällig einen Hash findet, der die Network Difficulty erfüllt (also einen gültigen Block), wird dieser Block an die Blockchain übermittelt. Die Belohnung, die der Pool dafür erhält, wird dann unter den beteiligten Minern aufgeteilt – basierend auf der Anzahl ihrer Shares.
Shares die vom Miner erfolgreich an den Pool übermittelt und akzeptiert wurden.
Shares die vom Miner zwar an den Pool übermittelt, jedoch nicht akzeptiert wurden, weil zB
▪ euer Share eine zu geringe Difficulty aufweist (das Thema bei NerdMiner und Diff < 1)
▪ euer Share wegen hoher Latenzen zu spät eingereicht wurde und bereits ein neues Block Template verteilt wurde
▪ euer Share veraltet ist, dass heisst das zwischenzeitlich ein neuer Block gefunden wurde und dein Share somit auf einem veralteten Block Template erstellt wurde
▪ euer Share doppelt eingereicht wurde
▪ euer Share gegen Pool-Richtlinien verstösst (zB. blockt kano.is IP-Adressen von CPU-Miner)
Der Prozess besteht im Wesentlichen darin, dass Miner kontinuierlich Hashes berechnen und dabei Shares generieren. Irgendwann trifft ein Miner zufällig auf einen Hash, der genügend Nullen hat, um einen gültigen Block zu erstellen. Dieser Block wird an die Blockchain angehangen, und alle Miner, die Shares beigesteuert haben, werden entsprechend entlohnt – abhängig vom Vergütungsmodell des Pools.
Difficulty
Network Difficulty (Netzwerk-Schwierigkeit)
Die Network Difficulty ist eine globale Metrik, die von der Bitcoin-Blockchain selbst festgelegt wird und den Schwierigkeitsgrad beschreibt, einen gültigen Block zu finden. Sie wird etwa alle 2016 Blöcke (etwa alle zwei Wochen) dynamisch angepasst, damit das Netzwerk im Durchschnitt alle 10 Minuten einen neuen Block generiert.
Eigenschaften der Network Difficulty:
- Global und für alle Miner gleich:
- Jeder Miner im Netzwerk muss sich an die aktuelle Network Difficulty halten, um einen gültigen Block zu finden.
- Berechnung:
- Die Difficulty ist proportional zur Zeit, die das Netzwerk benötigt hat, um die letzten 2016 Blöcke zu minen.
- Formel:
Neue Schwierigkeit = Alte Schwierigkeit × (Zielzeit für 2016 Blöcke / Tatsächliche Zeit für 2016 Blöcke)
- Beeinflusst den Mining-Prozess:
- Eine höhere Network Difficulty bedeutet, dass Miner mehr Rechenleistung benötigen, um einen Block zu finden.
- Ziel: Die Blockzeit von 10 Minuten im Durchschnitt konstant halten, unabhängig von der Gesamt-Hashrate im Netzwerk.
- Ausdruck in Zahlen:
- Network Difficulty wird als eine große Zahl dargestellt, die das Verhältnis zwischen einem Ziel-Hash und dem maximal möglichen Hash beschreibt.
Worker Difficulty (Arbeiter-Schwierigkeit)
Die Worker Difficulty ist eine lokal festgelegte Schwierigkeit, die in Mining-Pools oder Solomining-Systemen verwendet wird, um zu bestimmen, wie schwer es für einen einzelnen Worker (einen Mining-Prozess oder -Gerät) ist, einen Share (einen Teilerfolg) zu finden.
Eigenschaften der Worker Difficulty
- Individuell anpassbar:
- Die Worker Difficulty wird von einem Mining-Pool oder der Mining-Software festgelegt, um die Leistung einzelner Mining-Geräte zu berücksichtigen.
- Ziel: Ein gleichmäßiger Strom an Shares, unabhängig von der Rechenleistung des Miners.
- Shares anstatt Blöcke:
- Miner arbeiten mit einer lokal niedrigeren Schwierigkeit und reichen ihre gefundenen Shares an den Pool weiter. Der Pool aggregiert die Shares und arbeitet auf der Network Difficulty, um einen gültigen Block zu finden.
- Warum gibt es Worker Difficulty?
- Unterschiedliche Miner haben unterschiedliche Hashraten. Ein Gerät mit geringer Leistung würde kaum Shares generieren, wenn es direkt mit der Network Difficulty arbeiten müsste. Daher wird die Worker Difficulty so angepasst, dass jedes Gerät regelmäßig Shares liefern kann.
- Automatische Anpassung (Stratum-Protokoll):
- Mining-Pools passen die Worker Difficulty dynamisch an (z. B. mit „vardiff“, variable difficulty), um sicherzustellen, dass Miner ungefähr einen Share alle 5–10 Sekunden liefern.
- Wert:
- Worker Difficulty ist immer niedriger als die Network Difficulty, da sie für die lokale Rechenleistung optimiert ist.
Unterschiede zwischen Network und Worker Difficulty
Merkmal | Network Difficulty | Worker Difficulty |
---|---|---|
Ebene | Global (Blockchain) | Lokal (Mining-Pool oder Solominer-Software) |
Ziel | Finden eines gültigen Blocks | Finden von Shares für den Pool |
Anpassung | Alle 2016 Blöcke (ca. 2 Wochen) | Dynamisch je nach Leistung des Miners |
Einheitlichkeit | Für alle Miner gleich | Individuell je nach Worker-Hashrate |
Wertbereich | Hoch (z. B. Millionen bis Milliarden, Billiarden) | Niedrig (z. B. 1, 2, 4, 16, etc.) |
Nutzung | Konsens auf Blockchain-Ebene | Effizienz und Verteilung im Mining-Pool |
Bezug | Validiert den gesamten Block | Validiert Shares, die Teil der Pool-Arbeit sind |
Defintion und Festlegung der Difficulty oder Netzwerk-Schwierigkeit
Difficulty = Hash(max_target) ÷ Hash(current_target)
Mit Hash(max_target) ist die Difficulty = 1 gemeint und sie repräsentiert die grösstmögliche Zahl bzw. die geringstmögliche Schwierigkeit.
Hash(current_target) repräsentiert die notwendige Schwierigkeit eines Hashes, bedeutet je kleiner diese Zahl, desto schwieriger.
Die Difficulty oder Netzwerk-Schwierigkeit ist das Ergebnis aus der Division der beiden Werte Hash(max_target) und Hash(current_target).
Hier die Berechnung am Beispiel des Block_752868 und der damaligen Difficulty = 30.98T = 30'977'051'760'460
Hash(max_target) bzw. Difficulty = 1 ist bei Bitcoin als 0x1d00ffff definiert, als Hexadezimalwert ist das ein Hash mit 8 führenden Nullen:
= 00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff
Da bei Bitcoin der Hash(max_target) als Gleitkommazahl gespeichert wird, wird dieser abgeschnitten:
= 00000000ffff0000000000000000000000000000000000000000000000000000
Dieser Hexadezimalwert wird in ein Dezimalwert konvertiert:
= 26959535291011309493156476344723991336010898738574164086137773096960
= 2.696E+67 = Hash(max_target)
Da wir nun Hash(max_target) = 2.696E+67 und die Difficulty 30'977'051'760'460 kennen, können wir die notwendige Schwierigkeit eines Hashes, also Hash(current_target), bestimmen:
Hash(max_target) ÷ Difficulty = Hash(current_target)
= 2.696E+67 ÷ 30'977'051'760'460 = 8.703E+53 = Hash(current_target)
Für einen gültigen Block muss der Hash des Blocks_752868 kleiner und damit schwieriger sein, als die notwendige Schwierigkeit:
Hash(block_752868) < Hash(current_target) = valid Block
Hash(block_752868)
= 000000000000000000023331c3817233e49bb141216fea1a75a3643a04410bde
Dieser Hexadezimalwert wird in ein Dezimalwert konvertiert:
= 210716037705402490166328113539479810618942705228647390
= 2.107E+53 = Hash(current_target)
2.107E+53 < 8.703E+53 = valid Block ☑️
Der Hash vom Block ist tatsächlich sehr klein und hat damit eine sehr hohe Schwierigkeit:
Hash(max_target) ÷ Hash(block_752868) = Diff(block_752'868)
2.696E+67 ÷ 2.107E+53 = 127'942'493'531'047
Diff(block_752868) = 127'942'493'531'047 = 127.94T
Warum Network und Worker Difficulty wichtig sind
- Network Difficulty:
- Regelt das Gesamtgleichgewicht der Bitcoin-Blockchain und sorgt für Stabilität dass alle 10 Minuten ein Block gefunden wird.
- Worker Difficulty:
- Optimiert den Mining-Prozess auf individueller Ebene, insbesondere bei Pools, um sicherzustellen, dass jeder Miner sinnvoll zur Blockfindung beiträgt.
Das Diagramm zeigt den Unterschied zwischen der Network Difficulty (global und konstant über 2016 Blöcke und wird dann angepasst) und der Worker Difficulty, die sich je nach Hashrate des Miners unterscheidet:
- Network Difficulty (gestrichelte Linie): Bleibt auf globaler Ebene konstant während 2016 Blöcke und wird nur dann angepasst, um die Blockzeit stabil zu halten.
- Worker Difficulty (High Hashrate) (durchgezogene Linie): Erhöht durch schneller für Miner mit höherer Rechenleistung.
- Worker Difficulty (Low Hashrate) (gepunktete Linie): ist geringer, da die Hashrate niedriger ist und eine kleinere Schwierigkeit besser geeignet ist. Je nachdem wieviel Hashleistung das Gerät liefert, wird aber auch hier die Worker Difficulty angepasst.
Was sind Block Templates
Ein Block Template ist eine Vorlage für einen neuen Block in der Blockchain. Es enthält alle notwendigen Daten, die ein Miner benötigt, um einen gültigen Block zu erstellen und an das Netzwerk zu senden. Block Templates werden in der Regel von einer Bitcoin-Node generiert und sind ein zentraler Bestandteil des Mining-Prozesses.
Bestandteile eines Block Templates
- Header-Daten:
- Version: Gibt die Softwareversion des Bitcoin-Protokolls an.
- Previous Block Hash: Verweis auf den Hash des vorherigen Blocks in der Blockchain.
- Merkle Root: Der Wurzelhash des Merkle-Baums, der alle Transaktionen im Block repräsentiert.
- Timestamp: Aktuelle Zeit des Nodes.
- Difficulty Target: Die Schwierigkeitsgrenze, die der Block erfüllen muss.
- Nonce: Ein Wert, der während des Minings variiert, um einen gültigen Blockhash zu finden.
- Liste von Transaktionen:
- Enthält alle Transaktionen, die in den neuen Block aufgenommen werden sollen. Diese Transaktionen stammen aus dem Mempool (Memory Pool), in dem alle unbestätigten Transaktionen gespeichert werden.
- Coinbase-Transaktion:
- Die erste Transaktion im Block, die die Mining-Belohnung an die Adresse des Miners auszahlt. Dies ist der einzige Weg, neue Coins in Umlauf zu bringen.
- Zusätzliche Felder:
- Informationen über Gebühren, Höhe des Blocks, und manchmal sogar zusätzliche Metadaten.
Wie werden Block Templates generiert
Block Templates werden normalerweise von einem Bitcoin-Node mit Hilfe der JSON-RPC-Schnittstelle bereitgestellt. Ein Miner bzw. der Stratum Server kann die Methode getblocktemplate
verwenden, um eine aktuelle Vorlage zu erhalten.
Beispiel für einen RPC-Aufruf:
bitcoin-cli getblocktemplate '{"capabilities":["coinbasetxn", "workid"]}'
Die Node gibt daraufhin ein JSON-Objekt zurück, das alle oben genannten Daten enthält.
Eine Antwort könnte in etwas so aussehen:
{
"version": 536870912,
"previousblockhash": "0000000000000000000bae6ebf7a123456789abcdef0000000000000abcde123",
"transactions": [
{
"data": "0100000001abcdef...",
"txid": "123456789abcdefabcdef123456789abcdef123456789abcdef123456789abcde",
"hash": "abcdefabcdef123456789abcdefabcdef123456789abcdefabcdef123456789abc",
"depends": [],
"fee": 50000,
"sigops": 2
}
],
"coinbaseaux": {
"flags": "062f503253482f"
},
"coinbasevalue": 312500000,
"target": "0000000000000000000f00000000000000000000000000000000000000000000",
"mintime": 1697097600,
"mutable": ["time", "transactions", "prevblock"],
"noncerange": "00000000ffffffff",
"sigoplimit": 80000,
"sizelimit": 4000000,
"curtime": 1697098502,
"bits": "170c47d7",
"height": 809349
}
In diesem Beispiel ist nur eine einzige Transaktion enthalten. Ein Template wäre natürlich viel viel grösser.
Erklärung der Felder
version
:- Gibt die Blockversion an, die verwendet wird. Die Miner müssen diese in den Blockheader einfügen.
previousblockhash
:- Der Hash des vorherigen Blocks, der in den neuen Block referenziert wird, um die Blockchain zu verketteten.
transactions
:- Eine Liste der Transaktionen, die im Block enthalten sein sollen.
data
: Die vollständige, serialisierte Transaktion.txid
: Die ID der Transaktion.hash
: Hash der Transaktion.fee
: Die Transaktionsgebühr (in Satoshis).sigops
: Anzahl der Signaturoperationen der Transaktion.
coinbaseaux
:- Zusätzliche Daten, die in der Coinbase-Transaktion enthalten sein sollen, wie Mining-Pool-Flags.
coinbasevalue
:- Die Gesamtbelohnung (Blockreward + Transaktionsgebühren), die an den Miner ausgezahlt wird (in Satoshis).
target
:- Der Zielwert, unter den der Hash fallen muss, damit der Block gültig ist (abhängig von der Difficulty).
mintime
:- Die frühestmögliche Zeit (UNIX-Timestamp), zu der der Block erstellt werden kann.
mutable
:- Eine Liste von Feldern, die der Miner anpassen darf, z. B.
time
,transactions
oderprevblock
.
- Eine Liste von Feldern, die der Miner anpassen darf, z. B.
noncerange
:- Der Wertebereich der Nonce, die der Miner verändern darf, um neue Hashes zu erzeugen.
sigoplimit
:- Die maximale Anzahl an Signaturoperationen, die im Block erlaubt sind.
sizelimit
:- Die maximale Blockgröße in Bytes (bei Bitcoin 4 MB, einschließlich SegWit-Daten).
curtime
:- Die aktuelle Zeit, zu der der Blocktemplate erstellt wurde (UNIX-Timestamp).
bits
:- Der kompakte Zielwert (Difficulty) für den Block in komprimierter Form.
height
:- Die Höhe des Blocks in der Blockchain (1-basierte Nummerierung).
Block Templates also sind ein zentraler Bestandteil des Mining-Prozesses. Sie enthalten die Daten, die ein Miner benötigt, um einen Block zu erstellen und zu validieren. Für Solominer die ihren eigenen Mining Pool beitreiben, bieten sie maximale Kontrolle über den Inhalt des Blocks und die Auszahlung der Belohnung. Ein Blocktemplate, der eure BTC-Adresse enthält, kann nicht mehr nachträglich von Bitcoincore verändert werden, ansonsten würde der Hash des Blocks nicht mehr stimmen.
Block Template Hash Simulator
Bearbeitet das Blocktemplate und schaut zu, wie sich der Hash bei der kleinsten Anpassung komplett verändert:
SHA-256 Hash:
Ändert bestimmte Felder im Template ab, und schaut, wie sich der Hash verändert. Ihr könnt so lange ändern wie ihr wollt, und auch den ganzen Tag auf der Tastatur herumdrücken, und ihr werdet verstehen, wie schwierig es ist, einen Hash zu generieren, der eine bestimmte Anzahl an Nullen enthält.
Block Template Updates ckpool vs public pool
Häufig stellt sich die Frage, ob ckpool besser fürs Mining geeignet ist, weil sie alle 30 Sekunden ein neues Blocktemplate schicken, anstatt alle 60 Sekunden wie zum Beispiel Public Pool. Wenn euer Template seltener geupdated wird, könnte eine Transaktion mit viel Gebühr bereits in aktuelleren Templates sein, aber noch nicht in eurem. Extrembeispiel: Die fehlerhafte Paypal-Konsolidierung 2023 ist nicht in eurem Template, wenn eure Bitaxe kein „aktuelles“ Template hat. Damit entgehen euch in diesem Fall die zusätzlichen 19BTC an Fees.
Wir von yourdevice.ch betreiben eine leicht modifzierte Variante von Public-Pool und verschicken frischen Blocktemplates alle 30 Sekunden
Was ist, wenn ich mehrere Miner habe, arbeiten die dann alle am selben Template?
Nein, dafür gibt es eben zum Beispiel die ExtraNonce. Die ExtraNonce ist Teil des Stratum mining protocol und befindet sich im Header der Coinbase Transaktion. Die ExtraNonce besteht aus 2 Teilen:
ExtraNonce1 und ExtraNonce2:
👉 Die ExtraNonce1 wird dem Miner vom Pool zur Verfügung gestellt und dient als Identifikator
mining.subscribe("user agent/version", "extranonce1")
👉 Die ExtraNonce2 wird vom Miner während seiner Arbeit ständig geändert und mit jedem Share an den Pool übermittelt
mining.submit("username", "job id", "ExtraNonce2", "nTime", "nOnce")
Mit diesem 'unique string' oder 'Identifikator' ist sichergestellt, dass 2 Worker selbst bei identischem Block Template / Nonce / Time Stamp etc. nie den gleichen Hash produzieren.
Damit wird sichergestellt, dass sich die Hashleistung auch bei mehreren Workern addiert, und niemals 2 Miner an der selben Aufgabe rechnen.
Muss ich dem Pool vertrauen dass er mit auch wirklich die Belohnung sendet
Wenn ihr Solo-Mining auf dem dem Public-Pool Projekt betreibt, bekommt ihr vom Pool alle 60 Sekunden ein komplett individuelles Block Template, welches in der Coinbase-Transaktion eure BTC-Adresse als Output für den Block-Reward enthält.
Ihr seid daher nicht auf das Vertrauen angewiesen, dass ein möglicher Block-Reward euch weitergesendet wird, weil der Reward mit der Coinbase-Transaktion bereits auf eure BTC-Adresse generiert wird.
Auch kann eure BTC-Adresse nicht durch eine andere Adresse ersetzt werden, weil sich sonst der Hash vom Block komplett verändern würde, und bei der geringsten Veränderung sofort ungütlig wäre.
Solo-Pools in der Übersicht
CKpool
CKpool ist ein reiner Solo-Pool (277 Blöcke), der Code von ckpool ist frei verfügbar. Con Kolivas selbst geniesst grosses Vertrauen. Er war massgeblich an der Entwicklung von cgminer beteiligt. Die Oberfläche ist rudimentär und ohne Schnick-Schnack, dafür performant, stabil und die Konfiguration sehr einfach. Der Pool hat eine extrem hohe Uptime, der Block-Reward bzw. die Coinbase-Transaktion geht direkt an die eigene BTC-Adresse, ohne Umweg.
Pool Fees
2% des Block-Rewards (exkl. Transaction Fees) gehen an ckpool an die BTC-Adresse bc1q28kkr5hk4gnqe3evma6runjrd2pvqyp8fpwfzu um den Pool zu betreiben und zur weiteren Pflege des ckpool-Codes beizutragen.
Settings
Pool URL:
stratum+tcp://eusolo.ckpool.org:3333
stratum+tcp://solo.ckpool.org:3333
Username
bc1qDoNotShareYourBTCAdressWithAnyBodyElse.workername
Password
x
High-Difficulty Pool (für stärkere Miner) ab Work-Diff < 1'000'000 = 1'000K = 1M
Pool URL
stratum+tcp://eusolo.ckpool.org:4334
stratum+tcp://solo.ckpool.org:4334
Seit dem Update vom Juni 2023 verteilt ckpool alle 30 Sekunden (vorher alle 60 Sekunden) ein neues Block Template mit den aktuellsten Transaktion an die Miner.
Seit November 2024 betreibt Con Kolivas eusolo.ckpool.org auf einem eigenständigen Server in der EU. Der Pool hat eine deutlich geringere Latenz als solo.ckpool.org — die beiden Pools laufen unabhängig voneinander und können daher auch als Backup-Pools eingerichtet werden.
Pool Difficulty
CKpool ist so konfiguriert, dass bei der ersten Verbindung einem Worker standardmässig die Work Diff = 10'000 zugewiesen wird.
Die Work-Diff wird so angepasst, dass im Durchschnitt 20 Shares pro Minute – also alle 3 Sekunden 1 Share – überliefert wird.
Kommen mehr als 20 Shares pro Minute wird die Work Diff vom entsprechenden Worker erhöht, kommen weniger wird die Work Diff gesenkt. Dabei ist das untere Limit, also die Minimum Work-Diff = 1.
Public Pool
Public Pool ist tolles Open-Source-Projekt mit attraktiven Statistiken.
Insbesondere für Miner mit Work-Diff < 1 bzw. Hashrate im Kilo- oder Megahash-Bereich geeignet, wie zB NerdMiner oder andere CPU-Miner.
Relativ jung und es gibt immer wieder Downtimes wegen Updates/Wartungsarbeiten.
Bisher wurde mit diesem Solo-Pool noch nie einen Block gefunden.
https://web.public-pool.io/ --> offizieller Public-Pool
https://blitzpool.yourdevice.ch/ --> Schweizer Public-Pool von yourdevice.ch betrieben.
Pool Fees
No Fees. 100% des Block-Rewards gehen an den Miner – seit Ende November 2023 auch für Miner mit mehr als 50 TH/s.
Settings
Pool URL
stratum+tcp://public-pool.io:21496
stratum+tcp://blitzpool.yourdevice.ch:3333
Username
bc1qDoNotShareYourBTCAdressWithAnyBodyElse.workername
Password
x
Pool Difficulty
Public Pool ist so konfiguriert, dass bei der ersten Verbindung einem Worker standardmässig die Work Diff = 512 zugewiesen wird.
Die Work-Diff wird so angepasst, dass im Durchschnitt 6 Shares pro Minute – also alle 10 Sekunden 1 Share – überliefert wird.
Kommen mehr als 6 Shares pro Minute wird die Work Diff vom entsprechenden Worker erhöht, kommen weniger wird die Work Diff gesenkt. Dabei ist das untere Limit, also die Minimum Work-Diff = 0.00001
KanoPool
KanoPool ist sowohl Solo-Pool (0 Blöcke) als auch PPLNS-Pool (2434 Blöcke). Kano war ebenfalls an der Entwicklung von cgminer beteiligt. Deshalb blockiert KanoPool offenbar Miner, welche gegen die GPL-Lizenzbedingungen von cgminer verstossen, zB VNISH und Awesome. Ausserdem blockiert KanoPool IP-Adressen welche Hashrate von CPU-Miner oder GPU-Miner an den Pool schicken.
Die Konfiguration ist aufwendiger und für High-Difficulty-Worker ist diese teilweise echt mühsam und erfolgt nicht wie bei ckpool einfach über einen separaten Port.
Dafür bessere API-Schnittstelle, schönere Statistiken als ckpool, eine bessere Verteilung der Proxy-Server und geringere Gebühren (=Pool Fee) im Falle eines Block-Rewards (0.5%).
Jedoch hat man mit gesperrten IP-Adresse und extrem vielen rejected Shares zu gekämpft. Ausserdem wird der Block-Reward nicht direkt auf die eigene BTC-Adresse generiert, die Coinbase-Transaktion geht zuerst an die BTC-Adresse von Kano – eine Frage des Vertrauens.
Pool Fees
0.5% des Block-Rewards gehen an kano.
Settings
Pool URL
stratum+tcp://de.kano.is:3333
Username
bc1qDoNotShareYourBTCAdressWithAnyBodyElse.workername
Password
x
KanoPool ist nach der Registration standardmässig als PPLNS-Pool eingerichtet und muss aktiv auf Solo-Pool umgestellt werden. Dafür sind folgenden Voraussetzungen bzw. Schritte notwendig:
👉 The account must have been created in the last 2 hours
👉 You must not have pointed ANY miners at the account
👉 You must have verified the account email under Account >Verify
👉 You must have set a payout address under Account >Settings
☝️ You will not be able to change the account from Solo back to PPLNS
Pool Difficulty
KanoPool ist so konfiguriert, dass bei der ersten Verbindung einem Worker standardmässig die Work Diff = 8'190 zugewiesen wird.
Die Work-Diff wird so angepasst, dass im Durchschnitt 18 Shares pro Minute – also alle 3.3 Sekunden 1 Share – überliefert wird.
Kommen mehr als 18 Shares pro Minute wird die Work Diff vom entsprechenden Worker erhöht, kommen weniger wird die Work Diff gesenkt. Dabei ist das untere Limit, also die Minimum Work-Diff = 442.
High-Difficulty für stärkere Maschinen:
👉 Aktiviert in eurem Account unter Account > Solo die Option Allow high Difficulty.
👉 Erfasse auf Nicehash/MRR in eurer Pool-Konfiguration euren Worker mit entsprechenden Einstellungen, zB:
userXY.worker_highdiff
👉 Führt einen Test mit dem Poolverifikator durch, dadurch wird der Worker auf KanoPool im Account userXY unter Workers ersichtlich.
👉 Danach ändert ihr unter Workers > Mangagement beim gewünschten worker_highdiff, die Minimum Diff von 0 auf den erforderlichen Wert.
👉 Achtung: Der Poolverifikator wird zwar weiterhin einen Fehler melden: Poolschwierigkeitsgrad zu gering (vorausgesetzt=8190, minimum=500000), aber wenn die Minimum Diff entsprechend gesetzt wurde, wird der Auftrag trotzdem starten!
OCEAN Pool
Luke Dashj (Bitcoin Core developer) reaktiviert den Pool Eligius (2011-2017) unter dem Namen OCEAN.
Das Ziel ist, einen dezentralisierten, transparenten, zensurfreien, non-custodial Mining-Pool zu etablieren.
Weiter soll die Nutzung und Weiterentwicklung vonPoolschwierigkeitsgrad zu gering Stratum V2 vorangetrieben werden, ebenso ist die Intergration von Lightning-Auszahlungen (2024) geplant.
Das Belohnungssystem von OCEAN namens TIDES (Transparent Index of Distinct Extended Shares) gibt den Minern die Möglichkeit, noch vor dem Finden eines Blocks den genauen Betrag ihrer Bezahlung zu verifizieren. Die Miner werden direkt vom Bitcoin-Netzwerk in der Coinbase-Transaktion bezahlt.
Pool Fees
0% für die ersten 2 Monate des Betriebs, danach werden Gebühren eingeführt.
Settings
Pool URL
1️⃣ OCEAN, default (0% fee)
Enthält nur Transaktionen und relativ kleine Daten
mine.ocean.xyz:3334
2️⃣ Core+AntisMindestbetrag = 0.01048576 BTCpam (0% fee)
Enthält Transaktionen und begrenzten "Spam"
ordis.mine.ocean.xyz:3303
3️⃣ Core (2% fee)
Enthält Transaktionen und "Spam"
core.mine.ocean.xyz:3202
Username
bc1qDoNotShareYourBTCAdressWithAnyBodyElse.workername
Password
x
Hashrate-Marktplatz
Nicehash ist kein Mining-Pool, sondern ein Hashpower-Marktplatz, ihr bietest also eure Hashrate auf dem Marktplatz an und werdet von Nicehash nach überlieferten Shares bezahlt (PPS = Pay per Share).
Mit und ohne KYC möglich.
Auszahlungen
PPS
Nicehash-Wallet: 0.00001 BTC (alle 4 Stunden), Payout fee 2%
BTC-Adresse: 0.001 BTC (wöchentlich), Payout fee 2% + 0.00001 BTC
BTC-Adresse: 0.100 BTC (täglich), Payout fee 2% + 0.00001 BTC
🔗 https://www.nicehash.com/support/mining-help/earnings-and-payments/can-i-get-paid-to-an-external-wallet-address
Settings (ohne KYC)
Pool URL
stratum+tcp://sha256asicboost.auto.nicehash.com:9200
Pool URL Alternative
stratum+ssl://sha256asicboost.auto.nicehash.com:443
Username
bc1qDoNotShareYourBTCAdressWithAnyBodyElse.workername
Password
x
Auszahlungsschwelle diverser Pools beim Reward Mining
Die meisten Pools haben eine vielfach höhere Auszahlungsschwelle und bei kleinen Beträgen schlagen sie eine Payout fee drauf.
Braiins
▪️Mindestbetrag = 0.0002 BTC
▪️Bei Auszahlungen ab 0.005 BTC entfällt die Payout fee von 0.0001 BTC
Lincoin
▪️Mindestbetrag = 0.001 BTC
▪️Bei Auszahlungen ab 0.001 BTC entfällt die Payout fee.
Nicehash
▪️Nicehash-Wallet (KYC): 0.00001 BTC (alle 4 Stunden), Payout fee 2%
▪️BTC-Adresse: 0.001 BTC (wöchentlich), Payout fee 2% + 0.00001 BTC
▪️BTC-Adresse: 0.100 BTC (täglich), Payout fee 2% + 0.00001 BTC
TIDES
Mindestbetrag = 0.01048576 BTC
Rewards die unter diesem Schwellenwert liegen, werden akkumuliert, bis der Schwellenwert überschritten wird, dann erfolgt die Auszahlung automatisch.
Beispiele
Wenn ihr zB. bei Nicehash kein KYC macht und somit auf eure eigene BTC-Adresse ausbezahlen wollt, müsst ihr mit einer Bitaxe mind. 44 Monate schürfen (ohne Berücksichtigung der steigenden Difficulty) bis ihr die Schwelle von 0.001 BTC erreicht🥸
Mining in der Schweiz
Für die Schweizer-Pleb-Miner, hier gibt es je nach Kanton teilweise ganz eindeutige Formulierungen:
Betrieb von Hardware-Infrastruktur:
Das aktive Betreiben von Hardware-Infrastruktur wie Mining oder Nodes wird im Grundsatz als selbständige Erwerbstätigkeit betrachtet. Daher müssen Kursgewinne und Erträge aus Kryptowährungen gewinnsteuerlich berücksichtigt werden. Im Gegenzug können Aufwände, die direkt mit dem Betrieb der Infrastruktur zusammenhängen, sowie eventuelle Kursverluste steuerlich geltend gemacht werden.
Wieso werde ich von manchen Pools geblockt obwohl ich einen Asic Miner habe
Das hat eben nichts mit ASIC oder nicht ASIC zu tun, sondern mit der sehr sehr geringen Hashrate. Ein Miner mit 1 MH/s benötigt gleich viel Ressourcen von einem Stratum-Proxy-Server wie ein Miner mit 200 TH/s. Das ist der Grund wieso CPU-Miner bereits vor Jahren von den meisten Pools geblockt wurden … Und Nicehash sowie der KanoPool möchten offensichtlich auch keine Miner mit weniger als 1 (?) TH/s …
Mining Hardware Optimieren Beispiel Anhand der Bitaxe
Das Overclocking und Undervolting von Mining-Hardware wie der Bitaxe können die Leistung und Effizienz eures Miners ein gutes Stück beeinflussen. Durch Anpassen von Taktfrequenz und Spannung könnt ihr die Hashrate steigern oder den Energieverbrauch senken. Auf einem Miner wie der Bitaxe sind die Auswirkungen hier eher begrenzt, aber auf grösserer Hardware mit vielen Hashboards und Mining Chips kann dies grössere Auswirkungen haben.
Overclocking bedeutet, die Taktfrequenz des ASIC-Chips zu erhöhen, um eine höhere Hashrate zu erzielen. Bei der Bitaxe kann dies über das Interface erfolgen, indem die Frequenz und die Kernspannung angepasst werden. Overclocking kann bis zu einem gewissen Teil auch ohne Spannungserhöhung durchgeführt werden. Dies ist effizienter, da ein Anstieg der Spannung den Vebrauch im Quadrat ansteigen lässt.
Undervolting reduziert die Betriebsspannung des Chips, was den Energieverbrauch senkt und die Effizienz steigert. Dies kann jedoch die maximale Taktfrequenz verringern. Es erfordert sorgfältiges Testen, um die optimale Balance zwischen Leistung und Effizienz zu finden. Häufig kann man aber die Taktfrequenz um ein paar MHz steigern, und dabei die Spannung um 1 bis 2 Schritte reduzieren, und bekommt bei gleicher Leistungsaufnahme mehr Hashrate.

Jede Hardware reagiert unterschiedlich auf Overclocking und Undervolting. Faktoren wie Chipqualität bzw. die Chipgüte und Kühlung spielen eine Rolle. Daher ist es wichtig, schrittweise Anpassungen vorzunehmen und die Stabilität sowie die Temperaturen zu überwachen. Für die Bitaxen sollte die Temperatur 70 °C nicht überschreiten, um eine optimale Leistung zu gewährleisten.
Für größere Mining-Geräte bietet BraiinsOS eine fortschrittliche Firmware mit Funktionen wie Autotuning, das Frequenz und Spannung für jeden Chip individuell anpasst. Dies ermöglicht eine effizientere Leistung und kann die Lebensdauer der ASICs verlängern.
Zusammenfassend können Overclocking und Undervolting die Mining-Performance verbessern, erfordern jedoch sorgfältige Anpassungen und Überwachung, um optimale Ergebnisse zu erzielen. Ausserdem lässt sich sagen, dass durch die Erhöhung der Spannung des Chips, meisst die Effizienz des Geräts stark nachlässt, deshalb sollten die Taktfrequenzen nur leicht angehoben werden, und im Idealfall die Spannung etwas abgesenkt werden.
Zum Bitaxe Tutorial gehts hier:
Erklärung zu den wichtigsten Realtime Logs
In den Logs eures Miners findet ihr viele Zahlen, wilde Wörter, und Buchstaben, damit ihr wisst um was es geht, haben wir die wichtigsten Logs für euch hier zusammengefasst:
₿ (32308602) asic_result: Nonce difficulty 282.96 of 1024.
⬇️ Die Nonce-Difficulty ist kleiner als die aktuelle Work-Difficulty, weshalb der Share nicht an den Pool übermittelt wird.
₿ (32308702) asic_result: Nonce difficulty 1329.45 of 1024.
⬆️ Die Nonce-Difficulty ist grösser als die aktuelle Work-Difficulty, weshalb der Share an den Pool übermittelt wird.
₿ (32308702) stratum_api: tx: {"id": 3414, "method": "mining.submit", "params": ["bc1q██████████████████████████████████████.bitaxeultra", "3b5cd3", "11000000", "65b7c4f1", "6ccc021a", "10c70000"]}
🆙 Der Share wird mit "mining.submit" an den Pool übermittelt.
Bei der Übermittlung eines Shares werden gemäss Stratum Protokoll die folgenden Werte übermittelt:
id, userId, jobId, extraNonce2, ntime, nonce, versionMask
₿ (32308932) stratum_task: rx: {"id":3414,"error":null,"result":true}
ℹ️ Public Pool prüft den empfangenen Share auf Gültigkeit/Richtigkeit.
₿ (32308932) stratum_task: message result accepted
🆗 Public Pool bestätigt, dass der Share vom Pool akzeptiert wurde.
₿ (32301912) stratum_task: rx: {"id":null,"method":"mining.notify","params":["3b6238","708122a776e56322a64064232e31f3a7c5b8c7070002750f0000000000000000","02000000010000000000000000000000000000000000000000000000000000000000000000ffffffff19034da20c5c7075626c69632d706f6f6c5c","ffffffff02503eea26000000001600149f82dd9e69e0008b7c5e16b2056aa679723492580000000000000000266a24aa21a9ed0b9310bb435af0c678e749e1cbd11a5eb1a75be6f3e7e31908c6131770f0a82800000000",["…"],"20000000","1704005a","65b7c52e",false]}
🆕 Public Pool verteilt mit "mining.notify" ein neues Block Template "3b6238" , entweder weil die Transaktionen aktualisiert wurden oder weil das Netzwerk einen neuen Block gefunden hat.
Bei der Übermittlung eines Block Template werden gemäss Stratum Protokoll die folgenden Werte übermittelt:
jobId, prevHash, coinbase part1, coinbase part2, merkle_branch, version, bits, timestamp, clear jobs
₿ (32302562) create_jobs_task: New Work Dequeued 3b6238
🆕 Nachdem das neue Block Template "3b6238" empfangen wurden, beginnt die Suche auf dieser neuen Grundlage.
₿ (260107) stratum_task: rx: {"params":[385],"id":null,"method":"mining.set_difficulty"}
₿ (260107) stratum_task: Set stratum difficulty: 385
↕️ Die Work-Difficulty wird für den Worker angepasst, damit die Zielvorgabe vom Pool betreffend Shares pro Minute erreicht wird.
Fazit
Die Welt des Minings ist komplex, aber zugleich faszinierend und voller Möglichkeiten. Mit dieser Mining-Bibel habt ihr die wichtigsten Grundlagen und Konzepte kennengelernt, um selbstständig ins Solomining einzusteigen. Angefangen bei der Funktionsweise der Blockchain über die Bedeutung von Hashrate, Shares und Difficulty bis hin zu den praktischen Aspekten wie Block Templates, Mining-Pools und der Anpassung eurer Hardware – dieses Wissen bildet ein solides Fundament für euren Erfolg.
Das Mining von Bitcoin ist weit mehr als nur ein technischer Prozess. Es ist ein Beitrag zu einem globalen, dezentralen Netzwerk, das Finanztransaktionen ohne zentrale Instanzen ermöglicht. Dabei könnt ihr nicht nur von finanziellen Belohnungen profitieren, sondern auch Teil einer Bewegung werden, die auf Freiheit und Unabhängigkeit setzt.
Denkt daran, dass Geduld und kontinuierliches Lernen essenziell sind. Die Technologie entwickelt sich stetig weiter, und der Wettbewerb wird immer anspruchsvoller. Doch mit der richtigen Einstellung, den richtigen Werkzeugen und der hier vermittelten Expertise seid ihr gut gerüstet, um euren Weg im Mining zu gehen.
Mögen eure Hashrate stark, eure Hardware stabil und eure Blöcke erfolgreich sein! Viel Erfolg und Spaß beim Mining! 🚀
Ein grossen Dank geht nochmals an mondayshot der viele Informationen zu dieser Mining Bibel bereit gestellt hat. Wer Ihm eine Spende da lassen will:
Lightning Adresse: mondayshot@getalby.com
Lust auf's Solomining? Schaut mal hier vorbei:
Tolle Erklärung. Danke !