Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions allways/validator/event_watcher.py
Original file line number Diff line number Diff line change
Expand Up @@ -694,9 +694,9 @@ def _lookup_swap_direction(self, swap_id: int) -> Tuple[str, str]:
if self.swap_tracker is None:
return '', ''
swap = self.swap_tracker.active.get(swap_id)
if swap is None:
return '', ''
return (swap.from_chain or '').lower(), (swap.to_chain or '').lower()
if swap is not None:
return (swap.from_chain or '').lower(), (swap.to_chain or '').lower()
return self.swap_tracker.resolved_directions.get(swap_id, ('', ''))

def record_reservation_pin(self, block_num: int, miner: str, reserved_until: int) -> None:
"""Pin the miner's commitment as of the reservation block ``block_num``.
Expand Down
5 changes: 5 additions & 0 deletions allways/validator/swap_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def __init__(self, client: AllwaysContractClient, metagraph: Optional[Any] = Non
self.last_scanned_id = 0
self.active: Dict[int, Swap] = {}
self.voted_ids: Set[int] = set()
self.resolved_directions: Dict[int, tuple[str, str]] = {}

def _label(self, swap: Swap) -> str:
return _swap_label_with_uid(swap, self.metagraph)
Expand Down Expand Up @@ -82,6 +83,10 @@ def resolve(self, swap_id: int, status: SwapStatus, block: int):
swap = self.active.pop(swap_id, None)
if swap is None:
return
self.resolved_directions[swap_id] = (
(swap.from_chain or '').lower(),
(swap.to_chain or '').lower(),
)
swap.status = status
swap.completed_block = block
self.voted_ids.discard(swap_id)
Expand Down
9 changes: 9 additions & 0 deletions tests/test_swap_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,15 @@ def test_event_driven_resolve_drops_swap(self):

assert 51 not in tracker.active

def test_resolve_caches_direction_for_late_terminal_events(self):
tracker = make_tracker()
swap = make_swap(swap_id=52, from_chain='btc', to_chain='tao')
tracker.active[swap.id] = swap

tracker.resolve(swap_id=52, status=SwapStatus.COMPLETED, block=600)

assert tracker.resolved_directions[52] == ('btc', 'tao')

def test_terminal_status_drops_without_retry(self):
tracker = make_tracker()
swap = make_swap(swap_id=53)
Expand Down