В пространстве блокчейна существует два основных типа механизмов консенсуса: POW (доказательство работы) и POS (доказательство доли). Сегодня я хотел бы немного поговорить о доказательстве работы и о том, как оно хорошо… работает. Итак, для начала, хэш блока состоит из нескольких вещей, и при майнинге мы пытаемся найти одну неизвестную часть информации для блока, «одноразовый номер».

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

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

Мы можем получить информацию о блоке с помощью rpc «getblock». В ycash-cli и bitcoin-cli мы будем передавать информацию, как вы видите внизу рисунка ниже. Это информация для блока 570 000. В этом блоке блокчейн Zcash разделился на две части и был создан Ycash.

С ycash.jl мы действительно можем расширить это, используя возможности Джулии. Начнем с получения текущей высоты блока.

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

Теперь пришло время заполнить наш вектор.

Как вы можете видеть на картинке выше, для каждого блока, начиная с форка, мы получаем нашу сложность и добавляем ее к вектору.

Теперь, чтобы лучше понять, давайте визуализируем эти данные.

Plots — действительно удобный пакет, он сам обрабатывает графический интерфейс для всех нас с окном GTK. Пришло время отобразить наш диапазон блоков по оси x и нашу сложность с течением времени по оси y.

Нажмите Enter, и появится окно GTK, выглядящее как это.

Если вы помните, в блоке форка наша сложность майнинга составляла 256. Сложность майнинга резко возросла сразу после форка. Всякий раз, когда цепочка разрывается, вначале возникает определенная мания. Мы должны назвать это «eu-fork-ia» (да, это ужасный каламбур). После того, как шумиха от форка утихнет (как вы можете видеть), многие майнеры, как правило, ищут что-то другое, и сложность выравнивается.