Блокчейн анонимной сети и логика передачи денег
В своей прошлой теме я писал, что блокчейн будет представлять собой таблицу базы данных с 2-ми колонками: номиналом и номером купюры. В данной версии, я полностью убрал номиналы и оставил один общий, теперь есть только одно значение, а потому, колонку с номиналами можно убрать и оставить одни хеш-адреса.
Эти номера есть такие же хеш-адреса, как у биткоина. При каждой генерации такого адреса у Вас есть публичный и приватный ключ, который поможет ваш подписывать транзакцию.
Как теперь происходит передача денег. В начале происходит обмен сообщениями, например, в шифрованном канале Telegram. Вы хотите что-то купить и Вам нужно передать деньги. Пусть цена составляет 120 единиц. Как только Вы договорились с продавцом о цене, он генерирует 120 хеш-адресов и пересылает их Вам, а сам оставляет приватный и публичные ключи себе.
Теперь ваша задача использую свои приватные ключи, создать 120 транзакций и передать тем самым доступ ему. Как происходит передача доступа. Вы указываете свой хеш-адрес, потом указываете хеш-адрес продавца и подписываете данную транзакцию приватным ключом от именно этого вашего хеш-адреса.
При таком способе большая часть будет автоматизированно и все что Вам надо будет сделать, это когда продавец в чате вышлет все 120 хеш-адресов их скопировать и вставить к себе в кошелек для формирования транзакций.
Обратите внимание, теперь передача денег - это проблема отсылающего, что само по себе уменьшает желание создать двойную трату, т.к. тем самым Вы будете мешать себе переслать деньги. Понятно, что это не исключает контроля на каждом клиенте все пришедших транзакций.
В идеале хотелось бы, чтобы в сети был свой мессенджер и позволял формировать транзакции прямо в шифрованном чате с собеседником в автоматическом режиме, нужно было бы только указать сумму.
Итак, какие достоинства анонимности мы получаем:
1. Распределенная сеть, где все полностью равноправны.
2. Постоянно изменяющиеся хэш-адреса у монет. Огромная трудность для анализа.
3. Полностью приватные и анонимные платежи. Ведь теперь ключи можно посылать в зашифрованных сообщениях обычным текстом.
4. Отсутствие комиссии.
5. Дополнительную безопаснось. Любой хэш номер ограничен суммой номинала и даже если хакер взломает и найдет приватный ключ, то вы потеряете только этот номинал, а не всю сумму, которая вся храниться на счете, как в биткоине. Т.е. он фактически проведет сильную работу по взлому, чтобы получить всего один номинал этой сети.
6. Невозможность понять из блокчейна, сколько у кого есть денег. Ведь контроль за своими монетами находиться только у вас.
7. Возможность обмануть когда у вас силой забирают деньги. Ведь данные деньги на кошельке легко можно разделять на несколько кошельков.
8. Постепенность прохождения суммы. Смысл в том, что в отличии от других криптовалют, она переводиться не вся сразу за транзакцию, а постепенно, т.е. полный переход прав растянут во времени, а это ещё сильнее затрудняет анализ блокчейна.
Алгоритм консенсуса анонимной криптовалюты
Теперь давайте перейдем к самому главному, а именно алгоритму консенсуса. В разных криптовалютах применяются разные алгоритмы консенсуса, но по сути все они определяют победителя, которому достанется право формировать блок из транзакций.
Как я уже сказал у нас распределенная сеть со случайными подключениями. В такой сети алгоритм консенсуса на принципе, кто раньше успел и принципа лидерства, работать не будет, т.к. такую сеть с не особенно синхронизируешь. Здесь полностью другой принцип формирования консенсуса, мы здесь не выбираем победителя, а выращиваем консенсус всей сети из цепочек транзакций.
Очень сильно напрашивается аналогия с рекомбинацией молекул ДНК:
Данный алгоритм не требует каких-то жестких рамок, например, ограничение по времени. Главное его достоинство, что консенсус формируется постепенно и чем больше времени проходит, тем на большее количество участников он распространяется.
Я на языке программирования С++ смог собрать небольшой эмулятор анонимной распределенной сети и посмотреть, как он будет взаимодействовать.
Вот так выглядит сеть в начальном состоянии:
Мы условимся, что пусть наша сеть состоит из 10 участников. Пусть каждый участник имеет в своем буфере транзакций только одну свою транзакцию. Также при каждой итерации один случайный участник осуществляет обмен информацией с другим случайным участником.
Транзакции участников пронумерованы. Например, у участника с номером один User01, транзакция имеет вид 01, у участника номер два User02 транзакция имеет номер 02 и так далее.
Написанное приложение позволяет проводить только одну заранее заданную серию итераций и потом оно закрывается, а потому в дальнейшем это будут уже другие взаимодействия от начального состояния, однако, Вы увидите, как с увеличением количества итераций увеличивается консенсус сети, т.е. в данном случае расположение и порядок транзакций.
Вот состояние сети после 5 итераций:
Прошу обратить внимание на формирование консенсуса у участников User2, User5, User7.
Вот состояние сети после 10 итераций, это новое моделирование, а потому и консенсус будет другой, но он станет больше. Смотрим:
Хоть здесь моделируется с самого начала уже другие цепочки, но мы видим, как консенсус растет от увеличения количества итераций.
А вот после 20 итераций:
Нужно понимать, что взаимодействия осуществляются случайным образом, однако будет понятно, что после некоторой величины сеть приходит к 100% консенсусу. В данном случае для 10 участников такое случается практически всегда при 40 итерациях.
Для формирования консенсуса всей сети нам не нужно её 100% значение, а потому можно урезать длины цепочек, а также снизить порог принятия консенсуса сети допустим до величины 80%-90%.
Как я уже сказал, что нам не нужен 100% сети, т.к. в реальных условиях он может быть недостижим. Допустим некоторые участники в данный момент не проводят свои транзакции.
Это значит, что нам нужно формировать консенсус из количества транзакций примерно равному 50% от количества участников. Например, в нашем примере, консенсус будет формироваться только первыми 5 транзакциями, а остальная длина цепочки уже не важна.
Каждый участник хеширует эти первые 5 цепочек и получает одно значение, остальные делают тоже самое. Таким образом можно по карте сети увидеть у какого участника какой получился хеш. Как только он допустим принимает одинаковое значение у 80%-90% сети, можно сказать, что консенсус сетью сформирован.
Теперь эти первые 5 транзакций для которых мы считали хеш, начинаем использовать в нашем табличном блокчейне и производим там необходимые изменения.