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.
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
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?
Außerdem, welcher minconf
Parameter ist für? Soweit ich weiß, erfordern Off-Chain-Transaktionen keine Bestätigungen.
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.
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?
Welcher minconf
Parameter ist für?
sendtoaddress <bitcoinaddress> <amount> [comment] [comment-to]
<amount> is a real and is rounded to 8 decimal places. Returns the transaction ID <txid> if successful.
Das Konto ist für diesen Anruf nicht angegeben. Welches Konto wird Bitcoin verwenden? Die Standardeinstellung?
Warum gibt es dafür keinen minconf
Parameter?
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:
Der move
Befehl 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:
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.
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 minconf
Bestätigungen zu zählen. Diese Funktionalität wurde vor langer Zeit entfernt und der minconf-Parameter wird jetzt ignoriert.
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. sendfrom
Sie können einfach angeben, welcher Kontostand verringert werden soll.
sendfrom
fü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 minconf
Bestä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.
sendtoaddress
belastet 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.
Da sendtoaddress
keine Saldoprüfung durchgeführt wird, gibt es keine Möglichkeit, dass ein minconf
Parameter 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 spendzeroconfchange
Einstellung 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.
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.
Beachten Sie zunächst, dass Konten und die move
API 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.
Die minconf soll den Client wissen lassen, nur die Transaktionsausgaben zu verwenden, die so viele Mindestbestätigungen haben, wie Sie angegeben haben.
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).
wie Punkt 2
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.
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
Murch