Files
237-combo/examples/subgraphs/cross-protocol-analytics.graphql
2026-02-09 21:51:30 -08:00

147 lines
3.0 KiB
GraphQL

# Cross-Protocol Analytics: Query data across multiple protocols
#
# This is a conceptual example showing how you might query multiple subgraphs
# to analyze cross-protocol strategies and positions.
#
# In production, you would:
# 1. Query multiple subgraphs (Uniswap, Aave, etc.)
# 2. Combine the data
# 3. Calculate metrics like:
# - Total TVL across protocols
# - Cross-protocol arbitrage opportunities
# - User positions across protocols
# - Protocol interaction patterns
# Example: Query user's Aave position and Uniswap LP positions
# (This would require querying two separate subgraphs and combining results)
# Query 1: Get user's Aave positions
# (Use Aave subgraph - see aave-positions.graphql)
# Query 2: Get user's Uniswap v3 positions
query GetUserUniswapPositions($userAddress: String!) {
positions(
where: { owner: $userAddress }
first: 100
) {
id
owner
pool {
id
token0 {
symbol
}
token1 {
symbol
}
feeTier
}
liquidity
depositedToken0
depositedToken1
withdrawnToken0
withdrawnToken1
collectedFeesToken0
collectedFeesToken1
transaction {
timestamp
}
}
}
# Query 3: Get protocol volumes (for analytics)
query GetProtocolVolumes {
# Uniswap volume (example)
uniswapDayDatas(
orderBy: date
orderDirection: desc
first: 30
) {
date
dailyVolumeUSD
totalVolumeUSD
tvlUSD
}
# Aave volume (example - would need Aave subgraph)
# aaveDayDatas {
# date
# dailyDepositsUSD
# dailyBorrowsUSD
# totalValueLockedUSD
# }
}
# Query 4: Get token prices across protocols
query GetTokenPrices($tokenAddress: String!) {
# Uniswap price
token(id: $tokenAddress) {
id
symbol
name
decimals
derivedETH
poolCount
totalValueLocked
totalValueLockedUSD
volume
volumeUSD
feesUSD
txCount
pools {
id
token0 {
symbol
}
token1 {
symbol
}
token0Price
token1Price
totalValueLockedUSD
}
}
# Aave reserve price (would need Aave subgraph)
# reserve(id: $tokenAddress) {
# id
# symbol
# price {
# priceInUsd
# }
# }
}
# Query 5: Get arbitrage opportunities
# (Conceptual - would require real-time price comparison)
query GetArbitrageOpportunities {
# Get pools with significant price differences
# This is a simplified example - real arbitrage detection is more complex
pools(
where: {
# Filter by high volume and liquidity
totalValueLockedUSD_gt: "1000000"
volumeUSD_gt: "100000"
}
orderBy: volumeUSD
orderDirection: desc
first: 50
) {
id
token0 {
symbol
}
token1 {
symbol
}
token0Price
token1Price
feeTier
volumeUSD
tvlUSD
# Compare with prices from other DEXes/AMMs
# (would require additional queries)
}
}