mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 15:09:59 +01:00
Merge bitcoin/bitcoin#25677: refactor: make active_chain_tip a reference
9376a6dae4refactor: make active_chain_tip a reference (Aurèle Oulès) Pull request description: This PR fixes a TODO introduced in #21055. Makes `active_chain_tip` argument in `CheckFinalTxAtTip` function a reference instead of a pointer. ACKs for top commit: dongcarl: ACK9376a6dae4Tree-SHA512: c36d1769e0b9598b7f79334704b26b73e958d54caa3bd7e4eff954f3964fcf3f5e3a44a5a760497afad51b76e1614c86314fe035e4083c855e3574a620de7f4d
This commit is contained in:
@@ -157,10 +157,9 @@ bool CheckInputScripts(const CTransaction& tx, TxValidationState& state,
|
||||
std::vector<CScriptCheck>* pvChecks = nullptr)
|
||||
EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||
|
||||
bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction& tx)
|
||||
bool CheckFinalTxAtTip(const CBlockIndex& active_chain_tip, const CTransaction& tx)
|
||||
{
|
||||
AssertLockHeld(cs_main);
|
||||
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
||||
|
||||
// CheckFinalTxAtTip() uses active_chain_tip.Height()+1 to evaluate
|
||||
// nLockTime because when IsFinalTx() is called within
|
||||
@@ -168,14 +167,14 @@ bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction&
|
||||
// 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
|
||||
// IsFinalTx() with one more than active_chain_tip.Height().
|
||||
const int nBlockHeight = active_chain_tip->nHeight + 1;
|
||||
const int nBlockHeight = active_chain_tip.nHeight + 1;
|
||||
|
||||
// BIP113 requires that time-locked transactions have nLockTime set to
|
||||
// less than the median time of the previous block they're contained in.
|
||||
// When the next block is created its previous block will be the current
|
||||
// chain tip, so we use that to calculate the median time passed to
|
||||
// IsFinalTx().
|
||||
const int64_t nBlockTime{active_chain_tip->GetMedianTimePast()};
|
||||
const int64_t nBlockTime{active_chain_tip.GetMedianTimePast()};
|
||||
|
||||
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
||||
}
|
||||
@@ -337,7 +336,7 @@ void CChainState::MaybeUpdateMempoolForReorg(
|
||||
const CTransaction& tx = it->GetTx();
|
||||
|
||||
// The transaction must be final.
|
||||
if (!CheckFinalTxAtTip(m_chain.Tip(), tx)) return true;
|
||||
if (!CheckFinalTxAtTip(*Assert(m_chain.Tip()), tx)) return true;
|
||||
LockPoints lp = it->GetLockPoints();
|
||||
const bool validLP{TestLockPointValidity(m_chain, lp)};
|
||||
CCoinsViewMemPool view_mempool(&CoinsTip(), *m_mempool);
|
||||
@@ -714,7 +713,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
||||
// 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
|
||||
// be mined yet.
|
||||
if (!CheckFinalTxAtTip(m_active_chainstate.m_chain.Tip(), tx)) {
|
||||
if (!CheckFinalTxAtTip(*Assert(m_active_chainstate.m_chain.Tip()), tx)) {
|
||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user