Как разобрать CurrencyNotSettled в конце unlock Uniswap v4

Обмен v4 может выполниться внутри unlock callback, хотя вся транзакция позднее откатится. До завершения unlock менеджер требует погашения открытых дельт валют.

Восстановите дельты по аккаунту и валюте

Проследите все действия менеджера в обратном вызове. Отрицательная дельта вызывающей стороны означает долг менеджеру, положительная — доступный кредит. Учитывайте обе валюты вместо одной суммарной оценки роутера.

after swap: caller delta A = -100; caller delta B = +97
before unlock returns: both currency deltas must be zero

В примере нужно покрыть долг в 100 единицах A и использовать кредит 97 единиц B через предусмотренные операции расчёта или получения. Сам перевод ERC-20 ещё не обязательно обновляет учёт менеджера: проверьте порядок sync и settle.

Включите все вложенные операции

Несколько обменов и hooks могут взаимно погашать дельты в одном unlock. Изучите оставшиеся записи по аккаунту и валюте, учитывая различия нативной валюты и ERC-20. При откате unlock ни один из этих обменов не фиксируется. github.com PoolManager.sol