mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-11-12 06:58:57 +01:00
Merge #18895: p2p: unbroadcast followups: rpcs, nLastResend, mempool sanity check
651f1d816f[test] wait for inital broadcast before comparing mempool entries (gzhao408)9d3f7eb986[mempool] sanity check that all unbroadcast txns are in mempool (gzhao408)a7ebe48b94[rpc] add unbroadcast info to mempool entries and getmempoolinfo (gzhao408)d160069604[wallet] remove nLastResend logic (gzhao408) Pull request description: Followup to #18038 by amitiuttarwar which introduces the unbroadcast set: "a mechanism for the mempool to track locally submitted transactions" and decreases the frequency of rebroadcast from 10-15 minutes to 12-36 hours. This PR addresses some of the outstanding TODOs building on top of it: - remove `nLastResend` logic, which is used to ensure rebroadcast doesn't happen again if no new block has been mined (makes sense in 10-15 min period, but not necessary for 12-36 hour period). (#18038 [comment](https://github.com/bitcoin/bitcoin/pull/18038#discussion_r416826914)) - expose unbroadcast info via RPCs, for more informative queries and testing (#18038 [comment](https://github.com/bitcoin/bitcoin/pull/18038#discussion_r416837980)) - add sanity check to verify unbroadcast transactions still exist in mempool before rebroadcasting (#18038 [comment](https://github.com/bitcoin/bitcoin/pull/18038#discussion_r416861609)) ACKs for top commit: naumenkogs: Code review ACK651f1d816famitiuttarwar: ACK651f1d816f🎉 MarcoFalke: Review ACK651f1d816fTree-SHA512: d5327e95ef39d44152b48df5c610502ae11c168f43dbbfb2885340c93d1ba9426eb3a5794573f5fc843502109cb3ffb63efa3f2db4f8f112efcde8f76d9a8845
This commit is contained in:
@@ -645,6 +645,7 @@ class P2PTxInvStore(P2PInterface):
|
||||
self.tx_invs_received = defaultdict(int)
|
||||
|
||||
def on_inv(self, message):
|
||||
super().on_inv(message) # Send getdata in response.
|
||||
# Store how many times invs have been received for each tx.
|
||||
for i in message.inv:
|
||||
if i.type == MSG_TX:
|
||||
@@ -654,3 +655,12 @@ class P2PTxInvStore(P2PInterface):
|
||||
def get_invs(self):
|
||||
with mininode_lock:
|
||||
return list(self.tx_invs_received.keys())
|
||||
|
||||
def wait_for_broadcast(self, txns, timeout=60):
|
||||
"""Waits for the txns (list of txids) to complete initial broadcast.
|
||||
The mempool should mark unbroadcast=False for these transactions.
|
||||
"""
|
||||
# Wait until invs have been received (and getdatas sent) for each txid.
|
||||
self.wait_until(lambda: set(self.get_invs()) == set([int(tx, 16) for tx in txns]), timeout)
|
||||
# Flush messages and wait for the getdatas to be processed
|
||||
self.sync_with_ping()
|
||||
|
||||
Reference in New Issue
Block a user