X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Frpcmining.cpp;h=69ae2d86e68de8f333ac5a2f041e9be1abc0c554;hb=92c2fcee5ae00e4c0ab2d5a064bf70cdb4699ede;hp=5ddb3e27bd1d4ee2e1285d14c16b6645819842e2;hpb=c947f22e6a9163eb3cec7d0f547a1d0da38038c6;p=novacoin.git diff --git a/src/rpcmining.cpp b/src/rpcmining.cpp index 5ddb3e2..69ae2d8 100644 --- a/src/rpcmining.cpp +++ b/src/rpcmining.cpp @@ -5,55 +5,67 @@ #include "main.h" #include "db.h" +#include "txdb.h" #include "init.h" +#include "miner.h" #include "bitcoinrpc.h" using namespace json_spirit; using namespace std; -Value getmininginfo(const Array& params, bool fHelp) +Value getsubsidy(const Array& params, bool fHelp) { - if (fHelp || params.size() != 0) + if (fHelp || params.size() > 1) throw runtime_error( - "getmininginfo\n" - "Returns an object containing mining-related information."); + "getsubsidy [nTarget]\n" + "Returns proof-of-work subsidy value for the specified value of target."); - int64 nTargetSpacingWorkMin = 30; - int64 nTargetSpacingWork = nTargetSpacingWorkMin; - int64 nPoWInterval = 72; - int64 nTargetSpacingStake = 600; + unsigned int nBits = 0; - CBlockIndex* pindex = pindexGenesisBlock; - CBlockIndex* pindexPrevWork = pindexGenesisBlock; - - while (pindex) + if (params.size() != 0) { - 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; + CBigNum bnTarget(uint256(params[0].get_str())); + nBits = bnTarget.GetCompact(); } + else + { + nBits = GetNextTargetRequired(pindexBest, false); + } + + return (uint64_t)GetProofOfWorkReward(nBits); +} + +Value getmininginfo(const Array& params, bool fHelp) +{ + if (fHelp || params.size() != 0) + throw runtime_error( + "getmininginfo\n" + "Returns an object containing mining-related information."); - double dNetworkMhps = GetDifficulty() * 4294.967296 / nTargetSpacingWork; - int nNetworkWeight = GetDifficulty(GetLastBlockIndex(pindexBest, true)) * 4294967296 / nTargetSpacingStake; + float nKernelsRate = 0, nCoinDaysRate = 0; + pwalletMain->GetStakeStats(nKernelsRate, nCoinDaysRate); - Object obj; + Object obj, diff, weight; 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())); + + diff.push_back(Pair("proof-of-work", GetDifficulty())); + diff.push_back(Pair("proof-of-stake", GetDifficulty(GetLastBlockIndex(pindexBest, true)))); + diff.push_back(Pair("search-interval", (int)nLastCoinStakeSearchInterval)); + obj.push_back(Pair("difficulty", diff)); + obj.push_back(Pair("blockvalue", (uint64_t)GetProofOfWorkReward(GetLastBlockIndex(pindexBest, false)->nBits))); - obj.push_back(Pair("netmhashps", dNetworkMhps)); - obj.push_back(Pair("netstakeweight", nNetworkWeight)); + obj.push_back(Pair("netmhashps", GetPoWMHashPS())); + obj.push_back(Pair("netstakeweight", GetPoSKernelPS())); obj.push_back(Pair("errors", GetWarnings("statusbar"))); obj.push_back(Pair("pooledtx", (uint64_t)mempool.size())); - obj.push_back(Pair("stakeweight", (uint64_t)pwalletMain->GetStakeMintPower(*pwalletMain))); - obj.push_back(Pair("stakeinterest", (uint64_t)GetProofOfStakeReward(0, GetLastBlockIndex(pindexBest, true)->nBits, GetTime(), true))); + + weight.push_back(Pair("kernelsrate", nKernelsRate)); + weight.push_back(Pair("cdaysrate", nCoinDaysRate)); + obj.push_back(Pair("stakestats", weight)); + + 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; } @@ -180,12 +192,6 @@ Value getworkex(const Array& params, bool fHelp) pblock->hashMerkleRoot = pblock->BuildMerkleTree(); - if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!pblock->SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - return CheckWork(pblock, *pwalletMain, reservekey); } } @@ -299,12 +305,6 @@ Value getwork(const Array& params, bool fHelp) pblock->vtx[0].vin[0].scriptSig = mapNewBlock[pdata->hashMerkleRoot].second; pblock->hashMerkleRoot = pblock->BuildMerkleTree(); - if (!fTestNet && pblock->GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!pblock->SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - return CheckWork(pblock, *pwalletMain, reservekey); } } @@ -486,12 +486,6 @@ Value submitblock(const Array& params, bool fHelp) throw JSONRPCError(RPC_DESERIALIZATION_ERROR, "Block decode failed"); } - if (!fTestNet && block.GetBlockTime() < CHAINCHECKS_SWITCH_TIME) - { - if (!block.SignBlock(*pwalletMain)) - throw JSONRPCError(-100, "Unable to sign block, wallet locked?"); - } - bool fAccepted = ProcessBlock(NULL, &block); if (!fAccepted) return "rejected";