X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcblockchain.cpp;h=2226bbb5167c3f687ac593c5868a2753be801a45;hb=af693176a3e7f9f34fe900619afd3627715889fe;hp=c47edd5aa1b75e35d578394745bd50100f7224fc;hpb=1413046a0b9307311ac57748276d224bc9bc791a;p=novacoin.git diff --git a/src/rpcblockchain.cpp b/src/rpcblockchain.cpp index c47edd5..2226bbb 100644 --- a/src/rpcblockchain.cpp +++ b/src/rpcblockchain.cpp @@ -10,6 +10,7 @@ using namespace json_spirit; using namespace std; extern void TxToJSON(const CTransaction& tx, const uint256 hashBlock, json_spirit::Object& entry); +extern enum Checkpoints::CPMode CheckpointsMode; double GetDifficulty(const CBlockIndex* blockindex) { @@ -42,6 +43,54 @@ double GetDifficulty(const CBlockIndex* blockindex) return dDiff; } +double GetPoWMHashPS() +{ + int nPoWInterval = 72; + int64 nTargetSpacingWorkMin = 30, nTargetSpacingWork = 30; + + CBlockIndex* pindex = pindexGenesisBlock; + CBlockIndex* pindexPrevWork = pindexGenesisBlock; + + 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; + } + + return GetDifficulty() * 4294.967296 / nTargetSpacingWork; +} + +double GetPoSKernelPS() +{ + int nPoSInterval = 72; + double dStakeKernelsTriedAvg = 0; + int nStakesHandled = 0, nStakesTime = 0; + + CBlockIndex* pindex = pindexBest;; + CBlockIndex* pindexPrevStake = NULL; + + while (pindex && nStakesHandled < nPoSInterval) + { + if (pindex->IsProofOfStake()) + { + dStakeKernelsTriedAvg += GetDifficulty(pindex) * 4294967296.0; + nStakesTime += pindexPrevStake ? (pindexPrevStake->nTime - pindex->nTime) : 0; + pindexPrevStake = pindex; + nStakesHandled++; + } + + pindex = pindex->pprev; + } + + return dStakeKernelsTriedAvg / nStakesTime; +} Object blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool fPrintTransactionDetail) { @@ -234,9 +283,20 @@ Value getcheckpoint(const Array& params, bool fHelp) CBlockIndex* pindexCheckpoint; result.push_back(Pair("synccheckpoint", Checkpoints::hashSyncCheckpoint.ToString().c_str())); - pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint]; + pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint]; result.push_back(Pair("height", pindexCheckpoint->nHeight)); result.push_back(Pair("timestamp", DateTimeStrFormat(pindexCheckpoint->GetBlockTime()).c_str())); + + // Check that the block satisfies synchronized checkpoint + if (CheckpointsMode == Checkpoints::STRICT) + result.push_back(Pair("policy", "strict")); + + if (CheckpointsMode == Checkpoints::ADVISORY) + result.push_back(Pair("policy", "advisory")); + + if (CheckpointsMode == Checkpoints::PERMISSIVE) + result.push_back(Pair("policy", "permissive")); + if (mapArgs.count("-checkpointkey")) result.push_back(Pair("checkpointmaster", true));