mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-05-17 23:56:39 +00:00
validation: Pass in chain tip to ::CheckFinalTx
This commit is contained in:
parent
252b489c9f
commit
d015eaa550
@ -205,8 +205,14 @@ static FlatFileSeq BlockFileSeq();
|
|||||||
static FlatFileSeq UndoFileSeq();
|
static FlatFileSeq UndoFileSeq();
|
||||||
|
|
||||||
bool CheckFinalTx(const CTransaction &tx, int flags)
|
bool CheckFinalTx(const CTransaction &tx, int flags)
|
||||||
|
{
|
||||||
|
return CheckFinalTx(::ChainActive().Tip(), tx, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
|
assert(std::addressof(*::ChainActive().Tip()) == std::addressof(*active_chain_tip));
|
||||||
|
|
||||||
// By convention a negative value for flags indicates that the
|
// By convention a negative value for flags indicates that the
|
||||||
// current network-enforced consensus rules should be used. In
|
// current network-enforced consensus rules should be used. In
|
||||||
@ -222,7 +228,7 @@ bool CheckFinalTx(const CTransaction &tx, int flags)
|
|||||||
// evaluated is what is used. Thus if we want to know if a
|
// evaluated is what is used. Thus if we want to know if a
|
||||||
// transaction can be part of the *next* block, we need to call
|
// transaction can be part of the *next* block, we need to call
|
||||||
// IsFinalTx() with one more than ::ChainActive().Height().
|
// IsFinalTx() with one more than ::ChainActive().Height().
|
||||||
const int nBlockHeight = ::ChainActive().Height() + 1;
|
const int nBlockHeight = active_chain_tip->nHeight + 1;
|
||||||
|
|
||||||
// BIP113 requires that time-locked transactions have nLockTime set to
|
// BIP113 requires that time-locked transactions have nLockTime set to
|
||||||
// less than the median time of the previous block they're contained in.
|
// less than the median time of the previous block they're contained in.
|
||||||
@ -230,7 +236,7 @@ bool CheckFinalTx(const CTransaction &tx, int flags)
|
|||||||
// chain tip, so we use that to calculate the median time passed to
|
// chain tip, so we use that to calculate the median time passed to
|
||||||
// IsFinalTx() if LOCKTIME_MEDIAN_TIME_PAST is set.
|
// 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()
|
? active_chain_tip->GetMedianTimePast()
|
||||||
: GetAdjustedTime();
|
: GetAdjustedTime();
|
||||||
|
|
||||||
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
||||||
@ -599,7 +605,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// Only accept nLockTime-using transactions that can be mined in the next
|
// Only accept nLockTime-using transactions that can be mined in the next
|
||||||
// block; we don't want our mempool filled up with transactions that can't
|
// block; we don't want our mempool filled up with transactions that can't
|
||||||
// be mined yet.
|
// be mined yet.
|
||||||
if (!CheckFinalTx(tx, STANDARD_LOCKTIME_VERIFY_FLAGS))
|
if (!CheckFinalTx(::ChainActive().Tip(), tx, STANDARD_LOCKTIME_VERIFY_FLAGS))
|
||||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
||||||
|
|
||||||
// is it already in the memory pool?
|
// is it already in the memory pool?
|
||||||
|
@ -249,6 +249,7 @@ void UpdateCoins(const CTransaction& tx, CCoinsViewCache& inputs, int nHeight);
|
|||||||
* See consensus/consensus.h for flag definitions.
|
* See consensus/consensus.h for flag definitions.
|
||||||
*/
|
*/
|
||||||
bool CheckFinalTx(const CTransaction &tx, int flags = -1) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
bool CheckFinalTx(const CTransaction &tx, int flags = -1) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
|
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction &tx, int flags = -1) EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test whether the LockPoints height and time are still valid on the current chain
|
* Test whether the LockPoints height and time are still valid on the current chain
|
||||||
|
Loading…
x
Reference in New Issue
Block a user