Wie genau wurde der ursprüngliche Schwierigkeitskoeffizient bestimmt?

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, bnProofOfWorkLimitwird 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.

  • Basiert es auf einer harten physikalischen Grenze des Rechnens?

Ich bin chainparams.honline auf diesen Code gestoßen 113:

bnProofOfWorkLimit = CBigNum(~uint256(0) >> 32);
  1. Was ~uint256(0)bedeutet in C++? Ich weiß, das ~uint256(0) >> 32bedeutet 1 / 2^24in menschenlesbaren Begriffen.
  2. Warum wird die ~uint256(0)Funktion statt einfach verwendet 256?
  3. Warum wurde dies gewählt, um als und nicht ausgedrückt zu 256 >> 32werden 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^24erreicht wurde, um 10 Minuten im Hinblick darauf zu schätzen, wie lange es dauert, einen sha256-Digest zu berechnen.

Antworten (2)

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.

Wie führt ein Wert von 2^224-1for dazu bnProofOfWorkLimit, dass jeder Hash die Chance hat 1/2^32, niedriger als das maximale Ziel zu sein?
Es gibt 2 ^ 256 verschiedene mögliche Hash-Werte, von denen ungefähr 2 ^ 224 niedriger als das maximale Ziel sind, sodass ein gleichmäßig zufälliger Hash eine Chance von 2 ^ 224 / 2 ^ 256 = 1/2 ^ 32 hat, niedriger als zu sein das maximale Ziel. PS Ich bin mit dem Code nicht vertraut genug, um genau zu wissen, was bnProofOfWorkLimit ist, aber ich würde vermuten, dass es wie oben beschrieben in das maximale Ziel übersetzt wird.
Verstanden, ich war mir nicht sicher über die maximal möglichen Hash-Werte. Welche Bedeutung hat es überhaupt, dass ein Hash "niedriger" als das maximale Ziel ist? Wie wirkt sich das alles auf die Schwierigkeitsgleichung aus? Es ist eine unglaubliche Herausforderung zu verstehen, wie all dies auf der untersten Ebene funktioniert, indem man bei Null anfängt und nur den Code liest.
@bvpx: Nun, niedriger als das maximale Ziel zu sein, ist nicht sehr sinnvoll, außer dass es bei Berechnungen nützlich ist und eine Voraussetzung für einen traditionellen Mining-Pool-Anteil ist. Was zählt, ist, unter dem aktuellen Ziel zu liegen. Es gibt eigentlich keine "Schwierigkeit", das Ziel wird aus dem vorherigen Ziel und der Zeit berechnet, um 2016-Blöcke zu finden, und die Schwierigkeit wird als das Verhältnis zwischen dem maximalen Ziel und dem aktuellen Ziel definiert. Das erste Ziel war natürlich das maximale Ziel und kann niemals darüber hinausgehen.
@bvpx: Die Sache ist, sobald wir wissen, dass die Wahrscheinlichkeit, niedriger als das maximale Ziel zu sein, 1/2 ^ 32 beträgt und dass die Schwierigkeit D ist, wissen wir, dass die Wahrscheinlichkeit eines Hashs niedriger als das Ziel ist und daher ein gültiger Block ist 1 / (2^32*D). Da das maximale Ziel 2 ^ 224-2 ^ 208 und nicht 2 ^ 224 ist, ist dies natürlich nur ein vernachlässigbarer Betrag.
Aha. Die Schwierigkeit konnte also nicht auf weniger als 1 umgestellt werden, da sie bereits am Limit war. Als Ende 2009 weitere Miner dem Netzwerk beitraten, stiegen die Schwierigkeiten. Ich frage mich jedoch, wie das 10-Minuten-Fenster berechnet wurde. Ist 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.
@bvpx: Nein, 1/2 ^ 32 ist nicht signifikant, abgesehen davon, dass es sich um eine runde Zahl handelt und ein Ergebnis liefert, das dem entspricht, was gewünscht wurde. Aus der gesamten Netzwerk-Hashrate (die anfangs die Hashrate von Satoshi war) lässt sich leicht berechnen, welches Ziel erforderlich ist, um Blöcke bei einem Block pro 10 Minuten zu halten. Alts ändern das Intervall zwischen den Blöcken, nicht indem sie mit dem maximalen Ziel herumspielen, sondern indem sie die Retarget-Berechnung ändern.

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