Hallo Rising,
Was meinst du mit "Genauigkeit des Protokolls"?
Ist blöd ausgedrückt von mir. Aber mir fiel in dem Moment kein besserer Begriff ein.
Ich meinte damit die praktische Umsetzung, wie die Rewards berechnet bzw. die Bitcoins als Wert dargestellt werden. Ob nun Float, Double, Fixed Point, Integer oder z.B. Fractionals (Python) zum Einsatz kommen. Die letzten beiden Darstellungen sind zwar unter diesen Umständen genau genug, aber können durchaus bei Berechnungen Probleme verursachen.
Im Idealfall gibt es keine Ungenauigkeiten oder Rundungsfehler. D.h. wir würden uns immer weiter an die 21-Millionen-Marke annähern, aber diese niemals erreichen (falls diesen Fakt jemanden interessieren sollte, mache ich dazu einen anderen Thread auf, weil das weit weg führt und nicht so leichter Stoff ist).
In Wirklichkeit sind Ungenauigkeiten und Rundungsfehler in der Computertechnik eher die Regel und nicht die Ausnahme. Deshalb ist es schwer einzuschätzen, wann wir durch diese Umstände dann den "letzten Blockreward" erhalten.
Beispiel Integer: Wir zählen einfach alle Satoshis und speichern diese als Ganzzahl ab. Nun kommen wir in einigen Jahrzehnten (irgendwann um das Jahr 2141 herum) an den Punkt, dass der Blockreward ungefähr einen halben Satoshi (ca. 0,58 Satoshi) betragen würde. Mit dem hier angenommenen Integer können wir diesen Wert nicht mehr darstellen.
Ohne weitere Änderungen an der Implementierung gibt es dann die Möglichkeit, gegen 0 abzurunden oder gegen 1 aufzurunden. Beim Abrunden würden keine weiteren Blockrewards mehr ausgeschüttet, obwohl wir noch nicht 21 Millionen Bitcoins erreicht haben. Beim Aufrunden würden wir aufgrund des konstanten Rewards irgendwann wirklich den 21 Millionsten Bitcoin ausschütten.
Allerdings lässt Integer von sich aus schon zwei Stellen mehr zu, als wir heute in den Clients überhaupt einstellen können. D.h. wir können in der Implementierung noch zwei Nachkommastellen hinzufügen, sobald wir in diesen Bereich kommen. Das meine ich mit "Genauigkeit erhöhen".
Diese Nachkommastellen werden erst um das 2181 nicht mehr hilfreich sein, weil wir dann einen Blockreward von ca. 0,0057 Satoshis erreichen. Sollten wir von Integer zu Long Integer wechseln (so wie das nach meiner Kenntnis des Codes schon vorbereitet ist), bekommen wir noch haufenweise Nachkommastellen hinzu.
Nur irgendwann werden auch Long Integers nicht mehr ausreichen und dann muss das Protokoll um eine modifizierte Zahldarstellung erweitert werden. Die Alternative wäre, ab- oder aufrunden. So wie es oben bereits als erste Überlegungen für Integer geschildert wurde.
Gruss,
Bill