В процессе обсуждения этой темы, иногда появляются интересные мысли, которые приводят к улучшению первоначальной идеи или её дополнению. Поэтому все самые свежие дополнения и улучшения, будут появляться в этих двух постах вначале и иметь самую актуальную версию.Алгоритм распределенного доверия. Часть 1.
Название алгоритм распределенного доверия отражает суть идеи. Для начала нам нужно создать доверенную среду в отсутствии доверия и уже потом проводить в этой среде различные операции. Операции в доверенной среде, как правило, проводятся намного быстрее. Поэтому мы вначале создадим блокчейн, а потом асинхронную таблицу данных.
Блокчейн
Разница между блокчейном и распределенной базой данных в децентрализации. И когда нам говорят, что криптовалюта и биткоин в частности плохо, а вот блокчейн классная технология, то это просто не имеет смысла.
Блокчейн оказавшись централизован превращается в обычную распределенную базу данных и причем при этом не самую эффективную.
Задача блокчейна хранить информацию именно у независимых источников, а чтобы независимые источники согласились хранить вашу информацию у себя, то они должны получать определенное вознаграждение, наиболее удобное вознаграждение - это деньги в виде криптовалюты, она более универсальная в плане награды, чем конкретный товар или услуга. Другое дело, что для этой криптовалюты обязательно надо думать, над её обеспечением товарами и услугами иначе она так и останется просто цифрами.
Таким образом нам нужна децентрализация, т.е. независимые источники, которые будут получать вознаграждение за работу сети. Значит в первую очередь мы очерчиваем круг заинтересованных лиц, это те кто поддерживает работу сети и получает вознаграждение. Значит они должны иметь аккаунты в сети и чем больше у кого-то денег в этой сети, тем больше он заинтересован в правильной работе этой сети.
Казалось бы вырисовывается классический POS, однако, надо делать по другому.
У нас будет один классический блокчейн, где вначале находится хеш, как в биткоине. Это чистый POW, этот хеш может найти любая нода и распространить в сеть. А вот чтобы не было форков, то его подписывают заверяющие ноды, такому блоку надо набрать минимум 60% голосов сети.
Это именно блокчейн для заверяющих нод. По аналогии, он чем то напоминает MakerDAO, где есть разделение, на токен голоса (MKR) и сами деньги (DAI).
Также и здесь, в этом блокчейне не передаются деньги, а передаются голоса сети.
Таким образом каждую монету равную в 1 голос можно всегда отследить от самого стартового блока, как я уже сказал всего таких монет может быть только 100,000. Если какая-либо нода не голосовала с адреса уже скажем 1 месяц, то производится операция по удалению токена на этом адресе и отдача этого токена на адрес майнера. Таким образом даже если и будут теряться доступы к голосам сети, то с течением времени, эти голоса будут созданы вновь и распределены.
И так, мы получили создание хеша любым посторонним майнером (POW), где для исключения форка идет подписывание этого хеша голосами сети.
Такой блок создается раз в час.
Иерархия хеша
Как избежать форков блоков, можно ещё продумать. Например, ввести иерархию хеша. Условно есть 2 разных найденных хеша от 2 разных майнеров. Теперь их найденные хеши сравниваем с хешем предыдущего блока. У кого хеш будет совпадать или будет наиболее приближен к хешу предыдущего блока, тот блок и подписывают ноды и принимают.
А вот сами деньги и прочие транзакции рассылаются и заверяются по принципу обходного листа. Все заверяющие ноды, которые подписали текущий блок (не менее 60% сети) будут проверять и подписывать любую вашу транзакцию, что позволяет проводить транзакции совершенно асинхронно по принципу DAG в соответствующих блокчейнов, вот уже это использует нашу асинхронную таблицу данных.
Выделив заверяющие ноды в отдельный блокчейн, мы смогли освободить нашу асинхронную таблицу транзакций от ежечасного голосования и тем самым убрать блокировку транзакций в конце каждого часа.
Также используя POW и последующие подписи, для создания блока каждый час мы существенно увеличили надежность всей системы.
Таким образом мы и увеличили надежность(POW+ подписи) и оставили огромную скорость асинхронных транзакций (аналог DAG алгоритма).
Далее это заверяющий блока. Заверяющим данный блок, как уже было собрано 60% голосов сети, является тот же майнер, что и создал этот блок.
Таким образом, майнер находит блок и рассылает его по сети, заверяющие ноды подписывают данный блок, майнер собирает эти подписи и весь этот список окончательно заверяет своей подписью.
Принципы пересылки и хранения денег
Один кошелек должен управлять множеством счетов и на одном адресе у всех должна быть одинаковая сумма - это одна единица. Условно Вам надо передать сумму 150 Единиц, тогда со 150 ваших адресов передадутся на другие 150 адресов получателя сумма в 150 Единиц, по 1 Единице на каждом адресе.
Однако, это не совсем удобно. Ведь суммы могут быть, как очень большие так и очень маленькие, а потому я предлагаю ввести в некотором роде виды валют.
Данная идея сходна вот с чем, в древности были очень дорогие монеты из золота, чуть подешевле уже из серебра и ещё более дешевые уже из бронзы и совсем дешевые из меди.
Так же и у меня, введем следующие обозначения:
1,
000,
000,
000.
000 000 000 A B C D E FТаким образом:
1 монета A означает 1,000,000 обычных монет.
1 монета B означает 1,000 обычных монет.
1 монета C означает 1 обычную монету.
1 монета D означает 0.001 обычной монеты.
1 монета F означает 0.000 001 обычной монеты.
1 монета E означает 0.000 000 001 обычной монеты.
И так допустим нам надо передать сумму 55,045,100.245 567 340 тогда мы делаем вот что, передаем на счета получателя следующие монеты:
С 55 адресов отправителя передаются
55 монет A на 55 счетов получателя.
С 45 адресов отправителя передаются
45 монет B на 45 счетов получателя.
Со 100 адресов отправителя передаются
100 монет C на 100 счетов получателя.
С 245 адресов отправителя передаются
245 монет D на 245 счетов получателя.
С 567 адресов отправителя передаются
567 монет F на 567 счетов получателя.
С 340 адресов отправителя передаются
340 монет E на 340 счетов получателя.
Иногда нам понадобится делать размен монет, а именно у нас есть
1000 монет C и мы хотим их обменять на
1 монету B, тогда нам надо создать транзакцию в которой с 1000 наших адресов передаются
1000 монет C на 1 специальный счет, в котором они сжигаются и потом один счет в котором печатается
1 монета B.
Также и обратная ситуация, когда допустим у нас есть
1 монета B и мы хотим обменять её на
1000 монет C и нам надо нашу монету переслать на специальный счет для сжигания, плюс передать в транзакции список из 1000 счетов, на которые начисляться наши монеты.
Получение какой либо суммы будет происходить с одной группы счетов на другую группу, причем в большинстве случаев это будут новые счета. Также в такой сети будут идти постоянные перемещения и смены адресов аккаунтов. Крупные суммы проходят по нескольким счетам и разной задержкой времени, что намного усложняет вообще какой либо анализ перемещений.
Таким образом деньги у всех одинаковы по суммам и постоянно перемещаются, никогда нельзя однозначно доказать, что кто либо является их хозяином в данный момент, если они несколько раз перемешались и делились.
Введя такие меры, мы практически полностью обезличим счета пользователей. Больше не будет видно китов, перемещения крупных капиталов. Если все будут пользоваться для приема денег только новыми счетами, то станет практически невозможно понят кто владелец этих денег.
Заверитель должен собрать от 60% голосов в сети и выше, пока он этого не сделает, сеть ждет блок и может функционировать на старом блоке. Забегу сразу вперед и скажу, что для любой транзакции в сети требуется одобрения из этого списка от 55% всей сети.
Таким образом у нас в блокчейне, в каждом блоке, все участники одобряют своей подписью номер блока и адрес заверителя.
Зачем нужен заверитель. Он как бы синхронизирует всю сеть по количеству участников. Ведь в одном месте могут быть одни участники, а в другом куда данные не добрались, то другие. И чтобы у всех был один список участников и появляется заверитель, который создаем блок по правилам и который включает в него от 60% голосов сети и выше.