Bitcoins auf der eigenen Webseite akzeptieren: Ein Erfahrungsbericht

Ohne Mittelsmann, Teil 2: Wie ich auf meiner Webseite mein Buch auf die einfachste mögliche Weise gegen Bitcoins und andere Kryptowährungen verkaufe – und wie oft mit welchen Währungen bezahlt wurde.

Nun kommt also der zweite Teil der Werkschau des Moby Verlags. Diesmal geht es um das Thema, um das es hier meistens geht: um Bitcoins.

Einer der Vorteile, ein Buch im Selbstverlag zu veröffentlichen, ist, dass man selbst bestimmen kann, unter welchen Bedingungen es verkauft wird. Während es schwierig bis unmöglich ist, die bekanntesten Bücher über Bitcoin (zum Beispiel “The Bitcoin Standard” oder “Mastering Bitcoin”) mit Bitcoins zu kaufen, da bei ihnen der Verlag die Regeln bestimmt, kann ich mein Buch “Bitcoin: Die verrückte Geschichte vom Auftstieg eines neuen Geldes” für jede Kryptowährung anbieten, auf die ich Lust habe.

Ein toller Nebeneffekt war dabei, dass ich mehr über die Technik gelernt habe. Ich werde in diesem Artikel beschreiben, wie ich Bitcoin und andere Kryptowährungen technisch eingebaut habe. Zunächst aber möchte ich nach knapp einem halben Jahr des Datensammelns meine Erkenntnisse darüber teilen, wie oft welche Währung benutzt wurde.

Wer wie oft womit?

Als ich im August begonnen habe, das Buch zu verkaufen, habe ich die folgenden Währungen akzeptiert: Bitcoin, Bitcoin Cash, Ethereum und Banküberweisungen. Im September habe ich  Zahlungen per Lightning und, zwei Wochen später, per PayPal hinzugefügt. Ende Oktober kam noch Monero dazu.

Hier ist die Verteilung der Zahlungen:

Banküberweisungen: 137
Bitcoin: 75
PayPal: 28
Bitcoin Cash: 25
Ethereum: 9
Lightning: 4
Monero: 3

Insgesamt hat sich mein  Zahlungssystem mit 281 Zahlungen bewährt. Als Diagramm sieht es so aus:

Was gibt’s dazu zu sagen? Erstmal war ich überrascht, wie viele Leute mit Euro bezahlt haben: Deutlich mehr als die Hälfte. Ich hätte erwartet, dass Bitcoin und andere Kryptowährungen einen höheren Anteil haben. Wenn ich mir den Preisverlauf seit August 2017 anschaue, bin ich allerdings ganz froh darüber: Im August hat ein Buch noch 0,0035 Bitcoin gekostet, heute sind es 0,0068. Noch heftiger sind die Abstürze, wenn man Bitcoin Cash oder Ethereum anschaut.

Bei den Kryptowährungen ist Bitcoin mit weitem Abstand vorne. Dass die Gebühren hier manchmal teurer sind, scheint keinen wirklich zu stören. Vergleichweise häufig wird auch Bitcoin Cash benutzt, während Ethereum eher selten zum Einsatz kommt. Auch Lightning ist eher eine Ausnahme, nach fünf Monaten gab es nur vier Zahlungen damit. Dasselbe trifft bei Monero zu: Es wird kaum genutzt. Da dieser Coin als letztes dazu kam, wäre es aber unfair, hier schon ein Fazit zu ziehen.

Was mich wirklich überrascht hat, war PayPal. Obwohl ich einen Euro Aufschlag verlange (wegen der Gebühren), wird PayPal sehr häufig benutzt, und ist nach vier Monaten schon auf dem dritten Platz. Es scheint den Leuten einen Euro wert zu sein, die gewohnte, bequeme und bewährte Zahlungsmethode zu nutzen. Das dürfte auch erklären, weshalb Bitcoin, trotz der mitunter hohen Gebühren, weiterhin am meisten verwendet wird. Die Kosten müssen sehr schmerzhaft sein, um die Gewohnheit auszustechen.

Nun dazu, wie die Implementierung technisch vonstatten ging.

Zwei grundlegende Eigenschaften von Bitcoin

Bitcoins auf eine Webseite zu bringen ist viel einfacher, als die meisten Leute denken. Die Architektur von Bitcoin spielt einem dabei zweifach in die Hände.

Erstens kann man bei Bitcoin die privaten Schlüssel von den Adressen trennen. Man kann die Adressen, an die die Kunden bezahlen, auf dem eigenen PC generieren, etwa mit der Wallet Electrum, und sie dann in einer Datenbank auf der Webseite abspeichern. Im Internet ist dann nur eine Art “Cold Wallet”. Die Coins selbst sind zu keinem Moment in Gefahr, durch einen Hacker gestohlen zu werden. Man bekommt auf einfache Weise einen hohen Grad an Sicherheit.

