Глядя на то, как трудность вычисляется https://en.bitcoin.it/wiki/Difficulty и пытаюсь порт / реализовать Nbits к затруднению в PHP, но не много удачи
$ Nbits = 404103235;
$ Трудности = calculate_difficulty ($ Nbits);
эхо "Сложность = $ трудность" , PHP_EOL; // 404103235 Nbits должна быть трудность: 49,692,386,354.894
Функция calculate_target ($ Nbits) {
$ Сдвига = 8 * ((($ Nbits >> 24) & 0xff) - 3);
эхо $ сдвига. PHP_EOL;
$ Бит = $ Nbits & 0x7fffff;
Эхо $ битов. PHP_EOL;
$ Знак = (Nbits & 0x800000)? -1: 1;
эхо знака $. PHP_EOL;
возврат ($ сдвиг >= 0)? Знак $ * ($ бит << $ Сдвига): знак $ * ($ бит >> - $ сдвига);
}
Функция target_to_difficulty ($ мишень) {
вернуться ((1 << 224) - 1) * 1000 / ($ целевая + 1) / 1000,0;
}
Функция calculate_difficulty ($ Nbits) {
вернуться target_to_difficulty (calculate_target ($ Nbits));
}
Вывод:
168
1450051
1
Трудность = 2.6938707666768E-9
Ожидать что-то вроде:
168
1450051
1
542528489142608155505707877213460200687386787807972294656
Я думаю, мне нужно что-то вроде BigNum в C / C ++? Можно ли это сделать в PHP? Есть идеи?