안전한 Uniswap v4 훅 구축 노트

안전한 Uniswap v4 훅 구축

Uniswap v4는 개발자가 동적 수수료 및 외부 통합과 같은 풀 동작을 사용자 정의할 수 있도록 하는 훅(hooks)을 도입합니다. 이는 Cork 및 Bunni 익스플로잇이 총 2천만 달러 이상을 초래한 것처럼 보안 책임을 애플리케이션 및 훅 코드에 이전합니다. 이러한 익스플로잇은 Uniswap v4 핵심 프로토콜 결함이 아닌 애플리케이션 수준 로직에서 비롯되었습니다. 감사 분석에 따르면 훅 코드에는 일곱 가지 일반적인 실패 패턴이 있습니다.PoolManager는 이제 모든 풀 상태를 보유하며, 훅은 특정 라이프사이클 지점에서 실행되는 독립적인 계약처럼 작동합니다. 풀의 식별자에는 훅 주소가 포함되므로 잘못된 PoolKey를 신뢰하면 상호 작용하는 풀에 영향을 미칩니다. 플래시 론과 유사한 세션 기반 모델은 트랜잭션 종료 시 통화 델타가 0으로 정산되도록 보장합니다. 훅 개발자는 호출자 권한 부여, 합법적인 풀, 사용자 정의 회계 및 외부 통합 안전을 포함한 가정을 검증해야 합니다.치명적인 실패는 호출자를 확인하지 않아 훅 함수에 대한 직접적인 악의적인 호출을 허용하는 것입니다. BaseHook 및 SafeCallback과 onlyPoolManager를 사용하면 호출자 확인을 강제하는 데 도움이 됩니다. 또 다른 문제는 모든 풀을 합법적인 것으로 취급하는 것입니다. 훅은 표준 풀에 바인딩하거나 허용 목록을 유지하고 PoolIds를 다시 확인해야 합니다. 사용자 정의 회계 버그는 정산이 전체 델타만 확인하고 내부 훅 회계 정확성은 확인하지 않기 때문에 값을 조용히 누출할 수 있습니다.개발자는 beforeSwap은 스왑 전 데이터를 사용하고 afterSwap은 스왑 후 데이터를 사용하므로 의도된 상태에 대한 로직을 올바른 훅에 배치해야 합니다. 훅 주소 자체는 권한을 인코딩합니다. 개발자는 오류를 방지하기 위해 이러한 비트를 구현된 함수와 동기화해야 합니다. 마지막으로 훅 실패는 풀 작업을 차단할 수 있습니다. 필수 로직은 되돌려 사용자 흐름을 차단해서는 안 되며, 외부 종속성은 서비스 거부를 방지하기 위해 신중하게 처리해야 합니다.
CdXz5zHNQW_VfsrNpCh6P.webp