Найти в Дзене
Yurii Ostafiichuk

Как работает алгоритм отбора аккаунтов, выигравших право сфоржить блок в монете PRiZM?

Для каждого форжащего аккаунта рассчитываются два числа. Первое - это так называемый хит аккаунта. Рассчитывается он из хеша, вычисленного из сигнатуры последнего сфорженного блока и публичного ключа аккаунта-генератора. Число получается не предсказуемое. И второе число - текущее целевое значение для аккаунта. Оно рассчитывается из числа базового целевого значения последнего сфорженного блока умноженного на эффективный баланс аккаунта и на количество секунд, прошедших от метки времени генерации последнего блока. Таким образом, чем больше эффективный баланс у форжащего аккаунта, тем большим получается текущее целевое значение для данного аккаунта. И если целевое значение оказывается больше, чем число хит аккаунта, то такой аккаунт получает право создать блок. Базовое целевое значение пересчитывается у каждого нечётного блока (блока с нечётной высотой). Каким будет базовое целевое значение у будущего сфорженного блока с нечётной высотой, который примет сеть - тоже не предсказуемо. Единст

Для каждого форжащего аккаунта рассчитываются два числа. Первое - это так называемый хит аккаунта. Рассчитывается он из хеша, вычисленного из сигнатуры последнего сфорженного блока и публичного ключа аккаунта-генератора. Число получается не предсказуемое. И второе число - текущее целевое значение для аккаунта. Оно рассчитывается из числа базового целевого значения последнего сфорженного блока умноженного на эффективный баланс аккаунта и на количество секунд, прошедших от метки времени генерации последнего блока. Таким образом, чем больше эффективный баланс у форжащего аккаунта, тем большим получается текущее целевое значение для данного аккаунта. И если целевое значение оказывается больше, чем число хит аккаунта, то такой аккаунт получает право создать блок. Базовое целевое значение пересчитывается у каждого нечётного блока (блока с нечётной высотой). Каким будет базовое целевое значение у будущего сфорженного блока с нечётной высотой, который примет сеть - тоже не предсказуемо. Единственный чётко определенный параметр, увеличивающий вероятность создать конкретному аккаунту блок - это его эффективный баланс. То есть хочешь ловить блоки - увеличивай эффективный баланс.

И при том это не 100% гарантия, то что твой аккаунт создаст следующий блок. Всегда может найтись аккаунт, даже со значением эффективного баланса в 1000 prizm, у которого значение хит аккаунта (значение хеша вычисленного из сигнатуры последнего сфорженного блока и публичного ключа аккаунта) окажется настолько маленьким, что с ним невозможно будет соревноваться и он выиграет право сфоржить блок.

Попытки создать очередной блок в сети предпринимаются непрерывно и сразу после сфорженного очередного последнего блока. Если на текущий момент времени, на текущее значение секунд, прошедшие с момента генерации последнего блока, ни у одного из форжащих аккаунтов число хит аккаунта не оказывается ниже числа целевого значения для данного аккаунта, то время генерации блока затягивается. Т.е. увеличивается количество секунд, прошедших с генерации последнего блока. Постоянное увеличение количества секунд приводит к росту целевого значения у всех форжащих аккаунтов. Так как происходит умножение на это количество секунд. И таким образом у некоторых аккаунтов (одного или нескольких) целевое значение оказывается выше, чем значение хита, и они генерируют блок.

Если право сгенерировать блок выигрывают несколько аккаунтов, то в результате в сети появляются несколько версий блоков, а нужен всего один. Тогда для отбора блока применяется параметр - кумулятивная (накопленная) сложность цепочки блоков. То есть отбирается тот блок, на котором сложность получается больше.

Код механизма отбора аккаунтов, выигравших право на форжинг очередного блока можно посмотреть здесь

PrizmCore/BlockImpl.java at master · prizmspace/PrizmCore