Coin Selection — процедура кошелька, выбирающая UTXO для выходов и комиссии транзакции. Это локальное решение, а не правило консенсуса, предписывающее всем кошелькам одинаковый алгоритм.
Каждый вход тратит конкретный UTXO целиком. Разница между суммами входов и выходов является комиссией; возвращаемой отправителю сумме нужен отдельный выход. В условном примере вход 100000 sat, платёж 60000 sat и комиссия 1000 sat оставляют сдачу 39000 sat. [Bitcoin Developer Guide — Transactions]
Одной номинальной суммы недостаточно: добавление входа увеличивает транзакцию. Эффективная стоимость вычитает из UTXO затраты на его трату по выбранной ставке. Условный вход 10000 sat с оценкой 68 vB при 10 sat/vB даёт 9320 sat; оставшимся частям транзакции всё ещё нужна собственная комиссия. Реальный размер зависит от скрипта и подписи. [Bitcoin Core — Coin selection implementation] [Bitcoin Core 29.0 — Transaction creation]
Branch-and-bound (BnB) перебирает комбинации входов для платежа без сдачи. Целевой диапазон допускает избыток до стоимости создания и последующей траты сдачи; избыток становится комиссией. Точное совпадение не обязательно. Ограниченный поиск может не найти решение или глобальный оптимум. [Bitcoin Core — Coin selection implementation]
Bitcoin Core 29.0 рассматривает BnB, Knapsack и Single Random Draw (SRD); CoinGrinder подключается, когда эффективная ставка более чем втрое превышает долгосрочную. Кандидаты сравниваются по waste metric. При вычитании комиссии из выходов BnB пропускается. Это описание конкретной версии, а не универсального порядка алгоритмов всех кошельков. [Bitcoin Core 29.0 — Transaction creation]
Waste metric сравнивает стоимость входов сейчас и по долгосрочной ставке вместе со стоимостью сдачи или избытком, отданным в комиссию. Долгосрочная ставка — предположение, а не прогноз. Консолидация может сократить число будущих входов, но стоит комиссии сегодня и связывает использованные выходы; минимальная текущая комиссия поэтому не единственная цель. [Bitcoin Core — Coin selection implementation] [Bitcoin Design — Coin selection and privacy]
Совместная трата разных поступлений даёт аналитикам подсказку для их связывания, а не доказательство одной личности. Coin Control и метки помогают разделять контексты платежей. BIP 329 описывает перенос меток и метаданных возможности траты; сам он не выбирает монеты, а экспорт может раскрывать чувствительные связи. Даже отсутствие сдачи не гарантирует анонимность. [BIP 329 — Wallet Labels Export Format] [Bitcoin Design — Coin selection and privacy]
Выбор должен учитывать возможность траты, подтверждения, заблокированные выходы и ограничения транзакции. В RPC walletcreatefundedpsbt из Core 29.0 include_unsafe допускает также рискованные неподтверждённые входы; если их транзакции исчезнут, созданный платёж может стать недействительным. Неподтверждённые предки могут требовать дополнительной комиссии. Большой баланс сам по себе не гарантирует подходящую комбинацию входов. [Bitcoin Core 29.0 — Transaction creation] [Bitcoin Core 29.0 — walletcreatefundedpsbt RPC]
В walletcreatefundedpsbt из Core 29.0 входы можно задать через txid и vout; add_inputs управляет добавлением других. fee_rate использует sat/vB, а feeRate — BTC/kvB. Полученный PSBT готовит дальнейшую обработку, а не является подтверждённым платежом. Перед подписанием проверяют получателей, общую комиссию и собственную сдачу; ручной выбор не снимает эту ответственность. [Bitcoin Core 29.0 — walletcreatefundedpsbt RPC]
Для полной картины прочитайте эту статью вместе с UTXO, Coin Control, Выход сдачи, Fee Rate, PSBT, Приватность в Bitcoin. На эту статью также ссылаются Watch-only Wallet, Выход сдачи, Inventing Bitcoin.