Nabarun Gogoi
be519e9ca0
* Split graph-node stack to run independently * Fix sushiswap subgraph config in fixturenet stack
205 lines
5.2 KiB
Markdown
205 lines
5.2 KiB
Markdown
# Fixturenet SushiSwap Subgraph
|
|
|
|
## Setup
|
|
|
|
Clone required repositories:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph setup-repositories --pull
|
|
```
|
|
|
|
Checkout to a non-default branch in the cloned repos if required:
|
|
|
|
```bash
|
|
# Default repo base dir
|
|
cd ~/cerc
|
|
|
|
# Example
|
|
cd graph-node
|
|
git checkout <your-branch> && git pull
|
|
|
|
# Remove the corresponding docker image if it already exists
|
|
docker image rm cerc/graph-node:local
|
|
# Remove any dangling images
|
|
docker image prune
|
|
```
|
|
|
|
Build the container images:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph build-containers
|
|
```
|
|
|
|
## Deploy
|
|
|
|
Deploy the stack:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph up
|
|
|
|
# Note: Remove any existing volumes for the cluster for a fresh start
|
|
```
|
|
|
|
After all services have started:
|
|
|
|
* Follow `graph-node` logs:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph logs -f graph-node
|
|
```
|
|
|
|
* Check that the subgraphs have been deployed:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph logs -f sushiswap-subgraph-v3
|
|
|
|
# Expected output:
|
|
# .
|
|
# .
|
|
# sushigraph-sushiswap-subgraph-v3-1 | - Deploying to Graph node http://graph-node:8020/
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Deployed to http://graph-node:8000/subgraphs/name/sushiswap/v3-lotus/graphql
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Subgraph endpoints:
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Queries (HTTP): http://graph-node:8000/subgraphs/name/sushiswap/v3-lotus
|
|
# .
|
|
# .
|
|
# sushigraph-sushiswap-subgraph-v3-1 | - Deploying to Graph node http://graph-node:8020/
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Deployed to http://graph-node:8000/subgraphs/name/sushiswap/blocks/graphql
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Subgraph endpoints:
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Queries (HTTP): http://graph-node:8000/subgraphs/name/sushiswap/blocks
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 |
|
|
# sushigraph-sushiswap-subgraph-v3-1 | Done
|
|
```
|
|
|
|
After `graph-node` has fetched the latest blocks from upstream, use the subgraph (GQL) endpoints for querying:
|
|
|
|
```bash
|
|
# Find out the mapped host port for the subgraph endpoint
|
|
laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph port graph-node 8000
|
|
# 0.0.0.0:HOST_PORT
|
|
|
|
# Blocks subgraph endpoint:
|
|
http://127.0.0.1:<HOST_PORT>/subgraphs/name/sushiswap/blocks/graphql
|
|
|
|
# v3 subgraph endpoint:
|
|
http://127.0.0.1:<HOST_PORT>/subgraphs/name/sushiswap/v3-lotus/graphql
|
|
```
|
|
|
|
## Run
|
|
|
|
* Deploy an ERC20 token:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-periphery-1 yarn hardhat --network docker deploy --tags TestERC20
|
|
|
|
# Deploy two tokens and set the addresses to variables TOKEN1_ADDRESS and TOKEN2_ADDRESS
|
|
export TOKEN1_ADDRESS=<TOKEN1_ADDRESS>
|
|
export TOKEN2_ADDRESS=<TOKEN2_ADDRESS>
|
|
```
|
|
|
|
* Get contract address of factory deployed:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-core-1 jq -r '.address' /app/deployments/docker/UniswapV3Factory.json
|
|
|
|
# Set the address to variable FACTORY_ADDRESS
|
|
export FACTORY_ADDRESS=<FACTORY_ADDRESS>
|
|
```
|
|
|
|
* Create a pool:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:create:docker --factory $FACTORY_ADDRESS --token0 $TOKEN1_ADDRESS --token1 $TOKEN2_ADDRESS --fee 500
|
|
|
|
# Set the created pool address to variable POOL_ADDRESS
|
|
export POOL_ADDRESS=<POOL_ADDRESS>
|
|
```
|
|
|
|
* Initialize the pool:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:initialize:docker --sqrt-price 4295128939 --pool $POOL_ADDRESS
|
|
```
|
|
|
|
* Set the recipient address to the contract deployer:
|
|
|
|
```bash
|
|
export RECIPIENT=0xD375B03bd3A2434A9f675bEC4Ccd68aC5e67C743
|
|
```
|
|
|
|
* Trigger pool `Mint` event:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:mint:docker --pool $POOL_ADDRESS --recipient $RECIPIENT --amount 10
|
|
```
|
|
|
|
* Trigger pool `Burn` event:
|
|
|
|
```bash
|
|
docker exec -it sushigraph-sushiswap-v3-core-1 pnpm run pool:burn:docker --pool $POOL_ADDRESS --amount 10
|
|
```
|
|
|
|
* Query the sushiswap v3-lotus subgraph GQL after running above commands
|
|
|
|
```graphql
|
|
{
|
|
_meta {
|
|
block {
|
|
number
|
|
}
|
|
deployment
|
|
hasIndexingErrors
|
|
}
|
|
|
|
factories {
|
|
poolCount
|
|
id
|
|
}
|
|
|
|
pools {
|
|
id
|
|
token0 {
|
|
id
|
|
name
|
|
symbol
|
|
}
|
|
mints {
|
|
id
|
|
owner
|
|
}
|
|
burns {
|
|
id
|
|
owner
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Clean up
|
|
|
|
Stop all the services running in background run:
|
|
|
|
```bash
|
|
laconic-so --stack fixturenet-sushiswap-subgraph deploy --cluster sushigraph down
|
|
```
|
|
|
|
Clear volumes created by this stack:
|
|
|
|
```bash
|
|
# List all relevant volumes
|
|
docker volume ls -q --filter "name=sushigraph"
|
|
|
|
# Remove all the listed volumes
|
|
docker volume rm $(docker volume ls -q --filter "name=sushigraph")
|
|
|
|
# WARNING: To avoid refetching the Lotus proof params on the next run,
|
|
# avoid removing the corresponding volumes
|
|
|
|
# To remove volumes that do not contain Lotus params
|
|
docker volume rm $(docker volume ls -q --filter "name=sushigraph" | grep -v "params$")
|
|
```
|