Как восстановить активную ликвидность 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