vByte, скорочено vB, — одиниця віртуального розміру транзакції Bitcoin. Різні частини її даних враховуються по-різному. Гаманець використовує цей розмір для розрахунку комісії: більша транзакція або вища обрана ставка означає більшу загальну комісію.
Анна хоче надіслати Bitcoin, і гаманець пропонує ставку 2 sat/vB. Sat означає сатоші, найменшу одиницю біткоїна; vB позначає віртуальний розмір транзакції. Якщо готова транзакція має розмір 127 vB, комісія за цією ставкою становить 254 sat. Отже, ставка, яку також називають Fee Rate, — це не повна ціна переказу. Приклад пояснює розрахунок, а не рекомендує ставку для сьогоднішньої мережі. Сама сплата комісії також не гарантує конкретного часу підтвердження. [3] [5] [7]
Гаманець не витрачає баланс як одне число. Він використовує раніше отримані й досі невитрачені виходи транзакцій — UTXO. Кожен використаний вихід додає вхід; часто створюється ще й вихід, що повертає решту у ваш гаманець. Тому об’єднання багатьох дрібних надходжень може потребувати більше даних, ніж переказ більшої суми з одного надходження. Комісія — це сума вартостей входів мінус сума вартостей виходів. Цифровий підпис засвідчує право витратити вибрані кошти. Перед створенням підпису гаманець оцінює розмір; фактичну ставку визначають остаточна комісія та остаточний розмір. [6] [7]
Байт — звичайна одиниця обсягу даних. Однак для розрахунку комісії Bitcoin недостатньо просто порахувати всі байти однаково. SegWit відокремлює частину даних, які доводять право витрачати кошти, зокрема підписи. Ця частина називається witness. Байт базових даних додає до ваги транзакції 4 WU, а байт, доданий форматом запису з witness, — 1 WU. WU означає одиницю ваги. Допоміжні поля marker і flag цього запису враховуються з такою самою меншою вагою. Підписи однаково перевіряються: менша вага не дозволяє пропускати перевірки. [1] [2]
Серіалізація — це запис транзакції у вигляді точної послідовності байтів, яку комп’ютери можуть передавати й читати. Позначимо B розмір без witness, а T — повний розмір. BIP 141 визначає вагу формулою W = 3 × B + T. Базові дані вже входять до T, тому формула враховує їх чотири рази, а додані witness-дані — один. Це не вимірювання вартості платежу чи часу роботи процесора. [1]
Віртуальний розмір — це вага, поділена на 4 й округлена вгору до цілого числа: vsize = ceil(W / 4). ceil означає саме округлення вгору. Тому транзакція вагою 401 WU займає 101 vB. Округлюють результат для всієї транзакції. Якщо спочатку округлити кожен вхід окремо, а потім додати, результат може відрізнятися. [1]
Візьмемо умовні розміри B = 100 і T = 208 байтів. Формула дає W = 508 WU та vsize = 127 vB — розмір із початкового прикладу комісії. Але повна транзакція не стала меншою: її повний запис усе ще потребує передавання 208 байтів. Віртуальний розмір — зважена міра для обліку місткості й комісій, а не стиснення файлу. [1] [5]
Оглядач блоків — це застосунок для пошуку транзакцій і блоків певної мережі. Якщо транзакція не має witness-даних, B = T, а отже W = 4 × T. Тоді її базовий віртуальний розмір дорівнює повному розміру в байтах. Саме тому оглядач іноді показує однакові числа в обох полях розміру, а іноді різні. Для SegWit не можна просто поділити всі передані байти на чотири: різне зважування стосується конкретних частин даних. [1] [2]
Вузол — програма, що перевіряє транзакції та блоки й обмінюється даними з іншими учасниками мережі. Bitcoin Core v29.0 для деяких робочих правил використовує скоригований розмір ceil(max(W, sigop_cost × bytes_per_sigop) / 4). sigop_cost — зважена вартість операцій перевірки підписів; bytes_per_sigop — параметр цих правил. max обирає більше значення. Незвично складна перевірка може збільшити розмір, який враховують ці правила. Це не змінює вагу за BIP 141 чи правила дійсності блоків. Йдеться про деталь зазначеної версії, а не про додатковий обов’язковий розрахунок для звичайного платежу. [1] [4]
Платіж може витрачати вихід іншої, ще не підтвердженої транзакції. Оцінюючи такий пакет, можна ділити відповідну загальну комісію на суму відповідних віртуальних розмірів. Просте середнє окремих ставок ігнорувало б різницю розмірів. Bitcoin Core v29.0 також враховує місцеві зміни пріоритету й не рахує повторно транзакції, які вже перебувають у його черзі очікування. Висока спільна ставка не скасовує інших правил і не гарантує прийняття чи підтвердження. [4] [8]
Перед надсиланням зіставте ставку із загальною комісією та оцінкою розміру. Після створення транзакції decoderawtransaction може показати фактичні поля size, vsize і weight: байти, віртуальний розмір та вагу. Для звичайного платежу не потрібно рахувати формули вручну. Не плутайте vByte зі схожою назвою CompactSize: це кодування цілого числа змінної довжини. Воно не є іншою назвою vByte чи способом зменшити транзакцію. [5] [6]
Для повної картини прочитайте також Block Weight, Compact Blocks, Block Propagation, Initial Block Download, Bitcoin, SegWit. На цю статтю також посилаються Compact Blocks, Pruned Node, Block Weight, Package Relay.