feat(chat): 0-conf fast-scan so incoming messages show before a block
The receive harvest gates each z-address behind scannedAtTip — it only re-scans when a new block advances the tip — so incoming chat waited ~1 confirmation even though the daemon already exposes mempool notes (FindMySaplingNotes runs on mempool txs; z_listreceivedbyaddress(addr,0) returns them). Add App::fastScanChatMemos(): every transaction-refresh cycle, re-scan JUST the chat reply address (where peers send) at minconf=0, extract chat metadata, and ingest — so messages surface at mempool speed (a few seconds) instead of waiting for a block. Full-node only (lite has its own harvest). An in-flight guard avoids stacking RPCs; the store dedups on txid+position, so the confirmed harvest never double-inserts. Hidden conversations are deliberately skipped by the fast path — they don't get the mempool speed-up and still come back through the normal confirmed harvest (which un-hides on a new message). New non-muted messages toast off-tab as usual. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1168,6 +1168,9 @@ void App::update()
|
||||
} else if (walletDataPage && shouldRefreshRecentTransactions()) {
|
||||
refreshRecentTransactionData();
|
||||
}
|
||||
// 0-conf chat: the normal harvest above only re-scans on a new block, so also do a light
|
||||
// mempool scan of the chat address every cycle to surface messages before confirmation.
|
||||
fastScanChatMemos();
|
||||
}
|
||||
if (network_refresh_.consumeDue(RefreshTimer::Addresses)) {
|
||||
if (walletDataPage || addresses_dirty_ || hasTransactionSendProgress()) {
|
||||
|
||||
Reference in New Issue
Block a user