Halving nach 32 Zyklen?

Hallo liebe Plebs.

Im Whitepaper „vermisse“ ich die Gleichung, welche das maximale Supply von Bitcoin bestimmt.
Ich habe dazu die angepinte Summenformel gefunden und daraus habe ich mir folgende Frage gestellt:

Gibt es im Protokoll nach 32 Zyklen gemäß code immer noch Halving events? Ich weiss, dass dann keine Coinbase ausgegeben werden kann, weil der Mainlayer nicht vorsieht, unter einen Satoshi zu gehen. Gibt es also unendlich viele Zyklen, oder laut code wirklich nur 32?
Ich hoffe man versteht, wie ich es meine.

Liebe Grüße

Ich habe es zwar noch nie selber verifiziert, aber soweit ich weiß gibt es keine Halving-Limitierung im Quellcode. Bedeutet: Auch wenn der letzte Satoshi ausgegeben wurde gibt es weiterhin die Halvings.

Hintergrund ist, dass hier immer ein ganzzahliges Datenfeld mit 0,5 multipliziert wird. Da das Datenfeld aber nur ganze Zahlen kann muss man mit Halbierungen zwangsweise irgendwann an einem Punkt kommen, wo man die letzte 1 mit 0,5 multipliziert und das Ergebnis dann 0 ist. Ab diesem Zeitpunkt ist das Datnfeld 0 und weitere Multiplikationen sind nuneinmal immer 0.

Damit kann man zwar technisch die Halvings weiter machen, aber sie haben keinen Effekt mehr. Das ist auch der Grund, warum es komplett egal ist, ob man dann mit dem Halving aufhört oder einfach weiter macht, das Ergebnis ist exakt das Gleiche. Und wenn man den Code einfach halten will, dann programiert man eben so wenig Ausnahmen wie möglich und lässt die Halvings einfach weiter laufen. Wenn es soweit ist, kann dieser Codeblock des Halvings ja theoretisch komplett entfernt werden.

Wenn man sich aber jetzt nur deine Formel anschaut, dann hast du die ganzzahligen Rundungsfehler nicht mit beachtet, die entstehen, wenn die letzte Stelle der Zahl eine 1 ist. Das Problem ist ja gerade, dass eine ungerade Zahl nicht durch 2 geteilt werden kann. Wenn man deine Formel aber einfach so ausrechnet, dann verwendet man typischerweise reelle Zahlen.

Das Ergebnis wird also größer sein als wenn du die Rechenfehler einer Ganzzahlberechnung durchführst. Gerade weil immer wenn die letzte Stelle eine 1 ist, dann wird diese Halbierung abgerundet, egal was davor noch an Zahlenwerte steht. Eine Rechnung mit reellen Zahlen würde aber korrekt mit 0,5 statt 0 als „letzte“ Stelle weiter rechnen.

Hier mal ein Beispiel, wenn du die 10 immer halbierst, einmal mit reellen Zahlen und einmal mit ganzen Zahlen.

Reelle Zahlen Ganze Zahlen
10 10
5 5
2,5 2
1,25 1
0,625 0
Summe Summe
19,375 18

Ich vermute, dass das auch der Grund ist, warum im Whitepaper diese einfache Formel nicht steht, sie gilt nur annäherungsweise, ist aber nicht komplett exakt.

Wenn du die Formel so abänderst, dass die (50)/(2^i) auf die Einerstelle gerundet wird, dann sollte die Formel stimmen, wobei ich mir da nicht 100% sicher bin. Ab einem gewissem i würdest du dann nurnoch Nullen aufsummieren und somit könntest du problemlos i auch bis ins Unendliche laufen lassen und trotzdem einen endlichen Wert erhalten. (Gut, endlich wäre der Wert auch im reellen nach Grenzwertregeln bzw. einer geometrischen Reihe Σq^i mit q<1, was hier mit q = 1/2 erfüllt ist)

