mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-03-05 14:06:27 -05:00
Extract CTxIn::MAX_SEQUENCE_NONFINAL constant
This commit is contained in:
parent
973c390298
commit
fa4339e4c1
5 changed files with 32 additions and 12 deletions
|
@ -70,25 +70,45 @@ public:
|
||||||
uint32_t nSequence;
|
uint32_t nSequence;
|
||||||
CScriptWitness scriptWitness; //!< Only serialized through CTransaction
|
CScriptWitness scriptWitness; //!< Only serialized through CTransaction
|
||||||
|
|
||||||
/* Setting nSequence to this value for every input in a transaction
|
/**
|
||||||
* disables nLockTime. */
|
* Setting nSequence to this value for every input in a transaction
|
||||||
|
* disables nLockTime/IsFinalTx().
|
||||||
|
* It fails OP_CHECKLOCKTIMEVERIFY/CheckLockTime() for any input that has
|
||||||
|
* it set (BIP 65).
|
||||||
|
* It has SEQUENCE_LOCKTIME_DISABLE_FLAG set (BIP 68/112).
|
||||||
|
*/
|
||||||
static const uint32_t SEQUENCE_FINAL = 0xffffffff;
|
static const uint32_t SEQUENCE_FINAL = 0xffffffff;
|
||||||
|
/**
|
||||||
|
* This is the maximum sequence number that enables both nLockTime and
|
||||||
|
* OP_CHECKLOCKTIMEVERIFY (BIP 65).
|
||||||
|
* It has SEQUENCE_LOCKTIME_DISABLE_FLAG set (BIP 68/112).
|
||||||
|
*/
|
||||||
|
static const uint32_t MAX_SEQUENCE_NONFINAL{SEQUENCE_FINAL - 1};
|
||||||
|
|
||||||
/* Below flags apply in the context of BIP 68*/
|
// Below flags apply in the context of BIP 68. BIP 68 requires the tx
|
||||||
/* If this flag set, CTxIn::nSequence is NOT interpreted as a
|
// version to be set to 2, or higher.
|
||||||
* relative lock-time. */
|
/**
|
||||||
|
* If this flag is set, CTxIn::nSequence is NOT interpreted as a
|
||||||
|
* relative lock-time.
|
||||||
|
* It skips SequenceLocks() for any input that has it set (BIP 68).
|
||||||
|
* It fails OP_CHECKSEQUENCEVERIFY/CheckSequence() for any input that has
|
||||||
|
* it set (BIP 112).
|
||||||
|
*/
|
||||||
static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1U << 31);
|
static const uint32_t SEQUENCE_LOCKTIME_DISABLE_FLAG = (1U << 31);
|
||||||
|
|
||||||
/* If CTxIn::nSequence encodes a relative lock-time and this flag
|
/**
|
||||||
|
* If CTxIn::nSequence encodes a relative lock-time and this flag
|
||||||
* is set, the relative lock-time has units of 512 seconds,
|
* is set, the relative lock-time has units of 512 seconds,
|
||||||
* otherwise it specifies blocks with a granularity of 1. */
|
* otherwise it specifies blocks with a granularity of 1. */
|
||||||
static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
|
static const uint32_t SEQUENCE_LOCKTIME_TYPE_FLAG = (1 << 22);
|
||||||
|
|
||||||
/* If CTxIn::nSequence encodes a relative lock-time, this mask is
|
/**
|
||||||
|
* If CTxIn::nSequence encodes a relative lock-time, this mask is
|
||||||
* applied to extract that lock-time from the sequence field. */
|
* applied to extract that lock-time from the sequence field. */
|
||||||
static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
|
static const uint32_t SEQUENCE_LOCKTIME_MASK = 0x0000ffff;
|
||||||
|
|
||||||
/* In order to use the same number of bits to encode roughly the
|
/**
|
||||||
|
* In order to use the same number of bits to encode roughly the
|
||||||
* same wall-clock duration, and because blocks are naturally
|
* same wall-clock duration, and because blocks are naturally
|
||||||
* limited to occur every 600s on average, the minimum granularity
|
* limited to occur every 600s on average, the minimum granularity
|
||||||
* for time-based relative lock-time is fixed at 512 seconds.
|
* for time-based relative lock-time is fixed at 512 seconds.
|
||||||
|
|
|
@ -63,7 +63,7 @@ CMutableTransaction ConstructTransaction(const UniValue& inputs_in, const UniVal
|
||||||
if (rbf) {
|
if (rbf) {
|
||||||
nSequence = MAX_BIP125_RBF_SEQUENCE; /* CTxIn::SEQUENCE_FINAL - 2 */
|
nSequence = MAX_BIP125_RBF_SEQUENCE; /* CTxIn::SEQUENCE_FINAL - 2 */
|
||||||
} else if (rawTx.nLockTime) {
|
} else if (rawTx.nLockTime) {
|
||||||
nSequence = CTxIn::SEQUENCE_FINAL - 1;
|
nSequence = CTxIn::MAX_SEQUENCE_NONFINAL; /* CTxIn::SEQUENCE_FINAL - 1 */
|
||||||
} else {
|
} else {
|
||||||
nSequence = CTxIn::SEQUENCE_FINAL;
|
nSequence = CTxIn::SEQUENCE_FINAL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,7 +408,7 @@ uint32_t ConsumeSequence(FuzzedDataProvider& fuzzed_data_provider) noexcept
|
||||||
return fuzzed_data_provider.ConsumeBool() ?
|
return fuzzed_data_provider.ConsumeBool() ?
|
||||||
fuzzed_data_provider.PickValueInArray({
|
fuzzed_data_provider.PickValueInArray({
|
||||||
CTxIn::SEQUENCE_FINAL,
|
CTxIn::SEQUENCE_FINAL,
|
||||||
CTxIn::SEQUENCE_FINAL - 1,
|
CTxIn::MAX_SEQUENCE_NONFINAL,
|
||||||
MAX_BIP125_RBF_SEQUENCE,
|
MAX_BIP125_RBF_SEQUENCE,
|
||||||
}) :
|
}) :
|
||||||
fuzzed_data_provider.ConsumeIntegral<uint32_t>();
|
fuzzed_data_provider.ConsumeIntegral<uint32_t>();
|
||||||
|
|
|
@ -459,7 +459,7 @@ BOOST_AUTO_TEST_CASE(CreateNewBlock_validity)
|
||||||
|
|
||||||
// absolute height locked
|
// absolute height locked
|
||||||
tx.vin[0].prevout.hash = txFirst[2]->GetHash();
|
tx.vin[0].prevout.hash = txFirst[2]->GetHash();
|
||||||
tx.vin[0].nSequence = CTxIn::SEQUENCE_FINAL - 1;
|
tx.vin[0].nSequence = CTxIn::MAX_SEQUENCE_NONFINAL;
|
||||||
prevheights[0] = baseheight + 3;
|
prevheights[0] = baseheight + 3;
|
||||||
tx.nLockTime = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
tx.nLockTime = m_node.chainman->ActiveChain().Tip()->nHeight + 1;
|
||||||
hash = tx.GetHash();
|
hash = tx.GetHash();
|
||||||
|
|
|
@ -798,7 +798,7 @@ static bool CreateTransactionInternal(
|
||||||
// to avoid conflicting with other possible uses of nSequence,
|
// to avoid conflicting with other possible uses of nSequence,
|
||||||
// and in the spirit of "smallest possible change from prior
|
// and in the spirit of "smallest possible change from prior
|
||||||
// behavior."
|
// behavior."
|
||||||
const uint32_t nSequence = coin_control.m_signal_bip125_rbf.value_or(wallet.m_signal_rbf) ? MAX_BIP125_RBF_SEQUENCE : (CTxIn::SEQUENCE_FINAL - 1);
|
const uint32_t nSequence{coin_control.m_signal_bip125_rbf.value_or(wallet.m_signal_rbf) ? MAX_BIP125_RBF_SEQUENCE : CTxIn::MAX_SEQUENCE_NONFINAL};
|
||||||
for (const auto& coin : selected_coins) {
|
for (const auto& coin : selected_coins) {
|
||||||
txNew.vin.push_back(CTxIn(coin.outpoint, CScript(), nSequence));
|
txNew.vin.push_back(CTxIn(coin.outpoint, CScript(), nSequence));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue