MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / FinalizeSubpackage

Method FinalizeSubpackage

src/validation.cpp:1195–1244  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1193}
1194
1195void MemPoolAccept::FinalizeSubpackage(const ATMPArgs& args)
1196{
1197 AssertLockHeld(cs_main);
1198 AssertLockHeld(m_pool.cs);
1199
1200 if (!m_subpackage.m_changeset->GetRemovals().empty()) Assume(args.m_allow_replacement);
1201 // Remove conflicting transactions from the mempool
1202 for (CTxMemPool::txiter it : m_subpackage.m_changeset->GetRemovals())
1203 {
1204 std::string log_string = strprintf("replacing mempool tx %s (wtxid=%s, fees=%s, vsize=%s). ",
1205 it->GetTx().GetHash().ToString(),
1206 it->GetTx().GetWitnessHash().ToString(),
1207 it->GetFee(),
1208 it->GetTxSize());
1209 FeeFrac feerate{m_subpackage.m_total_modified_fees, int32_t(m_subpackage.m_total_vsize)};
1210 uint256 tx_or_package_hash{};
1211 const bool replaced_with_tx{m_subpackage.m_changeset->GetTxCount() == 1};
1212 if (replaced_with_tx) {
1213 const CTransaction& tx = m_subpackage.m_changeset->GetAddedTxn(0);
1214 tx_or_package_hash = tx.GetHash().ToUint256();
1215 log_string += strprintf("New tx %s (wtxid=%s, fees=%s, vsize=%s)",
1216 tx.GetHash().ToString(),
1217 tx.GetWitnessHash().ToString(),
1218 feerate.fee,
1219 feerate.size);
1220 } else {
1221 tx_or_package_hash = GetPackageHash(m_subpackage.m_changeset->GetAddedTxns());
1222 log_string += strprintf("New package %s with %lu txs, fees=%s, vsize=%s",
1223 tx_or_package_hash.ToString(),
1224 m_subpackage.m_changeset->GetTxCount(),
1225 feerate.fee,
1226 feerate.size);
1227
1228 }
1229 LogDebug(BCLog::MEMPOOL, "%s\n", log_string);
1230 TRACEPOINT(mempool, replaced,
1231 it->GetTx().GetHash().data(),
1232 it->GetTxSize(),
1233 it->GetFee(),
1234 std::chrono::duration_cast<std::chrono::duration<std::uint64_t>>(it->GetTime()).count(),
1235 tx_or_package_hash.data(),
1236 feerate.size,
1237 feerate.fee,
1238 replaced_with_tx
1239 );
1240 m_subpackage.m_replaced_transactions.push_back(it->GetSharedTx());
1241 }
1242 m_subpackage.m_changeset->Apply();
1243 m_subpackage.m_changeset.reset();
1244}
1245
1246bool MemPoolAccept::SubmitPackage(const ATMPArgs& args, std::vector<Workspace>& workspaces,
1247 PackageValidationState& package_state,

Callers

nothing calls this directly

Calls 15

GetPackageHashFunction · 0.85
GetTxMethod · 0.80
GetAddedTxnsMethod · 0.80
countMethod · 0.80
GetTimeMethod · 0.80
GetSharedTxMethod · 0.80
emptyMethod · 0.45
ToStringMethod · 0.45
GetHashMethod · 0.45
GetFeeMethod · 0.45
GetTxSizeMethod · 0.45
GetTxCountMethod · 0.45

Tested by

no test coverage detected