Как определить доступные callback hook по адресу в Uniswap v4
Одного метода с правильным именем недостаточно для вызова hook. Эталонный менеджер v4 выбирает callback по битам разрешений, закодированным в адресе hook.
Проверьте биты фактического адреса из ключа пула
Возьмите uint160 адрес проверенного ключа и примените маски библиотеки Hooks. Для beforeSwap используется 0x80. Отдельно проверяйте разрешения возврата дельты и используйте маски развёрнутой версии.
beforeSwap flag = 1 << 7
(addressBits & 0x80) != 0 → beforeSwap permission bit set
Если ABI содержит beforeSwap, но бит выключен, стандартный менеджер не вызовет его для обычного обмена. Если бит включён, изучите реальную реализацию и её возвращаемые значения.
Не считайте разрешения оценкой безопасности
Биты выбирают точки вызова, но не описывают действия реализации или принимаемые данные. Проверьте код, возможные обновления и симуляцию вызова с нужными hookData и состоянием пула. github.com Hooks.sol