Как вычислить 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