» Что такое блокчейн и майнинг простыми словами.

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

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

Я покажу, что на самом деле всё там очень просто, и доступно даже пятикласснику. Не верите? Просто читайте дальше. Но для этого сначала нужно пояснить, что такое хэш. Без этого никак, увы.

Хэш

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

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

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/74b7e4.jpg

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

А теперь, чтобы стало ещё понятнее, продемонстрирую на практике. Вбейте в гугле «sha256 онлайн» (именно эту функцию мы будем использовать во всех примерах). Поиграйте с ней, вбивая разные данные.

Сделай сам

Всё. Этих знаний уже достаточно чтобы создать простой блокчейн. Удивительно, правда? Блокчейн — цепочка криптографически связанных блоков.

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

Открываем ваш любимый блокнот и создаём первый файл:

Маша  Ваня :: 10 рублей

Ваня Лиза :: 20 рублей

Маша Саша :: 50 рублей

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/b8055b.png

Хэш тут не для чего считать, поэтому всё. Сохраняем его с именем 1.txt в специальной папочке (FYI: в блокчейне криптовалют такой блок называется Genesis block, и да, там его тоже прописывают вручную). Сохранили? Идём на один из прежде нагугленных сайтов (можно догадаться, что настоящие блокчейны ни на какие сайты не ходят, а вызывают заранее запрограмированные в них функции, но для нашего простейшего случая сделаем всё вручную), и считаем хэш для этого файла.

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

Теперь создайте следующий файл и назовите его 2.txt. Запишите в него несколько новых «транзакций»:

Таня  Катя :: 10 рублей

Макс Витя :: 10 рублей

И последней строчкой добавьте результат хэширования предыдущего файла. Вот так:

Таня  Катя :: 10 рублей

Макс Витя :: 10 рублей

7f17d67621afd2a661bc0a552735745b8a2c424cff28e523b94f1d1b4615f591

Готово? Сохраняем, и считаем хэш уже от этого, нового файла ЦЕЛИКОМ. У меня получилось db45d94b529fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486.

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/c0d9b2.png

По аналогии создаём третий файл:

Митя -> Тёма :: 90 рублей

Жора -> Вася :: 10 рублей

Анна -> Люда :: 60 рублей

db45d94b529fbf8c5fb1decd89f5d0ff62bbca86a02bc4f943eac42ff33dd486

И все последующие. Их может быть сколько угодно. В блокчейне биткоина по состоянию на 27.06.17 находится 473011 блоков, в которых записана информация о почти 250 миллионах транзакций. Это много. И снова к нашим баранам. Можете создать все файлы самостоятельно, а можете скачать мой архив из 10 файлов и контрольного, содержащего только хэш последнего «блока» и ничего больше.

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

Я сделал наипримитивнейший скриптик с пояснениями, можете посмотреть его по ссылке, а без пояснений он включён в вышеуказанных архив. Написан он на самом популярном в терминах проникновения языке в мире — баше, а значит у пользователей GNU/Linux, MacOS, Android (окружение Termux) — не возникнет проблем с запуском.

Пользователям Windows можно посоветовать установить cygwin или Linux subsystem for windows, появившийся в Windows 10.

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/949578.png

Можно заметить, что в коде нет ничего, проверяющего напрямую содержимое файлов

Итак, после запуска скрипта должны получить что-то вроде:

10 blocks

chain is flawless

final hash = 23cbc83ca6a2cf2e75ae5ca76fb087ef11ff36fb0065c301557c8152a5bc530f

Это значит, что всё в порядке, данные представлены в исходном виде, в цепь никто не вмешивался. Теперь попробуйте открыть в блокноте любой файл и поменять что угодно: убрать пробел, изменить цифру, имя, добавить что-то. Результат повторного исполнения скрипта после подобных операций будет бескомпромиссен:

chain is corrupted

Верните всё на место и цепь будет снова проходить проверку. Магия? Магия.

Майнинг

Теперь, чтобы два раза не вставать, покажу майнинг. Не беспокойтесь, всё так же просто и на пальцах. С разрешения автора публикую самое простое объяснение, которое видел в своей жизни.Я тоже нихрена не понимаю, но в моей голове это выглядит так. Есть монетка, она спрятана в коробочку, коробку можно открыть, если решить пример, который написан на коробочке, но таких коробочек миллиард, а монетка лежит только в одном. Собственно для того, чтобы найти монетку, нам нужен миллион китайцев с калькуляторами, которые будут «майнить» монетку.

Настя Иванова

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

0000000000

Маша -> Ваня :: 10 Рублей

Ваня -> Лиза :: 20 Рублей

Маша -> Саша :: 5 Рублей

Теперь идём на наш сайт и снова считаем хэш. У меня получилось 361d413d08c614ff63290943bb184aadaaaae84171caef4bfb2344a3223cd104. Но он не подходит. Как так? А вот так. В официальной документации биткоина (допустим) сказано, что для первых десяти блоков принимаются только хэши, начинающиеся с нуля, а остальные не подходят, и все, включая саму программу bitcoin core, сочтут нас за жуликов, если мы сгенерируем такое.

