Fill in more randomx miner code
This commit is contained in:
@@ -1012,9 +1012,6 @@ void static RandomXMiner()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( notaryid != My_notaryid )
|
|
||||||
My_notaryid = notaryid;
|
|
||||||
|
|
||||||
std::mutex m_cs;
|
std::mutex m_cs;
|
||||||
bool cancelSolver = false;
|
bool cancelSolver = false;
|
||||||
boost::signals2::connection c = uiInterface.NotifyBlockTip.connect(
|
boost::signals2::connection c = uiInterface.NotifyBlockTip.connect(
|
||||||
@@ -1026,9 +1023,8 @@ void static RandomXMiner()
|
|||||||
miningTimer.start();
|
miningTimer.start();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if ( SMART_CHAIN_SYMBOL[0] != 0 ) {
|
fprintf(stderr,"trying %s Mining with randomx\n",SMART_CHAIN_SYMBOL);
|
||||||
fprintf(stderr,"trying %s Mining with randomx\n",SMART_CHAIN_SYMBOL);
|
|
||||||
}
|
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
if (chainparams.MiningRequiresPeers()) {
|
if (chainparams.MiningRequiresPeers()) {
|
||||||
@@ -1073,7 +1069,7 @@ void static RandomXMiner()
|
|||||||
{
|
{
|
||||||
miningTimer.stop();
|
miningTimer.stop();
|
||||||
c.disconnect();
|
c.disconnect();
|
||||||
LogPrintf("HushMiner terminated\n");
|
LogPrintf("HushRandomXMiner terminated\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
static uint32_t counter;
|
static uint32_t counter;
|
||||||
@@ -1087,10 +1083,10 @@ void static RandomXMiner()
|
|||||||
if (!pblocktemplate.get())
|
if (!pblocktemplate.get())
|
||||||
{
|
{
|
||||||
if (GetArg("-mineraddress", "").empty()) {
|
if (GetArg("-mineraddress", "").empty()) {
|
||||||
LogPrintf("Error in HushMiner: Keypool ran out, please call keypoolrefill before restarting the mining thread\n");
|
LogPrintf("Error in HushRandomXMiner: Keypool ran out, please call keypoolrefill before restarting the mining thread\n");
|
||||||
} else {
|
} else {
|
||||||
// Should never reach here, because -mineraddress validity is checked in init.cpp
|
// Should never reach here, because -mineraddress validity is checked in init.cpp
|
||||||
LogPrintf("Error in HushMiner: Invalid -mineraddress\n");
|
LogPrintf("Error in HushRandomXMiner: Invalid -mineraddress\n");
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1119,12 +1115,12 @@ void static RandomXMiner()
|
|||||||
savebits = pblock->nBits;
|
savebits = pblock->nBits;
|
||||||
HASHTarget = arith_uint256().SetCompact(savebits);
|
HASHTarget = arith_uint256().SetCompact(savebits);
|
||||||
roundrobin_delay = ROUNDROBIN_DELAY;
|
roundrobin_delay = ROUNDROBIN_DELAY;
|
||||||
|
Mining_start = 0;
|
||||||
|
|
||||||
// HASHTarget_POW = hush_adaptivepow_target(Mining_height,HASHTarget,pblock->nTime);
|
|
||||||
gotinvalid = 0;
|
gotinvalid = 0;
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
//fprintf(stderr,"gotinvalid.%d\n",gotinvalid);
|
fprintf(stderr,"gotinvalid.%d\n",gotinvalid);
|
||||||
if ( gotinvalid != 0 )
|
if ( gotinvalid != 0 )
|
||||||
break;
|
break;
|
||||||
hush_longestchain();
|
hush_longestchain();
|
||||||
@@ -1160,9 +1156,6 @@ void static RandomXMiner()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// TODO: we may want to tweak these params to more closely match the 2.8 days and ~2 hrs
|
|
||||||
// which is what they work out to on XMR
|
|
||||||
// The key block will change every ~21.3 hours with a 75s block time
|
// The key block will change every ~21.3 hours with a 75s block time
|
||||||
// and every ~17 hours with the default 60s block time for HSCs
|
// and every ~17 hours with the default 60s block time for HSCs
|
||||||
int randomxInterval = 1024;
|
int randomxInterval = 1024;
|
||||||
@@ -1204,9 +1197,79 @@ void static RandomXMiner()
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
// TODO: use randomx hash to build a block
|
// TODO: use randomx hash to build a block
|
||||||
|
|
||||||
}
|
std::function<bool(std::vector<unsigned char>)> validBlock =
|
||||||
|
#ifdef ENABLE_WALLET
|
||||||
|
[&pblock, &hashTarget, &pwallet, &reservekey, &m_cs, &cancelSolver, &chainparams]
|
||||||
|
#else
|
||||||
|
[&pblock, &hashTarget, &m_cs, &cancelSolver, &chainparams]
|
||||||
|
#endif
|
||||||
|
(std::vector<unsigned char> soln) {
|
||||||
|
int32_t z; arith_uint256 h; CBlock B;
|
||||||
|
// Write the solution to the hash and compute the result.
|
||||||
|
LogPrint("pow", "- Checking solution against target\n");
|
||||||
|
pblock->nSolution = soln;
|
||||||
|
solutionTargetChecks.increment();
|
||||||
|
B = *pblock;
|
||||||
|
h = UintToArith256(B.GetHash());
|
||||||
|
if ( h > hashTarget )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
CValidationState state;
|
||||||
|
if ( !TestBlockValidity(state,B, chainActive.LastTip(), true, false))
|
||||||
|
{
|
||||||
|
h = UintToArith256(B.GetHash());
|
||||||
|
//for (z=31; z>=0; z--)
|
||||||
|
// fprintf(stderr,"%02x",((uint8_t *)&h)[z]);
|
||||||
|
fprintf(stderr," Invalid block mined, try again\n");
|
||||||
|
gotinvalid = 1;
|
||||||
|
return(false);
|
||||||
|
}
|
||||||
|
SetThreadPriority(THREAD_PRIORITY_NORMAL);
|
||||||
|
LogPrintf("HushRandomXMiner:\n");
|
||||||
|
LogPrintf("proof-of-work found \n hash: %s \ntarget: %s\n", B.GetHash().GetHex(), HASHTarget.GetHex());
|
||||||
|
#ifdef ENABLE_WALLET
|
||||||
|
if (ProcessBlockFound(&B, *pwallet, reservekey)) {
|
||||||
|
#else
|
||||||
|
if (ProcessBlockFound(&B)) {
|
||||||
|
#endif
|
||||||
|
// Ignore chain updates caused by us
|
||||||
|
std::lock_guard<std::mutex> lock{m_cs};
|
||||||
|
cancelSolver = false;
|
||||||
|
}
|
||||||
|
SetThreadPriority(THREAD_PRIORITY_LOWEST);
|
||||||
|
// In regression test mode, stop mining after a block is found.
|
||||||
|
if (chainparams.MineBlocksOnDemand()) {
|
||||||
|
// Increment here because throwing skips the call below
|
||||||
|
// TODO: equivalent of ehSolverRuns.increment();
|
||||||
|
throw boost::thread_interrupted();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
// TODO: solver specific stuff
|
||||||
|
// TODO: Convert solution indices to byte array (decompress) and pass it to validBlock method.
|
||||||
|
|
||||||
|
boost::this_thread::interruption_point();
|
||||||
|
|
||||||
|
if (vNodes.empty() && chainparams.MiningRequiresPeers())
|
||||||
|
{
|
||||||
|
if ( Mining_height > ASSETCHAINS_MINHEIGHT )
|
||||||
|
{
|
||||||
|
fprintf(stderr,"no nodes, break\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ((UintToArith256(pblock->nNonce) & 0xffff) == 0xffff)
|
||||||
|
{
|
||||||
|
fprintf(stderr,"nonce & 0xffff == 0xffff, break\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Update nNonce and nTime
|
||||||
|
pblock->nNonce = ArithToUint256(UintToArith256(pblock->nNonce) + 1);
|
||||||
|
pblock->nBits = savebits;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (const boost::thread_interrupted&)
|
catch (const boost::thread_interrupted&)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user