1 „Gefällt mir“

Es gibt laut Code 63 Halvings, also grob gesagt Halbierungen durch Bitshifts.

Nachdem man aber mit einer Subsidy von 50 BTC gestartet ist, geht die Subsidy beim 33. „Halving“ von 1 Sat auf 0 Sat.

Deshalb kann man auch genauso gut sagen, dass es nur 33 Halvings gibt.

CAmount GetBlockSubsidy(int nHeight, const Consensus::Params& consensusParams)
{
    int halvings = nHeight / consensusParams.nSubsidyHalvingInterval;
    // Force block reward to zero when right shift is undefined.
    if (halvings >= 64)
        return 0;

    CAmount nSubsidy = 50 * COIN;
    // Subsidy is cut in half every 210,000 blocks which will occur approximately every 4 years.
    nSubsidy >>= halvings;
    return nSubsidy;
}

Quelle auf Github:
bitcoin/src/validation.cpp at master · bitcoin/bitcoin · GitHub

Hier auch nochmal zur krummen Gesamtsumme:
Warum 21 Millionen Bitcoin?
21 Millionen? Wieviele Bitcoins es wirklich geben wird! - #5 von skyrmion

3 „Gefällt mir“

Ganz herzlichen Dank für eure beiden Antworten @skyrmion und @DasPie.

So ganz mit den „bitshifts“ und allem drum herum hab ichs nicht verstanden. Aber die 64 im code ist doch schon mal ne ziemlich genaue Angabe.
Ich frage mich, warum satoshi, wenn es nach 32 Halvings ohnehin keine Ausschüttung mehr gibt, dieses dann dennoch bis 64 weiter laufen lässt?

Kurz zum Hintergrund dieser Frage: Möchte mir diese mathematische Knappheit aufs Handgelenk tattowieren. Und das sollte dann halt schon stimmen :rofl: haha

Schönen Sonntag euch beiden :+1:t3:

2 „Gefällt mir“

Die Bitshifts sind die Multiplikationen bzw. Divisionen mit 2.

Das ist so wegen der Binärdarstellung ganzer Zahlen mit 0 und 1.

Stell dir das einmal im 10er Zahlensystem vor, was passiert, wenn du eine Zahl nach vorne oder hinten rotierst? Also aus 3141592 rotierst du die einzelnen Ziffern z.B. 6 Stellen nach hinten und erhällst 3,141592. Du hast also quasi nur das Komma verschoben aber die Mathematische Operation waren 6 Division mit 10: 3141592/10^6 = 3,141592. Wenn wir jetzt noch bei ganzen zahlen bleiben, dann wird immer alles nach dem Komma abgeschnitten und es bleibt einfach nur eine 3 übrig.

Das liegt an der Bedeutung der Stellen der Ziffern.

3141592 = 3 ·10^6 + 1·10^5 + 4·10^4 + 1·10^3 + 5·10^2 + 9·10^1 + 2·10^0
Verschiebst du jetzt also die Stellen um 6 in der Zehnerdarstellung, dann verschiebst du nur den Exponenten 10^x zu 10^(x-6)

Zurück zum Binärsysten bedeutet das, dass eine Bitverschiebung statt einer Multiplikation/Division mit 10 jetzt einer Multiplikation/Division mit 2 bedeutet. Weil die Darstellung im Binärsystem genau alle 10er oben durch 2en ersetzt:

10011 = 1·2^4 + 0·2^3 + 0·2^2 + 1·2^1 + 1·2^0

Wenn du diese Binärfolge also durch 2 teilen willst, dann kannst du ohne weitere Rechnungen einfach die Stellen verschieben und 10011/2 = 1001,1 wobei wir bei ganzzahligen Ergebnissen wieder das komma weglassen und erhalten 1001.
Umgerechnet in das Zehnersystem würde die Zahl
binär(10011)/2 = 19/2 = 9,5 im Zehnersystem ergeben. Wenn wir diese wieder ins Binärsystem umwandeln kommt exakt 1001,1 heraus oder wenn wir auf ganze Zahlen runden 9 = binär(1001)