Ну ладно, говорим мы, и добавляем единичку к нашему числу (мы не можем предсказать заранее, какой хэш получится на выходе, кто сможет — получит нобелевку, так что самый тупой выход здесь одновременно и единственно верный). Получается 0000000001. Идём и хэшируем снова. 44364a819eca9616dd56c21f6ba9a570d8a27ca54b95f67585cd36da2e4bf9f6. Чёрт. Это может затянуться.

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/c446f7.jpg

Отсылка к известному мысленному эксперименту

Отсылка к известному мысленному эксперименту

Как хорошо, что мы снова можем написать перебирающий скрипт! В нём две главные переменные: LENGTH — количество цифр подряд с начала, которые должны соответствовать критерию, и GOAL — чему именно эти цифры должны быть равны. Сложность подбора при этом растёт вместе с количеством символов экспоненционально.


Запустите скрипт: ./block_mine.sh 1.txt и он отработает довольно быстро. Измените LENGTH на 3, и GOAL на 000, и вы заметите бегущие циферки. Замените LENGTH на 10, и GOAL на 0000000000 — и вы результатов выполнения на своём компьютере уже не дождётесь.

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

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

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

При чём тут биткоин

Если говорить в терминах понятных аналогий, идеи блокчейна — электричество, биткоин и прочие криптовалюты — лампочка над вашей головой. Биткоин всего лишь один из множества способов применения идей блокчейна, и даже, на мой взгляд, не самый важный.Гораздо интереснее его экономическая сущность, и об этом стоит сказать подробнее. Во-первых, запомните, проанализируйте, или просто примите на веру: на сегодня это спекулятивный экономический пузырь. Это дефицитный товар, который покупают/добывают/приобретают преимущественно в расчёте на быструю прибыль в краткосрочном периоде. Это не плохо и не хорошо, это привычная ситуация для любого фондового рынка, да и в целом для экономики. Интернет был таким же (гугл: пузырь доткомов).

image: http://thenn.ru/uploads/images/00/00/01/2017/07/02/8b95af.png

 

То есть воспринимать как игрушку, а не как средство накопления, быть готовым к обвалу в 2-10 раз меньше чем за сутки (или аналогичному взлёту, тут уж как повезёт), сглаживать риски портфелями, и так далее (да вы всё и без меня знаете, если работаете в сфере финансов или увлекаетесь игрой на бирже, а если не работаете и не увлекаетесь, лучший совет: не лезть, ждать стабилизации курса). Это не пост пиара биткоина, это ликбез по блокчейну, так что могу себе позволить сказать всё как есть.

Зачем это нужно

Тут по порядку, иначе совсем запутаемся.

В: Зачем нужно разбивать цепь на блоки, если можно с сопоставимой степнью надёжности считать хэш прямо от всего большого файла?

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

В: Зачем вообще этот хэш? Разве просто передать данные недостаточно?

О: Гугл: Задача византийских генералов. Вкратце, это когда нужно убедиться, что данные не повреждены и не изменены в условиях скомпрометированного канала их передачи. Ещё полвека назад эта задача считалась концептуально нерешаемой, а сейчас ЭЦП в паре с секретным ключом — стандарт даже в консервативной сфере госуслуг. То есть эти «хэши» давно прочно проникли в нашу жизнь, им доверяют и ими пользуются. Если вы ещё не в курсе, что оно и как работает, это только ваша проблема.

В: Хорошо-хорошо, а где используется блокчейн, кроме нашумевших криптовалют?

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

На самом деле это тема тянет на ещё одну статью, которая может даже появится, если мне того захочется, и если людям будет интересно. Не знаю. Если дочитали до этого места — сообщите в комментах, интересно вам продолжение или нет.

Большинcтво из них умрут (как уже умерла краудфандинговая платформа Koinify, как с треском провалилась из-за найденной уязвимости инвестиционная платформа The DAO, как умерло большинство известных на заре интернета сайтов). Однако это перспективная отрасль, которая сделала возможными некоторые ранее немыслимые вещи, и вполне вероятно, блокчейн-лихорадка — новый виток прогресса, похожий на историю упомянутого ранее, и сегодня всеми любимого World Wide Web.

В: Зачем мне это всё, я не программист?

О: Для меня этот вопрос звучит так же странно, как и «Зачем мне читать и писать, я не писарь?». Программирование — это не профессия и не особый талант, это всего лишь немного более гибкий и мощный способ использования вашего компьютера — вот и всё. Его не нужно бояться или избегать, как чего-то «сложного». И да, я считаю, что в будущем, не таком далёком как кажется, сама идея специального человека, набирающего код, станет такой же абсурдной, как идея специального человека, переписывающего от руки книги. Это будут во-первых, уметь все с первого класса школы, во-вторых появятся более эффективные инструменты для профессиональной реализации нужных идей.

Подробнее

Источник: http://thenn.ru.






comments powered by HyperComments