Wir verarbeiten Bitcoin. Wie ist die B2BinPay-Zahlungsseite aufgebaut?

B2BinPay ist ein Kryptowährungs-Zahlungssystem mit vielen verwandten Backends für Anwendungen, Analysen, Knoten, Warteschlangen, aber nur einer UI-Seite, die der Endbenutzer sieht. Es stellt hohe Anforderungen an die Benutzerfreundlichkeit. Trotz der offensichtlichen Einfachheit der Seite wäre das Entwicklungsteam daran interessiert, zu teilen, wie sie von innen angeordnet ist.

Um Geschäftsprozesse zu verstehen, müssen Sie in den Themenbereich eintauchen. Für Leser, die noch nicht wissen, was Kryptowährung, Blockchain und Adresse sind, haben wir kurze und verständliche Definitionen unter dem Schnitt gemacht.



Um die Begriffe zu verstehen, sind hier einige Analogien zur Fiat-Zahlungswelt:
Blockchain ist eine dezentrale Datenbank (im Idealfall), in der Informationen zu Adressen, Transaktionen und Salden gespeichert werden. Es besteht aus Blöcken, von denen jeder eine begrenzte Menge an Informationen enthält. Blöcke werden dank Bergleuten durch energieintensive Berechnungen (PoW) oder Proof of Stake (PoS) erzeugt. Jeder nächste Block enthält eine Liste neuer Transaktionen und einen Link zur vorherigen. Jede Kryptowährung hat eine eigene Blockchain.

Händler - wie der Eigentümer des Geschäfts, der ein Zahlungssystem für den Empfang von Zahlungen von Endbenutzern mietet.

Eine Brieftasche ist dasselbe wie ein Konto in der traditionellen Finanzwelt.

Transaktion - Ein Datensatz in der Blockchain, über den Gelder von einer Brieftasche zur anderen gesendet wurden. Der Brieftaschenbestand wird aus der Anzahl der Transaktionen gebildet.

Die Adresse entspricht den Kontodaten. Der Unterschied besteht darin, dass Sie mit den meisten Blockchains eine unendliche Anzahl von Adressen für eine Brieftasche generieren können.

Eine bestätigte Transaktion ist eine Transaktion, nach der eine sichere Anzahl von Blöcken generiert wurde. Ein Block entspricht einer Bestätigung. Wenn die Transaktion keine 4-8 Bestätigungen erhalten hat, gilt sie nicht als abgeschlossen.

Zahlungssystem - Software, die die Annahme und Verarbeitung von Zahlungen in Kryptowährung ermöglicht. Verknüpft und aggregiert Bestellungen, Zahlungen, Transaktionen, Retouren, Nachschub, Abhebungen und andere Informationen. Es informiert das Händlersystem auch über Änderungen im Zusammenhang mit Bestellungen und Zahlungen und nicht über Blockchains und Transaktionen.

Explorer - ein Dienst oder eine Browser-Site für Daten, die in die Blockchain gelangen. Mit diesem Service können Sie bequem Informationen zu Adressen, Transaktionen und Blöcken abrufen.

Ein Knoten ist ein Computer, auf dem eine Kopie der gesamten Datenbank (Blockchain) gespeichert ist.

Allgemeines Arbeitsschema und Anforderungen an den Inhalt der Zahlungsseite


Der Zahlungszyklus läuft wie folgt ab: Auf der Website des Geschäfts wählt der Käufer das Produkt und die Zahlungswährung aus. Das System leitet den Benutzer zur Zahlungsseite weiter. Es enthält die folgenden Informationen: Währung, Adresse, Informationskommentare. Der Benutzer sendet den erforderlichen Betrag an die angegebene Adresse und erwartet eine ausreichende Anzahl von Netzwerkbestätigungen, um die Zahlung als erfolgreich zu erkennen. Während des Wartens kann der Käufer den Status der Zahlung überwachen, ohne die Seite auf der Explorer-Website zu verlassen. Sobald die Zahlung akzeptiert wurde, wird der Benutzer auf die Seite für erfolgreiche Zahlungen auf der Website des Verkäufers weitergeleitet.



