4. Блокчейн и доказательство работы

Транзакции объединяют вместе в структуру – блок.

Блоки связаны между собой: каждый следующий включает в себя хэш предыдущего, а также время создания блока.

Такая цепочка блоков была названа сервером меток времени

Но сейчас он нам больше известен как блокчейн.

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

И вы можете посмотреть информацию о любом блоке с момента запуска сети.

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

Нахождение хэша

Чтобы создать новый блок необходимо вычислить хэш его заголовка, причем он должен начинаться с определенного числа нулей – только такой блок будет принят сетью.

Требуется выполнить объем работы, экспоненциально зависящий от числа нулей, но для проверки найденного значения достаточно вычислить лишь один хэш.

Требуемое количество нулей в хэше – это сложность получения такого хэша. Однако для более точного подбора сложности было решено определить ее как некоторое значение, которое не должно превышаться хэшем.

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

Создатель нового блока получает награду – некоторое количество биткойнов, которое он отправляет на свой кошелек первой транзакцией в блоке. Эта транзакция называется coinbase, не стоит путать с одноименной биржей.

Заголовок блока

Основными параметрами заголовка блока являются хэш предыдущего блока, время создания и число-добавка nonce.

Поскольку хэш для одинаковых данных не может изменяться, то используется специальное поле nonce. Оно перебирается до тех пор, пока в результате не получится подходящий под текущую сложность хэш.

Вариантов nonce – около 4 миллиардов. Такое количество может быть легко перебрано, что если нужный хэш все еще не будет найден? В заголовке блока есть еще один изменяемый параметр: хэш-дерево Меркла, о нем будет написано в п. 6, сейчас можно представить его как хэш всех транзакций в блоке.

Следовательно, поменяв одну транзакцию мы можем изменить хэш дерева и перебирать nonce заново. Для этого в coinbase-транзакции есть отдельное поле, в которое создатель блока может написать любую информацию.

 

 

Определение основной цепочки блоков

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

Текущей цепочкой блоков считается самая длинная цепь, поэтому если кто-то попробует изменить содержимое блока 1 на схеме выше, то его хэш изменится, и, следовательно, придется подбирать новый хэш и для блока 2, что делает такую атаку едва ли реализуемой.

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

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

Если у атакующего вычислительная мощность больше, чем у всей остальной сети, то он сможет реализовать “Атаку 51%”, поддерживая свою цепь самой длинной. Но в противном случае “честная” цепь очень скоро станет длиннее.

Поэтому большинство сервисов считает транзакции подтвержденными только после генерации еще нескольких новых блоков: атакующий не сможет долго поддерживать самую длинную цепь.