Abstecken in Solidität umsetzen

Mit ein paar Zeilen Soliditätscode können Sie einen Absteckmechanismus implementieren, einen der leistungsfähigsten Anreizsysteme in der Token-Wirtschaft.

Foto von rawpixel.com von Pexels
Jeder Fehler, den ich mache, ist eine Investition in meine Zukunft. - Rose Namajunas

Einführung in das Abstecken

Es wird behauptet, dass jemand an einer Unternehmung beteiligt ist, wenn er bestimmte Vermögenswerte einbringt, um ein gewisses Maß an Kontrolle, Einfluss oder Teilnahme an seinen Aktivitäten auszuüben.

In der Welt der Kryptowährung wird dies so verstanden, dass Benutzer ein Recht oder eine Belohnung erhalten, solange sie keine in ihrem Besitz befindlichen Token übertragen. Ein Absteckmechanismus ermutigt normalerweise dazu, den Wertmarkenhandel gegen den Wertmarkenhandel zu halten, was wiederum die Wertmarkenbewertung nach oben treiben soll.

Wir bei TechHQ glauben, dass Wissen geteilt werden muss, und in diesem Artikel werden wir zeigen, wie ein Absteckmechanismus solide implementiert wird. Das gesamte Projekt einschließlich Entwicklungsumgebung und Tests ist in unserem öffentlichen Github verfügbar.

Um diesen Absteckmechanismus aufzubauen, benötigen wir:

  • Ein Absteckmarker.
  • Datenstrukturen, um Einsätze, Stakeholder und Belohnungen zu verfolgen.
  • Methoden zum Erstellen und Entfernen von Einsätzen.
  • Ein Belohnungssystem.

Lass uns weitermachen

Absteckmarker

Ein Absteck-Token kann als ERC20-Token erstellt werden. Ich brauche später SafeMath und Ownable, also importieren und verwenden wir sie auch.

Um den Code lesbarer zu machen, folge ich den Funktionsnamen von ERC20 und erstelle Äquivalente, um die Daten aus der Stakes-Zuordnung zu erhalten.

Mit den implementierten Methoden können Sie lediglich einen Stakeholder hinzufügen, einen Stakeholder entfernen und überprüfen, ob eine Adresse zu einem Stakeholder gehört. Andere effizientere Implementierungen sind sicherlich möglich, aber aus Gründen der Lesbarkeit mag ich diese.

Einsätze

Ein Einsatz in seiner einfachsten Form muss die Größe des Einsatzes und den Einsatzhalter erfassen. Eine wirklich einfache Implementierung davon könnte nur eine Abbildung von der Adresse des Stakeholders auf die Größe des Einsatzes sein.

Um den Code lesbarer zu machen, folge ich den Funktionsnamen von ERC20 und erstelle Äquivalente, um die Daten aus der Stakes-Zuordnung zu erhalten.

Wir werden jetzt STK-Inhabern die Möglichkeit geben, Einsätze zu erstellen und zu entfernen. Die Marken werden beim Abstecken verbrannt, um die Benutzer daran zu hindern, sie zu übertragen, bis der Einsatz entfernt ist.

Bitte beachten Sie, dass _burn bei der Pfahlerstellung zurückgesetzt wird, wenn der Benutzer versucht, mehr Token abzusetzen, als er besitzt, und bei der Stake-Entfernung wird die Aktualisierung der Stakes-Zuordnung zurückgesetzt, wenn versucht wird, weitere abgesteckte Token zu entfernen.

Schließlich verwenden wir addStakeholder und removeStakeholder, um zu dokumentieren, wer Anteile hat, die später im Belohnungssystem verwendet werden.

Belohnt

Rewards-Mechanismen können viele verschiedene Implementierungen haben und sehr schwer zu laufen sein. Für diesen Vertrag werden wir eine sehr einfache Version implementieren, bei der die Stakeholder periodisch eine Belohnung in STK-Token erhalten, die 1% ihrer individuellen Einsätze entspricht.

Bei anspruchsvolleren Verträgen würde die Verteilung von Belohnungen automatisch ausgelöst, wenn bestimmte Bedingungen erfüllt sind. In diesem Fall lassen wir den Eigentümer die manuelle Auslösung veranlassen. Im Rahmen der Best Practice werden wir auch die Belohnungen verfolgen und eine Methode einführen, um sie zurückzuziehen.

Um den Code lesbar zu machen, haben wir wie bisher die Namenskonventionen aus dem ERC20.sol-Vertrag befolgt, zunächst die Datenstruktur und die Datenverwaltungsmethoden:

Folgen Sie den Methoden, um Belohnungen zu berechnen, zu verteilen und zurückzuziehen:

Testen

Kein Vertrag kann ohne umfassende Tests abgeschlossen werden. Ich neige dazu, mindestens einen Fehler pro Funktion zu erzeugen, und oft funktionieren die Dinge nicht so, wie ich glaube. Man könnte sagen, ich verstehe die meiste Zeit falsch, und ich bin sicher nicht alleine damit.

Abgesehen von der Möglichkeit, Code zu produzieren, der funktioniert, sind Tests auch sehr nützlich bei der Entwicklung eines Prozesses zum Erstellen und Verwenden von Verträgen. Ich schreibe meine Erste-Schritte-Dokumentation immer aus dem Code, der die Umgebung für die Tests einrichtet.

Nachfolgend ein Auszug, wie die Testumgebung eingerichtet und verwendet wird. Wir werden 1000 STK-Token prägen und einem Benutzer zum Spielen mit dem System geben. Wir verwenden Trüffel zum Testen, was uns die Konten zur Verwendung gibt.

Beim Erstellen von Tests schreibe ich immer die Tests, durch die der Code zurückgesetzt wird. Diese sind jedoch nicht sehr interessant. Der Test für createStake zeigt, was getan werden muss, um einen Einsatz zu erstellen, und was sich danach ändern sollte.

Es ist wichtig zu beachten, dass in diesem Absteckvertrag zwei parallele Datenstrukturen vorhanden sind, eine für STK-Salden und eine für Einsätze, und wie ihre Summe durch das Anlegen und Entfernen von Stakes konstant bleibt. In diesem Beispiel geben wir dem Benutzer 3 STK wei und die Summe des Guthabens plus der Einsätze für diesen Benutzer wird immer 3 sein.

Für Belohnungen zeigt der folgende Test, wie der Eigentümer die Verteilung der Gebühren beschleunigt, wobei der Benutzer eine Belohnung von 1% seines Einsatzes erhält.

Das Gesamtangebot für STK wird erhöht, wenn Belohnungen verteilt werden, und dieser Test zeigt, wie die drei Datenstrukturen (Salden, Einsätze und Belohnungen) miteinander in Beziehung stehen. Der Betrag der vorhandenen und zugesagten STK ist immer der Betrag, der bei der Erstellung geprägt wird, zuzüglich des Betrags, der in Belohnungen verteilt wird, die möglicherweise geprägt werden oder nicht. Die Menge des bei der Erstellung geprägten STK entspricht der Summe der Salden und Einsätze, bis eine Verteilung erfolgt ist.

Fazit

Ein Absteck- und Belohnungsmechanismus ist ein leistungsfähiges Anreizinstrument, das nur so komplex sein muss, wie wir es wollen. Die im ERC20-Standard und in SafeMath bereitgestellten Methoden ermöglichen die Codierung in ungefähr 200 Zeilen Sparse-Code.

Gerne können Sie den Code in unserem öffentlichen github für Ihre eigenen Zwecke verwenden oder sich mit uns in Verbindung setzen, wenn Sie unsere Hilfe bei der Implementierung einer Produktionsversion dieses Musters wünschen. Und wenn Ihnen dieser Artikel gefallen hat, drücken Sie bitte kurz auf den Klatschknopf.

Vielen Dank

Vielen Dank an Vlad Fărcaş für die Inspiration dieses Codes, an Sergio Pereira und Tiago Martins für ihre Rezensionen und vor allem an Bernardo Vieira, der mir beigebracht hat, wie man Blockchain-Anwendungen in der realen Welt macht.