Post
Topic
Board Идеи
Re: POSm (Proof of similarity, доказательство сходства)
by
imhoneer
on 17/04/2022, 09:16:17 UTC
Когда у алгоритма консенсуса есть сложность или его аналог, то он может попасть в ловушку этой сложности.

Особенно от этого страдали небольшие блокчейны с алгоритмом POW. Был небольшой хешрейт сети, потом приходил какой-нибудь китайчонок с майнинг фермой, начинал майнить, сложность после этого взлетала до небес, после этого он уходил.

У сети опять становился маленький хешрейт, но уже высокая сложность. Блоки либо очень долго майнились, либо не майнились вообще.

Именно для обхода данной проблемы у меня пересчет идёт на каждом блоке.

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

Как сейчас у меня реализовано регулирование минимальной суммы блока:
Quote
Оно будет работать следующим образом. Вначале набирается статистика из 10 и более блоков и анализируется среднее время создания каждого блока.

Теперь на каждом новом созданном блоке, исходя из расчета среднего времени создания блока будет делаться следующие:

- Если среднее время создания блока меньше 3 минут, то минимальная сумма блока увеличивается на 10%.

- Если среднее время создания блока больше 3 минут, то минимальная сумма блока уменьшается на 10%.

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

Именно поэтому такое ступенчатое регулирование придется видоизменить на другое решение.

И вот, как оно будет выглядеть на примере.

Пусть у нас сейчас минимальная сумма блока равна 100. До этого все блоки создавались со стандартным временем примерно 3 минуты.

И вдруг сеть резко теряет возможность поддерживать данную минимальную сумму блоков.

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

Было примерно для 10 последних блоков следующие время создания:
1-й блок=3 мин
2-й блок=3 мин
3-й блок=3 мин
4-й блок=3 мин
5-й блок=3 мин
6-й блок=3 мин
7-й блок=3 мин
8-й блок=3 мин
9-й блок=3 мин
10-й блок(текущий)=3 мин.

Среднее время за последние 10 блоков равно:
(3+3+3+3+3+3+3+3+3+3)/10=3

А теперь представим, что произошла потеря сетью возможности создавать блоки с текущей минимальной суммой блока и сеть начинает простаивать.

Время текущего блока определяется по последнему подблоку, а тому майнер может перезаписывать свой последний подблок в текущем блоке, в результате возможен следующий пересчет, скажем для простаивания последнего блока для 10 минут:
(3+3+3+3+3+3+3+3+3+10)/10=3.7

И так у нас было среднее время 3, а сейчас стало 3.7 изменение составило 23.33%.

Теперь нашу минимальную сумму можно уменьшить на этот процент, она была раньше 100, то сейчас она стала 77.

Допустим этого не достаточно и сеть может создавать блок с минимальной суммой, скажем 55.

Тогда время создания последнего блока будет не 10 минут, а больше.

Удовлетворяющим условием будет время создания блока равное 17 минут, давайте это проверим:
(3+3+3+3+3+3+3+3+3+17)/10=4.4

И так у нас было среднее время 3, а сейчас стало 4.4 изменение составило 46.67%. И если на этот процент уменьшить минимальную сумму блока 100, то получим 53.33.

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