| 1193 | } |
| 1194 | |
| 1195 | void 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 | |
| 1246 | bool MemPoolAccept::SubmitPackage(const ATMPArgs& args, std::vector<Workspace>& workspaces, |
| 1247 | PackageValidationState& package_state, |
nothing calls this directly
no test coverage detected