Child-pay-for-parent транзакция

Child-pay-for-parent транзакция

by @lemon_crypto




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

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


Child-pay-for-Parent (или CPFP) транзакция, это метод, при котором именно получатель (а не отправитель, как в Replace-by-Fee) ускоряет транзакцию которая должна прийти ему, не обладая при этом приватными ключами отправителя.

Суть метода довольно проста: Как всем известно, любая транзакция имеет входы (inputs), которые ссылаются на предыдущую транзакцию а также подтверждают что нынешний владелец имеет право их тратить, и выходы (outputs) в которых задаются новые условия, при формировании перевода. Если представить, что есть транзакция А и следующая за ней транзакция Б, то очевидно, что выход транзакции А - это вход транзакции Б. И если случается такое, что при отправке, в транзакции А, была указана или нулевая, или минимальная, или неподходящая (относительно размера самой транзакции, как в примере выше) комиссия за перевод, то получателю остается или ждать подтверждения майнерами, когда сеть очистится, или же создать транзакцию Б, и отправить ее с дополнительной комиссией, которая покроет А.
Майнеру, в данном случае, чтобы получить хорошую награду за транзакцию Б, придется также смайнить и транзакцию А, ведь данная транзакция является "родителем" транзакции Б, и без ее подтверждения не будет и подтверждения ее "ребенка".


Звучит интересно, но как это реализовать на практике? В данном случае я покажу вам на кошельке Electrum, которым сам пользуюсь уже долгое время. При этом я знаю, что такие возможности есть во многих других кошельках (но не в Bitcoin Core, ха ха), например в онлайн кошельке Coinbase. Но так как теми кошельками я не пользовался, а также не имею доверия к сервисам, которые рассылают налоговые листы задним числом, обойдемся самым известным и проверенным временем.

Отправка CPFP в Electrum

  1. Необходимо проверить, что CPFP в данном случае возможна. Заходим в историю транзакций, выбираем зависшую транзакцию, кликаем правой кнопкой мыши и выбираем "Детали/Details", получаем похожее что на скриншоте, и смотрим, подсвечиваются ли указанные выходы зеленым или желтым (если красным - CPFP применить не получится)
как видим, CPFP потенциально применим

2. Далее необходимо перейти в главном меню в раздел "Инструменты/Tools" и далее выбрать "Preferences". В открывшемся окне перейти во вкладку "Transactions" и проверить, выключен ли пункт "Spend only confirmed outputs". Если нет, снимите с него галочку.

3. Далее, переходим во вкладку "Receive", где указан адрес для получения. Здесь не играет роли какой адрес брать, можете хоть взять тот, на который шла изначальная зависшая транзакция, можете другой. Адрес копируется в буфер обмена. На него мы будем формировать новую транзакцию.

4. Далее, во вкладке "Вид/View" выбираем панель "Адресы/Addresses", которая появляется у нас среди остальных вкладок. Переходим в нее, и выбираем адрес на который переводились деньги с зависшей транзакции.

вот он родимый

Кликаем на него правой кнопкой мыши, и в открывшемся меню находим и выбираем "Spend from/Потратить с" , нас переносит во вкладку отправки. В ней находим нужный нам выход (как тот, который был в скриншоте 1, на 0.00092 btc) выделяем его, в адрес получателя вставляем наш же адрес, который мы сохраняли в буфер ранее. В значение "amount" заносим величину выбраного нами выхода. Бегунок комиссии выводим на максимальное значение.

Важный момент! В случае сложных и очень больших транзакций, максимальной комиссии с бегунка может быть недостаточно. В таком случае, переходим опять Tools - Preferences, в открывшейся вкладке "Fee" выбираем "Edit fees manually" и тогда вы сможете прописывать комиссию руками. Какая комиссия лучше всего подойдет, и как ее посчитать, вы можете прочитать вот в этом посте.

5. Кликаем "Отправить", вводим пароль (очень надеюсь он у вас стоит) и транзакция отправляется в сеть. Теперь остается только ждать подтверждения. Если вы все сделали правильно, оно не заставит себя долго ждать :)

В истории транзакций, новая будет помечена как "unconfirmed parent" , что значит мы все сделали правильно. На своем скрине я делал это все на тестовом кошельке, и по сути отправлял с адреса на него самого (как я уже писал раньше, так тоже можно), но все равно, даже с шуточной CPFP видно разницу в приоритетах "родительской" транзакции и "ребенка" (1.43 против 0.97). Чем меньше приоритет, тем лучше.

Пользуйтесь этим методом на здоровье, только как всегда, не забудьте соблюсти все меры предосторожности (как то проверка подписи файла) при установке самого кошелька Electrum, иначе потом может оказаться грустно.

Полезные ссылки:

  1. https://bitcoinelectrum.com/how-to-do-a-manual-child-pays-for-parent-transaction/#:~:text=A%20Child%20Pays%20For%20Parent,inputs%20i.e.%20the%20parent%20transaction.&text=However%2C%20in%20some%20cases%20that,doing%20a%20manual%20CPFP%20transaction
  2. https://bitcoin.stackexchange.com/questions/38320/can-someone-outline-the-full-pros-cons-of-the-various-replace-by-fee-proposals
  3. https://themoneymongers.com/child-pays-for-parent/

Report Page