ZenoN
  • My Knowledge Wiki 📚
  • Games
    • Dota 2
  • Industry
    • IT
      • Here’s How 5 Tech Giants Make Their Billions
      • Valve: культ Т-образных людей
      • Почему США не успокоятся, пока не уничтожат Huawei окончательно — полная хронология событий с 2003 г
      • Подкаст «Откровенно про IT-карьеризм» Собеседование
      • Профиль: Виталик Бутерин
      • Технологическая холодная война: как развивался конфликт между США и Китаем, к чему привёл и при чём
  • Kharkov
    • Деберц как зеркало харьковской ментальности
    • Сепаратизм
  • Models
    • Madalina Ghenea
  • Music
    • Creation
      • Семплирование и битмейкинг
  • Programming
    • How do I get a YouTube video thumbnail from the YouTube API?
    • Random number generator (included)
    • Самое понятное объяснение принципа работы блокчейна
  • Programs
    • GIT
      • Как улучшить свой опыт работы с Git
    • Visual Studio Code
      • 21 VSCode Shortcuts to Make Coding Faster and More Fun
      • 26 Miraculous VSCode Tools for JavaScript Developers in 2019
      • Visual Studio Code. Настройка и применение. Часть 1
  • Psychology
    • Химия эмоций
    • КУДА ДЕЛСЯ СЕКС
    • ЗАПИСЫВАЛА В ТЕТРАДОЧКУ
    • УБИТЬ ЧЕЛОВЕКА
    • Lectures
      • Курс «Justice/Справедливость» впервые на русском языке! (I часть)
    • Love
      • Любовь и Разлука
      • Об отношениях
      • Пацан переспал с пятью девушками. Пацаааан!
      • Сексуальное поведение человека
      • Совет психолога: как правильно расстаться
      • Твоя Свадьба
      • Как правильно заниматься виртуальным сексом?
    • Tests
      • Szondi test
  • Snob
    • Итон и становление современной элиты (перевод 1843 Magazine)
    • Поколение "вискарик". Придурь стареющего мужика
    • Секс, трава и классовая ненависть в Оксфорде
    • Евгений Гришковец про барменов, которые потеряли связь с реальностью
  • Useful
    • Руководство по выживанию и обороне города
    • Советы на всякий случай, а случаи бывают разные...
    • Досье
    • Как осадить ватника за 5 секунд
    • Защита девушки от хулиганов
    • Как предложить интересную тему для беседы
    • Physics
      • Как посчитать секунды
  • USSR
    • Albert Kahn
    • Как Сталин расправился с инвалидами войны
    • Парашютист Гагарин
    • Последний король Марий Эл
    • Я хотел разобраться, почему в РФ нет русской нации
  • Здоровье гика
    • "Красные глаза программиста" — как бороться, профилактика?
    • «Мы сражаемся за каждую минуту жизни, поэтому к чёрту сентиментальность»
    • Утраченное искусство чистой задницы
    • Parabiosis
      • Ageing research: Blood to blood
      • Детская кровь для бессмертия
      • Кровавый фонтан юности
    • Полифазный сон
      • Чем полезен полифазный сон?
      • SmartSleep — приложение для полифазного сна
Powered by GitBook
On this page

Was this helpful?

Edit on GitHub
  1. Programming

Самое понятное объяснение принципа работы блокчейна

PreviousRandom number generator (included)NextPrograms

Last updated 2 years ago

Was this helpful?

Действующие лица: Коля, Вася, таджики и Люда (в эпизодах).

Фото stivoberlin, Flickr

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

Однако объяснить то, как работает блокчейн (и сам биткоин), до сих пор непросто. На «Лепрозории» в очередной раз показать на пальцах принцип работы блокчейна, и, кажется, у пользователя sleep получилось сделать это максимально наглядно --- в виде истории о Коле, ведущем дневник, и Васе, который этот дневник пытается подделать.

Блокчейн --- это дневник, который почти невозможно подделать

Коля решил вести дневник. Для этого он завёл тетрадку и начал писать там строчки вроде таких:

1. Купил хлеба2. Позвонил Геннадию...132. Дал Васе в долг 100 рублей133. Трахал Люду134. Покакал

