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

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

Рассчитайте, что зафиксировало бы обновление

Для выбранного токена получите рост комиссий внутри диапазона на целевом блоке. Вычтите feeGrowthInsideLastX128 с правилами беззнакового переполнения реализации, умножьте разницу на ликвидность до изменения и разделите на 2^128.

liquidity = 100
feeGrowthInside change = 2^128 / 4
new tokens owed = floor(100 / 4) = 25

В примере к причитающемуся добавляется 25 минимальных единиц. Burn с нулевым количеством для существующей позиции с ликвидностью может обновить учёт без снятия ликвидности. Различайте этот шаг и последующий перевод collect.

Не называйте все причитающиеся суммы комиссиями

После удаления ликвидности к причитающемуся может добавиться основная сумма позиции. Для классификации перевода учитывайте вместе burn, обновление позиции и collect. У позиций под управлением NFT есть дополнительный слой учёта. github.com Position.sol