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

С RPC-вызовами bitcoind из отдельных (python) скриптов я:

  • вызов getnewaddress для настройки новой пары ключей для «специального» адреса, назначенного отдельной учетной записи (давайте назовем это «specialAccount»)

  • создание необработанных транзакций (вне bitcoind), которые тратят выходные данные на этот специальный адрес, а затем вызов bitcoind для подписания отправки

В дополнение к вышесказанному, возможно, что биткойн также вызывается напрямую, для осуществления платежей или чего-то еще.

Как я могу быть абсолютно уверен , что биткойн не потребляет выходные данные на мой специальный адрес, кроме подписания выходных данных на этот адрес в signrawtransaction?

Мы можем предположить, что нет вызовов, которые явно тратят из «specialAccount», но проблема в том, что, насколько я понимаю, биткойн может заимствовать произвольные неизрасходованные выходы для оплаты транзакционных комиссий. (См. , например, этот выпуск , а также этот .)

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

Ответы (1)

Вы можете использовать lockunspent для блокировки (только в памяти) неизрасходованных входных данных, созданных транзакциями, хотя бы один выход которых указывал на ваш «особый адрес».

Вроде тут может быть пара условий гонки, одно между неизрасходованным созданием и блокировкой, а другое между разблокировкой и подписанием? И затем, если эта блокировка не сохраняется при остановке и запуске сервера, то это тоже проблема.
Вы всегда можете сохранить любые «специальные адреса» в своей БД, а затем загрузить их обратно в свой bitcoindклиент при запуске и заблокировать их, прежде чем что-либо еще произойдет. После блокировки их нельзя потратить.