Oleg Zabluda's blog
Wednesday, October 18, 2017
Что такое блокчейн
Что такое блокчейн
"""
Заметил, что многие не понимают смысла понятия "блокчейн". Первое замечание: "биткоин" не равно "блокчейн". Биткоин основан на блокчейн-технологии, как и другие криптовалюты, но это не то же самое. Лучшее объяснение блокчейн было дано одним из юзеров лепры, и я не буду пересказывать его своими словами, просто процитирую:
-------------------------------------
Коля решил вести дневник. Для этого он завел тетрадку, и начал писать там строчки вроде.
1. Купил хлеба.
2. Позвонил Геннадию.
...
132. Дал Васе в долг 100 рублей
133. Трахал Люду
134. Поел
...
Он очень старался вести дневник честно, и если у него с кем–то возникал спор о чем–то, что произошло раньше, он доставал его и тыкал всем носом в свои записи. Однажды Коля сильно поспорил с Васей на тему того, давал ли он Васе в долг 100 рублей или нет. В момент спора у Коли не было с собой дневника, но он обещал завтра же принести и всё показать Васе.
Вася решил не искушать судьбу, пробрался к Коле в дом, нашел дневник, долистал до строчки 132, и заменил её на "Трахал Олю". На следующий день Коля достал дневник, долго искал в нём запись про долг Васе, не нашёл, и пришел извиняться.
Прошел год, Васю замучала совесть, и он признался во всём Коле. Коля простил друга, но решил, на будущее, использовать какую–нибудь более надёжную систему записи, которую нельзя было бы так просто подделывать.
Придумал он следующее. У себя в операционной системе Линупс он нашел программу md5sum, которая брала любой текст и превращала его в хеш — 32 непонятные цифры. Как именно она это делала, Коля не понимал, но в целом казалось, что она выдавала полную белиберду. Например, если в программу ввести слово "привет", она в ответ выдаёт "8b4609d7e974702ff1451220c7ededcf". А если ввести, казалось бы, почти то же самое, но с лишним пробелом, то уже "69ab827825fdb876e709abd3d783dbb6".
Почесав тыковку, Коля придумал способ усложнить будущим Васям замену записей следующим образом: После каждой записи он вставлял хеш, который получался если скормить программе текст записи и прошлый хеш. Новый дневник получался таким:
0000 (начальный хеш, ограничимся для простоты четырьмя знаками)
1. Купил хлеба.
4178 (хеш от 0000 и "Купил хлеба")
2. Позвонил Геннадию.
4234 (хеш от 4178 и "Позвонил Геннадию")
...
4492
132. Дал Васе в долг 100 рублей
1010
133. Трахал Люду
8204 (хеш от 1010 и "Трахал Люду")
...
Если теперь какой–нибудь Вася захочет изменить строчку 132, изменится и хеш этой строчки (он будет не 1010 а чем–то другим). Это, в свою очередь, повлияет на хеш строчки 133. Трахал Люду (он будет не 8204, а чем–то другим), и так далее до конца дневника. По сути ради одной записи Васе придется подменить весь дневник после неё, что сложно.
Прошло время, Коля открыл банк. Он всё так же писал в дневничок записи "дал в долг" и "взял в кредит", снабжая их хешами. Банк разросся и однажды он дал в долг (уже новому) Васе миллион. Следующей ночью десят нанятых Васей за полмиллиона таджиков пробрались в комнату Коле, заменили запись "143313. Дал в долг Новому Васе 1000000" на "143313. Дал в долг Новому Васе 10", и по–быстрому пересчитали все хеши вплоть до конца дневника.
Чудом Коля обнаружил подмену и, раз такое дело, решил усложнить способ подделки дневника. Теперь, решил Коля, я буду в конце каждой записи в скобочках добавлять какое–нибудь число ("нонс"), и буду подбирать его так, чтобы каждый хеш заканчивался на два нуля. Единственный способ это сделать — тупо перебирать числа, пока не получится нужный хеш:
0000 (начальный хеш, ограничимся для простоты четырьмя знаками)
1. Купил хлеба (22)
4100 (хеш от 0000 и "Купил хлеба (22)", 22 было подобрано чтобы хеш кончался на 00)
2. Позвонил Геннадию (14)
3100 (хеш от 4100 и "Позвонил Геннадию (14)")
...
1300
132. Дал Васе в долг 100 рублей (67)
9900
133. Трахал Люду (81)
8200 (хеш от 9900 и "Трахал Люду (81)")
...
Для создания каждой записи Коле теперь в среднем нужно будет перебрать порядка 50 чисел, что трудозатратно. Соответственно, если запись кто–то подменит, подделка её и всех последующих будет тоже в 50 раз сложнее, а это значит что теперь Васе даже с таджиками не справиться.
Через какое–то время Коля взял себе партнёра и они стали оба вести дневничок, причем для каждой новой записи оба одновременно начинали подбирать нонс и тот, кому первому удавалось найти подходящий, вносил запись. Так как вдвоём подбирать нонсы быстрее, Коля усложнил задачу и требовал, чтобы все хеши кончались на три нуля.
Этот окончательный Колин дневничок и есть по сути Блокчейн, только Колю с другом надо заменить на кучу соединённых по сети компьютеров, и вычисления хешей усложнить, чтобы даже компьютерам было тяжко. То есть, блокчейн — это не более чем дневничок записей, который можно записывать совместно, и в котором де–факто невозможно подделать старые записи.
Имея такой клёвый дневничок, можно строить разные интересные системы. Например, Биткоин. Биткоин — это дневничок, где каждая запись выглядит в виде "Передать столько–то денег с кошелька Х на кошелек У". Так как дневничок нельзя подделать и в нём хранится вся история переводов, в любой момент из него можно вычислить количество денег на каждом "кошельке". Ну а чтобы в системе вообще были какие–то деньги, Биткоин сделан так, что каждая запись в дневничке заканчивается словами "произвести Z монет и перевести мне", где "мне" — это тот пользователь, кто первым "угадает" нонс, который обеспечит хеш с нужным количеством нулей в конце.
Поверх дневничка с некоторым количеством криптографии можно строить ещё некоторое количество интересных систем. Например, можно делать записи в духе "Кто решит уравнение f(x) = 14, тот получает 10 монеток". Соответственно, первая запись в дневничке, где будет предоставлено решение может автоматически считаться получателем монеток. Вокруг этой и схожих идей строятся т.н. "контракты".
Но тем не менее стоит помнить, то блокчейн — это не более чем надёжный распределённый дневничок. Никаких мировых проблем, помимо тех, которые можно решить дневничком, блокчейн нам не решит.
(с) некто sleep
"""
https://vk.com/wall-99919950_442621
Blockchain, bitcoin, cryptocurrency
https://vk.com/wall-99919950_442621
Labels: Oleg Zabluda