Zweitens ist Bitcoin transparent. Jeder Knoten im Netzwerk kennt die Transaktionen. Daher kann man einfach einen dieser Knoten nach ihr fragen. Viele Blockexplorer haben eine kostenlose, frei zugängliche API – das ist eine Programmierschnittstelle – die Transaktionen an eine Adresse anzeigen: Man ruft etwa mit PHP eine URL auf, in der die Adresse vorkommt, und erhält eine JSON-Datei, in der bestätigte und unbestätigte Transaktionen stehen. Man muss dazu nicht mal wirklich programmieren können.

Das System bauen

Mein Plan war also der: Ich bilde mit Electrum einige Adressen und speichere sie in MySQL ab. Wenn eine Bestellung eingeht, ruft PHP eine der Adressen auf, fragt eine API von einer Börse nach dem Kurs (es gibt Dutzende, man muss sich nicht anmelden) und zeigt die Adresse an. Man kann auch eine Payment-URI oder einen QR-Code anzeigen lassen. Danach fragt ein Skript die API eines beliebigen Blockexplorers, ob eine Zahlung über einen bestimmten Betrag da ist. Sobald die API “Ja” sagt, wird die Bestellung bestätigt und Emails an mich (“Yippie!”) und den Käufer versendet.

Dann habe ich begonnen, die Seite zu bauen. Ich bin kein Programmierer, habe mir aber in den letzten Jahren ein paar Bröckchen Webentwicklung mit HTML, CSS, Javascript und PHP angesammelt. So Dinge wie eine simple Webseite bauen, E-Mails versenden, Formulare füttern. Das allerkleinste Einmaleins.

Es hat vollkommen gereicht. Nach ein paar Stunden hatte ich das System, nach ein paar Tagen die Seite. Um sie zu testen, habe ich bestimmt 50 Bitcoin-Cash-Transaktionen versendet. Die Gebühren sind ja kaum vorhanden. Am Anfang gab es den einen oder anderen Bug, und nach der Bitcoin-Cash-Hardfork musste ich den Blockexplorer wechseln. Aber an sich lief das System relativ zügig relativ stabil. Ich glaube, die meisten Menschen wissen nicht, wie einfach Bitcoin in Wirklichkeit ist.

Hier ein Video, das zeigt, wie eine Zahlung abläuft:

Nachdem es mit Bitcoin so gut geklappt hat, habe ich auch Ethereum versucht. Den einzigen Blockexplorer mit API, den ich gefunden habe, war Etherscan.io. Dort muss man sich anmelden, um einen API-Schlüssel zu bekommen. Danach geht es aber ebenso einfach wie bei Bitcoin, den Kontostand einer Adresse abzufragen. Zu meiner Überraschung hat es keine Stunde gedauert, Ethereum hinzuzufügen.

Unbestätigte Transaktionen und Payment-URIs

Unbestätigte Transaktionen sind dabei kein Problem. Schließlich versende ich die Bücher nicht fünf Minuten nach der Bestellung, sondern einige Stunden oder einen Tag später. Meine Seite bestätigt daher die Zahlung und schließt den Kauf ab, sobald eine unbestätigte Transaktion gesehen wurde. Das dauert kaum eine Sekunde, viel schneller als PayPal, Kreditkarten oder EC-Karten (bei Bitcoin Cash geht es schneller als bei Bitcoin). Die E-Mail an mich enthält dann einen Link zur Transaktion im Blockexplorer, wo ich prüfe, ob die Transaktion bestätigt wurde, bevor ich das Buch einpacke.

Bei Ethereum kann ich leider keine unbestätigten Transaktionen akzeptieren. Das zeigt der Blockexplorer nicht an. Aber da bei Ethereum alle 15 Sekunden etwa ein Block gefunden wird, hält sich das Problem in Grenzen. Es ist nicht so schnell wie Bitcoin, aber erträglich.

Was Ethereum auch fehlt, ist eine Payment-URI. Bei Bitcoin ist das eine Art Mini-Code, den die Wallets verstehen, so wie eine URL-Adresse oder eine E-Mail-Adresse als Link: Sobald man im Browser draufklickt, öffnet sich – idealerweise – die Wallet, und die Transaktion ist mit Betrag und Bestellnummer bereits ausgefüllt. Oft klappt das mit dem automatischen Öffnen der Wallet nicht, aber man kann die Payment-URI auch einfach kopieren und in das “Sende an”-Feld der Wallet kopieren. Das macht den Zahlungsvorgang sehr viel einfacher. Für Smartphones zeige ich die URI als QR-Code, so dass man sie einfach einscannen kann.

Bei Ethereum gibt es diese Vereinfachungen noch nicht. Um zu bezahlen, muss man Adresse und Betrag kopieren. Daran merkt man auch, dass Ethereum als Zahlungsmittel noch längst nicht die Reife von Bitcoin hat.

Datenschutz und Privatsphäre

