Размер
Размер на трансакция в биткойн се мери в байтове, единици тегло и виртуални байтове (vB). Вижте формулата за тегло и лимита от 4,000,000 единици тегло.
От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.
Размерът на трансакцията може да се мери в три единици. Байтовете са реалният размер на данните, в хранилището и в мрежата. Единиците тегло (WU) определят колко трансакции се събират в блок. Виртуалните байтове (vB) са единиците тегло, разделени на четири, и с тях сравняваме таксите. Примерната трансакция 30dcd74b… е 226 байта, 574 единици тегло и 143.5 виртуални байта.
Колко байта има трансакцията?
Байтът е осем бита, а в шестнадесетичен запис се изписва с два знака. Затова броят на байтовете на трансакцията е половината от дължината на суровия ѝ шестнадесетичен запис. Ето суровата форма на примерната трансакция:
01000000000101dd40a8d7f105055e781afa632207f5d3c4b4f4cad9f0fb320d0f0aa8e1ba904b0000000000ffffffff021027000000000000160014858e1f88ff6f383f45a75088e15a095f20fc663f841c0000000000001976a9142241a6c3d4cc3367efaa88b58d24748caef79a7288ac02483045022100d66341c3e6ce846b92bedcf9bc673ab8e47b770c616618eb91009e44816f4c2f0220622b5ebf6afabee3f4255bbcb84609e1185d4b6b1055602f5eed2541e26324620121022ed6c7d33a59cc16d37ad9ba54230696bd5424b8931c2a68ce76b0dbbc222f6500000000
Тя има 452 знака, което прави 226 байта. Броят расте с всеки вход и изход, а размерът на всеки отключващ и заключващ скрипт прибавя към него. Байтовете са важни, когато данните се пращат през мрежата или се пазят в блоковите файлове.
Типични размери на стари (legacy) трансакции
Таблицата показва типичните размери на трансакции, които харчат и създават стандартни P2PKH изходи. Всеки вход е 147 или 148 байта, в зависимост от това дали подписът е 71 или 72 байта, а всеки изход е 34 байта. Всяка трансакция има и 10 байта постоянна част.
| Входове | Изходи | Размер в байтове |
|---|---|---|
| 1 | 1 | 191 или 192 |
| 1 | 2 | 225 или 226 |
| 2 | 1 | 338 до 340 |
| 2 | 2 | 372 до 374 |
Всеки допълнителен вход или изход увеличава размера. Трансакцията може, по принцип, да расте до размера на цял блок. Нодовете препращат по подразбиране само трансакции до 400,000 единици тегло, което са 100,000 виртуални байта, така че повечето портфейли остават далеч под този лимит. SegWit трансакциите следват друг модел, защото част от данните им се броят по друг начин.
Как се изчисляват единиците тегло?
Теглото е мярката, по която се ограничава блокът. Всяка част на трансакцията се умножава по 4 или по 1, а резултатите се събират. Това правило е въведено от SegWit в BIP 141. Данните без witness се броят четири пъти. Witness, маркерът и флагът се броят по веднъж.
Примерната трансакция има 116 байта без witness и 110 байта witness, в които влизат маркерът и флагът. Нейното тегло е:
116 × 4 + 110 × 1 = 574 единици тегло
Без отстъпката същите 226 байта биха тежали 904 единици. Witness спестява 330 единици, което е смисълът на правилото.
Като код изчислението е кратко. Тук total е пълният размер в байтове, а base е размерът без маркера, флага и witness:
def weight(total: int, base: int) -> int:
witness = total - base # маркерът, флагът и данните на witness
return base * 4 + witness
print(weight(226, 116)) # 574
Какъв е лимитът на блока?
Блок може да съдържа до 4,000,000 единици тегло. Преди SegWit лимитът е бил 1,000,000 байта, и всеки байт се е броял еднакво. Новият лимит е правило за тегло. Блок със SegWit трансакции може да е по-голям в байтове от стария лимит, стига теглото му да остане под тавана.
Майнърите затова пълнят блоковете по тегло. Правилото е в константите на Bitcoin Core, където MAX_BLOCK_WEIGHT е 4,000,000.
Правилото за тегло прави по-близки цените на създаването и на харченето на изход. Създаването изисква малко заключване, а харченето голям подпис. Броенето на witness данните с отстъпка доближава тези две цени.
Какво са виртуалните байтове?
Виртуалният размер, в виртуални байтове (vB), е теглото, разделено на четири:
виртуален размер = тегло ÷ 4
574 ÷ 4 = 143.5 vB
Теглото винаги е цяло число, защото кодът за консенсус работи с цели числа. Виртуалните байтове могат да са дробни, затова примерът е 143.5. Те поставят SegWit и legacy трансакциите на една и съща скала. Стара (legacy) трансакция няма witness, така че виртуалният ѝ размер е равен на размера в байтове.
Таксата на байт се смята във виртуални байтове. Трансакция от 200 vB, която плаща 10 sat/vB, плаща 2,000 сатоши. Страницата за таксата показва как работи това с реални трансакции.
Защо нодът показва цяло число?
Bitcoin Core закръглява виртуалния размер нагоре до цяло число, когато измерва трансакция. За примера това е 144 vB, а не 143.5. Закръгляването е в кода с политиките на Bitcoin Core, където формулата е (weight + 3) / 4 с целочислено деление. Вашето изчисление може да се отличава с дробна част заради това.
Как да проверите размера на трансакция?
Нодът показва и трите мерки за всяка трансакция, която познава. Изпълнете bitcoin-cli getrawtransaction <txid> 1 и потърсете тези полета:
size: размерът в байтове.vsize: виртуалният размер, закръглен нагоре, както описахме.weight: теглото в единици тегло.
Повечето експлорери показват същите стойности на страницата на всяка трансакция. Страницата за виртуалния байт и страницата за таксата на байт обясняват термините.
Обобщение
Байтовете мерят данните, единиците тегло мерят мястото в блока, а виртуалните байтове мерят цената за таксите. Witness се брои по една единица на байт вместо четири, така че трансакциите със SegWit остават леки по тегло. Лимитът на блока е 4,000,000 единици тегло, което е 1,000,000 виртуални байта. Портфейлите ползват тези размери, за да определят таксите преди подписване, както обяснява страницата за PSBT.
Източници
- BIP 141: изчисляване на размера на трансакцията дефинира правилото за тегло и множителите.
- Константите на консенсуса в Bitcoin Core задават лимита за тегло на блока.
- Кодът за политиките на Bitcoin Core закръглява виртуалния размер.
- Константите за политика на Bitcoin Core задават лимита за тегло по подразбиране за препращаните трансакции.
В този раздел: Трансакции
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни