mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-11 14:38:29 +01:00
Merge bitcoin/bitcoin#23804: validation: followups for de-duplication of packages
3cd7f693d3[unit test] package parents are a mix (glozow)de075a98ea[validation] better handle errors in SubmitPackage (glozow)9d88853e0cAcceptPackage fixups (glozow)2db77cd3b8[unit test] different witness in package submission (glozow)9ad211c575[doc] more detailed explanation for deduplication (glozow)83d4fb7126[packages] return DIFFERENT_WITNESS for same-txid-different-witness tx (glozow) Pull request description: This addresses some comments from review one12fafda2dfrom #22674. - Improve documentation about de-duplication: [comment](https://github.com/bitcoin/bitcoin/pull/22674/files#r770156708) - Fix code looking up same-txid-different-witness transaction in mempool: [comment](https://github.com/bitcoin/bitcoin/pull/22674/files#r770804029) - Improve the interface for when a same-txid-different-witness transaction is swapped: [comment](https://github.com/bitcoin/bitcoin/pull/22674/files#r770782822) - Add a test for witness swapping: [comment](https://github.com/bitcoin/bitcoin/pull/22674/files#r770804029) - Add a test for packages with a mix of duplicate/different witness/new parents: [comment](https://github.com/bitcoin/bitcoin/pull/22674#discussion_r773037608) - Fix issue with not notifying `CValidationInterface` when there's a partial submission due to fail-fast: [comment](https://github.com/bitcoin/bitcoin/pull/22674#discussion_r773013162) ACKs for top commit: achow101: ACK3cd7f693d3t-bast: LGTM, ACK3cd7f693d3instagibbs: ACK3cd7f693d3ariard: ACK3cd7f69Tree-SHA512: a5d86ca86edab80a5a05fcbb828901c058b3f2fa2552912ea52f2871e29c3cf4cc34020e7aac2217959c9c3a01856f4bd3d631d844635b98144f212f76c2f3ef
This commit is contained in:
@@ -163,8 +163,12 @@ struct MempoolAcceptResult {
|
||||
VALID, //!> Fully validated, valid.
|
||||
INVALID, //!> Invalid.
|
||||
MEMPOOL_ENTRY, //!> Valid, transaction was already in the mempool.
|
||||
DIFFERENT_WITNESS, //!> Not validated. A same-txid-different-witness tx (see m_other_wtxid) already exists in the mempool and was not replaced.
|
||||
};
|
||||
/** Result type. Present in all MempoolAcceptResults. */
|
||||
const ResultType m_result_type;
|
||||
|
||||
/** Contains information about why the transaction failed. */
|
||||
const TxValidationState m_state;
|
||||
|
||||
// The following fields are only present when m_result_type = ResultType::VALID or MEMPOOL_ENTRY
|
||||
@@ -175,6 +179,10 @@ struct MempoolAcceptResult {
|
||||
/** Raw base fees in satoshis. */
|
||||
const std::optional<CAmount> m_base_fees;
|
||||
|
||||
// The following field is only present when m_result_type = ResultType::DIFFERENT_WITNESS
|
||||
/** The wtxid of the transaction in the mempool which has the same txid but different witness. */
|
||||
const std::optional<uint256> m_other_wtxid;
|
||||
|
||||
static MempoolAcceptResult Failure(TxValidationState state) {
|
||||
return MempoolAcceptResult(state);
|
||||
}
|
||||
@@ -187,6 +195,10 @@ struct MempoolAcceptResult {
|
||||
return MempoolAcceptResult(vsize, fees);
|
||||
}
|
||||
|
||||
static MempoolAcceptResult MempoolTxDifferentWitness(const uint256& other_wtxid) {
|
||||
return MempoolAcceptResult(other_wtxid);
|
||||
}
|
||||
|
||||
// Private constructors. Use static methods MempoolAcceptResult::Success, etc. to construct.
|
||||
private:
|
||||
/** Constructor for failure case */
|
||||
@@ -203,6 +215,10 @@ private:
|
||||
/** Constructor for already-in-mempool case. It wouldn't replace any transactions. */
|
||||
explicit MempoolAcceptResult(int64_t vsize, CAmount fees)
|
||||
: m_result_type(ResultType::MEMPOOL_ENTRY), m_vsize{vsize}, m_base_fees(fees) {}
|
||||
|
||||
/** Constructor for witness-swapped case. */
|
||||
explicit MempoolAcceptResult(const uint256& other_wtxid)
|
||||
: m_result_type(ResultType::DIFFERENT_WITNESS), m_other_wtxid(other_wtxid) {}
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -212,7 +228,7 @@ struct PackageMempoolAcceptResult
|
||||
{
|
||||
const PackageValidationState m_state;
|
||||
/**
|
||||
* Map from (w)txid to finished MempoolAcceptResults. The client is responsible
|
||||
* Map from wtxid to finished MempoolAcceptResults. The client is responsible
|
||||
* for keeping track of the transaction objects themselves. If a result is not
|
||||
* present, it means validation was unfinished for that transaction. If there
|
||||
* was a package-wide error (see result in m_state), m_tx_results will be empty.
|
||||
|
||||
Reference in New Issue
Block a user