Байтове
Байтове в биткойн: байт е осем бита, записани с два hex знака. Научете размерите на ключовете, ID-тата, сумите и полетата в блоковете.
От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.
Байт е група от осем бита и единицата, с която биткойн мери суровите си данни. Частният ключ е 32 байта, ID-то на трансакцията е 32 байта, а nonce-то в заглавието на блока е 4 байта. Щом можете да прочетете един байт, по-голямата част от суровите данни в трансакция или блок ви стават ясни.
Какво е бит?
Битът е най-малката част от данни в компютъра. Той има една от две стойности: 0 или 1. В хардуера бит е малка схема, която е изключена (0) или включена (1). Всяко число, буква и инструкция в компютъра е изградено от битове.
Колко бита има в байта?
Байтът съдържа осем бита. Осем бита дават 256 различни комбинации, от 00000000 до 11111111, така че един байт може да пази всяко цяло число от 0 до 255.
Стойността на всеки бит е степен на двойката. Ако броим отдясно, стойностите са 1, 2, 4, 8, 16, 32, 64 и 128.
Биткойн мери данните в байтове, а не в битове. Таблицата показва как се свързват мерните единици.
| Единица | Битове | Къде я срещате |
|---|---|---|
| Бит | 1 | Най-малката единица, 0 или 1 |
| Полубайт (nibble) | 4 | Половин байт, една hex цифра |
| Байт | 8 | Две hex цифри, от 00 до ff |
| 32 байта | 256 | Частен ключ, ID на трансакция или хеш на блок |
Програмистите понякога казват „nibble“ за половин байт. За биткойн рядко ви трябва думата.
Как се записва байт?
Байтът може да се запише в двоичен вид, с осем цифри, или в шестнадесетичен, с две. Байтът от схемата е 01101011 в двоичен вид и 6B в hex. В кода двоичният запис обикновено започва с 0b, а hex с 0x, така че 0b11111111 и 0xFF означават един байт.
Половин байт има 16 възможни комбинации, а hex има точно 16 цифри. Затова две hex цифри винаги покриват един цял байт. Страницата за шестнадесетичния запис обяснява как работят цифрите.
Hex не прави разлика между главни и малки букви, така че 6b и 6B са един и същ байт. Bitcoin Core извежда hex в малки букви, затова суровите данни обикновено изглеждат с малки букви.
Какво може да означава един байт?
Байтът сам по себе си няма значение. Полето, в което стои, решава какво означават осемте му бита. Байтът 01100111 е числото 103, буквата g по ASCII или hex цифрите 67.
Биткойн използва байтове за пет вида данни:
- Числа, например сума на изход или време на блок.
- Текст, например данните в изход OP_RETURN или тага на майнъра в coinbase.
- Битови полета, при които всеки бит включва или изключва една настройка.
- Отпечатъци, например хешове, които са важни само защото всяка стойност е уникална.
- Инструкции и дължини, например опкодове в скрипт и префикси compact size.
В скрипт байтът 76 е опкодът OP_DUP, а байтът ac е OP_CHECKSIG. Същият байт може да означава буква, число или инструкция, в зависимост от мястото, на което стои.
Кои полета се мерят в байтове?
Повечето полета в суровите данни имат фиксиран размер. Ако знаете размера, знаете къде свършва едно поле и къде започва следващото.
| Поле | Размер | Какво съдържа |
|---|---|---|
| Private key | 32 байта | 256-битово число |
| Compressed public key | 33 байта | Префиксен байт и 32-байтовата x координата |
| Public key hash | 20 байта | Къс отпечатък на публичния ключ, който се използва в адресите |
| Transaction ID (TXID) | 32 байта | Хеш, който назовава трансакцията |
| Block hash | 32 байта | Хеш, който назовава блока |
| Output amount | 8 байта | Стойност в сатоши |
| Output index (vout) | 4 байта | Кой изход от по-ранна трансакция се харчи |
| Sequence | 4 байта | Битово поле, което задава относително заключване във времето |
| Locktime | 4 байта | Най-ранната височина на блок или Unix време, от които трансакцията може да влезе в блок |
| Block version | 4 байта | Битово поле, с което майнърите сигнализират за ъпгрейди |
| Block time | 4 байта | Unix времево клеймо |
| Target | 32 байта | Пълният праг, под който трябва да е хешът на блока, като 256-битово число |
| Bits | 4 байта | Целта, записана в компактна форма |
| Block nonce | 4 байта | Числото, което майнърите сменят, докато търсят |
| Magic bytes | 4 байта | Началният маркер на мрежово съобщение, f9beb4d9 в mainnet |
| Message command | 12 байта | Името на съобщението, например version, допълнено с нули |
| Services | 8 байта | Битово поле с услугите, които нодът предлага |
| Signature | Около 71 до 73 байта | ECDSA подпис в DER формат, с байта за sighash |
| Schnorr signature | 64 байта | Taproot подпис, или 65 с необичаен байт за sighash |
| Compact size | От 1 до 9 байта | Брой или дължина, определени от първия байт (вижте по-долу) |
Колко големи са трансакциите и блоковете?
Трансакцията е редица от полета, едно след друго. Повечето имат фиксиран размер. Броевете и дължините на скриптовете ползват формата compact size, така че техният размер зависи от стойността, която пазят.
| Част | Размер | Какво съдържа |
|---|---|---|
| Version | 4 байта | Версията на трансакцията |
| Input count | От 1 до 9 байта | Броят входове, като compact size |
| Input | Поне 41 байта | TXID (32), vout (4), дължина и скрипт на scriptSig, sequence (4) |
| Output count | От 1 до 9 байта | Броят изходи, като compact size |
| Output | Поне 9 байта | Сума (8), дължина и скрипт на scriptPubKey |
| Witness data | Променлив | Само в SegWit трансакции: броят и дължините на елементите и самите елементи |
| Locktime | 4 байта | Най-ранната височина или време, от които трансакцията може да влезе в блок |
Трансакция в SegWit формат има и маркерен байт 00, и флагов байт 01, веднага след версията. Witness данните идват след изходите и преди locktime.
Блокът е по-прост. Първо идва заглавието, което винаги е 80 байта. След него идва броят трансакции като compact size, а после самите трансакции.
| Част | Размер | Какво съдържа |
|---|---|---|
| Block header | 80 байта | Version (4), previous block hash (32), merkle root (32), time (4), bits (4), nonce (4) |
| Transaction count | От 1 до 9 байта | Броят трансакции, като compact size |
| Transactions | Останалата част от блока | Всяка трансакция, една след друга |
Блок 0, първият блок, който някога е бил добит, показва същото разположение. Заглавието му е 80 байта, а броят трансакции е 01, един байт, защото в блока има една трансакция.
Какво са битовите полета?
Битовото поле събира няколко настройки в едно поле. Всяка настройка има свой бит, който е включен (1) или изключен (0). Три полета в биткойн работят така.
- Services, в съобщението
version. Всеки бит отбелязва услуга, която нодът предлага. Най-малкият бит, със стойност 1, означава, че нодът пази цялата верига. - Block version, в заглавието на блока. Съвременните версии започват с битовете
001. Майнърите задават още битове, за да покажат кои ъпгрейди поддържат, както е описано в BIP 9. Страницата за версията на блока обяснява сигнализирането. - Sequence, във всеки вход. Ако битът 31 е включен, sequence не задава относително заключване във времето. Битът 22 избира между блокове и време, а най-ниските 16 бита пазят стойността, както определя BIP 68.
За да проверите един бит в кода, използвайте побитово И с маска. services & 1 е различно от нула, когато най-малкият бит е включен.
Записва ли се текст в байтове?
Текстът не е често срещан в данните на биткойн, но се появява на няколко места:
- OP_RETURN изходи. Изходът OP_RETURN пази произволни данни след опкода. Тези данни често са ASCII текст.
- Coinbase. Майнърите обикновено слагат текстов таг в scriptSig на coinbase трансакцията, например името на своя пул.
- Message command. Всяко мрежово съобщение назовава вида си с 12 байта ASCII, допълнени с нули. Примери са
version,blockиtx. - User agent. Текстовото поле в съобщението
versionназовава софтуера на нода, напримерSatoshi:24.0.1.
Хешовете са ли просто байтове?
Хеш функцията връща фиксиран низ от байтове. Щом имате байтовете, тяхната единствена работа е да бъдат уникални. TXID, хешът на блока и хешът на публичния ключ работят като отпечатъци.
Хешът на блока има двойна роля. Той идентифицира блока, а майнърите го четат и като число, за да го сверят с целта. Magic bytes са друго нещо: f9beb4d9 маркира началото на всяко мрежово съобщение в mainnet, така че нодът вижда къде свършва едно съобщение и къде започва следващото.
Как се превръщат байтовете в код?
Повечето езици умеят три преобразувания: от байтове към hex текст, от hex текст към байтове и от байтове към цяло число. Редовете на Python по-долу правят и трите. Всеки коментар показва резултата.
# hex текст в байтове
raw = bytes.fromhex("f9beb4d9")
# байтовете обратно в hex текст: f9beb4d9
print(raw.hex())
# байтовете, прочетени като едно число: 4190024921
print(int.from_bytes(raw, "big"))
Аргументът "big" казва, че първият байт е старшият. Биткойн пази повечето си числа в обратния ред, затова прочетете страницата за little-endian, преди да превърнете поле от трансакция или блок.
Всеки TXID е 32-байтова стойност, записана с 64 hex знака. Страницата за реда на байтовете обяснява защо експлорърите често показват тези 64 знака обърнати.
В този раздел: Данни
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни