Transaktionsgebühren und Transaktionen mit bitcoin-cli. Wallet-Adresssaldo negativ

Ich versuche, eine Bitcoin-Website zu erstellen, und ich habe versucht, eine Art „Abheben“-Schaltfläche zu implementieren, mit der Sie Ihr Geld in der Brieftaschenadresse an eine andere Adresse senden können. Das Problem, mit dem ich konfrontiert bin, ist, dass nach der Transaktion der Adresssaldo negativ wird.

Dies ist die Einrichtung:

  1. Im Hintergrund läuft Bitcoin, also habe ich eine Brieftasche auf dem Server. Es hat einen Standardkontonamen von ""(leere Zeichenfolge) mit einer Adresse.
  2. Ich generiere eine neue Adresse für jeden Benutzer in der Brieftasche. Nehmen wir an, jeder Benutzer erhält sein/ihr eigenes Konto mit dem Namen "user_1", "user_2", usw. Ich generiere Adressen, indem ich grundsätzlich bitcoin-cli getaccountaddress user_1.
  3. Benutzer können Geld an/von dieser Adresse einzahlen/abheben.
  4. Wenn ich zu viel Geld von dieser Adresse abhebe, wird der Adresssaldo negativ und ich nehme an, es werden auch Münzen vom Masterkonto, dh dem ""Konto, abgehoben.

Für die Übertragungen verwende ich den folgenden Befehl bitcoin-cli sendfrom user_1 <some_other_bitcoin_address> <amount> <min_confirmations> <comment> <comment_to>. Wenn ich wirklich mehr Geld auswähle, als in der Brieftasche verfügbar ist, wird ein Fehler angezeigt und mir mitgeteilt, dass ich nicht genug Guthaben habe. Aber in einem bestimmten Grenzfall geht es durch und macht den Adresssaldo negativ.

Ich denke, dass es zwei Ansätze für diese Lösung gibt:

Option 1 : Berechnen Sie die genaue Transaktionsgebühr und machen Sie basierend auf dieser Gebühr eine Prüfung.

Option 2 : Verwenden bitcoin-cli move "" "user_1" <amount_that_is_negative>Sie so, dass der Saldo anscheinend nicht negativ ist und der Eigentümer der Website beschlossen hat, die überschüssige Gebühr zu zahlen.

Im Grunde muss ich also das Problem mit dem negativen Adresssaldo lösen und könnte auch Folgendes klarstellen:

  • Wie mache ich #1? dh wie berechnet man die Größe der Transaktion (in Byte) + Transaktionsgebühr im Voraus?
  • Die Verwendung bitcoin-cli settxfee <amount>scheint wahr zu sein, aber die tatsächliche Transaktionsgebühr, die mir auferlegt wird, war viel höher. Warum war dies der Fall?
  • Ich muss mehr Details darüber wissen, wie der Move-Befehl funktioniert. Handelt es sich beim Umzug um eine tatsächliche Transaktion, für die Transaktionsgebühren anfallen?
  • Ist Option 2 eine gute Option, um mein Problem zu verbergen/zu lösen?
  • Was sind andere Optionen / korrekte Implementierung für die Implementierung einer Auszahlungsschaltfläche?
  • Kann sendfromGeld von anderen Konten als dem ""Konto abheben?

Vielen Dank!

Question ist ein Duplikat von bitcoin.stackexchange.com/questions/14260/… und wie vorgeschlagen ist "move" eine gute Möglichkeit, dies zu tun.

Antworten (1)

Wie mache ich #1? dh wie berechnet man die Größe der Transaktion (in Byte) + Transaktionsgebühr im Voraus?

Sie können den kürzlich eingeführten fundrawtransactionRPC verwenden:

  • Erstellen Sie zuerst eine Transaktion mit nur den gewünschten Ausgaben, aber ohne Eingaben, indem Sie verwenden createrawtransaction.
  • Rufen fundrawtransactionSie es dann an (das die Gebühr berechnet, und Eingaben hinzufügt und ändert).
  • Beachten Sie die Gebühr und führen Sie Kontostandsprüfungen für Ihren Benutzer durch.
  • Wenn dies akzeptabel ist, signieren Sie die Transaktion (mit signrawtransaction) und übertragen Sie sie (mit sendrawtransaction).

Die Verwendung von bitcoin-cli settxfee scheint wahr zu sein, aber die tatsächliche Transaktionsgebühr, die mir auferlegt wird, war viel höher. Warum war dies der Fall?

settxfeelegt die Gebühr pro 1000 Bytes fest, nicht die Summe. Wenn Ihre Transaktion größer als 1000 Byte ist, ist die Gebühr höher.

Ich muss mehr Details darüber wissen, wie der Move-Befehl funktioniert. Handelt es sich beim Umzug um eine tatsächliche Transaktion, für die Transaktionsgebühren anfallen?

Informieren Sie sich, wie das Kontosystem funktioniert . Es ist keine Transaktion erforderlich, da Kontostände einfach lokale Erbsenzähler sind. Alle Münzen in Ihrer Brieftasche werden von allen Konten geteilt. Kontostände verfolgen nur, wie viel davon wem gehören (aber nicht, welche Münzen wem gehören). Move aktualisiert einfach die Salden ohne Transaktion im Netzwerk.

Ist Option 2 eine gute Option, um mein Problem zu verbergen/zu lösen? Was sind andere Optionen / korrekte Implementierung für die Implementierung einer Auszahlungsschaltfläche?

Nein, da das Kontosystem veraltet ist und in einer zukünftigen Version entfernt wird. Gründe dafür sind, dass es sehr schwer zu verstehen ist (wie diese Frage zeigt!) und Backups nahezu unmöglich macht (da die Kontoinformationen für sendfrom nicht aus der Blockchain wiederhergestellt werden können, wird das Wiederherstellen eines Wallet-Backups Ihre Buchhaltung durcheinander bringen).

Verwenden Sie stattdessen den oben beschriebenen fundrawtransaction-Mechanismus und implementieren Sie Benutzerguthaben in einer höheren Ebene (die beispielsweise die Kontoinformationen in einer Datenbank mit ordnungsgemäßen Sicherungen speichert).

Kann sendfrom Geld von anderen Konten als dem ""-Konto abheben?

Per Definition nein. Es erstellt eine Transaktion mit allen Münzen in der gesamten Brieftasche, um sie zu finanzieren, und zieht dann den gesendeten Betrag plus Gebühr vom angegebenen Konto ab.