Как рассчитывается трудность?
Может ли кто-нибудь объяснить мне на простом английском языке, как вычисляется трудность. У меня очень приблизительное понимание того, что он рассчитывается на основе количества хэш-мощности во всем сообществе биткойнов в течение определенного периода времени. Но это очень расплывчато.
И я понимаю, что это может измениться очень быстро. Может ли это только увеличиться? Есть ли какая-либо формула, как вычислить ее или предсказать?
Спасибо за подробный ответ, Мени Розенфельд. Просто чтобы убедиться, что все правильно. Я суммирую все время, чтобы получить последние 2016 блоков. А затем примените формулу.
2 ответа
проблема биткойнов началась с 1 (и никогда не может идти ниже этого). Затем для каждых 2016 блоков, которые найдены, отметки времени блоков сравниваются, чтобы узнать, сколько времени потребовалось, чтобы найти 2016 блоков, назовите его Т. Мы хотим, чтобы блоки 2016 занимали 2 недели, поэтому, если T отличается, мы умножаем сложность на (2 недели /T) - таким образом, если хешетат продолжается так, как это было, теперь потребуется 2 недели, чтобы найти 2016 блоков.
Например, если это заняло всего 10 дней, это означает, что трудность слишком низкая и, следовательно, будет увеличена на 40%.
Трудность может увеличиться или уменьшиться в зависимости от того, потребовалось ли меньше или больше 2 недель, чтобы найти 2016 блоков. Как правило, сложность будет уменьшаться после снижения хэш-скорости сети.
Если коэффициент коррекции больше 4 (или меньше 1/4), вместо этого используются 4 или 1/4, чтобы предотвратить слишком резкое изменение.
В реализации есть ошибка, из-за которой вычисление основано на времени для поиска последних блоков 2015 года, а не 2016. Для его фиксации потребуется жесткая вилка и, таким образом, откладывается на данный момент.
Можно дать приблизительную оценку следующего изменения сложности, основанного на времени, чтобы найти последние блоки. Никто не может надежно и надежно прогнозировать будущие трудности в долгосрочной перспективе, но каждый может свободно спекулировать на основе тенденций изменения обменного курса, закона Мура и других технических достижений.
Ответ Мени - это хорошо. Я просто хочу дать некоторый практический подробный метод расчета сложности, возможно, полезный для будущих взглядов на ответ этого вопроса.
Давайте посмотрим на заголовок блока генерации Сатоши (часть связанной информации):
$ bitcoin-cli getblockhash 0
000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
$ bitcoin-cli getblockheader 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
{
...
"height": 0,
...
"bits": "1d00ffff",
"difficulty": 1,
...
}
Как мы видим выше, блок генезиса имеет бит «1» и бит «1d00ffff». биткойн-бит означает, что ' target "хэш-значение, новый сгенерированный блок должен удовлетворять условию: двойное значение SHA-256 заголовка блока должно быть меньше этого целевого значения.
Значение битов «1d00ffff» в блоке генеза означает значение «target»:
[0x00000000,0xffff,{0x00..0x00}]
{0x00..0x00} at above has 26 bytes 0x00.
Затем, чтобы найти новый блок, вы должны выполнить поиск этого 32-битного значения nNonce (и nTimes и hashMerkleRoot также), пока значение хеш-блока не будет иметь 4 байта. Кстати, nNonce является одним из полей в структуре заголовка блока:
struct header_structure{ // BYTES NAME
uint32_t nVersion; // 4 version
uint8_t hashPrevBlock[32]; // 32 previous block header hash
uint8_t hashMerkleRoot[32]; // 32 merkle root hash
uint32_t nTime; // 4 time
uint32_t nBits; // 4 target
uint32_t nNonce; // 4 nonce
};
Поскольку алгоритм SHS-256 (а также любой криптографически безопасный алгоритм хеширования) выдает вывод, который появится , как равномерная случайная последовательность , практический метод« проб и ошибок »- единственный способ найти новый блок для выполнения условия. Вероятность найти блок с нулевым ведомым хэш-значением 4 байта равна 1 /(2 ^ 32), что означает, что средние числа «проб и ошибок» равны 2 ^ 32 (т. Е. 4G).
Для простого понимания человеком этого хэш-значения целевого значения мы определяем термин «трудность», что означает, что среднее число «проб и ошибок» позволяет найти блок для соответствия «целевому» условию. И мы определяем ' сложность ": 1 'трудность' = 4G хэши
Затем, до сегодняшнего дня, высота блока биткойнов достигает 501509, давайте посмотрим на его заголовок:
$ bitcoin-cli getblockheader 0000000000000000006c5532f4fd9ee03e07f94df165c556b89c495e97680147
{
...
"height": 501509,
...
"bits": "18009645",
"difficulty": 1873105475221.611,
...
}
Биты блока 501509 = 0x18009645, это компактный формат, состоящий из 256 битов, его формат в 256 бит:
[0x00000000,0x00000000,0x009645,{0x00..0x00}]
{0x00..0x00} at above has 21 bytes 0x00.
that is 0x009645 * (256 ^ 21)
The genesis block's target is ( 0x00ffff * 256 ^ 26 )which is the difficulty unit '1.0'.
So, the difficulty
= (0x00ffff * 256 ^ 26)/ (0x009645 * 256 ^ 21)
= 65535/38469 * (256^5)
= 1.703579505575918 * 2^40
= 1873105475221.611
До сих пор у вас есть все подробности о том, как рассчитать «трудность». В некоторых случаях мы также используем простой формат 1.7T , чтобы сказать трудность, в приведенном выше примере.
(1.703579505575918 * 2^40) = 1.703579505575918T
1T = 2^40 = 1024^4