Wie wir ein Kryptowährungs-Zahlungssystem erstellt haben: fünf Hauptprobleme

Hallo Habr! In Kontakt steht B2Broker, ein Anbieter von Liquiditäts- und Technologielösungen für die Makler- und Börsenbranche. Eines unserer Produkte ist die Handelsplattform B2BX.exchange. Als wir die Plattform im Sommer 2017 starteten, haben wir darüber nachgedacht, wie Kryptowährungen akzeptiert und welche Verarbeitung verwendet werden soll. Leider war zu diesem Zeitpunkt niemand bereit, zumindest irgendwelche Garantien für die Verwundbarkeit des Vertrags zu geben, und die Geschichte des Angriffs auf die DAO-Plattform war noch in der mündlichen Verhandlung. Wir wollten nicht in die Fußstapfen des DAO treten. Darüber hinaus hatten wir einige Erfahrungen mit der Annahme von Zahlungen über die Blockchain. Deshalb haben wir uns entschlossen, den gesamten Zyklus der Blockchain-Zahlungen unabhängig zu berechnen. In diesem Beitrag werden wir darüber sprechen, was wir getan haben und am interessantesten darüber, welche Probleme wir dabei lösen mussten.


Quelle: ripplecoinnews.com

Bei der Arbeit am Zahlungssystem haben wir festgestellt, dass wir einen Service nicht nur für unsere B2BX.exchange-Plattform, sondern auch für ein völlig unabhängiges Produkt erbringen können. Wir haben es B2BinPay genannt.

Woraus besteht B2BinPay?


Das Zahlungssystem ist in mehrere grundlegende Teile unterteilt. Alle von ihnen sind in PHP geschrieben.

Der erste Teil des Systems ist für die Interaktion mit Blockchains verantwortlich, dh für den Empfang, das Senden und die Verfolgung von Zahlungen.

Der zweite Teil ist die API. Er beschäftigt sich mit Verbrauchern von Dienstleistungen und Börsen: benachrichtigt den Eingang von Geldern, führt den Austausch von Kryptowährungen durch. Die API wird mit dem Laravel-Framework geschrieben.

Der dritte Teil ist das Erwerbsbüro für Verbraucher. Es spiegelt den Zustand des Gesamtsystems, der verbundenen Geldbörsen und ihrer Salden, aktiven Transaktionen und Konten wider. Vielleicht verbinden wir bald die klassische Fiat-Akquisition. Um ein Büro zu erstellen, haben wir Yii2 verwendet.

Ein separater Block ist ein System für die Arbeit mit ICO-Projekten. Sie können Token in allen Phasen des Verkaufs verteilen. Darüber hinaus besteht die Möglichkeit, einen Vertrag (ERC-20) und ein persönliches Konto zu entwickeln. Mit diesen Tools bieten wir einen schlüsselfertigen ICO-Service.



Aus Sicherheitsgründen werden alle Daten zu Brieftaschen in verschlüsselter Form in der Datenbank gespeichert. Selbst wenn ein Angreifer Zugriff darauf erhält, kann er kein Geld aus Brieftaschen abheben. Die Zwei-Faktor-Benutzerauthentifizierung ist verbunden. Schließlich kann der Händler eine Whitelist mit IP-Adressen erstellen, die mit der API zusammenarbeiten können.

Wir bieten Systemfehlertoleranz für eine große Anzahl von Servern, einschließlich Backup-Servern. Jeder Blockchain-Knoten befindet sich auf einem separaten Server mit eingeschränktem Zugriff von außen.

Auf welche Probleme sind wir gestoßen?


Blockchains sind unterschiedlich. Einige sind schlecht dokumentiert und haben keine aktive Community. Dies war hauptsächlich der Grund für unsere Hauptprobleme.

1. Die Ethereum-API kann keine Listen eingehender Kontotransaktionen zurückgeben

Bei der Erstellung eines Kontos generiert unser Zahlungssystem eine eindeutige Adresse, an die der Benutzer einen bestimmten Betrag in der ausgewählten Währung überweisen muss. Mit einer bestimmten Häufigkeit erhalten wir eine Liste der eingehenden Transaktionen und überprüfen deren Brieftaschenadressen. Dann überprüfen wir die Adressen der Brieftaschen mit den Adressen der nicht bezahlten Rechnungen. Wie sich herausstellte, erlaubt die Übertragung nicht den Empfang von Informationen über eingehende Transaktionen.

