Wie werden Off-Chain-Transaktionen von Bitcoin gehandhabt?

Ich versuche herauszufinden, wie Transaktionen tatsächlich von Bitcoin gehandhabt werden.

Ich schaue mir die vollständige Liste der RPC-Methoden an und es fehlt Dokumentation für einige der interessantesten Methoden.

Bewegung

Ich weiß, dass es zwei Methoden gibt, Bitcoins zwischen Adressen zu verschieben, entweder über eine direkte P2P-Transaktion oder über die sogenannte Off-Chain- Transaktion. Wenn ich richtig glaube, ermöglicht uns die eingebaute Wallet von Bitcoin, Off-Chain-Transaktionen über die Move - Methode zu senden. Leider ist es nicht sehr gut dokumentiert, aber ich möchte genau wissen, wie es funktioniert.

Hier ist die Dokumentation dazu:

move <fromaccount> <toaccount> <amount> [minconf=1] [comment]

Move from one account in your wallet to another
  1. Also, wenn Konto A einen BTC hat und Konto B null hat. Was passiert, wenn ich zuerst eine BTC von A nach B mit einer Off-Chain-Transaktion bewege und dann eine direkte Transaktion von 1 BTC von B nach C ausstelle?

  2. Außerdem, welcher minconfParameter ist für? Soweit ich weiß, erfordern Off-Chain-Transaktionen keine Bestätigungen.

sendenvon

Hier ist die Dokumentation für die Methode sendfrom :

sendfrom <fromaccount> <tobitcoinaddress> <amount> [minconf=1] [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Will send the given amount to the given address, ensuring the account has a valid balance using [minconf] confirmations. Returns the transaction ID if successful (not in JSON object).

Es erfordert ein Konto, um Bitcoins zu senden.

  1. Was ist, wenn ich mehrere Adressen/Transaktionen für das angegebene Konto habe? Welche Strategie verwendet Bitcoin, um zu bestimmen, von welchen Adressen eine Transaktion durchgeführt werden soll und wie viele Bitcoins von jeder verwendet werden sollen?

  2. Welcher minconfParameter ist für?

Adresse senden

sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]

<amount> is a real and is rounded to 8 decimal places. Returns the transaction ID <txid> if successful.
  1. Das Konto ist für diesen Anruf nicht angegeben. Welches Konto wird Bitcoin verwenden? Die Standardeinstellung?

  2. Warum gibt es dafür keinen minconfParameter?

Viele Seiten im Wiki sind veraltet, vielleicht möchten Sie auch in der Bitcoin Developer Reference nachsehen . Diese Wiki-Seite ist veraltet, erklärt aber die Kontofunktionalität von Bitcoin Core . Wie Shabahat M. Ayubi unten erklärt, ist die Kontofunktion in Bitcoin Core veraltet.

Antworten (2)

Zunächst einmal gibt es viele Arten von Off-Chain-Transaktionen. Jede Wertbewegung in BTC, die nicht direkt einer Blockchain-Transaktion entspricht, kann als solche klassifiziert werden. Das beinhaltet:

  1. Jemandem einen Computer/ein Telefon zu geben, auf dem sich eine Brieftasche mit BTC befindet
  2. Jemandem einen privaten Schlüssel/physischen Bitcoin geben.
  3. Jemandem Zugriff auf ein gemeinsames Webwallet-Konto gewähren
  4. Senden von Geld von einem Konto zu einem anderen innerhalb desselben Dienstes (was einfach das Guthaben einer Person verringert und das Guthaben einer anderen Person erhöht)
  5. Zahlungskanäle, einschließlich Lightning, die eine kleine Anzahl von Transaktionen aushandeln, die dem Nettoeffekt von viel mehr Wertübertragungen entsprechen.

Der moveBefehl in bitcoind führt nicht zu einer Off-Chain-Transaktion; es erhöht einfach einen internen Zähler und verringert einen anderen. Es ist sicher Off-Chain, aber es ist schwer, es als Transaktion zu bezeichnen. Alles, was Sie getan haben, ist, wie Sie das Geld zählen, über das Sie bereits die Kontrolle haben.

Ein Dienst (wie Nr. 4 oben) könnte möglicherweise den Move-Befehl von bitcoind verwenden, um ein (einfaches) Off-Chain-Transaktionssystem zu implementieren. Aber es erfordert zumindest ein Setup, bei dem mehrere Personen Konten auf Ihrem System haben und sie Sie als Verwahrer für ihr Geld behandeln.

