mirror of
https://github.com/bitcoin/bitcoin.git
synced 2024-05-17 23:56:39 +00:00
scripted-diff: Clarify CheckFinalTxAtTip name
This checks finality at the current Tip, so clarify this in its name. -BEGIN VERIFY SCRIPT- ren() { sed -i "s/\<$1\>/$2/g" $( git grep -l "$1" ./src/ ) ; } ren CheckSequenceLocks CheckSequenceLocksAtTip ren CheckFinalTx CheckFinalTxAtTip -END VERIFY SCRIPT-
This commit is contained in:
parent
fa4e30b0f3
commit
fa8d4d9128
@ -33,7 +33,7 @@ struct MinerTestingSetup : public TestingSetup {
|
|||||||
bool TestSequenceLocks(const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs)
|
bool TestSequenceLocks(const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main, m_node.mempool->cs)
|
||||||
{
|
{
|
||||||
CCoinsViewMemPool view_mempool(&m_node.chainman->ActiveChainstate().CoinsTip(), *m_node.mempool);
|
CCoinsViewMemPool view_mempool(&m_node.chainman->ActiveChainstate().CoinsTip(), *m_node.mempool);
|
||||||
return CheckSequenceLocks(m_node.chainman->ActiveChain().Tip(), view_mempool, tx);
|
return CheckSequenceLocksAtTip(m_node.chainman->ActiveChain().Tip(), view_mempool, tx);
|
||||||
}
|
}
|
||||||
BlockAssembler AssemblerForTest(const CChainParams& params);
|
BlockAssembler AssemblerForTest(const CChainParams& params);
|
||||||
};
|
};
|
||||||
@ -429,7 +429,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
tx.nLockTime = 0;
|
tx.nLockTime = 0;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
m_node.mempool->addUnchecked(entry.Fee(HIGHFEE).Time(GetTime()).SpendsCoinbase(true).FromTx(tx));
|
m_node.mempool->addUnchecked(entry.Fee(HIGHFEE).Time(GetTime()).SpendsCoinbase(true).FromTx(tx));
|
||||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||||
|
|
||||||
{
|
{
|
||||||
@ -443,7 +443,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
prevheights[0] = baseheight + 2;
|
prevheights[0] = baseheight + 2;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||||
|
|
||||||
for (int i = 0; i < CBlockIndex::nMedianTimeSpan; i++)
|
for (int i = 0; i < CBlockIndex::nMedianTimeSpan; i++)
|
||||||
@ -464,7 +464,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
tx.nLockTime = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
tx.nLockTime = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||||
BOOST_CHECK(!CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
BOOST_CHECK(!CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
||||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||||
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast())); // Locktime passes on 2nd block
|
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast())); // Locktime passes on 2nd block
|
||||||
|
|
||||||
@ -475,7 +475,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
prevheights[0] = baseheight + 4;
|
prevheights[0] = baseheight + 4;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
m_node.mempool->addUnchecked(entry.Time(GetTime()).FromTx(tx));
|
||||||
BOOST_CHECK(!CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
BOOST_CHECK(!CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime fails
|
||||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||||
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast() + 1)); // Locktime passes 1 second later
|
BOOST_CHECK(IsFinalTx(CTransaction(tx), m_node.chainman->ActiveChain().Tip()->nHeight + 2, m_node.chainman->ActiveChain().Tip()->GetMedianTimePast() + 1)); // Locktime passes 1 second later
|
||||||
|
|
||||||
@ -484,7 +484,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
|||||||
prevheights[0] = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
prevheights[0] = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
||||||
tx.nLockTime = 0;
|
tx.nLockTime = 0;
|
||||||
tx.vin[0].nSequence = 0;
|
tx.vin[0].nSequence = 0;
|
||||||
BOOST_CHECK(CheckFinalTx(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
BOOST_CHECK(CheckFinalTxAtTip(m_node.chainman->ActiveChain().Tip(), CTransaction{tx})); // Locktime passes
|
||||||
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
BOOST_CHECK(TestSequenceLocks(CTransaction{tx})); // Sequence locks pass
|
||||||
tx.vin[0].nSequence = 1;
|
tx.vin[0].nSequence = 1;
|
||||||
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
BOOST_CHECK(!TestSequenceLocks(CTransaction{tx})); // Sequence locks fail
|
||||||
|
@ -178,12 +178,12 @@ bool CheckInputScripts(const CTransaction& tx, TxValidationState& state,
|
|||||||
std::vector<CScriptCheck>* pvChecks = nullptr)
|
std::vector<CScriptCheck>* pvChecks = nullptr)
|
||||||
EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
EXCLUSIVE_LOCKS_REQUIRED(cs_main);
|
||||||
|
|
||||||
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction& tx)
|
bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction& tx)
|
||||||
{
|
{
|
||||||
AssertLockHeld(cs_main);
|
AssertLockHeld(cs_main);
|
||||||
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
assert(active_chain_tip); // TODO: Make active_chain_tip a reference
|
||||||
|
|
||||||
// CheckFinalTx() uses active_chain_tip.Height()+1 to evaluate
|
// CheckFinalTxAtTip() uses active_chain_tip.Height()+1 to evaluate
|
||||||
// nLockTime because when IsFinalTx() is called within
|
// nLockTime because when IsFinalTx() is called within
|
||||||
// AcceptBlock(), the height of the block *being*
|
// AcceptBlock(), the height of the block *being*
|
||||||
// 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
|
||||||
@ -201,7 +201,7 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction& tx)
|
|||||||
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
return IsFinalTx(tx, nBlockHeight, nBlockTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CheckSequenceLocks(CBlockIndex* tip,
|
bool CheckSequenceLocksAtTip(CBlockIndex* tip,
|
||||||
const CCoinsView& coins_view,
|
const CCoinsView& coins_view,
|
||||||
const CTransaction& tx,
|
const CTransaction& tx,
|
||||||
LockPoints* lp,
|
LockPoints* lp,
|
||||||
@ -211,7 +211,7 @@ bool CheckSequenceLocks(CBlockIndex* tip,
|
|||||||
|
|
||||||
CBlockIndex index;
|
CBlockIndex index;
|
||||||
index.pprev = tip;
|
index.pprev = tip;
|
||||||
// CheckSequenceLocks() uses active_chainstate.m_chain.Height()+1 to evaluate
|
// CheckSequenceLocksAtTip() uses active_chainstate.m_chain.Height()+1 to evaluate
|
||||||
// height based locks because when SequenceLocks() is called within
|
// height based locks because when SequenceLocks() is called within
|
||||||
// ConnectBlock(), the height of the block *being*
|
// ConnectBlock(), the height of the block *being*
|
||||||
// evaluated is what is used.
|
// evaluated is what is used.
|
||||||
@ -257,7 +257,7 @@ bool CheckSequenceLocks(CBlockIndex* tip,
|
|||||||
// lockPair from CalculateSequenceLocks against tip+1. We know
|
// lockPair from CalculateSequenceLocks against tip+1. We know
|
||||||
// EvaluateSequenceLocks will fail if there was a non-zero sequence
|
// EvaluateSequenceLocks will fail if there was a non-zero sequence
|
||||||
// lock on a mempool input, so we can use the return value of
|
// lock on a mempool input, so we can use the return value of
|
||||||
// CheckSequenceLocks to indicate the LockPoints validity
|
// CheckSequenceLocksAtTip to indicate the LockPoints validity
|
||||||
int maxInputHeight = 0;
|
int maxInputHeight = 0;
|
||||||
for (const int height : prevheights) {
|
for (const int height : prevheights) {
|
||||||
// Can ignore mempool inputs since we'll fail if they had non-zero locks
|
// Can ignore mempool inputs since we'll fail if they had non-zero locks
|
||||||
@ -352,19 +352,19 @@ void CChainState::MaybeUpdateMempoolForReorg(
|
|||||||
const CTransaction& tx = it->GetTx();
|
const CTransaction& tx = it->GetTx();
|
||||||
|
|
||||||
// The transaction must be final.
|
// The transaction must be final.
|
||||||
if (!CheckFinalTx(m_chain.Tip(), tx)) return true;
|
if (!CheckFinalTxAtTip(m_chain.Tip(), tx)) return true;
|
||||||
LockPoints lp = it->GetLockPoints();
|
LockPoints lp = it->GetLockPoints();
|
||||||
const bool validLP{TestLockPointValidity(m_chain, lp)};
|
const bool validLP{TestLockPointValidity(m_chain, lp)};
|
||||||
CCoinsViewMemPool view_mempool(&CoinsTip(), *m_mempool);
|
CCoinsViewMemPool view_mempool(&CoinsTip(), *m_mempool);
|
||||||
// CheckSequenceLocks checks if the transaction will be final in the next block to be
|
// CheckSequenceLocksAtTip checks if the transaction will be final in the next block to be
|
||||||
// created on top of the new chain. We use useExistingLockPoints=false so that, instead of
|
// created on top of the new chain. We use useExistingLockPoints=false so that, instead of
|
||||||
// using the information in lp (which might now refer to a block that no longer exists in
|
// using the information in lp (which might now refer to a block that no longer exists in
|
||||||
// the chain), it will update lp to contain LockPoints relevant to the new chain.
|
// the chain), it will update lp to contain LockPoints relevant to the new chain.
|
||||||
if (!CheckSequenceLocks(m_chain.Tip(), view_mempool, tx, &lp, validLP)) {
|
if (!CheckSequenceLocksAtTip(m_chain.Tip(), view_mempool, tx, &lp, validLP)) {
|
||||||
// If CheckSequenceLocks fails, remove the tx and don't depend on the LockPoints.
|
// If CheckSequenceLocksAtTip fails, remove the tx and don't depend on the LockPoints.
|
||||||
return true;
|
return true;
|
||||||
} else if (!validLP) {
|
} else if (!validLP) {
|
||||||
// If CheckSequenceLocks succeeded, it also updated the LockPoints.
|
// If CheckSequenceLocksAtTip succeeded, it also updated the LockPoints.
|
||||||
// Now update the mempool entry lockpoints as well.
|
// Now update the mempool entry lockpoints as well.
|
||||||
m_mempool->mapTx.modify(it, [&lp](CTxMemPoolEntry& e) { e.UpdateLockPoints(lp); });
|
m_mempool->mapTx.modify(it, [&lp](CTxMemPoolEntry& e) { e.UpdateLockPoints(lp); });
|
||||||
}
|
}
|
||||||
@ -688,7 +688,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(m_active_chainstate.m_chain.Tip(), tx)) {
|
if (!CheckFinalTxAtTip(m_active_chainstate.m_chain.Tip(), tx)) {
|
||||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-final");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -770,7 +770,7 @@ bool MemPoolAccept::PreChecks(ATMPArgs& args, Workspace& ws)
|
|||||||
// be mined yet.
|
// be mined yet.
|
||||||
// Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
|
// Pass in m_view which has all of the relevant inputs cached. Note that, since m_view's
|
||||||
// backend was removed, it no longer pulls coins from the mempool.
|
// backend was removed, it no longer pulls coins from the mempool.
|
||||||
if (!CheckSequenceLocks(m_active_chainstate.m_chain.Tip(), m_view, tx, &lp)) {
|
if (!CheckSequenceLocksAtTip(m_active_chainstate.m_chain.Tip(), m_view, tx, &lp)) {
|
||||||
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
|
return state.Invalid(TxValidationResult::TX_PREMATURE_SPEND, "non-BIP68-final");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,7 +278,7 @@ PackageMempoolAcceptResult ProcessNewPackage(CChainState& active_chainstate, CTx
|
|||||||
/**
|
/**
|
||||||
* Check if transaction will be final in the next block to be created.
|
* Check if transaction will be final in the next block to be created.
|
||||||
*/
|
*/
|
||||||
bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
bool CheckFinalTxAtTip(const CBlockIndex* active_chain_tip, const CTransaction& tx) EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if transaction will be BIP68 final in the next block to be created on top of tip.
|
* Check if transaction will be BIP68 final in the next block to be created on top of tip.
|
||||||
@ -295,9 +295,9 @@ bool CheckFinalTx(const CBlockIndex* active_chain_tip, const CTransaction& tx) E
|
|||||||
* Optionally stores in LockPoints the resulting height and time calculated and the hash
|
* Optionally stores in LockPoints the resulting height and time calculated and the hash
|
||||||
* of the block needed for calculation or skips the calculation and uses the LockPoints
|
* of the block needed for calculation or skips the calculation and uses the LockPoints
|
||||||
* passed in for evaluation.
|
* passed in for evaluation.
|
||||||
* The LockPoints should not be considered valid if CheckSequenceLocks returns false.
|
* The LockPoints should not be considered valid if CheckSequenceLocksAtTip returns false.
|
||||||
*/
|
*/
|
||||||
bool CheckSequenceLocks(CBlockIndex* tip,
|
bool CheckSequenceLocksAtTip(CBlockIndex* tip,
|
||||||
const CCoinsView& coins_view,
|
const CCoinsView& coins_view,
|
||||||
const CTransaction& tx,
|
const CTransaction& tx,
|
||||||
LockPoints* lp = nullptr,
|
LockPoints* lp = nullptr,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user