Pool getwork "Ziel"?

In einer Getwork-Anfrage sendet bitcoind ein Ziel, das dem Bitwert des aktuellen Blocks entspricht. Senden die großen Pools dasselbe Ziel, wie man es von Bitcoin erwarten würde, Schwierigkeitsgrad „1“ oder vielleicht etwas anderes?

Antworten (2)

Ich habe gerade einen Miner gestartet, der sich mit dem Slush-Pool verbindet . Die getworkvon meinem Miner gesendete wurde mit folgendem beantwortet:

{"id": "1",
 "result": {"hash1": "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
            "data": "00000001c5993e03c08cea1b78a2190865f68698c069a8033d60e5e70000082a00000000e0884a966424aac62b4997dc0bae1c60fab2ba12887fa842f07c9cacaf24b4534f3b53931a0c290b00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
            "midstate": "390b85042008bac15b6ce310d791c8612610a0c5ee441b252ee6abee70bf742a",
            "target": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000"
           },
 "error": null
}

Das Ziel, das es mir gegeben hat, ist 64 Hexadezimalstellen lang. Das sind ungefähr 2^256 und damit größer als das maximale Ziel von 2^(256-32)-1. Dann wurde mir klar, dass das Ziel „Little-Endian“ ist, was bedeutet, dass es Byte für Byte rückwärts ist. Umkehren ergibt:

00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

das ist genau 2^(256-32)-1, das maximale Ziel.

Slush's Pool fordert mich also zumindest auf, Blöcke der Schwierigkeit 1 zu lösen.

Ich weiß , dass P2Pool den Schwierigkeitsgrad höher einstellt, sodass etwa alle 10 Sekunden Aktien in der P2Pool-Sharechain gefunden werden. Um dies zu erreichen, ist es derzeit schwierig 609.82, Arbeit zu vergeben, aber es ändert sich alle paar Sekunden, basierend auf der jüngsten Rate, mit der P2Pool-Aktien gefunden werden.

Edit: Ich habe gerade nachgesehen und es stellt sich heraus, dass ich falsch liege. Hier ist eine getworkvon der P2Pool-Instanz, die ich ausführe:

{"error": null,
 "jsonrpc": "2.0",
 "id": 0,
 "result": {"hash1": "00000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000010000",
            "target": "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000",
            "submitold": true,
            "identifier": "15578",
            "data": "000000011e90271e3071e27e4b16142162e54a68776176deeef5fe6e000001a800000000534e460eb3798f9d4149c56dddf486610512007201745fefd7661cedbde821fa4f3b5c461a0c290b00000000000000800000000000000000000000000000000000000000000000000000000000000000000000000000000080020000",
            "midstate": "acb6f89399060ab343bbd17e3a6cccb89c2211af189bec8da15284a1d5e87b29"
           }
}

Beachten Sie, dass das Ziel dasselbe ist wie bei Slush's Pool. Es stellt eine Schwierigkeit von 1 dar. Der Miner denkt also, dass er nach Aktien der Schwierigkeit 1 sucht, aber P2Pool lehnt jede Aktie ab, die der Miner einreicht und die eine Schwierigkeit von weniger als 609.82hat, oder was auch immer die Schwierigkeit des Pools zu diesem Zeitpunkt ist.

(Nickerchen) Das Mindestziel ist eigentlich 0xFFFF00000.... Der oben angezeigte Wert entspricht tatsächlich der Schwierigkeit 0,999985. Da dieses Target dieselben Optimierungen für Miner zulässt wie Real Difficulty 1, wird dieses etwas höhere Target verwendet.
Hmm, das wusste ich. Ich frage mich, warum ich mich in meiner obigen Antwort zweimal geirrt habe! Und warum verwenden die Mining-Pools nicht Schwierigkeit 1 statt Schwierigkeit 0,999985?
Warum sollten sie etwas anderes als die niedrigste effizient berechenbare Schwierigkeit verwenden?
Die Schwierigkeit ist in beiden Fällen eine Konstante, nicht wahr? Wie kommt da die Recheneffizienz ins Spiel? Wollen Sie damit sagen, dass es einfacher ist, bnProofOfWorkLimit zu verwenden, weil es bereits definiert ist, als 0xFFFF<<n zu verwenden und die Zeit damit verbringen zu müssen, herauszufinden, was n sein sollte?
Die meisten Miner-Software prüft einfach innerhalb ihrer engen Schleife, ob die ersten 32 Bits des Hash-Ergebnisses Null sind, was implizit der Schwierigkeit 0,999985 entspricht. Anschließend werden die Ergebnisse außerhalb der Hauptschleife auf Übereinstimmung mit dem tatsächlichen Ziel überprüft. Wenn ein Mining-Pool die volle Schwierigkeit 1 erfordern würde, würden sie 0,0015 % weniger Anteile sehen, die sowieso berechnet werden.

Die meisten Pools definieren ihren Zielwert (Mindestwert, der erforderlich ist, um einen „Anteil“ zu verdienen) wie folgt:

T = 2 ** (256 - 32) - 1
= 0x00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff

Das Bitcoin-Protokoll definiert eine Schwierigkeit von 1 als Ziel für:

D = 0xffff * 2**208
= 0x00000000ffff0000000000000000000000000000000000000000000000000000

Sie sind nahezu gleich:

T/D = 1.0000152590218967

Das genaue Ziel, das zum Verdienen von Anteilen verwendet wird, könnte auf eine größere Zahl festgelegt werden, aber das würde die Anzahl der an den Server gesendeten Getwork-Anfragen erhöhen, da Anteile leichter zu finden wären. Beachten Sie, dass Sie, wenn Sie die Größe des Ziels verringern, die Wahrscheinlichkeit verringern würden, JEGLICHE gültige Freigaben für einen bestimmten Block-Header zu finden (es sei denn, Sie erlauben, sowohl den Zeitstempel als auch die Nonce zu ändern). So wie es aussieht, ist die erwartete Anzahl von Anteilen, die pro Getwork-Anfrage gefunden werden, ungefähr 1 (wenn das Ziel 32 führende Null-Bits hat).