
Биржи, пулы и обменники фиата на USDC, которыми я пользуюсь, не всегда умеют выводить USDC в Stellar. Тогда я вывожу в Polygon, самую дешёвую из распространённых EVM-сетей, и уже оттуда перевожу USDC в Stellar. Интерфейса к CCTP, где можно выбрать Stellar, я не нашёл, а мосты вроде Allbridge берут свою комиссию. Так что сделал сам и теперь пользуюсь им для своих переводов.
Перевод идёт в три шага, у каждого свой подписант. Сжигание в Polygon подписывает MetaMask. Подтверждение сжигания выдаёт Circle. Выпуск в Stellar подписывает Albedo или Freighter.
flowchart TB
subgraph P[Polygon]
direction TB
MM[MetaMask] -- "1. approve и depositForBurnWithHook" --> TM[TokenMessengerV2: сжигает USDC]
end
subgraph C[Circle]
direction TB
IR[Iris: аттестация сжигания]
end
subgraph S[Stellar]
direction TB
W[Albedo или Freighter] -- "3. mint_and_forward" --> CF[CctpForwarder: выпускает USDC]
CF --> R[получатель]
end
P -- "хеш транзакции сжигания: по нему интерфейс опрашивает Iris" --> C
C -- "2. сообщение и подпись" --> S
Шаги связаны только хешем транзакции сжигания: по нему интерфейс запрашивает у Circle сообщение и подпись. Если перевод прервался, достаточно вставить этот хеш в третий шаг, получатель и сумма записаны в самом сообщении. Что нужно до начала, интерфейс перечисляет сам, адреса контрактов Circle стоят внизу, исходники на GitHub.
- USDC из Polygon в Stellar 1:1 через Circle CCTP
- Комиссии посредника нет, платишь газ двух сетей
- Ключи остаются в кошельках: MetaMask, Albedo или Freighter
- Прерванный перевод продолжается по хешу сжигания
- Пока одно направление, Polygon → Stellar