Wenn Sie ein Liquid-Staking-Produkt auf @Dusk bauen wollen, besteht das Erste, was Sie lernen: Der naheliegende Ansatz funktioniert nicht.
Ein Nutzer, der staked, ruft stake auf. Ein Vertrag kann nicht stake aufrufen. stake_from_contract lässt sich nicht direkt aufrufen — es validiert, dass es im Rahmen einer Mittelübertragung erreicht wurde. Das Muster ist also: Bringen Sie Gelder in Ihren Vertrag und führen Sie dann eine Vertrags-zu-Vertrags-Übertragung in den Staking-Vertrag durch, wobei Sie die gewünschte Funktion als Teil der Übertragung selbst angeben.
Geld und Anweisung gehen gemeinsam, oder es passiert nichts.
Das ist eine bewusste Designentscheidung, und ich bin mittlerweile froh darüber. Das beseitigt eine ganze Klasse von Bugs, bei denen ein Vertrag Staking-Wert behauptet, der nie tatsächlich bewegt wurde. Die Übertragung ist die Autorisierung.
Der zweite Teil ist das, was Builder unterschätzen. Ihr Vertrag muss Callbacks implementieren — einen, um nicht gestakte Mittel zu empfangen, und einen, um Rewards zu empfangen. Dusk schiebt Ihnen keinen Wert hin und hofft, dass es schon klappt. Es gibt ihn über eine Funktion zurück, die Sie schreiben mussten. Vergessen Sie eine, dann haben Sie einen Pool gebaut, der Einzahlungen annehmen kann, aber sie nicht zurückgeben kann.
Zwei Einschränkungen, die Sie kennen sollten, bevor Sie anfangen: Das 1,000 $DUSK minimum gilt für Verträge genauso wie für Personen, und stake wird nach einer Maturitätsdauer aktiv.
Kurzer Hinweis zur Ehrlichkeit: Bei Reife (maturity) geben die Doku-Seiten mir an zwei verschiedenen Stellen zwei unterschiedliche Formulierungen — eine Seite nennt 4.320 Blöcke, ungefähr 12 Stunden; eine andere beschreibt die Aktivierung an einer Epoch-Grenze. Beide können dieselbe Sache aus verschiedenen Blickwinkeln beschreiben. Wenn Sie darum herum bauen, bestätigen Sie es auf dem Testnet, statt einer der Seiten einfach zu vertrauen.
Aktuell listet die Ecosystem-Seite genau einen Staking-Pool, der auf diese Weise gebaut wurde.
Builder — macht es Ihre Arbeit sicherer, wenn man Wert und Anweisung in einer einzigen atomaren Bewegung erzwingt, oder einfach nur langsamer?
#dusk
Ein Nutzer, der staked, ruft stake auf. Ein Vertrag kann nicht stake aufrufen. stake_from_contract lässt sich nicht direkt aufrufen — es validiert, dass es im Rahmen einer Mittelübertragung erreicht wurde. Das Muster ist also: Bringen Sie Gelder in Ihren Vertrag und führen Sie dann eine Vertrags-zu-Vertrags-Übertragung in den Staking-Vertrag durch, wobei Sie die gewünschte Funktion als Teil der Übertragung selbst angeben.
Geld und Anweisung gehen gemeinsam, oder es passiert nichts.
Das ist eine bewusste Designentscheidung, und ich bin mittlerweile froh darüber. Das beseitigt eine ganze Klasse von Bugs, bei denen ein Vertrag Staking-Wert behauptet, der nie tatsächlich bewegt wurde. Die Übertragung ist die Autorisierung.
Der zweite Teil ist das, was Builder unterschätzen. Ihr Vertrag muss Callbacks implementieren — einen, um nicht gestakte Mittel zu empfangen, und einen, um Rewards zu empfangen. Dusk schiebt Ihnen keinen Wert hin und hofft, dass es schon klappt. Es gibt ihn über eine Funktion zurück, die Sie schreiben mussten. Vergessen Sie eine, dann haben Sie einen Pool gebaut, der Einzahlungen annehmen kann, aber sie nicht zurückgeben kann.
Zwei Einschränkungen, die Sie kennen sollten, bevor Sie anfangen: Das 1,000 $DUSK minimum gilt für Verträge genauso wie für Personen, und stake wird nach einer Maturitätsdauer aktiv.
Kurzer Hinweis zur Ehrlichkeit: Bei Reife (maturity) geben die Doku-Seiten mir an zwei verschiedenen Stellen zwei unterschiedliche Formulierungen — eine Seite nennt 4.320 Blöcke, ungefähr 12 Stunden; eine andere beschreibt die Aktivierung an einer Epoch-Grenze. Beide können dieselbe Sache aus verschiedenen Blickwinkeln beschreiben. Wenn Sie darum herum bauen, bestätigen Sie es auf dem Testnet, statt einer der Seiten einfach zu vertrauen.
Aktuell listet die Ecosystem-Seite genau einen Staking-Pool, der auf diese Weise gebaut wurde.
Builder — macht es Ihre Arbeit sicherer, wenn man Wert und Anweisung in einer einzigen atomaren Bewegung erzwingt, oder einfach nur langsamer?
#dusk