Change Address — адреса, яку гаманець використовує для повернення решти під час платежу. Біткоїн витрачає вибрані отримані суми повністю. Після віднімання платежу й комісії залишок зазвичай надходить у новий власний вихід гаманця. Гроші залишаються вашими, але тепер записані в іншому виході й часто на новій адресі.
Аліса раніше отримала 120 000 sat, найменших одиниць біткоїна, і хоче заплатити 100 000 sat. У нашому прикладі її кошти — один UTXO, тобто невитрачений вихід попередньої транзакції. Він стає входом платежу та витрачається повністю. За комісії 2 000 sat одержувач отримає 100 000 sat, а залишок 18 000 sat надійде в новий вихід гаманця Аліси. Це нагадує оплату великою купюрою з отриманням решти, але обидві суми розподіляються в одній транзакції. Аліса не чекає, поки одержувач щось поверне. Гаманець зазвичай сам вибирає адресу решти. Тому оглядач може показувати дві адреси призначення, хоча Аліса платила одній людині. Після підтвердження решта є новим UTXO з власним ідентифікатором виходу outpoint, а не невикористаною частиною старого виходу. Outpoint поєднує ідентифікатор транзакції txid із позицією виходу в цій транзакції. Надалі нею можна користуватися як іншими власними коштами. [1]
Скрипт scriptPubKey задає умови витрачання виходу. Він не пояснює, навіщо ви надіслали гроші. Блок містить суми та скрипти scriptPubKey, а не позначки платника, одержувача чи решти. Гаманець розпізнає власні виходи для решти за записами про виведення адрес; оглядач блокчейну або аналітик лише оцінює їхнє призначення. Ні порядок виходів, ні припущення, що другий вихід є рештою, не є надійними. Транзакція може не мати решти, містити один вихід для решти, кілька виходів під контролем відправника або виходи кількох учасників. Тому позначення change виражає зв’язок виходу з гаманцем. Це не окрема властивість, записана в протоколі. [1]
Евристика — припущення за непрямими ознаками. Payjoin і CoinJoin дозволяють кільком учасникам разом скласти транзакцію, тому прості припущення можуть бути хибними. BIP — документ із технічною пропозицією або стандартом. Поширені евристики вважають рештою, наприклад, вихід із таким самим типом скрипту, як у входів, неокруглену суму, нову адресу або суму, що відповідає обчисленому залишку. Для звичайного платежу з двома виходами такі припущення можуть спрацьовувати й пов’язувати подальші витрати, але для кожного є контрприклади. BIP78 Payjoin навмисно порушує як припущення про спільного власника входів, так і розпізнавання решти за типом скрипту або округленою сумою. CoinJoin, пакетні платежі та перекази між власними адресами додають неоднозначності. Оцінка має вказувати ступінь невизначеності та докази, на які вона спирається; сама евристика не є доказом, що випливає з протоколу, або доказом юридичного права власності. [4] [14]
PSBT — пакет із проєктом транзакції та додатковими даними, яким обмінюються гаманець і пристрій підписування. Multisig вимагає дозволу за правилом із кількома ключами. Дані про виведення ключів за BIP32 у виходах PSBT дозволяють апаратному або автономному пристрою підписування перевірити запропоновану решту. Пристрій має самостійно вивести відповідний вихід і перевірити, що він відповідає тим самим правилам гаманця. BIP174 описує перевірку як для одного ключа, так і для Multisig; за кількох підписів недостатньо, щоб вихід містив один локальний ключ. Зловмисний координатор, який формує транзакцію, може замінити решту власним виходом або приховати залишок у завищеній комісії. Тому перед підписанням перевірте на довіреному екрані виходи одержувачів, загальну комісію та кожен заявлений вихід для решти. [5]
Для розрахунку позначимо вибрані кошти I, платежі одержувачам R, комісію F, а решту C: C = I − R − F. RPC — програмний інтерфейс для надсилання команд вузлу. Coin Selection, тобто вибір UTXO, одночасно визначає входи, комісію та можливу решту. Якщо комбінація входів точно відповідає потрібній сумі, вихід для решти не потрібен. В інших випадках гаманець порівнює залишок із витратами на створення виходу та його подальше витрачання. RPC fundrawtransaction у Bitcoin Core може додати щонайбільше один вихід для решти та повертає його позицію. Під час надсилання всіх вибраних коштів одержувачам решту навмисно не створюють. Ручний вибір за допомогою Coin Control змінює використані входи, а отже й розмір решти, але кожен вибраний вхід витрачається повністю. Тому перевіряйте підсумкові входи, суми одержувачів, комісію та решту, а не лише суму платежу. [9] [10] [13]
HD Wallet виводить багато ключів і адрес з одного початкового секрету. Шлях виведення визначає, яку адресу обчислити; BIP позначає документ із технічною пропозицією або стандартом. HD Wallet зазвичай виводить адреси для отримання коштів із зовнішньої гілки, а адреси для решти — із внутрішньої. BIP44 позначає change=0 як зовнішню гілку, а change=1 — як внутрішню. Для облікового запису з нативним SegWit цьому відповідають, наприклад, шляхи m/84'/0'/0'/0/i та m/84'/0'/0'/1/i. Це домовленість між реалізаціями гаманців, а не правило консенсусу; гаманець на основі дескрипторів може використовувати інші правила. Нова внутрішня адреса обмежує повторне використання адрес. Повернути решту на початкову адресу цілком допустимо, але це пов’язує історію платежів і може полегшити її зіставлення з конкретною особою. [2] [3]
Позначення xpub нижче означає розширений публічний ключ: він дозволяє виводити дочірні публічні дані, але сам не може підписувати платежі. Seed — секретне початкове значення для виведення ключів. Дескриптор виходу описує тип скрипту, ключі, дані про їхнє походження та правило виведення наступних адрес. Пара wpkh([fingerprint/84h/0h/0h]xpub…/0/*) і …/1/* може описувати гілку отримання та гілку решти; BIP389 дозволяє подати кілька гілок спільним записом. Прапорець internal указує гаманцю, який дескриптор використовувати для решти, але не змінює самого результуючого скрипту. Під час відновлення самого seed може бути недостатньо, щоб знайти всі кошти. Без даних про обліковий запис, тип скрипту та спосіб виведення адрес гаманець може пропустити дійсні виходи для решти, хоча необхідні ключі все ще існують. [6] [7] [8]
Dust означає дуже малий вихід, який оцінюють за правилами вузла щодо ретрансляції транзакцій. Відповідний поріг обчислюють на основі типу виходу, оцінки розміру даних для його подальшого витрачання та налаштовуваної ставки dust relay feerate. Це не єдина універсальна кількість satoshi й не заборона, встановлена консенсусом. Гаманець може відмовитися від решти навіть вище цього порога, якщо створення виходу та його подальше витрачання коштуватимуть більше, ніж сума повернення. Такий поріг економічної доцільності залежить від поточної ставки комісії, оцінки майбутньої ставки та розміру скрипту. Відмова від створення решти збільшує поточну комісію; натомість надто малий вихід згодом може виявитися невиправдано дорогим для витрачання. [12]
Replace-by-fee (RBF) замінює непідтверджену транзакцію іншою транзакцією з вищою комісією. RPC bumpfee у Bitcoin Core може покрити різницю, зменшивши решту, додавши входи або створивши новий вихід для решти. Якщо решта опуститься нижче порога, визначеного правилами вузла чи економічною доцільністю, вона може зникнути. Витрачання непідтвердженої решти створює дочірню транзакцію, залежну від початкової; заміна початкової транзакції може зробити цей зв’язок недійсним. Команда bumpfee відмовить у заміні, якщо гаманець або mempool вузла, тобто його набір непідтверджених транзакцій, уже містить транзакцію, яка витрачає вихід початкового платежу. CPFP (Child Pays for Parent) створює дочірню транзакцію замість заміни початкової. Вона витрачає вихід початкового платежу під контролем гаманця та сплачує вищу комісію. Так зростає спільна ставка комісії обох транзакцій, що заохочує майнерів підтвердити їх разом. Поки питання замін не врегульоване, не вважайте непідтверджений txid або ідентифікатор виходу outpoint остаточними. [11] [15]
Під час відновлення потрібно знайти адреси отримання та адреси решти. У звичайному гаманці з одним підписом для цього зазвичай достатньо правильної Seed Phrase (слова відновлення), використовуваної passphrase, якщо вона була, та сумісних налаштувань. Seed — секретне початкове значення для виведення ключів; passphrase — додатковий пароль, якщо ви його встановлювали. Отже, не кожному користувачеві потрібно вручну записувати дескриптори. За власних налаштувань або Multisig, де дозвіл залежить від кількох ключів, самих слів може не вистачити. Збережіть також опис гаманця: мережу, обліковий запис, тип скрипту, правила виведення адрес, а для Multisig — розширені публічні ключі xpub усіх учасників, їхній порядок і потрібну кількість підписів. Без гілки /1/* відновлення може пропустити решту й показати менший баланс. Перевіряйте відомі адреси та виходи обох гілок, діапазон виведення й початок сканування історії. Тест має підтвердити й можливість підготувати та правильно підписати платіж. [2] [6] [7]
Для повної картини прочитайте також Біткоїн-адреса, UTXO, Coin Control, Гаманець, Coin Selection, HD Wallet. На цю статтю також посилаються Біткоїн-адреса, Coin Control, Приватність у Bitcoin, Псевдонімність.