Как вызвать JSON-RPC SendToAddress, когда кошелек зашифрован?

Я использую JSON-RPC для отправки команд на мой биткойн, и он отлично работает.

Теперь я хочу зашифровать свой кошелек. Когда я это сделаю, мне нужно будет отправить парольную фразу при вызове SendToAddress. Как я могу это сделать?

Прямо сейчас я отправляю эти параметры:

  • адрес
  • количество
  • комментарий
  • комментарийКому

которые помещаются в массив в указанном выше порядке.

Будет ли парольная фраза другим параметром, который я добавляю в качестве последнего элемента в этом массиве?

Ответы (1)

Не в текущем коде. Как это работает сейчас, вам нужно сделать два вызова RPC — один для разблокировки кошелька на определенный период времени ( walletpassphrase) и один для выполнения транзакции ( sendtoaddress). При желании вы можете немедленно заблокировать кошелек с помощью команды ( 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.
Спасибо, Дэвид, это работает для меня. Одна проблема заключается в том, что тайм-аут, похоже, не работает, поэтому я всегда делаю «блокировку кошелька». Это, однако, создает необходимость выполнять walletpassphrase-sendtoaddress-walletlock внутри критической секции, иначе возникнет состояние гонки. Кроме того, «walletpassphrase» возвращает ошибку при повторном вызове без вызова «walletlock» между ними... Знаете ли вы, что это сделано по замыслу? Было бы проще, если бы «walletpassphrase» был идемпотентным.
Вы можете рассматривать ошибку -15 (кошелек уже разблокирован) как форму успеха. К сожалению, похоже, что этот RPC находится в печальном состоянии (или есть какой-то «правильный» способ его использования, о котором никто из нас не знает). Я бы предложил изменить «sendtoaddress», чтобы получить парольную фразу.
Безусловно, если бы «sendtoaddress» просто принимал парольную фразу, было бы здорово!