
Популярно про блокчейн. Что за зверь такой?
Самые популярные товары с Али по лучшей цене:
Автомобильный диагностический сканер 640 руб.
Фляжка Jack Daniel’s. Нержавсталь, 200 ml 523 руб.
Оригинальный RTL-SDR v3 c TCXO 2908 руб.
Популярно про блокчейн. Что за зверь такой?

Сёгун повелел
Всем вести дневник жизни.
Блокчейн, мать его ж...
В последнее время из каждого утюга нам полоскают уши про Биткоин и блокчейн, причём до такой степени настырно и всеобъемлюще, что это уже явно носит характер форменного помешательства. Может быть, у простого человека и возникала мысль понять, шо цэ такэ, но обычно дальше мысли дело не заходит.
Между тем сама технология блокчейна (которой, кстати, много десятков лет) весьма интересна, и имеет множество применений. Местный автор, с Вашего позволения, максимально популярно и на примерах прояснит эту технологию «на пальцах», после чего пугать она Вас больше не будет. Возможно, Вы даже придумаете, где и как её можно использовать в своих разработках.
Область применения блокчейна.
На уровне определения блокчейн - это «цепочка блоков» (Block Chain), причём каждый последующий учитывает содержимое любого предыдущего. А назначение блокчейна - гарантировать, что нигде в этой цепочке не произошло подмены содержимого.
Содержимое же блокчейна может быть каким захотите. В Линуксе даже есть концепция, приблизительно звучащая как «всё есть текст». Соответственно, произвольный объект легко представим в виде текстового файла, будь то документ любого формата, графика, звук, видео - да что угодно. Так что ограничения на содержимое блокчейна нет, ибо концепция работает не только в Линуксе.
Правда, далеко не всегда то самое «содержимое» можно и нужно интегрировать в блокчейн, тем самым гарантируя подлинность «содержимого». Блокчейн требуется только для действительно важных данных, утеря или модификация которых потом приведёт к каким-то фатальным последствиям. Во всех остальных случаях блокчейн не нужен совершенно.
Иронично, но даже самые бесполезные данные вдруг могут стать важными.
Пример из нашего светлого будущего.
Год 2020. Государственная Дума РФ во исполнение Третьей редакции закона Яровой обязала всех распространителей информации в сети Интернет внедрить в серверное ПО технологию блокчейн с публичным API, с открытием к нему доступа Роскомнадзору. Средства обмена информацией в виде сайтов, не оборудованные таким блокчейном, подлежат немедленной блокировке.
Далее Главный Поисковик Страны, уже порядком замучившись постоянно изымать из своего индекса заблокированные Роскомнадзором сайты, давно перевалившие числом за несколько десятков миллионов, вообще перестал сканировать и индексировать сайты Рунета. Он просто стал получать от Роскомнадзора только благополучно прошедшие цензуру блоки блокчейна сайтов - это даже круче «белого списка» вышло.
Все альтернативные поисковые системы на территории Страны заблокированы.
Не смейтесь, примерно так оно и будет. Чуть раньше или несколько позже. Так что посмотрим, как это может выглядеть уже сейчас.
Блокчейн на примере данного блога.
Договоримся, что все записи сайта (их HTML код) для простоты будут храниться прямо в блокчейне, а сами записи отражают любые события, производимые над сайтом. Например, публикация поста или комментария к нему. Модификация того и другого. Удаление, опять же.
Соответственно, нам необходимо зафиксировать точную дату события, как-то описать само событие (что именно мы делаем) в машиночитаемом виде, а также оговорить содержимое события (какой текст публикуется, кто его автор, и т.п). Поскольку в блокчейн мы имеем возможность помещать что угодно, то вправе сами выбирать шаблон блока. Или принять за данность то, что будет навязано одним из Приложений Третьей редакции закона Яровой.
Но сперва блокчейн надо инициировать. Делается это так называемым Генезисным Блоком (Genesis Block), то есть самым первым в цепочке.
Это может быть простой текст, который и даёт начало блокчейну. Имеет смысл оговорить в тексте, с чем именно блокчейн работает. Ну, к примеру:
$data='
Genesis Block
TimeStamp=1074060000
Nonce=$nonce
LastBlockHash=none
---8<---
Act=beginning of the world.
Site=lasto.com
Autor=Vadim Lasto
---8<---
';
Этот по сути дела текст скармливается функции создания блока, в которой парой-тройкой строк мы предусмотрим все типичные для блокчейна опции. Такие, как подпись приватным ключом и майнинг, с указанием его сложности. Всё это, естественно, в простейшей реализации.
function build_block($data,$key='My.Private.Key') {
for ($nonce=1; $nonce <= 5000000; $nonce++) {
$d=str_replace('$nonce',$nonce,$data);
$h=hash('sha256',$d.$key,false);
if ('aaaaa'==substr($h,0,5)) die($h.$d);
}
die('no');
}
На выходе мы получим хэш Генезисного Блока, который нам понадобится позднее, и сам Генезисный Блок:
aaaaa25d8bd66463365b3e1bf4c1bf73996b1b5228f08126dc17ba78c9d2120d
Genesis Block
TimeStamp=1074060000
Nonce=184122
LastBlockHash=none
---8<---
Act=beginning of the world.
Site=lasto.com
Autor=Vadim Lasto
---8<---
Те, кто маленько понимают php, уже сообразили, что при инициации генезисного блока мы не просто взяли хэш от содержимого, а проделывали это до тех пор, пока хэш не начнётся с последовательности «aaaaa». Понятно, что сами данные при этом надо как-то менять, для чего в теле блока предусмотрен так называемый «Нонс» (Nonce) - простой инкремент. Как видим, подходящий нонс нашёлся всего после 184122 итераций, которых для такого простого правила отбора «подходящих» хэшей статистически достаточно около миллиона. Если точнее, 16 в 5 степени.
Во взрослой жизни поиск подходящего нонса для известных данных называется майнингом, и занимает он отнюдь не секунды. И делается вот на таком оборудовании, лишь ничтожный кусочек которого влез на фото:

