Proof-of-Stake
Proof-of-Stake это термин, означающий использование самой массы единиц (факта владения), для достижения определенных целей. В NovaCoin Proof-of-Stake используется, чтобы обеспечить майнинг и обработку транзакций наравне с Proof-of-Work.
Novacoin использует смешанный Coin-Age/CoinDayWeight подход, чтобы предоставить доказательство доли. Сложность Proof-of-Stake регулируется таким образом, чтобы ограничить скорость, с которой новые блоки могут быть сгенерированы сетью, до 10 минутного целевого интервала между блоками. Из-за очень низкой вероятности успешной генерации доказательства, это делает непредсказуемым определение того, какой именно компьютер в сети, сможет сгенерировать следующее решение.Как это должно работать?
Это выполняется посредством сканирования всех доступных входов, чтобы найти один удачный, который удовлетворяет следующему условию:SHA256(SHA256(KERNEL)) < CoinDayWeight * NetworkTargetМайнер должен найти хеш SHA256, который меньше целевого значения. Целевое значение получается из текущей сложности в сети, с использованием параметра CoinDayWeight. Доказательство представлено хешем ядра и подписью заголовка. Каждое coinstake ядро представлено структурой из 6 полей, некоторые из этих полей могут быть изменены довольно свободно.
Поле | Тип | Размер | Требования |
---|---|---|---|
nStakeModifier | unsigned long int | 8 | Изменения вручную недопустимы. |
nTimeBlockFrom | unsigned int | 4 | Метка времени для блока, который обеспечил предыдущую транзакцию. |
nTxPrevOffset | unsigned int | 4 | Смещение предыдущей транзакции в блоке. |
nTxPrevTime | unsigned int | 4 | Метка времени предыдущих транзакций. |
nPrevoutNum | unsigned int | 4 | Выходное число предыдущей транзакции. |
nTimeTx | unsigned int | 4 | Текущая метка времени. |
Сколько времени займет у меня генерация Proof-of-Stake?
Точно так же как с Proof-of-Work, никто не может сказать точно. Но можно оценить, сколько времени это могло бы занять. Вычисления очень похожи на вычисления вероятности Proof-of-Work, но вместо параметраскорость перебора хэшей в секунду
, здесь используется единица * день-в-секунду
.
Так, если сложность 1.0 то необходимо ~ 4294967297 единица * день-в-секундах
, чтобы найти блок.Вероятность успешной генерации блока в течение одного дня может быть вычислена от доступного CoinDayWeight используя формулу:
P = CoinDayWeight * 86400 / (4294967297 * difficulty)Оценим вероятность для предполагаемой сложности (0.23482093):
Возраст Сумма \ | <= 30 | 60 | 90 | 120 | ∞ |
---|---|---|---|---|---|
1 | 0 | 0.0013 | 0.0026 | 0.0051 | 0.0077 |
10 | 0 | 0.0128 | 0.0257 | 0.0514 | 0.0771 |
100 | 0 | 0.1285 | 0.257 | 0.514 | 0.771 |
Среднее время генерации блока может быть вычислено как:
T = 4294967297 * difficulty / (CoinDayWeight * 86400)
Возраст Сумма \ | <= 30 | 45 | 60 | 90 | 120 | ∞ |
---|---|---|---|---|---|---|
1 | ∞ | 778.2 | 389.1 | 194.55 | 129.7 | 129.7 |
10 | ∞ | 77.82 | 38.91 | 19.46 | 12.97 | 12.97 |
100 | ∞ | 7.78 | 3.89 | 1.95 | 1.3 | 1.3 |
Как начать генерировать Proof-of-Stake блоки?
Если есть ненулевой баланс, то novacoind будет автоматически пытаться сгенерировать хеши. Если нашелся PoS-блок, то награда вычисляется используя текущую Proof-of-Stake сложность и использованное количество единица-дней. Величина награды добавляется к затраченному на этот PoS блок количеству единиц (иначе инпут, вход) и показывается суммарно, в полеstake
вывода getinfo
.Поскольку доля временно удерживается от траты (на 520 блоков), предусмотрен параметр конфигурации
reservebalance
на случай, если есть необходимость сохранить баланс доступным для траты, предотвратив его использование в качестве доли.
Можно добавить строку reservebalance=10000
в novacoin.conf
и перезапустить novacoind. В этом случае novacoind будет пытаться сохранить баланс выше 10000 единиц при генерации доли.
Что относительно наград?
Награда за блок основана на параметре Coin-Age и Proof-of-Stake сложности. Награда может быть вычислена, используя формулуnProofReward = min(10, CoinAge * (0.03125 / difficulty) ^ (1 / 3) * 33 / (365 * 33 + 8))Другими словами награда ограничена значением в 10 единиц, запускается с 1 единицы на единица-год и ополовинивается каждое 8-ми кратное увеличение сложности.