Он очень старался вести дневник честно, и если у него с кем-то возникал спор о чём-то, что произошло раньше, он доставал его и тыкал всем носом в свои записи. Однажды Коля сильно поспорил с Васей на тему того, давал ли он Васе в долг 100 рублей или нет. В момент спора у Коли не было с собой дневника, но он обещал завтра же принести и всё показать Васе.

Вася решил не искушать судьбу, пробрался к Коле в дом, нашёл дневник, долистал до строчки 132 и заменил её на «Трахал Олю». На следующий день Коля достал дневник, долго искал в нём запись про долг Васе, не нашёл и пришел извиняться.

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

Придумал он следующее. У себя в операционной системе «Линупс» он нашёл программу md5sum, которая брала любой текст и превращала его в хеш --- 32 непонятные цифры. Как именно она это делала, Коля не понимал, но в целом казалось, что она выдавала полную белиберду. Например, если в программу ввести слово «привет», она в ответ выдаёт «8b4609d7e974702ff1451220c7ededcf». А если ввести, казалось бы, почти то же самое, но с лишним пробелом, то уже «69ab827825fdb876e709abd3d783dbb6».

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

0000 (начальный хеш, ограничимся для простоты четырьмя знаками)1. Купил хлеба4178 (хеш от 0000 и «Купил хлеба»)2. Позвонил Геннадию4234 (хеш от 4178 и «Позвонил Геннадию»)...4492132. Дал Васе в долг 100 рублей1010133. Трахал Люду 8204 (хеш от 1010 и «Трахал Люду»)

Если теперь какой-нибудь Вася захочет изменить строчку 132, изменится и хеш этой строчки (он будет не 1010, а чем-то другим). Это, в свою очередь, повлияет на хеш строчки «133. Трахал Люду» (он будет не 8204, а чем-то другим), и так далее до конца дневника. Теперь ради одной записи Васе придётся подменить весь дневник после неё, что сложно.

Прошло время, Коля открыл банк. Он всё так же писал в дневничок записи «дал в долг» и «взял в кредит», снабжая их хешами. Банк разросся, и однажды он дал в долг (уже новому) Васе миллион. Следующей ночью десять нанятых Васей за полмиллиона таджиков пробрались в комнату Коле, заменили запись «143313. Дал в долг Новому Васе 1000000» на «143313. Дал в долг Новому Васе 10» и по-быстрому пересчитали все хеши вплоть до конца дневника.

Чудом Коля обнаружил подмену и, раз такое дело, решил усложнить способ подделки дневника: «Теперь, --- решил Коля, --- я буду в конце каждой записи в скобочках добавлять какое--нибудь число („нонс"), а подбирать его буду так, чтобы каждый хеш заканчивался на два нуля». Единственный способ это сделать --- тупо перебирать числа, пока не получится нужный хеш:

0000 (начальный хеш, ограничимся для простоты четырьмя знаками)1. Купил хлеба (22)4100 (хеш от 0000 и «Купил хлеба (22)», 22 было подобрано, чтобы хеш кончался на 00)2. Позвонил Геннадию (14)3100 (хеш от 4100 и «Позвонил Геннадию (14)»)...1300132. Дал Васе в долг 100 рублей (67)9900133. Трахал Люду (81)8200 (хеш от 9900 и «Трахал Люду (81)»)

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

Через какое--то время Коля взял себе партнёра и они стали оба вести дневничок. Для каждой новой записи оба одновременно начинали подбирать нонс и тот, кому первому удавалось найти подходящий, вносил запись. Так как вдвоём подбирать нонсы быстрее, Коля усложнил задачу и требовал, чтобы все хеши кончались уже на три нуля, а не на два.

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

Блокчейн --- это не более чем дневничок записей, который можно записывать совместно, и в котором де-факто невозможно подделать старые записи.

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

Поверх дневничка с некоторым количеством криптографии можно строить другие интересные системы. Например, можно делать записи в духе «Кто решит уравнение f(x) = 14, тот получает 10 монеток». Соответственно, первая запись в дневничке, где будет предоставлено решение, может автоматически считаться получателем монеток. Вокруг этой и схожих идей строятся так называемые «контракты».

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

За наводку спасибо .

mortalezz
source
порождает мемы
попытались