Ich gehe davon aus, dass die Schwierigkeit ein "Ziel" von 10 Minuten hat, da der von Satoshi gewählte Koeffizient mit einer Variablen multipliziert wird, um dem Netzwerk zu helfen, proportional zu bleiben. IE, wenn die Netzwerk-Hashrate das Doppelte der vorherigen Netzwerk-Hashrate ist, bnProofOfWorkLimit
wird sie mit der vorherigen Schwierigkeit und auch mit 2 multipliziert, was das Maß dafür ist, wie viel schneller das Netzwerk Hashes produziert.
Das ist ziemlich einfach zu verstehen. Ich habe mich jedoch gefragt, wie die ursprüngliche Schwierigkeit gewählt wurde, damit das Ziel 10 Minuten beträgt.
Ich bin chainparams.h
online auf diesen Code gestoßen 113
:
bnProofOfWorkLimit = CBigNum(~uint256(0) >> 32);
~uint256(0)
bedeutet in C++? Ich weiß, das ~uint256(0) >> 32
bedeutet 1 / 2^24
in menschenlesbaren Begriffen.~uint256(0)
Funktion statt einfach verwendet 256
?256 >> 32
werden 1 >> 24
? Gibt es dafür einen guten Grund?Jede Richtung, um mehr darüber zu erfahren, wäre ebenfalls willkommen .
Hinweis: Ich frage nicht, warum die gewählte Zeitdauer 10 Minuten betrug, ich frage, wie die Zahl 1 / 2^24
erreicht wurde, um 10 Minuten im Hinblick darauf zu schätzen, wie lange es dauert, einen sha256-Digest zu berechnen.
Ich bin mir nicht sicher, ob es das war. Als das Netzwerk seinen Betrieb aufnahm (und Satoshi war so ziemlich der einzige, der schürfte), wurden Blöcke nicht alle 10 Minuten gefunden. Beispielsweise wurden die ersten 2016-Blöcke in 24 Tagen statt in 2 Wochen gefunden. Normalerweise würde dies dazu führen, dass das Ziel ansteigt, aber es kann nicht über das fest codierte maximale Ziel gehen, also haben wir erst in Block 32256 am 30. Dezember 2009 angefangen zu sehen, wie der Retargeting-Mechanismus einsetzte und Blöcke alle 10 Minuten eintrafen.
Da es jedoch fast 10 Minuten dauerte, ist es möglich, dass Satoshi die Hashrate seiner eigenen Maschine herausgefunden und den Parameter als runde Zahl gewählt hat, die in der Nähe dessen liegt, was erforderlich wäre, um alle 10 Minuten einen Block auf seiner Hardware zu finden.
Ich glaube, Sie haben diese Codezeile nicht richtig verstanden. Hash-Werte werden als 256-Bit-Ganzzahlen ohne Vorzeichen dargestellt. uint256(0) gibt die Darstellung von 0 in diesem Datentyp an. ~ ist logisch nicht und ~uint256(0) invertiert alle Bits, was die höchstmögliche Ganzzahl ergibt, 2^256-1. Eine Verschiebung um 32 Bit nach rechts ergibt 2^224-1, sodass jeder Hash eine Chance hat, dass 1/2^32 niedriger als das maximale Ziel ist.
Der Wert wird dann in die kompaktere „Bits“-Form konvertiert, wodurch er auch auf (2^16-1)*2^208 gerundet wird.
256 >> 32 oder 1 >> 24 zu machen, hätte zu 0 geführt, da Integer-Typen keine Brüche enthalten können.
Die erste Schwierigkeit war einfach das fest codierte Minimum von 1. Das entsprach anfangs nicht zehn Minuten, es war eigentlich zu hoch für die Hashing-Power des Netzwerks. Knapp ein Jahr später, am 30. Dezember 2009, stieg der Schwierigkeitsgrad zum ersten Mal.
Eine Übersicht über die Schwierigkeitsanpassung finden Sie in dieser Tabelle: Bitcoin-Schwierigkeitsanpassungen
bvpx
2^224-1
for dazubnProofOfWorkLimit
, dass jeder Hash die Chance hat1/2^32
, niedriger als das maximale Ziel zu sein?Meni Rosenfeld
bvpx
Meni Rosenfeld
Meni Rosenfeld
bvpx
1/(2^32)
die Chance, einen Block zu finden, in irgendeiner Weise signifikant, vielleicht ist die Datenübertragung in der Hardware aufgrund der Lichtgeschwindigkeit begrenzt, sodass es nicht möglich ist, einen Hash schneller als erwartet zu berechnen? Ich vermute, dass andere Altcoins den Block-Timer ändern, indem sie diesen Wert einfach mit dem multiplizieren oder dividieren, was sie wollen, um einen neuen Block-Timer anzunähern.Meni Rosenfeld