Equihash: Pass each obtained solution to a callback for immediate checking

Closes #1143
This commit is contained in:
Jack Grigg
2016-07-27 19:15:49 +12:00
parent 6dfc9e7a7c
commit 51eb5273f5
7 changed files with 189 additions and 97 deletions

View File

@@ -188,19 +188,13 @@ Value generate(const Array& params, bool fHelp)
pblock->nNonce.size());
// (x_1, x_2, ...) = A(I, V, n, k)
std::set<std::vector<unsigned int>> solns;
EhBasicSolveUncancellable(n, k, curr_state, solns);
for (auto soln : solns) {
bool isValid;
EhIsValidSolution(n, k, curr_state, soln, isValid);
assert(isValid);
std::function<bool(std::vector<eh_index>)> validBlock =
[&pblock](std::vector<eh_index> soln) {
pblock->nSolution = soln;
if (CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus())) {
goto endloop;
}
}
return CheckProofOfWork(pblock->GetHash(), pblock->nBits, Params().GetConsensus());
};
if (EhBasicSolveUncancellable(n, k, curr_state, validBlock));
goto endloop;
}
endloop:
CValidationState state;