Was zu tun ist? Wir haben uns entschieden, Transaktionen über einen Drittanbieter-Service zu erhalten - etherscan.io . Da er jedoch einige Probleme aufgedeckt hat, wechseln wir zu Explorer, einem Dienst, der von unseren Programmierern geschrieben wurde.

2. Einige Blockchains sind äußerst selten dokumentiert

Hier ist ein typischer Fall: Irgendwie haben wir einen Knoten für eine der wenig bekannten Kryptowährungen bereitgestellt und nach einigen Tagen keine Transaktionen mehr akzeptiert, ohne dass Fehler gemeldet wurden. Wir haben es neu gestartet, aber einige Tage später wiederholte sich die Situation.

Was zu tun ist? Als sie anfingen, es herauszufinden, stellten sie fest, dass das Problem in einem der Parameter in der Konfigurationsdatei liegt. In der Dokumentation gab es kein Wort zu diesem Parameter, daher musste ich alles durch Ausprobieren konfigurieren.



3. Die Bereitstellung einer privaten Blockchain zum Testen der Funktionalität ist schwierig oder einfach unmöglich

Einmal mussten wir eine Blockchain für die NEO-Kryptowährung bereitstellen. Wir haben ein fertiges Docker-Image gefunden, alles gemäß den Anweisungen ausgeführt und einen Fehler erhalten. Eine schnelle Analyse der Skripte führte zu nichts, Google forderte auch nichts auf.

Was zu tun ist? Wir haben ein Problem mit github erstellt, etwa einen Monat lang darüber diskutiert und uns schließlich für die Bereitstellung von testnet entschieden. Aber nicht jede Kryptowährung hat ein Testnetz. Und wenn ja, müssen Sie meistens einen Antrag auf Testmünzen senden und eine Weile warten. Die Entwicklung einer privaten Blockchain auf offiziellen Websites wird in den meisten Fällen nicht einmal in Betracht gezogen, sodass Sie Lösungen von Drittanbietern verwenden müssen.

Fairerweise ist es erwähnenswert, dass Sie in den meisten Fällen Antworten auf Fragen erhalten können, die sich auf die Infrastruktur einer bestimmten Kryptowährung beziehen. Die nützlichste Ressource in diesem Sinne ist Github. Dann sollten Sie zu den offiziellen Foren und zu Reddit gehen.

4. Unangemessene Wiederverwendung von Code

Bitcoin hat schließlich viele Kopien mit einzelnen Blockchains und Blöcken - verwechseln Sie sie nicht mit Gabeln. In den meisten Fällen haben solche Kryptowährungen eine absolut identische Bitcoin-API. Um nicht denselben Code zu multiplizieren, verwenden wir für die Arbeit mit solchen Kopien dieselbe Klasse wie für die Arbeit mit der Währung von Satoshi Nakamoto.

Aber es kann nicht so einfach sein. Als wir Dogecoin integrieren mussten, folgten wir dem beschriebenen Szenario, konfigurierten und stellten testnet bereit. Infolgedessen fielen einige Tests und es gab Probleme beim Erstellen von Transaktionen.

Was zu tun ist? Zuerst haben wir den Test durch den Debugger ausgeführt. Es stellte sich heraus, dass Dogecoin in der Anforderung zum Erstellen einer Transaktion die Übertragung des Betrags in Form einer Zeichenfolge nicht zulässt, wie dies bei Bitcoin der Fall ist. Aus diesem Grund mussten wir die Methode in der untergeordneten Klasse neu definieren. Dies ist übrigens der einzige festgestellte Unterschied in den Dogecoin- und Bitcoin-APIs. Was seine Bedeutung ist, ist unverständlich.

5. Nicht alle Kryptowährungen ermöglichen die Generierung einer unbegrenzten Anzahl eindeutiger Adressen

Hier ist alles einfach: Ohne diese Generation können wir den Zahlungsausweis an der Adresse nicht verwenden.

Was zu tun ist? In solchen Situationen verwenden wir eine eindeutige Nachricht, die beim Senden der Zahlung an die Transaktion angehängt wird. Leider vergessen einige Kunden, diese Nachrichten anzugeben, und fragen sich dann, warum die Zahlung nicht automatisch gutgeschrieben wurde.

Wie in CMS integrieren?


