2017-08-08 16:23

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

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

Loading

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

\n\n

Хеш

\n\n

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

\n\n

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

\n\n

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

\n\n

От postgres:

\n\n

18c848ac24402a227a4cd3dc3871fedadfaf59cc126965b5cdcad981997093b2

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

7f17d67621afd2a651bc0a552735745b8a2c424cff28e523b94f1d1b4615f591

\n\n

Сохраните и сосчитайте хеш этой новой записи ПОЛНОСТЬЮ. Вы получите что-то вроде db45d94b629fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486.
\n
\nВсе остальные блоки создавайте по той же схеме и в любых количествах. Блокчейн биткойна на 06.17 содержит больше 473 тысяч таких блоков с записями практически о 250 млн. транзакций.

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

chain is flawless

\n\n

final hash = 22cbc83ca6a2cf2e75ae5ca76fb087ef11ff36fb0065c301557c8152a5bc530f

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

Мы принимаем решение добавить к нашему числу двоечку (мы не знаем заранее, какой хеш в результате получим, если вы обладаете такими знаниями, то вам пора отправляться за Нобелевской премией). Все, что мы можем, это экспериментировать. В результате мы получаем 0000000002. Хешируем эти цифры заново.
\n
\nРезультат: 44364a819eca9616dd56c21f6ba9a570d8a27ca54b95f67585cd36da2e4bf9f5. Снова отсутствие ноля. Но у нас есть новая попытка написания перебирающего скрипта. Здесь присутствует несколько главных переменных. Одна из них — GOAL, указывающая, чему должны быть равны цифры, и вторая — LENGTH, обозначающая количество цифр подряд с самого начала, которые должны отвечать критерию.

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

Для чего?

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n\n

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

\n