Erstellen eines Kontensystems

Ich verwende das Bitcoin-Kontosystem für meine Web-App, aber es funktioniert nicht so, wie ich es möchte. Also möchte ich mein eigenes Kontosystem in Laravel (wahrscheinlich Opensource) erstellen.

Der Hauptgrund für das Kontosystem ist, dass ich die Gebühr nicht kennen kann, wenn ich eine Transaktion sende. Mit meinem eigenen Kontosystem kann ich überprüfen, ob die Gebühr korrekt ist, und dann die Transaktion senden.

Aber wie kann ich ein sicheres Kontosystem einrichten?

Ich habe über eine Tabelle mit allen Bitcoin-Konten nachgedacht (ich verwende die Benutzertabelle nicht, damit ich beispielsweise Konten für eine Bestellung erstellen kann).

Dann eine Adresstabelle mit allen Adressen, die mit einem Konto verknüpft sind.

Aber wie gehe ich mit eingehenden Transaktionen um? Und ausgehende Transaktionen? Wenn ich aus irgendeinem Grund etwas außerhalb meines Kontosystems ändere, wird es wahrscheinlich ziemlich einfach kaputt gehen.

Muss ich alle Transaktionen importieren, um die richtigen Kontostände zu berechnen?

Und ich möchte das System so gestalten, dass ich Transaktionen zwischen Konten durchführen kann, ohne eine "echte" Transaktion durchzuführen, so wie es jetzt funktioniert.

Ich denke, es ist nicht so schwer ohne die Konto-zu-Konto-Transaktionen und das Verschieben von Bitcoin-Adressen auf andere Kontofunktionen, importieren Sie einfach alle Transaktionen in die Datenbank und berechnen Sie den Saldo für jede Adresse. Und dann summiere den Adresssaldo für jedes Konto, aber ich brauche es.

Existiert diese Art von System bereits. Wenn nicht, kann mir jemand beim Nachdenken helfen.

Gibt es einen bestimmten Grund, warum Adressen bestimmten Konten zugeordnet werden müssen? Nach dem, was Sie schreiben, scheint es mir, dass Sie sowieso die volle Kontrolle über die Gelder auf jedem Konto haben, also wäre es viel einfacher, nur die Guthaben Ihrer Benutzer getrennt von den Adressen zu verfolgen.— Beachten Sie, dass das "Kontosystem" in Bitcoin Core ist seit Jahren veraltet und sollte nicht für die Buchhaltung verwendet werden. Es ist nicht verwunderlich, dass es nicht das tut, was Sie wollen. ;)
@Murch Ich möchte nur ein gutes Projekt machen, das sehr skalierbar ist. So können es auch andere nutzen. Wenn ich es für andere Projekte verwende, kann es sehr einfach implementiert werden. Wenn ich das Benutzerguthaben getrennt von den Adressen verfolge und einen Fehler mache (das passiert oft ;)), wäre es nicht gut.
Wenn Sie alle Gelder der Benutzer an separaten Adressen aufbewahren, haben Sie keinen Größenvorteil für Probleme wie Gebühren und Münzauswahl. Sie würden die UTXOs in winzige Stücke zermahlen, während Ihre Benutzer ihre Gelder verwalten, Sie könnten Zahlungen über Lightning-Kanäle nicht aggregieren, ohne On-Chain (oder Zahlungskanäle) zu aktualisieren … Es ist alles andere als skalierbar. – Ich bin mir auch nicht sicher dass es viel schwieriger ist, einen Fehler zu machen, wenn man die Salden getrennt hält.
@Murch glaube ich habe den Weg gefunden. Ich habe eine Tabelle mit allen Transaktionen. Diese haben eine Benutzer-ID. Die Benutzer-ID ist die ID des Eigentümers der Adresse zum Zeitpunkt des Empfangs. Wenn die Adresse also an ein anderes Konto geht, gehören die Transaktionen immer noch dem Benutzer, der sie erhalten hat. Auf diese Weise kann ich einfach alle Transaktionen eines Benutzers abrufen und den Kontostand berechnen.
Ja, das scheint viel besser zu sein. :) Stellen Sie nur sicher, dass Sie Transaktionen erst nach Bestätigung abrechnen, und vielleicht sogar nach ein paar Blöcken, oder Ihre Tabelle wird durch Blockchain-Reorganisationen oder veraltete Blöcke sehr verwirrt. ;)

Antworten (1)

Ich habe das Kontosystem funktioniert! Nur habe ich es nicht wirklich getestet, also ist es nicht stabil. https://github.com/jwz104/bitcoin-accounts

Es arbeitet mit einer Benutzer-, Adress- und Transaktionstabelle.

Es läuft ein Cronjob, der alle empfangenen Transaktionen registriert. Wenn die Adresse in der Adresstabelle gefunden wird, wird die Transaktion mit der Benutzer-ID der Adresse hinzugefügt. Wenn die Adresse keine user_id hat, wird die Transaktion nicht hinzugefügt, da es sich um eine Rücktransaktion (Änderung) handelt.

Wenn eine Transaktion erstellt wird, sendet das Paket die Menge an Bitcoins an die Adresse, und die verbleibenden Bitcoins werden an eine Rücksendeadresse (Adresse ohne Benutzer-ID) gesendet, sodass der Benutzer nicht zu viel bezahlen muss.