Der Zahlungsvorgang ist in mehrere Phasen unterteilt. Jeder von ihnen erfordert keine Benutzeraktion, außer für die direkte Geldüberweisung. Standard erfolgreiches Skript:

  1. Auf der Website des Verkäufers wählt der Benutzer die B2BinPay-Zahlungsmethode und -Währung aus
  2. Die IP des Verkäufers sendet eine Anfrage zum Erstellen eines neuen Zahlungsauftrags und erhält als Antwort einen Link zur Zahlungsseite
  3. Der Benutzer leitet zur Zahlungsseite weiter, die Informationen enthält: Währung, Betrag, Adresse und ggf. zusätzliche Felder
  4. Benutzer zahlt für den Kauf
  5. Das System erkennt, dass eine neue Transaktion an der Adresse angekommen ist und die Seite in den Verfolgungsstatus wechselt
  6. Der Transaktionsstatus wird überwacht und die Informationen auf der Seite werden aktualisiert, bis eine sichere Anzahl von Bestätigungen erreicht ist.
  7. Der Benutzer wird auf die Seite für erfolgreiche Zahlungen auf der Website des Verkäufers weitergeleitet

Dementsprechend kann sich die Zahlungsseite in zwei Zuständen befinden: Anzeigen von Details und Warten auf Bestätigung. Wenn Sie die Details anzeigen, können Sie die Adresse auf zwei Arten eingeben: Scannen Sie den QR-Code oder kopieren Sie die Adresse in Textform. Zusätzlich zu den grundlegenden Informationen fügen wir eine Mini-Anleitung in Textform hinzu, in der Sie erfahren, wie Sie bezahlen, wo Sie die Brieftaschenanwendung herunterladen und wie Sie Geld kaufen. Zusätzlich zu diesen Feldern gibt es noch eines, dessen Vorhandensein von der gewählten Währung abhängt. Manchmal ist es erforderlich, nicht nur die Adresse, sondern auch zusätzliche Informationen zu kennen, um eine Transaktion, einen Zahlungsauftrag und einen Käufer korrekt zu korrelieren. Beispielsweise müssen Sie für die Ripple-Währung beim Senden das Ziel-Tag angeben (Kommentar zur Transaktion).

Für diejenigen, die die Adresse in Textform kopieren und den QR-Code nicht scannen, wurde eine Schaltfläche zum Kopieren hinzugefügt. Außerdem sollte das Logo der Münze auf der Seite vorhanden sein, da viele Personen die Währung visuell anhand der Form und des Farbschemas des Logos und nicht anhand der Buchstabenbezeichnung identifizieren.

Die Statusänderung erfolgt zu dem Zeitpunkt, an dem eine eingehende Transaktion an die Rechnungsadresse erkannt wird. In diesem Moment verschwinden die Details, da sie nicht mehr benötigt werden. Der Benutzer wechselt in den Standby-Modus, und die Seite benötigt einen ständigen Informationsfluss über den Status der Transaktion. Jetzt finden Sie auf der Seite: das Zeitlimit bis zum Abschluss der Transaktion, die aktuelle Anzahl der Bestätigungen, einen kurzen Kommentar, in dem weitere Aktionen erläutert werden.

Die Seite sollte leicht verständlich, intuitiv und gleichzeitig ausreichend informativ sein. Für erfahrene Käufer muss die Adresse und der Betrag im Vordergrund stehen.

Aus den obigen Anforderungen wurde ein Layout für die zukünftige Seite erhalten.



Backend


Die erste Möglichkeit , das Backend zu implementieren, besteht darin, darauf zu verzichten! Bei der Erstellung der Zahlungsseite ist im Voraus bekannt, an welche Adresse das Geld gesendet wird. Sie können neue Transaktionen unter dieser Adresse vom Explorer mithilfe von JS-Tools erhalten. Daher besteht die Aufgabe darin, Konnektoren in den Explorer zu schreiben und den erforderlichen regelmäßig abzufragen. Ein statisches Klassendiagramm könnte folgendermaßen aussehen:



Vorteile: Unsere Kapazitäten werden nicht belastet, sie sind einfach zu implementieren und es gibt keine potenziellen Sicherheitsbedrohungen.

Nachteile: unzuverlässige Quellen und vorzeitiger Empfang neuer Informationen, Schwierigkeiten bei der Bereitstellung von Codebasis-Updates für Endkunden (unkontrolliertes Caching). Entscheidendes Minus - viele Währungen haben keinen stabilen Explorer mit einer entwickelten API.

