Re: Блокчейн, шифрование и майнинг - расскажите популярно
От: vsb Казахстан  
Дата: 24.09.23 03:44
Оценка: 91 (4)
На примере биткоина расскажу, в других валютах вообще не разбираюсь.

В чём суть проблемы: мы хотим организовать систему для хранения и передачи денег между пользователями. А точней между счетами (кошельками).

Традиционный подход: централизация. У нас есть банк, которому мы доверяем. В банке есть база данных, в которой записано, сколько на каком кошельке лежит. Для передачи денег между кошельками я иду в банк и прошу оператора перенести деньги. Он проверяет мой паспорт и переносит деньги.

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

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

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

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

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

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

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

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

Следующая задача, которую надо решить — чтобы у всех участников была одинаковая база. Договориться тут не получится. К примеру у Васи было 100 тысяч рублей. Он сделал одну транзакцию на перевод 70 000 рублей и опубликовал блок на пикабу. Потом сделал транзакцию на 80 000 рублей и опубликовал блок на хабре. Получается, что у пикабу и у хабра две разных цепочки, которые несовместимы между собой, т.к. если пытаться их совместить, получится, что Вася потратил денег больше, чем у него было. Ну и вообще — хеш суммы не дают ничего вставлять. Т.е. у нас получилось разветвление, цепочки, форк. А теперь приходит Миша и хочет понять — какая из этих цепочек истинная.

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

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

И поэтому в систему добавляется последний и самый важный компонент — доказательство работы.

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

Напомним, что хеш-сумма представляет собой по сути 256 битов (ну к примеру).

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

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

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

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

Теперь система выглядит так: в чате сидят майнеры, в чате сидят заинтересованные в актуальной версии БД, а также в чате сидят те, кто хочет переводить деньги. И последние пишут в чат свои транзакции. Майнеры смотрят на транзакции, которые не попали в цепочку, и выбирают ту, у которой вознаграждение больше. Конечно проверяют, что на кошельке у него хватает средств на перевод. И тот, кто сгенерировал блок — добавляет эту транзакцию в блокчейн и получает себе награду.

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