X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fbitcoinrpc.cpp;h=60c5449080955cd272d893dfc8e76d3d15bbcd8d;hb=09f2a990950512cbe418526d91838887a0dded2a;hp=16fc8c5b438fa6b822c1f67aee0bceb691349133;hpb=f77a1342760b036eea5c2ff3d627e4810c627f86;p=novacoin.git diff --git a/src/bitcoinrpc.cpp b/src/bitcoinrpc.cpp index 16fc8c5..60c5449 100644 --- a/src/bitcoinrpc.cpp +++ b/src/bitcoinrpc.cpp @@ -216,10 +216,11 @@ double GetDifficulty() if (pindexBest == NULL) return 1.0; - int nShift = (pindexBest->nBits >> 24) & 0xff; + const CBlockIndex* pindexLastProofOfWork = GetLastBlockIndex(pindexBest, false); + int nShift = (pindexLastProofOfWork->nBits >> 24) & 0xff; double dDiff = - (double)0x0000ffff / (double)(pindexBest->nBits & 0x00ffffff); + (double)0x0000ffff / (double)(pindexLastProofOfWork->nBits & 0x00ffffff); while (nShift < 29) { @@ -306,7 +307,7 @@ Value getinfo(const Array& params, bool fHelp) "Returns an object containing various state info."); Object obj; - obj.push_back(Pair("version", (int)VERSION)); + obj.push_back(Pair("version", FormatFullVersion())); obj.push_back(Pair("balance", ValueFromAmount(pwalletMain->GetBalance()))); obj.push_back(Pair("newmint", ValueFromAmount(pwalletMain->GetNewMint()))); obj.push_back(Pair("stake", ValueFromAmount(pwalletMain->GetStake()))); @@ -1656,14 +1657,14 @@ Value getwork(const Array& params, bool fHelp) nStart = GetTime(); // Create new block - pblock = CreateNewBlock(pwalletMain); + pblock = CreateNewBlock(pwalletMain, true); if (!pblock) throw JSONRPCError(-7, "Out of memory"); vNewBlock.push_back(pblock); } // Update nTime - pblock->nTime = max(pindexPrev->GetMedianTimePast()+1, GetAdjustedTime()); + pblock->nTime = max(pblock->GetBlockTime(), GetAdjustedTime()); pblock->nNonce = 0; // Update nExtraNonce @@ -1709,6 +1710,8 @@ Value getwork(const Array& params, bool fHelp) pblock->nNonce = pdata->nNonce; pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second; pblock->hashMerkleRoot = pblock->BuildMerkleTree(); + if (!pblock->SignBlock(*pwalletMain)) + throw JSONRPCError(-100, "Unable to sign block"); return CheckWork(pblock, *pwalletMain, reservekey); } @@ -1802,6 +1805,26 @@ Value getmemorypool(const Array& params, bool fHelp) } +// ppcoin: get information of sync-checkpoint +Value getcheckpoint(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getcheckpoint\n" + "Show info of synchronized checkpoint.\n"); + + Object result; + CBlockIndex* pindexCheckpoint; + + result.push_back(Pair("synccheckpoint", Checkpoints::hashSyncCheckpoint.ToString().c_str())); + pindexCheckpoint = mapBlockIndex[Checkpoints::hashSyncCheckpoint]; + result.push_back(Pair("height", pindexCheckpoint->nHeight)); + result.push_back(Pair("timestamp", DateTimeStrFormat("%x %H:%M:%S", pindexCheckpoint->GetBlockTime()).c_str())); + + return result; +} + + // ppcoin: reserve balance from being staked for network protection Value reservebalance(const Array& params, bool fHelp) { @@ -2074,6 +2097,7 @@ pair pCallTable[] = make_pair("settxfee", &settxfee), make_pair("getmemorypool", &getmemorypool), make_pair("listsinceblock", &listsinceblock), + make_pair("getcheckpoint", &getcheckpoint), make_pair("reservebalance", &reservebalance), make_pair("checkwallet", &checkwallet), make_pair("repairwallet", &repairwallet), @@ -2106,6 +2130,7 @@ string pAllowInSafeMode[] = "validateaddress", "getwork", "getmemorypool", + "getcheckpoint", }; set setAllowInSafeMode(pAllowInSafeMode, pAllowInSafeMode + sizeof(pAllowInSafeMode)/sizeof(pAllowInSafeMode[0]));