142 / 736SELECT

Coin Selection

Вибір UTXO для транзакції

Під час оплати гаманець обирає, які раніше отримані суми витратити. Від цього залежать комісія, решта та те, що інші зможуть дізнатися про ваші кошти.

Coin Selection — це вибір коштів, з яких гаманець формує транзакцію Bitcoin. Баланс не є єдиним суцільним залишком: він складається з окремих невитрачених виходів попередніх транзакцій, які називають UTXO. Гаманець має вибрати достатньо коштів для платежу й комісії. Зазвичай це відбувається автоматично; ручний вибір називається Coin Control. Мережа перевіряє дійсність готової транзакції, але не вимагає від усіх гаманців однакового способу вибору.

UTXO: калькулятор консолідаціїПорівняйте модельні комісії за спільне витрачання UTXO пізніше з консолідацією сьогодні та витрачанням одного входу згодом.

Анна хоче заплатити 60000 sat. Платіж готує її гаманець — застосунок або пристрій, що дає змогу отримувати й надсилати біткоїни. Скорочення sat означає сатоші, найменшу одиницю, у якій записують суми в біткоїн-транзакціях. Вона має UTXO вартістю 100000 sat. Як і з банкнотою, не можна просто відняти від нього частину: вхід нової транзакції витрачає цей вихід повністю. Транзакція створює вихід на 60000 sat для продавця, а за комісії 1000 sat — ще один на 39000 sat для Анни. Цей другий вихід є рештою, або change. Це не пізніше повернення грошей продавцем: вона виникає безпосередньо в її власній транзакції. Комісія дорівнює різниці між сумою входів і всіх виходів. [1] [7]

Гаманець може оплатити ту саму покупку різними UTXO. Однак більше входів зазвичай означає більше даних, а отже, вищу комісію за однакової ставки. Комісія не є відсотком від суми переказу. Вона залежить від віртуального розміру транзакції у vB, тобто віртуальних байтах, які враховують різну вагу її складових. Візьмімо UTXO на 10000 sat, вхід якого додає приблизно 68 vB. За ставки 10 sat/vB цей вхід коштує 680 sat, залишаючи 9320 sat для решти платежу. Це його ефективна вартість. Інші частини транзакції теж мають власні витрати; фактичний розмір входу залежить від умов витрачання, записаних у скрипті, та даних підпису. Скрипт — коротка програма, що описує умови витрачання. Для звичайного платежу гаманець за допомогою приватного ключа, секретного числового значення, створює цифровий підпис — дозвіл на витрату, який можна перевірити. [2] [3] [7]

Анна могла поступово отримати багато дрібних сум. Їх об’єднання в більший власний вихід називають консолідацією. Згодом їй може знадобитися менше входів, але об’єднання вже сьогодні коштує комісії й публічно пов’язує використані виходи. Тому автоматично об’єднувати все — не найкращий підхід. Bitcoin Core також порівнює витрати за допомогою waste metric: оцінки, що враховує різницю між вартістю входів зараз і за умовної довгострокової ставки, а також створення та подальше витрачання решти або надлишок, відданий як комісію. Довгострокова ставка — робоче припущення, не прогноз. Така оцінка вимірює витрати, а не приватність. [2] [6]

Анна позначила одне надходження як зарплату, а інше — як подарунок. Спільне витрачання дає спостерігачеві блокчейну підказку, що вони пов’язані. Це не доводить, що всі входи належать одній людині: транзакції можуть створювати кілька учасників разом. Coin Control дозволяє вибрати конкретні UTXO, а мітки допомагають пам’ятати їхнє походження. Мітка — це нотатка в гаманці, а не повідомлення в блокчейні. BIP 329 описує перенесення таких нотаток і відомостей про те, чи вважає гаманець певний вихід придатним для витрачання. Це локальне налаштування гаманця, яке не змінює правил мережі Bitcoin. Сам формат коштів не обирає. Експорт міток може розкрити чутливі зв’язки, і навіть платіж без решти не гарантує анонімності. [4] [6]

Не весь показаний баланс обов’язково доступний негайно. Деякі виходи гаманець свідомо виключив, інші чекають підтвердження або виконання умов витрачання. Вибір також має враховувати обмеження розміру й ваги транзакції. Якщо витрачається непідтверджене надходження, новий платіж залежить від попередньої транзакції, що його створила; у цьому контексті її називають предком. Для підтвердження всього ланцюжка може знадобитися додаткова комісія. RPC, інтерфейс керування Bitcoin Core 29.0 з програм, містить у walletcreatefundedpsbt параметр include_unsafe. Він дозволяє включати ризиковані непідтверджені входи. Якщо початкову транзакцію замінять так, що потрібний вихід зникне, залежний платіж не зможе підтвердитися. Саме лише тимчасове видалення початкової транзакції з пам’яті вузла не змінює її дійсності. [3] [5]

Як гаманець перебирає варіанти? Branch-and-bound, скорочено BnB, випробовує комбінації входів і відкидає гілки пошуку, які не можуть дати придатний результат. Мета — скласти платіж без окремого виходу решти. Точний збіг не обов’язковий: дозволений діапазон включає надлишок аж до вартості створення й подальшого витрачання решти. Цей надлишок стає комісією, а не залишається десь прихованим у гаманці. Тому платіж без решти не обов’язково є найдешевшим. Кількість спроб обмежена, і пошук може не знайти наявне рішення або найкращу з усіх комбінацій. [2]

Bitcoin Core 29.0 порівнює варіанти від BnB, Knapsack і Single Random Draw (SRD) — різних способів пошуку придатного набору входів. CoinGrinder додається, коли ефективна ставка більш ніж утричі перевищує довгострокову; цей метод шукає набір із малою вагою та рештою. Отримані варіанти порівнюються за поясненою вище waste metric. Якщо користувач вирішує відняти комісію від сум для одержувачів, BnB пропускається. Це опис конкретної версії, а не обов’язкова процедура для всіх гаманців і не твердження про найновіший випуск. [3]

Для звичайної оплати не потрібно знати програмні параметри. Але перед підписанням потрібно розуміти одержувача, суму, загальну комісію та власну решту. Для досвідчених користувачів: walletcreatefundedpsbt у Bitcoin Core 29.0 дозволяє задати входи через txid, ідентифікатор початкової транзакції, та vout, порядковий номер її виходу. add_inputs визначає, чи може гаманець додати інші входи. Зважайте на різні одиниці: fee_rate використовує sat/vB, тоді як feeRate — BTC/kvB, тобто біткоїни за 1000 віртуальних байтів. Результат — PSBT, формат для передавання підготовленої транзакції на підпис. Саме створення PSBT нічого не надсилає й не підтверджує платіж. Ані ручний вибір, ані цей формат не гарантують правильності одержувача чи дійсності непідтверджених входів. [5]

Для повної картини прочитайте також UTXO, Coin Control, Change Address, Fee Rate, PSBT, Приватність у Bitcoin. На цю статтю також посилаються Watch-only Wallet, Change Address, Inventing Bitcoin.

DOC · 001Bitcoin Developer Guide — TransactionsДокументація DOC · 002Bitcoin Core — Coin selection implementationПервинне джерело DOC · 003Bitcoin Core 29.0 — Transaction creationПервинне джерело DOC · 004BIP 329 — Wallet Labels Export FormatСпецифікація DOC · 005Bitcoin Core 29.0 — walletcreatefundedpsbt RPCДокументація DOC · 006Bitcoin Design — Coin selection and privacyДокументація DOC · 007Bitcoin Developer Guide — WalletsДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада