Merge pull request #7011
6531f17
Add mediantime field to getblock and getblockheader (Peter Todd)7259769
Document new mediantime field in getblockchaininfo (Peter Todd)c277a63
Clarify nLockTime-by-time comment in CheckFinalTx() (Peter Todd)748321e
Add mediantime field to getblockchaininfo RPC call (Peter Todd)
This commit is contained in:
commit
31de2414c6
@ -670,10 +670,11 @@ bool CheckFinalTx(const CTransaction &tx, int flags)
|
|||||||
// IsFinalTx() with one more than chainActive.Height().
|
// IsFinalTx() with one more than chainActive.Height().
|
||||||
const int nBlockHeight = chainActive.Height() + 1;
|
const int nBlockHeight = chainActive.Height() + 1;
|
||||||
|
|
||||||
// Timestamps on the other hand don't get any special treatment,
|
// BIP113 will require that time-locked transactions have nLockTime set to
|
||||||
// because we can't know what timestamp the next block will have,
|
// less than the median time of the previous block they're contained in.
|
||||||
// and there aren't timestamp applications where it matters.
|
// When the next block is created its previous block will be the current
|
||||||
// However this changes once median past time-locks are enforced:
|
// chain tip, so we use that to calculate the median time passed to
|
||||||
|
// IsFinalTx() if LOCKTIME_MEDIAN_TIME_PAST is set.
|
||||||
const int64_t nBlockTime = (flags & LOCKTIME_MEDIAN_TIME_PAST)
|
const int64_t nBlockTime = (flags & LOCKTIME_MEDIAN_TIME_PAST)
|
||||||
? chainActive.Tip()->GetMedianTimePast()
|
? chainActive.Tip()->GetMedianTimePast()
|
||||||
: GetAdjustedTime();
|
: GetAdjustedTime();
|
||||||
|
@ -71,6 +71,7 @@ UniValue blockheaderToJSON(const CBlockIndex* blockindex)
|
|||||||
result.push_back(Pair("version", blockindex->nVersion));
|
result.push_back(Pair("version", blockindex->nVersion));
|
||||||
result.push_back(Pair("merkleroot", blockindex->hashMerkleRoot.GetHex()));
|
result.push_back(Pair("merkleroot", blockindex->hashMerkleRoot.GetHex()));
|
||||||
result.push_back(Pair("time", (int64_t)blockindex->nTime));
|
result.push_back(Pair("time", (int64_t)blockindex->nTime));
|
||||||
|
result.push_back(Pair("mediantime", (int64_t)blockindex->GetMedianTimePast()));
|
||||||
result.push_back(Pair("nonce", (uint64_t)blockindex->nNonce));
|
result.push_back(Pair("nonce", (uint64_t)blockindex->nNonce));
|
||||||
result.push_back(Pair("bits", strprintf("%08x", blockindex->nBits)));
|
result.push_back(Pair("bits", strprintf("%08x", blockindex->nBits)));
|
||||||
result.push_back(Pair("difficulty", GetDifficulty(blockindex)));
|
result.push_back(Pair("difficulty", GetDifficulty(blockindex)));
|
||||||
@ -111,6 +112,7 @@ UniValue blockToJSON(const CBlock& block, const CBlockIndex* blockindex, bool tx
|
|||||||
}
|
}
|
||||||
result.push_back(Pair("tx", txs));
|
result.push_back(Pair("tx", txs));
|
||||||
result.push_back(Pair("time", block.GetBlockTime()));
|
result.push_back(Pair("time", block.GetBlockTime()));
|
||||||
|
result.push_back(Pair("mediantime", (int64_t)blockindex->GetMedianTimePast()));
|
||||||
result.push_back(Pair("nonce", (uint64_t)block.nNonce));
|
result.push_back(Pair("nonce", (uint64_t)block.nNonce));
|
||||||
result.push_back(Pair("bits", strprintf("%08x", block.nBits)));
|
result.push_back(Pair("bits", strprintf("%08x", block.nBits)));
|
||||||
result.push_back(Pair("difficulty", GetDifficulty(blockindex)));
|
result.push_back(Pair("difficulty", GetDifficulty(blockindex)));
|
||||||
@ -313,6 +315,7 @@ UniValue getblockheader(const UniValue& params, bool fHelp)
|
|||||||
" \"version\" : n, (numeric) The block version\n"
|
" \"version\" : n, (numeric) The block version\n"
|
||||||
" \"merkleroot\" : \"xxxx\", (string) The merkle root\n"
|
" \"merkleroot\" : \"xxxx\", (string) The merkle root\n"
|
||||||
" \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
" \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
||||||
|
" \"mediantime\" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
||||||
" \"nonce\" : n, (numeric) The nonce\n"
|
" \"nonce\" : n, (numeric) The nonce\n"
|
||||||
" \"bits\" : \"1d00ffff\", (string) The bits\n"
|
" \"bits\" : \"1d00ffff\", (string) The bits\n"
|
||||||
" \"difficulty\" : x.xxx, (numeric) The difficulty\n"
|
" \"difficulty\" : x.xxx, (numeric) The difficulty\n"
|
||||||
@ -374,6 +377,7 @@ UniValue getblock(const UniValue& params, bool fHelp)
|
|||||||
" ,...\n"
|
" ,...\n"
|
||||||
" ],\n"
|
" ],\n"
|
||||||
" \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
" \"time\" : ttt, (numeric) The block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
||||||
|
" \"mediantime\" : ttt, (numeric) The median block time in seconds since epoch (Jan 1 1970 GMT)\n"
|
||||||
" \"nonce\" : n, (numeric) The nonce\n"
|
" \"nonce\" : n, (numeric) The nonce\n"
|
||||||
" \"bits\" : \"1d00ffff\", (string) The bits\n"
|
" \"bits\" : \"1d00ffff\", (string) The bits\n"
|
||||||
" \"difficulty\" : x.xxx, (numeric) The difficulty\n"
|
" \"difficulty\" : x.xxx, (numeric) The difficulty\n"
|
||||||
@ -608,6 +612,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp)
|
|||||||
" \"headers\": xxxxxx, (numeric) the current number of headers we have validated\n"
|
" \"headers\": xxxxxx, (numeric) the current number of headers we have validated\n"
|
||||||
" \"bestblockhash\": \"...\", (string) the hash of the currently best block\n"
|
" \"bestblockhash\": \"...\", (string) the hash of the currently best block\n"
|
||||||
" \"difficulty\": xxxxxx, (numeric) the current difficulty\n"
|
" \"difficulty\": xxxxxx, (numeric) the current difficulty\n"
|
||||||
|
" \"mediantime\": xxxxxx, (numeric) median time for the current best block\n"
|
||||||
" \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n"
|
" \"verificationprogress\": xxxx, (numeric) estimate of verification progress [0..1]\n"
|
||||||
" \"chainwork\": \"xxxx\" (string) total amount of work in active chain, in hexadecimal\n"
|
" \"chainwork\": \"xxxx\" (string) total amount of work in active chain, in hexadecimal\n"
|
||||||
" \"pruned\": xx, (boolean) if the blocks are subject to pruning\n"
|
" \"pruned\": xx, (boolean) if the blocks are subject to pruning\n"
|
||||||
@ -639,6 +644,7 @@ UniValue getblockchaininfo(const UniValue& params, bool fHelp)
|
|||||||
obj.push_back(Pair("headers", pindexBestHeader ? pindexBestHeader->nHeight : -1));
|
obj.push_back(Pair("headers", pindexBestHeader ? pindexBestHeader->nHeight : -1));
|
||||||
obj.push_back(Pair("bestblockhash", chainActive.Tip()->GetBlockHash().GetHex()));
|
obj.push_back(Pair("bestblockhash", chainActive.Tip()->GetBlockHash().GetHex()));
|
||||||
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
|
obj.push_back(Pair("difficulty", (double)GetDifficulty()));
|
||||||
|
obj.push_back(Pair("mediantime", (int64_t)chainActive.Tip()->GetMedianTimePast()));
|
||||||
obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.Tip())));
|
obj.push_back(Pair("verificationprogress", Checkpoints::GuessVerificationProgress(Params().Checkpoints(), chainActive.Tip())));
|
||||||
obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex()));
|
obj.push_back(Pair("chainwork", chainActive.Tip()->nChainWork.GetHex()));
|
||||||
obj.push_back(Pair("pruned", fPruneMode));
|
obj.push_back(Pair("pruned", fPruneMode));
|
||||||
|
Loading…
Reference in New Issue
Block a user