Die zweite Option (funktioniert) ist ein eigener Mikroservice, der Informationen direkt aus dem Pool von Knoten empfängt, filtert und auf Zahlungsseiten verteilt. Durch die Verwendung von serverseitigen Ereignissen auf dem Client wird die Redundanz verringert und Datenverkehr gespart. SSEs passen in den Anwendungsfall, da die Seite in ihrem Verhalten passiv ist - sie akzeptiert nur neue Informationen.

Nachteile: viele Implementierungskosten, zusätzliche Belastung der Ausrüstung.

Vorteile: hohes Maß an Zuverlässigkeit und Unabhängigkeit von Diensten Dritter; Der Kontext der Bestellung, nicht die Transaktion.
Schaltplan:



Wenn die Zahlungsseite im Browser des Kunden geöffnet wird, wird eine Anforderung zum Erstellen einer SSE-Verbindung an das asynchrone Backend des Microservice gesendet. Die Anfrage gibt die zu verfolgende Adresse, den Zahlungsbetrag, die Lebensdauer und andere kleinere Parameter an. Im Backend wird dies im speicherinternen noSQL-Speicher gespeichert. Jedes Mal, wenn ein neuer Block auf einem Blockchain-Knoten angezeigt wird, empfängt und extrahiert die Anwendung nützliche Informationen an den in der Datenbank gespeicherten Adressen und Transaktionen. Wenn der nächste Block nützlich ist, werden Aktualisierungen an Clients gesendet. Verbindungen werden auf Initiative des Servers geschlossen, wenn genügend Bestätigungen eingegangen sind oder TTL abgelaufen ist.

Daher führt das Backend ressourcenintensive Vorgänge aus und steuert den Datenverkehr nur, wenn neue Informationen am Knoten eintreffen, und es gibt keine periodische "Abfrage" nach neuen Informationen. Dank der Asynchronität erhalten wir eine hohe Geschwindigkeit mit Tausenden von gleichzeitigen Verbindungen.

In dem Wissen, dass bei Münzen mit PoW die Verzögerung beim Empfang neuer Informationen innerhalb einer Sekunde vernachlässigbar ist, führt die minimale horizontale Skalierung eines solchen Systems zu einer starken Erhöhung des Durchsatzes. An besonders aktiven Tagen wie dem Black Friday steigt die Belastung. Falls das System ausfällt oder technisch nicht funktioniert, hat der Client einen Fallback-Status, in dem die Seite für immer im Detailanzeigemodus bleibt. Bei PoS-Münzen kann der Schritt der Überwachung der Anzahl der Bestätigungen übersprungen werden, da die Transaktionsgeschwindigkeit häufig zwischen 2 und 5 Sekunden liegt.

Die dritte Option für die Implementierung des Backends ist Hybrid, wenn abhängig von der Geschwindigkeit der Blockchain-Transaktion und Informationen zur aktuellen Verfügbarkeit von Diensten von Drittanbietern entweder SSE- oder HTTP-Interaktion mit Explorern verwendet wird. Es ist gleichzeitig am effektivsten und zeitaufwändigsten.

Die für die Aufgabe geeignete Front-End-Technologie ist vue.js mit deklarativem Rendering und der Möglichkeit, mehrere Komponentenzustände zu erstellen. Es ist eine leichte Bibliothek mit einer schlanken Struktur und einer reaktiven DOM-Modifikation. Die Datenquelle ist die SSE-Verbindung, die beim Initialisieren der Komponente geöffnet wird.

Design




Wir entwickeln das Produkt und machen es qualitativ hochwertig und zuverlässig, um Blockchain-Zahlungen bequem, massiv und erschwinglich zu machen. Wir lieben nicht nur Geld, sondern auch modernste Technologien, komplexe Aufgaben und elegante Lösungen.

Bei der Entwicklung des B2BinPay- Zahlungssystems lösen wir regelmäßig Probleme, die trotz ihrer offensichtlichen Einfachheit einen nicht standardmäßigen Ansatz oder ein neues Erscheinungsbild erfordern. Für Feedback, Kommentare und Vorschläge sind wir dankbar. Wenn Sie dem weltweit genutzten Zahlungsdienst neue und mutige Ideen einbringen möchten, sehen Sie sich die aktuellen Stellenangebote an .

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


All Articles