Skip to content

Remove Broadcast/ResendWalletTransactions from validation interface #15619

@jnewbery

Description

@jnewbery

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:
    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 the nNextResend and nLastResend wallet globals (which could as easily be static variables in ResendWalletTransactions()).

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:

scheduler.scheduleEvery(MaybeCompactWalletDB, 500);
.

A couple of minor implementation details:

  • the call to Broadcast() in SendMessages() is protected by an if statement if (!fReindex && !fImporting && !IsInitialBlockDownload()) {. Those tests could be moved into ResendWalletTransactions() (through the Chain interface).
  • The Broadcast notification passes in the nTimeBestReceived time of the best block. That could be fetched by ResendWalletTransactions() through the Chain interface.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions