chainntnfs/btcdnotify: remove all mempool spend clients
This commit is contained in:
parent
d7b2977e8c
commit
3808105dcd
@ -377,6 +377,14 @@ out:
|
|||||||
// rescan spends. It might get removed entirely in the future.
|
// rescan spends. It might get removed entirely in the future.
|
||||||
case item := <-b.txUpdates.ChanOut():
|
case item := <-b.txUpdates.ChanOut():
|
||||||
newSpend := item.(*txUpdate)
|
newSpend := item.(*txUpdate)
|
||||||
|
|
||||||
|
// We only care about notifying on confirmed spends, so
|
||||||
|
// in case this is a mempool spend, we can continue,
|
||||||
|
// and wait for the spend to appear in chain.
|
||||||
|
if newSpend.details == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
spendingTx := newSpend.tx
|
spendingTx := newSpend.tx
|
||||||
|
|
||||||
// First, check if this transaction spends an output
|
// First, check if this transaction spends an output
|
||||||
@ -397,56 +405,27 @@ out:
|
|||||||
SpendingTx: spendingTx.MsgTx(),
|
SpendingTx: spendingTx.MsgTx(),
|
||||||
SpenderInputIndex: uint32(i),
|
SpenderInputIndex: uint32(i),
|
||||||
}
|
}
|
||||||
// TODO(roasbeef): after change to
|
spendDetails.SpendingHeight = newSpend.details.Height
|
||||||
// loadfilter, only notify on block
|
|
||||||
// inclusion?
|
|
||||||
|
|
||||||
confirmedSpend := false
|
for _, ntfn := range clients {
|
||||||
if newSpend.details != nil {
|
chainntnfs.Log.Infof("Dispatching "+
|
||||||
confirmedSpend = true
|
"confirmed spend "+
|
||||||
spendDetails.SpendingHeight = newSpend.details.Height
|
"notification for "+
|
||||||
} else {
|
|
||||||
spendDetails.SpendingHeight = currentHeight + 1
|
|
||||||
}
|
|
||||||
|
|
||||||
// Keep spendNotifications that are
|
|
||||||
// waiting for a confirmation around.
|
|
||||||
// They will be notified when we find
|
|
||||||
// the spend within a block.
|
|
||||||
rem := make(map[uint64]*spendNotification)
|
|
||||||
for c, ntfn := range clients {
|
|
||||||
// If this is a mempool spend,
|
|
||||||
// store the client to wait for
|
|
||||||
// a confirmed spend.
|
|
||||||
if !confirmedSpend {
|
|
||||||
rem[c] = ntfn
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
confStr := "unconfirmed"
|
|
||||||
if confirmedSpend {
|
|
||||||
confStr = "confirmed"
|
|
||||||
}
|
|
||||||
|
|
||||||
chainntnfs.Log.Infof("Dispatching %s "+
|
|
||||||
"spend notification for "+
|
|
||||||
"outpoint=%v at height %v",
|
"outpoint=%v at height %v",
|
||||||
confStr, ntfn.targetOutpoint,
|
ntfn.targetOutpoint,
|
||||||
spendDetails.SpendingHeight)
|
spendDetails.SpendingHeight)
|
||||||
ntfn.spendChan <- spendDetails
|
ntfn.spendChan <- spendDetails
|
||||||
|
|
||||||
// Close spendChan to ensure that any calls to Cancel will not
|
// Close spendChan to ensure
|
||||||
// block. This is safe to do since the channel is buffered, and the
|
// that any calls to Cancel
|
||||||
// message can still be read by the receiver.
|
// will not block. This is safe
|
||||||
|
// to do since the channel is
|
||||||
|
// buffered, and the message
|
||||||
|
// can still be read by the
|
||||||
|
// receiver.
|
||||||
close(ntfn.spendChan)
|
close(ntfn.spendChan)
|
||||||
}
|
}
|
||||||
delete(b.spendNotifications, prevOut)
|
delete(b.spendNotifications, prevOut)
|
||||||
|
|
||||||
// If we had any clients left, add them
|
|
||||||
// back to the map.
|
|
||||||
if len(rem) > 0 {
|
|
||||||
b.spendNotifications[prevOut] = rem
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -610,8 +589,6 @@ func (b *BtcdNotifier) handleBlockConnected(newBlock *filteredBlock) error {
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(roasbeef): many integration tests expect spend to be
|
|
||||||
// notified within the mempool.
|
|
||||||
spendDetails := &chainntnfs.SpendDetail{
|
spendDetails := &chainntnfs.SpendDetail{
|
||||||
SpentOutPoint: &prevOut,
|
SpentOutPoint: &prevOut,
|
||||||
SpenderTxHash: &txSha,
|
SpenderTxHash: &txSha,
|
||||||
|
Loading…
Reference in New Issue
Block a user