Объединить мелкие остатки в один перевод значит собрать несколько неизрасходованных выходов в одну транзакцию и отправить сумму на собственный адрес. Проверить каждый шаг — это сверить перед подписью четыре вещи: какие именно выходы выбраны, куда уходит сдача, каков виртуальный размер транзакции и по какому курсу считается комиссия. Все четыре параметра видны на экране до подписания. После подписания не меняется ни один.

Объединение остатков — это транзакция, у которой много входов и один выход на собственный адрес, и её назначение не в переводе денег, а в замене россыпи мелких выходов одним крупным.

Смысл операции чисто арифметический. Каждый вход занимает место в транзакции, а место стоит денег. Пятнадцать мелких выходов однажды придётся истратить. Платить за них по высокому курсу дороже, чем по низкому сегодня.

Под какой сценарий подбирается кошелёк и порядок объединения

Объединение имеет смысл при двух условиях одновременно. Первое — выходов много, и каждый по отдельности мал. Второе — курс комиссии низкий. Вы платите за уборку меньше, чем заплатили бы за вынужденную трату тех же выходов в час пик.

Отсюда и требование к кошельку. Нужен контроль над выбором входов: приложение, которое не показывает, какие выходы участвуют в транзакции, для этой задачи не годится. Понимание, что ответственность за выбор лежит на владельце, здесь не риторика, а условие работы — разбор про то, что такое самостоятельное хранение и какую ответственность оно даёт, задаёт эту рамку.

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

Сравнение параметров перед подписью: что меняется для пользователя

Параметр Где виден Признак ошибки Цена пропуска
Состав входов Экран выбора входов в приложении В наборе выход, который вы не собирались трогать Склейка адресов, которую не отменить
Адрес сдачи Список выходов транзакции Сдача уходит не на ваш адрес Прямая потеря остатка
Виртуальный размер Сводка транзакции до подписи Размер много больше ожидаемого при том же числе входов Переплата комиссии в разы
Курс комиссии Поле ставки за виртуальный байт Ставка подставлена по умолчанию, а не выбрана Либо переплата, либо застрявшая транзакция
Сумма и адрес получателя Экран аппаратного устройства Расхождение с тем, что показало приложение Подмена получателя на стороне компьютера

Последняя строка — единственная проверка, которую нельзя делегировать компьютеру. Приложение показывает то, что ему позволил показать компьютер, а экран аппаратного устройства показывает то, что будет подписано. Поэтому сверка идёт в одну сторону: читаем с устройства, сравниваем с бумажной записью, затем подтверждаем.

Объединение шаг за шагом

  1. Выгрузите список неизрасходованных выходов с суммами и отсортируйте по возрастанию. Это и есть ваша опись: без неё выбор делается наугад.
  2. Отметьте выходы, которые уходят в объединение, и исключите те, что получены от неизвестных отправителей. Мелочь неясного происхождения в общий перевод не берут.
  3. Задайте адрес получателя из собственного кошелька и убедитесь, что транзакция имеет один выход. Сдача в такой конструкции не нужна и её появление — сигнал об ошибке.
  4. Выберите курс комиссии вручную по текущей загрузке сети, а не оставляйте значение по умолчанию. Для уборки годится низкий курс и ожидание.
  5. Сверьте виртуальный размер в сводке: он растёт примерно пропорционально числу входов, и резкий скачок означает, что в набор попали нежелательные выходы.
  6. Подключите устройство, прочитайте сумму и адрес с его экрана, сравните с записью и только после совпадения подтвердите подпись.
Две опоры расчёта. По стандарту BIP-141 вес транзакции равен базовому размеру, умноженному на три, плюс полный размер, а виртуальный размер — это вес, делённый на четыре с округлением вверх. Порог «пыли» в коде Bitcoin Core привязан к параметру dustRelayFee: при значении по умолчанию 3000 сатоши за килобайт выход классического формата отсекается ниже 546 сатоши, а выход формата P2WPKH — ниже 294 сатоши. Выходы вблизи этих величин объединять чаще всего невыгодно.

Резервная копия и проверка восстановления

Объединение не меняет состав ключей и потому не требует новой копии. Требуется другое: убедиться, что действующая копия рабочая, до того как вы начнёте двигать выходы. Операция с множеством входов — неподходящий момент для открытия, что копия неполна. Сначала копия. Потом выходы.

Проверка стандартная и занимает один вечер. На чистом устройстве вводятся слова восстановления, сверяется первый адрес, устройство стирается, дата проверки записывается рядом с копией. Если объединение идёт после переноса средств с другого устройства, разбор про то, как правильно мигрировать активы на аппаратное устройство, стоит перечитать: часть мелких выходов обычно остаётся на старых путях вывода и в объединение не попадает.

