Artikel · Staking
Was Aussteigenden einbehalten wird, geht nicht auf einen Schlag an die Verbleibenden, sondern wird gleichmäßig ausgeschüttet — und diese Ausschüttung hat ein Fenster. Es wirkt, als müssten mehrere Ausstiege hintereinander ihre Fenster aneinanderreihen. Im Vertrag ist es anders gelöst, und dieser Unterschied erklärt, warum die Rendite des Pools in Sägezähnen verläuft.
5. Oktober 2026 · bei Veröffentlichung geprüft
Das Fenster wird von jedem Ausstieg einzeln gezählt und überschreitet nie sieben Tage. Drei große Ausstiege hintereinander ergeben keine einundzwanzig Tage: Jeder setzt das Fenster zurück und zählt sieben neu von sich aus. Die Fenster reihen sich nicht aneinander, sie überlappen sich.
Die orangen Marken sind die Momente der Ausstiege, die blauen Rechtecke die Verteilfenster, und die Zahl in jedem davon ist seine Länge in Tagen. Drei Ausstiege in den ersten zwei Tagen schließen die Verteilung am neunten Tag ab, nicht am einundzwanzigsten. Später kann das Ende auch grundsätzlich nicht liegen: Jedes Fenster läuft genau sieben Tage ab seinem eigenen Ausstieg.
Der Staking-Pool hat nur eine Einnahmequelle — die Gebühr, die Aussteigenden einbehalten wird. Holt sich ein Staker seine Position zurück, behält der Vertrag 10% von ihr insgesamt im Pool, samt dem Angesammelten. Nachprüfen lässt sich das direkt im Quelltext: Der Zähler undistributedFees wächst an genau einer Stelle, innerhalb der Ausstiegsfunktion.
Das Einbehaltene wird aber nicht sofort verteilt. Es landet im „Topf“ der unverteilten Gebühren und fließt von dort gleichmäßig ab, mit einer konstanten Geschwindigkeit rewardRate, gemessen in RNBW pro Sekunde. Während es abfließt, steigt der Anteilspreis — der Zuwachs erreicht also alle im Pool, im Verhältnis zur Größe ihrer Position. Neue Anteile bekommt dabei niemand: Jeder vorhandene wird schlicht mehr wert.
Deshalb hängt die Rendite des Stakings nicht davon ab, wie viele eingestiegen sind, sondern wie viele ausgestiegen. Zuflüsse drücken sie: Derselbe Münzstrom verteilt sich auf einen größeren Pool. Abflüsse heben sie, und zwar doppelt — der Pool schrumpft, und ein Zehntel des Ausgestiegenen kommt hinzu.
Eine neue Gebühr wird nicht einfach zur alten addiert. Der Vertrag rechnet neu aus, wie schnell nun alles abfließt, und wählt einen von drei Zweigen. Die Wahl hängt an einem einzigen Vergleich: ob die neue Geschwindigkeit höher ist als die aktuelle oder nicht.
Keine Verteilung läuft — das vorige Fenster ist bereits abgelaufen
Die Geschwindigkeit ist der Topf geteilt durch sieben Tage. Alles beginnt bei null.
Fenster — genau 7 Tage
Topf ÷ 7 Tage ist nicht kleiner als die aktuelle Geschwindigkeit — großer Ausstieg
Die Geschwindigkeit steigt, und das Fenster wird zurückgesetzt und ab dieser Sekunde neu gezählt.
Fenster — genau 7 Tage
Topf ÷ 7 Tage ist kleiner als die aktuelle Geschwindigkeit — kleiner Ausstieg
Die Geschwindigkeit ändert sich nicht, der Tropfen bleibt derselbe. Er muss nur länger tropfen: der Rest des Fensters plus der Zuwachs geteilt durch die Geschwindigkeit.
Fenster — weniger als 7 Tage
Deshalb hält die Obergrenze ausnahmslos. In zwei Zweigen ist das Fenster per Definition sieben Tage. Im dritten ist es kürzer als sieben — sonst wäre die Geschwindigkeit gestiegen und der zweite Zweig hätte gegriffen. Eine vierte Möglichkeit gibt es im Code nicht.
Der Schutz gegen ein Absenken der Geschwindigkeit ist Absicht und im Vertrag mit den Worten rewardRate can only stay flat or increase kommentiert. Ohne ihn könnte jeder in Centbeträgen aussteigen und mit jedem Ausstieg allen anderen die Rendite drücken.
Drei Fälle im selben Maßstab. Orange zeigt, wie viel RNBW im Topf liegt: Bei einem Ausstieg wird er sprunghaft aufgefüllt und fließt gleichmäßig nach unten ab. Die Steigung der Linie ist die Verteilgeschwindigkeit — je steiler, desto schneller erreichen die Gebühren die Staker.
A — ein Ausstieg, während keine Verteilung läuft. 100.000 RNBW einbehalten bei leerem Topf, also sind 14.286 am Tag zu verteilen. Am siebten Tag bleibt nichts übrig.
C — ein großer Ausstieg mitten in der Verteilung. Am dritten Tag werden weitere 100.000 einbehalten. Die Steigung wurde steiler, die Geschwindigkeit stieg auf 22.449 am Tag, das Fenster wurde zurückgesetzt — und das Ende rutschte auf den zehnten Tag.
D — drei große Ausstiege hintereinander. Das Ende fällt auf den neunten Tag, nicht auf den einundzwanzigsten. Gewachsen ist dafür die Geschwindigkeit: von 14.286 auf 37.026 RNBW am Tag, eine 2,6-mal schnellere Verteilung.
In Fall C steckt die optische Täuschung. Die Verteilung endet tatsächlich später als die ursprünglichen sieben Tage — am zehnten. Aber das ist kein „Fenster von zehn Tagen“: Vom Ausstieg am dritten Tag bis zum Ende sind es genau sieben. Das Fenster hat sich nicht gedehnt, es wurde versetzt.
Der dritte Zweig wirkt unscheinbar, greift aber fast immer: Über die gesamte Historie lassen sich die Ausstiege, die groß genug waren, um die Geschwindigkeit zu heben, an einer Hand abzählen. Sehen wir ihn uns aus der Nähe an — im Gesamtbild spielt sich alles Entscheidende in einem Maßstab ab, den man dort nicht sieht.
Ausschnitt ① ist vertikal 28-fach vergrößert, Ausschnitt ② zeitlich 15-fach. Die gestrichelte Linie zeigt in beiden, wie es ohne die Zuzahlung gelaufen wäre.
Das Wesentliche sieht man in Ausschnitt ①: Die Linie vor der Stufe und die danach verlaufen parallel. Die Geschwindigkeit hat sich nicht geändert, der Tropfen blieb derselbe — gestiegen ist nur der Pegel im Topf. Deshalb verlängert sich die Frist genau um die Zeit, die der Tropfen braucht, um den Zuwachs hinauszutragen: 1.000 ÷ 14.286 am Tag = 1 Stunde 41 Minuten. Zu sehen in Ausschnitt ②.
Das Ende der Verteilung rutschte von 7,00 auf 7,07 Tage, und vom Ausstieg selbst bis zum Ende bleiben 4,07 — fast drei Tage unter der Obergrenze. Dieser Puffer von drei Tagen ist aber eine Eigenschaft dieses Beispiels, nicht des Zweigs: Er kam daher, dass der Ausstieg in die Mitte des Fensters fiel und winzig war.
Dann streckt derselbe dritte Zweig die Verteilung um fast sieben Tage. Sein Puffer hängt nicht nur von der Größe des Zuwachses ab, sondern davon, wie viel Fenster noch übrig war: Die Verlängerung ist der Rest des Fensters plus der Zuwachs geteilt durch die Geschwindigkeit.
Die senkrechte Achse ist die Länge des Fensters ab dem Ausstieg, in Tagen. Jede orange Linie steht für eine Größe der einbehaltenen Gebühr. Punkt B ist der Fall aus dem vorigen Abschnitt: ein Ausstieg am dritten Tag mit einem Zuwachs von 1.000. Der Punkt rechts oben ist ein Ausstieg am Tag 6,9 mit einem Zuwachs von 95.000.
Die Linien verlaufen parallel und stoßen alle an die blaue Obergrenze. Je später der Ausstieg, desto weniger bleibt abzufließen — aber desto schwerer wiegt der Zuwachs gegenüber diesem Rest. Ein großer Zuwachs am Fensterende kommt den sieben Tagen fast bis auf den Rand nahe: Bei einem Ausstieg am Tag 6,9 mit 95.000 einbehalten ergeben 0,10 plus 6,65 noch 6,75 Tage, und das ist immer noch der Zweig „die Frist wird verlängert“.
| Einbehalten | Im Topf | Fenster, T | Ende, T | Zweig |
|---|---|---|---|---|
| 1.000 | 2.429 | 0,17 | 7,07 | Frist verlängert |
| 25.000 | 26.429 | 1,85 | 8,75 | Frist verlängert |
| 50.000 | 51.429 | 3,60 | 10,50 | Frist verlängert |
| 95.000 | 96.429 | 6,75 | 13,65 | Frist verlängert |
| 98.571 | 100.000 | 7,00 | 13,90 | Frist verlängert |
| 100.000 | 101.429 | 7,00 | 13,90 | Geschwindigkeit stieg |
Sehen Sie sich die letzten beiden Zeilen an — das ist die Grenze zwischen den Zweigen. Eine Gebühr von 98.571 RNBW fällt noch unter „Frist verlängert“, 100.000 hebt bereits die Geschwindigkeit. Und beide ergeben dasselbe: genau sieben Tage. Zwischen ihnen gibt es keinen Sprung, die Grenze ist glatt — der Zweig „die Frist wird verlängert“ nähert sich den sieben Tagen von unten, der Zweig „die Geschwindigkeit stieg“ steht auf ihnen. Deshalb hält die Obergrenze ausnahmslos.
Die Kalenderdauer der Verteilung ist dagegen durch nichts begrenzt. In der Spalte „Ende“ steht bei einer Gebühr von 95.000 ein Wert von 13,90 Tagen — fast zwei Wochen. Die Obergrenze von sieben Tagen begrenzt das Fenster jedes einzelnen Ausstiegs, nicht die Gesamtdauer. Ausstiege, die nahe ans Fensterende fallen, können es beliebig weiterschieben, und bei einem lebendigen Strom von Ausstiegen endet die Verteilung schlicht nie — genau das passiert in der Praxis: Der Topf läuft nicht leer.
Alles hier Beschriebene folgt unmittelbar aus der Funktion _addFees im Staking-Vertrag 0x288ea8Bcb51d53aD361D786EFa904C401904aF70. Der Quelltext ist veröffentlicht und verifiziert, lesen lässt er sich im Explorer.
Der Vertrag setzt dripEndTime = block.timestamp + dripDuration, wobei dripDuration 604800 Sekunden beträgt, also genau sieben Tage ab der aktuellen Sekunde. Das vorige Fenster hört damit einfach auf zu existieren.
Hier lautet es dripEndTime = block.timestamp + undistributedFees / rewardRate. Die Eintrittsbedingung dieses Zweigs garantiert selbst, dass der Quotient kleiner ist als dripDuration — sonst hätte der vorige Zweig gegriffen.
Topfstand und Geschwindigkeit werden mit den Aufrufen undistributedFees() und rewardRate() aus dem Vertrag gelesen. Beide stehen zusammen mit der Historie aller Ausstiege und dem Vermerk, welcher Zweig jeweils gegriffen hat, auf der Seite Staking.
Die Zahlen in den Beispielen dieses Artikels entstanden, indem _syncPool und _addFees Schritt für Schritt vom Nullzustand aus nachgespielt wurden, statt sie von der Website zu übernehmen — damit sie sich nicht auf das Ergebnis hin zurechtbiegen ließen.