Выбор UTXO в Bitcoin: монеты и стоимость сдачи
Кошелёк читателя может иметь множество подходящих выходов. Как выбрать входы для оплаты курса за 30 000 сатоши? В уроке сравним варианты не только по сумме, но и по размеру, сдаче и наблюдаемым связям. Мы не реализуем промышленный алгоритм выбора монет; построим понятную модель решения.
Исходные доступные UTXO: 80 000, 20 000, 15 000 и 11 000 сатоши. Все принадлежат учебному читателю и имеют условно сопоставимые пути расходования. Числа бюджета комиссии ниже согласованы для сравнения, а не получены из текущей сети.
Подходящая сумма
Самый очевидный вариант использует выход на 80 000. При цене 30 000 и бюджете 700 сдача равна 49 300. Он требует один вход. Другой вариант объединяет 20 000 и 15 000, получая 35 000. Если собственная оценка большего размера дала бюджет 1 000, сдача составит 4 000.
| Набор | Входы | Получатель | Бюджет | Сдача |
|---|---|---|---|---|
| A | 80 000 | 30 000 | 700 | 49 300 |
| B | 20 000 + 15 000 | 30 000 | 1 000 | 4 000 |
Для обоих вариантов сохраняется сумма. Нельзя сравнивать их по одному признаку «какой остаток меньше» и игнорировать расход. Маленькая сдача может быть удобна для структуры кошелька, однако дополнительные входы увеличивают размер и связывают прежние поступления.
Вариант 20 000 + 11 000 выглядит близким к цене. Но после комиссии может остаться слишком малая сдача. Если кошелёк решит не создавать её, фактическая комиссия изменится. Поэтому поиск суммы «не меньше цены» недостаточен: нужен бюджет всего расходования и правило обработки остатка.
Эффективная стоимость входа
Каждый дополнительный вход добавляет сериализацию и данные разрешения. При высокой согласованной ставке небольшой UTXO может приносить мало эффективной суммы после будущей стоимости расходования. Это не означает, что его номинальная сумма исчезает из протокола. Это экономическая оценка в алгоритме кошелька.
Для объяснения введём условную стоимость расходования одного входа 400 сатоши. Выход на 11 000 даёт 10 600 эффективных сатоши относительно этой оценки. Если другой тип входа требует больше данных, стоимость меняется. Нельзя использовать один фиксированный расход для всех скриптов.
Эффективные значения помогают выбирать набор, но итоговая комиссия проверяется по всей подготовленной транзакции. Оценки могут зависеть от подписей, числа выходов и конкретного пути. После подготовки нужно сверить реальный размер и заявленный предел расхода.
Сдача имеет будущую цену
Новый выход сдачи полезен только тогда, когда кошелёк сможет его найти и расходовать. Его создание добавляет размер текущей транзакции, а расходование — размер будущей. Если алгоритм находит набор, который оплачивает получателя и комиссию почти без остатка, он может избежать этой дополнительной структуры.
Однако отсутствие сдачи не всегда лучший выбор. Если ради него объединяются многие входы, текущая комиссия и утечка связей могут оказаться важнее. Алгоритм решает несколько задач одновременно. Хороший интерфейс показывает согласованную структуру и ограничения, а не обещает универсально «идеальную» транзакцию.
Для библиотеки это также важно при возвратах. Если выделить всю выручку из множества отдельных счетов в одну операцию, публичный граф свяжет эти поступления. Такая связь может раскрыть модель деятельности и группы читателей, даже когда имена не записаны в цепочке.
Полномочия и ограничения
Набор подходящих выходов может быть меньше общего кошелькового баланса. Некоторые выходы неподтверждены, часть требует дополнительных подписантов, другие имеют временное ограничение. Доступность зависит от выбранного пути, политики и текущего состояния.
Не следует выбирать UTXO исключительно по адресу получения. Один кошелёк может контролировать множество адресов и несколько типов условий. Для одних расходов он имеет готовые секреты, для других только наблюдает. Watch-only-выход не становится доступным для подписи, хотя его сумма показывается в отчёте.
Отдельно рассмотрим конфликт. Если другой неподтверждённый кандидат уже расходует выход, кошелёк должен учитывать его связь, а не считать объект свободным только потому, что подтверждённый набор пока содержит его. Разные представления доступности нужны для подготовки и для сетевого состояния.
Приватность выбора
Объединение нескольких входов часто позволяет наблюдателю предположить общее управление. Это эвристика, у которой есть исключения, однако в обычном маршруте она полезна для анализа утечек. Кошелёк может сохранять метки происхождения и избегать ненужного объединения разных групп.
Для нашего читателя выход 80 000 мог появиться из личного накопления, а 20 000 — из публичной деятельности. Если их объединить без необходимости, две истории становятся связаны одной транзакцией. Цена курса ничего не сообщает об этой связи; она возникает из решения выбора входов.
Поэтому в досье зададим приоритеты: сначала разрешённость и достаточность, затем согласованный расход, затем политика группировки. Метки приложения не являются сетевым свойством, но помогают оператору не допустить случайного объединения. При ручном выборе нужно сохранить те же проверки сумм и получателя.
План решения
Для каждого варианта запишем список outpoint, число и тип входов, оценку размера, получателя, сдачу, абсолютную комиссию и причины выбора. Подписант сможет сопоставить пакет с этим планом. Если инструмент изменил входы после расчёта, требуется повторная сверка, а не использование старого согласования.
Сохранённый вариант выбора должен содержать причины исключения существенных кандидатов: недостаточность, неподходящая группа, недоступная подпись или конфликт. Это помогает другому оператору повторить решение без предположения, что кошелёк просто забыл часть баланса.
Механика подготовки кошельком отражена в walletcreatefundedpsbt, а данные доступных выходов — в listunspent. Теперь выбор монет можно объяснить как конкретный компромисс структуры и политики. Дальше разберём, как кошелёк получает множество связанных адресов из иерархии ключей.