Популярно про блокчейн. Что за зверь такой?

Самые популярные товары с Али по лучшей цене:

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

17 октября 2017, 13:00

Популярно про блокчейн. Что за зверь такой?

Популярно про блокчейн. Что за зверь такой?

Сёгун повелел
Всем вести дневник жизни.
Блокчейн, мать его ж...

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

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

Область применения блокчейна.

На уровне определения блокчейн - это «цепочка блоков» (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<---

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

Если сложность майнинга достаточна, перегенерировать все последующие блоки не получится. А если такое всё-таки получается, значит, блокчейн устроен слишком просто.

Оговорки.

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

Что мы имеем в итоге?

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

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

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

Другие статьи категории «Мурзилка (начинающим)»

Блондинка и её утехи.

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

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

Блин, сказочник хренов - 2 Давеча Мастер Ласто был построен умной домашней женщиной, получил приказ готовить экипаж, и везти семейство в главный город провинции за покупками. Ибо скоро школа, ага. О поведении женщин и детей в большом магазине можно писать стихи и слагать картины. Посему Мастер Ласто испытал глубочайшее удовлетворение, когда дебетовка сказало «кряк», и пожаловалась на исчерпание своего баланса.
12 апреля 2018, 19:57

№ 2Благодарю за объяснение.

Статья раскладывает по полочкам обрывочные знания, стал лучше понимать суть цепочки блоков и их взаимодействие.

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

Собирается ли Мастер реализовывать блокчейн-версию блога?

В этом нет особого смысла.
Просто гипотетический пример использования.

Ибо куда можно блокчейн применить, никто не знает.
Это смешно, но таки факт.

airsound
30 ноября 2022, 07:56

№ 3Благодарность Автору

Благодарю Мастера за полезную для меня информацию
по Блокчейн Зверюге.
Здоровья, Счастья, Успехов и Удачу в придачу!
Респект и Уважуха ;)
borodah8
Все заметки категории «Мурзилка (начинающим)»