Увеличить комиссию за транзакцию с помощью клиента Bitcoin Core не удалось из-за отсутствия вывода изменений. Почему?

Контекст

Я создал транзакцию (используя полный баланс вывода) с кошельком Bitcoin Core (работающим как полный узел). Транзакция попала в мемпул основных узлов, как и ожидалось. Я установил комиссию, которую клиент рекомендовал для медленной транзакции (чуть больше 9 сат/Б), но в наши дни она оказывается очень низкой. Учитывая текущее состояние мемпула в hoenicke , это может быть подтверждено через несколько недель, если вообще будет получено.

Увеличить комиссию не получится

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

Однако это не представляется возможным по замыслу. Я получаю сообщение «Ошибка увеличения комиссии», говорящее: «Не удалось увеличить комиссию за транзакцию (транзакция не имеет вывода сдачи)».

Что с этим делать?

Почему я не могу изменить баланс целевого/комиссионного вознаграждения за транзакцию и как я могу увеличить комиссию в этот момент?

Детали транзакции (согласно запросу)

Summary
Size    1xx (bytes)
Weight  7xx
Lock Time   Block: 49xxxx

Inputs and Outputs
Total Input 0.01xxxxxx BTC
Total Output    0.01xxxxxx BTC
Fees    0.00001xxx BTC
Fee per byte    9.xxx sat/B
Fee per weight unit 2.xxx sat/WU
Estimated BTC Transacted    0.019xxxxx BTC

И входные, и выходные адреса начинаются с «1».

Можете ли вы отредактировать сообщение, чтобы включить детали и структуру транзакции?

Ответы (1)

Транзакции BIP125 RBF (Replace-by-fee) в биткойн-ядре 0.15.0.1, по-видимому, требуют изменения адреса с балансом, чтобы облегчить будущее увеличение комиссии на основе RBF.

В качестве примера рассмотрим следующую транзакцию:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00001 BTC
Change - 0.00001 BTC

Допустим, плата слишком низкая. Теперь мы хотим увеличить комиссию за транзакцию, поэтому RBF заменяет предыдущую транзакцию такой:

Input  - 1.00000 BTC
Output - 0.99998 BTC
Fee    - 0.00002 BTC
Change - 0.00000 BTC

Теперь комиссии достаточно, чтобы транзакция была подтверждена.

Без «сдачи», присутствующей в первой транзакции, нет источника увеличения комиссии. RBF может быть реализован таким образом, чтобы объем выпускаемой продукции был снижен, чтобы обеспечить более высокую плату; Я не уверен, почему это не поддерживается. Строка 2928 исходного кода wallet.cpp в репозитории bitcoin-core github гласит:

break; // Done, able to increase fee from change

Чтобы обойти эту проблему для транзакции с включенным RBF, но без адреса изменения, нужно следовать указаниям, содержащимся в одном из ответов на канонический вопрос «транзакция не подтверждена» . Я столкнулся с точно такой же проблемой на прошлой неделе и смог успешно восстановить ее, используя опцию -zapwallettxesв интерфейсе командной строки кошелька биткойн-ядро.

Спасибо за ссылку. Я сделаю так, как указано в разделе «Как совершить полную транзакцию RBF». Странно, что использование части выходного значения не поддерживается.
«Отменить транзакцию» для меня неактивно, поэтому я, вероятно, очистю локальный мемпул «вручную», что должно быть похоже на -zapwallettxes
Интересно следующее предложение if в строке 2932 ( github.com/bitcoin/bitcoin/blob/… ). Там вроде бы сокращают выпуск за повышение гонорара. Как программа достигнет этой строки? Мне довольно трудно догадаться, просто взглянув на исходный код. Я рассмотрю предоставленный вами документ BIP.
Хм, становится интересно. В соответствии с BIP125 RBF я обнаружил, что клиент Bitcoin Core пытается выполнить «RBF First Seen Safe», но использует изменение вместо дополнительного ввода в моем случае, но изменений нет. облом. Они просто, кажется, забыли предоставить вариант без изменений для моего случая, который тогда был бы «полным RBF» без безопасности для получателя. Я думаю, это отвечает на часть «почему» моего вопроса.
Опция отказа от транзакции для меня тоже была недоступна. Я не уверен, почему. Смотреть на код интересно , на данный момент у меня недостаточно опыта работы с кодом биткойн-ядра, чтобы действительно в деталях понять, что ожидается, а что происходит.