Skip to content

Conversation

@marco-sundsk
Copy link
Contributor

No description provided.

Add comprehensive lostfound account management to handle failed token transfers
during swaps with three-tier recovery:

- Tier 1: Re-deposit to user's internal pool account
- Tier 2: Deposit to user's personal lostfound account (when contract has >100 NEAR)
- Tier 3: Fallback to owner's account (when contract has insufficient NEAR)

Changes:
- New account_lostfound module with LostfoundAccount structure and claim functionality
- Enhanced callback recovery logic in exchange_callback_post_withdraw
- Added test helper functions for controlling contract NEAR balance
- Comprehensive test suite with 5 scenarios covering:
  * Tier 1 success path (user has storage)
  * Tier 1 failure → Tier 2 fallback (critical path)
  * Tier 2 user lostfound with claim verification
  * Tier 3 owner fallback when contract low on NEAR
  * Multiple tokens accumulating and selective claiming

All tests passing with ~90-95% workflow coverage.
Previously, when multiple tokens shared the same Pyth oracle price_id, only
the last token in the batch would be updated. This was due to using a
HashMap<PriceIdentifier, AccountId> which only stored a single token per
price_id, causing earlier tokens to be overwritten.

Changes:
- Modified internal_batch_update_degen_token_price to build
  HashMap<PriceIdentifier, Vec<AccountId>> instead
- Updated batch_update_degen_token_by_pyth_oracle function signature to accept
  the new map structure
- Updated batch_update_degen_token_by_pyth_oracle_callback with nested loop
  to update ALL tokens for each price_id
- Updated SelfCallbacks trait to reflect the new signature
- Added integration test batch_update_degen_token_same_price_id to verify that
  multiple tokens sharing a price_id are all correctly updated with the same
  price value

All existing tests pass. The fix maintains backward compatibility as the
oracle interface remains unchanged.
@marco-sundsk marco-sundsk merged commit 1800d26 into main Nov 6, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants