Post
Topic
Board Альтернативные криптовалюты
Re: NovaCoin (scrypt PoW + PoS hybrid) [self-mod]
by
Balthazar
on 11/03/2015, 21:51:04 UTC
да чёрт его знает как оно работает если честно
Аналгем за 1-й курс, метод половинного деления aka бисекция Smiley

Составляем уравнение:

Code:
(nRewardCoinYearLimit / nRewardCoinYear) ^ 3 = bnProofOfStakeLimit / bnTarget

где неизвестным является nRewardCoinYear. Затем пытаемся решить его слегка модифицированным методом бисекции. Модифицированным, потому что находит только корни на отрезке [CENT, COIN]. Если же корень за пределами отрезка, то в качестве решения просто берется крайняя точка с соответствующей стороны отрезка.

Code:
nProofReward = min(10, CoinAge / 3650 * (difficulty / 0.03125) ^ (1/3))
Ах вот о какой формуле речь.

Исправлено:

https://github.com/novacoin-project/novacoin/wiki/Proof-of-stake

3) Считаем nProofReward:
Code:
8343.240769 * 0.30 * 33 / (365 * 33 + 8) = 6.852906

А в блоке видим
Code:
Reward 6.852708

Формулы годятся для оценок, но не дадут значений, совпадающих с результатами метода бисекции. Более того, на разных платформах они могут давать разные результаты... Простой пример в питоне, те же числа:
Code:
8343.240769 * ((0.03125 / 1.16394928) ** (1.0 / 3)) * 33 / (365 * 33 + 8)

И совсем другой результат: 6.840043785996486

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

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

P.S. На самом деле, если говорить совсем уж строго, то это бисекция является приближением. Но в нашем случае это не имеет значения, поскольку формулы не универсальны.