Can On-Chain Liquidity Data Explain Provider Behavior in Uniswap V3?
Abstract
This article uses on-chain liquidity position data in Uniswap V3 to explain liquidity provider (LP) behavior. Using data extracted from the NonfungiblePositionManager contract, we analyze mint and burn events to characterize how LPs allocate and adjust capital across price ranges, fee tiers, and time. By modeling how liquidity providers historically adjust positions around market prices and volatility, this methodology aims to provide a framework for using position data as potential indicators of market dynamics. The proposed method can be applied both to historical datasets and real-time data streams to monitor liquidity position ranges, and the players in the AMM space.
Full text
Can On-Chain Liquidity Position Data Explain Provider Behavior in Uniswap V3? Divyasshree October 7, 2025 Abstract This article uses on-chain liquidity position data in Uniswap V3 to explain liquidity provider (LP) behavior. Using data extracted from the NonfungiblePositionManager contract, we analyze mint and burn events to characterize how LPs allocate and adjust capital across price ranges, fee tiers, and time. By modeling how liquidity providers historically adjust positions around market prices and volatility, this methodology aims to provide a framework for using position data as potential indicators of market dynamics. The proposed method can be applied both to historical datasets and real-time data streams to monitor liquidity position ranges, and the players in the AMM space. 1 Introduction Uniswap V3 improved automated market makers (AMMs) logic by introducing concentrated liquidity, where liquidity providers can allocate capital within specific price ranges rather than across the entire price spectrum. This allows for more capital-efficient liquidity provision, but introduces complexity in understanding position characteristics and historical liquidity patterns. The key question this article addresses is: Can historical liquidity positions reveal patterns that help us understand liquidity provider behavior and predict price action? This article presents a comprehensive analysis of historical liquidity positions extracted from the Uniswap V3 NonfungiblePositionManager contract to investigate whether position patterns can provide insights into market behavior. Data Availability All processed data and code are available in the GitHub repository: https://github.com/Divyn/ uniswap-v3-position-analysis 1.1 Research Objectives The primary objectives of this research are: 1. Liquidity Provider Behavior Analysis: Understand where and when liquidity providers choose to allocate capital 2. Market Sentiment Indicators: Determine if position concentration patterns can serve as market sentiment indicators 3. Predictive Value: Assess whether historical position data can predict future price action 1
2 Methodology 2.1 Data Source and Architecture Our analysis utilizes the Bitquery Uniswap APIs to query on-chain data directly from the Ethereum blockchain. The methodology focuses on two primary data sources: 1. Position Data: Direct calls to the positions function of the Uniswap V3 NonfungiblePositionManager contract (address: 0xC36442b4a4522E871399CD717aBDD847Ab11FE88) 2. Mint Events: Historical mint events representing liquidity addition transactions 3. Position Creators: Analysis of liquidity providers who create positions through mint events The system architecture consists of four main components: Listing 1: BitqueryClient Class Structure 1class BitqueryClient: 2def get_historical_positions (self , start_date , end_date ) 3def get_recent_positions_realtime (self) 4def get_historical_mint_events (self , start_date , end_date ) 5def get_recent_position_creators (self) 6def get_token_decimals (self , token_addresses ) 2.2 Position Data Extraction The position extraction process involves querying the positions function for each unique token ID. The logic of the query is summarized below: Algorithm 1 Retrieve Uniswap V3 Positions Require: start date,end date,contract address =0xC36442b4a4522E871399CD717aBDD847Ab11FE88 1: Select dataset = archive or realtime, network = Ethereum mainnet 2: Filter calls where Signature Name is "positions" and To equals contract address 3: Restrict by Block Date: after start date and before end date 4: Set pagination limit to X and order by descending Block Number 5: For each call, read: Arguments (tokenId), Returns (position fields), Transaction,Block Ensure: Output list of positions with fields: token0, token1, liquidity, fee, tickLower, tickUpper Each position returns the following key parameters: •token0 and token1: The two tokens in the liquidity pair •liquidity: The current liquidity amount (L) •fee: The fee tier (500, 3000, or 10000 for 0.05%, 0.3%, or 1%) •tickLower and tickUpper: The price range bounds in tick space 2
Algorithm 2 Price Band Calculation Algorithm Require: tick ∈Z,token0decimals ∈N,token1decimals ∈N Ensure: price ∈R 1: price unadjusted ←(1.0001)tick 2: decimal adjustment ←10(token0decimals−token1decimals) 3: final price ←price unadjusted ×decimal adjustment 4: return final price 2.3 Price Band Calculation Algorithm The core innovation of this methodology is the precise calculation of price bands from tick data. Uniswap V3 uses a tick-based pricing system where each tick represents a specific price point. This algorithm accounts for the exponential nature of the tick system and adjusts for token decimal differences, ensuring accurate price calculations across all token pairs. The mathematical foundation is based on Uniswap V3’s pricing formula: P= (1.0001)tick ×10(d0−d1) Where: •Pis the price of token0 in terms of token1 •tick is the tick value •d0and d1are the decimal places of token0 and token1 respectively Note on Token Decimals: All on-chain data requires decimal normalization, as ERC-20 tokens store values as integers scaled by 10decimals. Our implementation queries token metadata to ensure accurate conversion of raw blockchain values to human-readable amounts. 2.4 Mint Event Analysis To understand historical liquidity addition patterns, we analyze mint events representing new position creation: Listing 2: Mint Arguments Parser 1def parse_mint_burn_arguments(arguments: list) -> dict: 2""" Parse mint / burn function arguments to extract position parameters "" " 3params = {} 4 5for arg in arguments : 6index = arg. get(’Index ’, -1) 7value = arg. get(’Value ’, {}) 8 9# Index mapping for mint parameters : 10 # 0: token0 , 1: token1 , 2: fee , 3: tickLower , 4: tickUpper 11 # 5: amount0Desired , 6: amount0Min , 7: amount1Desired , 8: amount1Min 12 # 9: recipient , 10: deadline 13 3
14 if index == 0: params [’token0’] = value [’address’] 15 elif index == 1: params [ ’token1’] = value [ ’address’] 16 elif index == 3: params [ ’tickLower ’] = int( value [ ’bigInteger ’]) 17 elif index == 4: params [ ’tickUpper ’] = int( value [ ’bigInteger ’]) 18 # ... additional parameter extraction 19 20 return params Important Technical Note: In Uniswap V3’s NonfungiblePositionManager, mint and burn events operate differently with respect to position identification: •Mint events create new liquidity positions with full parameters (token0, token1, fee tier, tick ranges, amounts, recipient, deadline) and return a unique tokenId representing the newly minted NFT position. •Burn events destroy existing positions by referencing only the tokenId (the NFT position ID), not the underlying token contract addresses. This is because each position is represented as an ERC-721 NFT, and burning destroys the NFT itself by its ID rather than directly referencing the token pair. This distinction is critical for data processing: mint events contain complete position parameters in their arguments, while burn events primarily reference positions by their NFT tokenId. 2.5 Position Creator Analysis To understand liquidity provider behavior patterns, we analyze position creators through mint events to identify the most active and influential liquidity providers. This analysis provides insights into the distribution of liquidity provision activity and helps identify key market participants. 2.5.1 Creator Data Extraction The position creator analysis extracts data from mint events to track which addresses are creating liquidity positions: Algorithm 3 Retrieve Recent Position Creators from Mint Events Require: contract address =0xC36442b4a4522E871399CD717aBDD847Ab11FE88,limit =X 1: Select dataset = realtime (or archive as applicable), network = Ethereum mainnet 2: Filter calls where Signature Name is "mint" and To equals contract address 3: Order by descending Block Number and apply limit = limit 4: For each call, read: Transaction.From (creator), Transaction.Hash,Transaction.Time,Transaction.ValueInUSD 5: Optionally parse Returns values (e.g., tokenId or liquidity parameters) as needed Ensure: Output list of creator entries with activity and optional value metrics 2.5.2 Creator Ranking Methodology The analysis ranks position creators by multiple metrics to understand different aspects of liquidity provider behavior: 1. Position Count: Total number of positions created by each address 4
2. Total Liquidity: Cumulative liquidity provided across all positions 3. Unique Trading Pairs: Diversity of token pairs across positions 4. Temporal Patterns: Position creation timing and price band 2.5.3 Creator Statistics Calculation For each creator address, we calculate comprehensive statistics: •Activity Metrics: Total positions created, first and last position timestamps •Liquidity Metrics: Total liquidity provided, average liquidity per position •Diversity Metrics: Unique trading pairs count, fee tier preferences •Temporal Metrics: Position creation frequency, activity periods Figure 1: Example of a Uniswap V3 liquidity position showing price band configuration 2.6 Burn Event Analysis To complement our analysis of position creation through mint events, we examine position closure patterns through burn events. As previously noted, burn events operate differently from mint events: they only reference the NFT tokenId rather than containing complete position parameters. 2.6.1 Burn Event Data Extraction The burn event analysis extracts position closure data to understand when and how liquidity providers exit their positions: 5
Algorithm 4 Retrieve Burn Events Require: start date,end date,contract address =0xC36442b4a4522E871399CD717aBDD847Ab11FE88, limit =X 1: Select dataset = archive (or realtime as applicable), network = Ethereum mainnet 2: Filter calls where Signature Name is "burn" and To equals contract address 3: Filter by Block Date between start date and end date 4: Order by descending Block Number and apply limit = limit 5: For each call, read: Arguments.tokenId,Transaction.From (burner), Transaction.Hash, Block.Time Ensure: Output list of burn events with tokenId, burner address, and timestamp 2.6.2 Burn Pattern Analysis Our burn event analysis focuses on several key metrics: 1. Token ID Burn Frequency: How many times each NFT position is burned 2. Burner Activity: Distribution of burn operations across wallet addresses 3. Temporal Patterns: Time-of-day and daily distribution of position closures 4. Burner Concentration: Identification of high-activity position closers The analysis reveals patterns in position lifecycle management and can indicate market sentiment shifts when correlated with mint event activity. 3 Results and Analysis 3.1 Dataset Characteristics Our analysis processed 5,711 unique liquidity positions from the Uniswap V3 protocol, spanning multiple token pairs and fee tiers. The dataset includes: •Historical Data: Position data spanning from September 22 to October 7, 2025 •Real-time Data: Recent positions from the live blockchain state •Token Coverage: 205 unique ERC-20 tokens with different decimal configurations •Fee Tiers: Analysis across all Uniswap V3 fee tiers (0.01%, 0.05%, 0.3%, 1%) Note on Time Window Selection: The choice of a 2-week maximum lookback window is deliberate and reflects the dynamic nature of decentralized exchange markets. In DeFi, market conditions, liquidity provider strategies, and token pair dynamics evolve rapidly in response to price movements, protocol updates, and broader market sentiment. Historical data beyond 2 weeks often becomes less relevant for understanding current liquidity provision patterns and predicting near-term behavior, as position strategies that were optimal weeks ago may no longer reflect current market realities. 6
3.2 Position Creator Analysis Results Our analysis of position creators reveals significant insights into liquidity provider behavior patterns. From the mint events analysis, we identified 3,541 unique position creators who created 11,315 total positions during the analysis period. 3.2.1 Top Creator Patterns The creator analysis reveals distinct patterns in liquidity provider behavior: Most Active Creators: •Average Activity: 3.20 positions per creator, showing moderate position creation frequency •Diversified Creators: Some creators spread across multiple trading pairs •Concentrated Creators: Others focus on single token pairs with multiple positions Liquidity Concentration: •High-Value Creators: Single transactions providing liquidity worth over $5.16 million in transaction value, demonstrating significant institutional participation •Fee Tier Preferences: Position creators show strong preference for the 0.3% fee tier (39.5% of mint events), indicating balanced fee/liquidity environments, with significant activity in the 1% tier (28.6%) for more volatile pairs 3.2.2 Creator Behavior Insights The analysis reveals several key patterns in creator behavior: 1. Activity Clustering: Position creation tends to cluster around specific time periods, indicating coordinated or algorithmic trading strategies 2. Pair Specialization: Many creators focus on specific token pairs rather than diversifying across multiple pairs 3. Scale Strategies: Different creators employ different scales - from small, frequent positions to large, concentrated positions 4. Temporal Patterns: Creator activity correlates with market volatility, with increased position creation during periods of price uncertainty 7
Figure 2: Mint events by fee tier showing the distribution of events across 0.01%, 0.05%, 0.3%, and 1% tiers Figure 3: Analysis of position creators showing distribution patterns and activity metrics 3.3 Burn Event Analysis Results Our analysis of burn events over a 2-week period (September 24 - October 7, 2025) reveals significant insights into position closure behavior on Uniswap V3: 3.3.1 Burn Event Statistics The dataset comprises 2,197 total burn events executed by 344 unique burner addresses, yielding an average of 6.39 burns per burner. This concentration suggests that a relatively 8
small group of addresses are responsible for most position closures, indicating potential professional liquidity managers or automated market-making strategies. Key Findings: •Peak Activity: October 6, 2025 saw 274 burn events, representing 12.5% of all burns in the analysis period •Hourly Pattern: Peak burn activity occurred at 20:00 UTC with 32 burns •Daily Distribution: Burn events ranged from 72 (October 7, partial day) to 274 (October 6), with an average of 157 burns per day over the 2-week period •Temporal Clustering: Significant burn activity clustering indicates coordinated responses to market events or price movements 3.3.2 Token ID Burn Patterns Analysis of burn frequency by token ID reveals interesting position lifecycle patterns. Figure 4 shows the distribution of burn counts across NFT positions, where some positions are burned multiple times, indicating either: 1. Position recreation cycles (mint-burn-mint patterns) 2. Multiple liquidity adjustments through complete position closure 3. Position migration strategies across different price ranges Figure 4: Token ID Burn Count distribution showing how many times each NFT position was burned during the analysis period 9