Package Logo
host_uniswap_v3
host_uniswap_v3@v0.2.11
Total Downloads
4
Published
1 weeks ago
Network
mainnet mainnet
Publisher
User Avatar hostel

Readme

Uniswap v3 Substreams package

Substreams Package

[SVG and data: images/links are blocked for security reasons]

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"
            }
          }
        ]
      },
[...]
    ]
  }
}

Hack on it

Build substreams-uniswap-v3

make build
[...]
substreams run  -e mainnet.eth.streamingfast.io:443 substreams.yaml graph_out -t +150
[...]
try it :)

Pack everything to release

substreams pack substreams.yaml

Documentation

Modules

Maps icon
Maps

map
map_pools_created

ab491f643ac7e866ea4a87703066431041c4dbbf
map map_pools_created (
blocksf.ethereum.type.v2.Block
)  -> uniswap.types.v1.Pools

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 host-uniswap-v3@v0.2.11 map_pools_created

map
map_tokens_whitelist_pools

11740bcb5c2ec6f7f058a3d9684710e155e10dc9

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 host-uniswap-v3@v0.2.11 map_tokens_whitelist_pools

map
map_extract_data_types

85ead04993275f6ee7478809daeac5f549885fae

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 host-uniswap-v3@v0.2.11 map_extract_data_types

map
graph_out

32376aff1c570fef16a570f4700aa68f423a915b

EntityChanges emitted out for all the entities defined in the schema.graphql for the Uniswap v3 Subgraph.

substreams gui host-uniswap-v3@v0.2.11 graph_out
Stores icon
Stores

store
store_pools_created

1e61bee2c8350ef022d00bc1366979790e666f4d

This module stores the Pools emitted by the map_pools_created module. Dynamic data sources pattern for Uniswap v3 pools.

substreams gui host-uniswap-v3@v0.2.11 store_pools_created

store
store_tokens

21f68a3b4b30d1bc8e576f3551e1f90bbeb5e2c2
store <add,int64> store_tokens (
)

Int64 store accumulator for each time a token is used for any combination for a pool.

substreams gui host-uniswap-v3@v0.2.11 store_tokens

store
store_pool_count

09accd4de6ef919f193707d8297f49f9201ea374
store <add,bigint> store_pool_count (
)

BigInt store accumulator for each time a pool is created.

substreams gui host-uniswap-v3@v0.2.11 store_pool_count

store
store_tokens_whitelist_pools

06d39e0748ed81bdaf459071aff1c829371a0a7c
store <append,string> store_tokens_whitelist_pools (
)

String appender store which stores the whitelist_pools field of a token.

substreams gui host-uniswap-v3@v0.2.11 store_tokens_whitelist_pools

store
store_pool_sqrt_price

ca0d9863eccf8637c45bc376d0e139929d0bac91

Store setter for PoolSqrtPrice emitted out of the map_extract_data_types.

substreams gui host-uniswap-v3@v0.2.11 store_pool_sqrt_price

store
store_prices

d5c16a0407dac31f453ec9aaa3601d749ae903db

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 host-uniswap-v3@v0.2.11 store_prices

store
store_pool_liquidities

5a7c80c92fe2bc3a228ba1b76ce7e0be96dd5fba
store <set,bigint> store_pool_liquidities (
)

BigInt store setter for storing pool liquidites which were extracted from map_extract_data_types.

substreams gui host-uniswap-v3@v0.2.11 store_pool_liquidities

store
store_total_tx_counts

ffeb8fbc693de82fdbf88deb62a2faf072608cc8
store <add,bigint> store_total_tx_counts (
)

BigInt accumulator store for the total transaction counts for pools, tokens, factory, daily factory, daily and hourly for token and pool data.

substreams gui host-uniswap-v3@v0.2.11 store_total_tx_counts

store
store_swaps_volume

25f2bc05bcc28a31f488df63643e02f211d064d1

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 host-uniswap-v3@v0.2.11 store_swaps_volume

store
store_native_amounts

713a214a5b5139b42436022c4be5a0dbbd5f7b64
store <set,bigdecimal> store_native_amounts (
)

BigDecimal setter store for the native amounts out of any Event type: Mint, Swap and Burn amounts (amount0 and amount1).

substreams gui host-uniswap-v3@v0.2.11 store_native_amounts

store
store_eth_prices

833256bc97bf7e68779afbf8bf9f0bd2bb09e935
store <set,bigdecimal> store_eth_prices (
store_pricesGET<set,bigdecimal>
store_native_amountsGET<set,bigdecimal>
store_pool_liquiditiesGET<set,bigint>
)

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 host-uniswap-v3@v0.2.11 store_eth_prices

store
store_token_tvl

c14fcc887802d1ccfdbbf0bf813dcbfd7839d30c
store <add,bigdecimal> store_token_tvl (
)

BigDecimal accumulator store for the total_value_locked for tokens.

substreams gui host-uniswap-v3@v0.2.11 store_token_tvl

store
store_derived_tvl

6093d385ab8a683c21073f9c03c4e764a08f0751
store <set,bigdecimal> store_derived_tvl (
store_token_tvlGET<add,bigdecimal>
store_eth_pricesGET<set,bigdecimal>
)

BigDecimal accumulator store for the derived total_value_locked in USD, ETH, USDUntracked and ETHUntracked for pools and tokens.

substreams gui host-uniswap-v3@v0.2.11 store_derived_tvl

store
store_derived_factory_tvl

9403000516d0cfddc17d01141e71d010c9a93514
store <add,bigdecimal> store_derived_factory_tvl (
store_derived_tvlDELTAS<set,bigdecimal>
)

BigDecimal accumulator store for the derived total_value_locked in USD, ETH, USDUntracked and ETHUntracked for the factory.

substreams gui host-uniswap-v3@v0.2.11 store_derived_factory_tvl

store
store_ticks_liquidities

c22edb5cc29d325a1c7483d4052699f67945fa5d
store <add,bigint> store_ticks_liquidities (
)

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 host-uniswap-v3@v0.2.11 store_ticks_liquidities

store
store_positions

d22519a80d1ae36b4f473f77b12d39da35e852f4

PositionEvent setter store for Position Events emitted out of map_extract_data_types. CreatedPosition, IncreaseLiquidityPosition, DecreaseLiquidityPosition, CollectPosition and TransferPosition are stored.

substreams gui host-uniswap-v3@v0.2.11 store_positions

store
store_min_windows

15aa6555e9ecda6691a9a79409aceb9a76acbca9
store <min,bigdecimal> store_min_windows (
store_pricesDELTAS<set,bigdecimal>
store_eth_pricesDELTAS<set,bigdecimal>
)

BigDecimal minimum store for the price of eth and token prices for open and low for daily and hourly.

substreams gui host-uniswap-v3@v0.2.11 store_min_windows

store
store_max_windows

0455888ffd1e4f595e7491614a7fa055a05af192
store <max,bigdecimal> store_max_windows (
store_pricesDELTAS<set,bigdecimal>
store_eth_pricesDELTAS<set,bigdecimal>
)

BigDecimal maximum store for the price of eth and token prices for open and low for daily and hourly.

substreams gui host-uniswap-v3@v0.2.11 store_max_windows
Protobuf

Protobuf Docs Explorer

uniswap.types.v1