ZYCORD Doku
Deutsch
ZycordDokuMining

Mining

Proof of Work mit RandomX, auf dem Prozessor, der ohnehin in Ihrem Rechner steckt. Keine ASIC-Farm als Konkurrenz und kein Premine — Coins kommen aus dem Mining und sonst nirgendwoher.

Das Ganze#

# A payout address. The node never sees the key behind it.
zcd wallet new --out miner.json

# Mine to it.
zycordd --testnet --dir ./testnet \
  --mine --payout $(zcd wallet address --key miner.json)

Im öffentlichen Testnet und im Mainnet sind das die -randomx-Binärdateien — zcd-randomx und zycordd-randomx. Eine ohne das Tag gebaute Binärdatei verweigert den Start, statt auf die Entwicklungs-Engine zurückzufallen. Siehe Installation.

Starten Sie ihn, wann Sie wollen#

Ein Node, der gestartet wird, bevor der erste Block seines Netzwerks fällig ist, mint nicht zu früh und muss nicht zur Stunde erneut gestartet werden. Er verweigert es, einen Block zu bauen, dessen Zeitstempel seine eigene Uhr noch nicht erreicht hat, wartet und beginnt von selbst. Er sagt das, während er wartet, mit dem Zeitpunkt, auf den er wartet, und der verbleibenden Dauer:

waiting to mine: the next block cannot be dated before 2026-10-01T00:00:01Z
(unix 1790812801), and this node's clock reads 2026-09-30T20:12:31Z - 3h47m30s
to wait. Leave this running: mining starts on its own and there is nothing to
restart or reconfigure.

Das ist eine Weigerung zu minen, keine Weigerung zu laufen: der Node peert, synchronisiert und bedient seine RPC die ganze Zeit. Die Meldung wiederholt sich alle zehn Minuten, damit eine lange Wartezeit nicht wie ein Hänger aussieht.

Wenn er das nie aufhört zu sagen, geht Ihre Uhr falsch

Die Wartezeit wird gegen die Uhr dieses Rechners berechnet, eine um Tage nachgehende Uhr wartet also Tage. Prüfen Sie sie, bevor Sie irgendetwas anderes prüfen.

Diese Weigerung ist auch der Grund, warum es überhaupt vertretbar ist, einen Startzeitpunkt zu veröffentlichen. Ohne sie datierte der Miner seinen Header stattdessen auf den Median-Boden vor, der vor der Genesis genesis_time selbst ist — ein früher Start erzeugte also eine private Chain, die sonst niemand beurteilen konnte, und weil die Schwierigkeitsregel die deklarierten Lösungszeiten misst, eine, deren Ziel sich in jedem Block gegen Intervalle verhärtete, die nichts mit tatsächlich verstrichener Zeit zu tun hatten. Dafür musste niemand unehrlich sein; das war es, was ein Durchlaufenlassen über Nacht früher bewirkte.

Die Auszahlungsadresse muss persistent sein#

Sie muss eine persistente (0x02) Adresse sein — zcd wallet address gibt standardmäßig eine aus —, und zycordd weist alles andere ab, statt zu warnen. Der Node sieht den Schlüssel, der sie kontrolliert, nie und könnte die Belohnung nicht ausgeben, wenn er wollte.

Warum eine One-Shot-Auszahlungsadresse stillschweigend Geld verliert

Eine One-Shot-Auszahlung (0x01) mint korrekt — bis genau zu dem Moment, in dem Sie einmal von ihr ausgeben. Diese Belastung markiert die Adresse für immer als ausgegeben, und der Fold verbrennt ab genau demselben Block jede reifende Belohnung, die an sie adressiert ist — der Maturity-Ring rollt weiter, nachdem die Zertifikate des Blocks gelandet sind, sodass der Block mit der Ausgabe bereits der erste Block ist, der Geld verliert, und alles, was von Ihren letzten coinbase_maturity Blöcken noch im Ring liegt, geht mit.

Nichts wirft einen Fehler. Die einzige Spur steht in der Blockzeile dieses Nodes selbst: matured=0, was auch ein gewöhnlicher leerer Ringplatz ausgibt, und ein burned=, das den gesamten Producer-Anteil klammheimlich neben den Grund- und Skip-Gebühren aufgenommen hat, die es normalerweise meldet. Kein Feld sagt „coinbase“. Eine persistente Adresse kann überhaupt nie in die Spent-Registry gelangen, der Fehlerfall ist also beseitigt statt verengt — siehe Wallet-Regel 3.

Coinbase-Maturity#

Belohnungen reifen nach coinbase_maturity Blöcken — 100 sowohl im Mainnet als auch im öffentlichen Testnet. Bis dahin sind sie im Zustand sichtbar und nicht ausgebbar, und das finanziert die ersten Einlagen auf einer Chain ohne Premine: in den ersten rund hundert Blöcken können nur Miner Transaktionen durchführen.

Das Mainnet hat keinen Faucet und wird auch keinen bekommen, im Mainnet ist diese Anlaufphase also die gesamte Verteilung: minen, um mitzuspielen. Das öffentliche Testnet hat einen Faucet, wie alles andere darauf durch Mining finanziert, denn ein Netzwerk, dessen Coins nichts wert sind, verliert nichts dadurch, dass jemand eine Wallet probt, bevor er einen Miner probt.

Was der Betrieb kostet#

Die Arbeitsfunktion ist ein Konsensparameter, keine Einstellung. zcd params gibt sie aus:

proof of work    randomx-v1 (re-keyed every 2048 blocks, 64-block lag)

Speicher#

