Wie erstelle ich Rohtransaktionen mit benutzerdefinierten Gebühren?

Ich habe eine Website, auf der Benutzer mit Bitcoin Geld senden und abheben können. Ich möchte ihnen die Möglichkeit geben, anstelle einer festen Gebühr verschiedene Gebühren (niedrig, mittel und hoch) zu verwenden oder Bitcoin die Gebühr wählen zu lassen. Ich kann keine Standardgebühr einrichten oder zur Laufzeit ändern, denn wenn sich ein Benutzer entscheidet, eine hohe Gebühr und eine niedrigere zu verwenden, kann es passieren, dass der Benutzer mit der hohen Gebühr als niedrig zugewiesen wird oder umgekehrt.

Daher bin ich nach Recherchen zu dem Schluss gekommen, dass es notwendig ist, die Transaktion aus dem UTXOS zu erstellen, das mein Knoten hat. Es fällt mir jedoch schwer zu verstehen, wie diese Aufgabe auszuführen ist. Ich gebe ein Beispiel, um mein Problem zu erklären: Wenn der Node UTXOS 1 BTC ist, hat ein Benutzer 0,1 BTC in der Service-Wallet und möchte 0,07 BTC abheben. Ich verstehe, dass die zu unternehmenden Schritte die folgenden wären:

  1. Listen Sie alle nicht ausgegebenen Transaktionen auf
  2. Wählen Sie eine oder mehrere Eingaben aus, um die Transaktion zu erstellen
  3. Die Gebühr wird als Subtraktion zwischen der Summe der Inputs und der Outputs berechnet

Meine Zweifel in diesem Moment wären:

  1. Wenn ich das richtig verstehe, haben wir für jede eingehende Transaktion eine nicht ausgegebene Transaktion, die es uns ermöglicht, die verfügbaren Mittel auszugeben; Dann, solange Sie in einer Datenbank das korrekte Guthaben für jeden Benutzer haben (Aktualisieren dieses Guthabens mit den entsprechenden Gebühren beim Abheben von Geldern), sollte ich nur denselben UTXO verwenden, der von jedem Benutzer generiert wird, wenn BTCs eingezahlt werden. Oder ist es möglich, ihn zu verwenden andere UTXOs, solange die Menge gleich ist?

  2. Ich habe in Bitcointalk gelesen, dass die Eingaben einer Rohtransaktion kleiner oder gleich den Ausgaben dieser Transaktion sein müssen. Ist es nicht möglich, Eingaben zu verwenden, die höher sind als die Ausgaben, und die überschüssigen Gelder wieder in eine Brieftasche meines Knotens "zurückzugeben"?

  3. Wie kann ich die verwendete Gebühr berechnen? Ich meine, ich kann entscheiden, ob ich X Satoshis/kb verwenden möchte, aber wie kann ich die Gebühr berechnen, die für die Transaktion erforderlich ist, bevor ich sie erstelle? Denn wenn ich das richtig verstanden habe, erhalte ich die Größe der Transaktion, sobald ich eine solche Transaktion erstellt habe. Ich weiß nicht, ob es eine Möglichkeit gibt, die Berechnung durchzuführen, die die Transaktion in Bytes / Kilobyte belegen wird

Ich habe nicht allzu viele Informationen darüber gefunden, also wenn mir jemand helfen kann, wäre ich dankbar.

Antworten (1)

  1. also sollte ich nur die gleichen UTXOs verwenden, die von jedem Benutzer generiert werden, wenn BTCs eingezahlt werden. Oder ist es möglich, andere UTXOs zu verwenden, solange die Menge gleich ist?

Dies liegt an Ihnen, obwohl es wahrscheinlich sicherer wäre, nur die von den Benutzern hinterlegten UTXOs auszugeben, um sicherzustellen, dass nichts schief gelaufen ist (z. B. ein Leck des privaten Schlüssels und die Münzen wurden bereits ausgegeben). Aber solange der Benutzer am Ende die richtige Menge an Bitcoins bekommt, spielt es keine Rolle.

  1. Ich habe in Bitcointalk gelesen, dass die Eingaben einer Rohtransaktion kleiner oder gleich den Ausgaben dieser Transaktion sein müssen. Ist es nicht möglich, Eingaben zu verwenden, die höher sind als die Ausgaben, und die überschüssigen Gelder wieder in eine Brieftasche meines Knotens "zurückzugeben"?

Ich glaube, Sie haben die Informationen, die Sie gefunden haben, falsch gelesen oder sie waren falsch. Die Inputs einer Transaktion müssen größer oder gleich den Outputs sein, sonst würden Sie irgendwie neue Coins generieren. Wenn die Inputs streng größer sind, wird die Differenz den Minern der Transaktion als Gebühr gegeben. Um die überschüssigen Gelder "zurückzugeben", müssen Sie einfach eine Transaktionsausgabe vornehmen, die die Münzen an Sie zurücksendet, die als Wechselgeld bezeichnet werden.

Wenn Sie eine neue Transaktion manuell mit Bitcoin-RPC-Aufrufen generieren, wird die Gebühr automatisch geschätzt. Um einen benutzerdefinierten Gebührensatz zu verwenden, können Sie die feeRate im FundRawTransaction- Aufruf festlegen. Sie können auch die Transaktionsrate für alle zukünftigen Transaktionen festlegen, während das Wallet mit SetTxFee läuft .

Danke für deine Antwort! Es hat mir wirklich geholfen. Nur ein paar Fragen und ich werde Ihre Antwort als gültig markieren. Zu Punkt 2 (Ins und Outs) habe ich die Info falsch gelesen, mein Fehler. Und danke, dass Sie mir von fundrawtransaction erzählt haben, ich wusste nichts davon, es scheint sehr nützlich zu sein, aber ich möchte dem Benutzer die Möglichkeit geben, benutzerdefinierte Gebühren zu verwenden (sehen Sie sich gerne meinen anderen Beitrag an, der verwandt ist: bitcoin.stackexchange . com/questions/57193/… ), daher kann ich keine feste Gebühr verwenden.
Die Schritte sollten also sein: Erstellen Sie die Transaktion und verwenden Sie fundrawtransaction, um die Gebühr zu ändern; Rechts?
Ja, das würde funktionieren, dann natürlich auch unterschreiben usw.