Uniswap V3: collect()가 “Collect Fees” 이상의 의미일 때

발행: (2026년 2월 6일 오전 08:11 GMT+9)
4 min read
원문: Dev.to

Source: Dev.to

개요

Uniswap V3는 집중된 유동성, 포지션을 위한 NFT, 그리고 훨씬 더 표현력이 풍부하지만 — 동시에 더 미묘한 — 이벤트 모델을 도입했습니다. 이러한 설계의 한 결과로, 온‑체인 이벤트는 완전히 정확할 수 있지만 최종 사용자에게는 의미상 혼란을 줄 수 있습니다.

“Collect” 액션

일반적인 가정

많은 사용자(그리고 일부 대시보드)에게는:

collect() = collect earned fees

Uniswap V3 포지션이 나타내는 것

  • Liquidity
  • Fee growth inside the tick range
  • Last fee checkpoints

일반적인 종료 흐름

  1. decreaseLiquidity()
  2. collect()

핵심 nuance

collect()는 두 가지 다른 항목을 묶을 수 있습니다:

  • Accrued fees (실제 수익)
  • Leftover liquidity (돌려받는 원금)

이는 특히 다음 상황에서 발생합니다:

  • 유동성이 완전히 제거될 때
  • 포지션이 종료될 때
  • 포지션에 아직 지급해야 할 금액이 남아 있을 때

프로토콜 관점에서는 이는 완전히 유효합니다:

  • 포지션에 대한 모든 지급이 이루어짐
  • 모든 값이 이벤트 로그에 정확히 기록됨

하지만 수수료와 원금은 의미상 매우 다른 개념입니다.

프로토콜 vs. 사용자 관점

대부분의 탐색기(이더스캔 포함)는 로그 수준을 올바르게 처리합니다:

  • Collect 이벤트를 충실히 디코드
  • 계약이 방출한 금액을 표시
  • 함수/이벤트 이름에 따라 동작을 라벨링

문제는 디코딩 정확도가 아니라 로그‑레벨 정확성사용자‑레벨 의미 명확성 사이의 격차입니다.

사용자에게 보이는 모호성

  • “Collect: 12,000 USDC”
  • vs. “Fees earned: 1,200 USDC” & “Liquidity returned: 10,800 USDC”

프로토콜 컨텍스트가 없으면 이 의미들을 구분할 수 없습니다.

디코딩 어려움

단일 이벤트만 디코딩해서는 수수료와 유동성을 신뢰성 있게 구분할 수 없습니다. 이를 올바르게 수행하려면:

  1. 트랜잭션 내 모든 이벤트 로그를 디코드합니다.
  2. removeLiquidity 이벤트와 collect 이벤트를 감지합니다.
  3. collect 이벤트에서 “Liquidity return”와 “Fee earned” 금액을 추출합니다.

이벤트는 여전히 저수준이며 조합 가능한 형태이므로, 의미는 상태를 재구성할 때 비로소 나타납니다. 이는 “무슨 일이 일어났는가”와 “사용자는 무엇이 일어났다고 생각하는가” 사이에 UX 격차를 만들게 됩니다.

데이터 빌더에게 주는 시사점

  • 정확한 디코딩이 기본선입니다.
  • 높은 수준의 의미를 구축하려면 여러 이벤트를 집계하고 상태를 재구성해야 합니다.

참고 자료

  • Transaction decoding API – 이더리움, Base, BSC, Solana 등에서 블록체인 데이터를 하나의 통합된, 읽기 쉬운 스키마로 표준화
    • 웹사이트:
    • X (Twitter):
    • 텔레그램:
    • 공지사항:
    • 미디엄:
Back to Blog

관련 글

더 보기 »