X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcmining.cpp;h=fe8cf0b7cc7bc9b94945000fc8790c015047b2df;hb=9d519fcff4e11f4e770c350fa69c302aed881b01;hp=3b22686f04cb5a66555733af6021063c6d849e6c;hpb=13bf5cb62f87ee7135ae1fcfc95b7da180681859;p=novacoin.git diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 3b22686..fe8cf0b 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -18,13 +18,60 @@ Value getmininginfo(const Array& params, bool fHelp) "getmininginfo\n" "Returns an object containing mining-related information."); + double dStakeKernelsTriedAvg = 0; + int nPoWInterval = 72, nPoSInterval = 72, nStakesHandled = 0, nStakesTime = 0; + int64 nTargetSpacingWorkMin = 30, nTargetSpacingWork = 30; + + CBlockIndex* pindex = pindexGenesisBlock; + CBlockIndex* pindexPrevWork = pindexGenesisBlock; + CBlockIndex* pindexPrevStake = NULL; + + while (pindex) + { + if (pindex->IsProofOfWork()) + { + int64 nActualSpacingWork = pindex->GetBlockTime() - pindexPrevWork->GetBlockTime(); + nTargetSpacingWork = ((nPoWInterval - 1) * nTargetSpacingWork + nActualSpacingWork + nActualSpacingWork) / (nPoWInterval + 1); + nTargetSpacingWork = max(nTargetSpacingWork, nTargetSpacingWorkMin); + pindexPrevWork = pindex; + } + + pindex = pindex->pnext; + } + + + pindex = pindexBest; + + while (pindex && nStakesHandled < nPoSInterval) + { + if (pindex->IsProofOfStake()) + { + dStakeKernelsTriedAvg += GetDifficulty(pindex) * 4294967296; + nStakesTime += pindexPrevStake ? (pindexPrevStake->nTime - pindex->nTime) : 0; + pindexPrevStake = pindex; + nStakesHandled++; + } + + pindex = pindex->pprev; + } + + double dNetworkMhps = GetDifficulty() * 4294.967296 / nTargetSpacingWork; + double dNetworkWeight = dStakeKernelsTriedAvg / nStakesTime; + Object obj; obj.push_back(Pair("blocks", (int)nBestHeight)); obj.push_back(Pair("currentblocksize",(uint64_t)nLastBlockSize)); obj.push_back(Pair("currentblocktx",(uint64_t)nLastBlockTx)); obj.push_back(Pair("difficulty", (double)GetDifficulty())); + obj.push_back(Pair("blockvalue", (uint64_t)GetProofOfWorkReward(GetLastBlockIndex(pindexBest, false)->nBits))); + obj.push_back(Pair("netmhashps", dNetworkMhps)); + obj.push_back(Pair("netstakeweight", dNetworkWeight)); obj.push_back(Pair("errors", GetWarnings("statusbar"))); obj.push_back(Pair("pooledtx", (uint64_t)mempool.size())); + obj.push_back(Pair("stakeweight", (uint64_t)pwalletMain->GetStakeWeight(*pwalletMain, STAKE_NORMAL))); + obj.push_back(Pair("minweight", (uint64_t)pwalletMain->GetStakeWeight(*pwalletMain, STAKE_MINWEIGHT))); + obj.push_back(Pair("maxweight", (uint64_t)pwalletMain->GetStakeWeight(*pwalletMain, STAKE_MAXWEIGHT))); + obj.push_back(Pair("stakeinterest", (uint64_t)GetProofOfStakeReward(0, GetLastBlockIndex(pindexBest, true)->nBits, GetLastBlockIndex(pindexBest, true)->nTime, true))); obj.push_back(Pair("testnet", fTestNet)); return obj; }