Введение в технологию Блокчейн
Шрифт:
Вспомните, что хеш заголовка блока должен начинаться с большого количества нулей для того, чтобы блок был действительным.
Доказательство работы подразумевает, что хэш заголовка блока должен быть меньше указанного.
Другой способ сказать это, что хэш заголовка блока должен начинаться с определенного количества нулей.
Любой блок, заголовок которого не создает хэш, который меньше целевого значения, будет отклонен сетью.
Целевое
Заголовок также содержит значение «nonce», которое изменяется майнером, чтобы хэш заголовка блока был меньше целевого значения.
Заголовок содержит отметку времени и целевое значение, которое определяет трудность нахождения этого блока.
Таким образом, если после того, как вы обработали каждую транзакцию и нашли корень дерева Merkle, добавили его в заголовок блока с хешем предыдущего блока и nonce, хэшировали заголовок и создали значение, которое с правильным количеством нулей не попадает в указанный целевым значением диапазон, тогда изменяется значение nonce, заголовок блока снова хэшируется и так до тех пор, пока хэш заголовка блока не будет меньше целевого значения.
Заголовок – это единственное, что хэшируется во время майнинга.
Чтобы проверить цепочку блоков, нам нужно только посмотреть на заголовки.
Единственными данными транзакций, включенными в заголовок, является корень дерева транзакций – поле «mrkl_root».
Как я уже сказал, блок содержит специальную транзакцию в дереве Merkle, называемую транзакцией «coinbase».
Здесь происходит создание новых монет в Биткойне.
Эта транзакция выглядит как обычная транзакция, но имеет несколько отличий:
Она всегда имеет один вход и один выход, при этом вход не тратит предыдущий выход и, следовательно, содержит нулевой хэш указатель, так как он чеканит новые биткойны и не тратит существующие монеты.
Также стоимость выхода в настоящее время составляет около 6,25 биткойнов.
Выходное значение – это доход майнера от блока.
Оно состоит из двух компонентов: награды за добычу блока, которая устанавливается системой, и которая делится пополам каждые 210 000 блоков (около 4 лет) и комиссионных сборов, взимаемых с каждой транзакции, включенной в блок.
Также coinbase транзакция содержит специальный параметр coinbase, который абсолютно произволен – майнеры могут записывать туда все, что захотят.
Известно, что в самом первом блоке, добытом в Биткойне, параметр coinbase ссылался на историю в газете Times of London, в которой участвовал канцлер, спасающий банки.
Это интерпретировалось как политический комментарий о мотивации для запуска биткойн.
Это также служит доказательством того, что первый блок был добыт после того, как газета вышла 3 января 2009 года.
Также параметр coinbase может использоваться для уведомления майнерами о поддержке различных новых функций.
Чтобы лучше понять формат блока и формат транзакции, лучше всего изучить цепочку блоков.
Есть много веб-сайтов, которые делают эти данные доступными, например, blockchain.info.
Вы
можете посмотреть графики транзакций, посмотреть, какие транзакции тратят другие транзакции, искать транзакции со сложными сценариями и просматривать структуру блоков и видеть, как блоки ссылаются на другие блоки.Поскольку цепочка блоков представляет собой структуру публичных данных, разработчики создали красивые инструменты для ее графического анализа.
Сеть Bitcoin
До сих пор мы говорили о способности участников публиковать транзакцию и вводить ее в цепочку блоков, как будто это происходит по волшебству.
На самом деле это происходит с помощью сети Биткойн.
Это одноранговая сеть, и она наследует многие идеи одноранговых сетей.
В сети Bitcoin все узлы равны.
Здесь нет иерархии, и нет особых узлов или главных узлов.
Эта сеть работает через протокол TCP и имеет случайную топологию, где каждый узел связан с другими случайными узлами.
Новые узлы могут присоединиться в любое время.
Фактически, сегодня вы можете скачать клиент Bitcoin, развернуть свой компьютер в качестве узла, и он будет иметь равные права и возможности, как и любой другой узел в сети Bitcoin.
Сеть меняется со временем и очень динамична из-за входа и выхода узлов.
Не существует явного способа покинуть сеть.
Вместо этого, если узел не был слышен некоторое время – три часа – это длительность, которая жестко закодирована в большинстве клиентах – другие узлы начинают забывать этот узел.
Таким образом, сеть обрабатывает узлы, переходящие в офлайн режим.
Напомним, что узлы соединяются со случайными одноранговыми узлами и нет никакой географической топологии.
Теперь предположим, что вы запустили новый узел и хотите присоединиться к сети.
Вы начинаете с простого сообщения для одного узла, о котором вы знаете.
Обычно он называется вашим семенным узлом seed node, и есть несколько разных способов поиска списков семенных узлов, к которым можно подключиться.
Вы отправляете специальное сообщение «Скажите мне адреса всех других узлов в сети, о которых вы знаете».
Вы можете повторить процесс с новыми узлами, о которых вы узнаете, столько раз, сколько хотите.
Затем вы можете выбрать, к каким из них следует подключиться, и вы станете полнофункциональным членом сети Bitcoin.
Существует несколько шагов, которые используют случайность, и результатом является то, что вы получаете случайный набор узлов.
Чтобы присоединиться к сети, все, что вам нужно знать, – это связаться с одним узлом, который уже находится в сети.
Для чего нужна сеть?
Конечно, чтобы поддерживать цепочку блоков.
Чтобы опубликовать транзакцию, мы хотим, чтобы об этом узнала вся сеть.
Это происходит с помощью простого алгоритма наводнения, иногда называемого протоколом сплетен.