Uniswap V3: When collect() Is More Than “Collect Fees”

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • MyrinNew
    Senior Member
    • Feb 2024
    • 5175

    #1

    Uniswap V3: When collect() Is More Than “Collect Fees”

    Uniswap V3 introduced concentrated liquidity, NFTs for positions, and a much more expressive — but also more subtle — event model.


    One consequence of this design is that on-chain events can be perfectly correct, yet still semantically confusing for end-users.


    A common example is the Collect action.


    The Common Assumption

    For many users (and even some dashboards):


    collect() = collect earned fees


    What Actually Happens in Uniswap V3 when user fully exits a position

    A Uniswap V3 position is an NFT that tracks:
    • liquidity
    • fee growth inside the tick range
    • last fee checkpoints


    When a user wants to exit a position, the flow usually looks like:
    • event: burn - emit with leftover liquidity amount
    • event: collect fee - emit with leftover liquidity amount + fees earned ( the magic thing is here )


    From the protocol’s point of view, this is perfectly valid:


    everything owed to the position is paid out


    all values are emitted correctly in event logs


    But semantically, fees and principal are very different concepts.


    Why Explorers Look “Misleading” (But Aren’t Wrong)

    Most explorers (Etherscan included) do the right thing at the log level:
    • Decode Collect events faithfully
    • Display the amounts emitted by the contract
    • Label the action according to the function/event name


    The problem is not decoding accuracy.


    The problem is that:
    • Log-level correctness ≠ user-level semantic clarity


    For an end-user, seeing:
    • Collect: 21.12 USDT


    raises a very different interpretation than:
    • Fees earned: 21.12 USDT
    • Liquidity returned: 201,762.98 USDT




    Sample transaction:

    Remove 0 USDC And 201,762.98 USDT Liquidity From Uniswap V3 | Success | Feb-05-2026 09:36:23 PM (UTC)



    Why This Is Harder Than It Looks

    You cannot reliably separate fees vs liquidity by:
    • decode a single event


    To do this correctly, you need to:
    • decode all event logs in the transaction
    • detect remove liquidity event, collect fee event
    • extract "Liquidity return" of collect fee earned amount








    A Broader Takeaway for On-Chain Data

    Events remain low-level and composable


    Meaning emerges only when state is reconstructed


    UX gaps grow between “what happened” and “what users think happened”


    For data builders, this is a reminder:


    Accurate decoding is the baseline.

    Semantic decoding is where real understanding begins.





    About txdecoder.xyz




    Transaction decoding API — standardizing blockchain data into one unified, readable schema on Ethereum, Base, BSC, Solana


    Website: https://txdecoder.xyz/

    X: https://x.com/txdecoder_xyz

    Telegram: https://t.me/txdecoder

    Telegram channel: https://t.me/txdecoder_announcements

    Blog: https://medium.com/@txdecoder




    More...
Working...