Wie rufe ich JSON-RPC SendToAddress auf, wenn die Brieftasche verschlüsselt ist?

Ich verwende JSON-RPC, um Befehle an meine Bitcoin zu senden, und es funktioniert gut.

Jetzt möchte ich meine Brieftasche verschlüsseln. Wenn ich das getan habe, muss ich die Passphrase senden, wenn ich SendToAddress aufrufe. Wie mache ich das?

Im Moment sende ich diese Parameter:

  • die Anschrift
  • Menge
  • Kommentar
  • KommentarAn

die in der obigen Reihenfolge in ein Array eingefügt werden.

Wird die Passphrase ein weiterer Parameter sein, den ich als letztes Element in diesem Array anhänge?

Antworten (1)

Nicht im aktuellen Code. So wie es jetzt funktioniert, müssen Sie zwei RPC-Aufrufe tätigen – einen, um die Brieftasche für einen bestimmten Zeitraum zu entsperren ( walletpassphrase) und einen, um die Transaktion durchzuführen ( sendtoaddress). Falls gewünscht, können Sie anschließend einen Befehl zum sofortigen Sperren der Brieftasche ausführen ( walletlock).

  walletpassphrase <passphrase> <timeout>
  Stores the wallet decryption key in memory for <timeout> seconds.

  walletlock
  Removes the wallet encryption key from memory, locking the wallet.
  After calling this method, you will need to call walletpassphrase again
  before being able to call any methods which require the wallet to be unlocked.
Danke David, bei mir funktioniert es. Ein Problem ist, dass das Timeout nicht zu funktionieren scheint - also mache ich immer "Walletlock". Dies schafft jedoch die Notwendigkeit, walletpassphrase-sendtoaddress-walletlock innerhalb eines kritischen Abschnitts auszuführen, da es sonst zu einer Race-Bedingung kommen würde. Außerdem - "walletpassphrase" gibt beim zweiten Aufruf einen Fehler zurück, ohne "walletlock" zwischendurch aufgerufen zu haben ... Wissen Sie, ob dies beabsichtigt ist? Es würde das Leben einfacher machen, wenn "walletpassphrase" idempotent wäre.
Sie können den Fehler -15 (Wallet bereits entsperrt) als eine Art Erfolg betrachten. Leider scheint dieser RPC in einem traurigen Zustand zu sein (oder es gibt einen 'richtigen' Weg, ihn zu benutzen, den keiner von uns kennt). Ich würde vorschlagen, „sendtoaddress“ zu ändern, um eine Passphrase zu übernehmen.
Absolut, wenn "sendtoaddress" einfach eine Passphrase akzeptieren würde, wäre es großartig!