Что такое блок?

Я знаю, что биткойн имеет цепочку блоков, которая, по моему мнению, представляет собой список блоков. Я знаю, что блок содержит много транзакций. Но я все еще очень не понимаю, что такое блок и как блок может быть функцией транзакций во время, предшествующее решению блока, и как блок может иметь любое количество транзакций до того, как он будет решен и заперты в.

Я также потерялся в процессе «решения» блока. Я знаю, что для этого требуются компьютеры, шифрующие транзакцию. Если блок состоит из нескольких транзакций, это означает, что вам нужно решить все транзакции, чтобы получить блок.

возможный дубликат bitcoin.stackexchange.com/questions/7330/…
@NickODell, похоже, но я думаю, что это больше о структуре блока, а другое - о том, как его построить с учетом состояния цепочки блоков.

Ответы (1)

В Bitcoin SE есть много вопросов о блоках, но, что примечательно, я не смог найти ни одного, в котором было бы четко указано, что такое блок.

Блоки состоят из двух вещей: заголовка блока и списка транзакций.

Блокировать:

  • Заголовок блока
    • Номер версии (4-байтовое целое число)
    • Идентификатор предыдущего блока (32-байтовый хэш)
    • Merkle Root (хэш 32 байта)
    • Время (4-байтовое целое число)
    • Сложность (4-байтовое целое число)
    • Nonce (4-байтовое целое число)
  • Список транзакций
    • Количество транзакций в списке
    • Tx1
    • Tx2
    • ...
    • TxN

В заголовке блока часть блока:

  1. Номер версии — это параметр, помогающий обновлять то, как сеть обрабатывает блоки.
  2. Ссылка на хэш предыдущего блока делает группу блоков «цепочкой блоков».
  3. Корень меркла — это хэш, который можно использовать для доказательства того, что транзакция находится в блоке, не предоставляя всех деталей блока (это немного сложно, см. здесь для получения дополнительной информации).
  4. Поле времени предназначено для того, чтобы показать сети, в какое время был решен блок, и помочь в расчете параметра сложности.
  5. Сложность (или nBitsкак она называется в коде) — это сокращение от того, насколько сложно решить блок. По сути, он кодирует целевое значение, и хэш блока (при обработке как 256-битного целого числа) должен быть меньше этого целевого значения, чтобы считаться решенным.
  6. Nonce (число, используемое один раз) — это просто целое число, которое майнеры могут многократно изменять, чтобы хешировать заголовок и каждый раз получать другой результат, надеясь получить хеш, который ниже значения сложности, закодированного предыдущим параметром.

Список транзакций довольно прост, это просто количество транзакций, а затем сами транзакции, объединенные вместе.

Возьмем, к примеру, блок генезиса. Необработанные байты:

0100000000000000000000000000000000000000000000000000000000000000000000003ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49ffff001d1dac2b7c0101000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Когда мы разбиваем это, мы можем видеть, что в нем:

01000000 // Версия
000000000000000000000000000000000000000000000000000000000000000000// Хэш предыдущего блока
3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a // Меркл Рут
29ab5f49 // Время
ffff001d // Сложность
1dac2b7c // одноразовый номер
01 // Количество транзакций
 Тх1:
 01000000010000000000000000000000000000000000000000000000000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000

Когда вы хэшируете заголовок блока генезиса, вы получаете:

000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f

Видите, как он начинается со всеми этими нулями? Это связано с тем, что было предпринято много-много попыток (каждый раз меняя одноразовый номер), пока майнеру не посчастливилось найти одноразовый номер, который делает хэш заголовка блока достаточно низким (посмотрите на хэш как целое число в шестнадцатеричном коде, с наиболее значащим значением). биты слева и наименее значащие справа).