Stratum-Mining-Protokoll

Aus Bitcoin Wiki
Dies ist die bestätigte sowie die neueste Version dieser Seite.
Wechseln zu: Navigation, Suche


Stratum mining pool

Stratum-Mining ist ein gepooltes Mining-Protokoll. Es ersetzt netzbasierte Pooling-Server, indem es den Clients ermöglicht wird, Arbeit zu generieren. Das Stratum-Protokoll wird hier ausführlich beschrieben. Dies ist eine Implementierung des Stratum-Mining für die meisten Münzen. Es ist mit MPOS kompatibel, da es den Pushpool-Standards entspricht. Das Endziel ist es, auf diesen Standards aufzubauen und eine stabilere Lösung zu finden.

Das Ziel ist es, einen zuverlässigen Stratum-Mining-Server für eine Vielzahl von Münzen zu erstellen, im Gegensatz zu anderen Gabeln, bei denen der Code auf bestimmte Algorithmen beschränkt ist. Im Laufe der Zeit werde ich dies so entwickeln, dass es mehr Funktionen bietet und sehr stabil ist. Wenn Sie eine Funktion sehen möchten, reichen Sie eine Funktionsanfrage ein.

Das Stratum-Overlay-Protokoll wurde Ende 2012 erweitert, um das gepoolte Mining als Ersatz für das veraltete Getwork-Protokoll zu unterstützen. Kurz darauf wurde von BTC Guild eine alternative "Spickzettel" -Dokumentation bereitgestellt. Da die Erweiterung keinen formellen Grenzwert für die Beschreibung eines offiziellen Standards aufweist, wurde sie nur durch Diskussion und Implementierung weiterentwickelt.

Was ist Stratum?[Bearbeiten]

So stellen Sie Ihren eigenen Bitcoin Litecoin Dogecoin Mining Pool Part 2 - Schichtenserver her

Eigenschaften[Bearbeiten]

  • Stratum Mining Pool
  • Blockbestätigung gelöst
  • Jobbasierte Vardiff-Unterstützung
  • Lösungsblock-Hash-Unterstützung
  • Protokollrotation
  • Anfangsbestätigung für Aktien mit geringer Schwierigkeit
  • Mehrere Coind-Stratum-Brieftaschen
  • Im laufenden Betrieb neue Coind-Brieftaschen
  • MySQL / PostGres / SQLite-Datenbankunterstützung
  • Einstellbare Datenbank-Commit-Parameter
  • Bypass-Passwortprüfung für Arbeiter
  • Proof-of-Work- und Proof-of-Stake-Münzen-Support
  • Transaction Messaging-Unterstützung

Methoden (Client zu Server)[Bearbeiten]

mining.authorize[Bearbeiten]

mining.authorize("username", "password")

Das Ergebnis einer autorisierten Anforderung ist normalerweise wahr (erfolgreich) oder falsch. Das Passwort kann weggelassen werden, wenn der Server keine Passwörter benötigt.

mining.capabilities (DRAFT)[Bearbeiten]

HINWEIS: Dies ist ein Entwurf für einen Erweiterungsvorschlag. Es wird noch nicht verwendet und kann sich jederzeit ändern.

mining.capabilities({"notify":[], "set_difficulty":{}, "set_goal":{}, "suggested_target": "hex target"})

Der Client kann dies senden, um den Server über seine Fähigkeiten und Optionen zu informieren. Der Singleton-Parameter ist ein Objekt, das Funktionen beschreibt. Standardmäßig wird es als {"Benachrichtigen": {}, "set_difficulty": []} betrachtet. Sobald diese Methode verwendet wird, müssen diese jedoch explizit eingeschlossen werden, wenn dies gewünscht wird. Der Schlüssel "suggest_target" ersetzt möglicherweise die Methode mining.suggest_target.

Beachten Sie, dass die meisten Schlüssel zu diesem Zeitpunkt keinen sinnvollen Wert haben und die Werte davon ignoriert werden sollten (dh, nur ihre Anwesenheit ist von Bedeutung).

mining.extranonce.subscribe[Bearbeiten]

mining.extranonce.subscribe()

Zeigt dem Server an, dass der Client die mining.set_extranonce-Methode unterstützt.

mining.get_transactions[Bearbeiten]

mining.get_transactions("job id")

Der Server sollte ein Array mit einem Hexdump jeder Transaktion in dem für die angegebene Job-ID angegebenen Block zurücksenden.

mining.submit[Bearbeiten]

mining.submit("username", "job id", "ExtraNonce2", "nTime", "nOnce")

Miners senden Anteile mit der Methode "mining.submit". Kundeneinreichungen enthalten:

  • Arbeitername
  • Job-ID.
  • ExtraNonce2.
  • nTime.
  • nOnce.

Die Antwort des Servers ist das Ergebnis: wahr für akzeptiert, falsch für abgelehnt (oder Sie erhalten einen Fehler mit mehr Details)

mining.subscribe[Bearbeiten]

mining.subscribe("user agent/version", "extranonce1")

Der optionale zweite Parameter gibt eine Mining.notify-Abonnement-ID an, mit der der Client die Arbeit fortsetzen möchte (möglicherweise aufgrund einer unterbrochenen Verbindung). Wenn angegeben, KANN ein Server (nach seiner Wahl) die Verbindung auf dieselbe Weise ausgeben1. Beachten Sie, dass extranonce1 dasselbe sein kann (was eine wiederaufgenommene Verbindung zulässt), auch wenn die Abonnement-ID geändert wird!

Der Kunde erhält ein Ergebnis:

[[["mining.set_difficulty", "subscription id 1"], ["mining.notify", "subscription id 2"]], "extranonce1", extranonce2_size]

Das Ergebnis enthält drei Elemente:

  • Abonnements - Ein Array von Tupeln mit zwei Elementen, jeweils mit einem Abonnementtyp und einer ID.
  • ExtraNonce1. - Hex-kodierte, pro Verbindung eindeutige Zeichenfolge, die später zum Erstellen von Generierungstransaktionen verwendet wird.
  • ExtraNonce2_size. - Die Anzahl der Bytes, die der Miner-Benutzer für seinen ExtraNonce2-Zähler verwendet.

mining.suggest_difficulty[Bearbeiten]

mining.suggest_difficulty(preferred share difficulty Number)

Wird verwendet, um eine Präferenz für den Freigabe-Schwierigkeitsgrad für den Pool anzugeben. Server müssen diese Anforderung nicht erfüllen, auch wenn sie die Stratum-Methode unterstützen.

mining.suggest_target[Bearbeiten]

mining.suggest_target("full hex share target")

Wird verwendet, um dem Pool eine Präferenz für das Freigabeziel anzugeben, normalerweise vor dem Miner. Server müssen diese Anforderung nicht erfüllen, auch wenn sie die Stratum-Methode unterstützen.

Methoden (Server zu Client)[Bearbeiten]

client.get_version[Bearbeiten]

client.get_version()

Der Client sollte eine Ergebniszeichenfolge mit Name und Version senden.

client.reconnect[Bearbeiten]

client.reconnect("hostname", port, waittime)

Der Client sollte die Verbindung trennen, auf Sekunden warten (sofern angegeben) und dann eine Verbindung zum angegebenen Host / Port herstellen (der Standardwert ist der aktuelle Server). Beachten Sie, dass Clients aus Sicherheitsgründen solche Anforderungen ignorieren können, wenn das Ziel nicht gleich oder ähnlich ist.

client.show_message[Bearbeiten]

client.show_message("human-readable message")

Der Client sollte die Nachricht auf vernünftige Weise seinem Benutzer anzeigen.

mining.notify[Bearbeiten]

mining.notify(...)

Felder in der Reihenfolge:

  • Job-ID. Dies ist enthalten, wenn Bergleute Ergebnisse übermitteln, damit die Arbeit mit den richtigen Transaktionen verglichen werden kann.
  • Hash des vorherigen Blocks. Wird verwendet, um den Header zu erstellen.
  • Generierungstransaktion (Teil 1). Der Miner fügt ExtraNonce1 und ExtraNonce2 nach diesem Abschnitt der Transaktionsdaten ein.
  • Generierungstransaktion (Teil 2). Der Miner hängt dies nach dem ersten Teil der Transaktionsdaten und den beiden ExtraNonce-Werten an.
  • Liste der Merkle-Niederlassungen. Die Generierungstransaktion wird gegen die Merkle-Filialen gehackt, um die endgültige Merkle-Wurzel zu bilden.
  • Bitcoin-Blockversion. Wird im Blockkopf verwendet.
  • nBits. Das verschlüsselte Netzwerkproblem. Wird im Blockkopf verwendet.
  • nTime. Die aktuelle Uhrzeit nZeitrollen sollte unterstützt werden, sollte sich jedoch nicht schneller als die tatsächliche Zeit erhöhen.
  • Saubere Jobs. Wenn dies zutrifft, sollten Bergleute ihre aktuelle Arbeit abbrechen und den neuen Job sofort verwenden. Bei false können sie immer noch den aktuellen Job verwenden, sollten jedoch nach Erschöpfung des aktuellen Nonce-Bereichs zum neuen Job wechseln.

mining.set_difficulty[Bearbeiten]

mining.set_difficulty(difficulty)

Der Server kann die für Miner-Shares erforderliche Schwierigkeit mit der Methode "mining.set_difficulty" anpassen. Der Bergmann sollte damit beginnen, die neue Schwierigkeit für den nächsten erhaltenen Auftrag durchzusetzen. Einige Pools erzwingen möglicherweise einen neuen Job, wenn set_difficulty gesendet wird. Mit clean_jobs wird der Miner gezwungen, die neue Schwierigkeit sofort zu verwenden.

mining.set_extranonce[Bearbeiten]

mining.set_extranonce("extranonce1", extranonce2_size)

Wenn diese Werte angegeben werden, ersetzen sie die anfänglichen Abonnementwerte, die mit dem nächsten Mining-Job beginnen.

mining.set_goal (DRAFT)[Bearbeiten]

HINWEIS: Dies ist ein Entwurf für einen Erweiterungsvorschlag. Es wird noch nicht verwendet und kann sich jederzeit ändern.

mining.set_goal("goal name", {"malgo": "SHA256d", ...})

Informiert den Client, dass zukünftige Jobs an einem bestimmten benannten Ziel mit verschiedenen Parametern arbeiten (derzeit wird nur "malgo" als Mining-Algorithmus definiert). Bergleute gehen davon aus, dass Ziele mit demselben Namen gleichwertig sind, sollten jedoch Parameteränderungen erkennen, wenn ein Ziel seine Parameter ändert.

Stratum-Mining-Proxy[Bearbeiten]

Der Stratum-Mining-Proxy ermöglicht Mining-Software, die das alte Getwork-Protokoll unterstützt, um das moderne Stratum-Mining-Protokoll zu verwenden, das von unserem Pool bereitgestellt wird. Wir werden hier nicht auf vollständige technische Details und Gründe für die Gestaltung des Stratum-Protokolls eingehen. Wenn Sie danach suchen, finden Sie Ihren Weg hierher.

Wir sind jedoch der Meinung, dass Sie einige grundlegende Fakten und Gründe kennen sollten. Das alte Getwork-Protokoll wurde als einfache Lösung für alleinstehende Bergleute in Zeiten entwickelt, in denen es keinen Bergbaubecken gab und die Bergbaugeräte nur wenige GHash pro Sekunde hatten. Damals war es gerade gut genug, um durchzukommen, aber die Situation hat sich radikal geändert. Jetzt können Sie problemlos einen Miner bekommen, der sogar 6 THash / s produzieren kann. Eine solche Leistung würde eine beträchtlich große Netzwerkbandbreite auf der Benutzerseite (~ 1428 Netzwerkanforderungen auf einmal) und eine lächerlich große auf der Serverseite erfordern (stellen Sie sich einige hundert Benutzer vor, die jeweils den Server nach Arbeit abfragen).

Das Stratum-Protokoll reduziert die Netzwerklast und verbessert die Leistung der Miner in langsameren und instabilen Netzwerken erheblich.

Stratum-Pool-Software[Bearbeiten]

Tabellen mit Unterstützung für Miner/Server für das Stratum-Mining-Protokoll:

  • Mining-Software
  • Poolservers

Kritik[Bearbeiten]

Geschlossene Entwicklung[Bearbeiten]

Es wurde kritisiert, dass die Minenerweiterungen hinter verschlossenen Türen ohne Input der breiteren Entwicklungs- und Bergbaugemeinde entwickelt wurden, was zu verschiedenen offensichtlichen Problemen führte, die hätte angegangen werden können, wenn sie dem Standard-BIP-Entwurfsprozess gefolgt wären.

GBT verschieben[Bearbeiten]

Die Mining-Erweiterungen wurden angekündigt, nachdem die Community Monate damit verbracht hatte, ein meist überlegenes offenes Standardprotokoll für das Mining (Getblocktemplate) zu entwickeln. Da die Erweiterung des Stratum-Mining-Projekts von einem großen Mining-Pool unterstützt wurde, litt die GBT-Akzeptanz und das dezentrale Mining wird häufig vernachlässigt, während das Stratum eingesetzt wird.

Siehe auch[Bearbeiten]

Ressourcen[Bearbeiten]