Ред на байтовете
Ред на байтовете в биткойн: ID-тата на трансакциите и хешовете на блоковете се показват с обърнати байтове в експлорърите и RPC. Научете двата реда.
От Dimitar Zurnov · Обновено на 4 ноември 2026
Адаптирано от Learn Me a Bitcoin на Greg Walker.
Биткойн показва ID-тата на трансакциите и хешовете на блоковете с обърнати байтове. Суровите данни използват естествения ред: 32-те байта точно така, както ги връща хеш функцията. Експлорърите и RPC на Bitcoin Core използват обратния ред, същите байтове, прочетени отзад напред. Когато копирате хеш от суровите данни в полето за търсене, първо обърнете байтовете му.
Какъв е естественият ред на байтовете?
Естественият ред е изходът на хеш функцията, прочетен отляво надясно. Програмистите го наричат вътрешен или роден ред. Суровите трансакции и заглавията на блоковете използват именно него.
Две части от суровите данни използват естествения ред:
- Входове. Всеки вход сочи към по-ранна трансакция чрез нейния TXID, в естествен ред.
- Заглавия на блокове. Полето previous block hash държи хеша на предишния блок, в естествен ред.
Хешът на генезис блока, блок 0, в естествен ред е 6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000. Петте нулеви байта са в десния край. Обърнатата форма, с нулите отпред, е тази, която хората търсят.
Какъв е обратният ред на байтовете?
Обратният ред е същите 32 байта, прочетени от другия край. Експлорърите, полетата за търсене и RPC извикванията го използват, затова се нарича още RPC или показан ред. Някои текстове го наричат „network byte order“, но този термин обикновено означава big-endian, затова тук го избягваме. Хешът на генезис блока става 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f. Това е формата, която нашият експлорър показва за блок 0.
Bitcoin Core връща хешовете в този ред. Някои текстове наричат естествения ред „little-endian“. Това име важи за числата, а хешът е низ от байтове, а не число. Страницата за little-endian обяснява тази отделна идея.
Кой ред къде се използва?
| Къде сте | Ред | Пример |
|---|---|---|
| Суров вход на трансакция | Естествен | Предишен TXID c997a5…3704 |
| Сурово заглавие на блок, предишен хеш на блок | Естествен | b91fd2b0…00000 |
| Сурово заглавие на блок, merkle root | Естествен | 330b3201…0908e38 |
| Търсене или адресно поле в експлорър | Обратен | 0437cd7f…97c9 |
Bitcoin Core RPC, например getblockhash |
Обратен | 000000000019d6…ce26f |
Как заглавието на блок пази хешовете си?
Заглавието на блок 717,664 пази хешовете си в естествен ред. Полето previous block hash държи хеша на блок 717,663. Обърнете тези 32 байта и получавате хеша, който експлорърите показват за блок 717,663.
Предишен хеш, суров: b91fd2b09d4a8238ad4c814e4fa0ab9ed34bf0f75a3a00000000000000000000
Предишен хеш, експлорър: 000000000000000000003a5af7f04bd39eaba04f4e814cad38824a9db0d21fb9
Същото заглавие пази merkle root в естествен ред. Експлорърите показват този корен обърнат.
Merkle root, суров: 330b32016c8176153071283d3e5fe87c2318b3fd41d6ca1b1a8bf12670908e38
Merkle root, експлорър: 388e907026f18b1a1bcad641fdb318237ce85f3e3d2871301576816c01320b33
Как трансакцията пази ID-тата си?
Трансакцията в блок 170 е една от най-известните в блокчейна. Сатоши Накамото е изпратил 10 BTC от нея на Hal Finney, а другият изход от 40 BTC се е върнал при Сатоши. Хешът на суровите ѝ байтове е 169e1e83…4f18f4 в естествен ред. Обърнат, той е f4184fc5…9e16, TXID-то, което търсите в експлорър. Отворете тази трансакция, за да я видите.
Входът ѝ харчи по-ранен изход. Той пази хеша на тази трансакция като c997a5…3704 в естествен ред. Обърнат, хешът е 0437cd7f…97c9, TXID-то на трансакция от блок 9. Отворете онази по-ранна трансакция, за да видите изхода, който се харчи.
Защо байтовете са обърнати?
Сатоши никога не е обяснил избора. Причините по-долу са обичайните обяснения, а не документирани решения.
Биткойн третира хеша на блока като число, защото майнърът проверява дали хешът е под целта. Естествените байтове, прочетени като little-endian цяло число, дават това число. Записани в естествен ред, байтовете изглеждат обърнати за хората. Затова показаният вид слага първо най-значимите байтове.
За генезис блока хешът, прочетен така, е 10628944869218562084050143519444549580389464591454674019345556079. Целта за трудност 1 е 26959535291011309493156476344723991336010898738574164086137773096960. Хешът е по-малък, следователно е под целта.
ID-тата на трансакциите също са обърнати, въпреки че биткойн никога не ги сравнява като числа. Обичайното обяснение е последователността: едно правило за двата вида хешове е по-просто от две. Hal Finney, ранен разработчик на биткойн, е твърдял, че хешът е просто низ от байтове. Според него обръщането му е толкова безсмислено, колкото обръщането на изречение.
Защо не се промени?
Разработчиците биха искали един ред навсякъде, защото е по-прост. Но експлорърите, портфейлите и инструментите ползват обратната форма от години. Промяната би объркала повече хора, отколкото би помогнала, затова новите разработчици я учат като една от особеностите на биткойн.
Обърнат ли е и merkle root?
Да, когато експлорърите го показват. Заглавието на блока пази merkle root в естествен ред, както пази и другите хешове. Рядко търсите merkle root, така че това почти не създава проблеми. Знайте правилото, когато четете сурово заглавие.
Как се обръщат байтовете в код?
Обръщайте байтовете, а не знаците. Обръщането на hex низа знак по знак дава грешна стойност. Вземете 6fe2, което са два байта, 6f и e2. Обръщането на знаците дава 2ef6, което са два други байта. Обръщайте двойките знаци.
h = "6fe28c0ab6f1b372c1a6a246ae63f74f931e8365e15a089c68d6190000000000"
print(bytes.fromhex(h)[::-1].hex())
# 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
В кода пазете естествения ред и обръщайте само когато показвате хеш или го търсите. Справката за заглавието на блока на developer.bitcoin.org изброява всяко поле на заглавието, включително двата хеша.
Накратко какво трябва да запомните?
Суровите данни ползват естествения ред, а хората ползват обратния. Байтовете са едни и същи и в двата. Когато местите хеш между сурова трансакция и поле за търсене, обръщайте 32-те му байта. Започнете с байтовете, ако ви трябва припомняне какво е байт.
В този раздел: Данни
Целият курс „Биткойн от нулата“
Нещо не изглежда наред? Кажете ни