Guide: Smart Contracts mit Bitcoin-S und Krystal Bull

Letzte Woche hat SuredBits “Bitcoin-S” veröffentlicht. Ein Wallet, das euch Discreet-Log-Contracts erstellen, austauschen und ausführen lässt. Um zu erfahren, was DLCs sind, empfehlen wir unseren Artikel zum Thema.

Das Ganze ist derzeit noch relativ aufwändig, dürfte mit der Zeit jedoch deutlich einfacher werden. Wer es sich nicht nehmen lassen möchte, die technischen Möglichkeiten von Bitcoin auszureizen, kriegt hier einen Einblick in die Zukunft von Smart Contracts auf Bitcoin.

In diesem Guide zeigen wir, wie ihr ein Oracle aufsetzt und mithilfe eines DLCs eine Wette auf den Ausgang eines Oracles eingeht.

Oracle Event erstellen

Zunächst schauen wir uns an, wie man als Oracle ein Event aufsetzt. Dafür benutzen wir Krystal Bull von Ben Carman. Ladet das Programm hier herunter und führt es aus.

Beim ersten Start müsst ihr ein neues Wallet anlegen und euch einloggen.

Die Oberfläche ist relativ simpel gehalten. In der Übersicht sehen wir den Namen unseres Oracles, dessen Public Key, unsere Staking-Adresse und dessen Balance.

In der Tabelle darunter befinden sich unsere Events. Um ein neues Announcement zu erstellen haben wir die Wahl zwischen “Create Enum Event” und “Create Numeric Event“.

Bei einem Enum Event handelt es sich um einen Ausgang, bei dem eine der Antworten definitiv richtig sein muss. Damit sind z.B. Ja/Nein-Fragen gemeint.

Ein Numeric Event ist einen numerischen Ausgang. Das wäre zum Beispiel “Was wird der Preis von Bitcoin am 21.09.21 sein?”.

Für unser Beispiel erstellen wir ein Enum-Event mit Eventnamen: “Wird der Bitcoin-Preis am Mittwoch über $30 000 sein?”

Als Datum wählen wir das jeweilige Datum, im Beispiel ist das der nächste Mittwoch.

Die möglichen Ausgänge des Oracles legen wir mit “Ja” und “Nein” fest.

Wir bestätigen die Einstellungen mit “OK“.

Nach der Bestätigung sehen wir das Event in der Übersicht.

Mit Rechtsklick -> View Event sehen wir die Details des Events. Unter anderem auch die Announcement Informationen.

Falls ihr das Event veröffentlichen wollt, könnt ihr es per Klick auf “Send to Oracle Explorer” an den Suredbits Oracle Explorer senden. Das ist aber rein optional.

Falls ihr das Event veröffentlicht, könnt ihr die Informationen dazu im Explorer finden. Dort findet man u.A. den Oracle-Namen, die Beschreibung, das Auslaufdatum, sowie das Announcement.

DLC erstellen

Um etwas mit den Informationen, die das Oracle uns zur Verfügung stellt anzufangen, benötigen wir ein DLC-kompatibles Wallet. Das Suredbits Bitcoin-S Wallet könnt ihr hier herunterladen.

Nachdem ihr dieses heruntergeladen und installiert habt, erstellt ihr euch zunächst ein Wallet.

Habt ihr das getan, müsst ihr ein wenig Bitcoin an euer Wallet senden. Eine neue Empfangsadresse erhaltet ihr über “Get New Address” auf der linken Seite.

Der grundsätzliche Ablauf eines DLCs

Um ein neues DLC Angebot zu erstellen, müsst ihr zunächst auf “Offer” klicken.

Im sich öffnenden Dialog tragen wir nun zunächst das Oracle Announcement ein, das wir entweder vom Oracle selbst, oder über den Oracle-Explorer erhalten haben. Dadurch wird die Event-ID (also der Event-Name) automatisch ausgefüllt.

Wir können über “Outcomes” festlegen, wie viele Satoshis wir bei den jeweiligen Outcomes gewinnen möchten. Über “Your Collateral” legen wir unseren Einsatz fest. Bei der Fee-Rate handelt es sich um die Fee-Rate der Ausführungs-Transaktion.

Damit eure Satoshis nicht auf ewig gelockt sind, falls das Oracle nicht reagieren sollte, könnt ihr ein Refund-Datum festlegen.

