-
Notifications
You must be signed in to change notification settings - Fork 38.7k
Closed
Description
The Broadcast/ResendWalletTransactions interface is strange:
- it's the node saying to the wallet "Try to submit your unconfirmed transactions to the mempool again"
- it's called in one place by the node, in
SendMessages()here:.bitcoin/src/net_processing.cpp
Line 3515 in c033c4b
GetMainSignals().Broadcast(nTimeBestReceived, connman); SendMessages()is called on the message handling thread on a loop. - the actual scheduling of when the wallet sends messages is handled in the
ResendWalletTransactions()function itself, using thenNextResendandnLastResendwallet globals (which could as easily be static variables inResendWalletTransactions()).
Therefore the only use of Broadcast() is to periodically prod the wallet. The wallet itself decides whether it's time to resend transactions. This could be done by scheduling regular calls to ResendWalletTransactions(), in the same way that we schedule regular wallet flushes here:
Line 215 in c033c4b
| scheduler.scheduleEvery(MaybeCompactWalletDB, 500); |
A couple of minor implementation details:
- the call to
Broadcast()inSendMessages()is protected by an if statementif (!fReindex && !fImporting && !IsInitialBlockDownload()) {. Those tests could be moved intoResendWalletTransactions()(through theChaininterface). - The
Broadcastnotification passes in thenTimeBestReceivedtime of the best block. That could be fetched byResendWalletTransactions()through theChaininterface.