Ich habe immer angenommen, dass Staking-Rewards einfach auftauchen, sobald sie verdient sind. Das Incentive-Modul von Babylon funktioniert nicht auf diese Weise.
Bei jedem Block werden die Rewards in etwas namens RewardGauge eingetragen. Diese Gauge hat genau zwei Felder: coins, also alles, was jemals dort gelandet ist, und withdrawn_coins, also alles, was du bereits herausgezogen hast. Dein tatsächlich einforderbarer Kontostand ist nur eine Subtraktion zwischen diesen beiden.
In diesem Prozess wird zu keinem Zeitpunkt Geld in dein Wallet geschoben.
Die Doku ist hier sehr eindeutig: Rewards werden nicht aktiv versendet, wenn sie eingetragen werden; sie liegen im Pool, bis ein Withdrawal-Event passiert. Die Gauge sammelt sich im Hintergrund an, unabhängig davon, ob du sie beobachtest. Sie hat keine Meinung dazu, wann oder ob du sie abholst.
Am Anfang kam mir das erst einmal verkehrt vor. Die meisten Staking-Systeme, die ich mir angesehen habe, machen entweder Auto-Compound oder Auto-Distribute – die Belohnung wächst dann entweder deine Position oder landet in deinem Kontostand, ohne dass du etwas tun musst. Babylon macht beides nicht. Die einzige Möglichkeit, wie Coins die Gauge verlassen, ist eine ganz bestimmte Nachricht, MsgWithdrawReward. Diese überträgt den Kontostand an deine Withdraw-Adresse und aktualisiert erst dann withdrawn_coins, sodass es übereinstimmt.
„Rewards verdienen“ und „Rewards haben“ sind hier also zwei getrennte Zustände, und die einzige Verbindung zwischen ihnen ist eine Transaktion, die du selbst anstoßen musst. Die Chain führt eine perfekte Buchführung. Sie handelt einfach nie anhand dieser Zählung, solange du sie nicht darum bittest.
Wenn man das Withdraw komplett dem Nutzer überlässt, reduziert das unnötige On-Chain-Write-Operationen und das Gas, das dafür draufgeht, kleine Beträge weiterzuschieben, die noch niemand angefordert hat – oder erzeugt es nur einen stillen Haufen nicht abgeholten Werts, den die meisten Leute vergessen, sich auszahlen zu lassen?
@BabylonLabs_io #baby $BABY
Bei jedem Block werden die Rewards in etwas namens RewardGauge eingetragen. Diese Gauge hat genau zwei Felder: coins, also alles, was jemals dort gelandet ist, und withdrawn_coins, also alles, was du bereits herausgezogen hast. Dein tatsächlich einforderbarer Kontostand ist nur eine Subtraktion zwischen diesen beiden.
In diesem Prozess wird zu keinem Zeitpunkt Geld in dein Wallet geschoben.
Die Doku ist hier sehr eindeutig: Rewards werden nicht aktiv versendet, wenn sie eingetragen werden; sie liegen im Pool, bis ein Withdrawal-Event passiert. Die Gauge sammelt sich im Hintergrund an, unabhängig davon, ob du sie beobachtest. Sie hat keine Meinung dazu, wann oder ob du sie abholst.
Am Anfang kam mir das erst einmal verkehrt vor. Die meisten Staking-Systeme, die ich mir angesehen habe, machen entweder Auto-Compound oder Auto-Distribute – die Belohnung wächst dann entweder deine Position oder landet in deinem Kontostand, ohne dass du etwas tun musst. Babylon macht beides nicht. Die einzige Möglichkeit, wie Coins die Gauge verlassen, ist eine ganz bestimmte Nachricht, MsgWithdrawReward. Diese überträgt den Kontostand an deine Withdraw-Adresse und aktualisiert erst dann withdrawn_coins, sodass es übereinstimmt.
„Rewards verdienen“ und „Rewards haben“ sind hier also zwei getrennte Zustände, und die einzige Verbindung zwischen ihnen ist eine Transaktion, die du selbst anstoßen musst. Die Chain führt eine perfekte Buchführung. Sie handelt einfach nie anhand dieser Zählung, solange du sie nicht darum bittest.
Wenn man das Withdraw komplett dem Nutzer überlässt, reduziert das unnötige On-Chain-Write-Operationen und das Gas, das dafür draufgeht, kleine Beträge weiterzuschieben, die noch niemand angefordert hat – oder erzeugt es nur einen stillen Haufen nicht abgeholten Werts, den die meisten Leute vergessen, sich auszahlen zu lassen?
@BabylonLabs_io #baby $BABY
