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
|
// 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
|
// 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.
|
// 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) {
|
wsc *wsClient, ops []*wire.OutPoint) {
|
||||||
|
|
||||||
for _, op := range ops {
|
for _, op := range ops {
|
||||||
|
@ -900,6 +900,22 @@ func (*wsNotificationManager) addSpentRequests(opMap map[wire.OutPoint]map[chan
|
||||||
}
|
}
|
||||||
cmap[wsc.quit] = wsc
|
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
|
// UnregisterSpentRequest removes a request from the passed websocket client
|
||||||
|
|
Loading…
Reference in a new issue