adb: simplify get_conflicting_transactions
This commit is contained in:
@@ -221,7 +221,7 @@ class AddressSynchronizer(Logger, EventListener):
|
||||
self.synchronizer.add(address)
|
||||
self.up_to_date_changed()
|
||||
|
||||
def get_conflicting_transactions(self, tx_hash, tx: Transaction, include_self=False):
|
||||
def get_conflicting_transactions(self, tx: Transaction, *, include_self: bool = False) -> Set[str]:
|
||||
"""Returns a set of transaction hashes from the wallet history that are
|
||||
directly conflicting with tx, i.e. they have common outpoints being
|
||||
spent with tx.
|
||||
@@ -243,12 +243,13 @@ class AddressSynchronizer(Logger, EventListener):
|
||||
# annoying assert that has revealed several bugs over time:
|
||||
assert self.db.get_transaction(spending_tx_hash), "spending tx not in wallet db"
|
||||
conflicting_txns |= {spending_tx_hash}
|
||||
if tx_hash in conflicting_txns:
|
||||
# this tx is already in history, so it conflicts with itself
|
||||
if len(conflicting_txns) > 1:
|
||||
raise Exception('Found conflicting transactions already in wallet history.')
|
||||
if not include_self:
|
||||
conflicting_txns -= {tx_hash}
|
||||
if tx_hash := tx.txid():
|
||||
if tx_hash in conflicting_txns:
|
||||
# this tx is already in history, so it conflicts with itself
|
||||
if len(conflicting_txns) > 1:
|
||||
raise Exception('Found conflicting transactions already in wallet history.')
|
||||
if not include_self:
|
||||
conflicting_txns -= {tx_hash}
|
||||
return conflicting_txns
|
||||
|
||||
def get_transaction(self, txid: str) -> Optional[Transaction]:
|
||||
@@ -298,7 +299,7 @@ class AddressSynchronizer(Logger, EventListener):
|
||||
# When this method exits, there must NOT be any conflict, so
|
||||
# either keep this txn and remove all conflicting (along with dependencies)
|
||||
# or drop this txn
|
||||
conflicting_txns = self.get_conflicting_transactions(tx_hash, tx)
|
||||
conflicting_txns = self.get_conflicting_transactions(tx)
|
||||
if conflicting_txns:
|
||||
existing_mempool_txn = any(
|
||||
self.get_tx_height(tx_hash2).height in (TX_HEIGHT_UNCONFIRMED, TX_HEIGHT_UNCONF_PARENT)
|
||||
|
||||
Reference in New Issue
Block a user