diff --git a/hathor/indexes/memory_tx_group_index.py b/hathor/indexes/memory_tx_group_index.py index 5b8415905..87f9f49c6 100644 --- a/hathor/indexes/memory_tx_group_index.py +++ b/hathor/indexes/memory_tx_group_index.py @@ -31,7 +31,7 @@ class MemoryTxGroupIndex(TxGroupIndex[KT]): """Memory implementation of the TxGroupIndex. This class is abstract and cannot be used directly. """ - index: defaultdict[KT, set[bytes]] + index: defaultdict[KT, set[tuple[int, bytes]]] def __init__(self) -> None: self.force_clear() @@ -40,7 +40,7 @@ def force_clear(self) -> None: self.index = defaultdict(set) def _add_tx(self, key: KT, tx: BaseTransaction) -> None: - self.index[key].add(not_none(tx.hash)) + self.index[key].add((tx.timestamp, not_none(tx.hash))) @abstractmethod def _extract_keys(self, tx: BaseTransaction) -> Iterable[KT]: @@ -57,13 +57,14 @@ def remove_tx(self, tx: BaseTransaction) -> None: assert tx.hash is not None for key in self._extract_keys(tx): - self.index[key].discard(tx.hash) + self.index[key].discard((tx.timestamp, tx.hash)) def _get_from_key(self, key: KT) -> Iterable[bytes]: - yield from self.index[key] + for _, h in self.index[key]: + yield h def _get_sorted_from_key(self, key: KT) -> Iterable[bytes]: - return sorted(self.index[key]) + return [h for _, h in sorted(self.index[key])] def _is_key_empty(self, key: KT) -> bool: return not bool(self.index[key])