rpcwebsocket: notify spends already in the mempool
This commit adds a logic to the addSpentRequests that inspects the mempool for any spends of the outputs. Before this commit, a spend would only be checked when a transaction was first accepted into the mempool.
This commit is contained in:
parent
c758834800
commit
3082ae92c3
1 changed files with 17 additions and 1 deletions
|
@ -883,7 +883,7 @@ func (m *wsNotificationManager) RegisterSpentRequests(wsc *wsClient, ops []*wire
|
|||
// addSpentRequests modifies a map of watched outpoints to sets of websocket
|
||||
// clients to add a new request watch all of the outpoints in ops and create
|
||||
// and send a notification when spent to the websocket client wsc.
|
||||
func (*wsNotificationManager) addSpentRequests(opMap map[wire.OutPoint]map[chan struct{}]*wsClient,
|
||||
func (m *wsNotificationManager) addSpentRequests(opMap map[wire.OutPoint]map[chan struct{}]*wsClient,
|
||||
wsc *wsClient, ops []*wire.OutPoint) {
|
||||
|
||||
for _, op := range ops {
|
||||
|
@ -900,6 +900,22 @@ func (*wsNotificationManager) addSpentRequests(opMap map[wire.OutPoint]map[chan
|
|||
}
|
||||
cmap[wsc.quit] = wsc
|
||||
}
|
||||
|
||||
// Check if any transactions spending these outputs already exists in
|
||||
// the mempool, if so send the notification immediately.
|
||||
spends := make(map[chainhash.Hash]*btcutil.Tx)
|
||||
for _, op := range ops {
|
||||
spend := m.server.cfg.TxMemPool.CheckSpend(*op)
|
||||
if spend != nil {
|
||||
rpcsLog.Debugf("Found existing mempool spend for "+
|
||||
"outpoint<%v>: %v", op, spend.Hash())
|
||||
spends[*spend.Hash()] = spend
|
||||
}
|
||||
}
|
||||
|
||||
for _, spend := range spends {
|
||||
m.notifyForTx(opMap, nil, spend, nil)
|
||||
}
|
||||
}
|
||||
|
||||
// UnregisterSpentRequest removes a request from the passed websocket client
|
||||
|
|
Loading…
Reference in a new issue