Как вычислить ID пула Uniswap v4 при индексации singleton

Многие пулы v4 используют один адрес PoolManager. Если группировать обмены только по адресу эмитента события, разные пулы сольются в один ряд.

Восстановите полный ключ пула

Возьмите событие инициализации настроенного PoolManager и сохраните упорядоченные валюты, поле комиссии, знаковый шаг тиков и адрес hooks. Вычислите хеш пяти слов ABI по реализации PoolIdLibrary.

PoolId = keccak256(abi.encode(currency0, currency1, fee, tickSpacing, hooks))

Даже при одинаковых валютах и комиссии пулы могут различаться шагом или hooks. Плотная упаковка коротких целых без ABI-слов даст другие байты. Сверьте вычисленный ID с индексированным ID события.

Привяжите ID к развёртыванию

Используйте сеть, адрес PoolManager и ID пула вместе. Одинаковые ключи в разных сетях или менеджерах могут дать одинаковый ID. Сохраняйте исходный ключ: из одного хеша поля не восстановить. github.com PoolId.sol