[Из песочницы] Децентрализованные цифровые валюты. Часть 1. Биткойн
Тема различных криптовалют и блокчейнов на сегодняшний день стала уже достаточно популярной и перестала быть уделом гиков, бубнящих про революцию в сфере финансов. Но как только вы попытаетесь вникнуть в эту тему, сразу же столкнетесь с информационным дефицитом: очень мало материала, где описывается доступным, в меру техническим языком о концепции и механизмах работы этих технологий. Условно, все материалы можно поделить на две категории: либо хардкорно технические, где с первого предложения начинается жуть про криптографию, p2p, «цифровое золото» и т.д., либо маркетинговая чушь про новый интернет, капитализацию Биткойна или как некая компания/страна внедрила блокчейн и решила все свои проблемы. Если вы хотите понять, как это все работает и что можно сделать с этими технологиями, то эти статьи для вас.
Я попытаюсь донести основную идею децентрализованной криптовалюты, механизмы ее работы, а также разобрать различные форки Биткойна. Я специально опускаю многие технические детали чтобы не нагружать текст. Главное понять суть, а дальше вы сможете легко разобраться в дебрях самостоятельно.
Часть 1. Биткойн
Часть 2. Другие (не)популярные разновидности Биткойна, блокчейн
Часть 3. Ethereum
Идея
Как только мы пытаемся понять механизм работы Биткойна сразу же начинаем конфликтовать с нашим привычным образом мышления, который наотрез отказывается принимать концепцию нецентрализованной системы управления, без рычагов силового влияния на нарушителей. Но сразу же возникает вопрос, если Биткойном никто не управляет, как же она функционирует? В 2008 году, некий Сатоши Накамото, придумал элегантное решение, в котором каждый участник сети доверяет только своей базе, которую он ведет самостоятельно, и базе большинства если какие-то записи у него отсутствуют.
Давайте попробую объяснить на пальцах на примере небольшой деревни которая решила отказаться от бумажного денежного обращения и внедрить децентрализованную валюту. Пусть это будет особенная деревня в которой все жители знают друг друга по имени, смогут опознать по голосу, очень хорошо разбираются в оттенках цветов и поклоняются королевскому-пурпурному цвету. Итак, жители договариваются что новая валюта будет работать следующим образом:
-
Все денежные движения публичны, т.е. все знают кто, кому, сколько перечислил;
Когда кто-то хочет перечислить кому-то деньги он во всеуслышание заявляет об этом: Я, Джон, перечисляю 100 монет Джеймсу. -
У каждого жителя есть бухгалтерский журнал куда вписываются все денежные перечисления которые он услышал. Все переводы за день записываются на одну страницу, а в следующий день начинают с чистого листа.
- К концу дня, жители совершают странный ритуал который закрепляет все транзакции за этот день, так как транзакция не считается действительной пока не будет закреплена. Ритуал трудоемкий, но за него можно получить вознаграждение и поэтому все хотят участвовать в этом процессе. Процедура такова:
3.1. Для каждой транзакции из этого дня, по специальной формуле, в зависимости от суммы перевода и адресатов подбирается краска определенного цвета и количества. Потом все эти баночки с красками сливают в один чан и хорошенько размешивают.
3.2. Ритуал требует довести полученную смесь до королевского-пурпурного цвета. Для этого, малыми дозами, путем долгого и изнурительного перебора добавляют разные цвета в эту смесь;
3.3. Как только кто-то найдет необходимые цвета и их дозы — сразу же записывает эти данные внизу сегодняшней страницы, зачисляет на свой счет 50 монет в качестве вознаграждения и объявляет об этом всем жителям.
3.4. Жители быстренько проверяют вправду ли он нашел корректные пропорции. Если все верно — одобряют перевод-вознаграждение, закрывают сегодняшнюю страницу и идут спать.
Теперь подробнее по пунктам:
-
Как мы помним, жители могут легко друг друга опознать по голосу, соответственно если кто-то попытается перевести деньги не от своего имени то жители просто игнорируют это заявление, и этот перевод никто не внесет в свои записи.
-
Так как все перечисления публичны, все знают сколько денег на счету у каждого жителя, если у Джона недостаточно средств то его перевод игнорируется (никто не вносит свои записи). В идеале должна получиться единая цепочка записей одинаковая у всех.
-
Если кто-то потерял свой журнал или пропустил некоторые переводы то он опрашивает жителей и синхронизирует свои записи. При этом необходимо опираться только на те записи, которые согласованы с большинством.
- Подбор необходимой дозы и цветов красок очень трудоемкий процесс, а проверить результат работы очень легко. Просто берутся транзакции за этот день, по формуле приготавливают смесь и по объявленной дозе добавляют краски в чан. Если получился королевский-пурпурный цвет — значит всё верно и жители согласны наградить нашедшего эти пропорции. Как только страница запечатана все транзакции считаются действительными и остаются в истории навсегда. Таким образом сохраняется целостность базы, а также поступают новые деньги в систему. Сумма вознаграждения уменьшается вдвое каждые 4 года, что ограничивает общее количество денег в системе. А если еще в следующую страницу добавлять найденные пропорции красок с предыдущей страницы то, страницы будут связаны и никто не сможет изменить транзакции задним числом. При малейшем изменении записей необходимо пересчитывать дозы красок для этой и всех последующих страниц, в добавок необходимо убедить большинство жителей заменить их собственные записи новыми.
Каждый участник сети сам решает, принимать мошеннические транзакции или нет, и пока добросовестных участников большинство, система будет функционировать как надо. Но что значит «как надо», какие цели заложили разработчики такой децентрализованной валюты?
-
Количество денег в системе должно быть ограничено, в этом смысле валюта похожа на золото. Ни у кого не должно быть возможности напечатать кучу денег, что в свою очередь может привести к инфляции и обесцениванию сбережений.
-
Убрать ограничения связанные с минимальными расчетными единицами текущей денежной системы. Например, вы хотите продавать свои услуги за 1 копейку, а может и за сотую долю копейки.
- Гарантия что любой правильный сформированный перевод денег будет проведен, за счет отсутствия единой точки отказа, разве что отключится весь интернет. У никакой организации, даже государства не должно быть возможности откатить/заблокировать транзакцию.
- Для того чтобы обмануть систему, или поменять правила необходимо убедить большинство участников (>50%) сети и т.д.
Реализация
Если с основополагающей идеей все понятно то можем переходить на упрощенную техническую реализацию. Далее вам необходимо знать такие понятия как хэш, шифрование открытым ключом и цифровая подпись.
Каждый участник сети генерирует себе счет/счета, где счет это просто пара ключей сгенерированная алгоритмом ECDSA (алгоритм с открытым ключом для создания цифровой подписи). В качестве адреса счета используется открытый ключ из пары, а для перевода денег со счета требуется подписать этот перевод (транзакция) закрытым ключом. Транзакция транслируется всем участникам сети где есть особые участники, майнеры, которые занимаются формированием единой, согласованной цепочки истории всех транзакций (блокчейн). Майнеры упаковывают текущие транзакции в блок попутно проверяя их корректность. В блоке помимо списка транзакций содержится хэш от предыдущего блока и некое значение NONCE. Для того чтобы блок считался корректным необходимо подобрать такой NONCE, при котором хэш всего блока будет красивым (c большим количеством нулей в начале).
Так как хэширование данных дает совершенно непредсказуемые значения очень сложно подобрать этот NONCE. В списке транзакций первым идет особая транзакция (block reward) которая награждает майнера некой суммой. Как только майнер подберет нужный NONCE, он уведомляет всех и другие майнеры проверяют результат его работы. Этот процесс называется майнинг, за счет него создается единая цепочка блоков и за эту работу майнеры получают вознаграждение. Процедура проверки очень быстрая, проверяются все транзакции и хэш всего блока. Если ошибок и мошенничества нет, то каждый майнер включает этот блок в свой блокчейн и продолжают дальше майнить. Если блок включили в блокчейн то все транзакции считаются совершенными, включая ту самую особую транзакцию которая перечисляет на счет майнера вознаграждение.
Подводим итоги
- Все транзакции общедоступны.
- Есть общепринятый свод правил, а соблюдать или нет — каждый решает самостоятельно. Отсутствует центральный орган с методами силового влияния на нарушителей.
- Транзакция считается успешной (одобренной) если ее упаковали в блок.
- Транзакции упакованные в блоке считаются валидными, так как проверяются многократно.
- Надо поощрять процесс валидации переводов и вовлечь больше участников в это дело.
- Но при этом надо усложнить процесс упаковки. Для этого используется принцип Proof-of-Work. Требуется решить ресурсоемкую задачу результат которой легко проверить.
- Блок считается упакованным если у нее красивый хэш, для этого нужно долго перебирать переменную NONCE в блоке. Найти подходящий NONCE сложно, а проверить хэш легко. Нашедший нужное значение получает вознаграждение.
- Каждый блок содержит в себе хэш от предыдущего, получается цепь из блоков которая растет в одну сторону.
- Иногда цепь может разветвляться, но действительным будет самая длинная ветвь. Чтобы создать блок с фиктивными транзакциями и наращивать эту ветвь злоумышленникам придется затратить большее количество вычислительных ресурсов.
В следующей части будут описаны текущие ограничения и проблемы Биткойна, а также проведен обзор форков нацеленных на решение различных задач.
Литература: о биткойн и на Гитхабе.