Die Verifikation braucht etwa 256 MiB je gehaltener Schlüsselepoche, und die Tabelle hält zwei, damit eine Reorg über eine Schlüsselgrenze hinweg nicht eine pro Block neu aufbaut. Kalkulieren Sie mehr als diese Tabelle ein, denn die Tabelle ist nicht die Schranke. Ein Cache ist ab dem Moment der Zuteilung im Speicher, und die Argon2-Befüllung, die ihn teuer macht, kommt danach — es können also bis zu zwei weitere aktiv sein, während sie gebaut werden —, und ein Eintrag, der verdrängt wird, während ihn noch etwas benutzt, behält alles, was er hat, bis dieser Nutzer loslässt, und genau das tut ein Miner über eine Dataset-Befüllung hinweg.

RolleBudgetWarum
Verifizierender Node~1 GiB für die EngineDer Cache-Spitzenwert gegen die zweieinträgige Tabelle wurde mit beiden Effekten gleichzeitig bei 1280 MiB gemessen — nicht bei den 512 MiB, die die Tabelle nahelegt.
Minender Node~3,3 GiBReserviert zusätzlich das ~2 GiB große Dataset und ist der Fall, der einen Nutzer über die Befüllung hinweg festhält.

Ein Rechner, der bequem verifizieren kann, kann nicht zwangsläufig minen.

Threads#

--mine-threads steht standardmäßig auf einem je Kern. Es ändert nichts an der Gültigkeit; es bestimmt, wie schnell dieser Node nach einer Lösung sucht.

Was bei einem Schlüsselwechsel passiert#

Die Arbeitsfunktion erhält alle randomx_key_interval Blöcke einen neuen Schlüssel. Ein minender Node baut dann das ~2 GiB große Dataset neu auf und hört währenddessen auf zu minen — in der Größenordnung von zehn Sekunden, maschinenabhängig; messen Sie Ihre eigene ab der ersten Grenze im Log.

Er verifiziert die ganze Zeit weiter, und ein Neuaufbau kann ihn nicht ausbremsen: ein Header aus einer anderen Schlüsselepoche als der gerade geminten wird auf dem eigenen 256-MiB-Cache dieser Epoche verifiziert, den das Dataset nicht berührt. Beide berechnen identische Digests, der einzige Unterschied, den ein Neuaufbau für die Verifikation macht, ist also Geschwindigkeit. Der Cache der nächsten Epoche wird über die letzten randomx_key_lag Blöcke der Epoche vorgewärmt.

Netzwerkrandomx_key_intervalMining-Pause, ungefähr
Mainnet2048 Blöckeeine alle ~17 Stunden
öffentliches Testnet512 Blöckeeine alle ~4 Stunden

Das kürzere Intervall des Testnets ist Absicht: diese Grenze öfter zu proben, gehört zu dem, was das Netzwerk messen soll. Das Dataset der nächsten Epoche im Voraus zu bauen, ist möglich — der Schlüssel ergibt sich aus der Höhe, ist also lange vor der Grenze bekannt — und wird bewusst unterlassen: es hieße, zwei davon zu halten, 4 GiB, um eine Pause zu sparen, die einen Miner ein paar Sekunden am Tag kostet.

Einen minenden Node anhalten#

SIGTERM (oder Strg-C) hält ihn an, und er hält zügig an: ein Signal erreicht jede Schleife, nicht diejenige, die gerade zufällig am Kanal wartet.

Ein Stopp, der während eines Schlüsselwechsels eintrifft, wartet, bis die Dataset-Befüllung fertig ist — die Engine gibt keinen ~2 GiB großen Puffer frei, solange Hash-Aufrufe noch darin lesen, was ein Use-after-free in C wäre, das kein Go-Werkzeug melden würde. Es ist ein Stopp, der auf ein festes Ereignis wartet, nicht einer, der mit ihm um die Wette läuft: über zehn Durchläufe gemessen bewegte sich der Zeitpunkt des Endes nicht, wie früh das Signal auch eintraf, während die Wartezeit von 4,5 s auf 0,7 s schrumpfte, ohne SIGSEGV.

Kalkulieren Sie also ein Stopp-Timeout oberhalb der Befüllzeit Ihres Rechners ein. Ein zweites SIGTERM wartet nicht — das erste gibt das Signal an das Betriebssystem zurück, ein erneutes Drücken von Strg-C während dieser Pause beendet den Prozess also sofort.

Pools, und warum es keine gibt#

Zum Start gibt es keine, und keiner wäre offiziell. Der Node mint ab Werk allein, und bei Genesis-Schwierigkeit ist das der vernünftige Einstieg. Falls Pools auftauchen, sind sie Dritte; wenden Sie dieselbe Skepsis an wie überall sonst.

Botnetze, benannt statt geleugnet#

CPU-Mining lädt sie ein. Jeder CPU-minebare Coin hat gegen sie gekämpft, und dieses Projekt erwartet nicht, die Ausnahme zu sein. Der Handel wird sehenden Auges eingegangen: eine durch Botnetze verzerrte Verteilung ist immer noch breiter als eine, die in einem Verkauf entschieden wird, und den Laptop, den Sie ohnehin besitzen, konkurrenzfähig zu halten, ist der ganze Grund, warum es RandomX gibt.

Beim Arbeiten zusehen#

Der Testnet-Explorer stellt jeden Block und jedes Zertifikat dar, einschließlich der Seite, die kein Explorer einer anderen Chain darstellen kann: ob jedes Zertifikat angewendet oder übersprungen und abgerechnet wurde und welcher deklarierte Read nicht mehr galt. Ihr eigener Node beantwortet dieselben Fragen auf /status, /head und /metrics — siehe die schreibgeschützte Oberfläche.