Самое понятное объяснение принципа работы блокчейнаИсточник: tjourna
С тех пор, как о биткоине заговорили по-настоящему массово, прошло три года. Технологией, на основе которой ведётся учёт всех транзакций - блокчейном - успели заинтересоваться почти все крупные финансовые институты, в том числе Сбербанк, что само по себе порождает мемы. Однако объяснить то, как работает блокчейн (и сам биткоин), до сих пор непросто. На "Лепрозории" попытались в очередной раз показать на пальцах принцип работы блокчейна, и, кажется, у пользователя sleep получилось сделать это максимально наглядно - в виде истории о Коле, ведущем дневник, и Васе, который этот дневник пытается подделать. Блокчейн - это дневник, который почти невозможно подделатьРеклама 04 Коля решил вести дневник. Для этого он завёл тетрадку и начал писать там строчки вроде таких: 1. Купил хлеба Он очень старался вести дневник честно, и если у него с кем-то возникал спор о чём-то, что произошло раньше, он доставал его и тыкал всем носом в свои записи. Однажды Коля сильно поспорил с Васей на тему того, давал ли он Васе в долг 100 рублей или нет. В момент спора у Коли не было с собой дневника, но он обещал завтра же принести и всё показать Васе. Вася решил не искушать судьбу, пробрался к Коле в дом, нашёл дневник, долистал до строчки 132 и заменил её на "Трахал Олю". На следующий день Коля достал дневник, долго искал в нём запись про долг Васе, не нашёл и пришел извиняться. Прошёл год, Васю замучила совесть, и он признался во всём Коле. Коля простил друга, но решил на будущее использовать какую-нибудь более надёжную систему записи, которую нельзя было бы так просто подделывать. Придумал он следующее. У себя в операционной системе "Линупс" он нашёл программу md5sum, которая брала любой текст и превращала его в хеш - 32 непонятные цифры. Как именно она это делала, Коля не понимал, но в целом казалось, что она выдавала полную белиберду. Например, если в программу ввести слово "привет", она в ответ выдаёт "8b4609d7e974702ff1451220c7ededcf". А если ввести, казалось бы, почти то же самое, но с лишним пробелом, то уже "69ab827825fdb876e709abd3d783dbb6". Почесав тыковку, Коля придумал способ усложнить будущим Васям замену записей следующим образом: после каждой записи он вставлял хеш, который получался, если скормить программе текст записи и прошлый хеш. Новый дневник получался таким: 0000 (начальный хеш, ограничимся для простоты четырьмя знаками) Если теперь какой-нибудь Вася захочет изменить строчку 132, изменится и хеш этой строчки (он будет не 1010, а чем-то другим). Это, в свою очередь, повлияет на хеш строчки "133. Трахал Люду" (он будет не 8204, а чем-то другим), и так далее до конца дневника. Теперь ради одной записи Васе придётся подменить весь дневник после неё, что сложно. Прошло время, Коля открыл банк. Он всё так же писал в дневничок записи "дал в долг" и "взял в кредит", снабжая их хешами. Банк разросся, и однажды он дал в долг (уже новому) Васе миллион. Следующей ночью десять нанятых Васей за полмиллиона таджиков пробрались в комнату Коле, заменили запись "143313. Дал в долг Новому Васе 1000000" на "143313. Дал в долг Новому Васе 10" и по-быстрому пересчитали все хеши вплоть до конца дневника. Чудом Коля обнаружил подмену и, раз такое дело, решил усложнить способ подделки дневника: "Теперь, - решил Коля, - я буду в конце каждой записи в скобочках добавлять какое-нибудь число ("нонс"), а подбирать его буду так, чтобы каждый хеш заканчивался на два нуля". Единственный способ это сделать - тупо перебирать числа, пока не получится нужный хеш: 0000 (начальный хеш, ограничимся для простоты четырьмя знаками) Для создания каждой записи Коле теперь в среднем нужно будет перебрать порядка 50 чисел, что трудозатратно. Соответственно, если запись кто-то подменит, подделка её и всех последующих будет тоже в 50 раз сложнее, а это значит, что теперь Васе даже с таджиками не справиться. Через какое-то время Коля взял себе партнёра и они стали оба вести дневничок. Для каждой новой записи оба одновременно начинали подбирать нонс и тот, кому первому удавалось найти подходящий, вносил запись. Так как вдвоём подбирать нонсы быстрее, Коля усложнил задачу и требовал, чтобы все хеши кончались уже на три нуля, а не на два. Этот окончательный Колин дневничок по сути и есть настоящий блокчейн, только Колю с другом надо заменить на кучу соединённых по сети компьютеров, а вычисления хешей усложнить, чтобы даже компьютерам было тяжко.
Имея такой клёвый дневничок, можно строить разные интересные системы. Например, биткоин. Биткоин - это дневничок, где каждая запись имеет вид "Передать столько-то денег с кошелька Х на кошелёк У". Так как дневничок нельзя подделать и в нём хранится вся история переводов, в любой момент из него можно вычислить количество денег на каждом кошельке. Ну а чтобы в системе вообще были какие-то деньги, биткоин сделан так, что каждая запись в дневничке заканчивается словами "Произвести Z монет и перевести мне", где "мне" - это тот пользователь, кто первым "угадает" нонс, который обеспечит хеш с нужным количеством нулей в конце. Поверх дневничка с некоторым количеством криптографии можно строить другие интересные системы. Например, можно делать записи в духе "Кто решит уравнение f(x) = 14, тот получает 10 монеток". Соответственно, первая запись в дневничке, где будет предоставлено решение, может автоматически считаться получателем монеток. Вокруг этой и схожих идей строятся так называемые "контракты". Стоит помнить, что блокчейн - это не более чем надёжный распределённый дневничок. Никаких мировых проблем, помимо тех, которые можно решить дневничком, блокчейн нам не решит. А те проблемы, которые он решит, он решит ценой гигаватт энергии, которые сейчас тратятся на подбор "нонсов" - по-большому счёту, впустую. |