In diesem Beispiel erstellen wir eine Wette, bei der ich 200 000 sat darauf wette, dass der Bitcoin-Preis am Mittwoch über $30 000 liegt. Die Fee-Rate soll bei 1sat/vbyte liegen und die Wette spätestens am 27.7.21 ablaufen.

Habt ihr die Konditionen eures DLCs mit einem Klick auf “OK” bestätigt, wird euch im Bitcoin-S Wallet ein langer String angezeigt. Dabei handelt es sich um euer DLC-Angebot.

Dieses Angebot müsst ihr nun dem anderen Teilnehmer der Wette mitteilen.

Im Wallet muss die Gegenpartei auf “Accept” klicken..

..das DLC-Offer eingeben und die Konditionen der Wette bestätigen. Danach wird in der Bitcoin-S Wallet Übersicht erneut ein String, der “DLC-Accept” angezeigt. Diesen muss der Teilnehmer wieder an uns schicken.

Über den “Sign” Button öffnen wir den Signier-Dialog. Im “DLC-Accept“-Feld tragen wir den DLC-Accept ein und bestätigen mit OK.

Der Status des Events hat in der Übersicht inzwischen zu “Signed” gewechselt. Die von uns signierte Transaktion wird erneut als String angezeigt, den wir erneut an den anderen Teilnehmer senden.

Dieser veröffentlicht die Transaktion dann über das “Broadcast…” Feld.

Die veröffentlichte Transaktion

Die veröffentlichte Transaktion hat mindestens zwei Inputs (hier einen pro Teilnehmer) und 3 Outputs. 2 Change-Outputs und einen Output in Höhe der Wette.

Im Wallet selbst seht ihr, dass eure Total Balance um 200 000 sats gesunken ist.

Das Ergebnis veröffentlichen

Ist die Zeit gekommen, muss das Oracle das Ergebnis veröffentlichen.

In Krystal Bull öffnen wir das Event, wählen unter “Attestations” das Ergebnis (in unserem Fall “Ja“) und klicken auf “Sign“.

Uns wir eine “Attestation” angezeigt, die wir nun entweder an den Oracle Explorer senden können, oder den Teilnehmern auf einem anderen Weg mitteilen können.

Falls wir uns dazu entscheiden, ihn an den Oracle Explorer zu senden, wird die Attestation auch auf Explorer-Seite des Events angezeigt.

Den Wettgewinn auslösen

Unser Wallet weiß noch nichts von dieser Ankündigung. Da wir die Wette gewonnen haben, können wir uns nun unseren Gewinn sichern. Dafür benötigen wir die Attestation des Oracles und die Contract ID.

Wir kopieren mit Rechtsklick die Contract-ID unseres Events..

.. und die Attestation des Oracles.

Dann klicken wir in Bitcoin-S auf “Execute“, fügen beide Werte ein und bestätigen mit OK.

Weil wir gewonnen haben, werden jetzt beide Wetteinsätze an uns gesendet. Auf der linken Seite seht ihr eure unconfirmed Balance.

Unsere Gegenpartei hat 200 000 sats verloren und geht leer aus. Darüber informiert wird er über die Übersicht im Bitcoin-S Wallet.

Auf der Chain hat diese Transaktion nur einen Input und einen Output.

Anmerkungen

In diesem Beispiel war ich sowohl Oracle-Betreiber als auch Wett-Teilnehmer. Das ist natürlich nicht wirklich ein optimaler Anwendungsfall für DLCs, da ich einfach ein falsches Ergebnis hätte veröffentlichen können. Derzeit sollte das Oracle also eine dritte Person sein, die nichts von der Wette weiß und der beide Wettteilnehmer vertrauen.

In Zukunft wird es möglich sein, verschiedene Oracles in das DLC einzubeziehen und ein falsch-ankündigendes Oracle mithilfe eines Stakes zu bestrafen. Dazu erfahrt ihr mehr in unserem Artikel.

Insgesamt zeigt sich hier durch dieses rudimentäre Beispiel ein unfassbares Potential, bei dem die Ausgabekonditionen einer Transaktion durch Zutun einer unbekannten Partei, die nichts von den beiden Wettteilnehmern weiß (!) beeinflusst werden können.

Obwohl der Aufwand dieser DLCs derzeit noch enorm ist, könnte der Großteil dessen in Zukunft wohl automatisiert ablaufen und vor dem User verborgen werden.


Spende uns:

Wenn dir dieser oder einer unserer anderen Beiträge gefallen hat, würden wir uns über eine kleine Spende freuen:

Schreibe einen Kommentar