Skip to content

fix(resolver): drop in-memory resolution cache#1151

Merged
bmc08gt merged 1 commit into
code/cashfrom
fix/resolver-drop-in-memory-cache
Jul 24, 2026
Merged

fix(resolver): drop in-memory resolution cache#1151
bmc08gt merged 1 commit into
code/cashfrom
fix/resolver-drop-in-memory-cache

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Jul 24, 2026

Copy link
Copy Markdown
Collaborator

Problem

Sending money inside a chat via a contact DM fails with the server error:

InvalidIntent(reasons=[payments to external destinations must be withdrawals])

This regressed at the delegate refactor (#1130), whose only behavioral change (the rest was pure code-moving) was adding a process-lifetime in-memory cache to ResolverController.

Root cause

The cache could hand back a stale/incorrect on-chain PublicKey for a phone number or user id. That address flows into TransactionController.directTransferTimelockDerivedAccounts.newInstance(owner = destinationOwner, token), deriving the wrong destination vault. The server sees a vault it doesn't manage and rejects the transfer as an external destination that must be a withdrawal.

This matches the observed device/version signal — fine on an S25 at an earlier build, broken on a Pixel 10 emulator at the next — since a caching bug surfaces per-process/session rather than uniformly.

Fix

Always resolve fresh against the repository. The cache was only ever a network round-trip optimization with no correctness benefit, so removing it restores the reliable pre-refactor behavior. Public API is unchanged; nothing else depended on the cache.

The process-lifetime cache in ResolverController could return a stale
on-chain address for a phone/user id. That wrong PublicKey flows into
directTransfer's timelock derivation, producing a destination vault the
server rejects with "payments to external destinations must be
withdrawals" — breaking in-chat contact DM sends.

Always resolve fresh against the repository. The cache was only ever a
round-trip optimization with no correctness benefit; removing it restores
the reliable pre-refactor behavior.
@github-actions github-actions Bot added type: fix Bug fix area: network gRPC, connectivity, API, exchange rates labels Jul 24, 2026
@bmc08gt
bmc08gt merged commit 17aaa54 into code/cash Jul 24, 2026
3 checks passed
@bmc08gt
bmc08gt deleted the fix/resolver-drop-in-memory-cache branch July 24, 2026 23:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area: network gRPC, connectivity, API, exchange rates type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant