[RPC] new command 'getsuperblockheight' [update 1]

This commit is contained in:
crowning- 2016-09-01 22:11:24 +02:00
parent da58cf0da3
commit 2436067c76
3 changed files with 32 additions and 21 deletions

View File

@ -546,27 +546,24 @@ CAmount CSuperblock::GetPaymentsLimit(int nBlockHeight)
return nPaymentsLimit;
}
int CSuperblock::GetSuperblockHeight(bool last)
void CSuperblock::GetSuperblockHeight(int& nBlockHeight, int& nLastSuperblock, int& nNextSuperblock)
{
// Get current block height
int nBlockHeight = (int)chainActive.Height();
// Get last superblock
int nLastSuperBlock = nBlockHeight - ((nBlockHeight - Params().GetConsensus().nSuperblockStartBlock) % Params().GetConsensus().nSuperblockCycle);
// Get next superblock
int nNextSuperBlock = nLastSuperBlock + Params().GetConsensus().nSuperblockCycle;
// Get current block height if nothing was provided
if(nBlockHeight == 0)
nBlockHeight = (int)chainActive.Height();
// Special case: return first superblock if the current block height is below the first superblock during sync
if(nBlockHeight < Params().GetConsensus().nSuperblockStartBlock){
nLastSuperBlock = 0;
nNextSuperBlock = Params().GetConsensus().nSuperblockStartBlock;
nLastSuperblock = 0;
nNextSuperblock = Params().GetConsensus().nSuperblockStartBlock;
return;
}
if(last)
return nLastSuperBlock;
else
return nNextSuperBlock;
// Get last superblock
nLastSuperblock = nBlockHeight - ((nBlockHeight - Params().GetConsensus().nSuperblockStartBlock) % Params().GetConsensus().nSuperblockCycle);
// Get next superblock
nNextSuperblock = nLastSuperblock + Params().GetConsensus().nSuperblockCycle;
}

View File

@ -178,7 +178,7 @@ public:
static bool IsValidBlockHeight(int nBlockHeight);
static CAmount GetPaymentsLimit(int nBlockHeight);
static int GetSuperblockHeight(bool last);
static void GetSuperblockHeight(int& nBlockHeight, int& nLastSuperblock, int& nNextSuperblock);
int GetStatus() { return nStatus; }
void SetStatus(int nStatusIn) { nStatus = nStatusIn; }

View File

@ -657,19 +657,33 @@ UniValue getsuperblockbudget(const UniValue& params, bool fHelp)
UniValue getsuperblockheight(const UniValue& params, bool fHelp)
{
if (fHelp) {
int nBlockHeight = 0;
int nLastSuperblock, nNextSuperblock;
if (fHelp || params.size() > 1) {
throw runtime_error(
"getsuperblockheight\n"
"\nReturns the block height of the last/next superblock.\n"
"\nArguments:\n"
"1. index (numeric, optional, default = current blockchain height) The block index\n"
"\nResult:\n"
"lastsuperblock (numeric) the height of the last superblock\n"
"nextsuperblock (numeric) the height of the next superblock\n"
"lastsuperblock (numeric) the height of the last superblock\n"
"nextsuperblock (numeric) the height of the next superblock\n"
);
}
if(params.size() == 1)
nBlockHeight = params[0].get_int();
if (nBlockHeight < 0) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "Block height out of range");
}
CSuperblock::GetSuperblockHeight(nBlockHeight, nLastSuperblock, nNextSuperblock);
UniValue obj(UniValue::VOBJ);
obj.push_back(Pair("lastsuperblock", CSuperblock::GetSuperblockHeight(true)));
obj.push_back(Pair("nextsuperblock", CSuperblock::GetSuperblockHeight(false)));
obj.push_back(Pair("lastsuperblock", nLastSuperblock));
obj.push_back(Pair("nextsuperblock", nNextSuperblock));
return obj;