Блокчейн и майнинг своими руками

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

Хеш

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

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

Не слишком понятно, поэтому попробуем рассмотреть обычный пример. Внесите в строку поиска «sha256 онлайн» (эта функция будет использована нами в дальнейшем в каждом примере). Поэкспериментируйте, вбивая разнообразные данные. Допустим, хешем от «postgres» окажется:

f8f5cb9dbb4e77e8e0f74b60f8583ab213d02f2cdc235ef8c36e6563aff3ed0d

От postgres:

18c848ac24402a227a4cd3dc3871fedadfaf59cc126965b5cdcad981997093b2

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

Займемся созданием первого блока. Допустим, с записью денежных отношений. Откройте блокнот и создайте первый блок:

Миша → Вера:: 20 рублей

Вера → Леня:: 30 рублей

Миша → Сара:: 60 рублей

Хеш тут не считается. Сохраните блок, назвав его 1.txt, в отдельную папку. Заходите на нагугленный сайт, способный считать хеш для первого блока. Вы получите фразу вида:

7f17d67621afd2a651bc0a552735745b8a2c424cff28e523b94f1d1b4615f591

Сохраните эту строчку.

Создайте второй блок под названием 2.txt. Тут будут указаны новые «транзакции»:

Тина → Яна:: 20 рублей

Мэри → Валя:: 20 рублей

Последняя строчка должна быть результатом хеширования прошлого файла:

Тина → Яна:: 20 рублей

Мэри → Валя:: 20 рублей

7f17d67621afd2a651bc0a552735745b8a2c424cff28e523b94f1d1b4615f591

Сохраните и сосчитайте хеш этой новой записи ПОЛНОСТЬЮ. Вы получите что-то вроде db45d94b629fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486.

Все остальные блоки создавайте по той же схеме и в любых количествах. Блокчейн биткойна на 06.17 содержит больше 473 тысяч таких блоков с записями практически о 250 млн. транзакций.

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

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

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

Вы можете воспользоваться моим примитивным скриптиком, написанным на баше (благодаря этому языку, пользователи Андроид, MacOS, GNU/Linux не будут испытывать сложностей с запуском).

Если вы пользуетесь Windows, я рекомендую вам установку Linux subsystem for windows (доступно в десятой Винде) или cygwin.

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

11 blocks

chain is flawless

final hash = 22cbc83ca6a2cf2e75ae5ca76fb087ef11ff36fb0065c301557c8152a5bc530f

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

chain is corrupted

Возвратите все на обратные позиции, и цепочка снова сможет пройти ваши проверки. Ничего волшебного в этом нет.

Особенности майнинга

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

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

0000000000

Миша -> Варя:: 20 Рублей

Вася -> Лена:: 30 Рублей

Миша -> Сара:: 60 Рублей

Отправляемся на нагугленный нами прежде сайт и считаем хеш. Получаем фразу типа 361d313d08c614ff63290943bb184aadaaaae84171caef4bfb2344a3223cd104. Однако она не подходит. Но почему? Все достаточно просто. Официальная документация биткойна (предположим) указывает, что первые десять блоков принимают только те хеши, которые начинаются на 0. Все прочие не подойдут и все, в том числе, сама программа хеширования, выбранная нами, считает нас жуликами при попытках генерировать такое.

Мы принимаем решение добавить к нашему числу двоечку (мы не знаем заранее, какой хеш в результате получим, если вы обладаете такими знаниями, то вам пора отправляться за Нобелевской премией). Все, что мы можем, это экспериментировать. В результате мы получаем 0000000002. Хешируем эти цифры заново.

Результат: 44364a819eca9616dd56c21f6ba9a570d8a27ca54b95f67585cd36da2e4bf9f5. Снова отсутствие ноля. Но у нас есть новая попытка написания перебирающего скрипта. Здесь присутствует несколько главных переменных. Одна из них — GOAL, указывающая, чему должны быть равны цифры, и вторая — LENGTH, обозначающая количество цифр подряд с самого начала, которые должны отвечать критерию.

Выполните запуск скрипта./block_mine. sh 1.txt — его работа осуществляется в достаточно оперативном режиме. После этого укажите вместо GOAL — 000, а вместо LENGTH — 3, и вы увидите цифры, которые куда-то бегут. Замените GOAL на 0000000000 и LENGTH на 10, и результата исполнения ваш компьютер уже не даст.
Я показал вам пример расчета цепи с уровнем сложности «3 ноля в начале всех хешей». Осуществите подмену или подделку таким образом, чтобы в результате в начале хеша обязательно стояли три ноля, и цепочка при этом могла успешно пройти проверку, не пытайтесь при этом перемайнить всю цепочку.

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

Насколько легко осуществить подделку?

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

Разбираемся с биткойнами

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

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

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

Для чего?

С этим вопросом необходимо разбираться последовательно. В противном случае здесь можно попросту запутаться. Итак:

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

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

А есть ли необходимость в этом хеше? Почему бы не ограничиться простой передачей данных?

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

Использование блокчейна где-то, кроме всем известных криптографических валют, сегодня где-то уже осуществляется?

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

По большей части, у проектов нет права рассчитывать на долгосрочное существование. Здесь следует вспомнить хотя бы о краудфандинговой платформе Koinify или с грохотом провалившейся из-за уязвимости инвестиционной платформе The DAO. Но сфера действительно перспективная, и в ней удается выполнять вещи, которые прежде казались фантастическими. Есть все основания полагать, что блокчейн лихорадка окажется новым витком прогресса.

Я не работаю программистом и вообще не связан с высокими технологиями, следовательно, блокчейн для меня просто неинтересен?

Такое рассуждение кажется столь же странным, как если бы вы сказали — я не писарь, поэтому обучаться чтению и правописанию не стану совсем. Сравнивать программирование с профессией или особым талантом не стоит. Мы говорим о более гибком и мощном способе применения вашей компьютерной системы, и только.

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


X