Необходимость же майнинга обусловлена вот чем.
Представьте, что поиск одного нонса трудоёмок, и занимает хотя бы минут десять (это фактически стандарт для того же Биткоина, и регулируется сложностью майнинга, задаваемой еженедельно). Если сложность майнинга так высока (то есть мы в нашем примере подбираем нонс таким, чтобы в начале хэша встречались не пять букв «a» подряд, а, скажем, штук семь), а в самом блокчейне сотни и тысячи блоков, подменить содержимое одного блока и перегенерировать весь блокчейн будет уже не так просто. Грубо говоря, сложность майнинга обуславливает затраты времени на подделку данных в блокчейне. Но не на самом начальном этапе.
Хорошо, это был генезисный блок, пришла пора создать первый пост.
Пролистав оглавление, Вы увидите, что случилось это 1074060144 в юниксовских датах. Подставляем это дело в содержимое блока:
$data='
Block 1
TimeStamp=1074060144
Nonce=$nonce
LastBlockHash=aaaaa25d8bd66463365b3e1bf4c1bf73996b1b5228f08126dc17ba78c9d2120d
---8<---
Act=Add Post
Title=Идеология информационного товара в России.
Text=Тут прямо код поста в HTML разметке.
---8<---
';
Обратите внимание на важные вещи.
Во-первых, блоки у нас теперь имеют нумерацию.
Пусть она будет человеческая, от единицы с нарастанием.
Далее, хэш от предыдущего блока (в данном случае генезисного) подставляется в текущий. Теперь, если что-то изменится в предыдущем блоке, хэш у него поменяется, и весь блокчейн рассыпется.
Многие могут сказать, что теоретически возможно внести такое изменение в блок, что хэш останется тем же самым. Теоретически можно всё, что угодно, но без суперкомпьютера это не получится. Особенно если Вы не знаете приватный ключ, либо он сам как-то зависит от подписываемых им данных по не знаемому алгоритму.
Само содержимое блока - описание действия, плюс полный HTML код поста. Для хэширующей функции абсолютно всё равно, как много кода она обрабатывает, так что объём блока не особо критичен.
После ажно 337427 итераций «майнинг» принесёт «правильный» хэш, и вот таким у нас получится хэш от первого блока, и сам первый блок:
aaaaadfac0a286d245f1bc77b21650c895cbe0275fe95fff5f0c337ca1b985b8
Block 1
TimeStamp=1074060144
Nonce=337427
LastBlockHash=aaaaa25d8bd66463365b3e1bf4c1bf73996b1b5228f08126dc17ba78c9d2120d
---8<---
Act=Add Post
Title=Идеология информационного товара в России.
Text=Тут прямо код поста в HTML разметке.
---8<---
Применяя этот процесс последовательно к каждому действию, предпринятому на блоге, мы получим протокол всех действий, заверенный цифровой подписью (условно назовём это так). И, что самое замечательное, модификация любой буковки любого блока изменит хэш этого блока, и тот начнёт отличаться от зафиксированного в последующем блоке. Сигнализируя тем самым о подделке.
Если сложность майнинга достаточна, перегенерировать все последующие блоки не получится. А если такое всё-таки получается, значит, блокчейн устроен слишком просто.
Оговорки.
Конечно, из данной схемы ради предельного упрощения концепции изъяты всякие там публичные ключи, а сама схема скомпилирована под единственного юзера. Ибо главное сейчас - понять блокчейн на предельно простом примере. А уж наложить поверх слои абстракций завсегда можно.
Что мы имеем в итоге?
Довольно интересную и полезную технологию, которая, будучи встроена в движок, фиксирует в блокчейне все действия, производимые над контентом. Если даже сам сайт вдруг погибнет, но останется его блокчейн, то сайт может быть восстановлен до состояния на любую дату.
Можно даже написать движок сайта так, чтобы сам сайт вообще формировался прямо из блокчейна. Тогда получится эффект «архива интернета», в котором можно смотреть сайт в ретроспективе, как он выглядел и что в себе содержал на любую дату в прошлом.
Естественно, любая технология чаще всего используется исключительно во вред людям. Скорее всего, воплощение этой мысли в жизнь мы и станем наблюдать в ближайшем будущем. Но что такое блокчейн, и как его готовить, Вы в общих чертах теперь представляете - ничего страшного в нём нет.
Другие статьи категории «Мурзилка (начинающим)»
Блондинка и её утехи.

Блин, сказочник хренов - 2

№ 3Благодарность Автору
по Блокчейн Зверюге.
Здоровья, Счастья, Успехов и Удачу в придачу!
Респект и Уважуха ;)
"Можно даже написать движок сайта так, чтобы сам сайт вообще формировался прямо из блокчейна. Тогда получится эффект «архива интернета», в котором можно смотреть сайт в ретроспективе, как он выглядел и что в себе содержал на любую дату в прошлом."
Собирается ли Мастер реализовывать блокчейн-версию блога?
В этом нет особого смысла.
Просто гипотетический пример использования.
Ибо куда можно блокчейн применить, никто не знает.
Это смешно, но таки факт.