Как различать владельца NFT Uniswap v3 и позицию в ядре пула
Два LP NFT одного диапазона могут участвовать в общей позиции ядра, принадлежащей менеджеру позиций. Поиск адреса кошелька как владельца позиции в пуле поэтому может дать неверную запись.
Разберите каждый NFT через его менеджер
Для каждого token ID вызовите ownerOf и positions у проверенного менеджера. На одном блоке сохраните токены, комиссию, тики, ликвидность и контрольную точку комиссий NFT. Для ключа позиции ядра используйте адрес менеджера и пару тиков.
NFT #7 and NFT #8: same pool, same lower and upper ticks
core owner: NonfungiblePositionManager
В примере у NFT могут различаться владельцы и история комиссий при одном агрегированном ключе ядра. Если целиком приписать ликвидность ядра NFT 7, вклад NFT 8 окажется задвоен.
Обрабатывайте передачу отдельно от ликвидности
Перевод ERC-721 меняет контроль над NFT, но не обязан менять диапазон или ликвидность в пуле. Отдельно отслеживайте передачи NFT и события менеджера о ликвидности. У разных менеджеров будут разные ключи ядра даже при одинаковых границах. github.com NonfungiblePositionManager.sol