В общем придумал, как мне кажется довольно необычный алгоритм консенсуса, который является POS, но работает, как POW.
Я его назвал POSm (Proof of similarity, доказательство сходства).
Я уже в других своих постах высказывался о мысли, что в алгоритмах POS и POW над безопасностью не работает вся сеть, там само доказательство находиться состязательным методом или кто выиграл или кто нашел первым нужный хеш. Я же ставлю цель чтобы работала вся сеть и именно этот алгоритм это и будет делать.
Начну сразу с примера, как он работает. Пусть у нас есть хеш предыдущего блока (как получается этот хеш я рассказу ниже, а сейчас примем, что он просто есть).
И так есть хеш:
3D8293BD4DA72B5437F9B4810B991870145AD443686CF2DDD7B6C16E4F3A4655
Также у нас есть реестр адресов для стейкинга, которые отправили прежним блоком или ещё раньше сумму не меньше одной десяти миллиардной от всех напечатанных денег.
Пусть у нас кроме остальных в этом реестре находятся следующие адреса:
3D8293BD4DA72B5437F9B481E85605A82F82AE07D25F57818AEF65E2243AB5D1
3D8293BD4DA72B54B2284D6B0F3C1368A74D57B1A5A390C8E84540751FB5E51C
3D8293BD4DAA1E21366E4638ED6CC90C8F2702E340B1D9AD0E7FAA0D17BE5D9
3D82936A648A463A27D20E28B1674B68A7CAB351FFCE01A88A00F84A84824505
3D989C378E86086DC3FD6E528D4ED4D7B31B68E6DF3C5D787451E935DECA3020
3082B0DCBF7B2BA5CB6BC4CAABE6A157B1FA3B862FC21C33DB51CEA53B176E06
И так вы видите, что у этих адресов есть совпадения с нашим хешем. Для первого адреса совпадение равно 24, для второго 16, для третьего 11, для четвертого 6, для пятого 2 и для шестого 1.
Каждый адрес из реестра стейкинга при наличии хотя бы одного совпадения может из мемпула взять транзакцию или количество транзакций по числу совпадения и создать текущий блок, либо присоединить транзакции к текущему блоку от другого адреса.
Таким образом первый адрес с числом совпадения 24 может взять 24 транзакции из мемпула и создать блок, либо присоединить их к уже созданному блоку.
У каждого блока есть сумма числа совпадений. Условно, если блок создал только первый адрес с 24 совпадениями, то сумма числа совпадений всего блока будет только 24. Если же к этому блоку добавил свои транзакции второй адрес с 16 совпадений, то сумма числа совпадений увеличивается до 40.
Задача каждый ноды принять текущий создаваемый блок, если у неё нет вообще никакого блока, либо принятая версия текущего блока имеет сумму числа совпадений меньше, если у ноды есть адрес, который имеет право включать в блок транзакции, то она проверяет эти транзакции, чтобы они не повторялись и включает их в текущий блок и передает дальше. Также при создании блока пишется время записи, естественно получая блок нода проверяет время, которое не может быть больше текущего, условно блоки нельзя подписывать будущим временем.
Таким образом сеть постоянно ищет и строит блоки, тем самым стремясь максимизировать сумму числа совпадений.
Как только сеть находит все адреса, которые могли включить транзакции и её сумма числа совпадений максимальна, она ещё ждет некоторое время, а потом начинает строить от полученного хеша новый блок.
Но самое главное, все блоки суммируются и получается сумма от всех блоков числа совпадения.
Фактически мы имеем блокчейн в блокчейне. Вначале строятся транзакции в блоке стремясь к максимальному числу совпадений, а потом уже и вся цепочка блоков, как в биткоине при решении форков стремиться к максимальному числу совпадений.
Таким образом сумма числа совпадений здесь можно представить, как аналог сложности в алгоритме POW.