Типовые ошибки, которые стоят денег

Объединение пылевых поступлений вместе со своими выходами. Мелочь, пришедшая от неизвестного отправителя, после объединения связывается с остальными вашими адресами навсегда. Такие выходы либо оставляют нетронутыми, либо тратят отдельно и осознанно.

Вторая ошибка — доверие ставке по умолчанию. Приложение подставляет курс, рассчитанный на быстрое подтверждение, и при тридцати входах разница с низким курсом составляет ощутимую часть собираемой суммы. Уборка не требует скорости. Ждать дешевле.

Третья ошибка — объединение выходов около порога пыли. Если вход стоит в комиссии дороже, чем несёт в себе, его перемещение убыточно. Такие выходы разумнее оставить в покое. Дождитесь минимальных ставок.

Четвёртая ошибка — пропуск сверки на экране устройства. Компьютер показал один адрес. Устройство другой. Человек подтвердил не глядя. Механика пылевых поступлений и связанных с ними подмен разобрана отдельно: как распознать пылевую атаку на кошелёк и что делать с полученной мелочью.

Что делать при утере доступа

  1. Если транзакция отправлена и висит без подтверждения, не отправляйте вторую: проверьте, допускает ли первая замену по признаку номера последовательности.
  2. При застрявшем переводе поднимайте комиссию заменой транзакции, а не созданием новой с теми же входами.
  3. Если доступ к приложению потерян, восстановите кошелёк из копии и дайте приложению заново обнаружить выходы перед повторной попыткой.
  4. Расхождение в сумме после подтверждения разбирайте по обозревателю сети: там видны все входы, выход и фактическая комиссия.

Регулярность здесь важнее разовой уборки. Материал о том, как организовать хранение криптовалюты, если держите активы годами, описывает цикл сверок — объединение остатков логично привязать к периодам низких ставок внутри этого цикла.

Чек-лист

  • Опись выходов выгружена и отсортирована по суммам
  • Входы выбраны вручную, пылевые поступления исключены
  • Транзакция имеет один выход на собственный адрес
  • Сдача не появилась, адрес сдачи проверен при её появлении
  • Курс комиссии выбран вручную по текущей загрузке сети
  • Виртуальный размер сверен с ожидаемым по числу входов
  • Сумма и адрес прочитаны с экрана устройства, а не из приложения
  • Резервная копия проверена до начала операции

Материалы по теме:

Частые вопросы

Как понять, что входов слишком много?

Ориентируйтесь на виртуальный размер, а не на их число. Если сводка показывает размер, при котором комиссия по текущему курсу съедает заметную долю собираемой суммы, набор стоит сократить. Удобный приём — собирать остатки порциями по десять-пятнадцать входов в периоды низких ставок, а не одной большой транзакцией.

Почему в транзакции появилась сдача, если выход один?

Значит, приложение добавило вход, которого вы не выбирали, либо округлило сумму. Сдача в объединении — признак того, что состав входов и сумма рассчитаны не так, как вы предполагали. Разумнее отменить черновик, пересобрать его с явным выбором входов и указать перевод всей доступной суммы.

Можно ли объединять выходы около порога пыли?

Технически да, экономически обычно нет. Порог в коде узла привязан к параметру dustRelayFee и при значении по умолчанию составляет 546 сатоши для классического выхода и 294 сатоши для формата P2WPKH. Выход, который в комиссии стоит дороже собственной величины, выгоднее оставить на месте.

Зачем сверять адрес на экране устройства, если он виден в приложении?

Приложение работает на компьютере и показывает то, что ему позволено показать. Экран устройства отображает данные, которые устройство и подпишет. Расхождение между двумя экранами — классический признак подмены на стороне компьютера, и ловится оно только такой сверкой, выполненной до подтверждения.

Вердикт

Объединение остатков — редкая операция, где каждый параметр проверяем заранее и ни один не исправим потом. Четыре проверки занимают пять минут: состав входов, адрес сдачи, виртуальный размер, курс комиссии. Пятая проверка идёт с экрана устройства, и заменить её ничем нельзя. В обращениях читателей переплата за уборку почти всегда объясняется ставкой по умолчанию, а не сложностью сети.

Разборы и предупреждения о свежих схемах публикуем в Telegram-канале Cryptium.

Источники: спецификация BIP-141 о весе и виртуальном размере транзакции и код политики узла Bitcoin Core с порогом пылевых выходов.