Это нормально, что моя функция майнинга работает бесконечно? - PullRequest
0 голосов
/ 28 апреля 2020

Итак, я пытаюсь реализовать криптовалюту для школьного проекта, но я застрял в части проверки блоков, майнинге. Я использовал этот код, который нашел в Интернете, и адаптировал его к своему проекту:

void Block::MineBlock(int nDifficulty)
{
std::string cstr(nDifficulty + 1, '\0');
for (int i = 0; i < nDifficulty; i++)
{
    cstr[i] = '0';
}
cstr[nDifficulty] = '\0';

std::string str(cstr);

do
{
    nNonce++;
    blockHash = generateHash();
} while (blockHash.substr(0, nDifficulty) != str);
this->checked = true;
}

Мой nDifficulty установлен на 1. Это нормально, что он зацикливается до бесконечности? Вот также функция generateHa sh:

std::string Block::generateHash()
{
std::stringstream ss;
ss << index << timestamp << filename << nNonce << prevHash;
return sha256(ss.str());
}

1 Ответ

0 голосов
/ 28 апреля 2020

Ваша str переменная имеет длину nDifficulty + 1.

Таким образом, он никогда не может сравниваться равным подстроке длины nDifficulty, и условие l oop никогда не будет ложным.

...