Как восстановить активную ликвидность Uniswap v3 при пересечении тиков

Сумма ликвидности всех позиций завысит доступное значение на текущей цене. Диапазон участвует только между нижней включённой и верхней исключённой границами.

Применяйте изменение со знаком направления

При движении вверх прибавляйте liquidityNet пересечённого инициализированного тика. При движении вниз меняйте знак. Позиция примера добавляет положительное net на 100 и отрицательное на 200 до объединения с другими позициями этих границ.

position range: [100, 200)
position liquidity: 500
upward crossings: 100 adds 500; 200 removes 500

При проходе вверх через обе границы активная ликвидность сначала вырастет, затем уменьшится на 500. Итоговый вклад станет нулём, хотя сама позиция продолжает существовать и может содержать токены.

Учитывайте точное попадание на границу

При пересечении вниз текущий тик пула может записываться как пересечённый минус один. Для сверки снимков используйте логику swap и тик slot0 вместо безусловного пересчёта тика из граничной цены квадратного корня. github.com UniswapV3Pool.sol