Zu den Fragen die du stellst:

  1. Konten sind ein von Adressen völlig unabhängiges Konzept. Aus Sicht von Bitcoin gibt es so etwas wie einen Adresssaldo nicht. Es gibt den Wallet-Saldo (über wie viele Münzen die Wallet insgesamt die Kontrolle hat) und Kontostände (die einfach interne Erbsenzähler sind, ohne Bezug zu irgendetwas auf der Blockchain). Wenn eine neue Transaktion M-Geld an Adresse A sendet und Adresse A mit Konto C verknüpft ist, steigt das Guthaben der Brieftasche M und das Guthaben des Kontos für C steigt. Wenn Sie mit sendfrom Geld senden, wird das genannte Konto belastet. Aber die tatsächlich erstellte On-Chain-Transaktion verwendet immer alle Münzen, über die die Brieftasche die Kontrolle hat. Nochmals: Es gibt keine Beziehung zwischen On-Chain-Münzen (Transaktionsausgaben) und Kontoständen.

  2. Der Move-Befehl führte früher eine Saldoprüfung auf dem zu belastenden Konto durch und schlug fehl, wenn er nicht genug hatte, um nur Transaktionen mit mindestens minconfBestätigungen zu zählen. Diese Funktionalität wurde vor langer Zeit entfernt und der minconf-Parameter wird jetzt ignoriert.

  3. Bitcoind behandelt die gesamte Brieftasche als Eigentümer der Coins und verwendet alle verfügbaren Coins für jede Transaktion, die es erstellt. Es gibt keine Beziehung zwischen Münzen und Konten. sendfromSie können einfach angeben, welcher Kontostand verringert werden soll.

  4. sendfromführt eine Kontostandsprüfung auf dem belasteten Konto durch und schlägt fehl, wenn dadurch der Kontostand negativ würde, wobei nur gutschreibende Transaktionen mit mindestens minconfBestätigungen gezählt werden. Diese Funktion ist nicht sehr zuverlässig, da Gebühren das Konto trotz vorheriger Kontostandsprüfung ins Minus bringen können.

  5. sendtoaddressbelastet immer das ""-Konto und führt keine Saldoprüfung durch, sodass das ""-Konto negativ werden kann (solange das Wallet-Guthaben - die Summe der Kontoguthaben - positiv ist). Nochmals: Es schränkt in keiner Weise ein, welche Münzen zum Erstellen der Transaktion verwendet werden.

  6. Da sendtoaddresskeine Saldoprüfung durchgeführt wird, gibt es keine Möglichkeit, dass ein minconfParameter eine Auswirkung hat. Normalerweise sind alle Münzen mit 1-Bestätigung (wenn sie von anderen Brieftaschen stammen) oder 0-Bestätigung (wenn sie von Ihnen selbst stammen) auszugeben, obwohl dies beispielsweise durch die spendzeroconfchangeEinstellung geändert wird).

Wie bereits erwähnt, sind das Kontostandssystem und der Bewegungsbefehl veraltet, da sie sehr schwer zu verstehen und richtig zu verwenden sind. Wenn Sie eine Buchhaltung benötigen, implementieren Sie diese obendrein selbst.

Danke Pieter für eine ausführliche Antwort. Das hat mir jetzt wirklich Klarheit verschafft. Außerdem haben wir uns entschieden, unser eigenes Buchhaltungssystem zu implementieren und Bitcoin Wallet als ein gemeinsames Konto für alle Kunden zu behandeln, wie Sie im letzten Satz vorgeschlagen haben.

Eine Off-Chain-Transaktion bedeutet vereinfacht ausgedrückt, dass die an der Transaktion beteiligten Parteien grundsätzlich ihre privaten Schlüssel austauschen. Angenommen, Sie möchten Ihrem Freund 1 BTC zahlen. Sie würden einfach den privaten Schlüssel an Ihre Adresse geben, die die 1BTC hält. Gehen Sie über diesen Link für weitere Details. Kommen wir nun zu Ihren Fragen.

  1. Beachten Sie zunächst, dass Konten und die moveAPI veraltet sind und nicht mehr verwendet werden. Nur zur Erklärung: Konten sind nichts anderes als eine Reihe von Adressen in Ihrer Bitcoin-Brieftasche. Jetzt überträgt der Move-Befehl tatsächlich die BTC von den Adressen in einem Konto auf das andere. Es gibt keine Möglichkeit, den Bitcoin-Client davon zu überzeugen, den privaten Schlüssel zu teilen und die Gelder nicht zu verschieben (weil er bereits alle privaten Schlüssel hat). Das Szenario, das Sie angegeben haben, ergibt also keinen Sinn.

  2. Die minconf soll den Client wissen lassen, nur die Transaktionsausgaben zu verwenden, die so viele Mindestbestätigungen haben, wie Sie angegeben haben.

  3. sendfrom ist ebenfalls veraltet, da Konten veraltet sind. Die Bitcoin-Brieftasche kombiniert die Gelder in all Ihren Adressen, um das Geld an die angegebene Adresse zu senden (wenn der Wert, den Sie senden möchten, nicht in einer einzigen Adresse verfügbar ist).

  4. wie Punkt 2

  5. Wie ich bereits sagte, sind Konten veraltet, daher wird die Adresse verwendet, die mehr als den angegebenen Wert hat, und wenn nicht, werden Adressen kombiniert, um das Geld an die Empfängeradresse zu senden.

  6. wie Punkt 2

Bearbeiten: Punkt 1: Der Bewegungsbefehl verringert einfach den virtuellen internen virtuellen Kontostand eines Kontos und erhöht einen anderen und bewegt die BTCs nicht. Wie von Peter Wuille korrigiert

Vielen Dank für Ihre Antwort. Das klärt mich etwas auf. Woher weiß ich außerdem, welche Funktionen oder API-Aufrufe veraltet sind oder nicht? Es sieht so aus, als ob die Dokumentation schlecht und stark veraltet ist.
Versuchen Sie über das Terminal, die API ohne die erforderlichen Parameter einzugeben, geben Sie beispielsweise einfach move ein und lesen Sie die Ausgabe. Sie würden dort sehen, dass es veraltet ist, aber weiterhin verwendet werden kann.
Der Move-Befehl verschiebt keine Gelder von einer Adresse zu einer anderen. Es verringert einfach einen internen virtuellen Saldo und erhöht einen anderen. Konten sind keine Adressen. Sie sollen tatsächlich in einer zukünftigen Version entfernt werden (teilweise, weil sie sehr schwer zu verstehen sind).