Skip to content
This repository was archived by the owner on Jul 10, 2026. It is now read-only.

fix(escrow): owner-only recover() for CCTP V2 receivers [ESC-MN-01] - #18

Closed
madschristensen99 wants to merge 1 commit into
chainlink-resolverfrom
fix/esc-mn-01-cctp-receiver-recover
Closed

fix(escrow): owner-only recover() for CCTP V2 receivers [ESC-MN-01]#18
madschristensen99 wants to merge 1 commit into
chainlink-resolverfrom
fix/esc-mn-01-cctp-receiver-recover

Conversation

@madschristensen99

Copy link
Copy Markdown
Contributor

Summary

Remediation for ESC-MN-01 (High): CCTP receivers leave funds stuck if downstream call reverts after
succeeds. CCTP V2 nonce is consumed on first receipt, so a retry path does not exist.

Changes

New Contracts

  • — receives plain USDC via CCTP V2 and forwards to escrow; owner-only for stuck funds
  • — receives USDC, wraps into confidential USDC, forwards to confidential escrow; adds for encrypted-balance recovery

Interfaces

  • , , ,

Tests

  • 33 Foundry tests (14 plain + 19 confidential) covering success path, stuck-fund recovery, owner-only access, balance limits, event emission, and end-to-end scenarios

Audit Docs

  • — finding documented as remediated
  • — disposition tracker updated

Checklist

  • ESC-MN-01 fixed and verified
  • ESC-MN-14 (dust accumulation) closed as side-effect
  • All new tests passing
  • Audit docs updated

Relates to DEV-126 / PRVD-33

- CCTPV2EscrowReceiver: receiveMessage + recover(IERC20, uint256, address)
- CCTPV2ConfidentialEscrowReceiver: receiveMessage + recover() + recoverConfidentialUsdc()
- Extract escrow interfaces: ICCTPV2MessageTransmitter, IEscrow, IConfidentialEscrow, IConfidentialUSDCWrapper
- 33 Foundry tests covering success, stuck-fund recovery, owner-only access, event emission
- Docs: pre-audit-2026-05.md + audit-readiness-checklist.md

Closes ESC-MN-01 (High) and ESC-MN-14 (dust accumulation side-effect).
@madschristensen99
madschristensen99 marked this pull request as draft May 11, 2026 20:13
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant