wallet: call InsertTxCheckIfExists to add a relevant tx

Let the method `addRelevantTx` use `InsertTxCheckIfExists` to insert a relevant 
transaction. If the transaction has already been recorded, the method call 
`addRelevantTx` will return early and not proceed with duplicating work of 
checking every output and duplicating the tx notification to the notification 
server.
This commit is contained in:
Bjarne Magnussen 2021-06-04 08:07:24 +02:00
parent 0066eee3ea
commit 419381b749
No known key found for this signature in database
GPG key ID: B0A9ADF6B24CE67F

View file

@ -280,11 +280,19 @@ func (w *Wallet) addRelevantTx(dbtx walletdb.ReadWriteTx, rec *wtxmgr.TxRecord,
// relevant. This assumption will not hold true when SPV support is
// added, but until then, simply insert the transaction because there
// should either be one or more relevant inputs or outputs.
err := w.TxStore.InsertTx(txmgrNs, rec, block)
exists, err := w.TxStore.InsertTxCheckIfExists(txmgrNs, rec, block)
if err != nil {
return err
}
// If the transaction has already been recorded, we can return early.
// Note: Returning here is safe as we're within the context of an atomic
// database transaction, so we don't need to worry about the MarkUsed
// calls below.
if exists {
return nil
}
// Check every output to determine whether it is controlled by a wallet
// key. If so, mark the output as a credit.
for i, output := range rec.MsgTx.TxOut {