Sobald man mit Bitcoin-Zahlungen hantiert, sollte man das Thema Privacy im Hinterkopf behalten. Auf der einen Seite muss man die Zahlungen auf eine Weise verarbeiten, die verhindert, dass jemand einen ausspähen kann. Auf der anderen Seite kommt man nicht umhin, in den Besitz von Daten zu gelangen, die für den Bezahlenden womöglich sensibel sind.

Die klassische Lösung für das erste Problem ist, für jede Zahlung neue Adressen zu verwenden. So verrät die Adresse, die bei der einen Bestellung angezeigt wird, nichts über andere Bestellungen. Man könnte dies durch einen xpub-Key, eine Art Master-Public-Key, bewerkstelligen. Aber das ist mir programmiertechnisch eine Nummer zu groß. Alternativ könnte man einen Full Node benutzen, der Zahlungsanforderungen mit neuen Adressen schreibt. Aber auch das ist recht aufwändig und bringt auch wieder neue Risiken ins Spiel.

Meine Lösung dafür war es, eine bestimmte Anzahl an Schlüsseln in der Datenbank zu speichern, zufällig einen auszuwählen und die Schlüssel regelmäßig auszutauschen. Der Wartungsaufwand hält sich – zumindest bei meinem Umsatz – in Grenzen. Es ist nicht perfekt, aber ich denke, es reicht.

Heikler als meine eigene Privatsphäre finde ich die der Käufer. Damit ich die Bestellung abwickeln kann, brauche ich zwei Arten von Daten: Die Anschrift – und die Bitcoin-Transaktion. Die Bitcoin-Transaktion führt zur Bitcoin-Adresse des Senders, was bedeutet: Die Daten bilden einen Link zwischen echter Person und Bitcoin-Pseudonym. Das ist das, was man bei Bitcoin unbedingt vermeiden sollte. Um hier den möglichen Schaden, der durch Hacks entstehen könnte, zu verkleinern, lösche ich sämtliche privaten und Transaktionsdaten, sobald eine Bestellung abgeschlossen ist und ich nach einer gewissen keine Beschwerde gehört habe.

Lightning und Monero

Weil ich mehr über Lightning wissen wollte, habe ich mir vorgenommen, auch Lightning-Zahlungen anzunehmen. Das war relativ aufwändig, ich habe etwa eine Woche daran gearbeitet. Wie es genau ging, habe ich hier schon beschrieben.

Die Kurzform: Ich musste einen Lightning-Node auf einem Virtuellen Privaten Server (VPS) installieren und dann mit diesem kommunizieren. Gleichzeitig muss ich sicherstellen, dass in den Channels ausreichend eingehende Liquidität ist. Es funktioniert, hat aber einige Nachteile: Der VPS kostet im Monat etwa zehn Euro, die privaten Schlüssel liegen auf einer Hot-Wallet, ohne Passwortschutz und Backup, und ich bin sehr viel stärker von meinem VPS-Anbieter abhängig als von den Blockexplorern. Dennoch freue ich mich riesig, wenn mich jemand mit Lightning bezahlt.

Auch Monero habe ich eher aus Neugier implementiert. Auch hier musste ich einen Monero-Node auf einen VPS bringen und mit diesem kommunizieren, und auch hier liegen die Schlüssel als Hotwallet auf einem Server. Immerhin sind sie durch ein Passwort geschützt, anstatt entschlüsselt wie bei Lightning, und es gibt ein Backup dafür. Bei Monero gäbe es die Möglichkeit, eine “Watch-Only”-Wallet zu benutzen, also eine ohne private Schlüssel, aber das erschien mir angesichts der kleinen Beträge bei mir nicht nötig.

Lightning und Monero haben eines gemeinsam: Sie sind nicht transparent. Es gibt bei beiden Methoden keinen Blockexplorer, den man nach einer Zahlung fragen kann. Das ist gut für die Privatsphäre, macht es aber schwieriger, es zu benutzen. Denn wenn man keinen Blockexplorer fragen kann, muss man es selbst rausfinden, was bedeutet, dass man einen eigenen Node braucht, auf dem die Wallet ist – was aufwändiger und teurer ist und für einen unbedarften User wie mich auch weitere Risiken einführt.

Und nun? Lampen!

Natürlich könnte man an einer solchen Seite ewig weiterbauen. Ich könnte weitere Währungen einführen, die Methode, Zahlungen zu prozessieren, optimieren, versuchen, es mit einem Bitcoin-Full-Node zu verarbeiten, oder einen Electrum-Server aufbauen. Aber insgesamt funktioniert die Seite so, wie sie ist, gut genug für meine Zwecke, und es hat mir Spaß gemacht, sie aufzubauen.

Daher habe ich stattdessen ein weiteres Produkt aufgenommen: Kryptolampen. Sie werden von Simon hergestellt. Ich habe nur die Bilder auf die Seite geladen und Simon um einige Bitcoin- und Bitcoin-Cash-Adressengebeten. Wer eine der Lampen bestellt, bezahlt ihn direkt. So habe ich auch nichts damit zu tun, für irgendjemand Geld zu verwahren.

Das wollte ich am Ende noch mitteilen 🙂

vid_20190125_154133