Wir haben B2BinPay-Plugins für WordPress, Woocommerce, Magento, PrestaShop erstellt. Hier kam der Appetit mit dem Essen - ursprünglich hatten wir nicht vor, das System durch Plugins für CMS zu bewerben. Für jedes Plugin haben wir eine Überprüfung im System durchgeführt. Das Schlimmste ist für das Magento-Plugin passiert. Wir werden Ihnen mehr über diesen Test erzählen.

Die Überprüfung gliedert sich in zwei Teile - Technik und Marketing. Die technische Inspektion besteht aus vier Schritten:

  • Code-Schnüffler
  • Installation & Lacktest
  • Kopieren Einfügen Einfügen Detektor
  • Manuelle Qualitätssicherung

Die ersten drei Phasen sind vollständig automatisiert, daher ist es besser, einige Dinge in der Entwicklungsphase zu berücksichtigen. Um Ihr Leben während des Tests zu vereinfachen, müssen Sie zunächst die Regeln für Code Sniffer beachten.

Die Magento-Regeln für Code Sniffer entsprechen den Standards PSR-1 und PSR-2. Dies ist eines der wenigen CMS, dessen Entwickler moderne Entwicklungsansätze in PHP einhalten. Darüber hinaus haben die Mitarbeiter von Magento ein separates Regelwerk veröffentlicht, mit dessen Hilfe Fehler in den XML-Konfigurationen der Erweiterungsstruktur gefunden und die allgemein akzeptierten Prüfungen ergänzt werden können. Ein Skript zum Überprüfen des Inhalts des fertigen Pakets wird ebenfalls auf dessen Github-Konto veröffentlicht. Dieses Skript sollte auch verwendet werden, bevor Sie Ihre Entwicklung zur automatisierten Überprüfung senden.

Die grundlegende Magento-Installation enthält eine Bootstrap-Klasse für phpunit: Sie können damit Tests für Ihr Plugin schreiben. Ehrlich gesagt haben wir immer noch nicht herausgefunden, ob die Verfügbarkeit von Tests zum raschen Abschluss der technischen Überprüfung beiträgt.



Die ersten drei Stufen der technischen Inspektion erfolgen automatisch. Für die vierte Phase und für die Marketingüberprüfung müssen Sie geduldig sein: Beide Prozesse werden von Personen ausgeführt, und aus diesem Grund werden Warteschlangen gebildet.

Wir haben ungefähr 5 Tage auf die Ergebnisse der manuellen Qualitätssicherung gewartet, was im Grunde normal ist. Jeder unserer Anträge auf Marketing Review wurde jedoch seit mehr als einer Woche bearbeitet. Hier war es für die Tester wichtig, dass wir in den ersten Absätzen die Integration mit dem von uns angebotenen Service und dessen Preismodell aufschreiben und erst dann die Vorteile unseres Plugins angeben.

Zukunftspläne


Wir glauben, dass sich B2BinPay im Hinblick auf die Interaktion mit Benutzern als recht einfach erwiesen hat und daher sowohl für neue Unternehmen auf dem Kryptomarkt als auch für fortgeschrittene Unternehmen - beispielsweise im Bereich des Online-Verkaufs - von Vorteil ist, wenn ein stabiles und sicheres Produkt benötigt wird.

Zu Beginn des ersten Umlaufs von Münzen akzeptierten wir Bitcoin, Bitcoin CASH, Litecoin, DASH, Ethereum, Monero und andere. Jetzt bieten wir unter unserer estnischen Firma Dienstleistungen für Händler und Geldbörsen für Unternehmenskunden an, für die wir zwei Lizenzen erhalten haben - für den Austausch von Kryptowährungen und für Geldbörsen.

Beim Einbinden von Kunden erstellen wir für jeden Händler einen vollwertigen KYC. Danach kann der Händler Kryptowährungen akzeptieren, die automatisch in Dollar, Euro oder Pfund umgerechnet und auf das Bankkonto des Händlers überwiesen werden.

Gerne beantworten wir Ihre Fragen zur Erstellung von B2BinPay und zum Produkt selbst im Prinzip. Darüber hinaus suchen wir jetzt aktiv nach Gleichgesinnten, die über Python-Programmierkenntnisse verfügen und bereit sind, sich unserem Team anzuschließen. Jetzt in St. Petersburg haben wir offene Stellen für Teamleiter und Senior Developer eröffnet . Wir freuen uns auf Ihren Lebenslauf!

Source: https://habr.com/ru/post/de441338/


All Articles