Also zusammenfassend: der Bitshift ist genau die Division mit 2, die du in der Summenformel mit 2^i hast, wobei das i angibt, wie viele Stellen geshiftet werden, also wie oft mit durch 2 geteilt wird.

Die 64 ist dort vermutlich so drin, weil das Datenfeld 64 Bit groß ist. Auch wenn der wirkliche Subsidy-Wert immer geringer ist stellst du mit einem maximalem Shift von 64 sicher, dass der Wert danach garantiert 0 ist. Also wenn du eine 64-Bit lange Folge um z.B. 100 Bits shiftest, dann kannst du dir immer sicher sein, dass du keine Bits mehr von der Anfangsfolge im Wertebereich haben wirst weil du alle Bits weggeschiftet hast. Shiftest du diese aber nur um 32 Bits, dann könnten noch eventuelle einsen am Anfang vorhanden sein.

Ich weiß nicht, ob dieser Code noch von Satoshi selber stammt oder über die Jahre schon von anderen Entwicklern umgebaut wurde. Nicht alles vom Code stammt von Satoshi selber. Ich betone das, weil ich die Fokussierung auf Satoshi als Heldenverehrung nicht gut finde. Ja Satoshi hat uns mit Bitcoin ein Geschenk gegeben aber Bitcoin ist nicht so groß herausgekommen weil Satoshi alles richtig gemacht hat sondern weil die Community um Bitcoin das Projekt hat wachsen lassen. Und dazu gehören eben auch Anpassungen am Quellcode wie z.B. die Blockgrößenbeschränkung, die zu Beginn noch nicht implementiert war.

Ich halte es daher für falsch zu glauben, dass Bitcoin sich immer genau so verhält wie Satoshi das geplant hat. Nein, Bitcoin ist ein freier Markt und verhält sich entsprechend so, wie die meisten Menschen glauben, dass es richtig ist, komplett unabhängig davon, was Satoshi will oder nicht.


Wenn es um dein Tatoo geht, solltest du dich fragen: Was ist Knappheit? Mathematisch ist die 3 auch knapp, es gibt sie nur ein einziges mal. Ja, jeder kann eine weitere Repräsentation der Zahl 3 beliebig weiter aufschreiben. Die Repräsentation der Zahl 3 ist nicht knapp, jeder kann beliebig dreien Malen wie er will.
Das gilt auch für alle anderen Zahlen wie 21 Millionen oder Formeln wie die Berechnung der Anzahl der Bitcoins. Wertvoll wird die Zahl also nur, wenn wir sie bewerten. Ohne das Regelwerk und die Bewertung der Menschen ist die Zahl von 21 Millionen Bitcoins wertlos.

Für mich bedeutet das: wenn du weißt, was damit gemeint ist und es für dich wertvoll genug ist um es Tätovieren zu lassen, dann macht es keinen Unterschied, ob du genau 21 Millionen oder 20999999,x Tätovierst. Ob du die gegebene Summenformel mit den Halvings zeigst oder ob du die Ganzzahligkeit irgendwie mit aufmalst musst du dann wissen. Einerseits sieht die Formel so (meiner Meinung nach) schöner aus ohne die Hinweise und wenn du erklären kannst, dass es nicht reell sondern ganzzahlig gemeint ist, dann sollte das doch auch OK sein. Andererseits solltest du das Thema eben auch wirklich verstanden haben und z.B. bei Nachfragen auf das Tatoo erklären können. Wenn du von dir sagst, dass du das für dich ausreichend durchdrungen hast, dann steht dem Tatoo doch meiner Meinung nach nichts im Wege.
Das ist wie die Formel E=m·C², wer die zeigt hat trotzdem nicht unbedingt verstanden, was mit der Relativitätstheorie dahinter steckt.