[#MempoolAcceptResult]
= MempoolAcceptResult
:mrdocs:

Validation result for a transaction evaluated by MemPoolAccept (single or package)&period; Here are the expected fields and properties of a result depending on its ResultType, applicable to results returned from package evaluation&colon;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&verbar; Field or property &verbar; VALID &verbar; INVALID &verbar; MEMPOOL&lowbar;ENTRY &verbar; DIFFERENT&lowbar;WITNESS &verbar;&verbar; &verbar; &verbar;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&verbar; &verbar; &verbar;&verbar; &verbar; &verbar; TX&lowbar;RECONSIDERABLE &verbar; Other &verbar; &verbar; &verbar;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&verbar; txid in mempool? &verbar; yes &verbar; no &verbar; no&ast; &verbar; yes &verbar; yes &verbar;&verbar; wtxid in mempool? &verbar; yes &verbar; no &verbar; no&ast; &verbar; yes &verbar; no &verbar;&verbar; m&lowbar;state &verbar; yes, IsValid() &verbar; yes, IsInvalid() &verbar; yes, IsInvalid() &verbar; yes, IsValid() &verbar; yes, IsValid() &verbar;&verbar; m&lowbar;vsize &verbar; yes &verbar; no &verbar; no &verbar; yes &verbar; no &verbar;&verbar; m&lowbar;base&lowbar;fees &verbar; yes &verbar; no &verbar; no &verbar; yes &verbar; no &verbar;&verbar; m&lowbar;effective&lowbar;feerate &verbar; yes &verbar; yes &verbar; no &verbar; no &verbar; no &verbar;&verbar; m&lowbar;wtxids&lowbar;fee&lowbar;calculations &verbar; yes &verbar; yes &verbar; no &verbar; no &verbar; no &verbar;&verbar; m&lowbar;other&lowbar;wtxid &verbar; no &verbar; no &verbar; no &verbar; no &verbar; yes &verbar;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&hyphen;&plus; (&ast;) Individual transaction acceptance doesn&apos;t return MEMPOOL&lowbar;ENTRY and DIFFERENT&lowbar;WITNESS&period; It returns INVALID, with the errors txn&hyphen;already&hyphen;in&hyphen;mempool and txn&hyphen;same&hyphen;nonwitness&hyphen;data&hyphen;in&hyphen;mempool respectively&period; In those cases, the txid or wtxid may be in the mempool for a TX&lowbar;CONFLICT&period;

== Synopsis

Declared in `&lt;validation&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
struct MempoolAcceptResult;
----

== Enums

[cols="1,4"]
|===
| Name| Description
| xref:MempoolAcceptResult/ResultType.adoc[`ResultType`] 
| Used to indicate the results of mempool validation&period;
|===


== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:MempoolAcceptResult/Failure.adoc[`Failure`] 
| Build a result for a transaction that failed validation&period;
| xref:MempoolAcceptResult/FeeFailure.adoc[`FeeFailure`] 
| Build a result for a fee&hyphen;related validation failure&period;
| xref:MempoolAcceptResult/MempoolTx.adoc[`MempoolTx`] 
| Build a result for a transaction that was already present in the mempool&period;
| xref:MempoolAcceptResult/MempoolTxDifferentWitness.adoc[`MempoolTxDifferentWitness`] 
| Build a result for a transaction rejected because a same&hyphen;txid, different&hyphen;witness transaction is already in the mempool&period;
| xref:MempoolAcceptResult/Success.adoc[`Success`] 
| Build a result for a transaction that was successfully accepted into the mempool&period;
|===


== Data Members

[cols="1,4"]
|===
| Name| Description
| xref:MempoolAcceptResult/m_base_fees.adoc[`m&lowbar;base&lowbar;fees`] 
| Raw base fees in satoshis&period;
| xref:MempoolAcceptResult/m_effective_feerate.adoc[`m&lowbar;effective&lowbar;feerate`] 
| The feerate at which this transaction was considered&period; This includes any fee delta added using prioritisetransaction (i&period;e&period; modified fees)&period; If this transaction was submitted as a package, this is the package feerate, which may also include its descendants and&sol;or ancestors (see m&lowbar;wtxids&lowbar;fee&lowbar;calculations below)&period;
| xref:MempoolAcceptResult/m_other_wtxid.adoc[`m&lowbar;other&lowbar;wtxid`] 
| The wtxid of the transaction in the mempool which has the same txid but different witness&period;
| xref:MempoolAcceptResult/m_replaced_transactions.adoc[`m&lowbar;replaced&lowbar;transactions`] 
| Mempool transactions replaced by the tx&period;
| xref:MempoolAcceptResult/m_result_type.adoc[`m&lowbar;result&lowbar;type`] 
| Result type&period; Present in all MempoolAcceptResults&period;
| xref:MempoolAcceptResult/m_state.adoc[`m&lowbar;state`] 
| Contains information about why the transaction failed&period;
| xref:MempoolAcceptResult/m_vsize.adoc[`m&lowbar;vsize`] 
| Virtual size as used by the mempool, calculated using serialized size and sigops&period;
| xref:MempoolAcceptResult/m_wtxids_fee_calculations.adoc[`m&lowbar;wtxids&lowbar;fee&lowbar;calculations`] 
| Contains the wtxids of the transactions used for fee&hyphen;related checks&period; Includes this transaction&apos;s wtxid and may include others if this transaction was validated as part of a package&period; This is not necessarily equivalent to the list of transactions passed to ProcessNewPackage()&period; Only present when m&lowbar;result&lowbar;type &equals; ResultType&colon;&colon;VALID&period;
|===


== Non-Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:AcceptToMemoryPool.adoc[`AcceptToMemoryPool`]
| Try to add a transaction to the mempool&period; This is an internal function and is exposed only for testing&period; Client code should use ChainstateManager&colon;&colon;ProcessTransaction()
|===


[.small]#Created with https://www.mrdocs.com[MrDocs]#
