Uniswap v4는 DeFi에서 가장 중요한 아키텍처 변경 사항 중 하나인 hooks(훅) 기능을 도입했습니다. 이 용어에 대해 들어봤지만 실제로는 무엇을 의미하는지 확실하지 않다면, 본 게시물에서 이를 자세히 설명하고 저희가 구축하여 공식 Uniswap hook registry에 병합시킨 실제 훅 사례를 보여드립니다.
Uniswap v4 Hooks란 무엇인가?
이전 버전의 Uniswap에서는 프로토콜 자체가 사실상 폐쇄적이었습니다. 풀(pool)을 생성하고, 유동성(liquidity)을 추가하며, 토큰 스왑을 할 수는 있었지만, 이러한 작업이 발생하는 과정 자체를 커스터마이징할 수는 없었습니다. 로직은 고정되어 있었습니다.
V4는 hooks를 통해 이를 변경했습니다. hooks란 풀 운영 라이프사이클에 "연결되는(hook into)" 외부 스마트 컨트랙트를 의미합니다. DEX의 미들웨어와 같다고 생각하시면 됩니다.
v4에서 발생하는 모든 주요 풀 작업에는 시작 전 단계(before)와 완료 후 단계(after)가 있습니다:
- beforeSwap / afterSwap: 토큰 스왑 전 또는 후에 실행됩니다.
- beforeAddLiquidity / afterAddLiquidity: 유동성이 추가될 때 실행됩니다.
- beforeRemoveLiquidity / afterRemoveLiquidity: 유동성이 제거될 때 실행됩니다.
- beforeInitialize / afterInitialize: 풀이 처음 생성될 때 실행됩니다.
풀이 생성되면, 풀 생성자가 훅 컨트랙트 주소를 지정합니다. 그 시점부터 해당 풀에서 발생하는 모든 작업은 관련 훅 함수를 호출하게 됩니다. 이 훅은 커스텀 로직을 실행하거나, 동작 방식을 수정하거나, 수수료를 징수하거나, 규칙을 강제하는 등 컨트랙트가 설계된 대로 무엇이든 할 수 있습니다.
핵심 통찰: hooks는 Uniswap 코어 프로토콜 자체를 수정하지 않습니다. 이는 프로토콜이 정의된 지점에서 호출하는 외부 컨트랙트입니다. 즉, 누구나 훅을 작성할 수 있으며, 풀 생성자는 자신의 풀에 어떤 훅(혹은 아무 훅도)을 연결할지 선택할 수 있습니다.
hooks가 중요한 이유
v4 이전에는 DEX에서 커스텀 동작이 필요하다면—예를 들어, 스왑 수수료의 일부를 이해관계자 목록에 분배하는 것과 같은 경우—두 가지 옵션 중 하나를 택해야 했습니다. 프로토콜 전체를 포크(fork)하거나, 풀과 외부적으로 상호 작용하는 래퍼 컨트랙트를 구축하는 것이었습니다. 둘 다 복잡했습니다.
hooks는 이 과정을 네이티브하게 만듭니다. 몇 가지 실제 사용 사례:
- Dynamic fees — 변동성, 시간대 또는 풀 활용도에 따라 스왑 수수료 조정
- On-chain limit orders — 가격이 목표치에 도달했을 때 거래 실행 (온체인 지정가 주문)
- TWAP (time-weighted average price) orders — 대규모 거래를 시간에 걸쳐 분산 (시간 가중 평균 가격(TWAP) 주문)
- Custom access control — 풀에서 거래할 수 있는 주체를 제한 (KYC 풀, DAO 게이티드 풀)
- Revenue distribution — 풀 활동의 일부를 이해관계자에게 자동 배분
마지막 기능이 바로 우리가 구축한 것입니다.
BatchDistributeHook: 작동 방식
저희 후크는 풀 운영자가 Base의 Spraay 배치 계약을 통해 최대 200명의 수신자에게 ERC-20 토큰 또는 네이티브 통화(ETH)를 단일 트랜잭션으로 분배할 수 있게 합니다.
사용 사례: 풀이 수수료나 수익을 창출했을 때, 운영자가 해당 자금을 이해관계자 목록—유동성 공급자, DAO 멤버, 팀 지갑, 커뮤니티 기금 등 어떤 형태의 배열이든 상관없이—에 분배하고자 할 때입니다.
후크가 없다면, 운영자는 수수료를 수동으로 모으고, 지분을 계산한 다음, 각 수신자에게 개별 트랜잭션을 보내야 합니다. 하지만 BatchDistributeHook을 사용하면, 운영자가 배분 함수를 호출하기만 하면 Spraay 배치 계약이 나머지 모든 것을 처리합니다: 단일 온체인 트랜잭션으로 모든 수신자에게 지급되며, 모든 금액은 검증 가능합니다.
이 후크는 Base 상의 Spraay 배치 계약 0xb9c1ab7bd023c784c19b8e9f10ce9cded9ff9010과 상호 작용합니다. 이 주소는 Spraay의 모든 배치 결제 인프라—저희 전자상거래 플러그인, 로봇 차량대금 지불, 게이트웨이 등—가 정산하는 바로 그 계약입니다.
작동 원리
흐름은 간단합니다:
- 풀(pool)은 BatchDistributeHook을 자신의 훅 계약(hook contract)으로 생성합니다.
- 해당 풀은 정상적으로 작동하며, 스왑(swaps), 유동성(liquidity) 등 모든 것이 예상대로 이루어집니다.
- 운영자(operator)가 축적된 토큰을 분배하길 원할 때, 훅의 distribute 함수를 호출합니다.
- 훅은 Spraay 배치 계약(batch contract)이 지정된 양의 토큰을 사용하도록 승인(approves)합니다.
- 배치 계약은 모든 수신자에게 토큰을 전송하는 단일 트랜잭션을 실행합니다.
- 각 수신자의 지분은 온체인(on-chain)에서 정산되며, 누구나 검증할 수 있습니다.
운영자는 수신자 목록과 금액을 정의하고, 훅이 승인 및 계약 상호작용을 처리하며, 배치 계약이 다수의 전송(multi-send)을 효율적으로 처리합니다.
배치당 최대 200명의 수신자를 지원하므로, 여러 트랜잭션이 필요하지 않은 의미 있는 분배 규모까지 확장됩니다.
Uniswap Hook Registry에 통합되다
Uniswap은 공식 훅 레지스트리(hook registry)를 유지하고 있습니다. 이는 개발자들이 v4 생태계를 위해 구축한 훅들의 엄선된 목록입니다. 이 리스트에 등재된다는 것은 해당 훅이 검토되었고, 레지스트리의 기준을 충족했음을 의미합니다.
저희 BatchDistributeHook은 2026년 10월 PR #10617로 Uniswap hooklist에 통합되어 "base에서 BatchDistributeHook 훅 추가"로 등재되었습니다. 이제 공식 v4 훅 생태계의 일부가 되었습니다.
이는 Spraay의 배치 지급 인프라를 Uniswap 개발자 표면(developer surface)에 직접적으로 위치시킨다는 점에서 중요합니다. 분배 솔루션을 찾기 위해 훅 레지스트리를 탐색하는 누구나 저희 훅을 발견하게 되고, 이를 통해 저희 프로토콜 나머지 부분을 구동하는 배치 계약도 함께 접하게 됩니다.
더 큰 그림 (The Bigger Picture)
훅 기능은 아직 초기 단계입니다. 대부분의 v4 풀은 훅 없이 운영되고 있으며, 사용 가능한 훅 생태계 역시 여전히 성장 중입니다. 하지만 이 아키텍처는 강력합니다. Uniswap을 고정된 프로토콜(fixed protocol)에서 프로그래밍 가능한 플랫폼(programmable platform)으로 변화시키기 때문입니다.
저희에게 BatchDistributeHook은 증명 사례(proof point)입니다. 로봇 군단 결제 및 이커머스 벤더 지급액을 정산하는 동일한 배치 계약(batch contract)이 단일 온체인 원시 요소(on-chain primitive)를 통해 DeFi 수익 분배도 처리할 수 있습니다. 이것이 애플리케이션 대신 인프라를 구축하는 것의 장점입니다. 동일한 정산 계층(settlement layer)이 다양한 사용 사례 전반에 걸쳐 작동합니다.
만약 Uniswap v4를 기반으로 구축하고 배치 분배가 필요하다면, 해당 후크(hook)는 레지스트리(registry)에 있습니다. 만약 Base에서 여러 수신자에게 하나의 트랜잭션으로 지급해야 하는 어떤 것을 구축하고 있다면, Spraay 배치 계약(batch contract)이 공개되어 있고 문서화되어 있습니다.
Spraay Protocol은 Plagtech가 구축한 멀티체인 배치 결제 인프라입니다. BatchDistributeHook은 Uniswap v4 hook registry에 등재되어 있습니다. 자세한 내용은 spraay.app에서 확인하세요.