Substreams-based Uniswap-v3 Substreams-powered-subgraph.
This module emits EntityChanges, and are written directly to graph-node
without any AssemblyScript mappings therein.
This module covers all of the entities of the original v3-subgraph
by the Uniswap team. It syncs much faster.
Launch the devpod above and run:
substreams auth
substreams build
substreams gui
Alternatively, run the graph_out
module against a Substreams cluster, without building it locally:
substreams run -t +150 uniswap-v3@latest graph_out
[...]
{
"@module": "graph_out",
"@block": 12369621,
"@type": "sf.substreams.entity.v1.EntityChanges",
"@data": {
"entityChanges": [
{
"entity": "Factory",
"id": "1f98431c8ad98523631ae4a59f267346ea31f984",
"ordinal": "1",
"operation": "CREATE",
"fields": [
{
"name": "id",
"newValue": {
"string": "1f98431c8ad98523631ae4a59f267346ea31f984"
}
},
{
"name": "poolCount",
"newValue": {
"bigint": "0"
}
},
[...]
]
},
{
"entity": "Pool",
"id": "1d42064fc4beb5f8aaf85f4617ae8b3b5b8bd801",
"ordinal": "927",
"operation": "UPDATE",
"fields": [
{
"name": "totalValueLockedToken0",
"newValue": {
"bigdecimal": "0.9999999999999999240000000000003427709097170609759698726797493006923644998096278868615627288818359375"
},
"oldValue": {
"bigdecimal": "0"
}
}
]
},
[...]
]
}
}
substreams-uniswap-v3
make build
[...]
substreams run -e mainnet.eth.streamingfast.io:443 substreams.yaml graph_out -t +150
[...]
try it :)
substreams pack substreams.yaml
This module will loop over block transactions and detect pools created events.
Once the pool created events have been detected, Pools
structs will be emitted out of the module.
Try with
substreams gui substreams.yaml map_pools_created -t +1000
substreams gui uniswap-v3@v0.2.11 map_pools_created
This modules loops over the pools created and emits ERC20Tokens
structs out of the module.
Tokens part of the pair of a pool are checked against the WHITELIST_TOKENS
constant to see
if they are part of the list. If so push the address of the pool in the field whitelist_pools
of the token.
Try with
substreams gui substreams.yaml map_tokens_whitelist_pools -t +1000
substreams gui uniswap-v3@v0.2.11 map_tokens_whitelist_pools
Chunky module which emits multiple types of Events
. Looping over every transaction to filter out Events
.
For some events, we have to loop over StorageChanges
to be able to fetch certain changes such as liquidity
increases and decreases.
For more information on what the Event
contains, check proto/uniswap/v1/uniswap.proto.
Try with
substreams gui substreams.yaml map_extract_data_types -t +1000
substreams gui uniswap-v3@v0.2.11 map_extract_data_types
EntityChanges
emitted out for all the entities defined in the schema.graphql
for the Uniswap v3 Subgraph.
substreams gui uniswap-v3@v0.2.11 graph_out
This module stores the Pools emitted by the map_pools_created
module.
Dynamic data sources pattern for Uniswap v3 pools.
substreams gui uniswap-v3@v0.2.11 store_pools_created
Int64
store accumulator for each time a token is used for any combination for a pool.
substreams gui uniswap-v3@v0.2.11 store_tokens
BigInt
store accumulator for each time a pool is created.
substreams gui uniswap-v3@v0.2.11 store_pool_count
String
appender store which stores the whitelist_pools
field of a token.
substreams gui uniswap-v3@v0.2.11 store_tokens_whitelist_pools
Store setter for PoolSqrtPrice
emitted out of the map_extract_data_types
.
substreams gui uniswap-v3@v0.2.11 store_pool_sqrt_price
BigDecimal
store setter for storing the price of token0 <> token1 and vice versa.
Also store the Daily and Hourly prices.
For example: Pool: TOKEN0 <> TOKEN1 - pool:{pool_address}:{token0_addr}:token0 -> 100 - pool:{pool_address}:{token1_addr}:token1 -> 1 This means that the price of TOKEN0 is 100 for 1 TOKEN1
substreams gui uniswap-v3@v0.2.11 store_prices
BigInt
store setter for storing pool liquidites which were extracted from map_extract_data_types
.
substreams gui uniswap-v3@v0.2.11 store_pool_liquidities
BigInt
accumulator store for the total transaction counts for pools, tokens, factory,
daily factory, daily and hourly for token and pool data.
substreams gui uniswap-v3@v0.2.11 store_total_tx_counts
BigDecimal
accumulator store for the swap volume of various entries such as amount0_abs
, amount1_abs
,
volume_usd
, volume_usd_untracked
, volume_eth
, fee_usd
and fee_eth
. The _0
and _1
entries
are the value of one token for another token.
substreams gui uniswap-v3@v0.2.11 store_swaps_volume
BigDecimal
setter store for the native amounts out of any Event
type: Mint
, Swap
and Burn
amounts
(amount0 and amount1).
substreams gui uniswap-v3@v0.2.11 store_native_amounts
BigDecimal
setter store for the eth_price
. This module uses a multiple stores and map_extract_data_types
to find the eth_price
of any given token. If a pool contains a token which has a pair with a well-known token, the eth_price
is easily found.
Stores the USD price of ETH.
For example:
- Pool: DAI <> WBTC -> we check if there is a pool with DAI <> ETH and easily derive the price
- Pool: ANYTOKEN0 <> DAI -> we can derive the price by finding the pool DAI <> ETH
- Pool: ANYTOKEN0 <> ANYTOKEN1 -> more complicated case where we have to check on either side of the pool
and try to find a path to reach a whitelisted_token
which has a pool with ETH to be able to derive the price
substreams gui uniswap-v3@v0.2.11 store_eth_prices
BigDecimal
accumulator store for the total_value_locked
for tokens.
substreams gui uniswap-v3@v0.2.11 store_token_tvl
BigDecimal
accumulator store for the derived total_value_locked
in USD
, ETH
, USDUntracked
and ETHUntracked
for
pools and tokens.
substreams gui uniswap-v3@v0.2.11 store_derived_tvl
BigDecimal
accumulator store for the derived total_value_locked
in USD
, ETH
, USDUntracked
and ETHUntracked
for the factory.
substreams gui uniswap-v3@v0.2.11 store_derived_factory_tvl
BigInt
accumulator store for the liquidities of the pools. Tracking liquidityGross
and liquidityNet
for pool values at all times,
daily and hourly for Mint
and Burn
events.
substreams gui uniswap-v3@v0.2.11 store_ticks_liquidities
PositionEvent
setter store for Position
Events emitted out of map_extract_data_types
. CreatedPosition
, IncreaseLiquidityPosition
,
DecreaseLiquidityPosition
, CollectPosition
and TransferPosition
are stored.
substreams gui uniswap-v3@v0.2.11 store_positions
BigDecimal
minimum store for the price of eth
and token prices for open
and low
for daily and hourly.
substreams gui uniswap-v3@v0.2.11 store_min_windows
BigDecimal
maximum store for the price of eth
and token prices for open
and low
for daily and hourly.
substreams gui uniswap-v3@v0.2.11 store_max_windows